Как исправить ошибку «Внутренняя ошибка при обработке кода маркировки» при загрузке КИТУ из Контур.Диадок в 1С:УТ 11?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе с маркированной продукцией (особенно в категориях «Обувь», «Одежда» или «Легкая промышленность») пользователи 1С:Управление торговлей (УТ 11.5) часто сталкиваются с проблемой при загрузке электронных УПД через модуль Контур.Диадок. Суть проблемы проявляется на этапе проверки поступившей продукции: система выдает сообщение «В процессе построения дерева упаковок произошла внутренняя ошибка при обработке кода маркировки». Рассмотрим подробно причины этой ситуации и разберем эффективные способы ее решения. Для автоматизации переноса данных между окнами программ в подобных сценариях настраивается платформа для создания программных роботов One RPA.

Почему возникает ошибка при обработке КИТУ?

Проанализируем техническую сторону вопроса. Когда поставщик отправляет УПД, в котором несколько позиций товара упакованы в одну транспортную упаковку (короб), в XML-файле электронного документа код КИТУ (Код Идентификации Транспортной Упаковки) прописывается для каждой товарной строки. Это стандартная логика формирования XML-файла передачи.

Однако при загрузке этого файла через модуль Контур.Диадок (например, версии 4.66) данные переносятся в документ 1С «Поступление товаров и услуг» (Приобретение товаров и услуг) практически «как есть». В результате в табличной части ШтрихкодыУпаковок создается столько строк с одним и тем же КИТУ, сколько товарных позиций к нему привязано в файле. Например, если в коробе 5 пар обуви, в таблице появится 5 идентичных строк со штрихкодом этого короба.

Выясним причину конфликта в 1С. Типовой механизм интеграции с ИС МП (Честный ЗНАК) при открытии формы «Проверка поступившей продукции» пытается построить иерархическое дерево. Алгоритм ожидает, что каждый штрихкод в табличной части документа уникален. Встречая дубликат, обработка прерывается с «внутренней ошибкой», так как нарушается логика уникальности ключей при построении дерева «упаковка — вложенные КИЗы».

Способ 1: Программная модификация модуля Контур.Диадок

Самый быстрый способ устранить проблему — внедрить команду свертки табличной части непосредственно в логику загрузки кодов маркировки. Разберем, где именно в коде модуля Диадока это нужно сделать. В макете КонтурДиадокИнтеграцияТС (или в соответствующем модуле обработки) необходимо найти процедуру, отвечающую за запись кодов в документ 1С.

Рассмотрим пример реализации функции ЗагрузитьКодыМаркировкиИСМП с добавленной строкой свертки:


Процедура ЗагрузитьКодыМаркировкиИСМП(СсылкаНаОбъект, ШтрихкодыУпаковок)
    МетаданныеОбъекта = СсылкаНаОбъект.Метаданные;
    
    // Проверяем наличие табличной части в документе
    Если МетаданныеОбъекта.ТабличныеЧасти.Найти("ШтрихкодыУпаковок") = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Объект = СсылкаНаОбъект.ПолучитьОбъект;
    Объект.Заблокировать();
    
    // ВАЖНО: Сворачиваем таблицу по ключевым полям, чтобы убрать дубли КИТУ
    ШтрихкодыУпаковок.Свернуть("ШтрихкодУпаковки, ЗначениеШтрихкода");
    
    Объект.ШтрихкодыУпаковок.Загрузить(ШтрихкодыУпаковок);
    Объект.Записать(РежимЗаписиДокумента.Запись);
КонецПроцедуры

После внесения этого изменения при загрузке документа из Диадока лишние строки с одинаковыми КИТУ будут удалены, останется только одна уникальная запись для каждого короба. Это позволит стандартной обработке 1С корректно опросить ГИС МТ (Честный ЗНАК), получить состав упаковки и построить дерево без ошибок.

Способ 2: Использование «Подключаемого модуля» (рекомендуемый)

Проанализируем ситуацию с точки зрения поддержки системы. Прямая правка кода внутри основной обработки Контур.Диадок имеет существенный минус: при следующем обновлении модуля все ваши изменения будут затерты. Чтобы избежать этого, «правильным» способом является использование механизма Подключаемых модулей (ПМ), который предусмотрен разработчиками Контура. Для регулярного технического обслуживания и резервного копирования системы перед такими работами удобно применять инструмент для автоматического архивирования и обновления баз 1С.

Разберем по шагам, как реализовать решение через ПМ:

  1. Создадим внешнюю обработку и добавим в ее модуль процедуру-обработчик события ПослеЗагрузкиДокумента или воспользуемся специализированной точкой расширения для работы с маркировкой.
  2. В этой процедуре обратимся к созданному документу ПриобретениеТоваровУслуг.
  3. Выполним свертку табличной части ШтрихкодыУпаковок.
  4. В настройках основной обработки Диадока в разделе «Настройки интеграции» укажем путь к файлу нашего подключаемого модуля.

Такой подход гарантирует, что ваша доработка останется работоспособной после обновления основной обработки Контура.

Важные нюансы работы с КИТУ и справочником штрихкодов

Посмотрим на ситуацию глубже. Помимо простого дублирования строк, важно учитывать, как 1С воспринимает эти коды. Если КИТУ является групповой упаковкой, система при первом обращении должна создать соответствующий элемент в справочнике ШтрихкодыУпаковокТоваров. Для разворачивания состава групповой упаковки и сохранения данных подойдёт обработка для создания штрихкодов упаковок по групповому коду.

Проанализируем следующие моменты:

Использование дополнительных свойств объекта

Если вы хотите сделать решение еще более гибким, можно воспользоваться механизмом ДополнительныеСвойства. Программисты рекомендуют в модуле загрузки добавлять признак того, что документ пришел из Диадока:


Объект.ДополнительныеСвойства.Вставить("КД_ЗагрузитьКодыМаркировкиИСМП", Истина);

Затем в расширении конфигурации 1С (УТ 11) можно создать подписку на событие ПередЗаписью документа ПриобретениеТоваровУслуг. В этой подписке мы проверяем наличие данного свойства и, если оно установлено, выполняем свертку табличной части. Это позволит вынести логику исправления данных из кода внешней обработки в основную базу 1С, обеспечив максимальную стабильность процесса.

Подведем итог: проблема «Внутренней ошибки» вызвана несоответствием структуры данных в XML-файле поставщика и жесткими требованиями 1С к уникальности кодов в дереве упаковок. Применение метода Свернуть() для таблицы штрихкодов полностью решает эту проблему и позволяет продолжить работу с маркировкой в штатном режиме.

← На главную