Как в Mobile SMARTS настроить пропуск сканирования DataMatrix для новых акцизных марок ЕГАИС длиной 150 символов?

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

При переходе на поштучный учет алкогольной продукции многие предприятия столкнулись с необходимостью адаптации терминалов сбора данных (ТСД) под новые форматы штрихкодов. В старых версиях ЕГАИС процесс учета требовал последовательного сканирования штрихкода товара (EAN-13), акцизной марки старого образца (длиной 68 символов в формате PDF-417) и двумерного кода DataMatrix. С введением новых акцизных марок длиной 150 символов необходимость в дополнительном сканировании DataMatrix отпала, так как вся необходимая информация уже зашита в саму марку.

Разработчики платформы Mobile SMARTS (Клеверенс) часто предлагают решить эту проблему путем приобретения новых лицензий и перехода на обновленные конфигурации, например, «Mobile SMARTS: ЕГАИС 3». Однако для многих компаний это связано со значительными финансовыми затратами на покупку лицензий и перенастройку интеграции. В этой статье мы подробно разберем, как силами штатного 1С-программиста доработать существующую кастомизированную конфигурацию Mobile SMARTS и связать ее с базой 1С без лишних затрат.

Анализ архитектуры и инструментов Mobile SMARTS

Для начала проанализируем, как устроена логика работы мобильного терминала на платформе Mobile SMARTS. Любая конфигурация Клеверенс представляет собой структурированное дерево визуальных и невизуальных действий (шагов), которые выполняются ТСД последовательно. Все данные, полученные в процессе выполнения шагов (сканирование, ввод количества, выбор склада), временно сохраняются в переменных сессии.

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

  1. Панель управления Mobile SMARTS (Конфигуратор). Это визуальная среда разработки, в которой настраивается дерево конфигурации, описываются переменные, задаются условия переходов и настраивается интерфейс ТСД.
  2. Эмулятор терминала сбора данных. Данный инструмент поставляется вместе с платформой и позволяет запускать мобильное приложение прямо на рабочем компьютере разработчика, эмулируя сканирование штрихкодов с клавиатуры. Это существенно ускоряет процесс отладки логики.
  3. Документация Клеверенс. Платформа имеет подробную базу знаний, где описан синтаксис выражений (основанный на .NET) и назначение каждого стандартного действия.

Выясним, какими путями можно реализовать требуемый бизнес-процесс сканирования:

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

Вариант 1. Использование действия «Проверка условий»

Этот вариант является наиболее наглядным и структурированным, так как он явно разделяет ветвление процесса в дереве конфигурации.

Разберем настройку по шагам:

  1. Откроем Панель управления Mobile SMARTS и перейдем к редактированию нужного процесса (например, «Приемка ЕГАИС» или «Сбор штрихкодов»).
  2. Найдем в дереве конфигурации действие сканирования акцизной марки (обычно это действие ожидания сканирования или ввода текста). Выясним, в какую переменную записывается результат сканирования марки. Предположим, это переменная SelectedBarcode или свойство текущей строки CurrentLine.Barcode.
  3. Сразу после шага успешного сканирования марки вставим из палитры действий стандартный блок «Проверка условий» (в англоязычной версии или старых редакциях он может называться Condition).
  4. Перейдем в свойства добавленного действия и настроим параметр «Выражение» (Expression). Платформа Mobile SMARTS поддерживает синтаксис выражений .NET, поэтому проверка длины строки будет выглядеть следующим образом:
    SelectedBarcode.Length == 150
    Или, если мы работаем со свойствами объектов конфигурации:
    {SelectedBarcode.Length} == 150
    Примечание: фигурные скобки используются для обращения к переменным в контексте выражений Клеверенс.
  5. В свойстве действия «При выполнении условия» (IfTrue) укажем переход на финальное действие процесса (например, запись строки документа или возврат к началу цикла для сканирования следующей бутылки). Тем самым мы перепрыгнем шаг сканирования DataMatrix.
  6. В свойстве «При невыполнении условия» (IfFalse) укажем переход на стандартный шаг сканирования DataMatrix (который у нас уже был настроен ранее).

Вариант 2. Настройка условия видимости экрана сканирования

Этот способ позволяет обойтись без добавления новых блоков ветвления в дерево конфигурации. Мы можем управлять доступностью самого экрана сканирования DataMatrix.

Проанализируем этот метод:

  1. В дереве конфигурации выделим визуальное действие (экран), которое отвечает за сканирование кода DataMatrix.
  2. В правой панели свойств найдем параметр «Видимость» (или «Условие выполнения» / «Condition» в зависимости от версии платформы).
  3. Пропишем в этом поле формулу, при которой экран должен отображаться пользователю только для старых марок. Условие будет выглядеть так:
    {SelectedBarcode.Length} != 150
    Или, если мы хотим более жестко ограничить проверку только старым форматом марок (длиной 68 символов):
    {SelectedBarcode.Length} < 150
  4. Когда терминал считает новую длинную марку в 150 символов, платформа Mobile SMARTS динамически вычислит выражение видимости следующего шага как Ложь (False). Экран сканирования DataMatrix будет автоматически пропущен, и ТСД сразу перейдет к следующему по цепочке действию.

Настройка шаблонов штрихкодов в Клеверенс

При доработке логики на ТСД мы можем столкнуться с тем, что мобильное приложение при сканировании новой марки на 150 символов будет выдавать ошибку: «Неизвестный штрихкод» или «Штрихкод не соответствует шаблону».

Выясним причину этой проблемы. В Mobile SMARTS за обработку сканирования отвечают жестко заданные «Шаблоны штрихкодов». Если регулярное выражение шаблона не описывает структуру новой марки, ТСД просто откажется принимать этот штрихкод в работу.

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

  1. В Панели управления Клеверенс перейдем в раздел метаданных «Шаблоны штрихкодов» (или «Штрихкоды контейнеров»).
  2. Найдем шаблон, отвечающий за акцизную марку (обычно он привязан к типу штрихкода PDF-417).
  3. Убедимся, что регулярная маска шаблона допускает считывание строки длиной 150 символов. Если регулярное выражение жестко ограничено длиной в 68 символов (например, регулярное выражение вида ^[0-9A-Z]{68}$), его необходимо модифицировать или добавить новое правило для поддержки длины 150 символов:
    ^[0-9a-zA-Z]{150}$
  4. Сохраним изменения и обновим конфигурацию на сервере Клеверенс.

Доработка интеграции на стороне 1С

Настройка логики на самом ТСД — это лишь половина задачи. Самая важная часть работы для 1С-программиста заключается в адаптации принимающего кода в информационной базе 1С. В типовых интеграциях Клеверенс и 1С обмен данными строится на обработках обслуживания, которые разбирают выгруженные с ТСД файлы документов.

Рассмотрим, с какими сложностями мы столкнемся в 1С и как их решить:

1. Структура данных марки. В старых марках (68 символов) и новых (150 символов) структура данных кардинально отличается. В новой марке на 150 символов уже зашиты серия и номер марки, которые раньше приходилось извлекать из DataMatrix. Нам необходимо научить 1С правильно парсить пришедшую строку.

2. Проверка заполнения реквизитов. Скорее всего, код проведения или записи документа ЕГАИС в вашей 1С (например, в модулях интеграции с ЕГАИС) проверяет обязательное заполнение обоих реквизитов: и марки PDF-417, и штрихкода DataMatrix. Если загрузить документ, где у части строк (новых марок) поле DataMatrix будет пустым, система выдаст ошибку.

Посмотрим на пример кода в модуле загрузки Клеверенс (обработка обслуживания). Нам нужно найти место, где происходит разбор строк документа, полученного от ТСД, и модифицировать алгоритм заполнения реквизитов.

Проанализируем пример кода на языке 1С:


