Почему возникает ошибка: "в структуре кода маркировки отсутствует разделители GS" при сканировании в 1С?

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

При работе с маркированной продукцией в программах 1С пользователи часто сталкиваются с ошибкой "в структуре кода маркировки отсутствует разделитель GS" при попытке сканирования Data Matrix кодов — для оптимизации этого процесса есть обработка для исправления ошибок и контроля кодов маркировки в 1С. Эта проблема может возникнуть внезапно, даже если ранее сканирование проходило успешно, например, после обновления драйвера контрольно-кассовой техники (ККТ) или конфигурации 1С. В данной статье мы подробно разберем, почему возникает эта ошибка, и какие шаги необходимо предпринять для ее устранения.

Понимаем суть символа GS (Group Separator)

Прежде чем перейти к решениям, давайте разберем, что такое символ GS и почему он так важен для маркировки. Символ GS (Group Separator, ASCII 29) — это управляющий символ, используемый в кодах GS1 Data Matrix. Его основное назначение — разделение полей переменной длины в структуре кода. Критически важно понимать, что фактически в символике Data Matrix как разделитель используется символ FNC1 (Function Code 1), который сканеры по спецификации обязаны передавать как ASCII 29 (GS). Символ FNC1 также является обязательным символом в начале GS1 Data Matrix кода, чтобы идентифицировать его как таковой. Отсутствие этого символа или его неверное размещение может привести к ошибкам чтения, поскольку система 1С не сможет правильно интерпретировать структуру кода и выделить из него необходимые данные, такие как код товара, серийный номер и ключ проверки.

Разделитель GS не требуется после каждого поля, а только после полей переменной длины. Таким образом, правильная передача и распознавание этого непечатаемого символа — залог успешной работы с маркировкой.

Начинаем диагностику: сканирование в блокнот

Первым шагом в диагностике проблемы является проверка того, как сканер передает данные. Мы рекомендуем отсканировать код маркировки в простой текстовый редактор и в специализированный, чтобы увидеть скрытые символы.

  1. Сканирование в стандартный Блокнот Windows: Откроем обычный Блокнот и отсканируем в него несколько кодов маркировки с разных товаров. Обычно стандартный Блокнот не отображает непечатаемые символы, но это поможет нам убедиться, что сканер вообще что-то передает и что передача стабильна.
  2. Сканирование в продвинутый текстовый редактор (например, Notepad++): Мы настоятельно рекомендуем использовать продвинутый текстовый редактор, такой как Notepad++. В нем есть функция отображения всех символов (обычно "Вид -> Отображение символов -> Отображать все символы" или аналогичная). Если сканер корректно передает символ GS, мы увидим его отображение в виде специального значка, например, GS, [GS], или подчеркивания. Если мы не видим такого символа, это прямо указывает на проблему с передачей GS сканером или его интерпретацией системой.
  3. Сканирование в окно проверки сканера 1С: Также мы сравним результат сканирования в блокнот с результатом в окне проверки сканера в 1С. Для этого в настройках подключения торгового оборудования в 1С (например, раздел "Администрирование -> Подключаемое оборудование") найдем наш сканер, откроем его настройки и перейдем на вкладку "Тест устройства" или "Проверка сканера" — в качестве альтернативы физическому прибору доступно приложение для превращения смартфона в беспроводной сканер для 1С. Если есть разница, это может указывать на проблемы в программной обработке штрихкода в самой 1С или в настройках драйвера.

Этот этап поможет нам локализовать проблему: находится ли она на уровне сканера/операционной системы или на уровне 1С.

Решение 1: Отключение функциональной опции в 1С

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

  1. Проверяем и отключаем опцию:
    • В программе 1С перейдем в раздел "Администрирование".
    • Находим пункт "Настройки номенклатуры" или "Настройки РМК и оборудования" (название может незначительно отличаться в зависимости от версии и конфигурации, также полезно настроить контроль заполнения полей маркированного товара).
    • Ищем функциональную опцию "Проверять структуру кодов маркировки".
    • Снимаем галочку с этой опции.
  2. Результат: После отключения этой опции многие пользователи сообщают, что ошибка исчезает, и сканирование маркированной продукции начинает работать корректно. Это произошло, например, в случае с 1С:Розница 2.3.10.61 и 1С:УТ 11.5.19.60. Это решение фактически обходит внутреннюю проверку 1С, которая ожидает символ GS и не находит его, позволяя работать без глубокой настройки сканера, но это скорее временное решение или обходной путь, нежели полное устранение первопричины.

