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

27 Jun
Published by Nicholas

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

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

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

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

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

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

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

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

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

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

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

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

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

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

КонецЦикла;

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

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

Тэги 

1С 8

Комментарии

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

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

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

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

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

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

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

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

Аватар пользователя АвтоОтветчик

вот ВСЁ сами любите ДЕЛАТЬ...
ПЕРЕД циклом:
//сюда добавляете НОМЕРА колонок, где Число ИЛИ Булево ИЛИ Строка
СтрокаИсключений = "4, 5, 7, 10,";

В цикл проверку:
ЗначениеЯчейки = ТекстыЯчеек[ЭлементДопСвойства.Значение];

Если ПустаяСтрока(ЗначениеЯчейки) Тогда Продолжить; КонецЕсли;

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

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

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

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

Не понимаю где в этом коде задаётся номер колонки?
судя по скриншоту "формат" во второй колонке таблицы, а в коде ДопСвойства.Вставить("Формат", 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

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

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

автор, ты гений! спасибо тебе добрый человек!

Аватар пользователя СПАСИБО автору!

БОЛЬШОЕ спасибо !!!
ОЧЕНЬ помог.!!

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

Спасибо автору!!! Помог решить задачу срочную !!!

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

Доброго времени суток. В БП 3.0 выдает ошибку "Не удалось найти свойство", хотя доп реквизиты номенклатуры были созданы и отображаются в карточке номенклатуры

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

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

Только теперь будет проблема, если я создам два реквизита с одинаковым названием для разных видов номенклатуры, поможете поправить?
Спасибо!

Аватар пользователя Tarlich@mail.ru

ОЙ !!! Спасибо ! Выручили !!!

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

Загружаю значение "53", а в итоге в доп. реквизитах установилось значение "53 текст-текст", т.к. в базе уже есть доп. реквизит со значением "53 текст-текст", т.е. поиск произошел не точный и подставилось не то значение.
Значение "53" в "дополнительных значениях" также не создалось.

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

Попробуйте искать по точному соответствию.

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

Спасибо! Помогло при загрузке в ЗУП 3.1.

Аватар пользователя МикАрхит

Спасибо огромное! очень помогло ERP:УП 2

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

Plain text

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