Подключение торгового оборудования к типовым решениям от 1С (например, 1С:Управление торговлей или 1С:Розница) обычно не вызывает сложностей благодаря наличию встроенной Библиотеки подключаемого оборудования (БПО). Однако при работе с самописными конфигурациями на платформе 1С 8.2 или 8.3 программист часто сталкивается с необходимостью реализовать этот механизм «с нуля». Рассмотрим подробно, как организовать взаимодействие с ККТ Атол 30Ф, используя современные драйверы и методы программирования.
Приступая к разработке, мы должны выбрать один из двух основных путей. Проанализируем их преимущества и недостатки:
Разберем подробнее наиболее эффективный вариант — использование драйвера АТОЛ 10-й версии.
Для начала работы нам необходимо подключить внешнюю компоненту драйвера. В современных реалиях 10-й драйвер поставляется в виде Native-компоненты. Рассмотрим пример инициализации объекта в коде 1С:
Попытка
// Загружаем компоненту
УстановитьВнешнююКомпоненту("AddIn.Atol_KKT_10");
Драйвер = Новый ("AddIn.Atol_KKT_10");
Исключение
Сообщить("Не удалось загрузить драйвер ККТ АТОЛ 10: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
После успешного создания объекта Драйвер, необходимо установить параметры связи (порт, скорость, модель ККТ) и вызвать метод open(). Если касса подключена по USB, она часто определяется автоматически, но программно лучше явно задавать параметры.
Проанализируем самый удобный способ формирования чека в 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. Выясним, что меняется в логике программирования:
markingCode, содержащий строку DataMatrix.Для реализации этого в драйвере АТОЛ 10 предусмотрены специальные параметры LIBFPTR_PARAM_MARKING_CODE и методы проверки. Рассмотрим ситуацию: если товар маркирован, в JSON-задание добавляется тег 1162 или расширенные сведения о коде товара.
Согласно 54-ФЗ, при расчетах между организациями или ИП в чеке должны быть указаны реквизиты покупателя. Рассмотрим, как передать эти данные. В драйвере АТОЛ используются теги:
В JSON-структуре это выглядит как дополнительные поля в корне объекта задания:
"clientInfo": {
"name": "ООО 'Покупатель'",
"vatin": "7701234567"
}
Важный момент: Эти данные должны попадать именно в электронную форму чека, передаваемую в ОФД, а не просто печататься на бумаге в виде текстовых строк. Использование метода processJson гарантирует правильную передачу этих тегов, если они корректно указаны в структуре.
Выясним, как проверить работоспособность кода, не расходуя ресурс фискального накопителя (ФН) и не отправляя лишние данные в налоговую. Проанализируем возможные варианты:
printText) для проверки связи и шрифтов. Это не затрагивает фискальный блок.%AppData%\Atol\drivers10\logs) содержат исчерпывающую информацию о том, какой тег был передан неверно или по какой причине касса вернула ошибку.Для удобства дальнейшей поддержки рекомендуется создать в вашей конфигурации отдельный Общий модуль (например, РаботаСККТВызовСервера), в котором будут инкапсулированы все низкоуровневые вызовы драйвера. Рассмотрим структуру функций такого модуля:
ПодключитьКассу() — выполняет загрузку компоненты и открытие соединения.СформироватьЧек(ДанныеЧека) — принимает структуру с товарами и оплатами, формирует JSON и отправляет на печать.ОтчетБезГашения() (X-отчет) и ЗакрытьСмену() (Z-отчет) — базовые операции управления сменой.Такой подход позволит вам в будущем легко заменить драйвер или обновить логику формирования чека, не меняя код в формах документов продажи.
В заключение отметим, что подключение Атол 30Ф к самописной конфигурации 1С — задача вполне выполнимая при использовании современных инструментов ДТО 10. Отказ от сложных механизмов БПО в пользу прямой работы через JSON позволяет сделать код более прозрачным, быстрым и легким в отладке.