Интеграция систем класса 1С:ERP Управление предприятием и 1С:Комплексная автоматизация с государственной информационной системой маркировки товаров (ГИС МТ «Честный знак») часто вызывает вопросы у технических специалистов и архитекторов систем. Один из ключевых вопросов: как физически организовано хранение кодов маркировки (КМ) в информационной базе 1С, запрашиваются ли они динамически при сканировании и как корректно работать с агрегированными упаковками (коробами, палетами), чтобы избежать ошибок пустых контейнеров?
В этой статье мы подробно разберем внутреннюю архитектуру хранения маркируемой продукции, проанализируем механизмы автоматического запроса вложенности и выясним, как решить популярную проблему «пустой коробки» при приемке или отгрузке товаров.
Вопреки распространенному заблуждению, при оформлении поступления, производства или отгрузки маркируемой продукции все считанные и верифицированные коды физически записываются в базу данных 1С. Основным реестром для хранения этой информации является справочник ШтрихкодыУпаковокТоваров (в зависимости от релиза конфигурации он также может называться «Штрихкоды упаковок и товаров»).
Рассмотрим ключевые особенности структуры этого справочника:
(01) и (21)), но без криптографического хвоста (символов проверки, идущих после групп 91 и 92). Это позволяет быстро осуществлять поиск по штрихкоду, не перегружая СУБД избыточными данными.Ниже приведен концептуальный пример кода, демонстрирующий, как программно можно проверить наличие вложенных КМ в конкретной упаковке в базе 1С:
// Пример проверки наличия вложенных элементов в справочнике штрихкодов
Функция ПолучитьВложенныеКодыМаркировки(РодительскаяУпаковка) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ШтрихкодыУпаковок.Ссылка КАК КодМаркировки,
| ШтрихкодыУпаковок.ЗначениеШтрихкода КАК Значение
|ИЗ
| Справочник.ШтрихкодыУпаковокТоваров КАК ШтрихкодыУпаковок
|ГДЕ
| ШтрихкодыУпаковок.Родитель = &РодительскаяУпаковка";
Запрос.УстановитьПараметр("РодительскаяУпаковка", РодительскаяУпаковка);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Проанализируем сценарий, когда мы сканируем штрихкод короба (SSCC), которого еще нет в нашей локальной базе данных. В этот момент в форме «Подбор и проверка маркируемой продукции» срабатывает следующий алгоритм:
ШтрихкодыУпаковокТоваров с помощью стандартных поисковых механизмов (например, метода ПолучитьПоЗначениюШтрихкода()).ШтрихкодыУпаковокТоваров как саму запись транспортного короба, так и подчиненные записи для всех вложенных КМ.Иногда при сканировании группового штрихкода упаковки система не показывает вложенные товары — коробка отображается в форме подбора как абсолютно пустая. Почему так происходит?
Выясним причину: Этот сбой возникает из-за особенности кэширования кодов в 1С. Если элемент справочника ШтрихкодыУпаковокТоваров для данной коробки уже был создан ранее в системе (например, сгенерирован пустым во время незавершенных операций агрегации или ошибочных ручных манипуляций), то при сканировании система успешно находит его локально. Поскольку локальная запись существует, алгоритм 1С считает данные актуальными и блокирует отправку повторного запроса в ГИС МТ. В результате пользователь видит пустую коробку.
Рассмотрим два варианта решения этой проблемы:
Если инцидент единичный, выполните следующие действия:
ШтрихкодыУпаковокТоваров через стандартный поиск или функции технического специалиста."_").Если проблема носит регулярный характер, имеет смысл внедрить небольшое расширение конфигурации, которое будет очищать или обновлять элементы справочника перед вызовом проверки. Проанализируем пример кода для принудительного удаления «пустых» записей:
// Процедура для очистки некорректно созданных пустых упаковок
Процедура АктуализироватьУпаковкуВБазе(ЗначениеШК) Экспорт
СсылкаНаШК = Справочники.ШтрихкодыУпаковокТоваров.НайтиПоРеквизиту("ЗначениеШтрихкода", ЗначениеШК);
Если ЗначениеЗаполнено(СсылкаНаШК) Тогда
// Проверяем, есть ли реально вложенные элементы
ТаблицаВложений = ПолучитьВложенныеКодыМаркировки(СсылкаНаШК);
Если ТаблицаВложений.Количество() = 0 Тогда
// Упаковка пустая локально — удаляем элемент для форсирования запроса к ГИС МТ
ОбъектШК = СсылкаНаШК.ПолучитьОбъект();
Попытка
ОбъектШК.Удалить();
Исключение
// Если есть жесткие ссылки, хотя бы переименуем штрихкод
ОбъектШК.ЗначениеШтрихкода = ОбъектШК.ЗначениеШтрихкода + "_ошибка";
ОбъектШК.Записать();
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Для правильного ведения учета в документах маркировки ИС МП (таких как «Маркировка товаров» с операциями «Производство» или «Агрегация») критически важно обращать внимание на флаг «Создавать штрихкоды упаковок».
Разберем, на что влияет эта настройка:
ШтрихкодыУпаковокТоваров. При дальнейших складских операциях сканирование кода мгновенно определяет всю необходимую аналитику без лишних диалоговых окон.При производстве и подготовке продукции к отгрузке важно разделять два подхода к агрегации:
ШтрихкодыУпаковокТоваров. Именно этот способ гарантирует 100% соответствие физического наполнения коробов данным в системе маркировки.Таким образом, понимание принципов работы справочника штрихкодов и механизмов взаимодействия 1С с ГИС МТ позволяет избежать досадных ошибок при оформлении цепочек маркируемой продукции и существенно повысить скорость обработки грузов на складе.