Рано или поздно перед каждым разработчиком и системным администратором, обслуживающим исторические конфигурации на платформе 1С 7.7 («клюшки»), встает задача обновления торгового оборудования. Драйверы Атол ДТО 8 и 9 версий давно признаны устаревшими и не поддерживаются производителем. С введением новых законодательных требований, таких как обязательная маркировка товаров («Честный Знак»), разрешительный режим на кассах (ФФД 1.2), а также появление новых ставок НДС (например, 5% и 7% для упрощенной системы налогообложения с 2025 года), старые версии драйверов окончательно теряют свою актуальность. Единственным рабочим решением становится переход на Атол ДТО 10.
В этой статье мы подробно разберем, как правильно подружить современный драйвер Атол ДТО 10 с платформой 1С 7.7, преодолеем технические ограничения совместимости, проанализируем новую философию программирования API драйвера и решим классическую проблему медленной печати чеков при работе в терминальном режиме (RDP).
Прежде чем приступать к кодингу, давайте выясним ключевые причины, почему оставаться на ДТО 8/9 больше невозможно:
---
При первой попытке подключить новую библиотеку стандартным для 1С 7.7 методом программисты неизбежно сталкиваются с проблемой. Попытка выполнить привычную команду:
ЗагрузитьВнешнююКомпоненту("addin_fptr10_x86.dll");
завершится критической ошибкой: «Отсутствует интерфейс IInitDone». Выясним причину этой ошибки. Дело в том, что библиотека ДТО 10 не проектировалась как традиционная внешняя компонента по технологии 1С 7.7. Это полноценный COM/ActiveX-объект. Следовательно, инициализировать его нужно совершенно иначе.
Разберем по шагам правильный алгоритм подключения:
addin_fptr10_x86.dll из каталога установки ДТО 10.
regsvr32 "C:\ПутьКДрайверу\addin_fptr10_x86.dll"
Попытка
Касса = СоздатьОбъект("AddIn.Fptr10");
Исключение
Предупреждение("Не удалось инициализировать драйвер Атол ДТО 10! Проверьте регистрацию DLL.");
Возврат;
КонецПопытки;
---
Если в ДТО 8/9 под каждое действие существовало свое именованное свойство или метод (например, присвоить значение свойству Драйвер.Name = "Товар", а затем вызвать метод Драйвер.Registration()), то в ДТО 10 архитектура взаимодействия изменилась кардинально. Разработчики Атол перешли на универсальную параметрическую модель работы.
Рассмотрим подробнее принцип работы нового API:
setParam().openReceipt() для открытия чека или registerPosition() для регистрации позиции товара).Посмотрим на конкретный пример регистрации позиции товара в чеке. Для выполнения этой простой операции нам потребуется передать драйверу целый стек параметров:
// Пример регистрации позиции товара в ДТО 10 для 1С 7.7
Касса.setParam(Касса.LIBFPTR_PARAM_COMMODITY_NAME, "Колбаса Докторская"); // Название товара
Касса.setParam(Касса.LIBFPTR_PARAM_PRICE, 450.00); // Цена за единицу
Касса.setParam(Касса.LIBFPTR_PARAM_QUANTITY, 1.5); // Количество (дробное)
Касса.setParam(Касса.LIBFPTR_PARAM_TAX_TYPE, Касса.LIBFPTR_TAX_NO); // Тип налога (без НДС)
// Регистрируем позицию на фискальном накопителе
Касса.registerPosition();
Как мы видим, старый код обработок обслуживания придется полностью отправить в утиль и переписать логику формирования чека буквально с нуля. Однако программисты отмечают, что новая логика работы со стеком параметров гораздо более гибкая и прозрачная, так как исключает случайное наложение старых неразобранных свойств драйвера на новые операции.
---
Очень часто кассы подключаются к локальным компьютерам пользователей, а сама база 1С 7.7 крутится на удаленном терминальном сервере. Стандартный способ проброса COM-портов через свойства RDP-подключения в ДТО 10 показывает себя крайне неэффективно:
Проанализируем современное и стабильное решение этой проблемы, которое разработчики Атол встроили непосредственно в дистрибутив ДТО 10. Это RPC-сервер (Сервер удаленного подключения ККТ).
Разберем по шагам схему его настройки:
6220).Такой подход полностью решает проблему «отваливающихся» портов, гарантирует мгновенный отклик кассы и позволяет печатать чеки со скоростью локального подключения (чек на сотни позиций вылетает за несколько секунд). Кроме того, это позволяет нескольким пользователям терминального сервера бесконфликтно использовать один физический кассовый аппарат по очереди.
---
В ДТО 10 присутствует еще один альтернативный режим работы — через локальный Web-сервер ККТ, принимающий задания на печать чеков в формате JSON. Это действительно удобно для интеграции, так как позволяет отправлять структурированные JSON-пакеты напрямую на порт веб-сервиса.
Однако здесь существует критически важное ограничение, о котором необходимо знать заранее. В современных прошивках ККТ Атол (Платформа 5.0) полноценная работа встроенного веб-сервера требует наличия платной лицензии, которую необходимо регулярно продлевать. Без этой лицензии отправка чеков через JSON-запросы будет блокироваться.
Именно поэтому для интеграции с 1С 7.7 большинство специалистов выбирают классический COM-объект в связке с RPC-сервером удаленного подключения Атол, так как данный функционал является абсолютно бесплатным и поставляется в базовом комплекте драйвера.
---
В процессе работы часто требуется получить от кассового аппарата фискальные данные пробитого чека (например, номер чека, номер ФД или ФПД) для сохранения их в информационной базе 1С 7.7. В ДТО 10 для этих целей используются два различных метода, которые разработчики часто путают:
queryData() — используется для получения общих технологических параметров ККТ и драйвера.fnQueryData() — предназначен исключительно для прямых низкоуровневых запросов к фискальному накопителю (ФН).Посмотрим на пример кода получения номера фискального документа (номера чека) после успешного закрытия чека:
// Устанавливаем тип запроса для получения информации о последнем документе
Касса.setParam(Касса.LIBFPTR_PARAM_DATA_TYPE, Касса.LIBFPTR_DT_STATUS);
Касса.queryData();
// Извлекаем номер документа из полученного стека параметров
НомерДокумента = Касса.getParamInt(Касса.LIBFPTR_PARAM_DOCUMENT_NUMBER);
Сообщить("Чек успешно пробит. Номер документа: " + НомерДокумента);
---
Переход с устаревших ДТО 8/9 на ДТО 10 в среде 1С 7.7 — задача вполне решаемая и необходимая. Несмотря на то что логику печати чеков в обработках обслуживания придется полностью переписать из-за перехода на параметрическое API, разработчик получает современное, быстрое и отказоустойчивое решение. Использование 32-разрядного COM-объекта в связке с сетевым RPC-сервером Атол обеспечивает великолепную скорость печати даже в сложных терминальных средах RDP, позволяя вашей исторической системе 1С 7.7 полностью соответствовать всем актуальным требованиям современного законодательства.