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

10.05.18

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
ws.os
.os 9,77Kb
4
4
1 SM
Скачать Купить за 1 850 руб.
ws2.os
.os 12,59Kb
2
2
1 SM
Скачать Купить за 1 850 руб.

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

Для запуска (компиляции) скрипта потребуется 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

См. также

ККМ Кассовые операции Розничная торговля Системный администратор Программист Платформа 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

6000 руб.

27.02.2017    788212    4755    9507    

2817

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

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

8970 руб.

15.12.2015    168706    807    364    

394

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

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

28500 руб.

21.04.2017    93680    119    40    

210

Розничная торговля Маркетплейсы Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Россия Управленческий учет Платные (руб)

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

35000 руб.

14.10.2022    8737    15    14    

11

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

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

5000 руб.

18.03.2019    111872    29    114    

182

SALE! %

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

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос в продаже с 2015г., и мы постоянно работаем над его развитием. Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

45650 27000 руб.

24.04.2015    192605    143    241    

274

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

Обработка осуществляет обслуживание ККТ АТОЛ, Штрих и Меркурий для конфигураций "УТ 10.3", "КА 1.1", "УПП 1.3", "Розница 1.0", "БП 2.0" и других отраслевых решений, построенных на основе указанных выше конфигурациях. Поддерживает возможность параллельно пробития чеков на одной ККМ несколькими пользователями. Поддерживает Веб-сервер Атол. Соответствует требованиям 54-ФЗ. Поддерживает ФФД 1.0, 1.05, 1.1 и 1.2. Разделяет чеки по нескольким СНО. Поддерживает механизмы подключения ККТ по TCP/IP, для работы через RDP или интернет. Поддержка маркировки и разрешительного режима.

5400 руб.

25.05.2015    330539    1898    3031    

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