В продолжение темы динамических запросов к БД Орион Про с выводом в excel и по просьбе одного из участников группы в Телеграм, пишу небольшую заметку.
Коллеге было необходимо составить отчет о проходах определенного сотрудника за определенный промежуток времени.
В простейшем случае запрос к БД Орион будет выгдядить так:
SELECT TimeVal ,pList.Name + ' ' + pList.FirstName + ' ' + pList.MidName ,Remark FROM pLogData LEFT JOIN pList ON pList.ID = pLogData.HozOrgan WHERE TimeVal BETWEEN 'начало интервала' AND 'конец интервала' AND pList.Name LIKE '%Фамилия%' AND pList.FirstName LIKE '%Имя%' AND pList.MidName LIKE '%Отчество%' AND pLogData.Event = 32 -- проход ORDER BY TimeVal
В дальнейшем через джойны можно обогатить отчет дополнительной информацией.
Принцип построения динамического отчета подробно рассмотрен в статье Динамические запросы к БД Орион… и останавливаться на этом я не буду.
Хочу обратить ваше внимание на реализацию поиска по времени (формат поля TimeVal — datetime) и ФИО (Name, FirstName, MidName это строки или varchar).
В Microsoft Query параметры передаются знаком «?». Поэтому наш запрос в MS Query должен выглядеть так:
SELECT TimeVal ,pList.Name + ' ' + pList.FirstName + ' ' + pList.MidName ,Remark FROM pLogData LEFT JOIN pList ON pList.ID = pLogData.HozOrgan WHERE TimeVal BETWEEN ? AND ? AND pList.Name LIKE ? AND pList.FirstName LIKE ? AND pList.MidName LIKE ? AND pLogData.Event = 32 -- проход ORDER BY TimeVal
Проделав все манипуляции по установлению связи с БД, подготовке запроса в MS Query и настройки его в Excel мы получим следующую картину:
Для того чтобы все это заработало необходимо сделать следующее:
До возврата данных в Excel из MS Query подготовить и правильно форматировать ячейки для указания временного интервала. Для этого необходимо в окне «Формат ячеек» на вкладке «Число» выбрать «(все форматы)» и руками в поле «Тип» указать нужный нам формат datetime.
ГГГГ-ММ-ДД чч:мм:сс
и нажать «ОК». Подобным образом должны быть отформатированы обе ячейки. Затем, обязательно указать в этих ячейках какой-нибудь временной интервал.
В случае не правильного формата ячеек или отсутствия в них значений, вы будете получать ошибку при указании ячейки для параметра запроса.
Для поиска строковых значений дополнительно делать ничего не нужно, однако крайне рекомендую вам обрамлять ваши фамилии, имена и отчества знаками процента [%] (см. рисунок выше) прямо в ячейках, т.к. включить их в запрос в Excel не получится. Если этого не делать, то запрос будет искать полное соответствие передаваемой строки.