Решение 2: Корректная настройка символа GS в сканере

Если отключение опции в 1С не подходит или мы хотим решить проблему на более низком уровне, нам необходимо убедиться, что сканер правильно передает символ GS. Проблемы с передачей GS особенно часто возникают у сканеров, работающих в режиме эмуляции клавиатуры (HID).

Проблемы с HID-режимом

Сканеры, работающие в режиме эмуляции клавиатуры (HID), могут некорректно передавать непечатаемый символ GS (0x1D). Операционная система Windows и ее драйверы клавиатуры могут неверно интерпретировать этот байт, что приводит к "потере" разделителя. Некоторые сканеры в этом режиме могут заменять GS на нажатие функциональной клавиши, например, F8 или F12. Если 1С не настроена на обратное преобразование этой клавиши в GS, возникнет ошибка. Это видно, например, когда в тестовом режиме 1С при сканировании марки вместо GS регистрируется клавиша F8.

Как найти и настроить символ GS в сканере

  1. Определяем, какой клавише соответствует GS:
    • Открываем окно настроек подключаемого оборудования в 1С.
    • Выбираем наш сканер и переходим на вкладку "Тест устройства" или "Настройка".
    • В режиме теста устройства сканируем любой проверочный QR-код (часто такой код есть прямо в окне настроек или на сайте Честного знака), что в дальнейшем позволит корректно искать номенклатуру по отсканированному штрихкоду.
    • В окне теста мы увидим, какой именно клавишей (или последовательностью символов) сканер передал символ GS. Например, это может быть F8, F12 или другая функциональная клавиша.
  2. Указываем найденный символ GS в настройках 1С:
    • После того как мы выяснили, какой клавише соответствует GS, переходим в общие настройки сканера в 1С.
    • Ищем поле для указания символа GS (например, "Символ GS", "Префикс GS" или "Замена GS").
    • Вводим сюда обнаруженную функциональную клавишу, например, {F8}. 1С будет интерпретировать нажатие этой клавиши как получение символа GS.
  3. Программирование сканера:
    • Многие сканеры имеют свои собственные сервисные коды для программирования. Нам необходимо найти руководство пользователя для конкретной модели сканера.
    • В руководстве мы ищем коды для настройки "Group Separator" или "GS Prefix/Suffix".
    • Также обращаем внимание на функцию "Transmit invisible characters" или "Передача невидимых символов". Часто сканеры по умолчанию отключают передачу таких символов для упрощения работы, но для маркировки она критически важна. Нам необходимо включить эту функцию с помощью соответствующего штрихкода из инструкции.
    • Сканируем необходимые сервисные штрихкоды для программирования сканера, чтобы он начал передавать GS корректно.

Иногда даже после "танцев" вокруг настроек символа GS в сканере проблема не решается, что указывает на более глубокие проблемы совместимости или передачи данных.

Решение 3: Переключение сканера в режим COM-порта

Подключение сканера в режиме COM-порта (RS-232, или его эмуляция через USB-COM) часто считается наиболее надежным для передачи управляющих символов, включая GS. В этом режиме данные передаются как поток байтов, минуя особенности обработки клавиатурных событий операционной системой. Многие производители сканеров и специалисты 1С рекомендуют использовать именно этот режим.

  1. Причины перейти на COM-порт:
    • Надежность: Режим COM-порта обеспечивает более прямой канал связи между сканером и компьютером, уменьшая вероятность искажений или потерь непечатаемых символов, которые могут происходить в HID-режиме через эмуляцию клавиатуры.
    • Стандарт: Для управляющих символов, таких как GS, режим COM-порта является более "стандартным" и предсказуемым.
  2. Как переключить сканер в режим COM-порта:
    • Нам понадобится руководство пользователя сканера. В нем должны быть сервисные штрихкоды для переключения режимов работы (например, из HID-KBW в USB-COM или RS-232).
    • Сканируем соответствующий штрихкод из инструкции.
    • После переключения режима, возможно, потребуется установить специальные драйверы для эмуляции COM-порта, если они не установились автоматически.
    • В 1С (раздел "Администрирование -> Подключаемое оборудование") создаем новое устройство, выбираем тип оборудования "Сканер штрихкода", а тип подключения — "COM-порт". Указываем номер COM-порта, который присвоила система сканеру.
  3. Пример успешного решения: Для сканера Атол Impulse 12 перенастройка на COM-порт успешно решила проблему отсутствия GS, что избавляет от необходимости массового исправления настроек ОФД для ККТ АТОЛ вручную.

