Запись дополнительных реквизитов при создании элемента номенклатуры

Версия для печатиPDF-версия

Платформа:

Код процедуры следующий:

ВидНом = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
ЕдИзм  = Справочники.ЕдиницыИзмерения.НайтиПоКоду("796");
 
Для НомерСтроки = 1 По  Объект.ДанныеДляСоздания.ВысотаТаблицы Цикл 
 
ОбластьНаименованиеАнгл        = Объект.ДанныеДляСоздания.Область(НомерСтроки, 1);    //1.Наименование для закупщикв
НаименованиеАнгл               = ОбластьНаименованиеАнгл.Текст;
ОбластьНаименованиеВРозн       = Объект.ДанныеДляСоздания.Область(НомерСтроки, 3);    //3.Наименование в рознице
НаименованиеВРозн              = ОбластьНаименованиеВРозн.Текст;
ОбластьКлючСинхронизации       = Объект.ДанныеДляСоздания.Область(НомерСтроки, 4);    //4. Ключ синхронизации м/у базами
КлючСинхронизации              = ОбластьКлючСинхронизации.Текст;                      //4. Код номенклатуры в другой базе
 
СпрНом                    = Справочники.Номенклатура.СоздатьЭлемент();
СпрНом.Наименование       = НаименованиеАнгл;
СпрНом.НаименованиеПолное = НаименованиеАнгл;
СпрНом.ВидНоменклатуры    = ВидНом;
СпрНом.СтавкаНДС          = Перечисления.СтавкиНДС.БезНДС;
СпрНом.ЕдиницаДляОтчетов  = ЕдИзм;
СпрНом.ЕдиницаИзмерения   = ЕдИзм;
СпрНом.Записать();
 
НаимРеквРозн             = "Наменование в рознице (Справочник ""Номенклатура"" (Общие))";
НаимКлючСинх             = "Ключ синхронизации с другой базой (Справочник ""Номенклатура"" (Общие))";
 
 
// Получаем ссылку на документ
СпрНомДопРекв = СпрНом.Ссылка;
//Получаем ссылку на доп реквизит
//ДопРеквизитПроверено = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Заголовок", "Проверено");
//ДопРеквизитВремяРазбора = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Заголовок", "Время разбора");
ДопРеквНаимРозн          = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(НаимРеквРозн);
ДопНаимКлючСинх          = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(НаимКлючСинх);
 
 
ТаблицаДопРеквизитов = Новый ТаблицаЗначений;
ТаблицаДопРеквизитов.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"));
ТаблицаДопРеквизитов.Колонки.Добавить("Значение");
 
НовыйРекизит = ТаблицаДопРеквизитов.Добавить();
НовыйРекизит.Свойство = ДопРеквНаимРозн;
НовыйРекизит.Значение = НаименованиеВРозн;
 
НовыйРекизит = ТаблицаДопРеквизитов.Добавить();
НовыйРекизит.Свойство = ДопНаимКлючСинх;
НовыйРекизит.Значение = КлючСинхронизации;
 
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(СпрНомДопРекв,ТаблицаДопРеквизитов);
 
Создавать то он создает элементы номенклатуры, а вот доп реквизиты не создает и не записыват...
 
Процедура ЗаписатьСвойстваУОбъекта(...) из общего модуля УТ
 
 
ТаблицаДопРеквизитов = Новый ТаблицаЗначений;
ТаблицаДопРеквизитов.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"));
ТаблицаДопРеквизитов.Колонки.Добавить("Значение");
 
ТаблицаДопСведений = ТаблицаДопРеквизитов.СкопироватьКолонки();
 
Для Каждого СтрокаТаблицыСвойств Из ТаблицаСвойствИЗначений Цикл
Если СтрокаТаблицыСвойств.Свойство.ЭтоДополнительноеСведение Тогда
НоваяСтрока = ТаблицаДопСведений.Добавить();
Иначе
НоваяСтрока = ТаблицаДопРеквизитов.Добавить();
КонецЕсли;
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицыСвойств, "Свойство,Значение");
КонецЦикла;
 
ЕстьДопРеквизиты = ТаблицаДопРеквизитов.Количество() > 0;
ЕстьДопСведения  = ТаблицаДопСведений.Количество() > 0;
 
МассивСвойств = ПолучитьСписокСвойств(ВладелецСвойств);
 
МассивДопРеквизитов = Новый Массив;
МассивДопСведений = Новый Массив;
 
Для Каждого ДопСвойство Из МассивСвойств Цикл
Если ДопСвойство.ЭтоДополнительноеСведение Тогда
МассивДопСведений.Добавить(ДопСвойство);
Иначе
МассивДопРеквизитов.Добавить(ДопСвойство);
КонецЕсли;
КонецЦикла;
 
НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
 
Если ЕстьДопРеквизиты Тогда
ВладелецСвойствОбъект = ВладелецСвойств.ПолучитьОбъект();
ЗаблокироватьДанныеДляРедактирования(ВладелецСвойствОбъект.Ссылка);
Для Каждого ДопРеквизит Из ТаблицаДопРеквизитов Цикл
Если МассивДопРеквизитов.Найти(ДопРеквизит.Свойство) = Неопределено Тогда
Продолжить;
КонецЕсли;
МассивСтрок = ВладелецСвойствОбъект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ДопРеквизит.Свойство));
Если МассивСтрок.Количество() Тогда
СтрокаСвойства = МассивСтрок[0];
Иначе
СтрокаСвойства = ВладелецСвойствОбъект.ДополнительныеРеквизиты.Добавить();
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаСвойства, ДопРеквизит, "Свойство,Значение");
КонецЦикла;
ВладелецСвойствОбъект.Записать();
КонецЕсли;
 
Если ЕстьДопСведения Тогда
Для Каждого ДопСведение Из ТаблицаДопСведений Цикл
Если МассивДопСведений.Найти(ДопСведение.Свойство) = Неопределено Тогда
Продолжить;
КонецЕсли;
 
МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
 
МенеджерЗаписи.Объект = ВладелецСвойств;
МенеджерЗаписи.Свойство = ДопСведение.Свойство;
МенеджерЗаписи.Значение = ДопСведение.Значение;
 
МенеджерЗаписи.Записать(Истина);
КонецЦикла;
 
КонецЕсли;
 
ЗафиксироватьТранзакцию();
 
 
Что я не так сделал, подскжите пожалуйста...

Как говорится - внимательность наше все) Пропустил букву в наименовании реквизита, 1С его не находит и в результате не создает. Кому интресно - для УТ работает такой код по созданию доп реквизитов:

ВидНом = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
ЕдИзм  = Справочники.ЕдиницыИзмерения.НайтиПоКоду("796");
 
Для НомерСтроки = 1 По  Объект.ДанныеДляСоздания.ВысотаТаблицы Цикл 
 
ОбластьНаименованиеАнгл           = Объект.ДанныеДляСоздания.Область(НомерСтроки, 1);    //1.Наименование для закупщикв
НаименованиеАнгл                          = ОбластьНаименованиеАнгл.Текст;
ОбластьНаименованиеВРозн       = Объект.ДанныеДляСоздания.Область(НомерСтроки, 3);    //3.Наименование в рознице
НаименованиеВРозн                       = ОбластьНаименованиеВРозн.Текст;
ОбластьКлючСинхронизации        = Объект.ДанныеДляСоздания.Область(НомерСтроки, 4);    //4. Ключ синхронизации м/у базами
КлючСинхронизации                       = ОбластьКлючСинхронизации.Текст;                      //4. Код номенклатуры в другой базе
 
СпрНом                    = Справочники.Номенклатура.СоздатьЭлемент();
СпрНом.Наименование                = НаименованиеАнгл;
СпрНом.НаименованиеПолное = НаименованиеАнгл;
СпрНом.ВидНоменклатуры         = ВидНом;
СпрНом.СтавкаНДС                       = Перечисления.СтавкиНДС.БезНДС;
СпрНом.ЕдиницаДляОтчетов      = ЕдИзм;
СпрНом.ЕдиницаИзмерения      = ЕдИзм;
СпрНом.Записать();
 
НаимРеквРозн               = "Наименование в рознице (Справочник ""Номенклатура"" (Общие))";
НаимКлючСинх             = "Ключ синхронизации (Справочник ""Номенклатура"" (Общие))";
 
СпрНомДопРекв = СпрНом.Ссылка;
ДопРеквНаимРозн          = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(НаимРеквРозн);
ДопНаимКлючСинх          = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(НаимКлючСинх);
 
ТаблицаДопРеквизитов = Новый ТаблицаЗначений;
ТаблицаДопРеквизитов.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"));
ТаблицаДопРеквизитов.Колонки.Добавить("Значение");
 
НовыйРекизит = ТаблицаДопРеквизитов.Добавить();
НовыйРекизит.Свойство = ДопРеквНаимРозн;
НовыйРекизит.Значение = НаименованиеВРозн;
 
НовыйРекизит = ТаблицаДопРеквизитов.Добавить();
НовыйРекизит.Свойство = ДопНаимКлючСинх;
НовыйРекизит.Значение = КлючСинхронизации;
 
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(СпрНомДопРекв,ТаблицаДопРеквизитов);
 
Жирным курсивом - пропущенная буква)

Лучше вообще по коду искать. Его пользователи обычно не меняют.

Искал бы - но он изначально не создан, точнее создан, но как показала практика именно тут выигрывает наименование :)