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

10.05.18

Учетные задачи - Оптовая торговля

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

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

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

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

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

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

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

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

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

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

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

Немного кода

Процедура работы с клиентом:

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

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

 

Вторая версия скрипта:

Процедура ЗапуститьСервер(Порт)
	
	Сервер = Новый TCPСервер(Порт);
	Сервер.Запустить();
        ПротоколСообщить("Сервер запущен на порту: " + Порт);
        ПротоколСообщить("Дата инвентаризации: " + ФорматДата);

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

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

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

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

ТСД OneScript инвентаризация TCP telnet

См. также

SALE! 20%

Автоматический заказ поставщику в 1С: загрузка прайсов и анализ цен поставщиков для УТ 10.3, УТ 11, КА2, УНФ, УПП, ERP, Розница 2

Бюджетирование и планирование Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Анализ продаж Платформа 1С v7.7 Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

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

28500 22800 руб.

21.04.2017    90203    105    39    

191

ККТ-ОНЛАЙН 54-ФЗ: Обработка для работы онлайн касс АТОЛ, ШТРИХ, VIKI PRINT и т.д. МАРКИРОВКА + ЭКВАЙРИНГ + БЕСПЛАТНЫЙ ДЕМО

ККМ Кассовые операции Розничная торговля Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия 1.6 1С:Бухгалтерия автономного учреждения 1С:CRM ПРОФ, КОРП Россия Платные (руб)

Универсальная обработка для обслуживания любых фискальных регистраторов (ККТ), в том числе Веб сервер АТОЛ. Работает в соответствии с 54-ФЗ. (ФФД 1.0, ФФД 1.05, ФФД 1.1). Подключайте любую онлайн кассу к практически любой конфигурации. Нет необходимости обновлять 1С. Можно бесплатно скачать и протестировать. Может работать одновременно с несколькими онлайн-кассами, либо одной с разных рабочих мест. (через RDP, TCP\IP или веб-сервер) Позволяет разделить один чек сразу на несколько ККТ или на несколько систем налогообложения. Можно настроить собственный шаблонов чека. Можно использовать эквайринг там, где он не поддерживается. Работает на LINUX и Windows ЭМУЛЯТОР + ЭКВАЙРИНГ + МАРКИРОВКА + ПОДДЕРЖКА ФФД 1.2

4800 руб.

27.02.2017    763385    4673    9495    

2781

ЕГАИС++. Опт, производство, импорт

Оптовая торговля Розничная торговля Обмен с ГосИС Платформа 1С v8.3 1С:Управление торговлей 10 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Бухгалтерский учет Управленческий учет Акцизы Платные (руб)

Полнофункциональное расширение (ранее известное как Модуль 1С-ЕГАИС) для взаимодействия типовых конфигураций 1С и ЕГАИС, предоставляющее максимум возможностей по работе с УТМ. Получение и отправка ТТН, отправка акта о постановке на баланс и акта о списании. Получение остатков. Загрузка и сопоставление номенклатуры и контрагентов. Оправка в ЕГАИС отчетов о производстве и импорте.

8970 руб.

15.12.2015    165989    677    362    

386

SALE! 10%

Загрузка номенклатуры из Excel в УТ11, КА 2, ERP 2, Розница 2. Дополнительные реквизиты и сведения, характеристики, картинки, цены, остатки

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка из файлов xls, xlsx, ods, csv, mxl в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 9504 руб.

29.10.2014    210224    621    524    

439

Обмен с системой ЦРПТ (Универсальная конфигурация ХамелеонЦРПТ + маркировка табака, обуви, одежды, лекарств, фото, молока, духов(парфюма), питьевой воды, велосипедов и шин)

Оптовая торговля Розничная торговля Обмен с ГосИС Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия Бухгалтерский учет Управленческий учет Платные (руб)

Данная публикация создана для помощи разработчикам, интеграторам и другим заинтересованным лицам по настройке системы маркировки обуви, одежды, лекарств, табака, фото, молока, духов(парфюма), питьевой воды, велосипедов и шин. Смело задавайте нам вопросы по работе с ЦРПТ, GS1, ЭДО, Национальным каталогом, мы накопили достаточно большую базу знаний по данным темам и готовы ответить на все Ваши вопросы.

104000 руб.

18.03.2019    110344    34    114    

178

"Штрихкод-информер" - мобильный ТСД и прайс-чекер в смартфоне

Мобильная разработка Сканер штрих-кода Терминал сбора данных Управляемые формы Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

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

2880 руб.

03.12.2018    54631    137    102    

161

Печать кассовых чеков на одну ККМ с нескольких рабочих мест для 1С:УТ11.х, КА2.х, Розница 2.х, УНФ, ERP 2.х, БП 3, БГУ2

ККМ Кассовые операции Розничная торговля Обмен с ГосИС Бухгалтерский учет Оперативный учет Управляемые формы 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение конфигурации для УТ 11.4, 11.5, КА 2.4, 2.5, Розница 3.0, 2.3 и 2.2, УНФ 1.6, УНФ 3x, ERP 2.4, 2.5, БП 3, БГУ2 (Управляемые формы) позволяет выполнять печать кассовых чеков на одну ККМ 54-ФЗ с нескольких рабочих мест. НИКАКИХ НАСТРОЕК В РАЗРАБОТКЕ - ПОДКЛЮЧИЛ И ПЕЧАТАЙ. Если у вас несколько отделов и одна ККМ - печатайте на одной ККМ! Если у вас две ККМ и одна поломалась - печатайте на одной ККМ, пока ремонтируете другую!

4000 руб.

27.08.2018    116029    980    564    

827
Оставьте свое сообщение