Простой скрипт для работы с ТСД

Оборудование - Терминал сбора данных

Небольшой скрипт, исполняемый в среде OneScript, реализует работу TCP-сервера с telnet-клиентом ТСД. Позволяет проводить инвентаризацию товара по штрих кодам с сохранением результатов и протокола в реальном времени на компьютер. Для работы нужен ТСД, имеющий Wi-Fi интерфейс и telnet-клиент.

Как это работает

Для запуска (компиляции) скрипта потребуется OneScript, инструкция по его использованию здесь.

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

При запуске скрипт создает файл результатов и файл протокола. Имена файлов содержат текущую дату и код магазина, указанный как параметр при запуске скрипта. Протокол работы ТСД также отображается в окне командной строки, где запущен скрипт.

Скрипт работает с штрих-кодами EAN13. Каждый промаркированный товар имеет свой уникальный штрих код, состоящий из кода номенклатуры и порядкового номера. Для определения наименования номенклатуры, скрипт подгружает данные из xml файла выгрузки справочника номенклатуры.

Сканер ТСД отправляет отсканированный код скрипту, а он возвращает текущее насчитанное количество данной номенклатуры. В случае повторного сканирования кода, на терминал выводится предупреждающий сигнал и сообщение о повторе кода, количество не увеличивается. Код также можно ввести вручную с клавиатуры ТСД.

В процессе работы можно просмотреть текущие результаты подсчета. Для этого на клавиатуре ТСД нужно нажать 1 и Enter. Временно отключиться от сервера - 2, завершить работу скрипта - 9. В случае перезапуска скрипта, он подгрузит сохраненные результаты работы.

Скрипт устанавливает только одно соединение, поэтому при необходимости одновременной работы с несколькими ТСД, можно запускать несколько экземпляров скрипта на разных портах. Скрипт тестировался с клиентом TelnetCE в режиме эмуляции VT200 и кодировкой windows-1251.

Немного кода

Процедура ЗапуститьСервер(Порт)
	
	Сервер = Новый TCPСервер(Порт);
	Сервер.Запустить();
	ПротоколСообщить("Сервер запущен");
	Пока НЕ ОстановитьСервер Цикл
		Соединение = Неопределено;
		Пока Соединение = Неопределено Цикл
			Соединение = Сервер.ОжидатьСоединения(100);
		КонецЦикла;
		Запрос = "";
		ЗапросСтрока = "";
		ПротоколСообщить("Соединение установлено");
		Пока Соединение.Активно И НЕ ОстановитьСервер Цикл
			Если Запрос = "" Тогда
				Попытка
					ЗапросСтрока = ЗапросСтрока + Соединение.ПрочитатьСтроку("windows-1251");
				Исключение
					Продолжить
				КонецПопытки;
				Если НЕ Прав(ЗапросСтрока, 1) = Символы.ВК Тогда
					Продолжить
				КонецЕсли;
				Запрос = СтрЗаменить(ЗапросСтрока, Символы.ПС, "");
				Запрос = СтрЗаменить(Запрос, Символы.ВК, "");
				Запрос = СтрЗаменить(Запрос, "A", "");
				ЗапросСтрока = "";
				ТекВремя = Формат(ТекущаяДата(), "ДЛФ=T");
				Если СтрДлина(Запрос) = 1 Тогда
					Если Запрос = "1" Тогда
						ПоказатьРезультаты();
					ИначеЕсли Запрос = "2" Тогда
						Прервать;
					ИначеЕсли Запрос = "9" Тогда
						ОстановитьСервер = Истина;
					КонецЕсли;
					Запрос = "";
				ИначеЕсли СтрДлина(Запрос) = 13 Тогда
					Код = Сред(Запрос, 2, 6);
					ТекКоличество = Количество.Получить(Код);
					Если НЕ ТекКоличество = Неопределено Тогда
						ТекКоличество = 1 + ТекКоличество;  
						Ответ = "" + ТекКоличество + " - " + Номенклатура.Получить(Код) + " - " + Запрос;
						НайтиПовтор = ШхКоды.Получить(Запрос);
						Если НЕ ЗначениеЗаполнено(НайтиПовтор) Тогда
							Количество.Вставить(Код, ТекКоличество);
							ШхКоды.Вставить(Запрос, ТекВремя);
							Результаты.ЗаписатьСтроку(Запрос);
						Иначе
							Ответ = Символ(7) + "Повтор кода: " + Запрос + " (" + НайтиПовтор + ")"; 
						КонецЕсли;
					Иначе
						Ответ = Символ(7) + "Неверный / неизвестный код: " + Запрос;
					КонецЕсли
				Иначе
					Ответ = Символ(7) + "Неверный код / команда: " + Запрос;
				КонецЕсли;
			Иначе
				Попытка
					ОтправитьОтвет(Ответ);
					Запрос = "";
				Исключение
				КонецПопытки;
			КонецЕсли
		КонецЦикла;
		Соединение.Закрыть();
		ПротоколСообщить("Соединение закрыто");
	КонецЦикла;
	Сервер.Остановить();
	ПротоколСообщить("Сервер остановлен");

КонецПроцедуры

Как использовать

Данный скрипт не является универсальным решением, т.к. писался под конкретную задачу. Можно взять его за основу и немного доработав, например, передавать данные напрямую в конфигурацию 1С.

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

Наименование Файл Версия Размер
ws.os
.os 9,77Kb
02.03.17
0
.os 9,77Kb Скачать

См. также

В этой теме еще нет сообщений.
Оставьте свое сообщение