gifts2017

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

Опубликовал Сергей Смирнов (Serginio) в раздел Оборудование - Терминал сбора данных

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
ТестТСД
.zip 141,74Kb
25.05.16
2
.zip 141,74Kb 2 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алексей (Операция1Ы) 18.05.16 20:36
Снимаю шляпу, определенно плюс за концепцию.
2. Сергей Смирнов (Serginio) 18.05.16 20:42
3. Игорь Богданов (avz_1C) 19.05.16 13:47
Актуально.
Плюс.
Спасибо.
4. Сергей Смирнов (Serginio) 19.05.16 14:02
5. igor_nat (igor_nat) 07.08.16 10:33
Очень интересная и полезная тема. Автору спасибо большое. Искал по интернету а тут есть Может есть примеры включения,отключения сканера
получение данных со сканера тсд.
различных моделей тоже будет интересно
6. Сергей Смирнов (Serginio) 07.08.16 11:57
В данном примере сканер как клавиатура. Есть модели, где есть специальное апи с событием.
В настройках для каждой модели можно настраивать, что куда и когда
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа