Как в 1С:ERP и Комплексной автоматизации хранится информация об упаковках и кодах маркировки «Честный знак»?

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

Интеграция систем класса 1С:ERP Управление предприятием и 1С:Комплексная автоматизация с государственной информационной системой маркировки товаров (ГИС МТ «Честный знак») часто вызывает вопросы у технических специалистов и архитекторов систем. Один из ключевых вопросов: как физически организовано хранение кодов маркировки (КМ) в информационной базе 1С, запрашиваются ли они динамически при сканировании и как корректно работать с агрегированными упаковками (коробами, палетами), чтобы избежать ошибок пустых контейнеров?

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

1. Где и в каком формате хранятся коды маркировки в 1С?

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

Рассмотрим ключевые особенности структуры этого справочника:

Ниже приведен концептуальный пример кода, демонстрирующий, как программно можно проверить наличие вложенных КМ в конкретной упаковке в базе 1С:


// Пример проверки наличия вложенных элементов в справочнике штрихкодов
Функция ПолучитьВложенныеКодыМаркировки(РодительскаяУпаковка) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	ШтрихкодыУпаковок.Ссылка КАК КодМаркировки,
        |	ШтрихкодыУпаковок.ЗначениеШтрихкода КАК Значение
        |ИЗ
        |	Справочник.ШтрихкодыУпаковокТоваров КАК ШтрихкодыУпаковок
        |ГДЕ
        |	ШтрихкодыУпаковок.Родитель = &РодительскаяУпаковка";
    
    Запрос.УстановитьПараметр("РодительскаяУпаковка", РодительскаяУпаковка);
    Возврат Запрос.Выполнить().Выгрузить();
КонецФункции

2. Как работает автоматический запрос вложенности из ГИС МТ?

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

  1. Система выполняет локальный поиск по значению штрихкода в справочнике ШтрихкодыУпаковокТоваров с помощью стандартных поисковых механизмов (например, метода ПолучитьПоЗначениюШтрихкода()).
  2. Если элемент в базе отсутствует, 1С инициализирует сетевой запрос к TrueAPI ГИС МТ «Честный знак».
  3. В ответ система маркировки возвращает полное дерево агрегации для данного короба (все вложенные в него потребительские упаковки DataMatrix) в формате JSON или XML.
  4. На основе полученного ответа 1С «на лету» создает в справочнике ШтрихкодыУпаковокТоваров как саму запись транспортного короба, так и подчиненные записи для всех вложенных КМ.
  5. В форме подбора и проверки у всех созданных вложенных элементов автоматически устанавливается статус «Не проверялось». Оператор может довериться этим данным (доверительная приемка) либо выполнить выборочное сканирование для подтверждения соответствия.

3. Причина возникновения проблемы «пустой коробки» и ее решение

Иногда при сканировании группового штрихкода упаковки система не показывает вложенные товары — коробка отображается в форме подбора как абсолютно пустая. Почему так происходит?

Выясним причину: Этот сбой возникает из-за особенности кэширования кодов в 1С. Если элемент справочника ШтрихкодыУпаковокТоваров для данной коробки уже был создан ранее в системе (например, сгенерирован пустым во время незавершенных операций агрегации или ошибочных ручных манипуляций), то при сканировании система успешно находит его локально. Поскольку локальная запись существует, алгоритм 1С считает данные актуальными и блокирует отправку повторного запроса в ГИС МТ. В результате пользователь видит пустую коробку.

Рассмотрим два варианта решения этой проблемы:

Решение А. Ручное исправление штрихкода (без программирования)

Если инцидент единичный, выполните следующие действия:

  1. Найдите проблемный элемент в справочнике ШтрихкодыУпаковокТоваров через стандартный поиск или функции технического специалиста.
  2. Удалите этот элемент из базы данных. Если прямое удаление заблокировано ссылками, измените его наименование и значение штрихкода (например, добавьте в конец символ подчеркивания "_").
  3. Повторно отсканируйте оригинальный штрихкод упаковки в форме подбора. Поиск в локальной базе вернет ложный результат, система принудительно обратится в «Честный знак», заново скачает структуру вложенности и создаст корректные связанные записи.

Решение Б. Программный сброс кэша агрегации

Если проблема носит регулярный характер, имеет смысл внедрить небольшое расширение конфигурации, которое будет очищать или обновлять элементы справочника перед вызовом проверки. Проанализируем пример кода для принудительного удаления «пустых» записей:


// Процедура для очистки некорректно созданных пустых упаковок
Процедура АктуализироватьУпаковкуВБазе(ЗначениеШК) Экспорт
    СсылкаНаШК = Справочники.ШтрихкодыУпаковокТоваров.НайтиПоРеквизиту("ЗначениеШтрихкода", ЗначениеШК);
    Если ЗначениеЗаполнено(СсылкаНаШК) Тогда
        // Проверяем, есть ли реально вложенные элементы
        ТаблицаВложений = ПолучитьВложенныеКодыМаркировки(СсылкаНаШК);
        Если ТаблицаВложений.Количество() = 0 Тогда
            // Упаковка пустая локально — удаляем элемент для форсирования запроса к ГИС МТ
            ОбъектШК = СсылкаНаШК.ПолучитьОбъект();
            Попытка
                ОбъектШК.Удалить();
            Исключение
                // Если есть жесткие ссылки, хотя бы переименуем штрихкод
                ОбъектШК.ЗначениеШтрихкода = ОбъектШК.ЗначениеШтрихкода + "_ошибка";
                ОбъектШК.Записать();
            КонецПопытки;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

4. Настройка флага «Создавать штрихкоды упаковок»

Для правильного ведения учета в документах маркировки ИС МП (таких как «Маркировка товаров» с операциями «Производство» или «Агрегация») критически важно обращать внимание на флаг «Создавать штрихкоды упаковок».

Разберем, на что влияет эта настройка:

5. Физическая агрегация с ТСД против виртуальной

При производстве и подготовке продукции к отгрузке важно разделять два подхода к агрегации:

  1. Виртуальная агрегация: Подходит для полностью автоматизированных конвейерных линий. Структура упаковок рассчитывается математически в программе заранее. Главный минус — при любом физическом сбое (если в коробку фактически попал другой товар) данные в ГИС МТ станут некорректными, что приведет к блокировкам при последующих продажах.
  2. Физическая агрегация (с использованием ТСД): Сборщик сканирует штрихкод короба (SSCC), а затем последовательно считывает коды DataMatrix каждого укладываемого изделия. В этот момент терминал сбора данных передает информацию в 1С, которая корректно формирует дерево подчиненности в справочнике ШтрихкодыУпаковокТоваров. Именно этот способ гарантирует 100% соответствие физического наполнения коробов данным в системе маркировки.

Таким образом, понимание принципов работы справочника штрихкодов и механизмов взаимодействия 1С с ГИС МТ позволяет избежать досадных ошибок при оформлении цепочек маркируемой продукции и существенно повысить скорость обработки грузов на складе.

← На главную