Можно легко расширить до более сложных задач. В том числе на Xamarin под Android и IOS.
Сейчас много старых ТСД, которые можно использовать в этом варианте. В отличие от беспроводных сканеров мы можем получить информацию о товаре. Подтвердить действия и т.д.
Основное в разработке — это модуль обмена по TCP/IP.
Применен протокол со сжатием данных, так как это актуально в медленных сетях Wi-Fi, особенно вдали от точки.
Конечно можно использовать и Вэб сервисы, но часто нужно настраивать мобильный принтер на машире оператора, или делать авбор данных в ручную с локального компьютера.
Применение в 1С такое.
&НаКлиенте
Процедура Запустить(Команда)
// Вставить содержимое обработчика.
Если TCPСервер=неопределено Тогда
TCPСервер= СоздатьСерверTCP();
КонецЕсли;
Событие=Врап.ПолучитьОбъектДляСобытийСПараметром(TCPСервер,"ПришлоСообщениеПоTCP");
ДобавитьОбработчик Событие.СобытиеСПараметром, ПолучениеДанныхПоTCP;
TCPСервер.ОткрытьАйПиПортСНомеромПорта(Отчет.Порт);
Элементы.ЗапуститьСерверTCPIP.Доступность=Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПолучениеДанныхПоTCP(Данные)
// Получаем данные в виде объекта у которого 2 свойства
// Команда Имя запроса строка
// Данные Строковое представление данных
Сообщить("Команда="+Данные.Команда);
Сообщить("Данные="+Данные.Данные);
Сообщить("ЕстьОтвет="+Данные.ЕстьОтвет);
// ТСД Посылает команду "СканированШК" и отсканированный ШК
Если Данные.Команда="СканированШК" Тогда
Шк=Данные.Данные;
// Получим данные по Номенклатуре и отправит данные ТСД
Ответ=ПолучениеДанныхПоШК(ШК);
TCPСервер.Ответить(Ответ);
возврат
КонецЕсли;
// Для других команд просто отправим текущее время и дату
Если Данные.ЕстьОтвет Тогда
Ответ="Ответ на команду "+Данные.Команда+"
|Данные "+Данные.Данные+"
|ВремяНаСервере="+XmlСтрока(ТекущаяДата());
TCPСервер.Ответить(Ответ);
КонецЕсли;
КонецПроцедуры
Вот исходники модуля передачи и приема данных по сети
Тестировал на эмуляторе.
Также удобно передавать данные сразу в сериализованном DataTable для универсальной обработки на TCL с фильтрами поиском и тд
Функция ПолучитьТипКолонкиДляДТ(Колонка) Экспорт
Тип=Колонка.ТипЗначения;
Если Тип=Неопределено Тогда
возврат "System.Object"
КонецЕсли;
Если тип.Типы().Количество()>1 Тогда
возврат "System.Object"
КонецЕсли;
Тип1=тип.Типы()[0];
Если Тип1=Тип("Число") Тогда
Квалификатор=Тип.КвалификаторыЧисла;
Если Квалификатор.РазрядностьДробнойЧасти>0 Тогда
возврат "System.Decimal"
КонецЕсли;
Разрядность=Квалификатор.Разрядность;
Если Разрядность<10 Тогда
возврат "System.Int32"
ИначеЕсли Разрядность<19 Тогда
возврат "System.Int64"
Иначе
возврат "System.Decimal"
КонецЕсли;
КонецЕсли;
Если Тип1=Тип("Строка") Тогда
возврат "System.String"
ИначеЕсли Тип1=Тип("Дата") Тогда
возврат "System.DateTime"
КонецЕсли;
return "System.Object"
КонецФункции
Функция СоздатьДТ(врап,Тз,ИмяТаблицы) Экспорт
Колонки=Тз.Колонки;
myTable=Врап.СоздатьОбъект("System.Data.DataTable, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",ИмяТаблицы);
DataColumn=Врап.ПолучитьТип("System.Data.DataColumn");
Columns= myTable.Columns;
КоличествоКолонок=Колонки.Количество();
Для каждого Колонка Из Колонки Цикл
colItem =Врап.СоздатьОбъект(DataColumn,Колонка.Имя, Врап.ПолучитьТип(ПолучитьТипКолонкиДляДТ(Колонка)));
Columns.Add(colItem);
КонецЦикла;
// rowArray =новый COMSafeArray("VT_VARIANT",КоличествоКолонок);//Врап.СоздатьМассив("System.Object",КоличествоКолонок);
Rows=myTable.Rows;
Для каждого стр Из Тз Цикл
Row = myTable.NewRow();
Для сч=0 По КоличествоКолонок-1 Цикл
сообщить(стр[сч]);
Row.set_Item(сч,стр[сч]);
КонецЦикла;
Сообщить(Row.ToString());
//Rows.Add(Row);
врап.ВыполнитьМетод(Rows,"Add",Row);
КонецЦикла;
возврат myTable
КонецФункции
<add key=»ServerPort» value=»6891″ />
Снимаю шляпу, определенно плюс за концепцию.
(1) Спасибо!
Актуально.
Плюс.
Спасибо.
(3) Спасибо!
Очень интересная и полезная тема. Автору спасибо большое. Искал по интернету а тут есть Может есть примеры включения,отключения сканера
получение данных со сканера тсд.
различных моделей тоже будет интересно
В данном примере сканер как клавиатура. Есть модели, где есть специальное апи с событием.
В настройках для каждой модели можно настраивать, что куда и когда
Сергей Смирнов, как думаете, ТСД на Windows 10 будет работать?
Спасибо!
Работает. Там внутри ТСД на WM 6 можно и к вэб сервисам подключаться и обмен по Tcp/ip.
Единственно это то, что нужно использовать для WM 6 VS 2008 и при этом нельзя пользоваться эмулятором, так как Win 10 не поддерживает Virtual PC 2007
(8) А что, использование эмулятора обязательна?
Нет конечно. Ты через шнурок и мобильный центр подключаешься для отладки
Эмуляторы нужны когда девайса нет.
(10) Сергей, я хочу подключиться с ТСД к серверу через РДП и сканировать ШК товаров прямо в 1С, в форме документа. Возможно ли это сделать с помощью вашей обработки?
Моя обработка нужна для работы в полу ОнЛайн.
Для РДП ничего не нужно, так как ты работаешь с удаленным экраном.
Минусы РДП, что нужен постоянный Онлайн и нужны формы учитывающие размер и с разрешение ТСД
Ну и язык C# значительно мощнее 1С
Для справки для обмена сообщениями по сети в конфигурацию придется встроить 2 компоненты?
Ну нужна только однаhttps://infostart.ru/public/238584/
А она уже использует любые .Net классы