Как загрузить дополнительные реквизиты номенклатуры?
В данной заметке хотелось бы рассмотреть вопрос: Как загрузить дополнительные реквизиты номенклатуры при помощи обработки с диска ИТС «Загрузка данных из табличного документа (управляемые формы)»?
В качестве примера, будем использовать конфигурацию 1С:ERP Управление предприятием 2, аналогичным смособом можно будет загрузить в Управление торговлей 11 или любую другую, подобную конфигурацию.
Дополнительные реквизиты хранятся в табличной части «ДополнительныеРеквизиты» справочника «Номенклатура». Из обработки «Загрузка данных из табличного документа» можно добраться только к табличной части одной, выбранной номенклатуре, через тип данных «Позиция номенклатуры».
Но такой способ нам не подходит, т.к. мы будем загружать дополнительные реквизиты для списка номенклатуры. Для примера загрузим одну номенклатуру и два ее дополнительных реквизита: «Формат» и «Толщина».
Настроим поиск номенклатуры по наименованию из колонки с номером один.
Теперь немного займемся программированием. Откроем событие «При записи объекта» и добавим туда следующий программный код:
Объект.ДополнительныеРеквизиты.Очистить(); // Предварительно удаляем все доп. реквизиты. Если не нужно - закомментировать.
ДопСвойства = Новый Соответствие;
ДопСвойства.Вставить("11", 91); // Наименование свойства, номер ячейки
ДопСвойства.Вставить("АКЦИЯ", 92);
ДопСвойства.Вставить("Размер,мм", 93);
ДопСвойства.Вставить("Формат", 94);
ДопСвойства.Вставить("Номер цвета", 95);
ДопСвойства.Вставить("Цвет", 96);
ДопСвойства.Вставить("шт./м2", 97);
ДопСвойства.Вставить("шт. / палетта", 98);
ДопСвойства.Вставить("вес, кг/шт.", 99);
Для Каждого ЭлементДопСвойства Из ДопСвойства Цикл
ТекСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ЭлементДопСвойства.Ключ + " (" + Объект.ВидНоменклатуры + ")", Ложь);
ТекЗначение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ТекстыЯчеек[ЭлементДопСвойства.Значение], Ложь);
Если Не ЗначениеЗаполнено(ТекСвойство) Тогда
Сообщить("Не удалось найти свойство: """ + ЭлементДопСвойства.Ключ + " (" + Объект.ВидНоменклатуры + ")""");
Продолжить;
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекЗначение) Тогда
Сообщить("Создаем новое значение """ + ТекстыЯчеек[ЭлементДопСвойства.Значение] + """ для свойства """ + ТекСвойство + """");
НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
НовоеЗначение.Владелец = ТекСвойство;
НовоеЗначение.Наименование = ТекстыЯчеек[ЭлементДопСвойства.Значение];
НовоеЗначение.Записать();
ТекЗначение = НовоеЗначение.Ссылка;
КонецЕсли;
МассивСтрок = Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ТекСвойство));
Если МассивСтрок.Количество() = 0 Тогда
ДопРеквизит = Объект.ДополнительныеРеквизиты.Добавить();
Иначе
ДопРеквизит = МассивСтрок[0];
КонецЕсли;
ДопРеквизит.Свойство = ТекСвойство;
ДопРеквизит.Значение = ТекЗначение;
КонецЦикла;
Объект.Записать();
В соответствие «ДопСвойста» нужно вставить столько записей, сколько требуется загрузить дополнительных реквизитов. В качестве ключа указываем текстовое наименование дополнительного реквизита, а в качестве значения - номе строки табличного документа, где это значение храниться.
Комментарии
Доп. реквизиты с типом число
Доп. реквизиты с типом число записывает в карточку номенклатуры, но не в сами дополнительные реквизиты. В чем может быть проблема?
Не понял вопрос.
Не понял вопрос.
У меня два вопроса.
У меня два вопроса.
Если у дополнительного реквизита стоит тип число, то оно не заполняется. Как можно это исправить?
Можно ли это в событие "При записи объекта" проверить с помощью отладчика?
Как можно загружать
Как можно загружать дополнительные реквизиты с типом "Число"?
вот ВСЁ сами любите ДЕЛАТЬ...
вот ВСЁ сами любите ДЕЛАТЬ...
ПЕРЕД циклом:
//сюда добавляете НОМЕРА колонок, где Число ИЛИ Булево ИЛИ Строка
СтрокаИсключений = "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
Подскажите , что не так ?
Предварительно нужно создать
Предварительно нужно создать необходимые свойства.
автор, ты гений! спасибо тебе
автор, ты гений! спасибо тебе добрый человек!
БОЛЬШОЕ спасибо !!!
БОЛЬШОЕ спасибо !!!
ОЧЕНЬ помог.!!
Спасибо автору!!! Помог
Спасибо автору!!! Помог решить задачу срочную !!!
Доброго времени суток. В БП 3
Доброго времени суток. В БП 3.0 выдает ошибку "Не удалось найти свойство", хотя доп реквизиты номенклатуры были созданы и отображаются в карточке номенклатуры
Спасибо за статью! Сильно
Спасибо за статью! Сильно ускорила работу!
Не работала загрузка в УТ 11.4.7, ошибка Не удалось найти свойство: "Свойство 1 (Товар)"
удалил кусок кода + " (" + Объект.ВидНоменклатуры + ")" из ТекСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ЭлементДопСвойства.Ключ + " (" + Объект.ВидНоменклатуры + ")", Ложь);
Только теперь будет проблема, если я создам два реквизита с одинаковым названием для разных видов номенклатуры, поможете поправить?
Спасибо!
ОЙ !!! Спасибо ! Выручили !!!
ОЙ !!! Спасибо ! Выручили !!!
Загружаю значение "53", а в
Загружаю значение "53", а в итоге в доп. реквизитах установилось значение "53 текст-текст", т.к. в базе уже есть доп. реквизит со значением "53 текст-текст", т.е. поиск произошел не точный и подставилось не то значение.
Значение "53" в "дополнительных значениях" также не создалось.
Попробуйте искать по точному
Попробуйте искать по точному соответствию.
Спасибо! Помогло при загрузке
Спасибо! Помогло при загрузке в ЗУП 3.1.
Спасибо огромное! очень
Спасибо огромное! очень помогло ERP:УП 2
Добавить комментарий