СКУД с продажей билетов и управлением турникетом

30.03.20

Интеграция - Сканер штрих-кода

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

Скачать исходный код

Наименование Файл Версия Размер
СКУД с продажей билетов и управлением турникетом:
.epf 13,66Kb
3
.epf 13,66Kb 3 Скачать
ДТО 2009 года
.zip 19,09Mb
1
.zip 19,09Mb 1 Скачать

Всем привет. Возникла необходимость реализовать СКУД со сканером штрихкодов и турникетом. Я подумал и решил сделать данную систему на основе 1С.Розница 2.3. Причина выбора 1с в том, что через нее легко можно продавать (подключение КТТ онлайн) и вести учет, ну а СКУД - всего лишь надстройка.

Тестировалось на Розница, редакция 2.3 (2.3.3.19), платформа 1С:Предприятие 8.3 (8.3.15.1869)

Делюсь, потому как информации на этот счет не так уж и много, вдруг кому понадобится.

Практически весь функционал реализован в самой обработке, но кое где все таки пришлось влазить в основную конфигурацию.

Схема работы.

При продаже через РКМ, в процедуру 

Процедура ПробитьЧекККМЗавершение(РезультатВыполнения, ПараметрыОперации) Экспорт

Добавлен код формирования и печати билета с ШК:

  • Проверяем все позиции в чеке. Если есть номеклатура, принадлежащая товарной группе "Билеты", то по количеству этой номеклатуры, в независимом регистре сведений "БилетыНаПроход" формируется запись с новым штрих кодом и указанием времени продажи, ссылкой на чек, и на саму номеклатуру
  • По количеству позиций отправляем на принтер этикеток печать билетов со штрих кодом

Далее для прохода через турникет должна быть запущена обработка СКУД, она и управляет возможностью прохода. При срабатывании внешнего события от сканера, проверяется принадлежит ли штрихкод текущим суткам и не является ли он погашенным. Если штрихкод не погашен, то дается команда турникету на открытие, далее штрихкод гасится.

Турникет управляется посылкой команды "open" http запросом на запрограммированный адрес, у меня  192.168.0.250.

Управление турникетом я реализовал на базе ардуино уно + шилд 5100.

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

////////////////////////////////////////////////////////////////
// Открытие турникета в потоке по условиям
// 1 - ШК принадлежит текущим суткам
// 2 - ШК непогашен 
// Погашение ШК в случае успешного прохода через турникет
Процедура ОткрытьТурникет(Штрихкод,IP_Port,CMD) Экспорт
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	БилетыНаПроход.Штрихкод КАК Штрихкод,
		|	БилетыНаПроход.ДатаГенерации КАК ДатаГенерации,
		|	БилетыНаПроход.Погашен КАК Погашен
		|ИЗ
		|	РегистрСведений.БилетыНаПроход КАК БилетыНаПроход
		|ГДЕ
		|	БилетыНаПроход.Штрихкод ПОДОБНО &Штрихкод 
		|	И БилетыНаПроход.Погашен = Ложь";
	
	Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Если (Формат(ВыборкаДетальныеЗаписи.ДатаГенерации, "ДЛФ=Д") = Формат(ТекущаяДата(), "ДЛФ=Д")) Тогда
	    
		    Соединение = Новый HTTPСоединение(IP_Port,,,,,10);
		    Заголовки = Новый Соответствие();
		    Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded; charset=Windows-1251");
		    Запрос = Новый HTTPЗапрос("/" + CMD , Заголовки);
		    ОтветСервера = Соединение.Получить(Запрос);      // Ответ от контроллера
		    Ответ = ОтветСервера.ПолучитьТелоКакСтроку();    // переводим в строку и получаем код странички			
			Если Ответ="event_step_in" Тогда                 // Ответ "event_step_in" говорит, о совершенном переходе через турникет
	 			ТекущийБилет = РегистрыСведений.БилетыНаПроход.СоздатьНаборЗаписей(); 
				//ТекущийБилет.Отбор.Погашен.Установить(Ложь);
				ТекущийБилет.Отбор.Штрихкод.Установить(Штрихкод);			
				ТекущийБилет.Прочитать();					
				Для Каждого Билет Из ТекущийБилет Цикл
				     Билет.Погашен = Истина;
					 Билет.ДатаПогашения = ТекущаяДата();
				 КонецЦикла;	
				 ТекущийБилет.Записать(); 
			КонецЕсли;			
		КонецЕсли;
	КонецЦикла;

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

Особенность подключения сканера ШК в том, что он подключается с использованием драйверов DTO 2009 года, тех что еще бесплатны. Сделано это для того, чтобы событие сканирования не возникало в РМК.

Вот код вставленный в РМК

