Как подключить онлайн-кассу (ККТ 54-ФЗ) к старой нетиповой конфигурации 1С:Розница 2.1?

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

Рассмотрим распространенную и весьма болезненную для многих розничных сетей проблему: интеграцию онлайн-кассы, соответствующей требованиям 54-ФЗ, с устаревшей и сильно доработанной конфигурацией 1С:Розница 2.1 (например, релиза 2.1.8.14 выпуска 2015 года). Ситуация часто осложняется тем, что в системе развернуты и активно функционируют нетиповые механизмы обмена в распределенной информационной базе (РИБ) и обмены с 1С:Управление торговлей. Прямое обновление конфигурации до актуальных версий (например, до линейки 2.3 или 3.0) грозит полной потерей кастомизации, длительным простоем магазинов и колоссальными затратами на программирование. Выясним, как решить этот вопрос с минимальными рисками и финансовыми вложениями.

Почему штатные механизмы Розницы 2.1 не будут работать?

Проанализируем техническую сторону вопроса. В релизах 2015 года используется устаревшая версия встроенной подсистемы БПО (Библиотека подключаемого оборудования). На тот момент законодательство не требовало онлайн-передачи чеков в ОФД, работы с маркировкой товаров в системе «Честный ЗНАК» и поддержки современных форматов фискальных данных (ФФД 1.05 и ФФД 1.2).

Попытка подключить современную онлайн-кассу (например, АТОЛ 25Ф или ШТРИХ-М-01Ф) через старый встроенный драйвер приведет к ряду критических ошибок:

  1. Отсутствие передачи обязательных тегов (например, тег 2108 — мера количества предмета расчета, или тегов признака способа расчета);
  2. Невозможность работы с кодами маркировки при продаже табака, обуви или одежды;
  3. Ошибки связи с ОФД непосредственно из интерфейса рабочего места кассира (РМК).

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

Вариант 1. Использование сторонних внешних обработок обслуживания

Это наиболее практичный и малозатратный путь для систем с высокой степенью кастомизации. Вместо того чтобы переписывать всю конфигурацию или обновлять БПО (что крайне трудоемко и может нарушить логику обменов), мы можем внедрить специализированную внешнюю обработку обслуживания ККТ.

Разберем этот процесс по шагам:

  1. Поиск или разработка обработки: Нам необходима внешняя обработка, которая полностью заменяет собой стандартные вызовы БПО. Такие обработки обращаются напрямую к современным API драйверов производителей касс (например, к драйверу АТОЛ ДТО 10.х или Штрих-М 5.х), минуя устаревшие механизмы платформы.
  2. Интеграция обработки в конфигурацию: В простейшем случае обработка подключается через справочник дополнительных обработок. Если конфигурация перепилена, программист может напрямую прописать её вызовы в коде модуля ПодключаемоеОборудованиеРТ.
  3. Настройка автоподстановки обязательных реквизитов: Поскольку старая конфигурация не хранит новые реквизиты (например, меру штучности или коды маркировки в нужном формате), внешняя обработка может «на лету» дополнять XML-пакет чека нужными дефолтными значениями (например, устанавливать тег 2108 в значение «шт.» при формировании товарной позиции).

Посмотрим на пример кода, реализующий прямую инициализацию драйвера АТОЛ 10-й версии в обход стандартной БПО:


// Пример инициализации драйвера нового поколения АТОЛ ДТО 10 в обход БПО
Попытка
    ДрайверККТ = Новый COMОбъект("Atol.AtolDeviceSingle54");
    ДрайверККТ.setSingleSetting("Model", "67"); // Код модели кассы
    ДрайверККТ.setSingleSetting("Port", "3");   // Способ подключения (USB/COM)
    ДрайверККТ.applySingleSettings();
    ДрайверККТ.open();
    
    Если ДрайверККТ.isOpened() Тогда
        Сообщить("Связь с ККТ успешно установлена.");
    Иначе
        ВызватьИсключение "Не удалось открыть порт ККТ!";
    КонецЕсли;
