Как программно получить объект драйвера ККТ «Штрих-М» в 1С без физического подключения кассы

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

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

В этой статье мы подробно разберем, как получить объект драйвера ККТ «Штрих-М» программным путем, зарегистрировать внешнюю компоненту на тестовом сервере без наличия реального оборудования и изучить структуру его методов.

Понимание архитектуры: «родной» драйвер и компоненты 1С

Прежде чем переходить к написанию кода, важно проанализировать, с какими именно библиотеками мы имеем дело. В среде «1С:Предприятие» работа со «Штрих-М» может строиться по двум различным схемам:

  1. Низкоуровневый (нативный) драйвер производителя (AddIn.DrvFR): Работает напрямую через библиотеку DrvFR.dll. Это полноценный COM-объект, содержащий сотни специализированных методов для управления ККТ (настройка таблиц, шрифтов, прямая работа с фискальным накопителем). Именно этот объект чаще всего используется в старых конфигурациях, таких как УТ 10.3, или в самописных решениях.
  2. Компоненты интеграции стандарта 1С (AddIn.DrvFr1C, AddIn.SMDrvFR1C): Используют промежуточные библиотеки совместимости (например, DrvFR1C.dll), созданные под стандарты требований «1С:Библиотеки подключаемого оборудования» (БПО). Их функционал сильно урезан и ограничен только теми методами, которые регламентированы стандартами 1С.

Если вам требуется полный контроль над кассой или использование специфических функций (например, метода DeviceControlHex для отправки сырых байт-команд), мы рекомендуем ориентироваться на работу с нативным COM-объектом драйвера AddIn.DrvFR.

Шаг 1. Получение файлов DLL из базы данных 1С

Для создания объекта драйвера на тестовом сервере нам физически необходим сам файл библиотеки. Если касса не подключена к серверу, это не значит, что библиотеки на нем нет. В большинстве конфигураций 1С (включая «Управление торговлей 10.3») внешние компоненты торгового оборудования хранятся непосредственно внутри информационной базы.

Рассмотрим, как их извлечь:

  1. Откроем базу в режиме «Конфигуратор».
  2. Перейдем в справочник «Обработки обслуживания торгового оборудования» (или найдем макеты обработок обслуживания в составе конфигурации).
  3. Найдем обработку обслуживания для ККТ «Штрих-М». Если она загружена в справочник в режиме «Предприятие», мы можем сохранить саму обработку (файл .epf) на диск.
  4. Откроем сохраненную обработку в конфигураторе и изучим ее макеты. Очень часто библиотеки (.dll) и сопутствующие файлы запакованы в макеты с типом «Двоичные данные». Выгрузим этот макет на диск, сохранив файл с расширением .dll.

Шаг 2. Регистрация библиотеки в операционной системе

Чтобы платформа «1С:Предприятие» смогла успешно выполнить инициализацию COM-объекта, библиотека должна быть зарегистрирована в реестре Windows тестового сервера. Физическое подключение ККТ для этого не требуется.

Выполним регистрацию по шагам:

  1. Скопируем полученный файл DrvFR.dll в системную директорию (например, C:\Program Files\ShtrihM\).
  2. Запустим командную строку Windows (cmd) обязательно от имени администратора.
  3. Выполним команду регистрации библиотеки: regsvr32 "C:\Program Files\ShtrihM\DrvFR.dll"
  4. После успешного выполнения должно появиться сообщение: «Успешное выполнение DllRegisterServer...».

Важное примечание для 64-битных серверов 1С: Если сервер приложений 1С запущен в 64-разрядном режиме, а библиотека DrvFR.dll является 32-разрядной, прямая попытка создать COM-объект на сервере вызовет ошибку «Класс не зарегистрирован». В этом случае код инициализации необходимо выполнять в контексте клиента (на 32-битном клиенте 1С) либо настроить для библиотеки службу COM+ (Component Services) в Windows, чтобы запустить ее в изолированном 32-битном процессе.

Шаг 3. Программная инициализация объекта драйвера в 1С

Теперь, когда библиотека зарегистрирована в системе, мы можем беспрепятственно создать объект драйвера в коде 1С. Посмотрим на практический пример создания объекта и работы с ним без подключения кассы:


// Шаг 1. Подключаем внешнюю компоненту
ПутьККомпоненте = "AddIn.DrvFR";
РезультатПодключения = ПодключитьВнешнююКомпоненту(ПутьККомпоненте);

