Как исправить ошибку «Недопустимый символ» и дублирование строк при загрузке данных из Frontol 6 в УТ 11?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

При интеграции кассового программного обеспечения 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С одна проданная единица товара превращается в две строки. Проанализируем, почему это происходит:

  1. Двойное сканирование: Если кассир сначала сканирует линейный штрихкод (EAN-13), а затем код Data Matrix, Frontol может генерировать две разные транзакции или одну сложную транзакцию, которую типовые правила обмена 1С интерпретируют как две продажи одного и того же товара.
  2. Несоответствие версий формата: В настройках Frontol может быть установлена устаревшая версия формата обмена (например, 4.0 или 5.0), которая не знает о существовании полей для маркировки. В этом случае данные о марке записываются в дополнительные поля, которые 1С воспринимает как отдельные товарные позиции.
  3. Отсутствие связи «Товар-Марка»: Если в справочнике кассовой программы товар не помечен как маркированный, Frontol воспринимает сканирование Data Matrix как ввод произвольного штрихкода, создавая лишнюю строку в чеке.

Решение 1: Настройка параметров Frontol 6

Прежде чем приступать к доработке кода 1С, попробуем решить проблему настройками оборудования. В последних релизах Frontol 6 разработчики добавили инструменты для «очистки» выгружаемых данных. Рассмотрим последовательность действий:

  1. Зайдем в настройки Frontol в раздел «Обмен данными».
  2. Убедимся, что выбрана версия формата обмена не ниже 6.0. Это критично для корректной передачи реквизитов маркировки.
  3. В настройках работы с маркировкой (Честный Знак) найдем опцию, отвечающую за замену символа GS. Рекомендуется установить замену на символ решетки # или пробел. Это позволит 1С прочитать файл без ошибок парсинга XML.
  4. Проверим настройки сканирования. Если используется маркированный товар, настроим Frontol так, чтобы он запрашивал марку сразу после сканирования товара, либо использовал «Единый штрихкод» (если сканируется только Data Matrix). Это исключит двойные записи в транзакциях.

Решение 2: Использование внешней обработки загрузки

Поскольку у многих пользователей установлена Базовая версия УТ 11, внесение изменений в типовую конфигурацию невозможно. В этом случае единственным верным решением будет использование внешней обработки. Проанализируем преимущества этого метода:

Рассмотрим пример логики, которую следует реализовать в такой обработке для очистки данных. Нам необходимо прочитать файл построчно и принудительно удалить все запрещенные символы перед тем, как передавать данные в логику создания документов 1С.


Функция ОчиститьСтрокуОтЗапрещенныхСимволов(Знач ВходнаяСтрока)
    // Символы с кодами ниже 32, кроме 9 (таб), 10 (ПС), 13 (ВК)
    Для Сч = 1 По 31 Цикл
        Если Сч = 9 Или Сч = 10 Или Сч = 13 Тогда
            Продолжить;
        КонецЕсли;
        ВходнаяСтрока = СтрЗаменить(ВходнаяСтрока, Символ(Сч), "");
    КонецЦикла;
    
    // Также рекомендуется заменить специфические разделители, 
    // которые могут интерпретироваться как управляющие
    Возврат ВходнаяСтрока;
КонецФункции

Решение 3: Программная коррекция при парсинге транзакций

Если вы разрабатываете собственную загрузку или правите существующую (в случае версии ПРОФ), проанализируем, как правильно обрабатывать транзакции продажи (тип 11). Чтобы избежать дублей, необходимо проверять содержимое каждой строки. Если строка содержит информацию о марке, она должна дополнять предыдущую строку с товаром, а не создавать новую СборкаДеталейЗаказа.

Посмотрим на пример алгоритма разбора файла:

  1. Используем объект ТекстовыйДокумент для чтения файла выгрузки.
  2. Разделяем каждую строку методом СтрРазделить(ТекущаяСтрока, ";"), так как Frontol использует точку с запятой как разделитель.
  3. Проверяем номер транзакции (поле №1). Если это продажа, ищем в следующих полях (в зависимости от версии формата) сведения о коде маркировки.
  4. Если код маркировки найден, очищаем его от спецсимволов и привязываем к текущей позиции номенклатуры в документе Отчет о розничных продажах.

Рекомендации по обновлению драйверов

Проанализируем еще один важный аспект — драйвер торгового оборудования. В 1С:Управление торговлей 11 взаимодействие с Frontol в режиме Offline происходит через Драйвер АТОЛ:ККМ Оффлайн. Посмотрим на критические моменты:

Подводя итог, можно сказать, что проблема «недопустимого символа» — это следствие столкновения старых стандартов XML и новых требований маркировки. Использование внешних обработок с открытым кодом для парсинга текстовых файлов Frontol является наиболее гибким и стабильным решением, позволяющим избежать ошибок и дублирования данных в управленческом учете.

← На главную