При подключении торгового оборудования, в частности фискальных регистраторов компании Штрих-М, разработчики часто сталкиваются с проблемой отсутствия специфических файлов, таких как 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-битных систем:
C:\Windows\SysWOW64\regsvr32.exe "C:\ПутьКДрайверу\DrvFR.dll"
Важный нюанс: Простого копирования файла в папку базы недостаточно. Регистрация через regsvr32 обязательна для работы через механизмы COM/OLE.
Проанализируем ситуацию, когда регистрация прошла успешно, но 1С все равно выдает ошибку. Выясним причину: если ваша платформа 1С:Предприятие установлена в 64-битном варианте (x64), она физически не сможет загрузить 32-битную библиотеку DrvFR.dll внутри своего процесса. Это архитектурное ограничение Windows.
В этом случае у вас есть три пути решения:
Рассмотрим пример кода для подключения внешней компоненты. Мы будем использовать метод ПодключитьВнешнююКомпоненту и создание объекта через COMОбъект. Обратите внимание, что для обычного приложения переменная объекта ККМ должна быть объявлена как глобальная.
// Глобальная переменная для работы с устройством
Перем глФР Экспорт;
&НаКлиенте
Процедура ИнициализироватьФР()
Попытка
// Пытаемся подключить компоненту.
// Идентификатор "AddIn.DrvFR" используется для стандартного драйвера Штрих-М
ПодключитьВнешнююКомпоненту("AddIn.DrvFR");
// Создаем объект драйвера
глФР = Новый COMОбъект("AddIn.DrvFR");
Сообщить("Драйвер успешно инициализирован.");
Исключение
Сообщить("Ошибка инициализации фискального регистратора: " + ОписаниеОшибки(), СтатусСообщения.Важное);
Возврат;
КонецПопытки;
// После инициализации необходимо установить связь с аппаратом
ПарольАдминистратора = 30; // Стандартный пароль для Штрих-М
Если ПодключитьсяКФР(ПарольАдминистратора) Тогда
Сообщить("Связь с ФР установлена.");
КонецЕсли;
КонецПроцедуры
Разберем по шагам процесс установки соединения. После создания объекта глФР, необходимо передать ему параметры связи (порт, скорость) или использовать настройки, сохраненные в драйвере по умолчанию, и вызвать метод Connect().
&НаКлиенте
Функция ПодключитьсяКФР(Пароль)
Рез = Ложь;
глФР.Password = Пароль;
глФР.Connect();
// Проверяем результат выполнения команды
Ответ = глФР.ResultCode;
Если Ответ = 0 Тогда
Рез = Истина;
глФР.Beep(); // Подаем звуковой сигнал для подтверждения связи
Иначе
Сообщить("Ошибка связи: " + глФР.ResultCodeDescription);
КонецЕсли;
Возврат Рез;
КонецФункции
Проанализируем методы управления сменой. Согласно требованиям ФЗ-54, смена не может длиться более 24 часов. Посмотрим на пример реализации открытия смены и снятия отчета с гашением (Z-отчета).
&НаКлиенте
Функция ОткрытьСмену()
глФР.Password = 1; // Пароль кассира
// Проверяем текущий режим (ECRMode)
// Режим 4 - Смена закрыта
Если глФР.ECRMode <> 4 Тогда
Сообщить("Смена уже открыта или ККМ находится в другом режиме.");
Возврат Истина;
КонецЕсли;
Результат = глФР.OpenSession();
Если Результат <> 0 Тогда
Сообщить("Ошибка открытия смены: " + глФР.ResultCodeDescription);
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаКлиенте
Функция ЗакрытьСмену()
глФР.Password = 30; // Пароль администратора
// Выполнение отчета с гашением
Результат = глФР.PrintReportWithCleaning();
Если Результат <> 0 Тогда
Сообщить("Ошибка закрытия смены: " + глФР.ResultCodeDescription);
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
При оформлении продаж крайне важно передавать корректные данные о кассире и товарах. Выясним причину, почему это важно: современные форматы фискальных данных (ФФД) требуют обязательного наличия ИНН кассира и правильных налоговых ставок. Рассмотрим пример реализации продажи.
&НаКлиенте
Процедура ПробитьЧек(ДанныеЧека)
// 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, помните, что он предназначен для рынка Казахстана. Рассмотрим особенности:
Подведем итог: Основная проблема «невидимости» драйвера в 1С чаще всего кроется в разности разрядностей платформы и библиотеки. Переход на 32-битную платформу или использование Native API драйверов версии 5.x решает большинство проблем с подключением оборудования «Штрих-М». Для быстрой проверки доступности устройства и диагностики связи пригодится программа для тестирования ККМ Штрих и Атол.