Как программно подключить фискальный регистратор Штрих-М через драйвер DrvFR

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

Работа с торговым оборудованием, особенно с классическими моделями фискальных регистраторов (ФР) от компании «Штрих-М», требует понимания механизмов взаимодействия 1С с внешними компонентами через COM-интерфейс. Часто разработчики сталкиваются с ситуацией, когда стандартные обработки обслуживания 1С (DrvFR1C) не дают нужной гибкости или требуется прямое управление низкоуровневыми функциями драйвера DrvFR. В рамках данной статьи мы разберем, как правильно инициализировать подключение, где задавать параметры связи и как избежать конфликтов при работе нескольких устройств.

Инициализация COM-объекта и базовый код подключения

Для начала рассмотрим типовой сценарий программного подключения. В среде 1С:Предприятие работа с драйвером строится на создании объекта AddIn.DrvFR. Важно понимать, что перед созданием объекта компонента должна быть зарегистрирована в операционной системе (через regsvr32) и подключена в самой 1С.

Проанализируем базовый программный код для инициализации связи:


// Подключаем внешнюю компоненту
Если ПодключитьВнешнююКомпоненту("AddIn.DrvFR") Тогда
    // Создаем экземпляр драйвера
    FR = Новый COMОбъект("AddIn.DrvFR");
    
    // Попытка установить связь
    РезультатСвязи = FR.Connect();
    
    // Устанавливаем пароль администратора (по умолчанию обычно 30)
    FR.Password = 30;
    
    Если РезультатСвязи <> 0 Тогда
        Сообщить("Ошибка подключения ФР: " + FR.ResultCodeDescription);
    Иначе
        Сообщить("Подключение к ФР выполнено успешно.");
    КонецЕсли;
Иначе
    Сообщить("Не удалось загрузить внешнюю компоненту DrvFR.dll");
КонецЕсли;

Этот код является фундаментом. Однако, как отмечают специалисты, при первом запуске Connect() часто возвращает ошибку, так как объект еще не «знает», к какому COM-порту обращаться и на какой скорости работает устройство.

Где задаются параметры связи: два основных подхода

Разберем ситуацию, когда автоматическое подключение не срабатывает. Выясним причину: драйверу требуются настройки (номер порта, скорость, таймаут). Существует два пути решения этой задачи.

Способ 1: Использование настроек «Теста драйвера»

Самый простой и часто рекомендуемый способ — предварительная настройка через утилиту «Тест драйвера ККТ», которая поставляется вместе с драйверами «Штрих-М». Если вы один раз успешно настроили связь в этой утилите и нажали кнопку «Установить параметры» или «Сохранить», драйвер записывает эти данные в системный реестр Windows (обычно в ветку HKEY_LOCAL_MACHINE\SOFTWARE\ShtrihM\DrvFR\). При вызове метода Connect() в 1С драйвер автоматически считывает последние успешно использованные параметры.

Способ 2: Прямое управление параметрами из кода

Если в вашей системе используется несколько фискальных регистраторов или параметры связи могут меняться динамически, необходимо задавать их непосредственно в коде 1С перед вызовом метода Connect(). Рассмотрим основные свойства объекта FR, которые за это отвечают:

Пример программной настройки параметров:


FR = Новый COMОбъект("AddIn.DrvFR");
FR.ComNumber = 1; // Используем COM1
FR.BaudRate = 6;  // Скорость 115200
FR.Timeout = 200; // Таймаут 200 мс
рез = FR.Connect();

Механизм «Логических устройств»

Рассмотрим более продвинутый метод, который позволяет избежать жесткого кодирования портов в 1С. В драйвере «Штрих-М» реализовано понятие «Логических устройств» (Logical Devices). Вы можете настроить несколько именованных конфигураций в «Тесте драйвера» и обращаться к ним по номеру.

Проанализируем шаги для реализации этого метода:

  1. В утилите «Тест драйвера» создайте логическое устройство (например, под номером 1).
  2. В коде 1С укажите номер этого устройства.
  3. Вызовите метод GetLD() для загрузки всех параметров (порт, скорость и т.д.), привязанных к этому номеру.

FR = Новый COMОбъект("AddIn.DrvFR");
FR.LDNumber = 1; // Указываем номер логического устройства
FR.GetLD();      // Загружаем параметры из реестра для этого номера
рез = FR.Connect();

Особенности работы с двумя ККТ на одном рабочем месте

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

1. Разделение экземпляров объектов. Для каждого ФР в коде 1С должен быть создан свой уникальный COM-объект. Не пытайтесь использовать одну переменную для управления разными устройствами по очереди без полного переподключения.

2. Использование общего порта. У драйвера есть свойство UseSharedPort. Если оно установлено в Истина, драйвер будет пытаться делить порт с другими приложениями, но для стабильной работы в 1С рекомендуется монопольное использование порта каждым объектом на разных физических или виртуальных COM-портах.

3. Проблема освобождения ресурсов. При переключении между старым драйвером (например, DrvFR1C) и новым DrvFR, порт может оставаться занятым. Выясним причину: 1С может не сразу уничтожать COM-объект в памяти. Чтобы гарантированно освободить порт, перед созданием нового объекта необходимо корректно завершить работу с предыдущим:


// Пример корректного отключения
Если ОбъектФР_Старый <> Неопределено Тогда
    ОбъектФР_Старый.Disconnect();
    ОбъектФР_Старый = Неопределено;
КонецЕсли;

Типичные ошибки и способы их решения

Проанализируем наиболее частые проблемы, с которыми сталкиваются программисты при подключении «динозавров» (старых моделей ФР):

Ошибка «Порт занят» (ResultCode = -1 или аналогичные): Проверьте, не запущена ли в данный момент утилита «Тест драйвера» или другая копия 1С. Только одно приложение может иметь активное соединение с COM-портом в конкретный момент времени.

Ошибка «Нет связи»: Чаще всего связана с несовпадением BaudRate. Если ККТ настроена на 4800, а драйвер обращается на 115200, связь не установится. Посмотрите настройки в таблицах ККТ через «Тест драйвера» (раздел «Таблицы», таблица «Системные параметры»).

Проблемы с правами доступа: На современных ОС (Windows 10/11) драйвер может не иметь прав на чтение настроек из ветки реестра HKEY_LOCAL_MACHINE. В этом случае запустите 1С от имени администратора один раз для инициализации или убедитесь, что настройки сохранены для текущего пользователя.

Подводя итог, отметим, что прямое использование AddIn.DrvFR дает разработчику полный контроль над процессом печати чеков и управления регистрами. Несмотря на почтенный возраст этой технологии, она остается надежным инструментом автоматизации торговых точек, если правильно соблюдены все условия инициализации и настройки параметров связи.

← На главную