По просьбе одного из читателей моих заметок я написал запрос к базе данных Болид Орион Про для добавления прохода через определенную точку доступа в указанное время. Сразу оговорюсь — у меня не установлен Орион Про и нет генератора отчетов, поэтому данный запрос пока находится на стадии тестирования. Есть еще один момент: есть в таблице pLogData столбец NumCom который по описанию Болида отвечает за «Номер записи по конкретному компьютеру». Я не знаю на сколько для генератора отчетов важно сопоставление этого столбца и столбца TimeVal. Ведь при внесении данных в таблицу позднее, получается что большее значение NumCom соответствует раннему значению времени. Так что у кого есть возможность потестить — милости просим. К таблице, кстати, привязан триггер, который запускает хранимую процедуру. Я мельком ее посмотрел. В ней вроде бы обрабатываются только проходы со статусом «Посетитель». Пишите в комментариях что у кого получилось. Есть мысль сделать еще один запрос: UPDATE строк на предмет исправления времени.
Теперь про сам запрос. В Орион Про данные по проходу заносятся в таблицу pLogData двумя строками с разными событиями : предоставление доступа и фактический проход, например через турникет или открытие двери (по геркону), поэтому нам нужно вставить две строки. В запросе объявлено несколько переменных, которые вам нужно сначала заполнить нужными значениями. Остальные данные по по столбцам, которые указаны в запросе не меняются для конкретной точки. Вам нужно проанализировать данные вашей базы Орион Про самостоятельно и вбить их в запрос ручками. Столбец GUID является ключом. Переменные GUID1 и GUID2 это уникальные значения. Для генерации GUID кодов можно использовать данный онлайн сервис :
Конечно можно оформить это все в качестве функции, но мне лень. Если у вас есть конкретные предложения — пишите контакты в комментариях, я свяжусь с вами.
USE [Lada*****Pozharka] -- укажите имя вашей базы данных DECLARE @date_time VARCHAR(23), @GUID1 VARCHAR(40), @GUID2 VARCHAR(40), @card INT, @hozorgan INT SET @date_time = '2019-03-31 16:15:25.000' --укажите время прохода SET @GUID1 = 'a507e987-9ef2-415f-b256-cbcac4bc51dc' -- укажите GUID для 1 запроса SET @GUID2 = 'd4f7c12b-c0bd-457b-874b-6f9b5277730d' -- укажите GUID для 2 запроса SET @card = 43 -- укажите ID карты хозоргана из таблицы pMark SET @hozorgan = 39 -- укажите ID хозоргана из таблицы pList INSERT INTO [dbo].[pLogData] ([TimeVal] ,[NumCom] ,[IDComp] ,[Par1] ,[Par2] ,[Par3] ,[Par4] ,[Event] ,[IndexKey] ,[RazdIndex] ,[HozOrgan] ,[HozGuest] ,[Remark] ,[DoorIndex] ,[Mode] ,[DeviceTime] ,[VEvent] ,[ZReserv] ,[ZoneIndex] ,[ReaderIndex] ,[Sign] ,[tpRzdIndex] ,[IndexZone] ,[tpIndex] ,[GUID] ) VALUES ( CONVERT( datetime, @date_time, 121) ,(SELECT MAX (NumCom) FROM pLogData) + 1 ,1 ,3 ,127 ,125 ,1 ,28 ,58686721 ,0 ,@hozorgan ,1 ,'1: Вход КПП2, Считыватель 1, Прибор 125' ,1 ,1 ,CONVERT( datetime, @date_time, 121) ,0 ,@card ,1 ,3966 ,0 ,0 ,3966 ,8 ,@GUID1 ) INSERT INTO [dbo].[pLogData] ([TimeVal] ,[NumCom] ,[IDComp] ,[Par1] ,[Par2] ,[Par3] ,[Par4] ,[Event] ,[IndexKey] ,[RazdIndex] ,[HozOrgan] ,[HozGuest] ,[Remark] ,[DoorIndex] ,[Mode] ,[DeviceTime] ,[VEvent] ,[ZReserv] ,[ZoneIndex] ,[ReaderIndex] ,[Sign] ,[tpRzdIndex] ,[IndexZone] ,[tpIndex] ,[GUID] ) VALUES ( CONVERT( datetime, @date_time, 121) --GETDATE() ,(SELECT MAX (NumCom) FROM pLogData) + 1 ,1 ,3 ,127 ,125 ,1 ,32 ,58686721 ,0 ,@hozorgan ,1 ,'1: Вход КПП2, Считыватель 1, Прибор 125' ,1 ,1 ,CONVERT( datetime, @date_time, 121) ,0 ,@card ,1 ,3966 ,0 ,0 ,3966 ,8 ,@GUID2 )
Огромное спасибо за запрос, немного его модифицировал, используя
SET @date_time = convert(varchar, getdate(), 20) — current time
После этого загнал всё это в SQLCMD и поставил в шедулер на нужное время + произвольное время до 20мин — это даёт рандомное время прихода, что выглядит правдоподобно при составлении отчётов для кадровиков 🙂
Рад был помочь.
SET @date_time = convert(varchar, getdate(), 20) —время прохода
SET @GUID1 = NEWID() — генерирует GUID для 1 запроса
SET @GUID2 = NEWID() — генерирует GUID для 2 запроса
Всё работает!
От души!
Немного доработал для автоматизма)
SET @date_time = convert(varchar, getdate(), 20) —укажите время прохода
SET @GUID1 = NEWID() — генерация GUID для 1 запроса
SET @GUID2 = NEWID() — генерация GUID для 2 запроса
Добрый день.
Возможно ли путем SQL запросов управлять возможностью прохода отдельно взятого сотрудника через определенную точку в системе Болид? То есть мне надо, чтобы оператор с помощью программы (используя SQL запрос) запрещал или разрешал проход для отдельного пропуска.
Спасибо.
Думаю возможно. Залейте куда-нибудь дамп вашей базы, что-нибудь придумаем. Я пришлю вам письмо на почту, а вы мне в ответном пришлите ссылку на дамп.
Здравствуйте, Александр! Подскажите, пожалуйста, как с Вами можно связаться?
Здравствуйте. Написал вам на указанную вами почту.
Здравствуйте, Александр. Как с вами связаться для консультации по базе Орион Про.
Есть проблема с событиями по проходу сотрудников.
Написал вам на указанную почту.
Добрый день, подскажите как SQL-запросом получить список сотрудников находившихся на объекте с.. по.. (например вчера с 7 утра и до 8 вечера) со следующими данными: организация, подразделение, должность. В итоге хочу подцепить запрос в FastReport и там дальше уже сгруппировать по организациям и count-ом посчитать по должностям.
Вид отчета примерно такой:
11.01.2022 с 07.00 по 20.00
ООО «Рога и Копыта» — водитель — 5 чел.
ООО «Рога и Копыта» — экспедитор — 11 чел
ИП «Васечкин» — грузчик — 18 чел.
Виталий, здравствуйте. Присылайте дамп базы хотя бы за пару рабочих дней. Напишу Вам запрос.
Спасибо автору за такую замечательную статью.
Можете подсказать такой момент, если мене в ручную нужно изменить время прохода, при этом я знаю номер [HozOrgan] и [Remark], как составить такого рода запрос?
Решили c вами данный вопрос в группе в Telegram
Добрый день! Подскажите есть у кого-нибудь запрос по опоздавшим за месяц? Я не знаю sql, а задачу поставили не могу решить. Или по отдельным id? Заранее спасибо
Александр, пишите в группу в телегу. Помогу.
Здравствуйте!
А можно ли как-то по запросу посмотреть сколько у сотрудника «мягких» перегулов в УРВ?
В группе в телеге ответил