При работе с алкогольной продукцией в программе 1С:Управление торговлей (редакция 11.4) пользователи часто сталкиваются с ситуацией, когда при проверке входящей ТТН программа отказывается принимать штрихкоды упаковок. Особенно остро эта проблема проявляется в старых релизах (например, 11.4.7.114), где механизмы интеграции с ЕГАИС содержат жесткие проверки на длину и формат штрихкода. Рассмотрим детально, почему это происходит и как исправить ситуацию.
Проанализируем ситуацию, с которой сталкивается программист при отладке. В форме Проверка и подбор алкогольной продукции ЕГАИС при сканировании упаковки (короба или палеты) система возвращает строку вида (01)00000054581031(90)00313283. Согласно международному стандарту GS1-128, это корректный код, где в скобках указаны идентификаторы применения (AI): (01) — GTIN товара, (90) — номер партии или внутренний идентификатор.
Однако встроенный парсер 1С в общем модуле ШтрихкодированиеЕГАИСКлиентСервер содержит функцию ЭтоШтрихкодЛогистическойУпаковки, которая работает по крайне жесткому алгоритму. Разберем фрагмент этого кода:
Функция ЭтоШтрихкодЛогистическойУпаковки(Штрихкод) Экспорт
Алфавит = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Если СтрДлина(Штрихкод) = 18 Тогда
// Проверка формата SSCC (Serial Shipping Container Code)
Если Не ШтрихкодированиеИСКлиентСервер.КодСоответствуетАлфавиту(Штрихкод, Алфавит) Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
ИначеЕсли СтрДлина(Штрихкод) = 26 Тогда
// Формат ФСРАР: Код организации (12) + Тип(1) + Площадка(2) + Год(2) + Номер(9)
// Общая длина: 12 + 14 = 26 символов
Возврат Истина;
Иначе
// Все остальное программа считает не штрихкодом упаковки
Возврат Ложь;
КонецЕсли;
КонецФункции
Как мы видим, код поставщика (01)00000054581031(90)00313283 не попадает ни под условие 18 символов (SSCC), ни под 26 символов (классический короб ЕГАИС). В результате программа возвращает Ложь, и процесс приемки блокируется.
Первое, что мы должны сделать — это проверить, как именно штрихкод представлен в базе и как его передает сканер. В стандарте GS1 скобки являются лишь визуальным представлением идентификаторов применения. В самом штрихкоде их нет, там используются спецсимволы (FNC1). Если сканер настроен на передачу скобок, 1С воспринимает их как часть данных, что увеличивает длину строки и ломает проверку.
Рассмотрим шаги по исправлению:
01000000545810319000313283. Если длина строки после этого станет соответствовать ожиданиям системы (хотя в данном примере она все равно не будет равна 18 или 26), проверка может пройти дальше.WayBill_v3.xml. Найдем тег <Identity> внутри блока <TransportUnit>. Если поставщик прислал код именно со скобками в XML, то 1С будет искать его в справочнике ШтрихкодыУпаковок именно в таком виде.Если ваша организация занимается розничной торговлей и вам не требуется вести строгий по-коробочный учет внутри склада (важна только проверка марок), можно применить организационный метод решения проблемы. Выясним причину, почему обязательна проверка упаковок. Часто в настройках интеграции с ЕГАИС включена опция "Обязательная проверка".
Если мы не можем изменить код программы (например, конфигурация находится на поддержке без возможности правки), мы можем воспользоваться механизмом "Принять всё" в форме проверки. В этом случае система подтвердит получение всех марок, указанных в накладной, игнорируя ошибки сканирования транспортных кодов. Однако этот метод допустим только в том случае, если вы доверяете поставщику и уверены в физическом наличии товара.
Если вы имеете доступ к редактированию конфигурации или используете расширения, разберем, как расширить логику проверки. Нам необходимо разрешить функции ЭтоШтрихкодЛогистическойУпаковки обрабатывать коды формата GS1-128, которые активно внедряются производителями (особенно для пивной продукции).
Проанализируем структуру штрихкода производителя:
Чтобы программа "узнала" новый штрихкод, можно добавить условие обработки строки произвольной длины, если она соответствует паттерну GS1. Пример изменения логики:
// В расширении для функции ЭтоШтрихкодЛогистическойУпаковки
&Вместо("ЭтоШтрихкодЛогистическойУпаковки")
Функция ИС_ЭтоШтрихкодЛогистическойУпаковки(Штрихкод)
// Очищаем код от возможных скобок, если они пришли со сканера
ЧистыйКод = СтрЗаменить(СтрЗаменить(Штрихкод, "(", ""), ")", "");
Длина = СтрДлина(ЧистыйКод);
Если Длина = 18 Или Длина = 26 Тогда
Возврат Истина;
ИначеЕсли Длина > 20 И Найти(Штрихкод, "(01)") > 0 Тогда
// Дополнительная логика для GS1-128
Возврат Истина;
КонецЕсли;
Возврат ПродолжитьВызов(Штрихкод);
КонецФункции
Важно понимать, что жесткое ограничение в 26 символов в 1С:УТ 11.4.7 — это наследие ранних этапов внедрения поштучного учета алкоголя. С развитием интеграции с системой Честный Знак и обновлением протоколов ЕГАИС (версии 3 и 4), форматы штрихкодов стали более гибкими.
Рассмотрим стратегические пути решения:
Подводя итог, отметим, что проблема со штрихкодами в УТ 11.4 чаще всего вызвана тем, что старый код программы не готов к многообразию форматов упаковки, которые разрешены законодательством. Использование расширений для корректировки функции ЭтоШтрихкодЛогистическойУпаковки или обновление до актуального релиза являются наиболее правильными техническими решениями.