Паллетный учёт на ТСД для оптовика: приложение и расширение 1С
Оптовик мясной продукции, 7 терминалов на Android. Приложение для учёта паллет и расширение для 1С УТ: приёмка фуры, разделение, россыпь, отгрузка, этикетки с QR. К ноябрю добавились сверка склада с терминала, работа без связи и печать на сервере 1С, которая заработала 3 ноября. Сейчас расширение 2.5.4 и приложение 1.5.3 у заказчика, идёт внедрение.
Коротко (TL;DR)
- Оптовик мясной продукции, 7 терминалов сбора данных на Android. Нужен учёт паллет: приёмка фуры, формирование, разделение и расформирование, отгрузка целыми паллетами и россыпью. Товарный учёт в 1С УТ не трогаем.
- Сделал две части: приложение на Flutter для терминалов и расширение для 1С УТ с HTTP-сервисом. Сканирование GS1-128 и EAN, этикетка 100×150 с QR, запрет смешивать в отгрузке паллеты разных организаций.
- К 3 ноября расширение дошло до 2.5.4, приложение до 1.5.3. Добавились сверка склада с терминала, работа без связи, печать этикеток с терминала через сервер 1С, поиск по части слова и нумерация палет по номеру терминала.
- Статус на 5 ноября: идёт внедрение у заказчика, печать с терминала заработала 3 ноября. Замечания, которые приходят по ходу, закрываю новыми версиями.
Сделаю под ключ: разберу задачу, назову срок и цену. Чтобы начать, напишите в Telegram одной фразой.
Обсудить автоматизациюНа складе мясного опта товар ходит паллетами, а 1С видит его позициями и килограммами. Между этими двумя взглядами и теряется порядок: какая коробка на какой паллете, откуда паллета пришла и куда уехала. Расскажу, как я собрал приложение для терминалов и расширение для 1С, которые закрывают паллетную часть и не ломают товарный учёт, и что поменялось с октября.
Задача
Заказчик: оптовик мясной продукции, несколько организаций, импортный товар. На складе 7 терминалов сбора данных на Android и Wi-Fi по всей территории. Товарный учёт ведётся в 1С УТ, и эту границу не трогаем.
Нужен был учёт паллет на всех этапах движения. Приёмка фуры. Формирование паллеты из коробок. Разделение паллеты на несколько и расформирование целиком. Отгрузка целыми паллетами и россыпью, когда уходит часть коробок.
Что я сделал
Приложение написал на Flutter, одна кодовая база под терминалы, которые уже стоят на складе. Данные идут через слой-интерфейс: экраны не знают, откуда берутся паллеты. В сентябре за ним стояла демо-реализация, в октябре подключился HTTP-сервис 1С, и экраны при этом не переписывались.
Сканирование: штрихкоды GS1-128 и EAN. GS1-128 несёт в одном коде несколько полей, в том числе вес, поэтому его разбор вынесен в отдельную логику. Где кода с весом нет, кладовщик вводит вес руками. Этикетка паллеты 100×150 миллиметров с QR-кодом и штрихкодом SSCC: паллету потом сканируют и сразу видят, что на ней. Паллеты разных организаций в одну отгрузку не попадут, это правило вшито в код.
Вторая половина живёт внутри 1С УТ как расширение. В нём HTTP-сервис для терминалов, печать этикеток и упаковочного листа, документ корректировки, отчёты и роли из ТЗ заказчика. Документ по складу, где работает терминал, не двигает остатки товара, пока ТСД не отметит его обработанным.
Обмен описал документом до подключения. Каждая операция несёт ключ идемпотентности: если терминал отправил приёмку повторно, 1С узнает ключ и не проведёт её дважды. Коды ошибок описаны заранее, чтобы кладовщик видел понятную причину.
Что было сложно
Граница с 1С. Соблазн начать двигать остатки прямо из терминала велик, но товарный учёт уже работает, и любое вмешательство в него рискует всем складом. Поэтому приложение отвечает за паллеты и их состав, 1С остаётся источником правды по товару.
Операции, которые меняют структуру. Разделение, расформирование и россыпь: коробки переезжают с паллеты на паллету, и в любой момент должно быть ясно, где какая. Эту логику закрывал тестами, а для ввода со сканера написал fuzz-тесты с испорченными кодами.
Живая база. С начала октября расширение стоит на сервере заказчика с копией рабочей базы, и каждую версию я прогонял там через приложение в эмуляторе терминала. Копия нашла то, чего не видно на демо-данных: формат дат 1С и обратный порядок работы склада, где реализацию заводят утром, а паллету собирают днём.
Безопасность. Заказчик заметил, что через учётную запись сервиса можно открыть 1С целиком. У роли обмена я убрал право запуска клиента.
Что изменилось к концу октября
В первую неделю октября версии шли от 2.0 до 2.4: статусы документов, перемещение в два этапа, россыпь, режим килограммов. Дальше пошли замечания с терминалов.
Работа без связи
Первое замечание: без связи терминал не пускал. В 1.4.1 вход без связи стал постоянным: при входе со связью приложение запоминает солёный хеш, пароль на терминале не хранится. Списки берутся из кэша, операции встают в очередь. В 1.4.4 запас номеров для новых паллет вырос с 5 до 20, позднее его заменила нумерация по номеру терминала, о ней ниже. Без связи не работают только печать и самый первый вход.
Список складов приходит из 1С при каждом запуске.
Печать на сервере
Печать шла через монитор на компьютере склада: нет запущенной 1С, нет этикетки. Принтеры у заказчика стоят на сервере, поэтому в 2.4.2 появилась отметка «Печатать на сервере 1С» и регламентное задание, которое раз в 30 секунд печатает очередь. 28 октября пришло новое: терминал пишет «отправлено на принтер», а принтер молчит. В 2.5.1 терминал начал показывать, на каком принтере напечатано, или жёлтым «в очереди» с причиной. Чем кончилась эта история, расскажу в разделе про ноябрь.
Сверка склада
Заказчик попросил убедиться, что можно пройти склад и проверить паллеты. Пересчёт одной паллеты был, сверки всего склада не было. В 2.5.0 она появилась: кладовщик сканирует паллеты подряд, терминал показывает «найдено столько-то из стольких», лишние паллеты помечает и говорит, где они числятся по 1С. Сверка работает и без связи. В 1С результат ложится в отчёт, сверху ненайденные.
Мелочи, без которых склад встаёт
Паллета из россыпи оставалась в статусе «Новая», исправлено в 2.4.4. Поиск по части слова, без учёта регистра и буквы «ё», появился в россыпи, в паллетах на складе и при выборе товара. И к запуску я собрал сквозную инструкцию от настройки администратора до шпаргалки кладовщика.
Что изменилось к ноябрю
Печать с терминала заработала
Заказчик настроил склады и принтеры, а терминал 1.5.1 показал причину: «Метод недоступен на сервере». Это ограничение платформы 8.5: табличный документ нельзя напечатать на сервере. Я воспроизвёл его локально. Тест версии 2.5.1 уже ловил эту ошибку, а я принял её за «нет принтера». Это мой промах.
В 2.5.2 сервер записывает этикетку в PDF и отдаёт её программе печати SumatraPDF с нужным принтером. Заказчику пришлось поставить программу на сервер 1С и снять безопасный режим у расширения. Ошибки названы прямо: нет программы, безопасный режим, код возврата. 3 ноября заказчик переслал переписку со склада: этикетки печатаются.
Что нашёл склад
В 2.5.3 на этикетке стоял ответственный, который выдавал номера, а не кладовщик, вошедший в терминал. Теперь ставится формирующий. По просьбе склада в приложении 1.5.2 в списке «Палеты на складе» видны товар и килограммы без захода в карточку.
Номера по номеру терминала
Заказчик предложил отказаться от запаса номеров и нумеровать палеты по префиксу терминала. В 2.5.4 и 1.5.3 у каждого терминала в 1С есть номер от 1 до 9. Серийный номер палеты складывается из номера терминала и его счётчика, поэтому код вида 10000032 читается как палета 32 терминала 1. Терминал считает номера сам, в том числе без связи. Если 1С отклонила номер, он откатывается, а занятый пропускается. Старый запас очищается. Тесты нумерации проходят 10 из 10, приложение 123 из 123.
Что получилось
| Что | Состояние на 5 ноября |
|---|---|
| Расширение 1С | 2.5.4, передано заказчику |
| Приложение ТСД | 1.5.3, передано заказчику |
| Тесты | приложение 123, 13 наборов автотестов 1С, регрессия зелёная |
| Без связи | вход, списки, операции, сверка и номера палет |
| Печать | с терминала через сервер 1С, заработала 3 ноября |
| Инструкция | сквозная, для администратора и кладовщика |
| Склад | идёт внедрение |
Система разработана, проверена на копии рабочей базы и передана заказчику. Внедрение идёт, и пока оно не закончено, сданным складом я это не называю.
Что дальше
Ближайшее: довести внедрение и проследить, как склад живёт с нумерацией по терминалам. Маркировка пойдёт отдельным этапом.
Порядок здесь важен. Сначала сервис 1С должен честно отвечать понятными сообщениями, только потом терминалы уходят к кладовщикам. Печать это показала: пока терминал молчал о причине, на складе думали, что сломалось всё.
Частые вопросы
Почему не делать всё прямо в 1С?
Товарный учёт в 1С УТ уже работает, и трогать его не нужно. Паллетный слой это отдельная задача со своими экранами для терминала. Приложение отвечает за паллеты, 1С за товар. Как выбирать между своим приложением и готовым решением, я разбирал отдельно.
Что будет, если на складе пропадёт связь?
Кладовщик продолжает работать: списки берутся из кэша, операции и сверка встают в очередь. Когда связь вернётся, очередь уйдёт в 1С, а повторная отправка не создаст дубль.
Можно ли печатать этикетки без компьютера на складе?
Да, если принтер доступен серверу 1С. На платформе 8.5 печать идёт через PDF и программу печати на сервере. Терминал показывает, где напечатано, или почему задание ждёт в очереди.
Как проверить, что паллеты на месте?
Сверкой склада: кладовщик проходит склад с терминалом и сканирует паллеты. В 1С появляется отчёт, где сверху ненайденные паллеты, ниже лишние с адресом по данным 1С.
Коротко о главном
Паллетный учёт на терминалах можно построить рядом с 1С, не ломая товарный учёт. Держится он на слое-интерфейсе, договорённости об обмене до подключения, ключе идемпотентности и правилах, вшитых в код.
Внедрение приносит замечания, которых не видно ни на демо, ни на копии базы. Работа без связи, печать на сервере, сверка склада и нумерация по терминалам появились именно оттуда. Сейчас идёт внедрение, и я веду его дальше.
Если у вас склад на 1С и нужно приложение для ТСД под свои операции, от приёмки и паллет до отгрузки и этикеток, соберу его и договорюсь с вашей 1С через понятный протокол. Подробнее про автоматизацию процессов. Напишите в Telegram, MAX или VK.
Что я делаю для бизнеса
Напишите одной фразой, что нужно. Отвечу, что подойдёт, сколько займёт и сколько стоит. Сообщение уже подготовлено.
- Боты в Telegram, MAX, VK
- Автоматизация процессов и CRM
- Аналитика и дашборды
- Сайты и лендинги под ключ
Разборы, кейсы и практика — без воды. Выходит регулярно, читать 3–5 минут.


