Как исправить ошибку инициализации COM-объекта AddIn.FPrnM45 при печати чеков через драйвер АТОЛ

Программист IT и автоматизация бизнеса
← На главную

При интеграции торгового оборудования АТОЛ с программными продуктами или внешними скриптами разработчики часто сталкиваются со следующей проблемой: при попытке создания объекта драйвера ККМ система выдает ошибку о том, что класс не зарегистрирован или объект не может быть создан. Особенно часто это происходит при работе со скриптами автоматизации на языке VBScript или при запуске кода из внешних приложений.

В этой статье мы подробно разберем, почему возникает данная неполадка при использовании объекта AddIn.FPrnM45, как разрядность операционной системы влияет на работу торгового оборудования, и что делать для успешного решения этой проблемы.

Выясняем причину: конфликт разрядности (32-bit vs 64-bit)

Основная причина, по которой операционная система Windows отказывается создавать объект AddIn.FPrnM45, кроется в несовпадении разрядности выполняемого процесса и самого COM-объекта драйвера.

Разберем эту ситуацию по шагам:

  1. Компонента драйвера АТОЛ 8-й версии (библиотека FPrnM1C.dll или FPrnM1C82_54FZ.dll) является строго 32-битной (x86).
  2. В 64-разрядных версиях операционной системы Windows по умолчанию все сценарии (файлы с расширением .vbs или .js) запускаются через 64-битный сервер сценариев wscript.exe (или cscript.exe), расположенный по пути C:\Windows\System32\.
  3. По правилам архитектуры Windows, 64-битный процесс физически не может загрузить в свое адресное пространство 32-битную динамическую библиотеку (внутрипроцессный COM-сервер). В результате система выдает ошибку инициализации, несмотря на то, что драйвер физически установлен на компьютере, а соответствующие ветки реестра заполнены.

Аналогичная проблема возникает и при использовании платформы "1С:Предприятие": если вы запускаете код в 64-битном клиенте 1С, попытка инициализировать 32-битную компоненту напрямую также завершится ошибкой.

Решение 1: Принудительный запуск через 32-битный интерпретатор

Чтобы обойти ограничение разрядности при работе со скриптами автоматизации, нам необходимо принудительно заставить операционную систему выполнять сценарий в 32-битном окружении. Для этого в Windows предусмотрен специальный каталог SysWOW64, где хранятся 32-битные системные утилиты.

Рассмотрим, как правильно запустить скрипт печати чека. Вместо простого двойного клика по файлу скрипта, запустим его через командную строку следующим образом:

Пример команды для запуска:

C:\Windows\SysWOW64\wscript.exe "C:\Путь_к_вашему_скрипту\script.vbs"

Использование утилиты wscript.exe из папки SysWOW64 инициализирует 32-битный процесс, который без проблем обнаружит в реестре и загрузит 32-битную библиотеку АТОЛ AddIn.FPrnM45.

Решение 2: Ручная регистрация библиотеки в системе

Если запуск через правильный интерпретатор по-прежнему выдает ошибку, велика вероятность, что библиотека драйвера не зарегистрирована в реестре операционной системы должным образом. Мы можем выполнить регистрацию вручную.

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

  1. Откроем командную строку (cmd) обязательно с правами Администратора.
  2. Перейдем к утилите регистрации, используя путь для 32-битных приложений, и укажем точный путь к файлу драйвера. По умолчанию файлы драйверов АТОЛ 8-й версии устанавливаются в каталог Program Files (x86).
  3. Выполним следующую команду:

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"

После успешного выполнения вы увидите системное сообщение о том, что библиотека успешно зарегистрирована.

Решение 3: Настройка предотвращения выполнения данных (DEP)

После того как проблема с разрядностью и регистрацией COM-объекта решена, разработчики часто сталкиваются со следующей проблемой: скрипт или программа "1С:Предприятие" аварийно завершает работу без видимых причин в момент обращения к методам драйвера ККМ.

Выясним причину этого поведения. Устаревшие версии драйверов АТОЛ (в частности, ДТО 8) используют механизмы управления памятью, которые современные системы безопасности Windows расценивают как потенциальную угрозу. В результате срабатывает служба DEP (Data Execution Prevention / Предотвращение выполнения данных), которая мгновенно закрывает вызвавший ошибку процесс.

Для решения этой проблемы выполним одну из следующих настроек:

Вариант А. Добавление программы в исключения DEP

  1. Откроем Свойства системы (комбинация клавиш Win + Break или через Панель управления).
  2. Перейдем в раздел Дополнительные параметры системы.
  3. На вкладке "Дополнительно" в разделе "Быстродействие" нажмем кнопку Параметры.
  4. Откроем вкладку Предотвращение выполнения данных.
  5. Выберем режим "Включить 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

Перспективы: переход на современный драйвер АТОЛ 10

Важно помнить, что семейство драйверов АТОЛ 8-й версии (ДТО 8) на текущий момент официально признано устаревшим (Legacy) и больше не поддерживается производителем. Использование объекта AddIn.FPrnM45 накладывает серьезные технические ограничения: он не поддерживает новые требования законодательства, такие как маркировка товаров в системе "Честный Знак", новые версии форматов фискальных документов (ФФД 1.2) и работу со многими современными моделями ККТ.

Для стабильной работы в будущем рекомендуется рассмотреть возможность перехода на современный драйвер АТОЛ 10 (ДТО 10). При переходе на новую версию учтите следующие архитектурные особенности:

← На главную