Ошибка «Текст XML содержит недопустимый символ в позиции 31» при сканировании маркировки в 1С

· Обновлено 12.07.2026 · ⏱ 7 мин · Редакция 1s-83.com

📋 Содержание

Ошибка появляется потому, что сканер передал в 1С служебный символ-разделитель из кода DataMatrix (обычно это GS, код 29), а он недопустим в XML. Лечится не в самой 1С, а настройкой сканера или его драйвера — программу переустанавливать не нужно.

Полный текст обычно такой: Текст XML содержит недопустимый символ в позиции 31. Позиция 31 — это не «31-я буква на экране», а место в потоке байтов, где стоит непечатный управляющий символ. Именно на нём разбор XML и падает.

💡 Если сканер до этого работал, а ошибка вылезла резко — почти всегда виноват сброс настроек сканера (сел аккумулятор, перепрошивка, смена USB-порта), а не 1С.

Почему текст XML содержит недопустимый символ

Код маркировки «Честного знака» — это не просто цифры. Внутри DataMatrix зашита структура из групп, и группы разделяются служебным символом GS (Group Separator, ASCII-код 29, он же 0x1D).

Пример «сырого» кода (стрелкой показан невидимый разделитель):

0104607177870016215aBc9d↔93dGVz

Где — тот самый GS. На экране его не видно, но в поток данных он попадает.

Когда 1С формирует из отсканированной строки XML для проверки в ГИС МТ, она подставляет символы «как есть». Печатные символы XML принимает. А управляющий (GS, а иногда Tab, NUL, перевод строки) — нет, и разбор рушится с сообщением про позицию.

Основные причины по частоте:

  • 🔴 Сканер отдаёт GS «сырым» — самая частая. Нужен режим передачи, где разделитель кодируется корректно.
  • 🟠 Слетела настройка суффикса/префикса сканера после сброса.
  • 🟡 Устаревший драйвер оборудования в 1С (или отсутствует «1С:Сканер штрихкода»).
  • 🟢 Помехи по USB — длинный кабель, хаб, удлинитель добавляют «мусорные» байты.
  • 🔵 Старый релиз конфигурации, где нет корректной обработки GS.

Быстрая диагностика: с чего начать

Прежде чем перенастраивать сканер, определите, где рвётся. Ниже — типичные симптомы и что они означают.

🩺 Диагностика: выберите симптом

Способ 1. Настроить сканер на передачу разделителя

Это решает проблему в большинстве случаев. Задача — заставить сканер передавать GS не «голым» символом, а в понятном 1С виде.

Есть два рабочих варианта, зависит от модели сканера.

Вариант А — передача в Base64

Многие сканеры (Honeywell, Zebra, Newland) умеют кодировать управляющие символы. В настройках это называется по-разному: Transmit GS as, Data Format, Function Code Transmission.

Порядок:

  1. Возьмите паспорт (программное руководство) к вашей модели сканера.
  2. Найдите раздел про GS1 / DataMatrix и передачу разделителей.
  3. Отсканируйте служебный штрихкод, включающий передачу GS как ]d2 или замену на видимый символ.

Вариант Б — замена GS на управляющий символ

Часть сканеров позволяет заменить GS на <GS> или на группу ^] (ASCII 29 в escape-виде), которую драйвер 1С распознаёт корректно.

⚠️ Перед перенастройкой сканера запишите или сфотографируйте текущие рабочие штрихкоды из паспорта. Если что-то пойдёт не так — вернёте как было заводским сбросом.

Проверьте результат просто: откройте «Блокнот», отсканируйте код маркировки. Если между группами появляется видимый пробел или спецсимвол вместо «слипшихся» цифр — настройка встала.

Способ 2. Режим эмуляции COM-порта

Если сканер подключён как «клавиатура» (HID), управляющие символы часто теряются или искажаются. Режим эмуляции COM-порта (Virtual COM) передаёт данные потоком и обычно решает вопрос с GS.

Что сделать:

  1. Переведите сканер в режим USB COM / Virtual COM Port служебным штрихкодом из паспорта.
  2. Установите драйвер виртуального COM-порта производителя (обычно есть на сайте вендора).
  3. В 1С зайдите в Администрирование → Подключаемое оборудование.
  4. Настройте сканер на этот COM-порт через драйвер 1С:Сканер штрихкода (NativeApi).
Чек-лист настройки сканера для маркировки
Выполнено: 0 / 5

💡 После смены режима сканер часто нужно один раз «переподключить» в подключаемом оборудовании 1С — старую настройку удалить, добавить заново.

Способ 3. Обновить конфигурацию и драйвер

Иногда символ приходит корректный, но старая версия конфигурации его не обрабатывает. Особенно это касается баз, где давно не обновляли релиз.

  • Обновите конфигурацию (Розница, Управление торговлей, Бухгалтерия с блоком маркировки) до актуального релиза.
  • Обновите драйвер 1С:Сканер штрихкода до последней версии в подключаемом оборудовании.
  • Если баз несколько и ошибка только в одной — сравните релизы: скорее всего, отстающую и лечим.

