Как реализовать пробитие чеков на АТОЛ (платформа 5) с прошивкой 5.15.102 и выше в 2025 году?

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

С наступлением 2025 года и выходом обновлений прошивок для касс АТОЛ (в частности, версии 5.15.102 на Платформе 5.0), многие разработчики столкнулись с проблемами при прямой интеграции 1С с драйвером АТОЛ 10.x. Старые алгоритмы, работавшие годами, начинают выдавать ошибки (например, 0x407), так как ККТ теперь строго контролирует наличие определенных тегов и последовательность операций, особенно в части маркировки и внедренного разрешительного режима на кассах.

В этой статье мы подробно рассмотрим, как адаптировать код на языке 1С для работы с актуальными версиями драйвера и прошивок. Мы разберем этапы от инициализации объекта до закрытия чека с учетом новых требований ФФД.

Инициализация драйвера и открытие соединения

Первым делом проанализируем процесс создания объекта драйвера. Для работы с АТОЛ 10-й версии мы используем COM-объект AddIn.Fptr10. Важно правильно настроить параметры связи перед началом любых операций. Рассмотрим пример инициализации:


// Создаем объект драйвера
FR = Новый COMОбъект("AddIn.Fptr10");

// Устанавливаем параметры связи (например, через USB)
FR.setSingleSetting(FR.LIBFPTR_SETTING_PORT, Строка(FR.LIBFPTR_PORT_USB));
FR.applySingleSettings();

// Открываем соединение с кассой
FR.open();

Если Не FR.isOpened() Тогда
    Сообщить("Ошибка: Касса не подключена!");
    Возврат;
КонецЕсли;

Обратим внимание, что метод applySingleSettings() обязателен для применения установленных настроек порта. После открытия соединения необходимо авторизовать кассира. Согласно 54-ФЗ, для наемных сотрудников крайне желательно передавать не только ФИО, но и ИНН кассира.

Регистрация обычного (немаркированного) товара

Разберем ситуацию пробития простого товара. В новых прошивках касса может требовать явного указания системы налогообложения и типа предмета расчета. Выясним, какие параметры являются критически важными, учитывая в том числе поддержку новых ставок НДС 5%, 7%, 22% в актуальных конфигурациях.


// Авторизация оператора (кассира)
FR.setParam(1021, "Иванов Иван Иванович"); // Тег 1021 (ФИО кассира)
// FR.setParam(1203, "123456789012"); // Тег 1203 (ИНН кассира) - рекомендуется
FR.operatorLogin();

// Открытие чека продажи
FR.setParam(FR.LIBFPTR_PARAM_RECEIPT_TYPE, FR.LIBFPTR_RT_SELL);
FR.openReceipt();

// Формирование позиции чека
FR.setParam(FR.LIBFPTR_PARAM_COMMODITY_NAME, "Товар тестовый");
FR.setParam(FR.LIBFPTR_PARAM_PRICE, 100.00);
FR.setParam(FR.LIBFPTR_PARAM_QUANTITY, 1);
FR.setParam(FR.LIBFPTR_PARAM_TAX_TYPE, FR.LIBFPTR_TAX_NO); // Без НДС

// ВАЖНО для новых прошивок: указываем признак предмета расчета (Тег 1212)
// LIBFPTR_ST_COMMODITY = 1 (Товар)
FR.setParam(FR.LIBFPTR_PARAM_COMMODITY_SUBJECT_TYPE, 1);

// Регистрация позиции в чеке
FR.registration();

В приведенном коде мы используем метод registration(). Если касса возвращает ошибку 0x407, это часто означает, что прошивка ожидает дополнительные реквизиты, такие как LIBFPTR_PARAM_MEASUREMENT_UNIT (Мера количества, Тег 2108), которая стала обязательной в некоторых сценариях ФФД 1.05 и 1.2.

Оплата и закрытие чека

После регистрации всех позиций необходимо провести оплату и финализировать документ. Проанализируем пример закрытия чека с проверкой результата:


// Указываем сумму и тип оплаты
FR.setParam(FR.LIBFPTR_PARAM_PAYMENT_SUM, 100.00);
FR.setParam(FR.LIBFPTR_PARAM_PAYMENT_TYPE, FR.LIBFPTR_PT_CASH); // Наличные
FR.payment();

// Закрываем чек
FR.closeReceipt();

// Проверяем, закрылся ли документ фактически
Ответ = FR.checkDocumentClosed();
Если Ответ <> 0 Тогда
    Сообщить("Ошибка при закрытии чека! Связь потеряна или возникла ошибка ФН.");
КонецЕсли;

ЧекЗакрыт = FR.getParamBool(FR.LIBFPTR_PARAM_DOCUMENT_CLOSED);
Если ЧекЗакрыт Тогда
    Сообщить("Чек успешно пробит. Номер: " + FR.getParamInt(FR.LIBFPTR_PARAM_RECEIPT_NUMBER));
КонецЕсли;

FR.close(); // Закрываем соединение

Особенности маркировки и ФФД 1.2 в 2025 году

Для работы с маркированным товаром на новых прошивках (ФФД 1.2) процедура существенно усложняется из-за внедрения разрешительного режима. Теперь нельзя просто передать строку кода маркировки в позицию чека. Процесс должен включать предварительную проверку кода в системе "Честный ЗНАК" через фискальный накопитель. В некоторых случаях может потребоваться внешняя обработка для запроса информации кодов Честного знака для проверки КИ до момента пробития.

Рассмотрим алгоритм действий для маркировки:

  1. Запрос на проверку КМ: Используем метод beginMarkingCodeCheck(). Передаем полный код маркировки.
  2. Ожидание результата: В цикле вызываем getMarkingCodeCheckStatus(), пока статус не станет завершенным. Для мобильных рабочих мест можно также контролировать статус марок через Android-устройство с помощью специализированного ПО.
  3. Подтверждение реализации: Вызываем acceptMarkingCode() для фиксации кода в памяти ККТ.
  4. Регистрация позиции: Только после этих шагов вызываем registration(). Код маркировки при этом подтянется автоматически из результатов проверки.

Для пользователей, которые ищут замену для Frontol Mark Unit в условиях новых лицензионных ограничений, крайне важно реализовать данный алгоритм корректно непосредственно в 1С. Для ФФД 1.05 (если ваша организация еще имеет право его использовать) маркировка передается через тег 1162, но прошивка 5.15.102 все равно будет требовать корректного заполнения COMMODITY_SUBJECT_TYPE со значением "Маркированный товар".

Типичные ошибки и способы их решения

Рассмотрим основные причины сбоев на свежих прошивках:

1. Ошибка 0x407 (Не поддерживается в данной версии): Чаще всего возникает, если вы пытаетесь пробить маркированный товар старым способом на кассе, переведенной на ФФД 1.2. Также проверьте наличие тега 2108 (единица измерения).

2. Отсутствие связи после обновления: Прошивка 5.15.x может изменить настройки каналов связи. Убедитесь, что в драйвере выбран правильный интерфейс и актуальная версия Fptr10.dll (рекомендуется не ниже 10.10.7).

3. Ошибки разрешительного режима: Если касса не может связаться с сервером ОИСМ, чек может быть заблокирован.

Подводя итог, можно сказать, что современная работа с АТОЛ через 10-й драйвер требует более строгого подхода к заполнению реквизитов каждой позиции. Мы рекомендуем переходить на формирование чека через processJson(), если ваша учетная система это позволяет, так как это наиболее стабильный способ передачи сложных структур данных в последних версиях ПО АТОЛ.

← На главную