Интеграция терминалов сбора данных (ТСД) на платформе Mobile SMARTS от компании «Клеверенс» с информационными системами на базе 1С — это стандартная задача при автоматизации складского учета. Однако в процессе настройки разработчики и системные администраторы часто сталкиваются со специфическими проблемами. К ним относятся ошибки подключения к промежуточной или основной базе 1С через COM-соединение, а также некорректный разбор комплексных штрихкодов (например, GS1-128) на конкретных моделях Android-устройств. В качестве альтернативного варианта, если не требуется сложная логика ТСД, можно использовать готовый драйвер и приложение для превращения Android-устройства в штрихкод-сканер для 1С.
В этой статье мы подробно разберем, как устранить ошибку получения склада для текущего пользователя, настроить службу сервера Клеверенс, победить проблему разрядности COM-соединителей на 64-битных операционных системах, а также научимся правильно обрабатывать спецсимволы в штрихкодах GS1-128 для автоматического извлечения количества и веса номенклатуры.
Рассмотрим распространенную ситуацию: при попытке тестирования подключения ТСД к 1С через ПК-клиент Клеверенс возникает критическое исключение: «Ошибка при получении склада для текущего пользователя из 1С». При этом администратор уже выполнил стандартные действия по регистрации библиотеки comcntr.dll через regsvr32, запустил инициализацию COM-сервера 1С командой 1cv8.exe /RegServer, но это не принесло желаемого результата.
Выясним причину этой проблемы. По умолчанию после установки платформы Mobile SMARTS системная служба «Mobile SMARTS Сервер» регистрируется в операционной системе Windows и запускается под служебной учетной записью Network Service (Сетевая служба) или Local System (Локальная система). Эти учетные записи имеют крайне ограниченные права доступа к локальным ресурсам компьютера, реестру Windows и, самое главное, к файловой базе данных 1С (если база файловая) или к компонентам DCOM.
Разберем по шагам, как исправить эту ошибку:
services.msc и нажмите Enter.После запуска службы от имени Администратора процесс сервера Mobile SMARTS получит полный доступ к библиотекам COM-соединения 1С и сможет беспрепятственно инициализировать подключение к базе данных для авторизации пользователей и получения структуры складов.
Если служба запущена от имени администратора, но ошибка обращения к COM-объектам 1С сохраняется (особенно на Windows 10 x64 или Windows Server x64), мы имеем дело с несовместимостью разрядности процессов. Служба Mobile SMARTS работает как 64-битный процесс, а на сервере может быть зарегистрирована только 32-битная версия COM-соединителя 1С (или наоборот). Напрямую вызвать 32-битную DLL-библиотеку из 64-битного окружения невозможно.
Проанализируем ситуацию и настроим изолированное COM+ приложение, которое выступит в роли моста между разной разрядностью систем:
dcomcnfg и нажмите Enter.1C_COM_Connector, и обязательно выберите тип установки: Серверное приложение (это критически важно, так как именно этот тип заставляет систему запускать DLL в отдельном процессе dllhost.exe).comcntr.dll. Данный файл находится в каталоге установленной платформы 1С (например, C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll).Теперь операционная система Windows будет автоматически осуществлять маршалинг вызовов между Клеверенсом и 1С через системный процесс-посредник, что полностью решает проблему разрядности.
Перейдем ко второй важнейшей проблеме, обсуждаемой разработчиками. Это некорректная работа с комплексными штрихкодами формата 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:
09004699816455.0003883500005.200411 (11 апреля 2020 года).005000, что при делении на 1000 дает вес 5.000 кг.1.Чтобы Клеверенс автоматически извлекал вес (количество) из этого штрихкода в переменную SelectedProduct.Quantity, должны соблюдаться два важнейших условия:
310x для веса в кг или 30 для обычного штучного количества). Если структура штрихкода нарушена (например, вырезан разделитель групп), парсер не сможет определить границы блоков, аварийно завершит разбор и сбросит количество в дефолтное значение 1.Выясним причину парадоксального поведения системы: почему при тестировании ТСД, подключенного к отладчику Mobile SMARTS на ПК, все работает корректно и товар с весом распознаются, а при автономной работе на самом устройстве Caribe PL-40L штрихкод выдает ошибку «Товар не найден»?
Проанализируем физику процесса передачи данных от сканирующего модуля ТСД в операционную систему Android. Большинство бюджетных ТСД (включая Caribe, Chainway, и др.) используют встроенную системную утилиту сканирования («Scanner», «Keyboard Emulator»). По умолчанию эта утилита работает в режиме эмуляции клавиатуры (Keyboard Emulation).
Когда сканер считывает штрихкод, он эмулирует последовательное нажатие клавиш на клавиатуре Android. Однако символ разделителя групп (ASCII 29 / GS) является управляющим непечатным символом. Операционная система Android не имеет клавиши для этого символа, поэтому встроенная утилита сканера при клавиатурном вводе делает одно из двух: либо полностью вырезает этот символ из строки, либо заменяет его на обычный пробел (символ с кодом 0x20).
При подключении к отладчику на ПК данные штрихкода передаются напрямую через байтовый RAW-массив (сырые данные), минуя буфер клавиатуры Android. Поэтому в отладчике мы видим символ , а на самом ТСД в текстовое поле прилетает пробел. В результате встроенный парсер Клеверенса спотыкается о пробел, не может определить окончание номера партии и выдает ошибку.
Чтобы решить эту проблему на ТСД, выполним следующие шаги:
ASCII 29.29 (GS) на печатную последовательность символов. В стандартах ТСД часто используется замена на комбинацию \F или вертикальную черту |. Настройте аналогичное правило замены разделителя в конфигурации Клеверенса в правилах разбора штрихкодов.Посмотрим на пример генерации тестового штрихкода для проверки работы настроенного сканера. При формировании штрихкода в генераторах (например, в генераторе TEC-IT) для эмуляции разделителя групп FNC1 (ASCII 29) необходимо использовать управляющую последовательность \F. Строка данных для генерации тестового штрихкода должна выглядеть следующим образом:
0109004699816455100003883500005\F152004113103005000991
Разберем еще один важный аспект интеграции Клеверенса, упомянутый участниками обсуждения: подключение к устаревшим базам данных на платформе 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+:
V1CEnterprise (или зарегистрируйте файл 1cv77.exe в качестве COM-компонента).Обратите внимание на важный нюанс: при интенсивной работе складского персонала (более 300 сканирований за смену на одном терминале) прямое COM-подключение к 1С 7.7 начинает вызывать утечки оперативной памяти и критическое замедление работы ТСД. Каждое сканирование инициирует транзакцию через COM-границу процессов, что перегружает ядро 1С 7.7.
Для оптимизации обмена и предотвращения «зависаний» терминалов мы настоятельно рекомендуем отказаться от постоянных онлайн-запросов к 1С 7.7 через OLE. Вместо этого спроектируйте асинхронный обмен данными:
1C++ или v7plus.dll, которые формируют пакетные XML/JSON-файлы обмена.