Программная очистка строки (когда 1С сама вырезает недопустимые символы) появилась в свежих релизах — поэтому обновление часто снимает проблему без плясок со сканером.

Способ 4. Скорость передачи и суффикс

Управляющий символ может «биться» из-за неверной скорости или лишнего суффикса.

Что проверить:

  • Суффикс сканера. Для маркировки обычно нужен суффикс Enter (CR). Лишний Tab или двойной перевод строки ломает разбор.
  • Скорость COM-порта. Стандарт — 9600 бод. Слишком высокая скорость на длинном кабеле даёт сбои.
  • Кодировка. Убедитесь, что сканер не переключён на нестандартную кодовую страницу.
ПараметрРекомендуемое значениеЧем грозит неверное
СуффиксEnter (CR)Данные не завершаются, ошибка разбора
Скорость (COM)9600 бод«Мусорные» символы, плавающая позиция
РежимVirtual COM / Base64 GSGS приходит сырым → позиция 31
ПрефикспустоСмещение позиции символа

Способ 5. Помехи, USB-хабы и кабель

Если позиция в ошибке «плавает» (то 31, то 27, то 45) — виноват не код, а физика передачи.

  • ❌ Уберите USB-хаб — подключите сканер напрямую в порт ПК.
  • ❌ Откажитесь от длинных удлинителей USB (дольше 3 м без активного повторителя).
  • ✅ Смените USB-порт, лучше на задней панели (они питаются стабильнее).
  • ✅ Проверьте кабель сканеру — заломы и дешёвые замены дают наводки.

⚠️ На ТСД (Клеверенс, «Атол») та же логика: проверьте профиль сканирования DataMatrix и передачу GS в настройках терминала, а не только в 1С.

Если не помогло

Когда все пять способов пройдены, а недопустимый символ в позиции 31 держится:

  1. Снимите «сырой» код. Отсканируйте в Блокнот и посмотрите, что реально приходит между группами. Если там пусто (символы слиплись) — GS теряется, вопрос точно к сканеру.
  2. Проверьте на другом ПК. Тот же сканер + та же база на другой машине отсекает драйвер/порт.
  3. Проверьте другим сканером. Если чужой сканер работает — ваш нужно сбросить и перенастроить с нуля.
  4. Логи обмена с ГИС МТ. Если ошибка не при сканировании, а при обмене с «Честным знаком» — смотрите, какой документ рвётся, и не подставился ли управляющий символ вручную (копипаст из письма/чата).

Отдельный случай — код скопирован вручную (из письма, мессенджера, таблицы). Тогда невидимый символ прилетает из буфера обмена. Перебейте значение руками или пересканируйте.

Частые ошибки и как их избежать

  • ⚠️ Переустанавливают 1С. Бесполезно — причина в сканере или драйвере, а не в платформе.
  • ⚠️ Меняют сканер, не сбросив старый. Новый со временем «слетит» так же, если не понять причину.
  • ⚠️ Настраивают суффикс Tab вместо Enter — частый источник смещения позиции.
  • ⚠️ Копируют код маркировки из чата и вставляют в документ — тащат невидимый символ.
  • ⚠️ Игнорируют обновление конфигурации — свежие релизы вырезают недопустимые символы сами.

Частые вопросы

Что означает «позиция 31» в ошибке?
Это порядковый номер символа в потоке данных, где стоит недопустимый управляющий символ (чаще GS, код 29). Число может отличаться — важно не оно, а сам факт непечатного символа.
Почему ошибка появилась внезапно, хотя сканер не трогали?
Обычно слетели настройки сканера: разряд аккумулятора, смена USB-порта, случайный сброс. Отсканируйте лист заводского сброса из паспорта и настройте режим передачи GS заново.
Нужно ли переустанавливать 1С?
Нет. Проблема в передаче данных от сканера, а не в конфигурации. Переустановка платформы ничего не даёт.
Что такое GS и почему он ломает XML?
GS (Group Separator, код 29) разделяет группы внутри кода DataMatrix. В XML управляющие символы недопустимы, поэтому разбор падает. Нужно, чтобы сканер передавал разделитель в корректном виде.
Ошибка вылезает на ТСД, а не на кассе — куда смотреть?
В настройки профиля сканирования DataMatrix на самом терминале (Клеверенс, «Атол»). Логика та же: проверьте передачу GS-разделителя в настройках ТСД.
Как проверить, что дело именно в сканере?
Отсканируйте код маркировки в «Блокнот». Если группы цифр слиплись без разделителя — сканер режет GS. Если между ними виден спецсимвол или пробел — настройка корректная, ищите причину в конфигурации.

Материал подготовлен редакцией 1С 8.3 — независимый справочник. Проверено и обновлено: 12.07.2026. Независимый справочник. Мы не представляем фирму «1С» и не аффилированы с ней.