Как устранить ошибку создания объекта драйвера фискального регистратора Штрих-М в 1С

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

Разбираемся с именами файлов: DrvFR.dll против AddIn.DrvFR1C.dll

Первым делом проанализируем ситуацию с поиском нужной библиотеки. В современных версиях драйверов «Штрих-М» (начиная с ветки 4.x) основной библиотекой является DrvFR.dll. Именно она содержит в себе COM-сервер, необходимый для взаимодействия с оборудованием. Путаница с AddIn.DrvFR1C.dll возникает из-за того, что это имя часто фигурирует в старой документации или примерах кода для 1С.

На самом деле, при правильной регистрации основной библиотеки DrvFR.dll в системе, обращение через программный идентификатор (ProgID) AddIn.DrvFR или AddIn.DrvFR1C (в зависимости от версии и реализации) должно работать корректно. Если 1С требует именно AddIn.DrvFR1C, это может указывать на использование устаревших макетов драйвера в конфигурации. В большинстве случаев достаточно корректно зарегистрировать DrvFR.dll. Для изучения деталей прямого взаимодействия с оборудованием можно использовать руководство по работе с драйвером ФР Штрих-М на уровне протокола.

Корректная регистрация компоненты в системе

Для того чтобы операционная система и 1С «увидели» драйвер, его необходимо зарегистрировать в реестре Windows. Рассмотрим, как это сделать правильно, учитывая нюансы 64-битных систем:

  1. Запустите командную строку (cmd) от имени Администратора.
  2. Если вы используете 64-битную версию Windows, а драйвер 32-битный, регистрацию нужно проводить через специальную версию утилиты. Выполните команду:

    C:\Windows\SysWOW64\regsvr32.exe "C:\ПутьКДрайверу\DrvFR.dll"

  3. Убедитесь, что появилось сообщение об успешной регистрации (DllRegisterServer в ... завершено успешно).

Важный нюанс: Простого копирования файла в папку базы недостаточно. Регистрация через regsvr32 обязательна для работы через механизмы COM/OLE.

Главная причина ошибки: Конфликт разрядности (32 vs 64 бит)

Проанализируем ситуацию, когда регистрация прошла успешно, но 1С все равно выдает ошибку. Выясним причину: если ваша платформа 1С:Предприятие установлена в 64-битном варианте (x64), она физически не сможет загрузить 32-битную библиотеку DrvFR.dll внутри своего процесса. Это архитектурное ограничение Windows.

В этом случае у вас есть три пути решения:

  1. Установить 32-битную версию платформы 1С: Это самый простой и надежный способ для работы со старым торговым оборудованием.
  2. Использовать 64-битные драйверы: Компания «Штрих-М» выпускает современные драйверы (версии 5.x), которые поддерживают работу с 64-битной платформой через Native API.
  3. Использовать Библиотеку подключаемого оборудования (БПО): В современных конфигурациях 1С рекомендуется подключать ККМ через БПО, которая сама управляет загрузкой нужных компонент.

Программная инициализация ФР в коде 1С

Рассмотрим пример кода для подключения внешней компоненты. Мы будем использовать метод ПодключитьВнешнююКомпоненту и создание объекта через COMОбъект. Обратите внимание, что для обычного приложения переменная объекта ККМ должна быть объявлена как глобальная.


// Глобальная переменная для работы с устройством
Перем глФР Экспорт;

&НаКлиенте
Процедура ИнициализироватьФР()
    Попытка
        // Пытаемся подключить компоненту. 
        // Идентификатор "AddIn.DrvFR" используется для стандартного драйвера Штрих-М
        ПодключитьВнешнююКомпоненту("AddIn.DrvFR"); 
        
        // Создаем объект драйвера
        глФР = Новый COMОбъект("AddIn.DrvFR");
        
        Сообщить("Драйвер успешно инициализирован.");
    Исключение
        Сообщить("Ошибка инициализации фискального регистратора: " + ОписаниеОшибки(), СтатусСообщения.Важное);
        Возврат;
    КонецПопытки;

    // После инициализации необходимо установить связь с аппаратом
    ПарольАдминистратора = 30; // Стандартный пароль для Штрих-М
    Если ПодключитьсяКФР(ПарольАдминистратора) Тогда
        Сообщить("Связь с ФР установлена.");
    КонецЕсли;
