Как подключить кассовый аппарат Атол 30Ф к самописной конфигурации 1С?

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

Подключение торгового оборудования к типовым решениям от 1С (например, 1С:Управление торговлей или 1С:Розница) обычно не вызывает сложностей благодаря наличию встроенной Библиотеки подключаемого оборудования (БПО). Однако при работе с самописными конфигурациями на платформе 1С 8.2 или 8.3 программист часто сталкивается с необходимостью реализовать этот механизм «с нуля». Рассмотрим подробно, как организовать взаимодействие с ККТ Атол 30Ф, используя современные драйверы и методы программирования.

Выбор метода интеграции: ДТО 10 или БПО?

Приступая к разработке, мы должны выбрать один из двух основных путей. Проанализируем их преимущества и недостатки:

  1. Использование Библиотеки подключаемого оборудования (БПО): Вы можете попытаться «вырезать» модули БПО из типовой конфигурации и внедрить их в свою. Это удобно тем, что поддержка новых моделей касс будет происходить через обновление драйверов внутри БПО. Однако для самописной конфигурации 8.2 это может стать избыточным и сложным процессом из-за обилия связей в коде типовых решений.
  2. Прямая работа через Драйвер ККТ (ДТО 10): Это более «чистый» путь для самописной системы. Мы используем объектную модель драйвера напрямую. Для современных касс (Атол 30Ф) крайне рекомендуется использовать именно 10-ю версию драйвера (DTO 10), так как она наиболее стабильна и поддерживает все актуальные требования ФФД 1.05 и 1.2.

Разберем подробнее наиболее эффективный вариант — использование драйвера АТОЛ 10-й версии.

Инициализация драйвера в коде 1С

Для начала работы нам необходимо подключить внешнюю компоненту драйвера. В современных реалиях 10-й драйвер поставляется в виде Native-компоненты. Рассмотрим пример инициализации объекта в коде 1С:


Попытка
    // Загружаем компоненту
    УстановитьВнешнююКомпоненту("AddIn.Atol_KKT_10");
    Драйвер = Новый ("AddIn.Atol_KKT_10");
Исключение
    Сообщить("Не удалось загрузить драйвер ККТ АТОЛ 10: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

После успешного создания объекта Драйвер, необходимо установить параметры связи (порт, скорость, модель ККТ) и вызвать метод open(). Если касса подключена по USB, она часто определяется автоматически, но программно лучше явно задавать параметры.

Работа через JSON-задания: современный стандарт

Проанализируем самый удобный способ формирования чека в 10-й версии драйвера — использование JSON-структур. В старых версиях (ДТО 8 или 9) программисту приходилось вызывать методы для каждой строки чека (LIBFPTR_PARAM_QUANTITY, LIBFPTR_PARAM_PRICE и т.д.). В 10-ке мы можем сформировать одну текстовую строку в формате JSON, которая описывает весь документ, и передать её методу processJson.

Посмотрим на пример структуры простейшего чека продажи:


{
  "type": "sell",
  "taxationType": "osn",
  "ignoreNonFiscalPrint": true,
  "items": [
    {
      "type": "position",
      "name": "Товар тестовый",
      "price": 100.0,
      "quantity": 1,
      "amount": 100.0,
      "paymentMethod": "fullPayment",
      "paymentObject": "commodity",
      "tax": { "type": "vat20" }
    }
  ],
  "payments": [
    { "type": "cash", "sum": 100.0 }
  ],
  "total": 100.0
}

В 1С формирование такого задания реализуется через работу со структурами и массивами с последующим преобразованием в JSON:


ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураЧека);
СтрокаJSON = ЗаписьJSON.Закрыть();

Драйвер.setParam(Драйвер.LIBFPTR_PARAM_JSON_DATA, СтрокаJSON);
Драйвер.processJson();

Требования ФФД 1.2 и работа с маркировкой

Если вы планируете продавать товары, подлежащие обязательной маркировке (например, обувь, одежду или парфюмерию), необходимо учитывать требования ФФД 1.2. Выясним, что меняется в логике программирования:

Для реализации этого в драйвере АТОЛ 10 предусмотрены специальные параметры LIBFPTR_PARAM_MARKING_CODE и методы проверки. Рассмотрим ситуацию: если товар маркирован, в JSON-задание добавляется тег 1162 или расширенные сведения о коде товара.

Реквизиты покупателя (ИНН и наименование) для B2B расчетов

Согласно 54-ФЗ, при расчетах между организациями или ИП в чеке должны быть указаны реквизиты покупателя. Рассмотрим, как передать эти данные. В драйвере АТОЛ используются теги:

В JSON-структуре это выглядит как дополнительные поля в корне объекта задания:


"clientInfo": {
    "name": "ООО 'Покупатель'",
    "vatin": "7701234567"
}

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

Тестирование и отладка

Выясним, как проверить работоспособность кода, не расходуя ресурс фискального накопителя (ФН) и не отправляя лишние данные в налоговую. Проанализируем возможные варианты:

  1. Режим «Нефискальная печать»: Используйте методы печати текста (printText) для проверки связи и шрифтов. Это не затрагивает фискальный блок.
  2. Использование МГМ (Массогабаритный макет): Если есть возможность, используйте тестовый накопитель. Это позволяет проводить полные циклы продажи, включая закрытие смен, без последствий.
  3. Логирование: Обязательно включите ведение логов в настройках драйвера. Лог-файлы АТОЛ (обычно находятся в %AppData%\Atol\drivers10\logs) содержат исчерпывающую информацию о том, какой тег был передан неверно или по какой причине касса вернула ошибку.

Рекомендации по реализации в 1С

Для удобства дальнейшей поддержки рекомендуется создать в вашей конфигурации отдельный Общий модуль (например, РаботаСККТВызовСервера), в котором будут инкапсулированы все низкоуровневые вызовы драйвера. Рассмотрим структуру функций такого модуля:

Такой подход позволит вам в будущем легко заменить драйвер или обновить логику формирования чека, не меняя код в формах документов продажи.

В заключение отметим, что подключение Атол 30Ф к самописной конфигурации 1С — задача вполне выполнимая при использовании современных инструментов ДТО 10. Отказ от сложных механизмов БПО в пользу прямой работы через JSON позволяет сделать код более прозрачным, быстрым и легким в отладке.

← На главную