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

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

amblik
12.07.2013 16:54Прочитано: 50628
Здравствуйте
Не могу понять, как программно заполнить/изменить дополнительные реквизиты справочника Номенклатура. Конфигурация УНФ 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
Спасибо, буду пробовать
Только там справочник не ЗначенияСвойствОбъектов, а НаборыДополнительныхРеквизитовИСведений. В УНФ пользователям можно в справочники и документы добавить доп.реквизиты или доп.сведения. Добавляла реквизиты
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!