|
Загрузка в спр Номенклатура УТ11 | ☑ | ||
---|---|---|---|---|
0
anisa8310
09.10.13
✎
13:17
|
1С:Предприятие 8.2 (8.2.18.104)
Управление торговлей, редакция 11.1 (11.1.2.9) Дело такое. пишу загрузку в элементы справочника "Номенклатура", добавила реквизит "себестоимость"(строка, 10 длина) -так надо попросили меня так аналитическое поле..из старых запасов-не суть. ВВобщем такая загрузка простая...но ошибку дает : Форма.Форма.Форма(23)}: Значение не является значением объектного типа (Номенклатура) ТекСсыл= Стр.Номенклатура.Ссылка; Вот код загрузки: Процедура КнопкаВыполнитьНажатие(Кнопка) //////////////////Выбор документов "Реализация" для сравнения транзакций /////////////открытие xls-документа Док = ПолучитьCOMОбъект(Путь); счСтроки = 1; /////////////////////////Перебор строк Пока Док.Sheets(1).Cells(счСтроки,1).Value <>Неопределено Цикл Стр=Док.Sheets(1).Cells(счСтроки,1).Value; //////////////Формирование массива услуги Массив = Новый Массив(3); Для Сч=1 По 3 Цикл Позиция = Найти(Стр, ","); Массив.Вставить(сч,Сред(Стр, 1, Позиция-1)); стр = Сред(Стр, Позиция + 1); КонецЦикла; Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1])); ТекСсыл= Стр.Номенклатура.Ссылка; Номенклатура=ТекСсыл.ПолучитьОбъект(); Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1])).Ссылка; Номенклатура.ВариантОформленияПродажи=Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг; Номенклатура.Себестоимость=Строка(Массив[2]); Номенклатура.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.НайтиПоКоду("796"); счСтроки = счСтроки + 1; КонецЦикла; //////////закрываем документ Док.Application.Quit(); КонецПроцедуры Помогите пожалуйта!! А если закомментить эту строку тогда будет говорить: поле объекта недоступно для записи |
|||
1
ProProg
09.10.13
✎
13:17
|
Номенклатура=ТекСсыл.ПолучитьОбъект();
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1])).Ссылка; |
|||
2
anisa8310
09.10.13
✎
13:19
|
(1) это моя ошибка?
|
|||
3
ProProg
09.10.13
✎
13:20
|
да вообще весь код - жесть.
Проверки нет на найден или не найден. В конце вообще записи нет. Массив какой то чекнутый. |
|||
4
anisa8310
09.10.13
✎
13:22
|
(2) я только начала его делать..записи ещё нет-массив простой один реквизит нужно заполнить"себестоимость"- -наименование-ищем, себестоимость-данные . проверка будет это первый вариант если найдет-если не найдет-создаст по такому же принципу
|
|||
5
ProProg
09.10.13
✎
13:24
|
(4) ок.
|
|||
6
anisa8310
10.10.13
✎
12:30
|
вот код загрузки:
Процедура КнопкаВыполнитьНажатие(Кнопка) //////////////////Выбор документов "Реализация" для сравнения транзакций /////////////открытие csv-документа Док = ПолучитьCOMОбъект(Путь); счСтроки = 1; /////////////////////////Перебор строк Пока Док.Sheets(1).Cells(счСтроки,1).Value <>Неопределено Цикл Стр=Док.Sheets(1).Cells(счСтроки,1).Value; //////////////Формирование массива услуги Массив = Новый Массив(2); Для Сч=1 По 2 Цикл Позиция = Найти(Стр, "|"); Массив.Вставить(сч,Сред(Стр, 1, Позиция-1)); стр = Сред(Стр, Позиция + 1); КонецЦикла; Если Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1])).Пустая()=Ложь тогда Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1])).Ссылка; ТекСсылка=Номенклатура.ПолучитьОбъект(); ТекСсылка.ВариантОформленияПродажи=Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг; ТекСсылка.Себестоимость=Строка(Массив[2]); ТекСсылка.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.НайтиПоКоду("796"); ТекСсылка.ИспользованиеХарактеристик=Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать; ТекСсылка.Записать(); Иначе Номенклатура = Справочники.Номенклатура.СоздатьЭлемент(); ТекСсылка=Номенклатура.ПолучитьОбъект(); ТекСсылка.Наименование=Строка(Массив[1]); ТекСсылка.ВариантОформленияПродажи=Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг; ТекСсылка.Себестоимость=Строка(Массив[2]); ТекСсылка.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.НайтиПоКоду("796"); ТекСсылка.ИспользованиеХарактеристик=Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать; ТекСсылка.ВидНоменклатуры=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Ввод начальных остатков"); ТекСсылка.СтавкаНДС=Перечисления.СтавкиНДС.НДС18; ТекСсылка.ТипНоменклатуры=Перечисления.ТипыНоменклатуры.Товар; ТекСсылка.Записать(); КонецЕсли; счСтроки = счСтроки + 1; КонецЦикла; //////////закрываем документ Док.Application.Quit(); КонецПроцедуры Процедура ВыбФайл(Путь) ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбораФайла.Фильтр = "Текстовые файлы (*.csv)|*.csv"; ДиалогВыбораФайла.Заголовок = "Выберите файл для загрузки данных"; ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь; ДиалогВыбораФайла.Расширение ="csv"; ДиалогВыбораФайла.ИндексФильтра = 0; ДиалогВыбораФайла.ПолноеИмяФайла = Путь; Если ДиалогВыбораФайла.Выбрать() Тогда Путь = ДиалогВыбораФайла.ПолноеИмяФайла; КонецЕсли; КонецПроцедуры Процедура Кнопка1Нажатие(Элемент) ВыбФайл(ЭлементыФормы.Путь.Значение); КонецПроцедуры |
|||
7
anisa8310
10.10.13
✎
12:32
|
Но екарный бабай-реквизиты- ВидНоменклатуры
ТипНоменклатуры, СтавкаНДС-они заблокированы как то и не дает устанавливать значение!! помогите что делать??? |
|||
8
Eugeneer
10.10.13
✎
12:32
|
И снова куча ошибок. методических.
|
|||
9
Eugeneer
10.10.13
✎
12:35
|
Вид номенклатуры - Ввод начальных остатков - повеселил.
В остальном все есть пара грубейших ошибок. Опять двойной поиск. Использование Пустая() |
|||
10
Eugeneer
10.10.13
✎
12:36
|
Вот это вообще ВЕСЕЛО
Номенклатура = Справочники.Номенклатура.СоздатьЭлемент(); ТекСсылка=Номенклатура.ПолучитьОбъект(); |
|||
11
Eugeneer
10.10.13
✎
12:36
|
И это тоже!
Если Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1])).Пустая()=Ложь тогда Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1])).Ссылка; |
|||
12
Eugeneer
10.10.13
✎
12:38
|
Я так понял ты в 1С научилась только ставить знак равно.
В остальном всем код нерабочий. И видно что нет понимания что такое ссылки, объекты и новые элементы. |
|||
13
Eugeneer
10.10.13
✎
12:41
|
НайденаНоменклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка(Массив[1]));
Если НЕ НайденаНоменклатура = Справочник.Номенклатура.ПустаяСсылка() тогда ТекСсылка = НайденаНоменклатура.ПолучитьОбъект(); ТекСсылка.ВариантОформленияПродажи=Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг; ТекСсылка.Себестоимость=Строка(Массив[2]); ТекСсылка.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.НайтиПоКоду("796"); ТекСсылка.ИспользованиеХарактеристик=Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать; ТекСсылка.Записать(); Иначе |
|||
14
Eugeneer
10.10.13
✎
12:42
|
Иначе
НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); НоваяНоменклатура.Наименование=Строка(Массив[1]); НоваяНоменклатура.ВариантОформленияПродажи=Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг; НоваяНоменклатура.Себестоимость=Строка(Массив[2]); НоваяНоменклатура.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.НайтиПоКоду("796"); НоваяНоменклатура.ИспользованиеХарактеристик=Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать; НоваяНоменклатура.ВидНоменклатуры=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Ввод начальных остатков"); НоваяНоменклатура.СтавкаНДС=Перечисления.СтавкиНДС.НДС18; НоваяНоменклатура.ТипНоменклатуры=Перечисления.ТипыНоменклатуры.Товар; НоваяНоменклатура.Записать(); |
|||
15
Жан Пердежон
10.10.13
✎
12:44
|
и запрос в цикле
|
|||
16
Eugeneer
10.10.13
✎
12:46
|
Но ты еще к тому же мало реквизитов у новой создаешь.
Там еще есть полное название - тоже нужно. И остальное. Плюс еще на многих вещах оптимизацию пожсно сделать чтобы не вызывать много раз одно. Например один раз в переменную передать вначале СпрНоменклатура = Справочник.Номенклатура; ПустаяСсылка = СпрНоменклатура.пустаяСсылка; НаименованиеЗагрузка = Строка(Массив[1]); и далее везде использовать эти переменные.И не писать пять раз Строка(Массив[1]); |
|||
17
Eugeneer
10.10.13
✎
12:46
|
Да и вообще надо быть уверенным что номенклатура в базе точно по наименованиям имеет четкий критерий поиска.
|
|||
18
Eugeneer
10.10.13
✎
12:47
|
Вот это тоже можно объявить переменной 1 раз еще в самом начале процедуры
Справочники.ЕдиницыИзмерения.НайтиПоКоду("796"); Либо сделать реквизит для выбора в обработке. |
|||
19
anisa8310
10.10.13
✎
13:04
|
(17) да точно есть..она добавила новых немного ...из 496 -110 создала.остальные были и только добавили себестоимость..
|
|||
20
anisa8310
10.10.13
✎
13:05
|
(15) запрос? в цикл запрос добавить? на проверку "себестоимости"?
|
|||
21
anisa8310
10.10.13
✎
13:05
|
(9) ай поставила-так для теста- не знаю что ставить пока..
|
|||
22
anisa8310
10.10.13
✎
13:08
|
Спасибо за отклик! исправлю разберусь что такое ссылки и объекты)) Но ведь вопрос то так и остался-эти реквизиты тип вид НДС-не дает менять или дополнять. только через обработку изменить реквизиты элемента-в режиме предприятия..в УТ11
|
|||
23
Eugeneer
10.10.13
✎
13:30
|
Надо решение - http://subsystems.ru/catalog/27/159/
Остальное чем смог тем помог. Остальное сама решай. |
|||
24
anisa8310
10.10.13
✎
13:49
|
(23) спасибо!!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |