Как решить проблемы интеграции Клеверенс с 1С: исправляем ошибку COM-соединения и настраиваем разбор сложных штрихкодов GS1-128

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

Интеграция терминалов сбора данных (ТСД) на платформе Mobile SMARTS от компании «Клеверенс» с информационными системами на базе 1С — это стандартная задача при автоматизации складского учета. Однако в процессе настройки разработчики и системные администраторы часто сталкиваются со специфическими проблемами. К ним относятся ошибки подключения к промежуточной или основной базе 1С через COM-соединение, а также некорректный разбор комплексных штрихкодов (например, GS1-128) на конкретных моделях Android-устройств. В качестве альтернативного варианта, если не требуется сложная логика ТСД, можно использовать готовый драйвер и приложение для превращения Android-устройства в штрихкод-сканер для 1С.

В этой статье мы подробно разберем, как устранить ошибку получения склада для текущего пользователя, настроить службу сервера Клеверенс, победить проблему разрядности COM-соединителей на 64-битных операционных системах, а также научимся правильно обрабатывать спецсимволы в штрихкодах GS1-128 для автоматического извлечения количества и веса номенклатуры.

Решение проблемы 1: Ошибка при получении склада из 1С и настройка прав службы Mobile SMARTS

Рассмотрим распространенную ситуацию: при попытке тестирования подключения ТСД к 1С через ПК-клиент Клеверенс возникает критическое исключение: «Ошибка при получении склада для текущего пользователя из 1С». При этом администратор уже выполнил стандартные действия по регистрации библиотеки comcntr.dll через regsvr32, запустил инициализацию COM-сервера 1С командой 1cv8.exe /RegServer, но это не принесло желаемого результата.

Выясним причину этой проблемы. По умолчанию после установки платформы Mobile SMARTS системная служба «Mobile SMARTS Сервер» регистрируется в операционной системе Windows и запускается под служебной учетной записью Network Service (Сетевая служба) или Local System (Локальная система). Эти учетные записи имеют крайне ограниченные права доступа к локальным ресурсам компьютера, реестру Windows и, самое главное, к файловой базе данных 1С (если база файловая) или к компонентам DCOM.

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

  1. Откроем консоль управления службами Windows. Для этого нажмите сочетание клавиш Win + R, введите команду services.msc и нажмите Enter.
  2. Найдите в списке службу с именем Mobile SMARTS Сервер (или аналогичную службу Клеверенс, в зависимости от версии продукта).
  3. Кликните по названию службы правой кнопкой мыши и выберите пункт Свойства.
  4. В открывшемся окне перейдите на вкладку Вход в систему.
  5. Переключите переключатель из положения «С системной учетной записью» в положение С учетной записью.
  6. Через кнопку «Обзор» выберите локального пользователя с правами Администратора компьютера (или доменного администратора, если база 1С расположена в сетевом ресурсе) и введите актуальный пароль этой учетной записи.
  7. Нажмите Применить и нажмите ОК.
  8. Перезапустите службу Mobile SMARTS, чтобы изменения вступили в силу.

После запуска службы от имени Администратора процесс сервера Mobile SMARTS получит полный доступ к библиотекам COM-соединения 1С и сможет беспрепятственно инициализировать подключение к базе данных для авторизации пользователей и получения структуры складов.

Решение конфликта разрядности 1С и Клеверенс на x64-системах через COM+

Если служба запущена от имени администратора, но ошибка обращения к COM-объектам 1С сохраняется (особенно на Windows 10 x64 или Windows Server x64), мы имеем дело с несовместимостью разрядности процессов. Служба Mobile SMARTS работает как 64-битный процесс, а на сервере может быть зарегистрирована только 32-битная версия COM-соединителя 1С (или наоборот). Напрямую вызвать 32-битную DLL-библиотеку из 64-битного окружения невозможно.

Проанализируем ситуацию и настроим изолированное COM+ приложение, которое выступит в роли моста между разной разрядностью систем:

  1. Откроем утилиту Службы компонентов. Нажмите Win + R, введите dcomcnfg и нажмите Enter.
  2. Перейдите по дереву: Службы компонентов -> Компьютеры -> Мой компьютер -> Приложения COM+.
  3. Нажмите правой кнопкой мыши на папку Приложения COM+, выберите Создать -> Приложение.
  4. В мастере создания выберите Создать новое приложение. Задайте имя, например, 1C_COM_Connector, и обязательно выберите тип установки: Серверное приложение (это критически важно, так как именно этот тип заставляет систему запускать DLL в отдельном процессе dllhost.exe).
  5. В качестве удостоверения для запуска укажите учетную запись локального администратора.
  6. После создания приложения раскройте его ветку, найдите папку Компоненты, нажмите правой кнопкой мыши и выберите Создать -> Компонент.
  7. Выберите пункт Установка новых компонентов и укажите путь к файлу comcntr.dll. Данный файл находится в каталоге установленной платформы 1С (например, C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll).
  8. Завершите работу мастера.

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

Решение проблемы 2: Разбор сложных штрихкодов GS1-128 и извлечение количества {Quantity}

Перейдем ко второй важнейшей проблеме, обсуждаемой разработчиками. Это некорректная работа с комплексными штрихкодами формата GS1-128 (ранее известного как EAN-128). Рассмотрим конкретный штрихкод, содержащий информацию о товаре, серии, сроке годности и весе (количестве):

0109004699816455100003883500005152004113103005000991

Попытки настроить ручной линейный шаблон разбора вида {x:3}{Barcode:13}{y:17}{ГоденДо:yyMMdd}{j:5}{Quantity:2}{z:6} часто приводят к тому, что переменная Quantity (количество) игнорируется системой. На ТСД автоматически записывается количество 1, либо система принудительно запрашивает ручной ввод у оператора.

Рассмотрим подробнее внутреннюю логику платформы Mobile SMARTS. Дело в том, что штрихкоды формата GS1-128 обрабатываются встроенным системным парсером Клеверенса автоматически на основе международных стандартов GS1. **Они не должны раскладываться по самописным линейным шаблонам**, так как структура GS1-128 базируется на идентификаторах применения (Application Identifiers — AI). Каждый такой идентификатор определяет тип данных и длину поля, следующие за ним.

Разберем структуру нашего тестового штрихкода по группам AI:

Чтобы Клеверенс автоматически извлекал вес (количество) из этого штрихкода в переменную SelectedProduct.Quantity, должны соблюдаться два важнейших условия:

  1. Встроенный парсер должен правильно распознать идентификатор применения веса (обычно это 310x для веса в кг или 30 для обычного штучного количества). Если структура штрихкода нарушена (например, вырезан разделитель групп), парсер не сможет определить границы блоков, аварийно завершит разбор и сбросит количество в дефолтное значение 1.
  2. В панели управления конфигурацией Mobile SMARTS в свойствах используемой экранной операции (например, «Сканирование номенклатуры») должен быть правильно настроен параметр «Ввод количества». Его необходимо перевести в режим «Автоматически из штрихкода» (или «Использовать весовые шаблоны»), иначе логика мобильного клиента проигнорирует разобранное значение и выведет на экран окно для ручного ввода количества пользователем.

Решение проблемы 3: Настройка ТСД Caribe PL-40L для сохранения разделителя GS (ASCII 29)

Выясним причину парадоксального поведения системы: почему при тестировании ТСД, подключенного к отладчику Mobile SMARTS на ПК, все работает корректно и товар с весом распознаются, а при автономной работе на самом устройстве Caribe PL-40L штрихкод выдает ошибку «Товар не найден»?

Проанализируем физику процесса передачи данных от сканирующего модуля ТСД в операционную систему Android. Большинство бюджетных ТСД (включая Caribe, Chainway, и др.) используют встроенную системную утилиту сканирования («Scanner», «Keyboard Emulator»). По умолчанию эта утилита работает в режиме эмуляции клавиатуры (Keyboard Emulation).