КонецПроцедуры

Реализация функций подключения и обмена данными

Разберем по шагам процесс установки соединения. После создания объекта глФР, необходимо передать ему параметры связи (порт, скорость) или использовать настройки, сохраненные в драйвере по умолчанию, и вызвать метод Connect().


&НаКлиенте
Функция ПодключитьсяКФР(Пароль)
    Рез = Ложь;
    
    глФР.Password = Пароль;
    глФР.Connect();
    
    // Проверяем результат выполнения команды
    Ответ = глФР.ResultCode;
    Если Ответ = 0 Тогда
        Рез = Истина;
        глФР.Beep(); // Подаем звуковой сигнал для подтверждения связи
    Иначе
        Сообщить("Ошибка связи: " + глФР.ResultCodeDescription);
    КонецЕсли;
    
    Возврат Рез;
КонецФункции

Работа со сменами: Открытие и закрытие (Z-отчет)

Проанализируем методы управления сменой. Согласно требованиям ФЗ-54, смена не может длиться более 24 часов. Посмотрим на пример реализации открытия смены и снятия отчета с гашением (Z-отчета).


&НаКлиенте
Функция ОткрытьСмену()
    глФР.Password = 1; // Пароль кассира
    
    // Проверяем текущий режим (ECRMode)
    // Режим 4 - Смена закрыта
    Если глФР.ECRMode <> 4 Тогда 
        Сообщить("Смена уже открыта или ККМ находится в другом режиме.");
        Возврат Истина;
    КонецЕсли;
    
    Результат = глФР.OpenSession();
    Если Результат <> 0 Тогда
        Сообщить("Ошибка открытия смены: " + глФР.ResultCodeDescription);
        Возврат Ложь;
    КонецЕсли;
    
    Возврат Истина;
КонецФункции

&НаКлиенте
Функция ЗакрытьСмену()
    глФР.Password = 30; // Пароль администратора
    
    // Выполнение отчета с гашением
    Результат = глФР.PrintReportWithCleaning();
    Если Результат <> 0 Тогда
        Сообщить("Ошибка закрытия смены: " + глФР.ResultCodeDescription);
        Возврат Ложь;
    КонецЕсли;
    
    Возврат Истина;
КонецФункции

Формирование и печать чека (ФФД 1.05 и выше)

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


&НаКлиенте
Процедура ПробитьЧек(ДанныеЧека)
    // 1. Передача ИНН кассира (Тег 1203)
    глФР.TagNumber = 1203; 
    глФР.TagType = 7; // Тип - строка
    глФР.TagValueStr = "123456789012"; // ИНН кассира
    глФР.FNSendTag(); 

    // 2. Регистрация позиций чека
    Для каждого СтрокаТовара Из ДанныеЧека.Товары Цикл
        глФР.StringForPrinting = СтрокаТовара.Наименование;
        глФР.Price = СтрокаТовара.Цена;
        глФР.Quantity = СтрокаТовара.Количество;
        глФР.Tax1 = 0; // Налоговая ставка (0 - без НДС, 1 - 20% и т.д.)
        глФР.Department = 1;
        
        // Метод Sale() регистрирует продажу позиции
        глФР.Sale();
    КонецЦикла;

    // 3. Указание сумм оплаты
    глФР.Summ1 = ДанныеЧека.Наличные;
    глФР.Summ2 = ДанныеЧека.Безналичные;

    // 4. Закрытие чека
    глФР.FNCloseCheckEx();
    
    Если глФР.ResultCode <> 0 Тогда
        Сообщить("Ошибка пробития чека: " + глФР.ResultCodeDescription);
        // В случае ошибки отменяем чек
        глФР.SysAdminCancelCheck();
    КонецЕсли;
КонецПроцедуры

Рекомендации для модели RR-02KZ и специфики Казахстана

Если вы работаете с аппаратом RR-02KZ, помните, что он предназначен для рынка Казахстана. Рассмотрим особенности:

Подведем итог: Основная проблема «невидимости» драйвера в 1С чаще всего кроется в разности разрядностей платформы и библиотеки. Переход на 32-битную платформу или использование Native API драйверов версии 5.x решает большинство проблем с подключением оборудования «Штрих-М». Для быстрой проверки доступности устройства и диагностики связи пригодится программа для тестирования ККМ Штрих и Атол.

← На главную