Однако, следует помнить, что в некоторых случаях беспроводные COM-порты могут работать нестабильно и "отваливаться", требуя дополнительных настроек или замены оборудования.

Дополнительные аспекты и продвинутые решения

Если вышеуказанные методы не помогли, или мы хотим более глубоко разобраться в проблеме, рассмотрим другие важные аспекты:

Проблемы при работе через RDP/удаленный рабочий стол

При работе со сканерами через удаленный рабочий стол (RDP) могут возникать специфические проблемы с декодированием невидимых символов. В таких случаях мы можем попробовать настроить задержку между символами (inter-character delay) в параметрах сканера или драйвера. Это позволяет дать системе достаточно времени для корректной обработки каждого символа, предотвращая потерю или искажение GS.

Обновление драйверов и конфигурации 1С

Неактуальные версии драйверов оборудования или конфигурации 1С могут приводить к проблемам с распознаванием кодов маркировки, особенно при переходе на новые форматы фискальных данных (ФФД 1.2). Мы всегда должны убеждаться, что используем актуальные версии драйверов для нашего оборудования и последние обновления конфигурации 1С. В противном случае, сканер может не распознавать служебные символы или конфигурация 1С может быть не готова к обработке новых стандартов маркировки.

Расширения и "заплатки" для 1С

В некоторых случаях, если стандартными средствами настроить передачу GS символа не удается, мы можем рассмотреть возможность использования собственных "заплаток" или расширений для 1С. Разработчики могут программно модифицировать считанный штрихкод, добавляя символы GS в нужные места, если сканер их не передал, или преобразуют замену GS (например, F8) обратно в GS. Это может быть временным или индивидуальным решением, если другие методы оказались неэффективными. Пример такого алгоритма может выглядеть так:


// Предположим, что сканер передает F8 вместо GS
// И у нас есть считанная строка штрихкода
ПереданныйШтрихКод = "010ШтрихКодПродукта215Хвост11Символов{F8}";
СимволGS = Символ(29); // ASCII код для Group Separator

Если СтрНайти(ПереданныйШтрихКод, "{F8}") > 0 Тогда
    КорректныйШтрихКод = СтрЗаменить(ПереданныйШтрихКод, "{F8}", СимволGS);
Иначе
    КорректныйШтрихКод = ПереданныйШтрихКод;
КонецЕсли;

// Далее работаем с КорректныйШтрихКод

Мы должны быть готовы к тому, чтобы самим написать или адаптировать алгоритм распознавания и идентификации товаров, если стандартные механизмы не работают. Это особенно актуально, когда драйвер оборудования не был разработан самой 1С, и отсутствует типовой алгоритм расшифровки символов ШК в конфигурации.

Качество самого кода маркировки

Иногда проблема может быть не в сканере или 1С, а в самом коде маркировки, напечатанном на товаре. Код может быть изначально сгенерирован некорректно, без необходимых разделителей FNC1/GS. В таком случае "Честный знак" рекомендует выполнять перемаркировку товара. Мы можем проверить этот момент, отсканировав код маркировки с другого пакета молока или другого товара из той же партии, который ранее сканировался без ошибок.

Устаревшее или некачественное оборудование

Дешевые или устаревшие модели сканеров могут плохо справляться со считыванием Data Matrix кодов и некорректно передавать специальные символы — для решения проблем со считыванием маркировки подойдёт программа распознавания кодов DataMatrix и исправления ошибок сканирования. Например, некоторые сканеры, такие как HC-10, могут быть бракованными или просто не поддерживать должным образом передачу GS, даже после всех попыток программирования. Замена сканера на современную 2D-модель, специально предназначенную для работы с маркировкой, часто решает проблему. Мы должны быть уверены, что используем сканер, рекомендованный для работы с маркированной продукцией.

Заключение

Ошибка "в структуре кода маркировки отсутствует разделители GS" является многогранной проблемой, требующей системного подхода. Мы рассмотрели различные пути ее решения, начиная от простых настроек в 1С и заканчивая глубокой конфигурацией сканера и даже программными доработками. Важно последовательно проходить все этапы диагностики и применять подходящие решения, чтобы обеспечить бесперебойную работу с маркированной продукцией и соответствовать требованиям законодательства.

← На главную