Почему не сканируются новые и старые акцизные марки в 1С:Управление торговлей 10.3 и как это исправить

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

Переход на новые поштучные марки ЕГАИС (новые 150-символьные марки формата DataMatrix) в конфигурации «Управление торговлей», редакция 10.3 часто сопровождается трудностями. Распространенная ситуация: после обновления релиза (например, с относительно стабильного 10.3.47.3 на 10.3.55.1 и выше) система перестает реагировать на сканирование акцизных марок. Сканер физически считывает код (издает звуковой сигнал), но в программе ничего не происходит, либо система выдает критические ошибки вроде «Штрихкод не соответствует формату» или аварийно завершает работу с ошибкой отсутствия метода.

В этой статье мы подробно разберем все технические причины возникновения подобных проблем и по шагам восстановим работоспособность системы для корректной продажи алкогольной продукции.

---

Причина 1. Неверная настройка торгового оборудования (переход на Тонкий клиент)

Начиная с промежуточных обновлений УТ 10.3, разработчики 1С изменили архитектуру взаимодействия с торговым оборудованием. Старый механизм подключения сканеров через обработку «Подключение и настройка торгового оборудования» больше не поддерживает работу с новыми акцизными марками ЕГАИС в полном объеме.

Проанализируем порядок действий для правильной перенастройки оборудования:

  1. Перейдем в меню Сервис — Торговое оборудование — Подключение и настройка торгового оборудования. На вкладке со сканерами штрихкода найдем текущее устройство и полностью его удалим из списка.
  2. Откроем настройки параметров учета. Убедимся, что включена опция использования подключаемого оборудования.
  3. Перейдем в новый интерфейс настройки: Сервис — Торговое оборудование — Настройка подключаемого оборудования (тонкий клиент).
  4. Создадим новое рабочее место (если оно не было создано автоматически), выберем его в качестве текущего и добавим туда наш сканер штрихкодов.
  5. В параметрах подключения обязательно проверим порт, скорость и суффикс (обычно это #13 или Enter).

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

---

Причина 2. Режим работы сканера (Клавиатурный клиппинг и влияние раскладки)

Выясним, почему сканер корректно считывает марку в текстовый редактор «Блокнот», но выдает ошибку формата в 1С. При работе сканера в режиме эмуляции клавиатуры (Keyboard Emulation) данные передаются в операционную систему как последовательное нажатие клавиш. Здесь кроются две критические проблемы:

Решение: Настоятельно рекомендуем перевести сканер штрихкодов в режим виртуального COM-порта (Virtual COM Port emulation). Для этого:

  1. Считайте специальный настроечный штрихкод из инструкции к вашему сканеру (перевод в USB-COM).
  2. Установите официальный драйвер виртуального COM-порта от производителя оборудования (Honeywell, Zebra, Атол и др.).
  3. В диспетчере устройств Windows определите номер появившегося COM-порта.
  4. В настройках торгового оборудования 1С выберите порт (например, COM3 вместо Клавиатура).

В режиме COM-порта данные передаются напрямую в порт в виде массива байтов, минуя буфер клавиатуры. Это полностью решает проблему влияния раскладки и Caps Lock.

---

Причина 3. Ошибка проверки формата марок в схеме XDTO

Если при сканировании Datamatrix-кода новой марки система выдает ошибку «Штрихкод не соответствует формату», то проблема заключается в механизме валидации. Посмотрим на код функции проверки шаблона марки, которая находится в общей форме сканирования акцизных марок:


Функция ШтрихкодСоответствуетШаблону(Штрихкод)
    ТипШтрихкодМарки = ФабрикаXDTO.Тип("egaischeque.joint.2", "BK");
    Попытка
        ТипШтрихкодМарки.Проверить(Штрихкод);
    Исключение
        Возврат Ложь;
    КонецПопытки;
    Возврат Истина;
КонецФункции

Метод Проверить() обращается к схеме XDTO-пакета egaischeque.joint.2, тип данных BK. В релизах 10.3.54.х — 10.3.55.х этот тип содержит некорректное регулярное выражение (шаблон), рассчитанное только на старые 68-символьные марки (PDF417) или содержащее синтаксическую ошибку.

Разберем, как исправить шаблон XDTO в конфигураторе:

  1. Откроем информационную базу в режиме Конфигуратор.
  2. В дереве конфигурации развернем ветку Общие — XDTO-пакеты — egaischeque_joint_2 (или аналогичный пакет, используемый для ЕГАИС).
  3. Найдем тип значений BK.
  4. В свойствах этого типа найдем фасет pattern (Шаблон).
  5. Заменим существующее выражение на универсальное регулярное выражение, поддерживающее как старые 68-символьные, так и новые 150-символьные марки:

([1-9]\d{2}|\d([1-9]\d|\d[1-9])){2}([1-9]\d{7}|\d([1-9]\d{6}|\d([1-9]\d{5}|\d([1-9]\d{4}|\d([1-9]\d{3}|\d([1-9]\d{2}|\d([1-9]\d|\d[1-9])))))))(0[1-9]|1[0-2])(1[8-9]|[2-9][0-9])([1-9]\d{2}|\d([1-9]\d|\d[1-9]))[0-9A-Z]{129}|\d\d[a-zA-Z0-9]{21}\d[0-1]\d[0-3]\d{10}[a-zA-Z0-9]{31}|[0-9]{40}

Если вы не хотите менять XDTO-пакет, можно применить программный обходной путь. Мы можем модифицировать функцию проверки штрихкода в общем модуле, добавив условие, которое пропускает проверку по схеме XDTO, если длина строки равна ровно 150 символам (так как новая марка гарантированно имеет длину 150 символов):


Функция ШтрихкодСоответствуетШаблону(Штрихкод)
    Если СтрДлина(Штрихкод) = 150 Тогда
        Возврат Истина; // Пропускаем проверку формата для новых 150-символьных марок
    КонецЕсли;
    
    ТипШтрихкодМарки = ФабрикаXDTO.Тип("egaischeque.joint.2", "BK");
    Попытка
        ТипШтрихкодМарки.Проверить(Штрихкод);
    Исключение
        Возврат Ложь;
    КонецПопытки;
    Возврат Истина;
КонецФункции

---

Причина 4. Ошибка отсутствия метода СШКОбработатьШтрихкод в модуле ТОСервер

В релизах конфигурации 10.3.56.1 и смежных версиях при попытке отсканировать марку напрямую (без предварительного вызова формы ввода акцизной марки) программа аварийно прерывает работу со следующей ошибкой:

{Обработка.ТОСервер.МодульОбъекта(3842)}: Метод объекта не обнаружен (СШКОбработатьШтрихкод)

Проанализируем причину этой ошибки. В обработке ТОСервер в процедуре обработки событий от сканера присутствует вызов метода Клиент.СШКОбработатьШтрихкод(ШК). В качестве объекта Клиент выступает активная форма документа (например, форма Чека ККМ или форма подбора). Однако разработчики 1С забыли добавить этот экспортный метод в модули некоторых используемых форм документов розничных продаж.

Для исправления этой ошибки у нас есть два пути:

Вариант А. Быстрый обход в коде обработки ТОСервер (без изменения форм документов)

Откроем обработку ТОСервер в конфигураторе, найдем модуль объекта и перейдем к процедуре ОбработатьСобытиеСШК. В районе строки 3840 найдем условие вызова метода и закомментируем его или добавим проверку наличия метода у формы-клиента:


// Было:
// Если Не ЗначениеЗаполнено(Результат) и ТипШК = "PDF417" Тогда
//     Клиент.СШКОбработатьШтрихкод(ШК);
//     Возврат Результат;
// КонецЕсли;

// Стало (безопасный вызов через попытку-исключение):
Если Не ЗначениеЗаполнено(Результат) и (ТипШК = "PDF417" Или ТипШК = "DATAMATRIX") Тогда
    Попытка
        Клиент.СШКОбработатьШтрихкод(ШК);
    Исключение
        // Метод в форме отсутствует, обрабатываем стандартным образом или игнорируем аварийное завершение
    КонецПопытки;
    Возврат Результат;
КонецЕсли;

Вариант Б. Добавление экспортной процедуры в форму документа ЧекККМ

Если мы хотим сохранить оригинальную логику интеграции, откроем модуль формы документа ЧекККМ (или форму регистрации продаж РМК) и добавим в самый конец модуля пропущенную экспортную процедуру:


Процедура СШКОбработатьШтрихкод(Штрихкод) Экспорт
    // Перенаправляем полученный штрихкод в стандартную процедуру обработки сканирования формы
    СтруктураШК = Новый Структура("Штрихкод, СчитанВРежимеКлавиатуры", Штрихкод, Ложь);
    ОбработатьШтрихкод(СтруктураШК);
КонецПроцедуры

---

Причина 5. Появление двух позиций в документе при сканировании марки

Иногда после частичной настройки сканирование одной бутылки приводит к тому, что в спецификацию чека добавляется сразу две строки с одинаковым товаром, либо открывается окно повторного ввода. Это происходит из-за того, что сканер настроен на посылку суффиксов возврата каретки (CR) и перевода строки (LF) как двух разных нажатий клавиш Enter, либо драйвер сканера в режиме клавиатуры обрабатывает штрихкод дважды.

Для устранения этой проблемы выполним следующие настройки:

  1. Убедимся, что суффикс в настройках торгового оборудования 1С настроен правильно (должен быть выбран только один суффикс — 13 (CR)).
  2. Если используется режим клавиатуры, настройте чувствительность (таймаут) в параметрах драйвера устройства в 1С. Установите время ожидания пакета (чувствительность) в районе 50-100 мс. Это позволит драйверу склеивать разрозненные символы в единый штрихкод и не вызывать событие сканирования дважды.

Применяя указанные системные настройки и исправления кода, мы полностью восстановим корректную работу розничных продаж алкоголя в конфигурации «Управление торговлей 10.3» как для старого, так и для нового формата марок ЕГАИС.

← На главную