Как мы подключили складские терминалы к 1С, не открыв базу наружу
Автор: СофтычКак мы связали складские Android-терминалы с 1С через собственный шлюз — без прямого доступа к базе снаружи и с работой каждого кладовщика под своим логином.
Название компании не указываем по условиям заключённого с ней договора. Это крупная организация, хорошо известная в России.
С чем пришли
На складах компании кладовщики принимают товар с терминалов сбора данных — защищённых Android-устройств со сканером штрихкода, модель UBX/Urovo DT30. Вся номенклатура, поступления и партии ведутся в 1С:Комплексная автоматизация.
До этого терминалы с 1С никак не были связаны: приёмка велась по бумаге или отдельно от учётной системы.
Главное требование заказчика
База 1С не должна быть доступна из интернета ни при каких обстоятельствах — это внутренняя система, и открывать к ней прямой доступ снаружи нельзя.
Значит, терминал не может напрямую «достучаться» до базы: нужен посредник, который берёт удар на себя, а сама 1С остаётся полностью закрытой внутри сети предприятия.
Что мы сделали
Три части, которые работают вместе:
- Приложение на терминале — своё, написанное под конкретную модель устройства. Оно само поднимает защищённый VPN-канал до сервера компании, ещё до того, как кладовщик успевает войти в систему: без канала связи вход просто не начнётся.
- Промежуточный сервис — тот самый посредник. Это единственное, что видно снаружи; он общается с терминалами с одной стороны и с 1С — с другой, оставаясь внутри защищённого периметра. Работает как обычная служба Windows, которую при обновлении просто перезапускают.
- Небольшой модуль внутри самой 1С, который отвечает на запросы от посредника — отдаёт данные о товарах и принимает результаты приёмки.
Каждый сотрудник работает под собой
Это было отдельным требованием — раньше при подобных интеграциях нередко делают один технический аккаунт на все терминалы, и тогда в 1С не видно, кто именно что сделал.
Мы сделали иначе: кладовщик входит по своей карте или паролю, и дальше все действия в 1С фиксируются от его имени, с его собственными правами доступа — то есть если человеку в 1С разрешено не всё, терминал не даст ему обойти это ограничение. Упрощённо ответ после входа выглядит так:
{"user": {"name": "Иванов Иван", "login": "ИвановИ", "isAdmin": false}, "token": "сессия шлюза"}Дальше все запросы к 1С уходят с этим именем, а не с общим служебным логином.
Здесь же ушла заметная часть времени на отладку: 1С устроена так, что тонкости входа по защищённому токену нигде подробно не описаны, и часть поведения — например, в каких единицах система ожидает время действия токена, — пришлось выяснять методом проб.
Плюс одна из ошибок 1С называется так, будто дело в закончившихся лицензиях, а на самом деле означает совсем другое — отказ именно по токену входа. Без такого опыта на подобное можно потерять не один день.
Терминал в руках кладовщика — как касса
С него нельзя случайно выйти в другое приложение, свернуть или закрыть программу приёмки — устройство заблокировано на одной задаче, пока сотрудник не завершит работу и не выйдет из системы сам.
У администратора склада ограничений нет: он же управляет тем, какому сотруднику какая карта выдана, и не может случайно передать чужую карту без явного подтверждения.
Приёмка: просто для кладовщика, сложно внутри
Кладовщик находит нужную поставку по номеру документа или сканирует штрихкод первой коробки, а дальше просто сканирует короб за коробом.
На каждой коробке напечатана этикетка международного стандарта GS1-128 — в ней зашиты код товара, дата изготовления, номер партии и количество внутри. Упрощённо это выглядит так:
(01) 4680000000000 — код товара (GTIN)
(11) 260418 — дата изготовления
(10) 0287 — номер партии
(37) 0008 — количество в коробе
(21) 03188 — номер местаНа палете — свой код, у которого в 1С и на реальной наклейке разное количество цифр, и мы сделали так, чтобы система сама приводила их к одному виду и не путалась при сверке.
Отдельно продумали то, что не видно на первый взгляд: результаты сканирования не отправляются в 1С по одному — при поставке в сотни коробов это заняло бы недопустимо много времени и просило бы 1С работать на пределе. Вместо этого сканы сначала копятся у посредника, а в 1С уходит уже готовый итог.
У этого решения обнаружился приятный побочный эффект: приёмку одной и той же поставки можно начать на одном терминале, а продолжить на другом — например, если сотрудник ушёл на обед, а работу нужно закончить. Или же с ней может работать несколько кладовщиков одновременно, и система сама не даст засчитать одну и ту же коробку дважды, даже если её случайно просканируют повторно.
Как считаются количества
Число коробок, которое кладовщик привык видеть на печатной форме документа в 1С, на самом деле нигде в базе не хранится — оно вычисляется на лету надстройкой поверх 1С каждый раз заново.
Мы это выяснили и не стали полагаться на это число, а считаем количество коробов сами, напрямую по данным из базы, — иначе на некоторых поставках счёт мог бы просто не сойтись.
Стек
Android-приложение на Kotlin и Jetpack Compose, сервер-посредник на Go с собственной базой SQLite, модуль на встроенном языке 1С, защищённое VPN-соединение и токены доступа с индивидуальными правами каждого сотрудника.
Похожие материалы

Telegram-бот для бизнеса в 2026: что умеет и сколько стоит
Зачем бизнесу Telegram-бот, какие задачи он решает, сколько стоит разработка и за сколько окупается.

Сколько стоит разработать приложение в 2026: реальные цены
Из чего складывается цена разработки сайта, мобильного и десктопного приложения: реальные вилки, этапы и на чём не стоит экономить.
1С интеграция: когда нужна и как не облажаться.
У каждого второго клиента в какой-то момент возникает один и тот же вопрос: «Нам нужна интеграция с 1С — сделаете?». Мы всегда отвечаем встречным вопросом: «А зачем?». И это не снобизм — это способ сэкономить вам деньги.
Комментарии
Войдите, чтобы оставить комментарий