При работе с маркированной продукцией в программах 1С пользователи часто сталкиваются с ошибкой "в структуре кода маркировки отсутствует разделитель GS" при попытке сканирования Data Matrix кодов — для оптимизации этого процесса есть обработка для исправления ошибок и контроля кодов маркировки в 1С. Эта проблема может возникнуть внезапно, даже если ранее сканирование проходило успешно, например, после обновления драйвера контрольно-кассовой техники (ККТ) или конфигурации 1С. В данной статье мы подробно разберем, почему возникает эта ошибка, и какие шаги необходимо предпринять для ее устранения.
Прежде чем перейти к решениям, давайте разберем, что такое символ GS и почему он так важен для маркировки. Символ GS (Group Separator, ASCII 29) — это управляющий символ, используемый в кодах GS1 Data Matrix. Его основное назначение — разделение полей переменной длины в структуре кода. Критически важно понимать, что фактически в символике Data Matrix как разделитель используется символ FNC1 (Function Code 1), который сканеры по спецификации обязаны передавать как ASCII 29 (GS). Символ FNC1 также является обязательным символом в начале GS1 Data Matrix кода, чтобы идентифицировать его как таковой. Отсутствие этого символа или его неверное размещение может привести к ошибкам чтения, поскольку система 1С не сможет правильно интерпретировать структуру кода и выделить из него необходимые данные, такие как код товара, серийный номер и ключ проверки.
Разделитель GS не требуется после каждого поля, а только после полей переменной длины. Таким образом, правильная передача и распознавание этого непечатаемого символа — залог успешной работы с маркировкой.
Первым шагом в диагностике проблемы является проверка того, как сканер передает данные. Мы рекомендуем отсканировать код маркировки в простой текстовый редактор и в специализированный, чтобы увидеть скрытые символы.
GS, мы увидим его отображение в виде специального значка, например, GS, [GS], или подчеркивания. Если мы не видим такого символа, это прямо указывает на проблему с передачей GS сканером или его интерпретацией системой.Этот этап поможет нам локализовать проблему: находится ли она на уровне сканера/операционной системы или на уровне 1С.
Один из самых быстрых и часто эффективных способов решения проблемы — это отключение встроенной проверки структуры кодов маркировки в самой конфигурации 1С. Пользователи 1С:Розница и 1С:Управление торговлей часто сталкиваются с этой проблемой, и ее решение может быть весьма простым.
1С:Розница 2.3.10.61 и 1С:УТ 11.5.19.60. Это решение фактически обходит внутреннюю проверку 1С, которая ожидает символ GS и не находит его, позволяя работать без глубокой настройки сканера, но это скорее временное решение или обходной путь, нежели полное устранение первопричины.Если отключение опции в 1С не подходит или мы хотим решить проблему на более низком уровне, нам необходимо убедиться, что сканер правильно передает символ GS. Проблемы с передачей GS особенно часто возникают у сканеров, работающих в режиме эмуляции клавиатуры (HID).
Сканеры, работающие в режиме эмуляции клавиатуры (HID), могут некорректно передавать непечатаемый символ GS (0x1D). Операционная система Windows и ее драйверы клавиатуры могут неверно интерпретировать этот байт, что приводит к "потере" разделителя. Некоторые сканеры в этом режиме могут заменять GS на нажатие функциональной клавиши, например, F8 или F12. Если 1С не настроена на обратное преобразование этой клавиши в GS, возникнет ошибка. Это видно, например, когда в тестовом режиме 1С при сканировании марки вместо GS регистрируется клавиша F8.
GS. Например, это может быть F8, F12 или другая функциональная клавиша.GS, переходим в общие настройки сканера в 1С.GS (например, "Символ GS", "Префикс GS" или "Замена GS").{F8}. 1С будет интерпретировать нажатие этой клавиши как получение символа GS.GS корректно.Иногда даже после "танцев" вокруг настроек символа GS в сканере проблема не решается, что указывает на более глубокие проблемы совместимости или передачи данных.
Подключение сканера в режиме COM-порта (RS-232, или его эмуляция через USB-COM) часто считается наиболее надежным для передачи управляющих символов, включая GS. В этом режиме данные передаются как поток байтов, минуя особенности обработки клавиатурных событий операционной системой. Многие производители сканеров и специалисты 1С рекомендуют использовать именно этот режим.
COM-порта обеспечивает более прямой канал связи между сканером и компьютером, уменьшая вероятность искажений или потерь непечатаемых символов, которые могут происходить в HID-режиме через эмуляцию клавиатуры.GS, режим COM-порта является более "стандартным" и предсказуемым.HID-KBW в USB-COM или RS-232).COM-порта, если они не установились автоматически.COM-порта, который присвоила система сканеру.Атол Impulse 12 перенастройка на COM-порт успешно решила проблему отсутствия GS, что избавляет от необходимости массового исправления настроек ОФД для ККТ АТОЛ вручную.Однако, следует помнить, что в некоторых случаях беспроводные COM-порты могут работать нестабильно и "отваливаться", требуя дополнительных настроек или замены оборудования.
Если вышеуказанные методы не помогли, или мы хотим более глубоко разобраться в проблеме, рассмотрим другие важные аспекты:
При работе со сканерами через удаленный рабочий стол (RDP) могут возникать специфические проблемы с декодированием невидимых символов. В таких случаях мы можем попробовать настроить задержку между символами (inter-character delay) в параметрах сканера или драйвера. Это позволяет дать системе достаточно времени для корректной обработки каждого символа, предотвращая потерю или искажение GS.
Неактуальные версии драйверов оборудования или конфигурации 1С могут приводить к проблемам с распознаванием кодов маркировки, особенно при переходе на новые форматы фискальных данных (ФФД 1.2). Мы всегда должны убеждаться, что используем актуальные версии драйверов для нашего оборудования и последние обновления конфигурации 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С и заканчивая глубокой конфигурацией сканера и даже программными доработками. Важно последовательно проходить все этапы диагностики и применять подходящие решения, чтобы обеспечить бесперебойную работу с маркированной продукцией и соответствовать требованиям законодательства.