Что такое разделитель GS (FNC1, ASCII 29), почему сканер его теряет и как настроить считыватель в правильный режим
Типичная ситуация: кассир сканирует код маркировки на пачке товара, 1С выдаёт ошибку «В структуре кода маркировки отсутствуют разделители GS». Продажа не проходит. При этом код визуально читается, цифры распознаются, а товар легальный. Что не так?
Эта ошибка - одна из самых частых и при этом самых непонятных при работе с маркировкой в 1С. Дело в невидимом служебном символе - разделителе GS, который физически присутствует в коде Data Matrix, но «теряется» где-то по пути от сканера до программы. Чаще всего проблема не в коде и не в 1С, а в настройках сканера.
Разбираем по полочкам: что такое разделитель GS и символ FNC1, почему они исчезают, как настроить сканер на их передачу и что делать, если коды уже «испорчены» Excel или терминальным доступом.
GS (Group Separator) - это служебный непечатаемый символ с кодом ASCII 29 (шестнадцатеричное 0x1D). В коде маркировки Data Matrix он играет роль «разделителя» между группами данных переменной длины.
Код маркировки состоит из нескольких блоков (по стандарту GS1): GTIN, серийный номер, а для некоторых товаров - дополнительные поля (МРЦ, срок годности). Часть этих блоков имеет переменную длину. Чтобы система понимала, где заканчивается одно поле и начинается другое, между ними ставится разделитель GS.
Связанный символ - FNC1:
FNC1 - специальный символ, обозначающий кодировку по стандарту GS1. В коде Data Matrix он стоит в начале (заголовок) и сигнализирует: «это код по стандарту GS1». Сканер может заменять FNC1 на символ GS (0x1D) или передавать отдельно. Это рекомендовано стандартом GS1.
Аналогия:
Разделитель GS - как запятые в списке. Без них «молокохлебсахар» невозможно правильно разобрать. С разделителями «молоко GS хлеб GS сахар» система чётко видит границы. Если разделители теряются - 1С не может разобрать структуру кода и выдаёт ошибку.
Главный парадокс: разделители GS физически есть в самом коде Data Matrix. Они «теряются» при передаче от сканера в 1С. Вот пять основных причин:
| Причина | Что происходит |
|---|---|
| Сканер в режиме эмуляции клавиатуры (HID) | Сканер передаёт данные как нажатия клавиш, но клавиши для символа GS на клавиатуре нет - символ просто пропускается |
| Работа через RDP / Citrix | При удалённом доступе непечатаемые символы (включая GS) теряются при передаче между локальной машиной и терминальным сервером |
| Коды прошли через Excel | Excel удаляет непечатаемые символы при открытии CSV. Если коды импортировались через Excel - GS гарантированно потеряны |
| Устаревший драйвер оборудования в 1С | Некоторые версии 1С и драйверов не поддерживают передачу символа GS от сканера |
| Сканер не поддерживает GS | Некоторые модели сканеров не умеют считывать и передавать разделители GS |
В подавляющем большинстве случаев причина - первая: сканер работает в режиме эмуляции клавиатуры и «съедает» символ GS, потому что на клавиатуре нет соответствующей клавиши.
Самый простой и надёжный способ - переключить сканер в режим эмуляции COM-порта (Virtual COM / RS-232).
Почему это работает:
В режиме COM сканер передаёт символ GS напрямую как #029 (ASCII 29) - без попытки «изобразить» его клавишей. 1С получает код целиком, со всеми разделителями. Никакой дополнительной настройки передачи GS не требуется.
Как переключить:
1. Найдите в инструкции к сканеру (или на сайте производителя) штрихкод для переключения в режим «USB COM» / «Virtual COM Port» / «RS-232».
2. Отсканируйте этот служебный штрихкод - сканер перейдёт в режим COM.
3. Установите драйвер виртуального COM-порта (обычно с сайта производителя сканера).
4. В 1С добавьте сканер через «НСИ и администрирование» → «Подключаемое оборудование», укажите COM-порт.
5. Проведите тест подключения - в результате должна отобразиться строка с разделителями GS.
Рекомендация:
Режим COM - предпочтительный для работы с маркировкой. Он решает проблему GS «из коробки», без танцев с настройкой префиксов и суффиксов. Большинство сканеров для маркировки (например, 1C Atol Impulse) поддерживают этот режим.
Замучились с настройкой оборудования для маркировки?
Сервис GetMark работает с маркировкой через мобильное приложение со встроенным сканером - корректно считывает коды Data Matrix с разделителями GS без настройки COM-портов и драйверов. Плюс помощь с подбором и настройкой стационарного оборудования.
Тариф «Старт» - до 5 000 КМ/год за 14 500 ₽/год. С полным функционалом - «Старт+» от 35 000 ₽/год.
Бесплатный тариф на 7 дней!
Если по какой-то причине нужно оставить сканер в режиме эмуляции клавиатуры (HID/USB-keyboard), его можно настроить на передачу символа GS. Это сложнее, но возможно.
Что нужно сделать:
1. Включить передачу GS как префикса/замены. В инструкции сканера найдите настройку GS1 Data Matrix и опцию передачи разделителя GS. Часто это настройка вида «GS Character Output» или замена GS на видимую последовательность.
2. Настроить замену GS на символ-заменитель. Многие драйверы 1С (например, dmatrkbd) умеют распознавать GS, переданный как специальная последовательность - например, префикс $1D или конкретная функциональная клавиша (F8 и подобные). Сканер настраивается передавать GS этой клавишей, а драйвер 1С преобразует её обратно в ASCII 29.
3. Проверить соответствие настроек сканера и драйвера. Сканер должен передавать GS именно тем способом, который ожидает драйвер 1С. Если сканер шлёт F8, а драйвер ждёт $1D - не сработает.
4. Протестировать. Отсканируйте код в тестовой форме 1С - убедитесь, что разделители GS присутствуют в результате.
Режим клавиатуры с настройкой GS работает, но требует точного совпадения параметров сканера и драйвера. Если есть выбор - режим COM проще и надёжнее.
Если 1С работает на терминальном сервере, а сканер подключён к локальному компьютеру - разделители GS теряются при передаче через RDP или Citrix. Непечатаемые символы «не доезжают» до сервера.
Решения:
Проброс COM-порта в RDP. Настройте проброс локального COM-порта (где работает сканер) на терминальный сервер. Тогда сканер в режиме COM передаёт GS напрямую через проброшенный порт.
Специальные утилиты проброса оборудования. Существуют решения для корректной передачи данных сканера через терминальную сессию с сохранением служебных символов.
Локальная обработка. В некоторых конфигурациях сканирование выполняется локальным агентом, который передаёт уже разобранный код на сервер.
RDP/Citrix - частая причина «необъяснимой» потери GS: на локальной машине всё работает, а на терминале - ошибка. Если у вас терминальный доступ - проверяйте проброс оборудования в первую очередь.
Отдельная распространённая ошибка - коды маркировки, прошедшие через Excel. Если вы импортировали коды из CSV-файла, открыв его в Excel, - разделители GS гарантированно потеряны.
Почему так происходит: Excel при открытии CSV двойным кликом автоматически удаляет непечатаемые символы, включая GS (ASCII 29). Коды выглядят нормально, но разделителей в них уже нет.
Как избежать:
1. Не открывайте CSV с кодами маркировки в Excel двойным кликом.
2. Если нужно работать с файлом - используйте текстовый редактор, сохраняющий непечатаемые символы, или импортируйте напрямую в 1С.
3. Получайте коды напрямую из «Честного знака» или через API сервиса маркировки, минуя ручную выгрузку в Excel.
Если коды уже «испорчены» Excel: восстановить разделители в них нельзя - нужно заново получить корректные коды из исходного источника (ЛК «Честного знака», файл от поставщика в правильном формате).
Настроим оборудование и работу с кодами под ключ
GetMark помогает наладить корректную работу с кодами маркировки: подбор и настройка сканеров, диагностика проблем с разделителями GS, обучение сотрудников, интеграция с учётными системами.
Модели сотрудничества:
• Подписка на ПО - от 14 500 ₽/год. С полным функционалом - «Старт+» от 35 000 ₽/год.
• Настройка под ключ - оборудование, ЭДО, обучение.
• Консалтинг - разбор ошибок маркировки, настройка процессов.
Прежде чем чинить - проверьте, в чём проблема. Есть простой способ диагностики.
Тест через «Блокнот»:
1. Откройте обычный «Блокнот» (Notepad).
2. Отсканируйте код маркировки.
3. Посмотрите на результат: если код вставился одной строкой без видимых «провалов» - символы GS, скорее всего, потеряны (в режиме клавиатуры они невидимы, но если их нет - структура «слипается»).
Тест через 1С:
В 1С откройте «НСИ и администрирование» → «РМК и оборудование» → «Подключаемое оборудование» → выберите сканер → «Настроить» → «Тест устройства». Отсканируйте код. При корректной настройке в результате отобразится строка с разделителями GS (часто они показаны как специальные маркеры или [GS]). Если их нет - проблема с передачей.
Этот тест сразу покажет, доходят ли разделители до 1С. Если в тесте GS есть, а ошибка всё равно возникает - проблема может быть в обработке кода в самой конфигурации.
Шаг 1. Определите способ подключения. Сканер подключён локально или через RDP/Citrix? Если терминал - проверьте проброс COM-порта.
Шаг 2. Проверьте, откуда взялся код. Если код проходил через Excel - он «испорчен», получите корректный код заново.
Шаг 3. Переключите сканер в режим COM. Самое надёжное решение. Отсканируйте служебный штрихкод из инструкции, установите драйвер виртуального COM-порта.
Шаг 4. Обновите драйвер оборудования в 1С. Особенно если драйвер был установлен из другой конфигурации или давно не обновлялся. Скачайте актуальный с портала 1С:ИТС.
Шаг 5. Проведите тест в 1С. «Тест устройства» должен показать код с разделителями GS.
Шаг 6. Если режим COM невозможен - настройте передачу GS в режиме клавиатуры. Согласуйте настройки сканера и драйвера 1С (префикс $1D или функциональная клавиша).
Шаг 7. Временное решение. В крайнем случае в настройках 1С можно временно отключить проверку структуры кода маркировки - но это обходной путь, а не решение. Лучше устранить причину.
Маркировка без проблем с оборудованием
GetMark - мобильное приложение со встроенным сканером корректно считывает коды Data Matrix с разделителями GS, без настройки COM-портов и драйверов. Заказ кодов, печать этикеток, ввод/вывод из оборота, УПД, ЭДО - в одном окне.
Тарифы:
7 дней бесплатный тариф
• «Старт» - до 5 000 КМ/год: 14 500 ₽/год
• «Бизнес» - до 100 000 КМ/год: 60 000 ₽/год
• «Макси» - до 500 000 КМ/год: 80 000 ₽/год
Ошибка «отсутствуют разделители GS» вводит в заблуждение: кажется, что повреждён код или сломана 1С. Но разделители GS физически есть в коде Data Matrix - они теряются по пути от сканера к программе. В 90% случаев причина - сканер в режиме эмуляции клавиатуры, который «съедает» невидимый символ ASCII 29.
Самое надёжное решение - переключить сканер в режим COM-порта, где GS передаётся напрямую. Это решает проблему без сложной настройки префиксов. Если работаете через RDP - проверьте проброс порта. Если коды проходили через Excel - получите их заново, восстановить разделители в «испорченных» кодах нельзя.
Алгоритм простой: определите способ подключения → проверьте источник кода → переключите сканер в COM → обновите драйвер в 1С → проведите тест устройства. А чтобы вовсе не зависеть от настроек оборудования - рассмотрите мобильное приложение со встроенным сканером, которое корректно работает с GS из коробки.