Онлайн-касса в 1С-Битрикс и другие особености 54-ФЗ

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Если у вас есть интернет-магазин и вы принимаете платежи через Интернет, то с 01 июля 2017 года у вас есть онлайн-касса. 

С помощью Небес, программистов и пары крепких слов она была установлена, фискализирована, подключена к интернет-магазину на Битрикс и теперь более-менее стабильно работает и даже печатает чеки. 

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

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

Список онлайн-касс в Битриксе


Статус "В сети" никакого отношения к доступности кассы не имел. После обращения в техподдержку Битрикса в ближайшем горячем обновлении пришел новый столбец — "Дата последнего соединения с онлайн-кассой". Он обновлялся каждую минуту и послужил хорошей опорой для разработки модуля.

Модуль мониторинга онлайн-кассы от Sensorium

Пока наш отдел техподдержки выл от напряжения, проверяя раз по 20 в день, что в каждом интернет-магазине онлайн-кассы доступны и все чеки напечатаны и имеют ссылки в ОФД, к нам обратились коллеги из Sensorium и предложили подключить свой сервис для мониторинга онлайн-касс. 


Sensorium

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

Мы уже и сами думали написать модуль, который будет следить за доступностью кассы, но задача сильно упростилась, так как мы получили готовые функции прямо из сервиса Sensorium.

Итак, бесплатный модуль мониторинга онлайн-касс для интернет-магазинов на Битрикс вышел в свет 16 августа 2017г.  Он прост в настройке и позволяет владельцам и службе поддержки интернет-магазинов забыть о постоянных проверках доступности онлайн-касс. 

Модуль самостоятельно отслеживает доступность кассы по двум параметрам: "Касса в Сети" и "Дата последнего соединения".  Если касса уходит "из сети" или не соединяется с сайтом 2 минуты, вы получаете мгновенное сообщение в канал Telegram о том, что касса недоступна.

s2-telegram-alert.png

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

Для тех, кто хочет также в автоматическом режиме отслеживать ошибки печати чеков, z-отчетов, ошибки добавления чеков, а также отслеживать недоступность самого сайта и Битрикса, Sensorium выпустил тариф 54-ФЗ

Приключения с 54-ФЗ. Виды ошибок работы онлайн-кассы

Модуль был разработан, протестирован на нескольких сайтах, техподдержка ликовала и перестала нервничать. 

Битрикс продолжал выпускать обновления, улучшать работу модуля Онлайн-касс, а мы продолжили ловить ошибки, баги и особенности работы онлайн-касс.

Ниже мы хотим поделиться бесценным опытом проблем и их решений, которые обязательно догонят всех владельцев интернет-магазинов на Битриксе в один прекрасный день.

Основные проблемы в работе онлайн-касс Битрикс:

1. Доступность кассы не всегда означает, что она успешно соединяется с ОФД.

2. Статус чека "Напечатан" в Битриксе не означает, что чек передан в ОФД

3. Если по заказу был напечатан чек, заказ нельзя удалять.

4. Если компьютер, к которому подключена онлайн-касса, регулярно зависает, установите новую версию программы BxDTO.

5. Частичная оплата. Невозможно напечатать чек, если в заказе 2 разные оплаты.

Проблема 1

Доступность кассы не всегда означает, что она успешно соединяется с ОФД

Вернемся к нашей картинке со списком касс. 

Список онлайн-касс в Битриксе

Как оказалось, спокойствие картины, когда Касса в сети —да, а Дата последнего соединения = 1 минуту назад, обманчиво. 

Посмотрим еще раз на знакомую всем схему с сайта kassy54fz.ru:

краткая схема печати чека

Вроде все ясно:
  1. есть сервер с интернет-магазином на Битриксе; 
  2. на компьютер с кассой установлена программа BxDTO (обозначена красной иконкой);
  3. Эта программа соединена с онлайн-кассой;
  4. Онлайн-касса держит соединение с ОФД через сеть Интернет;
  5. ОФД передает чеки в ФНС.
Внимательный читатель заметит, что галочка у чека на картинке выше появляется только после того, как чек передан из ОФД в ФНС. Но об этом в пункте 2.

"Где же подвох?" — задаст вопрос подозрительный читатель. 

Подвох или особенность заключается в том, что именно отображается в полях "В сети" и "Последнее обращение". Оказывается:
  1. в поле "В сети" — показывает не статус соединения онлайн-кассы с ОФД, а доступность онлайн-кассы для программы BxDTO. При этом соединение онлайн-кассы с ОФД никак не отслеживается.
  2. в поле "Последнее обращение" — указывается дата и время последнего обращения программы BxDTO на сайт. 
Таким образом, эти два важных параметра достоверны только в тех случаях, когда предполагается, что онлайн-касса подключена к интернету и имеет соединение с ОФД.

Проведем эксперимент: отсоединим usb-кабель кассы от компьютера, что же мы увидим?

cashbox-usb-out.png

  1. Касса в сети — Нет.
  2. Последнее обращение — продолжает упорно обновляться, как будто касса действительно доступна. 
Пойдем еще дальше. Отключим кассу от интернета, при этом компьютер все еще будет подключен к сети Интернет. Достигнуть этого можно простым способом, деактивировав com-порт кассы, отвечающий за соединение с Интернетом. И получим радостную, но обманчивую картину:

Список онлайн-касс в Битриксе

  1. Касса в сети — Да. Ведь реально программа BxDTO успешно соединяется с Кассой.
  2. Последнее обращение — актуальная дата и время, обновляется раз в 1 минуту.
Итак: онлайн-касса потеряла соединение с ОФД, чеки она "успешно" печатает в фискальный накопитель, все чеки будут иметь статус "Напечатан", а в личном кабинете ОФД будет пусто. Если у вас настроены почтовые шаблоны, которые отправляют ссылку на чек покупателю из Битрикса, эти ссылки будут недействительны, сайт ОФД покажет по клику на них, что такой чек не найден.

Итог: с помощью этих параметров можно отслеживать только следующие ситуации:

  1. Касса физически подключена к компьютеру.
  2. На компьютере с кассой работает интернет.
  3. Программа BxDTO не зависла и работает стабильно.
Все остальные кейсы, к сожалению, не покрываются. Битрикс уже уведомлен о ситуации, обещал добавить факт проверки соединения кассы с ОФД в новую версию BxDTO.

rerespice-pad-landingpage-preimuschestva-cifri-RED_2.png

Статус чека "Напечатан" в Битриксе не означает, что чек передан в ОФД

Этот парадокс выявил реальный случай, когда мы заглянули в личный кабинет ОФД нашего клиента и увидели, что несмотря на статус чеков "Напечатан" в Битриксе, ОФД эти чеки не получал и, соответственно, не передавал в ФНС.

Естественно, никакого подозрения, что чеки реально не уходят в ОФД и не было. Битрикс радостно выводил статус "Напечатан", при этом все уже привыкли различать проблемные чеки по статусу "Ошибка".

Что же случилось? 

Как мы выяснили в п.1, ничто в Битриксе не проверяет, что онлайн-касса имеет соединение с Интернетом и ОФД. В самой кассе — это два разных параметра. Касса может иметь соединение с Интернетом, но не с ОФД. Чтобы убедиться в этом, достаточно напечатать чек самодиагностики. Он покажет 2 разные строки: Соединение с Интернет — да; Соединение с ОФД — отсутствует.

Но если нет соединения с ОФД, то и чеки не должны иметь статус "Напечатан" в Битриксе, скажете вы... Мы тоже так думали, пока не выяснили, что статус "Напечатан" у чека в Битриксе ставится, когда онлайн-касса записала чек в фискальный накопитель. При этом факт передачи чека в ОФД программа BxDTO никак не проверяет. 

Ну вот честно, это не статус "Напечатан", это скорее "Записан", если уж строго следовать логике 54-ФЗ. Или надо было ввести еще один статус "Отправлен в ОФД", чтобы хоть как-то разделить ситуации записи чека в ФН кассы и передачи чека в ИФНС.

