Как правильно получить номер чека и задать признак предмета расчета при работе с АТОЛ ДТО 10 в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке интеграций с кассовой техникой АТОЛ через драйвер AddIn.Fptr10 разработчики часто сталкиваются с тем, что стандартные методы возвращают «нулевые» или неверные значения. Давайте разберем, почему это происходит и как правильно получать данные из фискального накопителя.

Решение проблемы получения номера чека

Основная ошибка заключается в попытке получить номер чека через запрос статуса ККТ. Метод LIBFPTR_DT_STATUS возвращает номер последнего документа, который был сформирован устройством (это может быть Z-отчет или технический документ), а не номер конкретного пробитого чека. Чтобы получить именно номер чека, зафиксированного в ФН, необходимо использовать функционал работы с фискальным накопителем.

Для корректного получения номера последнего фискального документа выполним следующие шаги:

  1. Установим тип данных для запроса как LIBFPTR_FNDT_LAST_DOCUMENT.
  2. Вызовем метод fnQueryData(), который опрашивает именно фискальный накопитель.
  3. Считаем номер документа через параметр LIBFPTR_PARAM_DOCUMENT_NUMBER.

Пример кода для реализации этой задачи:


Атол10.setParam(Атол10.LIBFPTR_PARAM_FN_DATA_TYPE, Атол10.LIBFPTR_FNDT_LAST_DOCUMENT);
Атол10.fnQueryData();
НомерЧека = Атол10.getParamInt(Атол10.LIBFPTR_PARAM_DOCUMENT_NUMBER);

Таким образом, мы гарантированно получаем номер фискального документа, который был присвоен последнему успешно пробитому чеку.

Управление признаком предмета расчета (Товар или Услуга)

Часто возникает необходимость передать в чек признак предмета расчета, чтобы корректно отразить операцию в соответствии с требованиями ФНС. В современных форматах фискальных документов (ФФД) за это отвечает тег 1212.

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

Для указания того, что позиция является «Товаром» или «Услугой», используем метод setParam:


// 1 - Товар
// 4 - Услуга
fptr.setParam(1212, 1); 
// Далее следуют команды регистрации позиции и закрытия чека

Обратите внимание, что значения тега 1212 строго регламентированы приказом ФНС. Основные значения для работы:

Использование этого тега обязательно для соблюдения законодательства. Рекомендуем всегда проверять актуальные значения тегов в документации к форматам фискальных документов, так как они могут меняться при обновлении версий ФФД.

Почему использование JSON-интерфейса может быть предпочтительнее?

В ходе анализа работы с драйвером мы выяснили, что работа через COM-объект AddIn.Fptr10 имеет свои сложности: необходимость регистрации библиотек, управление памятью и нюансы работы в 32/64-битных версиях платформы 1С.

Если проект позволяет, рассмотрите использование «АТОЛ: Веб-сервер». Взаимодействие с кассой через HTTP-запросы в формате JSON имеет ряд преимуществ:

  1. Отсутствие зависимости от разрядности установленных драйверов в системе.
  2. Удобство отладки: вы можете проверить запрос в любом REST-клиенте (например, Postman).
  3. Структура ответов от ККТ приходит в виде четкого JSON-объекта, где номер фискального документа и другие реквизиты доступны сразу в теле ответа, что исключает путаницу с методами queryData и fnQueryData.

При работе через JSON API вам не нужно будет беспокоиться о состоянии объекта драйвера — вы просто отправляете команду и получаете структурированный ответ с номером документа, что значительно упрощает разработку и поддержку интеграции.

Надеемся, эти советы помогут вам быстрее справиться с настройкой кассового оборудования и избежать распространенных ошибок при интеграции 1С с ККТ АТОЛ!

← На главную