При интеграции кассового программного обеспечения Frontol 6 с конфигурацией 1С:Управление торговлей 11.4 пользователи часто сталкиваются с проблемой: отчеты о розничных продажах загружаются, но коды маркировки (КМ) для обуви, табака или парфюмерии «теряются» или вызывают фатальную ошибку при загрузке. Проанализируем эту ситуацию подробно, выясним технические причины и найдем пути решения.
Ситуация обычно выглядит следующим образом: кассир успешно сканирует марку на кассе, чек пробивается, данные уходят в ОФД. Однако при попытке загрузить отчет о продажах в 1С (через механизм «Обмен с подключаемым оборудованием Offline») система выдает ошибку, связанную с некорректным текстом XML или просто игнорирует строки с кодами маркировки.
Рассмотрим типичную строку из файла отчета Frontol, которая вызывает затруднения:
55561;05.11.2020;16:16:28;11;1;13108;1;100173;;3900;1;3900;0;1566;3900;3900;0;;2000039990011;3900;0;0;1;0;;1/1566/13108;1;0;;;;5;010290000047743821>nlr¤jGQuCTBI 918039 927JIzrHQcBomxnJSutuQ/Oau2BXtlSxUSGVLzxSmsyaTFegIB9K4IFkKQVF28oNGKwKKHVuyVmorJ7CRW04HRmA==;;0;;;;;0;;;;;
В этой строке содержится полный код маркировки со всеми криптохвостами. Проблема заключается в том, что 1С на определенных релизах не может корректно интерпретировать эту последовательность символов.
Разберем техническую сторону вопроса. Код маркировки формата GS1 DataMatrix содержит специальный непечатный символ-разделитель — GS (Group Separator), имеющий ASCII-код 29 (шестнадцатеричный 0x1D). Этот символ жизненно важен для правильного парсинга кода, так как он отделяет одни группы данных (AI) от других.
Однако при обмене данными между 1С и внешними системами часто используется XML-сериализация. Согласно стандартам XML 1.0, управляющие символы в диапазоне кодов от 0 до 31 (за исключением табуляции, перевода строки и возврата каретки) являются недопустимыми. Когда 1С пытается передать строку, содержащую символ 0x1D, с клиента на сервер (или наоборот) в виде XML-пакета, платформа генерирует исключение.
Именно поэтому, как заметили многие специалисты, отладчик 1С «не заходит» внутрь функции обработки. Разберем этот момент подробнее:
// Ошибка возникает ПЕРЕД выполнением этой строки при передаче параметров
Возврат ОфлайнОборудованиеАтолККМВызовСервера.ОбработатьЗагружаемыеДанныеИзККМ(ТекстовыйДокумент, ФорматОбмена, ВыходныеПараметры);
Платформа пытается упаковать ТекстовыйДокумент в XML для вызова серверного метода, натыкается на байт 0x1D и прерывает выполнение, даже не заходя в саму функцию ОбработатьЗагружаемыеДанныеИзККМ.
В ранних версиях УТ 11.4.12 механизмы работы с маркировкой только обкатывались. Программа ожидала увидеть «чистый» код без лишних символов или в строго определенном формате. Если Frontol передавал марку с «хвостами», которые 1С не умела фильтровать в текстовом файле, загрузка либо обрывалась, либо код маркировки просто отбрасывался как некорректный.
Проанализируем настройки самой кассовой программы. Во Frontol 6, начиная с версий 6.8.x, появилась возможность влиять на формат выгружаемых данных. Попробуем выполнить следующие действия:
Часто это помогает платформе 1С более лояльно отнестись к спецсимволам при чтении текстового файла, так как драйвер ОфлайнОборудованиеАтолККМ внутри 1С при использовании UTF-8 применяет иные алгоритмы преобразования строк.
Как показывает практика и анализ чейнджлогов фирмы «1С», проблема была массово решена в релизе 11.4.13.51 и последующих. В этом обновлении были внесены существенные изменения в модули интеграции с ГИС МТ («Честный знак»):
Выясним, что именно изменилось. В новых релизах функция ОбработатьЗагружаемыеДанныеИзККМ стала предварительно «чистить» текст от управляющих символов до того, как они попадут в критически важные узлы системы. Если вы работаете на релизе ниже 11.4.13, обновление является обязательным условием для стабильной работы с маркировкой.
Если загрузить данные нужно «здесь и сейчас», а обновить конфигурацию невозможно, можно воспользоваться методом ручной очистки, но делать это нужно крайне осторожно. Рассмотрим алгоритм:
.rep или .txt) в продвинутом текстовом редакторе, например Notepad++.¶ на панели инструментов).GS, SOH или другие метки на черном фоне. Это и есть непечатные символы.GS (ASCII 29) на обычный пробел или просто удалить его.Важное предостережение: Если просто удалить код маркировки из строки транзакции, 1С может загрузить продажу товара, но в документе «Отчет о розничных продажах» позиция будет помечена как не прошедшая проверку маркировки. Это потребует ручного сопоставления в 1С, что трудозатратно при больших объемах.
После обновления 1С или смены настроек Frontol проведем проверку. Для этого:
Таким образом, мы выяснили, что корень проблемы лежит в техническом ограничении платформы 1С на передачу управляющих символов (GS) через XML в старых версиях конфигурации. Наиболее правильным и надежным решением является переход на релиз 11.4.13.51 или выше, где механизмы работы с ИС МП были переработаны с учетом этих особенностей.