Помогите с программмным добавлением элемента справочника номенклатура

1. Trotter_NN 12.11.15 08:49 Сейчас в теме
При ручном создании элемента номенклатуры ставлю вид товара и Базовую единицу и при нажатии на кнопку записать все остальные единицы проставляются автоматически и также создаётся ссылка для элемента в справочнике единицы измерения.

Но когда я создаю элемент программно, заполняю базовую единицу, всё остальное не проставляется, хотя:
МойЭлемент.Записать(); - вызывает туже функцию ПередЗаписью.
Почему так происходит ?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1535 12.11.15 08:54 Сейчас в теме
(1) Trotter_NN, не перепутал с функцией в форме?
4. Trotter_NN 12.11.15 09:12 Сейчас в теме
(2) Xershi, Да вроде вызывается одна и таже функция в справочнике номенклатуры ПередЗаписью()
(3) Xershi, вот так вот создаю СоздаваемыйЭлемент.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(796);
3. Xershi 1535 12.11.15 08:55 Сейчас в теме
Писать код и для номенклатуры и для единицы измерения ручками.
5. Trotter_NN 12.11.15 09:13 Сейчас в теме
При выборе базовой единицы предопределённой функции вроде не какой не вызывается
6. ditp 94 12.11.15 09:29 Сейчас в теме
1) изучить процедуру "ПроверитьЕдиницуХраненияОстатков" в модуле формы
2) творчески перенести ее в свой модуль
3) не забыть, что создание единиц должно происходить после записи номенклатуры
10. Trotter_NN 12.11.15 10:47 Сейчас в теме
(6) ditp, Записи в справочнике единицы измерения создались по владельцу. Спасибо. Но на форме в двух реквизитах ЕдиницаХраненияОстатков и ЕдиницаДляОтчетов не заполнились, подозреваю из за не отработанного кода:
Попытка
ЗаписатьВФорме();
Исключение
Отказ = Истина;
КонецПопытки;

т.к формы то у меня нету при создании )

Решил проблему просто перезаписать ещё раз элемент и тогда всё ок. Есть какое - то другое решение ?

Не подскажете как создать в добавок ко всему штрих коды для записи в регистр сведений ?
11. PhoenixAOD 62 12.11.15 10:53 Сейчас в теме
(10) Trotter_NN, после записи элемента справочника, обращаешься к месту где хранится у тебя ШК, и туда уже указываешь ссылкой этот справочники, и пишешь шк, если он есть
7. ronhard 12.11.15 09:39 Сейчас в теме
При программном создании элементов справочника вызывается процедура "ПередЗаписью" модуля объекта данного справочника(если таковая есть), а при интерактивном создании плюс к этому еще и функция "ПередЗаписью" модуля формы элемента справочника(опять-таки если есть). Отсюда и можно увидеть разницу кода программного и интерактивного создания.
8. PhoenixAOD 62 12.11.15 10:02 Сейчас в теме
ТАк попробуй!
СоздаваемыйЭлемент.ЗАписать();
Спр = СоздаваемыйЭлемент.ПолучитьОбъект();
Спр.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(796);
Спр.ЗАписать();
9. artemns 12.11.15 10:11 Сейчас в теме
После метода Записать() вызывай обработчик, который и устанавливает недостающие единицы.
12. PhoenixAOD 62 12.11.15 10:54 Сейчас в теме
Стр = Справочники.Номенклатура.СоздатьЭлемент();
        Стр.Код = Строчка.Код;
        Стр.Наименование = Строчка.Наименование;
        Стр.НаименованиеПолное = Строчка.НаименованиеПолное;
        Стр.Артикул = Строчка.Артикул;
        Стр.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(Строчка.ЕдИзм);
        Стр.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
        Стр.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
    	Если Строчка.ТипНоменклатуры = "Весовой" Тогда
            Стр.Весовой = Истина;
			
		КонецЕсли;
		Если Строчка.Родитель = "ПРОДОВОЛЬСТВЕННЫЕ ТОВАРЫ" Тогда
			Стр.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("ПРОДОВОЛЬСТВЕННЫЕ ТОВАРЫ");
		ИначеЕсли Строчка.Родитель = "НЕПРОДОВОЛЬСТВЕННЫЕ ТОВАРЫ" Тогда
			Стр.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("НЕПРОДОВОЛЬСТВЕННЫЕ ТОВАРЫ");
		Иначе
			Стр.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("СОБСТВЕННОЕ ПРОИЗВОДСТВО /5+/");
		КонецЕсли;		
        стр.Записать();
		
		стр1 = справочники.ЕдиницыИзмерения.СоздатьЭлемент();
        Стр1.Владелец = Справочники.Номенклатура.НайтиПоНаименованию(Стр.Наименование);
        стр1.ЕдиницаПоКлассификатору = Стр.БазоваяЕдиницаИзмерения;
        Стр1.Коэффициент = Строчка.Коэф;
        стр1.Вес = Строчка.ВесовойКоэф;
        Стр1.Наименование = стр1.ЕдиницаПоКлассификатору;
        Стр1.Записать();
		
		стр2 = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
        Стр2.Владелец = Справочники.Номенклатура.НайтиПоНаименованию(Стр.Наименование);
        Стр2.ЕдиницаИзмерения = стр.БазоваяЕдиницаИзмерения;
        Стр2.Штрихкод = Строчка.ШК;
        Стр2.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
        Стр2.Записать();
		
		Если Стр.Весовой = Истина Тогда
        Стр3 = РегистрыСведений.КодыТоваровPLU.СоздатьМенеджерЗаписи();
        	Стр3.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Стр.Наименование);
        	Стр3.Код = Прав(Строчка.ШК, 5);
        	Стр3.Записать();
        КонецЕсли;        
        Сообщить("Добавлена позиция в справочник Номенклатура " + Стр.Наименование);
Показать
13. avto1c 12.11.15 11:03 Сейчас в теме
В место 2 записей попробуй создать Ссылку не записанного элемента и прикрутить её к элементу:
СсылкаНового = Справочники.Номенклатура.ПолучитьСсылку();
СоздаваемыйЭлемент.УстановитьСсылкуНового(СсылкаНового);

Таким образом будет известна ссылка и можно указать владельца для нового элемента единиц измерения до того как сам элемент номенклатуры будет записан.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот