Введение
В АСР «Fastcom» применяется принцип поиска необходимой информации, называемый QBE (Query by Example).
QBE - способ задания условий отбора нужных строк в Списках максимально наглядным и быстрым способом.
В Списке остаются только те строки, которые соответствуют текстовым образцам, заданным в полях, на которые необходимо наложить ограничения.
Условия, заданные таким способом, легко читаются и понимаются пользователем, так как интуитивно понятны и наглядны.
Кроме того, установленные условия легко подвергаются коррекции, модификации, сохранению под именем и быстрому восстановлению в нужный момент.
Общие принципы
В любом Списке универсального интерфейса можно включить режим Запроса по образцам (QBE), в котором список очищается и пользовать может вводить тексты в любое видимое поле одной или нескольких строк.
Текст в любой ячейке преобразуется в одно или несколько условий (предикатов), применяемых к тому столбцу, в котором введён текст.
Условия, указанные в одной строке объединяются отношением «И». Несколько строк с условиями объединяются отношением «Или».
Пример:
Данное условие интерпретируется так:
Отобразить все договоры, которые в номере содержат три нуля подряд и заключены позже 2012 года, а также договоры с юридическими лицами, заключёнными до 2013 года и кроме того, любые договоры ровно на три объекта.
На уровне SQL условия из данного примера порождают следующие предикаты:
CONTRACT_NO like '%000%' and CONTRACT_DATE >= To_DATE('01.01.13', 'DD.MM.RR')
or CONTRACT_DATE < To_DATE('01.01.13', 'DD.MM.RR') and LEGAL_STATUS = 'ЮЛ'
or N_OBJECT=3
Язык предикатов
Каждая ячейка в режиме QBE может содержать текст условия (предикат), которое задаётся одним из перечисленных способов:
Шаблон | Название | Итоговый предикат | Пояснение |
Текст не содержит %, не начинается с = |
Равно |
Col = 'Текст' |
Col - текстовый столбец |
Col = Текст |
Col - числовой столбец без указания формата |
Col = To_Date('Текст','Формат') |
Col - столбец с форматом даты/времени |
Col = To_Number('Текст','Формат') |
Col - столбец с форматом числа |
=Текст |
Равно |
Col = 'Текст' |
Col - текстовый столбец |
Col = Текст |
Col - числовой столбец без указания формата |
Col = To_Date('Текст','Формат') |
Col - столбец с форматом даты/времени |
Col = To_Number('Текст','Формат') |
Col - столбец с форматом числа |
Текст не начинается с = |
Похож |
Col like 'Текст' |
Col - текстовый столбец. Текст содержит % |
To_Char(Col,'Формат') like 'Текст' |
Col - столбец c форматом даты/времени или числа. Текст содержит % |
<>Текст |
Не равно |
Col <> 'Текст' |
Col - текстовый столбец |
Col <> Текст |
Col - числовой столбец без указания формата |
Col <> To_Date('Текст','Формат') |
Col - столбец с форматом даты/времени |
Col <> To_Number('Текст','Формат') |
Col - столбец с форматом числа |
>Текст |
Больше |
Col > 'Текст' |
Col - текстовый столбец |
Col > Текст |
Col - числовой столбец без указания формата |
Col > To_Date('Текст','Формат') |
Col - столбец с форматом даты/времени |
Col > To_Number('Текст','Формат') |
Col - столбец с форматом числа |
<Текст |
Меньше |
Col < 'Текст' |
Col - текстовый столбец |
Col < Текст |
Col - числовой столбец без указания формата |
Col < To_Date('Текст','Формат') |
Col - столбец с форматом даты/времени |
Col < To_Number('Текст','Формат') |
Col - столбец с форматом числа |
>=Текст |
Больше или равно |
Col >= 'Текст' |
Col - текстовый столбец |
Col >= Текст |
Col - числовой столбец без указания формата |
Col >= To_Date('Текст','Формат') |
Col - столбец с форматом даты/времени |
Col >= To_Number('Текст','Формат') |
Col - столбец с форматом числа |
<=Текст |
Меньше или равно |
Col <= 'Текст' |
Col - текстовый столбец |
Col <= Текст |
Col - числовой столбец без указания формата |
Col <= To_Date('Текст','Формат') |
Col - столбец с форматом даты/времени |
Col <= To_Number('Текст','Формат') |
Col - столбец с форматом числа |
Текст1><Текст2 |
Между |
Col between 'Текст1' and 'Текст2' |
Col - текстовый столбец |
Col between Текст1 and Текст2 |
Col - числовой столбец без указания формата |
Col between To_Date('Текст1','Формат') and To_Date('Текст2','Формат') |
Col - столбец с форматом даты/времени |
Col between To_Number('Текст1','Формат') and To_Number('Текст2','Формат') |
Col - столбец с форматом числа |
!Условие |
Отрицание |
not Условие |
Добавляет отрицание к последующему условию |
Текст1 # Текст2 |
SQL выражение «как есть» |
Текст1 Col Текст2 |
Решётка будет заменена на код текущего столбца Списка. Никаких других преобразований не производится |
Примеры задания условий
Столбец | Текст условия | Итоговый предикат |
№ договора | F0104-46955 | CONTRACT_NO='F0104-46955' |
Клиент | ЗАО% | FULLNAME like 'ЗАО%' |
Клиент | =ЗАО% | FULLNAME='ЗАО%' |
Документ | = | DOC_TYPE_CODE is null |
Документ | <> | DOC_TYPE_CODE is not null |
Документ | ! | not DOC_TYPE_CODE is null |
Документ | !<> | not DOC_TYPE_CODE is not null |
№ договора | == | CONTRACT_NO='=' |
Конвертов | >1 | ENVELOPE_CNT>1 |
Объектов | %0 | To_Char(N_OBJECT) like '%0' |
Дата | >15.12.11 | CONTRACT_DATE>To_DATE('15.12.11','DD.MM.RR') |
Дата | 01.12.11><01.01.12 | CONTRACT_DATE between To_DATE('01.12.11','DD.MM.RR') and To_DATE('01.01.12','DD.MM.RR') |
Добавление сложных условий
Наличие решётки в тексте QBE говорит о том, что Вы сами будете составлять синтаксически правильное условие для текущего столбца.
Решётка может входить в текст один или несколько раз.
Каждая решётка будет заменена на код текущего столбца (без обрамляющих пробелов!).
Условие может содержать один или несколько предикатов и состоять их любых синтаксически правильных SQL-конструкций:
- Системных функций
- Функций схемы АСР Fastcom
- Текстовых констант в одинарных кавычках
- Кодов других столбцов
- Подзапросов
Примеры задания условий:
Столбец | Текст условия | Итоговый предикат |
№ договора | #=LEGAL_STATUS||ID | CONTRACT_NO=LEGAL_STATUS||ID |
Дата | #>SysDate-1 | CONTRACT_DATE>SysDate-1 |
Клиент | # not like '=%' | FULLNAME not like '=%' |
Конвертов | #>2 and #<>10 | ENVELOPE_CNT>2 and ENVELOPE_CNT<>10 |
ID договора | # not in (Select CONTRACT_ID from CT_T_CONTACT_PERSON where Position like 'DIR%') | ID not in (Select CONTRACT_ID from CT_T_CONTACT_PERSON where Position like 'DIR%') |
Сохранение условий
Введённые при помощи QBE условия (наряду с порядком сортировки) могут быть сохранены в пользовательской конфигурации, чтобы потом быть быстро применены при выборе сохранённой конфигурации из списка.
Если пользователь выбирает конфигурацию, то все ранее введённые условия QBE удаляются, а вместо них подставляются условия QBE из сохранённой конфигурации.
После выбора конфигурации пользователь может скорректировать условия QBE и при желании сохранить их в той же или новой конфигурации.