helpf.pro
Регистрация

v8: Программное заполнение дополнительных реквизитов справочника Номенклатура

amblik
12.07.2013 16:54Прочитано: 45470
Здравствуйте
Не могу понять, как программно заполнить/изменить дополнительные реквизиты справочника Номенклатура. Конфигурация УНФ 1С 8.2.
Дополнительные реквизиты для справочника созданы, например, "Длина", тип Число. При подгрузке файла нужно создать новый элемент справочника, например, "Труба" и заполнить дополнительный реквизит Длина, значением 150.5. Если файл грузим повторно, то нужно очистить старое значение для Длины и заменить его новым.
Заранее благодарю, ибо совсем плохо умею программировать на 1с 8.2
Дополнительные реквизиты справочника
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
12.07.2013 17:53Ответ № 1
(0) amblik, там эти реквизиты наверное сделаны через планы видов характеристик! так? у меня нет конфигурации УНФ
E_Migachev
12.07.2013 18:03Ответ № 2
+ (1) а эсли это все-таки справочник, тогда код такой
Код 1C v 8.х
 Элемент = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
Элемент.Наименование = "Значение1";
Элемент.Владелец = НоменклатураВладелец;
Элемент.Записать();

+ возможен такой вариант
Код 1C v 8.х
  Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СправочникНоменклатура.Ссылка КАК Номенклатура
|ИЗ
| Справочник.Номенклатура КАК СправочникНоменклатура
|ГДЕ
| СправочникНоменклатура.Ссылка В Иерархии(&ТоварыМФГ) И НЕ СправочникНоменклатура.ЭтоГруппа";
Запрос.УстановитьПараметр("ТоварыМФГ", ТоварыМФГ);
Выборка = Запрос.Выполнить().Выбрать();

СпрЗначСвОб = Справочники.ЗначенияСвойствОбъектов;
свИмпортер = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Импортер");
СпрЗначСвОб = Справочники.ЗначенияСвойствОбъектов;
сСпрЗначСвОб = СпрЗначСвОб.НайтиПоНаименованию(ЭтаФорма.ЗначениеНоменклатуры);

Если ЭтаФорма.ЗначениеНоменклатуры.Пустая() Тогда
Сообщить("Не заполнено значение номенклатуры");
Возврат;
КонецЕсли;

Пока Выборка.Следующий() Цикл
НовЗапись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
НовЗапись.Объект = Выборка.Номенклатура;
НовЗапись.Свойство = свИмпортер.Ссылка;
НовЗапись.Значение = сСпрЗначСвОб;

НовЗапись.Записать();

КонецЦикла;
Сообщить ("Значение свойства записано");
E_Migachev
12.07.2013 18:08Ответ № 3
и еще объемный кусок, в нем все )
Код 1C v 8.х
  Характеристика          = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
Характеристика.Владелец = Товар.Ссылка;

Размер = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Размер");
Рост = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Рост");
Цвет = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Цвет",истина);

ЗначениеРазмер = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(ФайлОбмена.RAZM),Истина,,Размер);
Если ЗначениеРазмер.Пустая() Тогда
НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
НовоеЗначение.Владелец = Размер.Ссылка;
НовоеЗначение.Наименование = ФайлОбмена.RAZM;
НовоеЗначение.Записать();
ЗначениеРазмер = НовоеЗначение.Ссылка;
КонецЕсли;

ЗначениеРост = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(ФайлОбмена.ROST),Истина,,Рост);
Если ЗначениеРост.Пустая() Тогда
НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
НовоеЗначение.Владелец = Рост.Ссылка;
НовоеЗначение.Наименование = ФайлОбмена.ROST;
НовоеЗначение.Записать();
ЗначениеРост = НовоеЗначение.Ссылка;
КонецЕсли;

ЗначениеЦвет = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(ФайлОбмена.COL),Истина,,Цвет);
Если ЗначениеЦвет.Пустая() Тогда
НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
НовоеЗначение.Владелец = Цвет.Ссылка;
НовоеЗначение.Наименование = ФайлОбмена.COL;
НовоеЗначение.Записать();
ЗначениеРазмер = НовоеЗначение.Ссылка;
КонецЕсли;

КоллекцияЗначений = Новый СписокЗначений();
КоллекцияЗначений.Добавить(ЗначениеРазмер);
КоллекцияЗначений.Добавить(ЗначениеРост);
КоллекцияЗначений.Добавить(ЗначениеЦвет);

Наим = Характеристика.СформироватьНаименование(КоллекцияЗначений);
Характеристика.Наименование = Наим;
Характеристика.Записать();

ТаблицаДляЗаписиВРегистр = Новый ТаблицаЗначений;
ТаблицаДляЗаписиВРегистр.Колонки.Добавить("Свойство");
ТаблицаДляЗаписиВРегистр.Колонки.Добавить("Значение");

НоваяСтрока = ТаблицаДляЗаписиВРегистр.Добавить();
НоваяСтрока.Свойство = Размер;
НоваяСтрока.Значение = ЗначениеРазмер;

НоваяСтрока = ТаблицаДляЗаписиВРегистр.Добавить();
НоваяСтрока.Свойство = Рост;
НоваяСтрока.Значение = ЗначениеРост;

НоваяСтрока = ТаблицаДляЗаписиВРегистр.Добавить();
НоваяСтрока.Свойство = Цвет;
НоваяСтрока.Значение = ЗначениеЦвет;

ЗаписьЗначенияВРегистр=РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();

НаборЗаписейЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();

Для каждого Строка Из ТаблицаДляЗаписиВРегистр Цикл
Если НЕ ЗначениеНеЗаполнено(Строка.Значение) Тогда
Запись = НаборЗаписейЗначенияСвойств.Добавить();

Запись.Объект = Характеристика.Ссылка;
Запись.Свойство = Строка.Свойство;
Запись.Значение = Строка.Значение;
КонецЕсли;
КонецЦикла;
НаборЗаписейЗначенияСвойств.Записать();
amblik
15.07.2013 09:49Ответ № 4
Спасибо, буду пробовать
Только там справочник не ЗначенияСвойствОбъектов, а НаборыДополнительныхРеквизитовИСведений. В УНФ пользователям можно в справочники и документы добавить доп.реквизиты или доп.сведения. Добавляла реквизиты
Подсказка: Для редактирования своего ответа щелкните по значку (справа)
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.