Как мы помогли компании избежать миллионных штрафов, внедрив “Честный ЗНАК” вовремя

Для логистической компании изменение законодательства о маркировке товаров стало вызовом. Времени на адаптацию – всего несколько месяцев, а штрафы – до 1 млн рублей за каждое нарушение. Мы связали водителей, 1С, облачную кассу и ОФД в единую систему – и теперь бизнес не только соблюдает закон, но и экономит время на рутине.

Успеть доставить, проверить и продать
Успеть доставить, проверить и продать

Кто к нам пришёл и с чем

К нам обратилась компания, которая занимается доставкой питьевой воды.

Было так. Перед сменой формировали поручения в 1С и выдавали водителям. С этими распечатками они везли воду клиентам.

У клиента водитель принимал оплату – чаще всего наличными или через терминал – и заполнял поручение. Если оплата происходила через терминал, то нужно было вручную вбивать сумму, статус, комментарий, и так для каждой операции. Конечно, случались ошибки.

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

В итоге было непонятно, какие заказы закрыты, сколько собрано денег и осталось воды у экипажа. Отчёты появлялись постфактум и не всегда были точными.

Ручной документооборот - источник ошибок и неточностей
Ручной документооборот - источник ошибок и неточностей

Так не могло продолжаться. Заказчик хотел:

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

Вроде обычная задача. Но был нюанс:

  • обеспечить интеграцию с системой “Честный ЗНАК” и внедрить работу со штрих-кодами и маркировкой.

💡 Очень короткая справка

“Честный ЗНАК” – это государственная система маркировки и прослеживаемости товаров. На всех этапах цепочки поставок, от производства или импорта до продажи покупателю, сканируется уникальный код DataMatrix, который есть у любого товара, а каждая операция регистрируется в единой системе через операторов фискальных данных. Так рынок становится прозрачнее, исключаются подделки и “серый” оборот.

Система “Честный ЗНАК” встроена в процессы заказчика не была. Коды не проверялись во время доставки – сверка происходила потом в 1С. Это означало риск продажи товаров с некорректными кодами (например, чужими, повреждёнными, неверно привязанными).

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

Немаркированная вода могла обойтись слишком дорого
Немаркированная вода могла обойтись слишком дорого

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

Какое решение мы предложили

В приложении отображается список заказов водителя. Каждый заказ состоит из некоторого количества бутылей воды. Заказы подгружаются из 1С.

Доставив заказ по указанному адресу, водитель переходит к продаже. Для этого он сканирует маркировку на каждой бутыли. При сканировании маркировка передается в “Честный ЗНАК” для проверки подлинности.

При неуспешном ответе от “Честного ЗНАКА” (например, если истёк срок годности, если товар не в обороте и т.д.) появляется сообщение об ошибке, продажа невозможна.

При успешном ответе от “Честного ЗНАКА” водитель переходит на экран оплаты (наличные, картой, СПБ). После оплаты в приложении формируется чек и направляется на email покупателя.

Для реализации приложения были выбраны Flutter на фронте и PHP (Laravel) для бэкенда. Приложение разрабатывалось для использования с ТСД Атол Smart.Slim Plus на ОС Android 10.

С чего мы начали

Прежде чем приступить к разработке, мы проработали архитектуру будущего решения.

Архитектура решения
Архитектура решения

Её ключевым элементов стал сервер транзакций. Вот чем он занимается:

  • Передаёт данные из приложения в 1С и обратно, выступая буфером между системами.
  • Маршрутизирует данные от внешних сервисов. То, что получено от “Честного ЗНАКА” и SoftPOS, сервер передаёт в 1С. Таким образом, учёт в 1С всегда синхронизирован с “полевыми” действиями.
  • Хранит каждую транзакцию (время, полезные данные и флаг “дошло до 1С/нет”), чтобы ничего не потерять при сбоях/обрывах связи.
  • Ставит данные о транзакциях в очередь, если 1С по какой-то причине недоступна, и пробует отправить их снова с заданными интервалами.

Чтобы снять нагрузку с мобильного клиента и централизовать управление доступом выделили отдельный сервер авторизации, который:

  • Синхронизирует учётные записи водителей и права доступа с 1С.
  • Держит сессии. Позволяет оставаться авторизованным заданное время, чтобы водитель не логинился заново посреди рейса.
  • Фильтрует запросы. Любой запрос из приложения (например, на синхронизацию заказов или проверку маркировки) сначала проходит проверку на сервере авторизации, и только потом допускается на сервер транзакции или к 1С.

💡 Пользовательский опыт

При входе нужно также ввести access-code для SoftPOS – это часть пользовательского пути, но доступ к приложению всё равно выдаёт сервер авторизации.

Чтобы начать принимать платежи, нужно ввести код
Чтобы начать принимать платежи, нужно ввести код

Для интеграции с учётной системой задействовали шину 1С (ESB). Зачем она понадобилась:

  • У заказчика в 1С уже было много кастомных настроек. Любое их обновление или изменение могло сломать интеграцию.
  • Таким образом, даже если бы что-то пошло не так на стороне приложения, 1С оставалась в “безопасном контуре”. Это снижало риск случайных изменений или повреждений критичных данных заказчика
  • Шина стала “переводчиком” между сервером и 1С: она преобразует данные в нужный формат (например, XML в JSON) и только потом передаёт.
  • Плюс, если потребуется подключать другие системы в будущем (например, отчётность, аналитику), то дорабатывать нужно будет только взаимодействие на уровне шины, а не во всех модулях

💡 Безопасность

Для серверов транзакций и авторизации развернули изолированную ВМ (Ubuntu Server 24.04 LTS) в Yandex Cloud. Доступ к шине 1С ограничен так, что подключаться к ней может только эта ВМ, а не произвольные внешние сервисы или приложения.

Фичи нашего приложения

Интеграция с 1С

Первая серьёзная сложность возникла при обмене данными с 1С. База хранила огромные массивы информации: при выгрузке API возвращало десятки и сотни тысяч строк. Если бы мы напрямую отдавали эти данные в приложение, система бы просто “ложилась”.

Мы решили эту задачу с двух сторон. Во-первых, данные кэшируются и подгружаются частями, что снимает нагрузку и ускоряет работу мобильного клиента. Во-вторых, мы предусмотрели ночную синхронизацию: поручения на следующий день подгружаются заранее. Это сделано специально, чтобы утром водитель точно получил список заказов, даже если в этот момент 1С вдруг окажется недоступной.

Помимо этого, мы реализовали обработку “тяжёлых” данных на сервере, а не на терминале. Это позволило водителю работать в стабильном интерфейсе без подвисаний, а бизнесу – быть уверенным, что все статусы и оплаты корректно попадут обратно в учётную систему.

В итоге мы добились того, что даже при больших объёмах информации интеграция работает быстро и надёжно, а риск “потерять” поручения или транзакции свели к нулю.

Интеграция с облачной кассой и “Честным ЗНАКОМ”

Мы выбрали схему с SoftPos-приложением эквайринга (2can Tap2Go αPOS) и сделали автоматический переход в него прямо из нашего приложения с подстановкой суммы.

Перед самой оплатой водитель сканирует коды DataMatrix. Для каждой марки выполняется запрос в "Честный знак" в разрешительном режиме. Если код некорректный, выбыл из оборота или повторный – система не даст провести продажу. Только “чистые” коды формируют состав чека и сумму к оплате. Это важно: так мы исключили риск, что товар с "битой" маркировкой уйдёт клиенту и создаст проблемы при фискализации.

После успешной проверки открывается SoftPOS с готовой суммой.

Когда клиент платит, SoftPOS возвращает управляющее событие в приложение. Мы фиксируем оплату, отправляем данные в 1С и в облачную кассу через ОФД. Касса передаёт фискальные данные и сведения о маркировке в ФНС и “Честный ЗНАК”, а событие сохраняется в 1С.

💡 Технический момент

Реализовали возможность выгрузки логов сканирования и проверки маркировки.

💡 Пользовательский опыт

Водитель видит только понятные статусы (зелёный – можно, красный – нельзя, с пояснением) и не вводит сумму вручную. Это снижает ошибки и ускоряет работу.

Меньше ошибок - быстрее работа
Меньше ошибок - быстрее работа

Оффлайн-режим

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

Раньше для работы с маркировкой обязательно нужно было быть в сети. Уже после старта работ у “Честного ЗНАКА” вышло обновление, которое позволяет это делать даже без интернета. Мы уже зафиксировали запрос заказчика на поддержку офлайн-проверок и планируем реализовать её в следующих итерациях.

Финал и выводы

Демонстрация работы приложения в "полевых" условиях

Движение товаров теперь полностью соответствует требованиям законодательства. Сервис успешно используется в работе.

Водители получили удобный инструмент: поручения, сканирование марок, пробитие чеков – всё в одном приложении.

Компания получила прозрачность: доступ к информации по заказам, их статусам, деньгам и товарам обновляется в реальном времени.

Мы получили классный кейс в портфолио.

На следующих этапах проекта планируется:

  • полноценная карта с отображением экипажей,
  • модуль заработной платы для водителей,
  • приложение для клиентов.

Привет, я Алексей Сорокин, и мы в Softlex умеем превращать непростые требования в понятные решения. Чтобы и законы выполнялись, и бизнес оставался быстрым, гибким и свободным от рутины.

Мы говорим с бизнесом на одном языке: сначала разбираемся в ваших задачах, а потом предлагаем простые и прозрачные решения, которые экономят ресурсы и помогают расти.

👉 Свяжитесь с нами в Telegram или оставьте заявку на сайте – и получите партнёра, который берёт на себя сложное, чтобы у вас оставалось время на важное.

8
3
1
1
21 комментарий