Терминалы сбора данных (ТСД) под управлением операционной системы Windows Mobile 6.5 (например, Casio IT300) продолжают активно использоваться на складах для приемки, отгрузки и инвентаризации. Однако при попытке подключить такое устройство к современной инфраструктуре 1С разработчики сталкиваются с рядом технических ограничений: отсутствие нативного мобильного приложения, несовместимость встроенных браузеров с веб-клиентом 1С и трудности при передаче штрихкодов. Разберем детально архитектурные ограничения и рассмотрим рабочие варианты интеграции.
Прежде чем выбирать способ реализации обмена, проанализируем базовые технические ограничения операционной системы:
Самый распространенный и быстрый путь — запуск сеанса 1С на терминальном сервере Windows Server через RDP-клиент терминала. Однако при таком подходе часто возникает критическая проблема: сканер некорректно передает штрихкоды, подменяет буквы или «теряет» символы.
Выясним причину этой неполадки. По умолчанию модуль считывания ТСД работает в режиме эмуляции клавиатуры (keyboard wedge). При передаче через RDP-канал высокая скорость ввода данных приводит к рассинхронизации пакетов, а активная русская раскладка на стороне сервера искажает латинские символы и управляющие префиксы.
Для устранения этих сбоев выполним следующие действия:
Для создания полноценного интерфейса на самом ТСД используют среду разработки 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, после чего формируются необходимые учетные документы: ПриходнаяНакладная, РеализацияТоваровУслуг или складские ордера.
Если разработка собственного клиента на C# нецелесообразна, практичным решением является интеграция готовых платформ сбора данных (например, Mobile Logistics или аналогичных складских клиентов), которые сохранили обратную совместимость с операционными системами семейств Windows CE и Windows Mobile. Они включают в себя готовый клиент для ТСД с драйвером сканера Casio и модули интеграции для типовых конфигураций 1С, обеспечивая стабильную работу онлайн через Wi-Fi или офлайн через синхронизацию таблиц.