Использование ТСД на WM 6 как беспроводной сканер с получением данных из 1С

Как вариант печати этикеток на мобильный принтер, получение информации по ШК.
Можно легко расширить до более сложных задач. В том числе на 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
КонецФункции 

 

В Папке Для1С лежат файлы NetObjetToIDispatch45.dll и RegAsm.bat и внешняя обработка ТестТСД.erf 
 
Скопируйте в общедоступную папку и зарегистрируйте, запустив от администратора RegAsm.bat
 
В Папке ТСДкакСканер лежат файлы ТСДкакСканер.exe и ТСДкакСканер.exe.config, их нужно скопировать на КПК, например, в Programm Files
 
Но перед тем. как копировать, измените ТСДкакСканер.exe.config
<add key=»ServerName»  value=»10.250.0.1″ /> 
<add key=»ServerPort» value=»6891″ /> 
 
ServerName на IpAddress компьютера, на котором будет загружаться обработка. Порт должен быть таким, как в обработке.
 
Запускаете обработку, нажимаете на кнопку Запустить, и можно обмениваться данными с ТСД, сканировать как эмулятор  клавиатуры, набирать ШК вручную.
 
Ссылки на подключение эмулятора к сети
 
Ссылка на SDK

14 Comments

  1. Операция1Ы

    Снимаю шляпу, определенно плюс за концепцию.

    Reply
  2. Serginio

    (1) Спасибо!

    Reply
  3. avz_1C

    Актуально.

    Плюс.

    Спасибо.

    Reply
  4. Serginio

    (3) Спасибо!

    Reply
  5. igor_nat

    Очень интересная и полезная тема. Автору спасибо большое. Искал по интернету а тут есть Может есть примеры включения,отключения сканера

    получение данных со сканера тсд.

    различных моделей тоже будет интересно

    Reply
  6. Serginio

    В данном примере сканер как клавиатура. Есть модели, где есть специальное апи с событием.

    В настройках для каждой модели можно настраивать, что куда и когда

    Reply
  7. wmonref1

    Сергей Смирнов, как думаете, ТСД на Windows 10 будет работать?

    Спасибо!

    Reply
  8. Serginio

    Работает. Там внутри ТСД на WM 6 можно и к вэб сервисам подключаться и обмен по Tcp/ip.

    Единственно это то, что нужно использовать для WM 6 VS 2008 и при этом нельзя пользоваться эмулятором, так как Win 10 не поддерживает Virtual PC 2007

    Reply
  9. wmonref1

    (8) А что, использование эмулятора обязательна?

    Reply
  10. Serginio

    Нет конечно. Ты через шнурок и мобильный центр подключаешься для отладки

    Эмуляторы нужны когда девайса нет.

    Reply
  11. wmonref1

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

    Reply
  12. Serginio

    Моя обработка нужна для работы в полу ОнЛайн.

    Для РДП ничего не нужно, так как ты работаешь с удаленным экраном.

    Минусы РДП, что нужен постоянный Онлайн и нужны формы учитывающие размер и с разрешение ТСД

    Ну и язык C# значительно мощнее 1С

    Reply
  13. Xershi

    Для справки для обмена сообщениями по сети в конфигурацию придется встроить 2 компоненты?

    Reply
  14. Serginio

    Ну нужна только одна https://infostart.ru/public/238584/

    А она уже использует любые .Net классы

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *