При интеграции торгового оборудования АТОЛ с программными продуктами или внешними скриптами разработчики часто сталкиваются со следующей проблемой: при попытке создания объекта драйвера ККМ система выдает ошибку о том, что класс не зарегистрирован или объект не может быть создан. Особенно часто это происходит при работе со скриптами автоматизации на языке VBScript или при запуске кода из внешних приложений.
В этой статье мы подробно разберем, почему возникает данная неполадка при использовании объекта AddIn.FPrnM45, как разрядность операционной системы влияет на работу торгового оборудования, и что делать для успешного решения этой проблемы.
Основная причина, по которой операционная система Windows отказывается создавать объект AddIn.FPrnM45, кроется в несовпадении разрядности выполняемого процесса и самого COM-объекта драйвера.
Разберем эту ситуацию по шагам:
FPrnM1C.dll или FPrnM1C82_54FZ.dll) является строго 32-битной (x86)..vbs или .js) запускаются через 64-битный сервер сценариев wscript.exe (или cscript.exe), расположенный по пути C:\Windows\System32\.Аналогичная проблема возникает и при использовании платформы "1С:Предприятие": если вы запускаете код в 64-битном клиенте 1С, попытка инициализировать 32-битную компоненту напрямую также завершится ошибкой.
Чтобы обойти ограничение разрядности при работе со скриптами автоматизации, нам необходимо принудительно заставить операционную систему выполнять сценарий в 32-битном окружении. Для этого в Windows предусмотрен специальный каталог SysWOW64, где хранятся 32-битные системные утилиты.
Рассмотрим, как правильно запустить скрипт печати чека. Вместо простого двойного клика по файлу скрипта, запустим его через командную строку следующим образом:
Пример команды для запуска:
C:\Windows\SysWOW64\wscript.exe "C:\Путь_к_вашему_скрипту\script.vbs"
Использование утилиты wscript.exe из папки SysWOW64 инициализирует 32-битный процесс, который без проблем обнаружит в реестре и загрузит 32-битную библиотеку АТОЛ AddIn.FPrnM45.
Если запуск через правильный интерпретатор по-прежнему выдает ошибку, велика вероятность, что библиотека драйвера не зарегистрирована в реестре операционной системы должным образом. Мы можем выполнить регистрацию вручную.
Выполним процедуру регистрации по шагам:
Program Files (x86).C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\ATOL\Drivers8\Bin\FPrnM1C.dll"
Если вы используете версию драйвера с поддержкой 54-ФЗ, имя файла может отличаться. В этом случае команда будет выглядеть так:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\ATOL\Drivers8\Bin\FPrnM1C82_54FZ.dll"
После успешного выполнения вы увидите системное сообщение о том, что библиотека успешно зарегистрирована.
После того как проблема с разрядностью и регистрацией COM-объекта решена, разработчики часто сталкиваются со следующей проблемой: скрипт или программа "1С:Предприятие" аварийно завершает работу без видимых причин в момент обращения к методам драйвера ККМ.
Выясним причину этого поведения. Устаревшие версии драйверов АТОЛ (в частности, ДТО 8) используют механизмы управления памятью, которые современные системы безопасности Windows расценивают как потенциальную угрозу. В результате срабатывает служба DEP (Data Execution Prevention / Предотвращение выполнения данных), которая мгновенно закрывает вызвавший ошибку процесс.
Для решения этой проблемы выполним одну из следующих настроек:
Вариант А. Добавление программы в исключения DEP
wscript.exe из папки SysWOW64 или 1cv8.exe для платформы 1С).Вариант Б. Полное отключение DEP через командную строку
Если добавление в исключения не помогает, можно временно отключить службу DEP глобально для всей операционной системы. Для этого выполним команду в консоли от имени Администратора:
bcdedit /set {current} nx AlwaysOff
После выполнения команды обязательно перезагрузим компьютер, чтобы изменения вступили в силу.
Рассмотрим структуру исходного скрипта, который используется для отправки команды на печать фискального документа. Понимание параметров инициализации поможет избежать логических ошибок при интеграции оборудования.
' Создаем объект драйвера АТОЛ 8-й версии
Set ECR = CreateObject("AddIn.FPrnM45")
' Настраиваем параметры подключения к кассовому аппарату
ECR.Model = 67 ' Указываем код модели ККТ
ECR.PortNumber = 1016 ' Номер COM-порта (или TCP-порта)
ECR.BaudRate = 18 ' Скорость обмена данными
ECR.DeviceEnabled = 1 ' Включаем устройство в драйвере
' Входим в режим регистрации чеков
ECR.Password = 30 ' Пароль администратора/кассира по умолчанию
ECR.NewDocument ' Сбрасываем буфер старого документа
ECR.Mode = 1 ' Устанавливаем режим регистрации
ECR.SetMode ' Применяем режим
' Заполняем реквизиты чека
ECR.AttrNumber = 1021
ECR.AttrValue = "Кассир 1"
ECR.WriteAttribute ' Записываем имя кассира
' Открываем чек продажи
ECR.CheckType = 1 ' Чек прихода (продажи)
ECR.CheckMode = 1 ' Печать бумажного чека разрешена
ECR.OpenCheck
' Записываем признак расчета (например, продажа товара)
ECR.AttrNumber = 1055
ECR.AttrValue = 4
ECR.WriteAttribute
' Формируем позицию в чеке
ECR.BeginItem
ECR.ItemType = 1
ECR.Name = "Тестовый товар"
ECR.Price = 20.00 ' Цена за единицу
ECR.Quantity = 1 ' Количество товара
ECR.Summ = 20.00 ' Итоговая сумма по позиции
ECR.Department = 1 ' Номер отдела
ECR.TaxTypeNumber = 6 ' Ставка НДС (например, Без НДС)
ECR.PaymentMode = 1 ' Признак способа расчета (полный расчет)
ECR.EndItem ' Завершаем добавление позиции
' Закрываем чек с типом оплаты "Электронными" (безналичный расчет)
ECR.TypeClose = 1
ECR.CloseCheck
' Отключаем устройство для освобождения порта
ECR.DeviceEnabled = 0
Важно помнить, что семейство драйверов АТОЛ 8-й версии (ДТО 8) на текущий момент официально признано устаревшим (Legacy) и больше не поддерживается производителем. Использование объекта AddIn.FPrnM45 накладывает серьезные технические ограничения: он не поддерживает новые требования законодательства, такие как маркировка товаров в системе "Честный Знак", новые версии форматов фискальных документов (ФФД 1.2) и работу со многими современными моделями ККТ.
Для стабильной работы в будущем рекомендуется рассмотреть возможность перехода на современный драйвер АТОЛ 10 (ДТО 10). При переходе на новую версию учтите следующие архитектурные особенности:
AddIn.Fptr10.ECR.Price = 20) в новой версии используется концепция передачи параметров через специализированные методы setParam и вызовы исполняющих команд. Скрипты, написанные под ДТО 8, не будут работать с ДТО 10 без полной переработки исходного кода.