Как организовать максимально быстрый онлайн-обмен между ТСД и базой 1С при больших объемах данных?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

При работе с помарочным учетом (ЕГАИС, Честный Знак) объемы данных в базе 1С могут достигать миллионов записей, а скорость проверки штрихкода на терминале сбора данных (ТСД) должна быть мгновенной. В такой ситуации классический оффлайн-обмен (выгрузка данных на устройство) становится невозможным из-за огромного объема справочников. Рассмотрим наиболее эффективные архитектурные решения и технические приемы для организации онлайн-взаимодействия ТСД с базой 1С.

Выбор архитектуры обмена: Тонкий клиент, HTTP или Native

Проанализируем основные подходы к организации рабочего места оператора ТСД:

  1. Мобильный клиент 1С. Это наиболее современный путь. Мы получаем полноценный интерфейс управляемых форм 1С прямо на ТСД. Основной плюс — отсутствие необходимости писать промежуточные сервисы. Вся логика проверки штрихкода (ОбработкаВнешнегоСобытия) выполняется на сервере 1С. Однако этот метод требует качественного Wi-Fi покрытия на всей территории склада, так как 1С чувствительна к кратковременным разрывам связи.
  2. HTTP-сервисы + Нативное приложение. Этот вариант считается самым быстрым. На ТСД устанавливается легкое приложение (на Java, Kotlin или мобильной платформе 1С в режиме МП), которое отправляет короткие JSON-запросы к HTTP-сервису 1С. Время отклика в такой связке может составлять менее 200 мс даже на сложных запросах.
  3. Работа через RDP (Удаленный рабочий стол). Проверенный временем метод. ТСД превращается в "тонкий терминал", отображая окно обычной сессии 1С. Главное преимущество — если связь оборвется, сессия на сервере сохранится, и после переподключения оператор продолжит работу с того же места. Для реализации потребуется качественный RDP-клиент для Android (например, Microsoft Remote Desktop).

Оптимизация работы со штрихкодами в базе данных

Когда в таблице более 6 миллионов марок, стандартный поиск по строке может замедляться. Выясним, как ускорить работу на стороне SQL-сервера:

Индексация и хеширование. Поиск по длинной строке (DataMatrix может содержать до 150 символов) всегда медленнее, чем по числу. Рекомендуем хранить штрихкод не только в виде строки, но и вычислять его хеш-сумму (например, CRC32 или числовой идентификатор). Поиск по индексированному числовому полю в SQL выполняется практически мгновенно.

Структура таблиц. Не стоит хранить марки в табличных частях документов или в справочниках с десятками реквизитов. Рассмотрим пример структуры регистра сведений для марочного учета:


// Пример структуры регистра "МарочныйУчет"
// Измерения: ХешКода (Число), Штрихкод (Строка)
// Ресурсы: Статус (Перечисление), Номенклатура (СправочникСсылка)

Функция НайтиМаркуНаСервере(Знач ТекстШтрихкода)
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	МарочныйУчет.Номенклатура,
    |	МарочныйУчет.Статус
    |ИЗ
    |	РегистрСведений.МарочныйУчет КАК МарочныйУчет
    |ГДЕ
    |	МарочныйУчет.Штрихкод = &Штрихкод";
    
    Запрос.УстановитьПараметр("Штрихкод", ТекстШтрихкода);
    Возврат Запрос.Выполнить().Выгрузить();
КонецФункции

Программный перехват штрихкода через Intent (DataWedge)

Для обеспечения максимальной скорости и исключения ошибок "двойного сканирования" необходимо отказаться от работы сканера в режиме эмуляции клавиатуры (HID). Вместо этого настроим передачу данных через механизмы Android Intent.

Разберем, как это работает на примере ТСД Zebra. Утилита DataWedge перехватывает луч сканера и отправляет широковещательное сообщение (Broadcast Intent), которое наша программа 1С ловит с помощью внешней компоненты.

Преимущества работы через Intent:

Реализация через HTTP-сервис

Посмотрим на пример простейшего HTTP-сервиса, который принимает штрихкод от ТСД и возвращает результат верификации. Это обеспечит минимальный оверхед по сравнению с полноценным мобильным клиентом.


// Метод POST в HTTP-сервисе
Функция ПроверитьМарку(Запрос)
    ТекстЗапроса = Запрос.ПолучитьТелоКакСтроку();
    ДанныеJSON = ЧтениеJSON(ТекстЗапроса); // Парсим входящий код
    
    Штрихкод = ДанныеJSON.barcode;
    Результат = ПроверитьВБазе(Штрихкод); // Наша логика проверки
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(ЗаписатьJSON(Результат));
    Возврат Ответ;
КонецФункции

На стороне ТСД (если используется мобильная платформа 1С) код вызова будет выглядеть так:


Соединение = Новый HTTPСоединение("192.168.1.10", , "User", "Pass");
Запрос = Новый HTTPЗапрос("/v1/verify");
Запрос.УстановитьТелоИзСтроки("{""barcode"": """ + СканированныйКод + """}");
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Инфраструктура: Wi-Fi и стабильность

Проанализируем ситуацию, когда связь на складе нестабильна. Для онлайн-обмена критически важен бесшовный роуминг (802.11r/k/v). Если точки доступа не поддерживают эти протоколы, ТСД будет "подвисать" при перемещении оператора между зонами покрытия, разрывая TCP-сессию.

Если добиться идеального покрытия невозможно, рекомендуем гибридную схему: ТСД подгружает в локальную базу (SQLite или внутреннюю БД мобильной платформы 1С) только хеши марок, ожидаемых в текущем задании (например, марки только из одной накладной на отгрузку). Это позволит выполнять мгновенную проверку локально, синхронизируя результаты с центральной базой раз в несколько минут.

Использование Web-технологий внутри 1С

Интересным решением является использование WebView или поля HTML-документа. Вы можете создать интерфейс на JavaScript (используя современные фреймворки типа Vue.js или React), который будет обмениваться данными с 1С. Это позволяет добиться плавной анимации и мгновенного отклика интерфейса, чего иногда сложно достичь на тяжелых управляемых формах мобильной платформы.

Для перехвата событий сканирования в браузере ТСД можно использовать простое прослушивание событий клавиатуры, если сканер работает в режиме HID:


document.addEventListener('keydown', function(event) {
    if (event.key === 'Enter') {
        // Код полностью считан, отправляем на сервер
        verifyBarcode(buffer);
        buffer = '';
    } else {
        buffer += event.key;
    }
});

Подведем итоги. Для организации максимально быстрого обмена при больших объемах данных (миллионы марок) оптимальным является использование HTTP-сервисов в связке с легким мобильным приложением. Если разработка должна быть выполнена быстро и только средствами 1С, используйте Мобильный клиент, но уделите особое внимание настройке Wi-Fi и оптимизации SQL-запросов (индексы по хешам). Использование аппаратных возможностей ТСД через Intent позволит сделать работу оператора максимально комфортной и безошибочной.

← На главную