// Процедура обработки строки загружаемого из ТСД документа
Процедура ОбработатьСтрокуЗагрузки(СтрокаДокументаТCД, СтрокаЕГАИС1С)
    
    МаркаPDF417 = СтрокаДокументаТCД.Barcode;
    ДлинаМарки = СтрДлина(МаркаPDF417);
    
    Если ДлинаМарки = 150 Тогда
        // Это новая марка. Извлекаем данные напрямую из нее
        СтрокаЕГАИС1С.АкцизнаяМарка = МаркаPDF417;
        
        // Для новых марок поле DataMatrix не заполняем, либо пишем в него служебный признак
        СтрокаЕГАИС1С.КодDataMatrix = ""; 
        
        // Парсим серию и номер из 150-символьной марки
        // Согласно структуре новой марки, серия и номер находятся на определенных позициях
        СтрокаЕГАИС1С.СерияМарки = Сред(МаркаPDF417, 1, 3); // Пример разбора (позиции зависят от формата)
        СтрокаЕГАИС1С.НомерМарки = Сред(МаркаPDF417, 4, 9);
        
    ИначеЕсли ДлинаМарки = 68 Тогда
        // Это старая марка, для нее DataMatrix обязателен
        СтрокаЕГАИС1С.АкцизнаяМарка = МаркаPDF417;
        СтрокаЕГАИС1С.КодDataMatrix = СтрокаДокументаТCД.DataMatrix; // Считанный ТСД код
        
        // Обычный разбор старой марки
        СтрокаЕГАИС1С.СерияМарки = Сред(МаркаPDF417, 1, 5);
        СтрокаЕГАИС1С.НомерМарки = Сред(МаркаPDF417, 6, 8);
    Иначе
        ВызватьИсключение "Некорректный формат акцизной марки: " + МаркаPDF417;
    КонецЕсли;

КонецПроцедуры

Также важно проверить в 1С модуль проведения документа ЕГАИС (например, «ТТН Входящая ЕГАИС» или «Акт списания ЕГАИС»). Найдем функции проверки заполнения помарочной продукции. Нам необходимо отключить обязательное требование наличия DataMatrix для записей, у которых длина марки равна 150 символам.

Рассмотрим пример функции валидации перед отправкой данных в ЕГАИС:


Функция ПроверитьЗаполнениеПоштучногоАлкоголя(ТабличнаяЧастьТовары) Экспорт
    
    Для Каждого СтрокаТЧ Из ТабличнаяЧастьТовары Цикл
        ДлинаМарки = СтрДлина(СтрокаТЧ.АкцизнаяМарка);
        
        Если ДлинаМарки = 68 И ПустаяСтрока(СтрокаТЧ.КодDataMatrix) Тогда
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
                "Для старой марки " + СтрокаТЧ.АкцизнаяМарка + " обязательно заполнение DataMatrix!"
            );
            Возврат Ложь;
        КонецЕсли;
        
        // Для марки длиной 150 символов отсутствие DataMatrix является корректным состоянием
    КонецЦикла;
    
    Возврат Истина;
КонецФункции

Тестирование и запуск в эксплуатацию

После внесения изменений в конфигурацию Mobile SMARTS и доработки модулей интеграции в 1С необходимо провести комплексное тестирование:

  1. Запустим эмулятор ТСД на компьютере разработчика.
  2. Подготовим тестовые штрихкоды товаров и акцизные марки обоих типов (длиной 68 и 150 символов). Их можно распечатать на обычном принтере или считывать прямо с экрана монитора (если сканер ТСД поддерживает считывание с экранов).
  3. Проверим процесс сканирования старой марки: убедимся, что эмулятор запрашивает DataMatrix.
  4. Проверим процесс сканирования новой марки: убедимся, что после сканирования марки длиной 150 символов эмулятор сразу записывает строку и не выводит на экран форму сканирования DataMatrix.
  5. Выгрузим тестовый документ в 1С и проверим правильность заполнения полей, разбора серии/номера и проведения документа.

Таким образом, решив задачу последовательно на уровне конфигуратора Mobile SMARTS и принимающего кода 1С, мы получаем полностью рабочий бизнес-процесс под новые требования ЕГАИС без необходимости переплаты за новые лицензии и коробочные обновления Клеверенс.

← На главную