Как использовать терминал сбора данных (ТСД) в качестве беспроводного сканера штрихкодов и для инвентаризации в 1С?

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

При переходе от проводных сканеров штрихкодов к более современным решениям, таким как беспроводные сканеры или терминалы сбора данных (ТСД), многие пользователи задаются вопросом об их универсальности. Особенно актуален вопрос, может ли одно устройство, ТСД, выполнять как функции оперативного сканирования товаров с мгновенным добавлением их в рабочий документ 1С, так и использоваться для более масштабных задач, например, инвентаризации. Разберем эту ситуацию подробнее, чтобы выяснить, какие возможности предоставляют современные ТСД и как их эффективно интегрировать с системой 1С.

Изначально задача заключалась в замене проводного сканера, используемого для карт лояльности и ценников, на беспроводной аналог. Цель — сканировать товары непосредственно с торгового зала и мгновенно добавлять их в заказ в 1С:Управление торговлей 11.4 (УТ 11.4). Затем возникла идея приобрести ТСД для удобства проведения инвентаризаций. Возник резонный вопрос: нужно ли покупать два разных устройства (беспроводной сканер и ТСД) или ТСД может объединить обе функции? Особенно интересует возможность работы ТСД в режиме «беспроводного сканера», когда отсканированный штрихкод тут же, в реальном времени, добавляет позицию в Рабочее место кассира (РМК) в 1С.

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

Рассмотрим подробнее основные подходы к интеграции ТСД с 1С и реализации желаемого функционала.

1. Использование мобильной платформы 1С:Предприятие

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

  1. Принцип работы: Мы устанавливаем на ТСД мобильную платформу 1С:Предприятие, а затем развертываем на ней мобильную конфигурацию или приложение, адаптированное для наших задач. Это приложение подключается к основной базе 1С (например, УТ 11.4) через HTTP-сервисы, работая в онлайн-режиме.

  2. Преимущества:

    • Прямая интеграция: Мобильное приложение напрямую взаимодействует с вашей рабочей базой 1С через HTTP-сервисы, что обеспечивает оперативность и актуальность данных.
    • Онлайн-режим: Вы можете видеть результаты своих действий (сканирование, добавление товара) мгновенно на экране ТСД, получая обратную связь. Это критически важно, чтобы избежать ошибок и понять, что товар добавился или есть ограничения.
    • Поддержка встроенного сканера: Мобильная платформа 1С поддерживает подключение встроенных сканеров штрихкодов ТСД. Для этого используются стандартные механизмы работы с подключаемым оборудованием, аналогичные тем, что применяются для обычных рабочих мест. Вам не нужно изобретать велосипед для взаимодействия с аппаратной частью ТСД.
    • Адаптированный интерфейс: Для удобной работы на небольших сенсорных экранах ТСД можно создать сильно облегченный интерфейс, адаптированный под конкретные задачи (сбор заказа, инвентаризация, приемка). Это может быть отдельный профиль пользователя или специализированная мобильная конфигурация (так называемая "мобильная конфа").
    • Автоматические обновления: Конфигурация мобильного приложения может автоматически обновляться при входе в систему, что упрощает поддержку.
  3. Реализация:

    Начните с изучения возможностей мобильной платформы 1С и готового мобильного клиента для УТ 11.4. Возможно, потребуется создать упрощенный интерфейс для пользователей ТСД:

    
    // Пример кода для обработки сканирования в мобильном приложении 1С
    &НаКлиенте
    Процедура ПриПолученииШтрихкода(Штрихкод, ОбъектОснование)
        Если ЗначениеЗаполнено(Штрихкод) Тогда
            // Отправляем штрихкод на сервер для обработки
            НачатьОжидание("Поиск товара...");
            Результат = ОтсканироватьТоварНаСервере(Штрихкод);
            ЗакончитьОжидание();
    
            Если Результат.Успех Тогда
                // Обновляем данные на форме, добавляем товар в список
                Элементы.ТаблицаТоваров.ТекущиеДанные.Номенклатура = Результат.Номенклатура;
                Элементы.ТаблицаТоваров.ТекущиеДанные.Количество = 1;
                // ... добавить другие данные
            Иначе
                ПоказатьПредупреждение(, "Ошибка: " + Результат.Сообщение);
            КонецЕсли;
        КонецЕсли;
    КонецПроцедуры
    
    &НаСервереБезКонтекста
    Функция ОтсканироватьТоварНаСервере(Штрихкод)
        Результат = Новый Структура("Успех, Сообщение, Номенклатура, Цена");
        Результат.Успех = Ложь;
        // Здесь происходит поиск номенклатуры по штрихкоду
        // Используем стандартные механизмы 1С для поиска по ШК
        Номенклатура = Справочники.Номенклатура.НайтиПоШтрихкоду(Штрихкод); 
    
        Если Номенклатура = Неопределено Тогда
            Результат.Сообщение = "Товар со штрихкодом " + Штрихкод + " не найден.";
        Иначе
            Результат.Успех = Истина;
            Результат.Номенклатура = Номенклатура;
            // Получение цены товара, например
            Результат.Цена = УправлениеЦенообразованием.ПолучитьЦенуНоменклатуры(Номенклатура);
        КонецЕсли;
        Возврат Результат;
    КонецФункции
    

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

