При интеграции кассового программного обеспечения Frontol 6 с конфигурацией 1С:Управление торговлей 11 (УТ 11), особенно в базовых версиях, пользователи часто сталкиваются с критической ошибкой при попытке загрузить отчет о розничных продажах. Ситуация осложняется, если в смене велась торговля маркированным товаром (обувь, одежда, табак и т.д.). Система выдает сообщение о недопустимых символах в XML-файле, а при попытке ручной правки данных возникают дубли позиций номенклатуры.
В этой статье мы подробно проанализируем причины возникновения данной проблемы и разберем по шагам методы ее решения, включая программную обработку данных и настройку торгового оборудования.
Проанализируем техническую сторону вопроса. Когда 1С загружает данные из Frontol, она считывает текстовый файл выгрузки (обычно это формат CSV-подобный). Однако внутри механизмов 1С при обработке этих данных часто используется XML-сериализация или парсинг. Стандарт XML 1.0 накладывает жесткие ограничения на используемые символы. В частности, запрещены символы с ASCII-кодами ниже 32 (за исключением табуляции, возврата каретки и перевода строки).
Выясним, откуда берутся эти символы. Код маркировки Data Matrix содержит специальные разделители групп данных (Application Identifiers). Самым распространенным «проблемным» символом является GS (Group Separator), имеющий код 29 (или 1D в шестнадцатеричной системе). Когда кассир сканирует марку, Frontol записывает ее в файл выгрузки целиком, включая этот невидимый спецсимвол. Как только 1С встречает его при попытке разбора XML-структуры, процесс прерывается ошибкой.
Часто после удаления проблемного кода маркировки из файла вручную пользователь замечает, что в 1С одна проданная единица товара превращается в две строки. Проанализируем, почему это происходит:
Прежде чем приступать к доработке кода 1С, попробуем решить проблему настройками оборудования. В последних релизах Frontol 6 разработчики добавили инструменты для «очистки» выгружаемых данных. Рассмотрим последовательность действий:
# или пробел. Это позволит 1С прочитать файл без ошибок парсинга XML.Поскольку у многих пользователей установлена Базовая версия УТ 11, внесение изменений в типовую конфигурацию невозможно. В этом случае единственным верным решением будет использование внешней обработки. Проанализируем преимущества этого метода:
Рассмотрим пример логики, которую следует реализовать в такой обработке для очистки данных. Нам необходимо прочитать файл построчно и принудительно удалить все запрещенные символы перед тем, как передавать данные в логику создания документов 1С.
Функция ОчиститьСтрокуОтЗапрещенныхСимволов(Знач ВходнаяСтрока)
// Символы с кодами ниже 32, кроме 9 (таб), 10 (ПС), 13 (ВК)
Для Сч = 1 По 31 Цикл
Если Сч = 9 Или Сч = 10 Или Сч = 13 Тогда
Продолжить;
КонецЕсли;
ВходнаяСтрока = СтрЗаменить(ВходнаяСтрока, Символ(Сч), "");
КонецЦикла;
// Также рекомендуется заменить специфические разделители,
// которые могут интерпретироваться как управляющие
Возврат ВходнаяСтрока;
КонецФункции
Если вы разрабатываете собственную загрузку или правите существующую (в случае версии ПРОФ), проанализируем, как правильно обрабатывать транзакции продажи (тип 11). Чтобы избежать дублей, необходимо проверять содержимое каждой строки. Если строка содержит информацию о марке, она должна дополнять предыдущую строку с товаром, а не создавать новую СборкаДеталейЗаказа.
Посмотрим на пример алгоритма разбора файла:
ТекстовыйДокумент для чтения файла выгрузки.СтрРазделить(ТекущаяСтрока, ";"), так как Frontol использует точку с запятой как разделитель.Проанализируем еще один важный аспект — драйвер торгового оборудования. В 1С:Управление торговлей 11 взаимодействие с Frontol в режиме Offline происходит через Драйвер АТОЛ:ККМ Оффлайн. Посмотрим на критические моменты:
Подводя итог, можно сказать, что проблема «недопустимого символа» — это следствие столкновения старых стандартов XML и новых требований маркировки. Использование внешних обработок с открытым кодом для парсинга текстовых файлов Frontol является наиболее гибким и стабильным решением, позволяющим избежать ошибок и дублирования данных в управленческом учете.