Как мы помогли компании избежать миллионных штрафов, внедрив “Честный ЗНАК” вовремя
Для логистической компании изменение законодательства о маркировке товаров стало вызовом. Времени на адаптацию – всего несколько месяцев, а штрафы – до 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 умеем превращать непростые требования в понятные решения. Чтобы и законы выполнялись, и бизнес оставался быстрым, гибким и свободным от рутины.
Мы говорим с бизнесом на одном языке: сначала разбираемся в ваших задачах, а потом предлагаем простые и прозрачные решения, которые экономят ресурсы и помогают расти.