2. Работа по протоколу удаленного рабочего стола (RDP)

Этот метод предполагает, что ТСД используется как обычный тонкий клиент для подключения к серверу, где запущена полноценная база 1С.

  1. Принцип работы: На ТСД устанавливается RDP-клиент (практически любое современное ТСД на Android его поддерживает). Через этот клиент вы подключаетесь к серверу 1С, и на экране ТСД отображается интерфейс 1С, как если бы вы работали за обычным компьютером.

  2. Преимущества:

    • Универсальность: Вам не нужно разрабатывать отдельное мобильное приложение или адаптировать конфигурацию под мобильную платформу. Вы используете тот же интерфейс 1С, что и на стационарных рабочих местах. Это означает, что если сегодня у вас ТСД на Android, а завтра на другой ОС, RDP-клиент будет работать везде, где он есть.
    • Простота настройки: Для самого ТСД достаточно лишь установить RDP-клиент и настроить подключение.
  3. Недостатки:

    • Интерфейс: Основная проблема – это интерфейс. Полноценная 1С не оптимизирована для маленьких сенсорных экранов. Могут появляться полосы прокрутки, кнопки будут слишком мелкими, а ввод данных с экранной клавиатуры может быть неудобным. Хотя масштабирование может помочь, идеальной работы ожидать не стоит.
    • Лицензирование: Для каждого RDP-подключения к серверу Windows Server требуются отдельные клиентские лицензии (CAL), что может увеличить общие затраты.
    • Производительность: Работа по RDP может быть менее отзывчивой по сравнению с нативным мобильным приложением, особенно при плохом соединении.
  4. Реализация сканирования:

    ТСД, работая в режиме эмуляции клавиатуры, может пробрасывать считанный штрихкод в RDP-сессию. 1С воспримет его как ввод с клавиатуры. Если вы стоите в поле для ввода штрихкода в документе 1С (например, в РМК), то отсканированный ШК будет туда введен. Это может быть реализовано двумя способами:

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

    2. Через промежуточное хранилище (Справочник/Регистр): Более сложный, но надежный вариант для реализации "беспроводного сканера", если прямой ввод не подходит или требуется асинхронная обработка. Создадим в 1С новый объект, например, СправочникСканирований или РегистрСведений. На ТСД через RDP вы открываете простейшую форму, которая при сканировании штрихкода добавляет его в этот справочник/регистр. На рабочем месте кассира в РМК настраиваем регламентное задание или кнопку, которая периодически (или по требованию) сканирует этот справочник на наличие новых записей, обрабатывает штрихкоды (находит товар, добавляет в чек) и удаляет обработанные записи. Этот метод гарантирует, что данные не потеряются, даже если будет заминка в связи или обработке.

      
      // Пример структуры регистра сведений "ОтсканированныеШтрихкоды"
      // Измерения:
      //   Штрихкод (Строка, индексируемая)
      //   РабочееМесто (СправочникСсылка.РабочиеМестаКассиров, индексируемое)
      // Ресурсы:
      //   ДатаВремяСканирования (Дата, индексируемое)
      //   Пользователь (СправочникСсылка.Пользователи)
      
      // Пример записи в регистр сведений из формы ТСД (через RDP)
      &НаКлиенте
      Процедура ПослеСканирования(Штрихкод)
          Если ЗначениеЗаполнено(Штрихкод) Тогда
              ЗаписатьШтрихкодВРегистрНаСервере(Штрихкод);
          КонецЕсли;
      КонецПроцедуры
      
      &НаСервереБезКонтекста
      Функция ЗаписатьШтрихкодВРегистрНаСервере(Штрихкод)
          НаборЗаписей = РегистрыСведений.ОтсканированныеШтрихкоды.СоздатьНаборЗаписей();
          НаборЗаписей.Отбор.Штрихкод.Установить(Штрихкод);
          НаборЗаписей.Прочитать();
      
          // Проверяем, может быть этот ШК уже есть
          Если НаборЗаписей.Количество() = 0 Тогда
              НоваяЗапись = НаборЗаписей.Добавить();
              НоваяЗапись.Штрихкод = Штрихкод;
              НоваяЗапись.РабочееМесто = ПараметрыСеанса.ТекущееРабочееМесто; // Или другое определение
              НоваяЗапись.ДатаВремяСканирования = ТекущаяДата();
              НоваяЗапись.Пользователь = Пользователи.ТекущийПользователь();
              НаборЗаписей.Записать();
          КонецЕсли;
          Возврат Истина;
      КонецФункции
      
      // Пример чтения и обработки в РМК
      &НаСервереБезКонтекста
      Функция ОбработатьОтсканированныеШтрихкоды()
          Запрос = Новый Запрос;
          Запрос.Текст = 
          "ВЫБРАТЬ
          |    ОтсканированныеШтрихкоды.Штрихкод
          |ИЗ
          |    РегистрСведений.ОтсканированныеШтрихкоды КАК ОтсканированныеШтрихкоды
          |ГДЕ
          |    ОтсканированныеШтрихкоды.РабочееМесто = &ТекущееРабочееМесто
          |УПОРЯДОЧИТЬ ПО
          |    ОтсканированныеШтрихкоды.ДатаВремяСканирования";
      
          Запрос.УстановитьПараметр("ТекущееРабочееМесто", ПараметрыСеанса.ТекущееРабочееМесто); // Или берем из настроек РМК
      
          Выборка = Запрос.Выполнить().Выбрать();
                          
          СписокОбработанныхШтрихкодов = Новый СписокЗначений;
          Пока Выборка.Следующий() Цикл
              // Здесь логика добавления товара в текущий чек РМК
              // Например: РМКСервер.ДобавитьТоварПоШтрихкоду(Выборка.Штрихкод);
              Сообщить("Обработан штрихкод: " + Выборка.Штрихкод);
              СписокОбработанныхШтрихкодов.Добавить(Выборка.Штрихкод);
          КонецЦикла;
      
          // Удаляем обработанные штрихкоды
          Если СписокОбработанныхШтрихкодов.Количество() > 0 Тогда
              НаборЗаписей = РегистрыСведений.ОтсканированныеШтрихкоды.СоздатьНаборЗаписей();
              Для Каждого ШК Из СписокОбработанныхШтрихкодов Цикл
                  НоваяЗапись = НаборЗаписей.Добавить(); // Добавляем пустую запись для удаления
                  НоваяЗапись.Штрихкод = ШК.Значение;
                  НоваяЗапись.РабочееМесто = ПараметрыСеанса.ТекущееРабочееМесто;
              КонецЦикла;
              НаборЗаписей.Очистить(); // Удаляем записи по отбору
              НаборЗаписей.Записать();
          КонецЕсли;
      КонецФункции
      

3. Разработка кастомного мобильного приложения (на Flutter или других фреймворках)

Для тех, кто ищет максимальную гибкость и точное соответствие своим бизнес-процессам, а также имеет ресурсы для разработки, создание собственного нативного мобильного приложения является привлекательным вариантом.

  1. Принцип работы: Вы разрабатываете мобильное приложение для Android с нуля, используя современные фреймворки (например, Flutter, React Native, Kotlin). Это приложение обменивается данными с вашей базой 1С через специально разработанные HTTP-сервисы.

  2. Преимущества:

    • Максимальная адаптация: Вы можете создать именно тот интерфейс и функционал, который вам нужен, без лишних элементов и ограничений типовых решений. Это гарантирует идеальную подгонку под ваши конкретные задачи (набор заказа, инвентаризация, приемка) и особенности работы ваших сотрудников.
    • Оптимизация производительности: Нативное приложение, как правило, работает быстрее и более плавно, чем RDP-клиент или универсальные мобильные решения.
    • Независимость от лицензий RDP: Вам не нужны дополнительные лицензии на удаленный доступ.
    • Нативный опыт: Приложение будет работать как "родное" для Android, с полной поддержкой всех функций ТСД (сканер, камера, GPS при необходимости).
  3. Недостатки:

    • Сложность и стоимость разработки: Это самый трудоемкий и дорогостоящий подход. Требуются глубокие знания мобильной разработки, а также разработки HTTP-сервисов в 1С.
    • Поддержка: Вы берете на себя полную ответственность за поддержку и развитие приложения.
  4. Реализация:

    Начните с разработки HTTP-сервисов в 1С, которые будут предоставлять необходимые данные (список товаров, цены, остатки) и принимать команды (добавить товар в заказ, сохранить инвентаризацию). Затем разрабатывайте мобильное приложение, которое будет взаимодействовать с этими сервисами. Для сканирования используйте API, предоставляемое производителем ТСД, или стандартные библиотеки Android для работы с камерой/сканером.

    
    // Пример HTTP-сервиса в 1С для получения информации о товаре по штрихкоду
    // Метод GET
    // URL: /api/goods/barcode/{barcode}
    // Возвращает JSON с данными товара
    
    // В модуле HTTP-сервиса:
    Функция ПолучитьТоварПоШтрихкоду(Запрос)
        Штрихкод = Запрос.ПараметрыЗапроса.Штрихкод; // Получаем из URL
    
        Ответ = Новый HTTPСервисОтвет(200);
        Если ЗначениеЗаполнено(Штрихкод) Тогда
            Номенклатура = Справочники.Номенклатура.НайтиПоШтрихкоду(Штрихкод);
            Если Номенклатура <> Неопределено Тогда
                // Сериализуем данные номенклатуры в JSON
                ДанныеТовара = Новый Структура("Код, Наименование, Цена");
                ДанныеТовара.Код = Номенклатура.Код;
                ДанныеТовара.Наименование = Номенклатура.Наименование;
                ДанныеТовара.Цена = УправлениеЦенообразованием.ПолучитьЦенуНоменклатуры(Номенклатура); // Пример получения цены
    
                Ответ.УстановитьТелоИзСтроки(
                    СериализаторJSON.Записать(ДанныеТовара),
                    КодировкаТекста.UTF8,
                    "application/json"
                );
            Иначе
                Ответ.КодСостояния = 404;
                Ответ.УстановитьТелоИзСтроки("{""error"":""Товар не найден""}", КодировкаТекста.UTF8, "application/json");
            КонецЕсли;
        Иначе
            Ответ.КодСостояния = 400;
            Ответ.УстановитьТелоИзСтроки("{""error"":""Не указан штрихкод""}", КодировкаТекста.UTF8, "application/json");
        КонецЕсли;
        Возврат Ответ;
    КонецФункции
    
    // Пример HTTP-сервиса в 1С для создания нового документа заказа
    // Метод POST
    // URL: /api/orders/create
    // Принимает JSON с составом заказа
    
    // В модуле HTTP-сервиса:
    Функция СоздатьЗаказ(Запрос)
        ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
        ДанныеЗаказа = СериализаторJSON.Прочитать(ТелоЗапроса);
    
        // ... Здесь логика создания документа "Заказ клиента" или "Реализация товаров и услуг"
        // на основе полученных данных (список товаров, количество, клиент и т.д.)
        // Пример:
        // НовыйДокумент = Документы.ЗаказКлиента.СоздатьДокумент();
        // НовыйДокумент.Дата = ТекущаяДата();
        // НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоКоду(ДанныеЗаказа.КодКлиента);
        // Для Каждого СтрокаТовара Из ДанныеЗаказа.Товары Цикл
        //    НоваяСтрока = НовыйДокумент.Товары.Добавить();
        //    НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(СтрокаТовара.Код);
        //    НоваяСтрока.Количество = СтрокаТовара.Количество;
        //    // ...
        // КонецЦикла;
        // НовыйДокумент.Записать();
    
        Ответ = Новый HTTPСервисОтвет(200);
        Ответ.УстановитьТелоИзСтроки("{""success"":""Заказ создан""}", КодировкаТекста.UTF8, "application/json");
        Возврат Ответ;
    КонецФункции
    

    Этот подход дает полную свободу в реализации бизнес-логики и пользовательского интерфейса на ТСД.

Важные аспекты и рекомендации при выборе решения

  1. Обратная связь на ТСД: Независимо от выбранного метода, критически важно, чтобы ТСД предоставлял оперативную обратную связь. Продавец или кладовщик должен видеть на экране ТСД название товара, его цену, количество и любую другую необходимую информацию сразу после сканирования. Это предотвратит ошибки, особенно при большом объеме позиций или при работе с несколькими похожими товарами. Просто "пищащий" сканер без дисплея может быть неудобен и чреват ошибками.

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

  3. Оптимизация интерфейса: Если вы выбираете RDP, будьте готовы к тому, что стандартный интерфейс 1С будет неудобен на маленьком сенсорном экране. Подумайте о создании упрощенных рабочих мест в 1С, где элементы управления будут большими и удобными для нажатия пальцем. Если же вы используете мобильную платформу 1С или кастомное приложение, у вас будет больше контроля над дизайном.

  4. Постепенное внедрение: Начните с реализации самого необходимого функционала (например, сбор заказа или простая инвентаризация), а затем постепенно расширяйте возможности ТСД.

  5. Выбор между онлайн и офлайн: Хотя автор склоняется к онлайн-работе, для некоторых операций (например, инвентаризация на большом складе с плохим покрытием Wi-Fi) может быть предпочтительнее гибридный режим – сбор данных офлайн и последующая синхронизация.

Таким образом, современные ТСД на Android способны гибко интегрироваться с 1С и выполнять широкий спектр задач, от оперативного сканирования до проведения комплексных инвентаризаций. Выбор конкретного метода интеграции (мобильная платформа 1С, RDP или кастомное приложение) зависит от ваших требований к оперативности, бюджету, наличию ресурсов для разработки и желаемой степени адаптации интерфейса.

← На главную