&НаКлиенте
Процедура ПробитьЧекККМЗавершение(РезультатВыполнения, ПараметрыОперации) Экспорт
	ПараметрыЗаполнения = ПараметрыОперации.ПараметрыЗаполнения;
	
	Если РезультатВыполнения.Результат Тогда
		
		// Установить полученное значение номера чека реквизиту документа.
		ПараметрыЗаполнения.Вставить("СтатусЧекаККМ", ПредопределенноеЗначение("Перечисление.СтатусыЧековККМ.Пробитый"));
		ПараметрыЗаполнения.Вставить("Дата", ОбщегоНазначенияКлиент.ДатаСеанса());
		ПараметрыЗаполнения.Вставить("НомерСменыККМ", РезультатВыполнения.ВыходныеПараметры[0]);
		ПараметрыЗаполнения.Вставить("НомерЧекаККМ" , РезультатВыполнения.ВыходныеПараметры[1]);
		
		Если НЕ ЗначениеЗаполнено(ПараметрыЗаполнения.НомерЧекаККМ) Тогда
			Если НомерДокументаКассыККМ[ПараметрыОперации.КассаККМ] <> Неопределено Тогда
				НомерЧекаККМ  = НомерДокументаКассыККМ[ПараметрыОперации.КассаККМ];
			Иначе
				НомерЧекаККМ  = ПорядковыйНомерПродажи;
			КонецЕсли;
			
			ПараметрыЗаполнения.Вставить("НомерЧекаККМ", НомерЧекаККМ);
		КонецЕсли;
	Иначе
		ЗаголовокИнформации = НСтр("ru = 'При печати чека произошла ошибка.'");
		ТекстСообщения = НСтр("ru = 'Чек не напечатан на устройстве для печати чеков.
		                            |Дополнительное описание: %ДополнительноеОписание%'");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ДополнительноеОписание%", РезультатВыполнения.ОписаниеОшибки);
		ОбщегоНазначенияРТКлиент.ВывестиИнформациюДляРМКУправляемой(ЗаголовокИнформации, ТекстСообщения);
		
	КонецЕсли;
	
	ПараметрыЗаполнения.ЧекПробит = РезультатВыполнения.Результат;
	
	ВыполнитьОбработкуОповещения(ПараметрыОперации.ОповещениеПриЗавершении, ПараметрыЗаполнения);
	///////////////////////////////////////////////////////////////
	//Процедура генерации штрихкода
	НовыеШК = Массив_ШК(ПараметрыОперации.ЧекККМСсылка);
	Для Каждого Штрихкод из НовыеШК Цикл
		ДокПечать = ПечатьБилета(Штрихкод);
		//ДокПечать.ИмяПринтера="HP LaserJet 3055 PCL5 LAN";
		ДокПечать.ОтображатьСетку = Ложь;
		ДокПечать.Защита = Ложь;
		ДокПечать.ТолькоПросмотр = Ложь;
		ДокПечать.ОтображатьЗаголовки = Ложь;
		ДокПечать.ПолеСлева=3;
		ДокПечать.ПолеСправа=3;
		ДокПечать.АвтоМасштаб = Истина;
		ДокПечать.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
    КонецЦикла;	
	//Завершение процедуры
	///////////////////////////////////////////

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

В конце модуля формы РМК

////////////////////////////////////////////////////////////////////
//Вызовы серверным методов из модуля менеджера обработки СКУД
Функция Массив_ШК(ЧекККМСсылка)
	Возврат Обработки.СКУД.ГенерацияШК(ЧекККМСсылка);
КонецФункции

&НаСервере
Функция ПечатьБилета(ШК)
	Возврат Обработки.СКУД.ПечатьБилетаНаСервере(ШК);
КонецФункции
////////////////////////////////////////////////////////////////////

Для упрощения работы, я создал подсистему "СКУД", пользователя "СКУД" и назначил пользователю все необходимые права. При заходе под пользователем "СКУД", ему доступна только его подсистема и обработка запускается автоматически, т.е. от продажи билетов управление турникетом отделено.

Хочу заметить, что я выложил данную обработку, не как готовую систему, а как пример для тех, у кого возникают сходные задачи. Вся реализация сделана на управляемых формах клиент серверной.

Обработка СКУД Ардуино Билет со штрихкодом

См. также

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

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

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

2880 руб.

03.12.2018    55316    139    102    

162

АРМ Начальника производства и АРМ Рабочего цеха для 1С:УНФ. Цифровое производство малого и среднего бизнеса

Рабочее место Производство готовой продукции (работ, услуг) Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Управленческий учет Платные (руб)

Расширение для 1С:УНФ с комплектом из двух АРМ: «АРМ для начальника производства» и «АРМ для рабочего цеха». «АРМ Начальника производства» позволяет анализировать общую картину состояния заказов покупателей и наличие конечных комплектующих и сырья для производства заказанной продукции. Есть возможность направлять заказы в производственную работу (в случае, если заказанную продукцию нужно произвести), резервировать и отгружать готовую продукцию. «АРМ рабочего цеха» позволяет обычным работникам оперативно закрывать производственные задания (оформлять документы выпуска) сразу в программе 1С.

14400 руб.

15.09.2017    49406    82    41    

88

Помощник ЕГАИС для 1С:Розница 2.2/2.3. Инвентаризация, запросы, проверка ТТН

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

Обновление сопоставлений алкогольных классификаторов, инвентаризация по марке, проверка накладных по check1.fsrar.ru, поиск продукции по акцизке, запрос новых акцизных марок и многое другое!

12000 руб.

05.01.2016    143279    466    696    

222
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 02.07.21 18:10
Сообщение было скрыто модератором.
...
2. Mikov_Evgeniy 2 22.06.22 14:56 Сейчас в теме
Добрый день, как можно с вами связаться, для вашей помощи по настройки турникета, на платной основе?
Казахстан +77019712777
3. пользователь 22.06.22 15:15
Сообщение было скрыто модератором.
...
4. Bukaska 140 22.06.22 16:26 Сейчас в теме
(2)Создать тикет в техподдержку
5. пользователь 23.06.22 08:01
Сообщение было скрыто модератором.
...
6. пользователь 05.02.23 23:10
Сообщение было скрыто модератором.
...
7. пользователь 03.05.23 10:34
Сообщение было скрыто модератором.
...
Оставьте свое сообщение