Исключение
    Сообщить("Ошибка инициализации драйвера: " + ОписаниеОшибки());
КонецПопытки;

Вариант 2. Архитектурный подход — разделение на Бэк-офис и Фронт-офис

Если в вашем магазине планируется или уже ведется продажа маркированных товаров (что требует строгого соблюдения ФФД 1.2 с онлайн-проверкой кодов маркировки прямо на кассе перед пробитием), то даже внешняя обработка может не спасти ситуацию. Сама логика РМК в 1С:Розница 2.1 физически не умеет корректно обрабатывать сессии с серверами маркировки. В этом случае мы рекомендуем применить архитектурный паттерн разделения систем:

  1. Бэк-офис (Товароучет): Вы оставляете вашу переписанную 1С:Розница 2.1 для ведения складского учета, ценообразования, работы с РИБ и выгрузки в 1С:Управление торговлей. Здесь ничего менять не нужно, вся бизнес-логика остается в безопасности.
  2. Фронт-офис (Кассовое место): На рабочие места кассиров устанавливается современное специализированное ПО. Это может быть легкая и современная конфигурация 1С:РМК, 1С:Касса или профессиональный кассовый софт сторонних разработчиков (например, Frontol 6). Эти программы обновляются разработчиками регулярно и поддерживают абсолютно все требования 54-ФЗ и маркировки «из коробки».
  3. Интеграция: Между вашей старой Розницей и кассовым ПО настраивается простой файловый обмен. Из 1С:Розница 2.1 на кассы выгружается каталог товаров со штрихкодами и ценами, а в конце смены с касс загружаются готовые файлы с результатами продаж, на основании которых в 1С создаются документы ОтчетОРозничныхПродажах.

Этот подход полностью исключает риски поломки базы данных при регулярных изменениях в кассовом законодательстве и гарантирует 100% соответствие требованиям налоговой службы.

Вариант 3. Частичное обновление БПО вручную (Для опытных разработчиков)

Если вы твердо решили оставить кассовую зону внутри старой Розницы, но не хотите использовать платные сторонние обработки, можно рассмотреть вариант ручной интеграции более свежих модулей БПО в вашу нетиповую конфигурацию.

Рассмотрим этот процесс подробнее:

Посмотрим на пример заполнения структуры маркированного товара в XML чека при ручной доработке модуля формирования чека:


// Пример добавления маркированного кода в XML чека при ручной доработке БПО
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
ЗаписьXML.ЗаписатьАтрибут("Name", ТекущаяСтрока.Номенклатура.Наименование);
ЗаписьXML.ЗаписатьАтрибут("Quantity", Формат(ТекущаяСтрока.Количество, "ЧДЦ=3; ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("PriceWithDiscount", Формат(ТекущаяСтрока.Цена, "ЧДЦ=2; ЧГ=0"));

// Если товар маркированный, передаем код маркировки в ККТ
Если ЗначениеЗаполнено(ТекущаяСтрока.КодМаркировки) Тогда
    ЗаписьXML.ЗаписатьАтрибут("MarkingCode", ТекущаяСтрока.КодМаркировки);
КонецЕсли;

ЗаписьXML.ЗаписатьКонецЭлемента(); // FiscalString

Выводы и рекомендации

Выбор оптимальной стратегии зависит от специфики ваших товаров. Если вы продаете простой товар без обязательной маркировки (например, канцелярию или стройматериалы), самым быстрым и надежным решением будет использование качественной внешней обработки и драйвера АТОЛ ДТО 10. Если же в вашем ассортименте присутствует маркированная продукция (обувь, одежда, текстиль, молочная продукция), настоятельно рекомендуем отказаться от кассовой зоны внутри старой 1С и перейти на схему «Бэк-офис + Фронт-офис». Это убережет вас от постоянных доработок старой системы при очередных изменениях законодательства.

← На главную