При работе с современными конфигурациями на платформе 1С:Предприятие 8.3, такими как Управление торговлей 11.4, специалисты часто сталкиваются с ситуацией: внешняя обработка «Загрузка данных из табличного документа» отрапортовала об успешном завершении операции, но при проверке в справочнике «Номенклатура» значения дополнительных реквизитов (характеристик) остаются прежними или пустыми. В этой статье мы подробно разберем, почему так происходит, чем архитектура 1С 8.3 отличается от старых версий (например, УТ 10.3 на 8.2) и как правильно настроить загрузку данных.
Первое, что нам необходимо проанализировать — это способ хранения данных. В старых конфигурациях дополнительные свойства хранились в отдельном регистре сведений ЗначенияСвойствОбъектов. Однако в УТ 11, ERP 2 и КА 2 разработчики перешли на использование механизма Библиотеки стандартных подсистем (БСП). Теперь дополнительные реквизиты хранятся непосредственно внутри самого объекта (справочника) в специальной табличной части.
Проанализируем структуру справочника Номенклатура. Если мы откроем его в конфигураторе, то увидим табличную часть под названием ДополнительныеРеквизиты. Она содержит две ключевые колонки:
ДополнительныеРеквизитыИСведения.Суть проблемы автора: если вы пытаетесь загрузить данные, указывая обработке на «реквизиты объекта», она ищет колонку с названием свойства в основной таблице справочника. Поскольку такой колонки там нет, а есть только подчиненная таблица, запись «в никуда» формально проходит успешно, но данные в объект не попадают.
Рассмотрим по шагам, как настроить внешнюю обработку для работы с табличной частью ДополнительныеРеквизиты. Этот метод требует внимательности при сопоставлении полей.
Шаг 1: Выбор режима загрузки
В верхней части обработки необходимо выбрать режим «Загрузка в табличную часть». После этого в поле выбора таблицы нужно найти ДополнительныеРеквизиты у объекта Номенклатура.
Шаг 2: Определение полей поиска
Для корректного обновления данных нам нужно сопоставить товар. В таблице настройки выберите колонку (например, Артикул или Код) и установите для нее флаг «Поле поиска». Это позволит программе понять, в какую именно карточку товара нужно записывать данные.
Шаг 3: Настройка поиска строки внутри табличной части
Это самый сложный момент. Стандартная обработка при загрузке в табличную часть по умолчанию может просто добавлять новые строки. Чтобы обновить существующее свойство (например, изменить «Вылет» с 0 на 35), нам нужно заставить систему искать строку, где в колонке Свойство стоит значение «Вылет».
К сожалению, базовая версия обработки «Загрузка из табличного документа» часто не обладает встроенным функционалом «Поиска по ключу внутри табличной части». Если вы используете именно этот инструмент, рассмотрите следующий алгоритм настройки:
В современных версиях 1С:Управление торговлей 11.4 существует встроенная альтернатива внешней обработке, которая гораздо корректнее работает с дополнительными реквизитами. Посмотрим, как ею воспользоваться:
Если вам нужно установить одно и то же значение (например, Вылет = 35) для большого списка товаров, не обязательно использовать загрузку. Проанализируем возможности функции «Изменить выделенные»:
В списке номенклатуры выделите нужные позиции, нажмите правую кнопку мыши и выберите «Изменить выделенные». В списке доступных для изменения полей вы найдете ваши дополнительные реквизиты. Просто установите новое значение и нажмите «Изменить параметры». Этот способ является самым безопасным, так как исключает ошибки сопоставления колонок из внешних файлов.
Выясним причину, по которой даже при правильной настройке значение может не сохраниться. Дополнительные реквизиты имеют строго заданный тип. Рассмотрим пример:
Если вы решили написать свою мини-обработку для загрузки, разберем пример кода, который правильно обращается к табличной части дополнительных реквизитов:
// Предположим, ОбъектНоменклатура уже получен для редактирования
СвойствоСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Вылет");
НайденнаяСтрока = ОбъектНоменклатура.ДополнительныеРеквизиты.Найти(СвойствоСсылка, "Свойство");
Если НайденнаяСтрока = Неопределено Тогда
// Если такого свойства у товара еще нет — добавляем строку
НоваяСтрока = ОбъектНоменклатура.ДополнительныеРеквизиты.Добавить();
НоваяСтрока.Свойство = СвойствоСсылка;
НоваяСтрока.Значение = 35; // Указываем наше значение
Иначе
// Если свойство уже было заполнено — обновляем значение
НайденнаяСтрока.Значение = 35;
КонецЕсли;
ОбъектНоменклатура.Записать();
Резюме: Чтобы успешно загрузить данные, нужно учитывать, что в УТ 11.4 дополнительные реквизиты — это строки табличной части ДополнительныеРеквизиты. Рекомендуется использовать встроенную обработку «Загрузка данных из файла», так как она автоматически обрабатывает все сложности сопоставления типов и поиска существующих строк в подчиненных таблицах.