Как подключить ТСД на базе Windows Mobile к 1С:Предприятию?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

Ограничения платформы Windows Mobile при работе с 1С

Прежде чем выбирать способ реализации обмена, проанализируем базовые технические ограничения операционной системы:

  1. Отсутствие стандартных клиентов платформы: Полноценные тонкий и толстый клиенты «1С:Предприятия» никогда не выпускались под Windows CE и Windows Mobile. Программный продукт «1С:Предприятие 8. Расширение для карманных компьютеров» давно снят с поддержки и не может взаимодействовать с современными версиями конфигураций.
  2. Невозможность запуска стандартного мобильного приложения: Современная мобильная платформа «1С:Предприятие» и мобильный клиент поддерживают исключительно операционные системы Android, iOS и современные настольные выпуски Windows.
  3. Ограничения веб-клиента: Штатный веб-клиент 1С требует поддержки актуальных стандартов HTML5, CSS3 и современного синтаксиса JavaScript. Встроенный браузер Internet Explorer Mobile и старые версии Opera под Windows Mobile 6.5 не соответствуют этим требованиям, что приводит к критическим ошибкам при попытке открыть опубликованную информационную базу.

Вариант 1. Работа через удаленный рабочий стол (RDP) и исправление ошибок передачи штрихкодов

Самый распространенный и быстрый путь — запуск сеанса 1С на терминальном сервере Windows Server через RDP-клиент терминала. Однако при таком подходе часто возникает критическая проблема: сканер некорректно передает штрихкоды, подменяет буквы или «теряет» символы.

Выясним причину этой неполадки. По умолчанию модуль считывания ТСД работает в режиме эмуляции клавиатуры (keyboard wedge). При передаче через RDP-канал высокая скорость ввода данных приводит к рассинхронизации пакетов, а активная русская раскладка на стороне сервера искажает латинские символы и управляющие префиксы.

Для устранения этих сбоев выполним следующие действия:

  1. Настройка межсимвольной задержки: В системной утилите настройки сканера на терминале Casio зададим параметр Inter-Character Delay (межсимвольная задержка) в интервале 5–15 мс. Это позволяет терминальной сессии корректно буферизировать поток входящих символов.
  2. Перевод сканера в режим COM-порта с пробросом в сессию: В конфигураторе сканера Casio изменим вывод данных с клавиатурного интерфейса на виртуальный COM-порт. В свойствах ярлыка RDP активируем проброс последовательных портов на сервер. В самой конфигурации 1С подключим сканер как стандартное торговое оборудование через компоненту, настроенную на перенаправленный COM-порт. Это полностью устраняет зависимость от раскладки клавиатуры сервера.
  3. Использование буфера обмена: В специализированных RDP-клиентах настроим режим вставки отсканированного значения через Clipboard с последующей эмуляцией клавиши ввода (Enter).

Вариант 2. Разработка нативного интерфейса на .NET Compact Framework и веб-сервисы 1С

Для создания полноценного интерфейса на самом ТСД используют среду разработки Visual Studio и платформу .NET Compact Framework 2.0/3.5 на языке C#. Приложение терминала работает непосредственно с оборудованием сканера через нативные SDK Casio, а данные получает и отправляет в 1С через HTTP-сервисы или Web-сервисы (SOAP).

При проектировании обмена по HTTPS учтем, что старая версия Windows Mobile не поддерживает современные протоколы шифрования TLS 1.2 и TLS 1.3. Поэтому обмен с сервером 1С рекомендуется организовывать внутри защищенного периметра локальной сети по протоколу HTTP либо использовать промежуточный обратный прокси-сервер.

Посмотрим на пример обработки таблицы данных на стороне ТСД. Для быстрой фильтрации строк с неотсканированными товарами на мобильном устройстве применим DataView с наложением условия:


DataView firstView = new DataView(myTable);
// Установим фильтр, чтобы показывать только те позиции, которые еще нужно отсканировать
firstView.RowFilter = "Осталось>0";
dataGrid1.DataSource = firstView;
dataGrid1.TableStyles.Clear();
dataGrid1.TableStyles.Add(new DataGridTableStyle());
dataGrid1.TableStyles[0].MappingName = "myTable";

// Настроим ширину колонок для экрана терминала
GridColumnStylesCollection GSC = dataGrid1.TableStyles[0].GridColumnStyles;
GSC[0].Width = 70;
GSC[1].Width = 20;
GSC[2].Width = 70;
GSC[3].Width = 40;
GSC[4].Width = 20;
GSC[5].Width = 20;
GSC[6].Width = 20;

dataGrid1.Focus();
dataGrid1.CurrentCell = new DataGridCell(0, 0);

Разберем позиционирование на нужной строке списка по событию сканирования штрихкода. Для управления выделением используем объект CurrencyManager:


void PosInRow(DataRow DR)
{
    CurrencyManager currencyManager = (CurrencyManager)BindingContext[dataGrid1.DataSource];
    DataView DV = (DataView)dataGrid1.DataSource;
    int count = DV.Count;
    for (int i = 0; i < count; i++)
    {
        if (DV[i].Row == DR)
        {
            currencyManager.Position = i;
            break;
        }
    }
}

Для сортировки элементов по нажатию на заголовок колонки таблицы применим метод HitTest элемента управления DataGrid:


private void dataGrid1_MouseDown(object sender, MouseEventArgs e)
{
    System.Windows.Forms.DataGrid.HitTestInfo myHitTest;
    myHitTest = dataGrid1.HitTest(e.X, e.Y);

    if ((myHitTest.Column == -1) && (myHitTest.Row == -1))
        return;

    CurrencyManager currencyManager = (CurrencyManager)BindingContext[dataGrid1.DataSource];
    DataView DV = (DataView)dataGrid1.DataSource;

    // Проверяем клик по заголовку колонки
    if ((myHitTest.Column > -1) && (myHitTest.Row == -1))
    {
        GridColumnStylesCollection GSC = dataGrid1.TableStyles[0].GridColumnStyles;
        DV.Sort = GSC[myHitTest.Column].MappingName;
        return;
    }
}

Для обмена структурированными данными между C#-клиентом и 1С эффективнее всего использовать сериализацию и десериализацию объектов DataSet в формат XML. На стороне 1С входящий XML разбирается стандартными средствами платформы с помощью объектов ЧтениеXML и ФабрикаXDTO, после чего формируются необходимые учетные документы: ПриходнаяНакладная, РеализацияТоваровУслуг или складские ордера.

Вариант 3. Использование готового специализированного ПО

Если разработка собственного клиента на C# нецелесообразна, практичным решением является интеграция готовых платформ сбора данных (например, Mobile Logistics или аналогичных складских клиентов), которые сохранили обратную совместимость с операционными системами семейств Windows CE и Windows Mobile. Они включают в себя готовый клиент для ТСД с драйвером сканера Casio и модули интеграции для типовых конфигураций 1С, обеспечивая стабильную работу онлайн через Wi-Fi или офлайн через синхронизацию таблиц.

← На главную