Почему метод Registration() в драйвере АТОЛ возвращает ошибку -12 и как её исправить?

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

При интеграции кассового аппарата АТОЛ FPrint-22ПТК (или АТОЛ 22Ф) с самописной конфигурацией 1С через COM-объект драйвера разработчики нередко сталкиваются с ошибкой: (-12) Не поддерживается в данной версии оборудования при вызове метода Registration(). Разберем по шагам, почему возникает эта ошибка и какие действия необходимо предпринять для корректной регистрации позиций и печати чека.

Причина 1. Неправильный выбор модели и протокола обмена в драйвере

Проанализируем базовую причину несовместимости команд. Аппараты линейки FPrint-22ПТК выпускались как в старых версиях с ЭКЛЗ (протокол 2.4), так и в обновленных версиях для онлайн-передачи данных по 54-ФЗ (протокол 3.0). Если в коде или в утилите настройки драйвера выбрана устаревшая модель (например, АТОЛ: FPrint-22ПТК / К / ЕНВД), драйвер пытается отправить команду старого формата, которую прошивка новой онлайн-кассы не поддерживает, возвращая код -12.

Для исправления ситуации выполним следующие настройки:

  1. Переключим аппарат на работу по протоколу 3.0.
  2. В свойствах драйвера выберем модель АТОЛ 22Ф / FPrint-22ПТК.
  3. Если модель задается программно через COM-объект ДТО 8 (AddIn.FprnM45), установим числовой код модели, равный 63 (соответствует АТОЛ 22Ф / FPrint-22ПТК по протоколу 3.0), перед открытием соединения:

ECR.Model = 63;
ECR.DeviceEnabled = Истина;

Причина 2. Нарушение последовательности команд формирования чека

Посмотрим на типовую ошибку в логике работы с драйвером. В старых версиях оборудования допускалась прямая регистрация строк без явного открытия фискального документа. В онлайн-ККТ вызов метода Registration() без предварительного открытия чека заблокирован и приводит к ошибке -12.

Рассмотрим правильный порядок вызова методов при пробитии чека продажи:

  1. Вход в режим регистрации: передаем пароль кассира/администратора и переводим устройство в режим продажи (Mode = 1).
  2. Открытие чека: задаем тип чека (CheckType = 1 для чека прихода/продажи) и вызываем OpenCheck().
  3. Регистрация позиций: передаем наименование, цену, количество, отдел, а также обязательную ставку налога (TaxNumber или TaxTypeNumber) и вызываем Registration().
  4. Оплата и закрытие чека: передаем сумму оплаты и закрываем документ методом CloseCheck().

Посмотрим на пример корректного кода для ДТО 8:


// 1. Вход в режим регистрации
ECR.Password = 30;
ECR.Mode = 1;
Если ECR.SetMode() <> 0 Тогда
    ВызватьИсключение "Ошибка переключения режима: " + ECR.ResultDescription;
КонецЕсли;

// 2. Открытие фискального чека продажи
ECR.CheckType = 1; // 1 - Приход (продажа)
Если ECR.OpenCheck() <> 0 Тогда
    ВызватьИсключение "Ошибка открытия чека: " + ECR.ResultDescription;
КонецЕсли;

// 3. Регистрация товарной позиции
ECR.Name = "Молоко";
ECR.Price = 10.45;
ECR.Quantity = 1;
ECR.Department = 1;
ECR.TaxTypeNumber = 4; // Ставка НДС (например, Без НДС)

Если ECR.Registration() <> 0 Тогда
    ВызватьИсключение "Ошибка регистрации позиции: " + ECR.ResultDescription;
КонецЕсли;

// 4. Закрытие чека (оплата наличными)
ECR.TypeClose = 0; // Наличные
ECR.Summ = 10.45;
Если ECR.Delivery() <> 0 Тогда
    ВызватьИсключение "Ошибка оплаты: " + ECR.ResultDescription;
КонецЕсли;

Если ECR.CloseCheck() <> 0 Тогда
    ВызватьИсключение "Ошибка закрытия чека: " + ECR.ResultDescription;
КонецЕсли;

Причина 3. Попытка работы без фискального накопителя (в режиме АСПД)

Выясним, почему ошибка -12 может возникать на нефискализированном аппарате. В онлайн-версиях ККТ стандартная прошивка полностью блокирует выполнение фискальных методов (включая Registration()), если в аппарате отсутствует или не активирован фискальный накопитель (ФН).

Если требуется использовать ККТ в качестве принтера нефискальных чеков (АСПД/ЕНВД):

  1. Перепрошивка: на аппарат должна быть установлена сервисная прошивка для ЕНВД/АСПД, разрешающая работу команд печати без ФН.
  2. Альтернативный вывод: если прошивка стандартная фискальная, печать нефискального чека реализуется через команды текстовой печати (свойство Caption и метод PrintString()) без использования методов Registration() и OpenCheck().

Причина 4. Зависание ККТ в дополнительном режиме

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

Для восстановления работоспособности:

  1. Откроем утилиту «Тест драйвера ККМ».
  2. Попробуем выполнить отмену чека через метод CancelCheck().
  3. Если аппарат не выходит из блокировки, в поле прямых команд нижнего уровня отправим сервисную команду EC 02 и перезагрузим устройство.

Рекомендации по интеграции современных версий драйверов

Линейка драйверов DTO 8 является устаревшей. Для стабильной работы современных касс АТОЛ рекомендуется:

  1. Перейти на ДТО 10: использовать современный COM-объект AddIn.Fptr10, где логика унифицирована через методы openReceipt(), registration(), closeReceipt().
  2. Использовать БПО: встроить в конфигурацию типовую подсистему «1С:Библиотека подключаемого оборудования», которая автоматически учитывает все требования форматов фискальных данных (ФФД 1.05 / 1.2) и исключает низкоуровневые ошибки протоколов.
← На главную