Переход на новые поштучные марки ЕГАИС (новые 150-символьные марки формата DataMatrix) в конфигурации «Управление торговлей», редакция 10.3 часто сопровождается трудностями. Распространенная ситуация: после обновления релиза (например, с относительно стабильного 10.3.47.3 на 10.3.55.1 и выше) система перестает реагировать на сканирование акцизных марок. Сканер физически считывает код (издает звуковой сигнал), но в программе ничего не происходит, либо система выдает критические ошибки вроде «Штрихкод не соответствует формату» или аварийно завершает работу с ошибкой отсутствия метода.
В этой статье мы подробно разберем все технические причины возникновения подобных проблем и по шагам восстановим работоспособность системы для корректной продажи алкогольной продукции.
---
Начиная с промежуточных обновлений УТ 10.3, разработчики 1С изменили архитектуру взаимодействия с торговым оборудованием. Старый механизм подключения сканеров через обработку «Подключение и настройка торгового оборудования» больше не поддерживает работу с новыми акцизными марками ЕГАИС в полном объеме.
Проанализируем порядок действий для правильной перенастройки оборудования:
#13 или Enter).После этого базовая интеграция будет переведена на новые библиотеки, что вернет возможность обработки старых акцизных марок.
---
Выясним, почему сканер корректно считывает марку в текстовый редактор «Блокнот», но выдает ошибку формата в 1С. При работе сканера в режиме эмуляции клавиатуры (Keyboard Emulation) данные передаются в операционную систему как последовательное нажатие клавиш. Здесь кроются две критические проблемы:
Решение: Настоятельно рекомендуем перевести сканер штрихкодов в режим виртуального COM-порта (Virtual COM Port emulation). Для этого:
COM3 вместо Клавиатура).В режиме COM-порта данные передаются напрямую в порт в виде массива байтов, минуя буфер клавиатуры. Это полностью решает проблему влияния раскладки и Caps Lock.
---
Если при сканировании Datamatrix-кода новой марки система выдает ошибку «Штрихкод не соответствует формату», то проблема заключается в механизме валидации. Посмотрим на код функции проверки шаблона марки, которая находится в общей форме сканирования акцизных марок:
Функция ШтрихкодСоответствуетШаблону(Штрихкод)
ТипШтрихкодМарки = ФабрикаXDTO.Тип("egaischeque.joint.2", "BK");
Попытка
ТипШтрихкодМарки.Проверить(Штрихкод);
Исключение
Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции
Метод Проверить() обращается к схеме XDTO-пакета egaischeque.joint.2, тип данных BK. В релизах 10.3.54.х — 10.3.55.х этот тип содержит некорректное регулярное выражение (шаблон), рассчитанное только на старые 68-символьные марки (PDF417) или содержащее синтаксическую ошибку.
Разберем, как исправить шаблон XDTO в конфигураторе:
BK.pattern (Шаблон).
([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");
Попытка
ТипШтрихкодМарки.Проверить(Штрихкод);
Исключение
Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции
---
В релизах конфигурации 10.3.56.1 и смежных версиях при попытке отсканировать марку напрямую (без предварительного вызова формы ввода акцизной марки) программа аварийно прерывает работу со следующей ошибкой:
{Обработка.ТОСервер.МодульОбъекта(3842)}: Метод объекта не обнаружен (СШКОбработатьШтрихкод)
Проанализируем причину этой ошибки. В обработке ТОСервер в процедуре обработки событий от сканера присутствует вызов метода Клиент.СШКОбработатьШтрихкод(ШК). В качестве объекта Клиент выступает активная форма документа (например, форма Чека ККМ или форма подбора). Однако разработчики 1С забыли добавить этот экспортный метод в модули некоторых используемых форм документов розничных продаж.
Для исправления этой ошибки у нас есть два пути:
Вариант А. Быстрый обход в коде обработки ТОСервер (без изменения форм документов)
Откроем обработку ТОСервер в конфигураторе, найдем модуль объекта и перейдем к процедуре ОбработатьСобытиеСШК. В районе строки 3840 найдем условие вызова метода и закомментируем его или добавим проверку наличия метода у формы-клиента:
// Было:
// Если Не ЗначениеЗаполнено(Результат) и ТипШК = "PDF417" Тогда
// Клиент.СШКОбработатьШтрихкод(ШК);
// Возврат Результат;
// КонецЕсли;
// Стало (безопасный вызов через попытку-исключение):
Если Не ЗначениеЗаполнено(Результат) и (ТипШК = "PDF417" Или ТипШК = "DATAMATRIX") Тогда
Попытка
Клиент.СШКОбработатьШтрихкод(ШК);
Исключение
// Метод в форме отсутствует, обрабатываем стандартным образом или игнорируем аварийное завершение
КонецПопытки;
Возврат Результат;
КонецЕсли;
Вариант Б. Добавление экспортной процедуры в форму документа ЧекККМ
Если мы хотим сохранить оригинальную логику интеграции, откроем модуль формы документа ЧекККМ (или форму регистрации продаж РМК) и добавим в самый конец модуля пропущенную экспортную процедуру:
Процедура СШКОбработатьШтрихкод(Штрихкод) Экспорт
// Перенаправляем полученный штрихкод в стандартную процедуру обработки сканирования формы
СтруктураШК = Новый Структура("Штрихкод, СчитанВРежимеКлавиатуры", Штрихкод, Ложь);
ОбработатьШтрихкод(СтруктураШК);
КонецПроцедуры
---
Иногда после частичной настройки сканирование одной бутылки приводит к тому, что в спецификацию чека добавляется сразу две строки с одинаковым товаром, либо открывается окно повторного ввода. Это происходит из-за того, что сканер настроен на посылку суффиксов возврата каретки (CR) и перевода строки (LF) как двух разных нажатий клавиш Enter, либо драйвер сканера в режиме клавиатуры обрабатывает штрихкод дважды.
Для устранения этой проблемы выполним следующие настройки:
13 (CR)).50-100 мс. Это позволит драйверу склеивать разрозненные символы в единый штрихкод и не вызывать событие сканирования дважды.Применяя указанные системные настройки и исправления кода, мы полностью восстановим корректную работу розничных продаж алкоголя в конфигурации «Управление торговлей 10.3» как для старого, так и для нового формата марок ЕГАИС.