Ошибка «Текст XML содержит недопустимый символ в позиции 31» при сканировании маркировки в 1С
📋 Содержание
Ошибка появляется потому, что сканер передал в 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.
Порядок:
- Возьмите паспорт (программное руководство) к вашей модели сканера.
- Найдите раздел про GS1 / DataMatrix и передачу разделителей.
- Отсканируйте служебный штрихкод, включающий передачу GS как
]d2или замену на видимый символ.
Вариант Б — замена GS на управляющий символ
Часть сканеров позволяет заменить GS на <GS> или на группу ^] (ASCII 29 в escape-виде), которую драйвер 1С распознаёт корректно.
⚠️ Перед перенастройкой сканера запишите или сфотографируйте текущие рабочие штрихкоды из паспорта. Если что-то пойдёт не так — вернёте как было заводским сбросом.
Проверьте результат просто: откройте «Блокнот», отсканируйте код маркировки. Если между группами появляется видимый пробел или спецсимвол вместо «слипшихся» цифр — настройка встала.
Способ 2. Режим эмуляции COM-порта
Если сканер подключён как «клавиатура» (HID), управляющие символы часто теряются или искажаются. Режим эмуляции COM-порта (Virtual COM) передаёт данные потоком и обычно решает вопрос с GS.
Что сделать:
- Переведите сканер в режим
USB COM/Virtual COM Portслужебным штрихкодом из паспорта. - Установите драйвер виртуального COM-порта производителя (обычно есть на сайте вендора).
- В 1С зайдите в
Администрирование → Подключаемое оборудование. - Настройте сканер на этот COM-порт через драйвер
1С:Сканер штрихкода (NativeApi).
💡 После смены режима сканер часто нужно один раз «переподключить» в подключаемом оборудовании 1С — старую настройку удалить, добавить заново.
Способ 3. Обновить конфигурацию и драйвер
Иногда символ приходит корректный, но старая версия конфигурации его не обрабатывает. Особенно это касается баз, где давно не обновляли релиз.
- Обновите конфигурацию (
Розница,Управление торговлей,Бухгалтерияс блоком маркировки) до актуального релиза. - Обновите драйвер
1С:Сканер штрихкодадо последней версии в подключаемом оборудовании. - Если баз несколько и ошибка только в одной — сравните релизы: скорее всего, отстающую и лечим.
Программная очистка строки (когда 1С сама вырезает недопустимые символы) появилась в свежих релизах — поэтому обновление часто снимает проблему без плясок со сканером.
Способ 4. Скорость передачи и суффикс
Управляющий символ может «биться» из-за неверной скорости или лишнего суффикса.
Что проверить:
- Суффикс сканера. Для маркировки обычно нужен суффикс
Enter (CR). ЛишнийTabили двойной перевод строки ломает разбор. - Скорость COM-порта. Стандарт —
9600бод. Слишком высокая скорость на длинном кабеле даёт сбои. - Кодировка. Убедитесь, что сканер не переключён на нестандартную кодовую страницу.
| Параметр | Рекомендуемое значение | Чем грозит неверное |
|---|---|---|
| Суффикс | Enter (CR) | Данные не завершаются, ошибка разбора |
| Скорость (COM) | 9600 бод | «Мусорные» символы, плавающая позиция |
| Режим | Virtual COM / Base64 GS | GS приходит сырым → позиция 31 |
| Префикс | пусто | Смещение позиции символа |
Способ 5. Помехи, USB-хабы и кабель
Если позиция в ошибке «плавает» (то 31, то 27, то 45) — виноват не код, а физика передачи.
- ❌ Уберите USB-хаб — подключите сканер напрямую в порт ПК.
- ❌ Откажитесь от длинных удлинителей USB (дольше 3 м без активного повторителя).
- ✅ Смените USB-порт, лучше на задней панели (они питаются стабильнее).
- ✅ Проверьте кабель сканеру — заломы и дешёвые замены дают наводки.
⚠️ На ТСД (Клеверенс, «Атол») та же логика: проверьте профиль сканирования DataMatrix и передачу GS в настройках терминала, а не только в 1С.
Если не помогло
Когда все пять способов пройдены, а недопустимый символ в позиции 31 держится:
- Снимите «сырой» код. Отсканируйте в Блокнот и посмотрите, что реально приходит между группами. Если там пусто (символы слиплись) — GS теряется, вопрос точно к сканеру.
- Проверьте на другом ПК. Тот же сканер + та же база на другой машине отсекает драйвер/порт.
- Проверьте другим сканером. Если чужой сканер работает — ваш нужно сбросить и перенастроить с нуля.
- Логи обмена с ГИС МТ. Если ошибка не при сканировании, а при обмене с «Честным знаком» — смотрите, какой документ рвётся, и не подставился ли управляющий символ вручную (копипаст из письма/чата).
Отдельный случай — код скопирован вручную (из письма, мессенджера, таблицы). Тогда невидимый символ прилетает из буфера обмена. Перебейте значение руками или пересканируйте.
Частые ошибки и как их избежать
- ⚠️ Переустанавливают 1С. Бесполезно — причина в сканере или драйвере, а не в платформе.
- ⚠️ Меняют сканер, не сбросив старый. Новый со временем «слетит» так же, если не понять причину.
- ⚠️ Настраивают суффикс
TabвместоEnter— частый источник смещения позиции. - ⚠️ Копируют код маркировки из чата и вставляют в документ — тащат невидимый символ.
- ⚠️ Игнорируют обновление конфигурации — свежие релизы вырезают недопустимые символы сами.
Частые вопросы
Что означает «позиция 31» в ошибке?
Почему ошибка появилась внезапно, хотя сканер не трогали?
Нужно ли переустанавливать 1С?
Что такое GS и почему он ломает XML?
Ошибка вылезает на ТСД, а не на кассе — куда смотреть?
Как проверить, что дело именно в сканере?
Материал подготовлен редакцией 1С 8.3 — независимый справочник. Проверено и обновлено: 12.07.2026. Независимый справочник. Мы не представляем фирму «1С» и не аффилированы с ней.