При работе с маркированными товарами (обувь, одежда, табак) в программе 1С:Розница пользователи часто сталкиваются с проблемой: товар успешно продан через РМК, данные ушли в «Честный Знак», но при попытке выгрузить отчет для поставщика выясняется, что в самом документе Чек ККМ табличная часть с кодами маркировки кажется пустой или содержит неполные данные. Разберем подробно, где физически хранятся эти коды и как их извлечь для формирования отчетности.
Для начала проанализируем ситуацию: почему в табличной части «Коды маркировки» документа Чек ККМ зачастую ничего нет? В типовых конфигурациях 1С, начиная с версий 2.3 и выше, архитектура хранения данных оптимизирована. Полный код DataMatrix (включая криптохвост) занимает много места, поэтому программа часто записывает только идентификаторы, необходимые для связи со справочниками.
Рассмотрим основные места хранения:
SerialNumber часто содержит серийный номер (блок 21), а поле GTIN — международный код товара (блок 01).Если нам нужно получить именно тот код, который ушел в ОФД и «Честный Знак», мы можем обратиться к истории фискальных операций. Посмотрим, как это сделать вручную в интерфейсе программы:
Проанализируем содержимое XML. Нас интересуют теги, отвечающие за маркировку. В зависимости от версии ФФД (1.05, 1.1 или 1.2), это могут быть теги 1162 или 2108. Внутри этих тегов в кодировке Base64 или в виде шестнадцатеричной строки хранится код маркировки. Программное чтение этого узла позволит выгрузить точные данные, которые были физически считаны сканером в момент продажи.
Выясним причину, по которой 1С разделяет код на части. Согласно стандарту GS1, код DataMatrix состоит из групп данных (Application Identifiers — AI). Посмотрим на пример структуры для обуви:
01 (GTIN) + 21 (Серийный номер) + 91 (Ключ) + 92 (Криптохвост)
В справочнике ШтрихкодыУпаковокТоваров 1С обычно хранит:
Чтобы собрать полный DataMatrix для поставщика, мы можем использовать следующий алгоритм в коде:
// Пример логики сборки кода
СтрокаКода = "01" + СокрЛП(СсылкаНаШтрихкод.GTIN) + "21" + СокрЛП(СсылкаНаШтрихкод.SerialNumber);
// Если в системе настроено хранение криптохвоста:
Если ЗначениеЗаполнено(СсылкаНаШтрихкод.ЗначениеШтрихкода) Тогда
Результат = СсылкаНаШтрихкод.ЗначениеШтрихкода;
Иначе
Результат = СтрокаКода;
КонецЕсли;
Важно помнить, что для отчетности перед поставщиком или для возврата товара поставщику чаще всего достаточно связки GTIN + SerialNumber, так как криптохвост (блок 92) требуется только для проверки подлинности при выбытии на кассе и не участвует в обороте между контрагентами в ЭДО.
Для массовой выгрузки проданных кодов за период проанализируем ситуацию через запрос к базе данных. Нам понадобится связь между документом ЧекККМ и справочником штрихкодов. Рассмотрим пример запроса, который можно использовать в консоли отчетов или внешней обработке:
ВЫБРАТЬ
ЧекККМТовары.Ссылка КАК ДокументПродажи,
ЧекККМТовары.Номенклатура,
ШтрихкодыУпаковок.ЗначениеШтрихкода КАК ПолныйКод,
ШтрихкодыУпаковок.СерийныйНомер КАК Серия
ИЗ
Документ.ЧекККМ.Товары КАК ЧекККМТовары
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ШтрихкодыУпаковокТоваров КАК ШтрихкодыУпаковок
ПО ЧекККМТовары.КлючСвязи = ШтрихкодыУпаковок.КлючСвязи // Уточните поле связи для вашей версии
ГДЕ
ЧекККМТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
Обратите внимание, что в последних версиях 1С:Розница связь может быть реализована через промежуточный регистр сведений СтатусыКодовМаркировкиИСМП. Проанализируем этот регистр: в нем хранятся измерения Организация, Номенклатура и ШтрихкодУпаковки, а также ресурс Статус (например, «Выбыл»).
Если вы обнаружили, что в Чек ККМ данные отсутствуют даже на уровне технических полей, проверим настройки системы:
Если поставщик требует список проданных марок, а в 1С данные хранятся разрозненно, рассмотрим альтернативный вариант через Личный Кабинет (ЛК) «Честного Знака»:
1. Выгрузка из ЛК Честный Знак: В разделе «Коды маркировки» можно установить фильтр по статусу «Выбыл» и дате совершения операции. Система позволит выгрузить CSV или Excel файл со всеми кодами, которые ваша организация вывела из оборота через розничные продажи.
2. Личный кабинет ОФД: Операторы фискальных данных хранят полную копию чека, включая тег 1162. Почти все современные ОФД предоставляют услугу выгрузки отчета по маркировке, где коды представлены в чистом текстовом виде.
Подводя итог, отметим: несмотря на то, что интерфейс 1С:Розница не всегда отображает полный DataMatrix в привычном виде в документе продажи, данные физически присутствуют в системе либо в справочнике ШтрихкодыУпаковокТоваров, либо в XML-логах фискальных операций. Выбор метода зависит от того, нужен ли вам полный код с криптохвостом или достаточно идентификаторов GTIN и серийного номера.