В современной торговле часто встречается архитектурный подход, при котором оперативный учет ведется во внешней или исторически сложившейся самописной конфигурации (например, на базе старых версий 1С:Управление торговлей), а регламентированный учет и отправка отчетности происходят в обновляемой типовой 1С:Бухгалтерии 3.0. С введением обязательной маркировки товаров «Честный Знак» (ГИС МТ) перед разработчиками встает сложная техническая задача: как корректно передать сведения о кодах маркировки (КМ) из торговой базы в 1С:Бухгалтерию 3.0 так, чтобы встроенный модуль 1С-ЭДО без ошибок сформировал электронный УПД и передал коды контрагенту и в систему маркировки.
В этой статье мы подробно разберем структуру хранения кодов маркировки в 1С:Бухгалтерии 3.0, проанализируем технические нюансы работы с криптохвостами и спецсимволами, а также приведем готовые примеры программного кода для автоматического заполнения документов реализации.
Для того чтобы 1С-ЭДО автоматически подтянул коды маркировки в XML-файл электронного документа (в секцию НомСредИдентТов), нам не нужно задействовать сложные регистры подсистемы ИСМП. Достаточно правильно заполнить два основных объекта конфигурации:
ШтрихкодыУпаковокТоваров — именно здесь хранятся сами штрихкоды упаковок и индивидуальные коды маркировки (DataMatrix). Каждый код заводится как отдельный элемент этого справочника с указанием номенклатуры, типа упаковки и типа штрихкода.ШтрихкодыУпаковок в документе РеализацияТоваровУслуг (или других торговых документах, например, ВозвратТоваровПоставщику) — эта табличная часть связывает строки товаров документа с созданными элементами справочника ШтрихкодыУпаковокТоваров.Рассмотрим по шагам, как правильно подготовить данные и программно связать их в 1С:Бухгалтерии 3.0.
При переносе кодов маркировки из внешней базы ключевым моментом является правильный формат самого кода. Нам необходимо передавать чистый код маркировки (GTIN + серийный номер), без криптографического хвоста (подписи) и без перекодирования в BASE64.
Выясним причину, почему это важно. Криптохвост (ключ проверки и код проверки, начинающиеся с идентификаторов применения 91 и 92) используется при розничной продаже на кассе или при импорте/вводе в оборот. Однако в электронном УПД при оптовой передаче прав собственности правила ГИС МТ требуют передачи только идентификаторов товара и серийного номера (первые две группы данных: AI 01 - GTIN и AI 21 - серийный номер). Длина строки КМ для каждой товарной группы жестко регламентирована (например, для обуви, одежды, шин или лекарств длина будет различаться).
Рассмотрим простейший пример заполнения справочника ШтрихкодыУпаковокТоваров напрямую через создание нового элемента:
НовЭлемент = Справочники.ШтрихкодыУпаковокТоваров.СоздатьЭлемент();
НовЭлемент.ТипУпаковки = Перечисления.ТипыУпаковок.МаркированныйТовар;
НовЭлемент.ТипШтрихкода = Перечисления.ТипыШтрихкодов.GS1_DataMatrix;
// Передаем код в чистом виде (например, 0104650072277488215!M*.,)
НовЭлемент.ЗначениеШтрихкода = СтрокаДанных.КодМаркировки;
НовЭлемент.Номенклатура = НайденнаяНоменклатура;
НовЭлемент.Количество = 1;
НовЭлемент.ДатаУпаковки = ТекущаяДата();
НовЭлемент.Записать();
СсылкаНаШтрихкод = НовЭлемент.Ссылка;
В современных релизах 1С:Бухгалтерии 3.0 прямой метод создания элемента через СоздатьЭлемент() может приводить к ошибкам контроля уникальности или некорректному расчету хэш-сумм нормализации. Платформа 1С использует внутренние механизмы индексации и контроля дублей. Чтобы избежать этих проблем, рекомендуется использовать встроенную функцию менеджера справочника:
СпрШУТ = Справочники.ШтрихкодыУпаковокТоваров;
// Подготавливаем структуру параметров для генерации штрихкода
ДанныеШтрихкода = СпрШУТ.СтруктураСозданияШтрихкодаУпаковки();
ДанныеШтрихкода.ТипУпаковки = Перечисления.ТипыУпаковок.МаркированныйТовар;
ДанныеШтрихкода.Номенклатура = НайденнаяНоменклатура;
ДанныеШтрихкода.Количество = 1;
ДанныеШтрихкода.ТипШтрихкода = Перечисления.ТипыШтрихкодов.GS1_DataMatrix;
ДанныеШтрихкода.Штрихкод = СтрокаДанных.КодМаркировки; // чистый код формата GS1
// Создаем элемент через менеджер - система сама проверит дубли и рассчитает ХешСуммаНормализации
СсылкаНаШтрихкод = СпрШУТ.СоздатьШтрихкодУпаковки(ДанныеШтрихкода);
Использование функции СоздатьШтрихкодУпаковки гарантирует, что в базе не будут плодиться дубликаты одних и тех же кодов маркировки при повторных обменах, так как система выполнит поиск по хэшу.
После того как элементы справочника ШтрихкодыУпаковокТоваров созданы или найдены, нам нужно привязать их к документу реализации. Для этого мы программно заполняем табличную часть ШтрихкодыУпаковок в объекте документа.
Посмотрим на пример кода, выполняющего эту операцию при проведении интеграции:
// Предположим, что ДокОбъект - это полученный объект документа РеализацияТоваровУслуг
// Перед заполнением очистим старые привязки для избежания задвоения данных
ДокОбъект.ШтрихкодыУпаковок.Очистить();
Для Каждого СтрокаТЧ Из ТаблицаМаркировкиВнешнейБазы Цикл
// Шаг 2.1. Создаем штрихкод в справочнике (как описано выше)
// ... Получаем СсылкаНаШтрихкод ...
// Шаг 2.2. Записываем привязку в документ
НоваяСтрокаШК = ДокОбъект.ШтрихкодыУпаковок.Добавить();
НоваяСтрокаШК.ШтрихкодУпаковки = СсылкаНаШтрихкод;
КонецЦикла;
// Записываем и проводим документ для вступления изменений в силу
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
После правильного программного заполнения указанных таблиц, при формировании УПД и отправке его через сервис 1С-ЭДО, система автоматически обратится к связанным элементам справочника штрихкодов. В результирующем файле электронного документа внутри товарной позиции (тег СведТов) будет автоматически сформирован блок НомСредИдентТов с кодами маркировки:
<НомСредИдентТов>
<КИЗ>0104650072277488215!M*.,</КИЗ>
<КИЗ>0104650072277488215")(Sq</КИЗ>
<КИЗ>0104650072277488215%C=Xu</КИЗ>
</НомСредИдентТов>
При подписании такого документа покупателем оператор ЭДО самостоятельно передаст сведения в систему «Честный Знак», и коды из этого списка перейдут в собственность вашего контрагента. В качестве альтернативы встроенному сервису можно использовать обработку для выгрузки УПД с кодами маркировки в формате XML для ЭДО Лайт.
Проанализируем несколько критически важных деталей интеграции, игнорирование которых часто приводит к ошибкам при отправке УПД или при обработке документа на стороне ГИС МТ.
Коды маркировки формата GS1 DataMatrix используют специальный непечатный символ-разделитель групп данных GS (код ASCII 29). При переносе текстовой строки из внешней базы данных (особенно через XML-файлы, JSON или промежуточные текстовые файлы) этот символ может теряться или преобразовываться в обычные пробелы, знаки подчеркивания или другие символы.
Если записать в справочник ШтрихкодыУпаковокТоваров код с утерянным разделителем GS, «Честный Знак» может отклонить УПД. Чтобы восстановить корректную структуру кода внутри 1С, рекомендуется использовать методы встроенных общих модулей, например, ШтрихкодированиеИСКлиентСервер.ШтрихкодВФорматеGS1() или осуществлять предварительную очистку/замену некорректных символов в строке перед записью.
При интеграции обмена обязательно учитывайте вид маркируемой продукции:
ШтрихкодыУпаковокТоваров обязателен к выполнению.02[GTIN]37[Количество].Технически оператор ЭДО отправит файл с любыми кодами маркировки, которые вы программно привяжете к документу. Однако, если переданные коды:
то в момент подписания УПД покупателем Честный Знак заблокирует транзакцию перехода прав собственности, и ваш клиент получит ошибку. Чтобы обезопасить бизнес от таких ситуаций, рекомендуется задействовать штатный механизм проверки статусов в 1С:Бухгалтерии 3.0 перед отправкой. Для этого перед началом сессии ЭДО можно вызвать стандартный метод проверки подсистемы ИСМП. Для получения и сверки числящихся за организацией кодов можно использовать внешнюю обработку для запроса остатков маркировки в Честном знаке.
По умолчанию типовая конфигурация 1С:Бухгалтерия 3.0 скрывает от обычного пользователя табличную часть ШтрихкодыУпаковок в документе «Реализация товаров и услуг». Бухгалтер видит лишь зеленый или красный значок статуса маркировки рядом с количеством товара в строке, но не может посмотреть конкретные переданные КМ без выгрузки документа в XML.
Чтобы облегчить работу технической поддержке и бухгалтерам при возникновении спорных ситуаций с покупателями, рекомендуется разработать небольшое расширение конфигурации. Это расширение может выводить скрытую ТЧ ШтрихкодыУпаковок непосредственно на форму документа реализации (в виде отдельной вкладки или модального окна). Таким образом, пользователи всегда смогут визуально сверить, какие именно коды были перенесены из внешней торговой базы и будут переданы в УПД.
Применяя описанный подход с заполнением справочника ШтрихкодыУпаковокТоваров и связыванием данных с табличной частью документа реализации, вы сможете быстро и надежно настроить стабильный обмен маркированной продукцией между любой внешней системой и 1С:Бухгалтерией 3.0.