Решение: мы пока нашли два решения:

  1. Ручная сверка чеков за день из Битрикса и ОФД. Из обоих источников можно выгрузить чеки в Excel.
  2. Автоматическая сверка чеков через сервис Sensorium в рамках тарифа 54-ФЗ, когда робот проверяет, что каждый чек в Битриксе со статусом "Напечатан" имеет реальную запись на сайте ОФД.

rerespice-pad-landingpage-preimuschestva-cifri-RED_3.png

Если по заказу был напечатан чек, заказ нельзя удалять. 

Его надо отменить, вернув платеж и напечатав чек Возврата. Эта истина постигнута тоже экспериментальным путем, когда в один ужасный день чеки в интернет-магазине перестали уходить. Часть чеков встала со статусом Ошибка, остальные — в статусе " В процессе печати".

Решение подсказал внимательный просмотр списка чеков. У этих двух чеков в статусе Ошибка не было служб оплаты, хотя номера заказов стояли. 

Оказалось, что менеджер удалил эти 2 заказа, чеки ушли в BxDTO с пустым списком товаров. Поэтому BxDTO все время возвращал ошибку, но ее суть была тайной для всех... И хотя в Битриксе есть скрытая таблица b_cashbox_error_log (она показывает все ошибки печати чеков), на момент разбирательств в ней не было никаких нормальных пояснений по этим двум чекам.

Проблема оказалась в логике работы BxDTO, которую пояснила тех.поддержка:


img style=

BxDTO всю пачку присылаемых (в одном JSON-документе) чеков игнорирует, т.к. его формат не проходит валидацию из-за отсутствующих товаров. Если удалить пустые чеки, то оставшаяся часть станет "видимой" для разбора и печати.

Решения два:

  1. Организационное: запретить менеджерам удалять заказы. Делать только отмену
  2. Программное: сделать обработчик, который при удалении заказа проверяет, что у заказа нет чеков. Если чеки есть, удаление заказа блокируется.

rerespice-pad-landingpage-preimuschestva-cifri-RED_4.png 

Если компьютер, к которому подключена онлайн-касса, регулярно зависает, установите новую версию программы BxDTO. 

Получить новую версию под нашу ОС нам удалось только на странице учебного курса через Чат. Спасибо коллегам из Битрикса, что регулярно дежурили в чате на этой странице. На диагностику этой проблемы ушло 3 дня и 3 компьютера.

rerespice-pad-landingpage-preimuschestva-cifri-RED_5.png

Невозможно напечатать чек, если в заказе 2 разные оплаты.

Ну и на десерт главная проблема онлайн-касс/Атола/Битрикса — частичные оплаты. Это когда в заказе есть две оплаты от клиента: например, банковской картой и наличными. 

В нашем случае бОльшая часть заказа оплачивается банковской картой, а остаток — бонусами. Причем бонусы — это тоже платежная система.

blog-kassy-payments.png

А в скрытой табличке Ошибок печати чеков в Битриксе — b_sale_cashbox_err_log появляется ошибка:

blog-avans-error.png

К чести Битрикса надо сказать, что эта же ошибка показывается в данном случае и в поле Проблема с заказом на странице этого заказа.

Решение: пока отсутствует. По словам ТП Битрикса, кассовые аппараты Атола не поддерживают печать чеков с частичной оплатой.


Интересные статьи

Интересные статьи

Привет, Хабр! Я Маша, старший инженер-разработчик iOS в КРОК и аспирант на кафедре Прикладной математики и Искусственного интеллекта в московском вузе. А еще я уже четыре года препода...
Среди советов по улучшению юзабилити интернет-магазина, которые можно встретить в инете, один из явных лидеров — совет «сообщайте посетителю стоимость доставки как можно раньше».
С 1 июля 2017 года на территории Российской Федерации стало обязательным использование контрольно-кассовых машин (ККМ), отправляющих все свои транзакции прямо в Федеральную налоговую службу. Так ...
Реализация ORM в ядре D7 — очередная интересная, перспективная, но как обычно плохо документированная разработка от 1с-Битрикс :) Призвана она абстрагировать разработчика от механики работы с табл...
Согласно многочисленным исследованиям поведения пользователей на сайте, порядка 25% посетителей покидают ресурс, если страница грузится более 4 секунд.