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