При необходимости перевести сильно доработанную конфигурацию на обычных формах (например, «Управление производственным предприятием» ред. 1.3 древних релизов или «Управление торговлей» ред. 10.3) на работу с онлайн-кассами по требованиям 54-ФЗ разработчики сталкиваются с серьезной проблемой. Штатная поддержка онлайн-ККТ появилась в типовых конфигурациях значительно позже (в УПП — начиная с релиза 1.3.87). Типовое обновление базы с множеством кастомных доработок часто экономически нецелесообразно или технически затруднено.
Разберем основные варианты решения этой задачи, выясним, почему прямая интеграция современной Библиотеки подключаемого оборудования (БПО) практически невозможна, и рассмотрим практические способы настройки взаимодействия с фискальными регистраторами.
Прежде чем приступать к доработке, проанализируем базовые препятствия:
Самый распространенный и наименее инвазивный путь — адаптация внешней обработки обслуживания торгового оборудования (например, на базе драйверов Штрих-М или АТОЛ). Рассмотрим, какие изменения необходимо внести в обработку обслуживания и конфигурацию.
В старых версиях механизмы печати чека опирались на пошаговые команды: открытие чека, последовательная регистрация каждой строки с товаром и закрытие чека. В протоколах онлайн-ККТ логика изменилась: формируется единый пакет фискализации (или единый вызов печати чека со списком позиций).
Для корректной работы типовых модулей документов без их масштабного переписывания применим создание функций-заглушек в обработке обслуживания:
ОткрытьЧек() и ЗакрытьЧек(). Чтобы не ломать цепочку вызовов, в обработке обслуживания создаем пустые методы-заглушки, возвращающие успешный статус выполнения:
Функция ОткрытьЧек(ОбъектДрайвера, Параметры) Экспорт
// Заглушка для обратной совместимости со старыми модулями
Возврат Истина;
КонецФункции
Функция ЗакрытьЧек(ОбъектДрайвера, Параметры) Экспорт
// Заглушка для обратной совместимости
Возврат Истина;
КонецФункции
НапечататьСтроки() либо перенаправляют вызов фискализации на метод ПечатьЧека() с передачей массива товарных позиций.При совместной работе онлайн-ККТ и эквайринга в старых релизах возникает конфликт интерфейсов. Модули эквайринговых терминалов исторически вызывают ОткрытьЧек() непосредственно у фискального регистратора. Кроме того, в коде форм документов часто заложена жесткая проверка типа подключенного оборудования: система ищет подключенный фискальный регистратор (ФР), а новая ККТ регистрируется как фискальное устройство (ФУ).
Чтобы обойти эту проблему, выполним следующие шаги:
ОткрытьЧек(), даже если он не выполняет физических команд на аппарате. В противном случае модуль эквайринга упадет с ошибкой вызова несуществующего метода.Если подсистема торгового оборудования в базе сильно разрушена или переписана, проще всего отказаться от типового механизма ТО и написать внешнюю печатную форму или обработку, работающую с драйвером напрямую через COM-соединение:
Драйвер = Новый COMОбъект("AddIn.Fptr10"); // Пример для АТОЛ ДТО 10
Драйвер.setSingleSetting(Драйвер.LIBFPTR_SETTING_MODEL, Строка(Драйвер.LIBFPTR_MODEL_ATOL_AUTO));
Драйвер.setSingleSetting(Драйвер.LIBFPTR_SETTING_PORT, Строка(Драйвер.LIBFPTR_PORT_TCPIP));
Драйвер.setSingleSetting(Драйвер.LIBFPTR_SETTING_IPADDRESS, "192.168.1.100");
Драйвер.setSingleSetting(Драйвер.LIBFPTR_SETTING_IPPORT, "5555");
Драйвер.applySingleSettings();
Если Драйвер.open() = 0 Тогда
// Формируем чек через прямой API драйвера
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_RECEIPT_TYPE, Драйвер.LIBFPTR_RT_SELL);
Драйвер.openReceipt();
// Регистрация позиции
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_COMMODITY_NAME, "Товар 1");
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PRICE, 100.00);
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_QUANTITY, 1);
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_TAX_TYPE, Драйвер.LIBFPTR_TAX_VAT20);
Драйвер.registrationPosition();
// Закрытие чека
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PAYMENT_TYPE, Драйвер.LIBFPTR_PT_CASH);
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_PAYMENT_SUM, 100.00);
Драйвер.receiptCalculations();
Драйвер.closeReceipt();
Драйвер.close();
КонецЕсли;
Такой подход полностью изолирует логику фискализации от конфигурации. Чек можно пробивать нажатием одной кнопки во внешней печатной форме документа.
Если база работает на платформе 8.2 без поддержки JSON, а на рабочих местах используются терминальные сессии (RDP), оптимальным архитектурным решением является кассовый сервер-посредник:
HTTPСоединение) с данными о сумме, товарах и ставках НДС.При запуске оборудования обратим внимание на аппаратные особенности: