Недавно пришлось столкнуться со следующей проблемой: заказчику нужно было сделать отчет по проходам сотрудников, который сильно отличался от шаблонного отчета в генераторе отчетов Орион Про Болида. Изучение конструктора отчетов и иных болидовских глупостей при знании языка SQL мне показалось не нужным… Покопавшись в базе, я установил связи между нужными мне таблицами, после чего написать отчет не составило труда. Есть один момент — коды ключей в таблице pMark в столбце CodeP закодированы. Однако закодированы они не очень сильно и их легко можно узнать. Об этом я напишу в следующий раз. Вот, собственно диаграмма связей между таблицами в базе данных MS SQL Orion Pro Болид:
Оцените пожалуйста статью:
74 Replies to “Связи между таблицами в базе данных MS SQL Orion Pro Болид”
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Здравствуйте!
Спасибо за информацию!
Жду с нетерпением продолжение публикации по данной теме.
С Уважением, Дмитрий.
Дмитрий! Спасибо. Пишите в комментариях какого рода информация Вас интересует.
Здравствуйте!
Помогите пожалуйста написать запрос в MS SQL в результате которого по «номеру»(или другому идентификатору работника из таблицы pLogData) получить отчет за определенный временной интервал в котором будет время прохода и точка прохода.
Заранее спасибо!!!
С Уважением, Дмитрий.
Дмитрий! Укажите какие столбцы в выходной таблице вы хотите видеть. Прямо так: Фамилия, Имя, Отчество, время прохода, точка прохода и т.д. Так же укажите какие исходные данные вы хотите использовать для получения отчета. Айди сотрудника, временной интервал, точки прохода, вход — выход? Не обещаю что напишу тут-же, пока мало свободного времени.
В самом простом случае без использования функций и переменных запрос будет выглядеть так:
SELECT
-- лишние столбцы закомментировать
,HozOrgan
,DoorIndex
,Remark
WHERE
Добрый день, Алексендр. Подскажите как мне выбрать первый вход и последний выход в текущем случае, по конкретному человеку на опрделенную дату?
Максим, необходимо сделать выборку из таблицы pLogData, с использованием данных из таблиц: pList, AccessPoint и RdrAccessPoint.
Александр, спасибо за информацию. По какой причине часть устройств не фиксируется в pLogData и m_alarm?
Здравствуйте! Возможно это связано с тем, что устройства не прописаны в базе Орион Про. Посмотрите их наличие в таблице DevItems
Здравствуйте,
организации требуется откорректировать отчет по персоналу для Орион Про:
Задача: При выгрузке данных из системы СКУД при эвакуации с завода, в отчет попадает персонал, находящийся в момент выгрузки на другом (удаленном) объекте.
Если Вы готовы выполнить данную задачу, прошу связаться со мной по почте для обсуждения деталей выполнения работы. Спасибо.
Елена.
Связался с Вами, вы не отвечаете.
Добрый день, Александр.
Подскажите в какой таблице хранятся данные по пропуску у сотрудника. А именно код карты.
В таблице [pList] нет кодов карты. Я правильно понимаю коды хранятся Шестнадцатеричной системе. например код 76000B0050C9FE01 мне хотелось получить часть кода C9FE в десятичном формате. т.е. 51710. А по данному коду строить отчеты. Либо как то увязать с таблицей [pLogData] данный код.
Андрей! Коды карточек PROXIMITY в базе хранятся в базе в таблице pMark с столбце CodeP.На сайте есть пост, посвященный этому вопросу : Как расшифровать коды ключей Proximity в базе Орион Про Болид. К сожалению, представленный способ работает не во всех версиях Орион Про. В новых версиях болид стал использовать другой алгоритм шифрования. Пока не было времени подумать над этим. Посмотрите как расшифровываются ключики и в ms sql напишите функцию, которая будет делать это на лету, прямо во время выполнения запроса.
Александр, добрый день )
А можно ли имитировать вход работника запросом в SQL ? 🙂
Спасибо!
Добрый день!
Подскажите пожалуйста, можно ли sql запросами сымытировать приход сотрудника на работу? Спасибо ! )
Добрый день!
Подскажите пожалуйста, можно ли sql запросом сымитировать приход сотрудника на работу?
Спасибо 🙂
Да без проблем. Можно все)
Можем ли рассмотреть такой кейс ) ?
Как с вами связаться ) ?
Отправил вам письмо на указанную вами почту. Результат работы можно посмотреть в этой теме Болид Орион Про. Запрос для добавления прохода через определенную точку доступа в указанное время.
Добрый день Александр
Как с вами можно связаться по вопросу базы данных Орион Про?
Связался с вами по почте.
Добрый день, подскажите пожалуйста, мне нужно создать отчет «Все работники предприятия» — «Оставшиеся на объекте». В итоге мне нужно создать отчет «Отсутствующих на работе»
Айал, как в генераторе отчетов это делать — не знаю. Могу помочь только с запросом к базе в MS SQL.
я вот на основе отчета «оставшиеся на объекте», незнаю как изменить запрос, буду рад помощи.
var
PDivisionID, PCompanyID, PListID: array of Integer;
FirstShow: Boolean;
ReportDate: TDateTime;
StaffCount: Integer;
procedure frReport1OnStartReport(Sender: TfrxComponent);
var i: integer;
begin
with DialogPage, Engine do
begin
ReportDate := Now();
end;
end;
procedure btOkOnClick(Sender: TfrxComponent);
const
sqlsrall = ‘(Exists(Select * from #tmpPListId)) ‘;
sqlsr = ‘( pList.ID = @ID OR @ID IS NULL) ‘;
NumStr = 28;
var i: integer;
begin
with DialogPage, Engine do
begin
QueryMain.ParamByName(‘ID’).Clear;
QueryMain.ParamByName(‘ReportDate’).value := ReportDate;
QueryMain.SQL[NumStr] := sqlsr;
end;
StaffCount := 0;
if QueryMain.Active then QueryMain.Close;
QueryMain.Open;
StaffCount := QueryMain.RecordCount;
QueryMain.First;
end;
begin
end.
Айал, если честно, мне хочется изучать болидовские костыли. Могу вам написать запрос к базе на языке sql, если предоставите дамп базы и скажете что конкретно вы хотите.
Мне нужен отчет для формирования отсутствующих на месте сотрудников, к сожалению СБ не позволит мне предоставить вам дамп базы, но я уверен что для моих целей информация по сотрудникам не так важна.
Отчет нужен в тот момент, когда вы его запускаете? Какие столбцы нужны в отчете? Как определить место расположения сотрудников? Это точка доступа или нахождение сотрудника в определенной зоне в которую можно попасть через разные точки?
Да, отчет нужен в момент запуска.
ФИО, подразделение, должность, время последнего входа и выхода.
Есть зона «объект» в которую ведут два турникета и одна дверь вход/выход.
Будет время, постараюсь помочь.
А можете подсказать как сделать чтобы в отчёте было видно группу эвакуации
Здравствуйте.
Необходимо отредактировать отчет УРВ «Список нарушителей» довавить значения Первый вход Последний выход. Если есть такая возможность свяжитесь со мной по электронной почте.
Здравствуйте, Илья.
Я не редактирую отчеты, болидовские костыли мне не интересны. Я работаю напрямую с БД. Вы можете использовать запрос в екселе и получать отчет в таблице. Если интересует — пишите.
Здравствуйте, уважаемы Александр!
Нужен запрос к базе данных, что бы показывал и если возможно выгружал допустим в текстовый файл (как пример) количество находящихся на объекте.
Если есть такая возможность свяжитесь со мной по электронной почте.
Возможность есть. Единственное, на счет выгрузки не уверен, но такой запрос можно выполнять прямо из файла excel и сохранять.
И в схеме ошибка Таблицы Acesspoint и Plogdata соединяются по ключу
Acesspoint ON (Plogdata.DoorIndex = AcessPoint.GIndex)
Согласен. Исправил.
Приветствую. Меня интересует написание вами различных запросов напрямую к БД ОрионПро. Об оплате договоримся. Работа не разовая. Возможно (и желательно) долгое сотрудничесво (из мафии не уходят 🙂
Прошу связаться со мной.
Связался
Александр, подскажите как правильно почистить архив событий вручную в Орион про, база переполнена и не запускается.
Я бы попробовал очистить таблицу pLogData. Из Microsoft SQL Server Management Studio это можно сделать с помощью запроса:
delete from pLogData
Благодарю, будем пробовать.
Добрый день Александр
Руководство поставило задачу получить из SQL данные по действующим сотрудникам. В таблице pList есть поле, по которому можно получить данные?
Собственно говоря, вся таблица pList содержит данные о пользователях, зарегистрированных в системе. Имя, фамилия, отчество и т.д.
Александр, добрый день.
Имеется задача в «диджитализации» процесса переклички при эвакуации.
На данный момент используем по «оставшиеся на объекте» для понимания кто не эвакуировался и выгружаем отчет по точке доступа для формирования списка кто эвакуировался. Это все неудобно, а главное не оперативно. Возможно ли сделать это запросом к базе в MS SQL?
Конечно можно. Все, что внесено в базу данных извлекается от туда именно запросами. Пишите ТЗ на запрос, я вам его напишу.
Добрый день!
Подскажите по одному вопросу. Необходимо настроить контроль изменения списка пользователей, допущенных в помещения, снабженных СКУД.
В каких таблицах могут содержаться эти данные?
Александр здравствуйте. Инфа о пользователях находится в таблице pList, зоны, группы и точки доступа лежат соответственно в AccessZone, GrAccess, AccessPoint.
Добрый день. Стоит задача блокировать пропуски сотрудников, которые находятся в отпуске или на больничном. Подскажите пожалуйста в какой таблице (поле) возможно поменять данные программно, если это возможно? Спасибо.
Елена здравствуйте. Попробуйте в таблице pMark, для нужного вам пропуска, в столбце Config установить значение 32768 вместо 128. Когда сотрудник вернется, снова установите 128. Сначала проверьте на каком-нибудь пропуске. Данный вариант, я думаю, должен сработать, при условии того что в системе организован «Централизованный доступ» — коды ключей хранятся в Базе данных АРМ «Орион Про», и решение о предоставлении/запрете доступа принимает программный модуль «Ядро опроса» АРМ «Орион Про».
После проверки отпишитесь пожалуйста получилось или нет.
Добрый день. Получилось прямым обращением в таблицы SQL. Параметр меняется. Все отлично. Только для того чтобы эти данные синхронизировались с контроллерами необходимо нажимать кнопку в АБД Орион. Может вы знаете как можно синхронизировать эти данные в обход ручного управления синхронизацией?
Вопрос решился. Спасибо.
Был рад помочь.
Александр здравствуйте. Подскажите пожалуйста с запросом к SQL по выгрузке данных по событию предоставления доступа к определенному устройству.
Михаил, если вы имеете в виду точки доступа, то вот вам запрос:
— Выбирает все строки из таблицы (лог событий) для точки доступа AcessPoint.ID
use Orion11223 /*укажите имя базы данных вместо Orion11223*/ ;
select
[pLogData].[TimeVal]
,[pLogData].[NumCom]
,[pLogData].[IDComp]
,[pLogData].[Par1]
,[pLogData].[Par2]
,[pLogData].[Par3]
,[pLogData].[Par4]
,[pLogData].[Event]
,[pLogData].[IndexKey]
,[pLogData].[RazdIndex]
,[pLogData].[HozOrgan]
,[pLogData].[HozGuest]
,[pLogData].[Remark]
,[pLogData].[DoorIndex]
,[pLogData].[Mode]
,[pLogData].[DeviceTime]
,[pLogData].[VEvent]
,[pLogData].[ZReserv]
,[pLogData].[ZoneIndex]
,[pLogData].[ReaderIndex]
,[pLogData].[Sign]
,[pLogData].[tpRzdIndex]
,[pLogData].[tpPar4]
,[pLogData].[IndexZone]
,[pLogData].[tpIndex]
,[pLogData].[GUID]
from [pLogData], AcessPoint
where
pLogData.DoorIndex = AcessPoint.GIndex
and
AcessPoint.ID = 4 /*Укажите ID точки доступа из таблицы AcessPoint вместо 4*/
order by [pLogData].[TimeVal] desc
Да, спасибо, то что надо, осталось подтянуть ФИО «хозорганов» и [Events].[Contents] пытаюсь путем скрещивания вашего предыдущего запроса из первых комментариев — но что то идет не совсем так :
,Name + ‘ ‘ + FirstName + ‘ ‘ + MidName AS Name
FROM pLogData JOIN pList ON pLogData.HozOrgan = pList.ID JOIN Events ON pLogData.Event = Events.Event
use Orion11223 /*укажите имя базы данных вместо Orion11223*/ ;
select
pList.Name + ‘ ‘ + pList.FirstName + ‘ ‘ + pList.MidName as FIO
, [Events].Contents as EventDESC
,[pLogData].[TimeVal]
,[pLogData].[NumCom]
,[pLogData].[IDComp]
,[pLogData].[Par1]
,[pLogData].[Par2]
,[pLogData].[Par3]
,[pLogData].[Par4]
,[pLogData].[Event]
,[pLogData].[IndexKey]
,[pLogData].[RazdIndex]
,[pLogData].[HozOrgan]
,[pLogData].[HozGuest]
,[pLogData].[Remark]
,[pLogData].[DoorIndex]
,[pLogData].[Mode]
,[pLogData].[DeviceTime]
,[pLogData].[VEvent]
,[pLogData].[ZReserv]
,[pLogData].[ZoneIndex]
,[pLogData].[ReaderIndex]
,[pLogData].[Sign]
,[pLogData].[tpRzdIndex]
,[pLogData].[tpPar4]
,[pLogData].[IndexZone]
,[pLogData].[tpIndex]
,[pLogData].[GUID]
from pLogData, AcessPoint, pList, [Events]
where
pLogData.HozOrgan = pList.ID
and
pLogData.DoorIndex = AcessPoint.GIndex
and
pLogData.[Event] = [Events].[Event]
and
AcessPoint.ID = 4 /*Укажите ID точки доступа из таблицы AcessPoint вместо 4*/
order by [pLogData].[TimeVal] desc
Спасибо, подогнал под свой запрос, получилось так:
use Orion /*укажите имя базы данных вместо Orion11223*/ ;
declare @dt0 as datetime
,@dt1 as datetime
select @dt1 = dateadd( day, datediff( day, 0, getdate()), 0)
,@dt0 = dateadd( day, datediff( day, 0, getdate() — 1), 0)
select
pList.Name + » + pList.FirstName + » + pList.MidName as FIO
, [Events].Contents as EventDESC
,[pLogData].[TimeVal]
from pLogData, AcessPoint, pList, [Events]
where
pLogData.TimeVal BETWEEN @dt0 and @dt1
and
pLogData.HozOrgan = pList.ID
and
pLogData.DoorIndex = AcessPoint.GIndex
and
pLogData.[Event] = [Events].[Event]
and
AcessPoint.ID = 16 /*Укажите ID точки доступа из таблицы AcessPoint */
order by [pLogData].[TimeVal] desc
Пожалуйста!
Добрый день!
Александр огромное спасибо за помощь в написании SQL запроса для добавления проходов определенных сотрудников через определенные точки доступа в определенный интервал времени в Орион Про.
Не за что. Обращайтесь.
Здравствуйте, подскажите, можно ли в базе удалить проходы определенных сотрудников ?
Можно. Связался с вами по почте.
Добрый день.
В таблице [dbo].[pLogData] в столбце Remark записываются номера карт. Но поле Remark имеет varchar(65). в результате часть записи обрезается.
например:
8: Вход F2000000B542B601 Турникет 8, F2000000B542B601 Считывате
Подскажите у всех Remark = 65 символов, пробовали ли вы его менять на побольше?
Может где то еще фигурирует номер карты в событии в чистом виде, чтоб не парсить запись регулярками и получать номер?
Кратко что хочу:
Сделал на ардуино Rfid считыватель. и телеграм бота. в боте родители подписываются на номер карты и получают оповещение, что ребенок пришел в школу.
Ранее была система перко, там БД попроще была. было поле id карты.
Школа перешла на Болид и mifare стандарт. Переделываю ПО.
Спасибо.
Связался с вами по почте.
Коды карт в чистом виде хранятся в таблице pMark
Добрый день!
Александр , помогите пожалуйста с запросом. Есть 2 точки доступа ( 2 турникета) нужно узнать сколько за неделю прошло сотрудников включая визитеров(т.е сколько всего ключей) только на вход.
Пользуйтесь.
Приветствую!
Друзья, есть задача поставленная начальством, о контроле сотрудников приходящих на работу.
В связи с отсутствующими знаниями в администрировании БД, хотелось бы попросить помочь в этом.
Нужен шаблон со следующими параметрами:
1. Таб. номер сотрудника
2. ФИО
3. Время прихода сотрудника
4. Время ухода сотрудника
5. Ранний уход на обед
6. Поздний приход с обеда
Сделал не большой запрос, но он выдает все проходы
SELECT TOP 100000
pUser.TabNumber AS ИИН,
cast(pUser.Name as nvarchar) AS Фамилия,
cast(pUser.FirstName as nvarchar) AS Имя,
cast(pUser.MidName as nvarchar) AS Отчество,
pLog.Mode AS РежимПрохода,pUser.Company, cast(Company.Name as nvarchar) As Организация, company.id As companyid,
pLog.TimeVal
FROM dbo.pLogData AS pLog
JOIN dbo.pList pUser
ON pLog.HozOrgan = pUser.ID
JOIN dbo.AcessPoint AS AP
ON pLog.DoorIndex = AP.GIndex
join dbo.pcompany as Company on puser.company = company.id
WHERE
pLog.HozOrgan > 0
and company.id in (1)
and
pLog.TimeVal BETWEEN
CONVERT (datetime,
‘2022-08-01 09:00:00.000’
, 21)
AND CONVERT (datetime,
‘2022-08-01 18:30:00.000’
,21)
Заранее спасибо
Александр, пишите в группу в телегу. Помогу.
Добрый день!
Подскажите, возможно ли внести свои изменения в шаблон отчета в учете рабочего времени? Или это можно сделать только в генераторе отчетов?
Максим, здравствуйте. Заходите в группу в телеграм, там все обсуждение ведется.
Подскажите, как вас найти в телеграм?
Ссылочка сверху справа
Здравствуйте! А как называется группа в Телеграм? Тоже есть несколько вопросов по БД