Если РезультатПодключения Тогда
    Попытка
        // Шаг 2. Создаем экземпляр COM-объекта драйвера
        FR = Новый COMОбъект(ПутьККомпоненте);
        
        // Объект успешно создан! Теперь мы можем читать и записывать его свойства.
        // Зададим системный пароль по умолчанию для работы с ККТ (30 - системный администратор)
        FR.Password = 30;
        
        // Вы можете обращаться к любым свойствам объекта драйвера
        Сообщить("Драйвер успешно загружен. Версия драйвера: " + FR.DriverVersion);
        
        // Попытка вызвать метод, требующий связи
        // Так как физического подключения нет, метод Connect() вернет ошибку связи,
        // но сам вызов метода пройдет корректно без падения системы.
        FR.Connect();
        Если FR.ResultCode <> 0 Тогда
            Сообщить("Результат попытки связи (ожидаемо без ККТ): " + FR.ResultCodeDescription);
        КонецЕсли;
        
        // Отключаем объект при завершении работы
        FR.Disconnect();
        
    Исключение
        Сообщить("Не удалось инициализировать COM-объект: " + ОписаниеОшибки());
    КонецПопытки;
Иначе
    Сообщить("Ошибка подключения внешней компоненты AddIn.DrvFR!");
КонецЕсли;

Шаг 4. Изучение доступных методов и свойств драйвера

Если у вас нет под рукой официальной документации к конкретной версии драйвера «Штрих-М», выяснить точные имена методов (таких как PrintReportWithoutCleaning, DeviceControlHex) и состав их параметров можно с помощью сторонних инструментов.

Способ А. Использование Excel VBA Object Browser

Это самый простой и быстрый способ анализа зарегистрированных COM-компонент в операционной системе Windows. Выполним следующие действия:

  1. Откроем Microsoft Excel на сервере, где зарегистрирована библиотека.
  2. Перейдем в редактор кода VBA, нажав комбинацию клавиш Alt + F11.
  3. В верхнем меню зайдем в раздел Tools -> References.
  4. В открывшемся списке найдем зарегистрированную библиотеку драйвера (она может называться «Shtrih-M Driver» или аналогично) и установим напротив нее флаг, после чего нажмем OK.
  5. Откроем Object Browser, выбрав пункт меню View -> Object Browser (или нажав клавишу F2).
  6. В выпадающем списке библиотек выберем подключенную библиотеку Штрих-М. Перед нами откроется полный структурированный список всех классов, методов, функций, констант и свойств драйвера с указанием типов возвращаемых значений.

Способ Б. Использование утилиты Oleview

Для глубокого системного анализа можно воспользоваться утилитой OLE/COM Object Viewer (Oleview), которая поставляется вместе с Windows SDK от Microsoft. С ее помощью вы сможете открыть библиотеку типов (Type Library) зарегистрированного класса AddIn.DrvFR и просмотреть его интерфейс на языке описания интерфейсов IDL. Там будут видны абсолютно все скрытые низкоуровневые функции драйвера.

Ответы на частые вопросы по поведению драйверов

Вопрос: Если в базе данных 1С занесено несколько касс, данные по какой именно кассе будет использовать инициализированный объект драйвера?

Ответ: Сам по себе COM-объект драйвера AddIn.DrvFR является независимым системным объектом операционной системы. Он ничего не знает о базах данных 1С и справочнике торгового оборудования. Он будет пытаться установить связь с тем физическим портом (COM-портом, IP-адресом) и теми параметрами связи, которые вы явно передадите в его свойства перед вызовом метода соединения. Например:


FR.ComNumber = 1; // Номер COM-порта
FR.BaudRate = 6;  // Скорость обмена (115200)
FR.Connect();

Если параметры не переданы явно в коде, драйвер возьмет настройки по умолчанию, сохраненные локально на данном компьютере через утилиту «Тест драйвера ККТ».

Вопрос: Поддерживает ли стандартная интеграционная обработка 1С метод DeviceControlHex?

Ответ: Стандартные интеграционные библиотеки БПО (такие как AddIn.DrvFr1C) этот метод напрямую не поддерживают, так как работают в рамках строго регламентированного интерфейса 1С. Метод DeviceControlHEX разработан производителем ККТ «Штрих-М» для своих специализированных компонентов. Он позволяет посылать в кассу сырые пакеты данных в шестнадцатеричном формате напрямую через интерфейс драйвера. Для его использования вам потребуется переключиться на прямую работу с нативным драйвером AddIn.DrvFR.

← На главную