Как загрузить дополнительные реквизиты номенклатуры?

27 Jun
Published by Nicholas

В данной заметке хотелось бы рассмотреть вопрос: Как загрузить дополнительные реквизиты номенклатуры при помощи обработки с диска ИТС «Загрузка данных из табличного документа (управляемые формы)»?

В качестве примера, будем использовать конфигурацию 1С:ERP Управление предприятием 2, аналогичным смособом можно будет загрузить в Управление торговлей 11 или любую другую, подобную конфигурацию.

Дополнительные реквизиты хранятся в табличной части «ДополнительныеРеквизиты» справочника «Номенклатура». Из обработки «Загрузка данных из табличного документа» можно добраться только к табличной части одной, выбранной номенклатуре, через тип данных «Позиция номенклатуры».

Позиция номенклатуры

Но такой способ нам не подходит, т.к. мы будем загружать дополнительные реквизиты для списка номенклатуры. Для примера загрузим одну номенклатуру и два ее дополнительных реквизита: «Формат» и «Толщина».

Загрузка из табличного документа

Настроим поиск номенклатуры по наименованию из колонки с номером один.

Настройка загрузки реквизитов

Теперь немного займемся программированием. Откроем событие «При записи объекта» и добавим туда следующий программный код:

Объект.ДополнительныеРеквизиты.Очистить(); // Предварительно удаляем все доп. реквизиты. Если не нужно - закомментировать.

ДопСвойства = Новый Соответствие;
ДопСвойства.Вставить("11", 91); // Наименование свойства, номер ячейки
ДопСвойства.Вставить("АКЦИЯ", 92);
ДопСвойства.Вставить("Размер,мм", 93);
ДопСвойства.Вставить("Формат", 94);
ДопСвойства.Вставить("Номер цвета", 95);
ДопСвойства.Вставить("Цвет", 96);
ДопСвойства.Вставить("шт./м2", 97);
ДопСвойства.Вставить("шт. / палетта", 98);
ДопСвойства.Вставить("вес, кг/шт.", 99);

Для Каждого
ЭлементДопСвойства Из ДопСвойства Цикл

   
ТекСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ЭлементДопСвойства.Ключ + " (" + Объект.ВидНоменклатуры + ")", Ложь);
   
ТекЗначение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ТекстыЯчеек[ЭлементДопСвойства.Значение], Ложь);
    Если Не
ЗначениеЗаполнено(ТекСвойство) Тогда
       
Сообщить("Не удалось найти свойство: """ + ЭлементДопСвойства.Ключ + " (" + Объект.ВидНоменклатуры + ")""");
        Продолжить;
    КонецЕсли;
    Если Не
ЗначениеЗаполнено(ТекЗначение) Тогда
       
Сообщить("Создаем новое значение """ + ТекстыЯчеек[ЭлементДопСвойства.Значение] + """ для свойства """ + ТекСвойство + """");
       
НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
       
НовоеЗначение.Владелец = ТекСвойство;
       
НовоеЗначение.Наименование = ТекстыЯчеек[ЭлементДопСвойства.Значение];
       
НовоеЗначение.Записать();
       
ТекЗначение = НовоеЗначение.Ссылка;
    КонецЕсли;

   
МассивСтрок = Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ТекСвойство));
    Если
МассивСтрок.Количество() = 0 Тогда
       
ДопРеквизит = Объект.ДополнительныеРеквизиты.Добавить();
    Иначе
       
ДопРеквизит = МассивСтрок[0];
    КонецЕсли;
   
ДопРеквизит.Свойство = ТекСвойство;
   
ДопРеквизит.Значение = ТекЗначение;

КонецЦикла;

Объект.Записать();

В соответствие «ДопСвойста» нужно вставить столько записей, сколько требуется загрузить дополнительных реквизитов. В качестве ключа указываем текстовое наименование дополнительного реквизита, а в качестве значения - номе строки табличного документа, где это значение храниться.

Tags 

1С 8.3

Комментарии

Аватар пользователя Nick

Доп. реквизиты с типом число записывает в карточку номенклатуры, но не в сами дополнительные реквизиты. В чем может быть проблема?

Аватар пользователя Nicholas

Не понял вопрос.

Аватар пользователя Катерина

У меня два вопроса.
Если у дополнительного реквизита стоит тип число, то оно не заполняется. Как можно это исправить?
Можно ли это в событие "При записи объекта" проверить с помощью отладчика?

Аватар пользователя Katerina

Как можно загружать дополнительные реквизиты с типом "Число"?

Аватар пользователя Александр

Добрый день!
Подскажите пожалуйста. У справочника пользователи есть дополнительный реквизит "Должность в дательном падеже) (строка). Что мне указывать в ДопСвойства.Вставить("Иванов Иван Иванович", Консультанту)? Спасибо!

Аватар пользователя Денис

Не понимаю где в этом коде задаётся номер колонки?
судя по скриншоту "формат" во второй колонке таблицы, а в коде ДопСвойства.Вставить("Формат", 94);

Аватар пользователя Дмитрий

Не работает. Все сделал как у вас написано:
1) https://yadi.sk/i/UzoNNHPr3MZ3cC
2) https://yadi.sk/i/Cb7gRkVa3MZ3mD
3) https://yadi.sk/i/d67Eysy_3MZ3hJ
Но выдает ошибку
https://yadi.sk/i/cy5phDMN3MZ3nU

Подскажите , что не так ?

Аватар пользователя Nicholas

Предварительно нужно создать необходимые свойства.

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и абзацы переносятся автоматически.
CAPTCHA
Вы человек или автоматическая спам-рассылка?
Target Image