При работе с маркированными товарами (обувь, одежда, парфюмерия) в программе 1С:Управление торговлей 11.4 пользователи часто сталкиваются с критической ошибкой при попытке сканирования кода DataMatrix. Ошибка формулируется как «Текст XML содержит недопустимый символ в позиции...». Это препятствует нормальной приемке и отгрузке товаров, создавая простои в работе склада. В данной статье мы подробно разберем природу этой ошибки и рассмотрим пошаговые методы её решения.
Для начала проанализируем ситуацию с технической точки зрения. Код маркировки формата DataMatrix строится по стандарту GS1. Особенностью этого стандарта является использование специальных управляющих символов-разделителей. Самым распространенным из них является символ GS (Group Separator), имеющий код ASCII 29. Этот символ необходим для того, чтобы информационные системы могли отличить, где заканчивается один идентификатор применения (например, серийный номер) и начинается другой (например, дата окончания срока годности или криптохвост).
Проблема заключается в том, что взаимодействие между драйвером сканера и конфигурацией 1С происходит через передачу данных в формате XML. Согласно спецификации XML 1.0, управляющие символы с кодами меньше 32 (за исключением табуляции и перевода строки) являются недопустимыми. Когда сканер считывает код и передает его «как есть», библиотека 1С пытается сформировать XML-пакет для дальнейшей обработки. Как только парсер натыкается на символ с кодом 29, он выдает ошибку, так как этот символ запрещен стандартом.
Рассмотрим, почему ошибка часто возникает именно в позиции 31 или близкой к ней. Типичный код маркировки обуви содержит:
Суммарно это как раз выводит нас на позицию в районе 30-31 символа, где располагается первый непечатный разделитель. Если сканер настроен на передачу этого символа в поток данных без экранирования, 1С не сможет обработать полученную строку.
Первым делом рассмотрим аппаратные настройки. Если вы используете сканер Mindeo 6600 или аналогичные 2D-модели, попробуйте изменить режим работы разделителей. Разберем по шагам:
1. Режим эмуляции COM-порта. Проверьте, что сканер работает в режиме NativeApi через виртуальный COM-порт. Это наиболее стабильный режим для 1С. Убедитесь, что в диспетчере устройств Windows порт определен корректно, а в настройках 1С выбран соответствующий номер порта.
2. Программирование сканера. Возьмите руководство программирования (Programming Manual) для вашей модели. Вам необходимо найти штрихкоды для настройки GS1 DataMatrix Output. Существует несколько вариантов:
GS на печатную последовательность (например, на группу символов или пробел).Если настройка сканера не помогает или требуется универсальное решение для всех рабочих мест, обратимся к программному коду. В составе Библиотеки Стандартных Подсистем (БСП), на которой построена УТ 11.4, есть специальный метод для борьбы с такими символами. Рассмотрим пример его использования.
Нам поможет метод ЗаменитьНедопустимыеСимволыXML. Его задача — найти в строке все символы, которые «сломают» XML-парсер, и заменить их на безопасные аналоги или удалить их.
Проанализируем пример кода, который можно внедрить в процедуру обработки события от сканера (обычно это модуль МенеджерОборудованияКлиент или специализированные модули обработки маркировки):
// Пример очистки строки перед формированием XML
ИсходныеДанные = "Текст_с_символом_GS_внутри";
БезопасныеДанные = ОбщегоНазначения.ЗаменитьНедопустимыеСимволыXML(ИсходныеДанные, "-");
// Теперь переменная БезопасныеДанные может быть передана в парсер без ошибок
В данном примере функция заменяет все «плохие» символы на дефис. Однако для маркировки лучше использовать замену на пустую строку или проверять, как именно подсистема 1С:Маркировка ожидает увидеть эти данные.
Посмотрим на ситуацию со стороны программного обеспечения. Фирма 1С регулярно выпускает исправления (патчи) для конфигураций. Выясним, как это может помочь:
Разберем, как проверить, что именно передает сканер. Для этого воспользуемся редактором Notepad++:
GS (или Group Separator), значит, сканер передает спецсимвол «как есть».Если после сканирования в блокноте вообще нет никаких разделителей, а 1С все равно ругается, возможно, проблема в скрытых символах префикса или суффикса, которые также стоит проверить в настройках драйвера в 1С.
Важный момент: Если вы используете ФФД 1.2, требования к корректности считывания кодов маркировки становятся еще жестче. Убедитесь, что ваша ККТ и драйвер торгового оборудования поддерживают работу с данными кодами без искажения их структуры.
Подводя итог, можно сказать, что наиболее эффективным решением является комбинация обновления драйверов NativeApi и установки актуальных патчей конфигурации 1С. Это позволит системе корректно обрабатывать спецсимволы стандарта GS1, не вызывая сбоев в работе XML-парсера.