Когда сканер считывает штрихкод, он эмулирует последовательное нажатие клавиш на клавиатуре Android. Однако символ разделителя групп  (ASCII 29 / GS) является управляющим непечатным символом. Операционная система Android не имеет клавиши для этого символа, поэтому встроенная утилита сканера при клавиатурном вводе делает одно из двух: либо полностью вырезает этот символ из строки, либо заменяет его на обычный пробел (символ с кодом 0x20).

При подключении к отладчику на ПК данные штрихкода передаются напрямую через байтовый RAW-массив (сырые данные), минуя буфер клавиатуры Android. Поэтому в отладчике мы видим символ , а на самом ТСД в текстовое поле прилетает пробел. В результате встроенный парсер Клеверенса спотыкается о пробел, не может определить окончание номера партии и выдает ошибку.

Чтобы решить эту проблему на ТСД, выполним следующие шаги:

  1. Найдите на ТСД встроенную утилиту настройки сканера (приложение с иконкой штрихкода, обычно называется Scanner или Barcode Utility).
  2. Перейдите в раздел настроек передачи данных (Output Mode или Transmission Settings).
  3. Переключите режим вывода данных с «Keyboard emulation» на Broadcast Intent. В этом режиме сканер передает считанные данные операционной системе в виде широковещательного сообщения Android Intent. Приложение Клеверенс умеет перехватывать такие сообщения напрямую. В результате штрихкод передается как единый массив байтов, содержащий все оригинальные непечатные спецсимволы, включая ASCII 29.
  4. Если режим Broadcast Intent по какой-то причине недоступен, найдите в утилите сканера раздел автозамены символов (Char Replace / Separator Replacement).
  5. Настройте принудительную замену символа с кодом 29 (GS) на печатную последовательность символов. В стандартах ТСД часто используется замена на комбинацию \F или вертикальную черту |. Настройте аналогичное правило замены разделителя в конфигурации Клеверенса в правилах разбора штрихкодов.

Посмотрим на пример генерации тестового штрихкода для проверки работы настроенного сканера. При формировании штрихкода в генераторах (например, в генераторе TEC-IT) для эмуляции разделителя групп FNC1 (ASCII 29) необходимо использовать управляющую последовательность \F. Строка данных для генерации тестового штрихкода должна выглядеть следующим образом:

0109004699816455100003883500005\F152004113103005000991

Решение проблемы 4: Интеграция Клеверенса с 1С v7.7 на 64-битных ОС

Разберем еще один важный аспект интеграции Клеверенса, упомянутый участниками обсуждения: подключение к устаревшим базам данных на платформе 1С Предприятие 7.7. На современных 64-битных операционных системах (Windows Server 2016/2019/2022, Windows 10/11) прямое COM-подключение из 64-битного сервера Mobile SMARTS к 1С 7.7 невозможно из-за жестких ограничений разрядности ядра Windows.

Архитектура OLE-сервера 1С 7.7 является исключительно 32-битной. Чтобы обойти это ограничение и достучаться до глобального модуля 1С 7.7 для поиска номенклатуры напрямую с ТСД в режиме онлайн, нам снова потребуется настроить прослойку COM+:

  1. В Службах компонентов Windows создайте новое выделенное приложение COM+ с типом Серверное приложение.
  2. В свойствах безопасности укажите запуск от имени локального Администратора.
  3. В качестве устанавливаемого компонента зарегистрируйте 32-битные OLE-серверы 1С 7.7. Для этого добавьте библиотеки V1CEnterprise (или зарегистрируйте файл 1cv77.exe в качестве COM-компонента).

Обратите внимание на важный нюанс: при интенсивной работе складского персонала (более 300 сканирований за смену на одном терминале) прямое COM-подключение к 1С 7.7 начинает вызывать утечки оперативной памяти и критическое замедление работы ТСД. Каждое сканирование инициирует транзакцию через COM-границу процессов, что перегружает ядро 1С 7.7.

Для оптимизации обмена и предотвращения «зависаний» терминалов мы настоятельно рекомендуем отказаться от постоянных онлайн-запросов к 1С 7.7 через OLE. Вместо этого спроектируйте асинхронный обмен данными:

← На главную