Как настроить автоматическую печать чеков при продажах с сайта в 1С:УТ 11?

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

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

Суть проблемы: почему не работает обычное регламентное задание?

На первый взгляд, задача решается тривиально. Возникает логичная мысль: давайте настроим обычное регламентное задание в 1С, которое будет раз в несколько минут проверять новые документы реализации или оплаты и давать команду на фискальный регистратор. Рассмотрим, почему этот подход дает сбой.

Регламентные задания в клиент-серверном варианте базы выполняются на стороне сервера 1С. Однако контрольно-кассовая техника (например, аппараты АТОЛ или Штрих-М) физически подключена к конкретному клиентскому компьютеру (рабочему месту кассира) через USB или COM-порт. Сервер 1С не имеет прямого доступа к локальным портам клиентских машин. Соответственно, при попытке выполнить метод пробития чека на сервере мы получим ошибку — касса недоступна.

Посмотрим на возможные пути решения этого архитектурного ограничения.

Использование штатного механизма "Очередь чеков"

В современных релизах 1С:УТ 11, а также в 1С:ERP и 1С:УНФ, фирма "1С" уже встроила механизм работы с онлайн-оплатами, который позволяет избежать написания сложного собственного кода.

  1. Когда сайт передает в 1С признак того, что заказ оплачен, система автоматически формирует документ ОперацияПоПлатежнымКартам.
  2. Эти документы помещаются в специальный скрытый регистр — "очередь чеков".
  3. В настройках подключаемого оборудования (в карточке самой ККТ) мы можем установить флаг Автоматическая фискализация чеков из очереди чеков.

Как это работает на практике: Чтобы чеки пробивались, необходимо оставить включенным компьютер кассира с открытым сеансом 1С (клиентским приложением). Платформа 1С в фоновом режиме (через обработчик ожидания на клиенте) будет регулярно опрашивать очередь. Как только с сайта "прилетит" ночная оплата, открытый клиентский сеанс перехватит эту запись и отправит команду на локальную кассу. Участие человека при этом не требуется.

Обход ограничений сервера: использование веб-серверов оборудования

Если вариант с постоянно открытым сеансом 1С на клиенте не подходит, рассмотрим более надежный технический подход — использование сторонних программных решений, таких как веб-серверы оборудования (например, KkmServer).

Проанализируем архитектуру такого решения:

  1. На компьютер, к которому по USB/COM-порту подключена касса, устанавливается специальная программа-служба.
  2. Эта служба работает в фоновом режиме на уровне ОС Windows и предоставляет REST API для управления кассой через HTTP-запросы.
  3. В 1С настраивается подключение к кассе не как к локальному устройству, а как к сетевому аппарату по IP-адресу.

В такой конфигурации сервер 1С может напрямую обращаться к кассе по локальной сети. Теперь мы можем реализовать наше регламентное задание!

Рассмотрим примерный алгоритм, который можно заложить в код фонового задания:


Процедура ПробитьНовыеЧекиСайта() Экспорт
    
    // Получаем список неоплаченных чеков за период
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ОперацияПоПлатежнымКартам.Ссылка КАК ДокументОплаты,
        |    ОперацияПоПлатежнымКартам.СуммаДокумента КАК Сумма
        |ИЗ
        |    Документ.ОперацияПоПлатежнымКартам КАК ОперацияПоПлатежнымКартам
        |ГДЕ
        |    ОперацияПоПлатежнымКартам.ЧекПробит = ЛОЖЬ
        |    И ОперацияПоПлатежнымКартам.Источник = &ИсточникСайт";
        
    Запрос.УстановитьПараметр("ИсточникСайт", Перечисления.ИсточникиОплат.Сайт);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        // Формируем JSON структуру для REST API веб-сервера ККТ
        СтруктураЧека = СформироватьСтруктуруЧека(Выборка.ДокументОплаты);
        
        // Отправляем HTTP POST запрос на IP адрес службы
        ОтветСервера = ОтправитьЧекНаККМ(СтруктураЧека);
        
        Если ОтветСервера.Успешно Тогда
            ОтметитьЧекПробитым(Выборка.ДокументОплаты);
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

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

Отказ от печати бумажного чека для ночных продаж

Один из важных нюансов при ночной фискализации — это нежелательная печать бумажных чеков. Мало того, что тратится чековая лента, так еще и звук работающего принтера может мешать, если касса стоит в небольшом офисе или дома у ИП.

Выясним, что говорит закон. Согласно 54-ФЗ, при онлайн-оплатах (когда нет прямого контакта с покупателем) достаточно отправить электронный чек на Email или по SMS. Бумажную копию печатать не обязательно.

Настроим 1С для такого сценария:

  1. Перейдем в раздел НСИ и администрирование.
  2. Откроем подраздел ФЗ-54 (или настройки продаж/эквайринга в зависимости от версии УТ).
  3. Найдем и активируем опцию Не печатать чек ККТ при отправке электронного чека.

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

Альтернатива: Использование облачных сервисов и экосистемы 1С

Если разработка собственного кода для регламентных заданий или настройка KkmServer кажется слишком сложной задачей, рассмотрим использование готовых облачных решений. В экосистеме 1С существуют специализированные сервисы, такие как "1С:Касса" и "1С-Чеки ОФД".

Эти сервисы интегрируются напрямую с вашим сайтом (CMS) и платежным шлюзом (например, Яндекс Касса, ЮKassa, Робокасса). Когда проходит оплата, сервис самостоятельно берет на себя роль сервера: он формирует чек, передает его на облачную кассу (или локальную кассу, подключенную к сервису) и отправляет данные в ОФД.

В саму 1С:УТ 11 данные о таких продажах и пробитых чеках загружаются уже постфактум, в виде готового документа ОтчетОРозничныхПродажах или эквайринговых операций, что полностью снимает проблему настройки печати непосредственно из учетной системы.

← На главную