В формулах можно использовать математические и логические операции, константы, поля таблиц, активные фильтры, локальные запросы, функции МИС МЕДИАЛОГ.
Математические операции
В формулах поддерживаются следующих математические операции:
+ сложение
- вычитание
* умножение
/ деление
Для определения приоритета операций используются скобки: ().
Операции сравнения
В формулах поддерживаются следующих логические операции:
= равно
<> не равно
> больше
< меньше
>= больше или равно
<= меньше или равно
Логические операторы
В формулах поддерживаются логические операторы AND, OR, NOT.
Константы
В формулах допускается использование числовых и текстовых констант. Значение текстовой константы пишется в одинарных кавычках, при этом значение в редакторе подсвечивается синим цветом:
'Hello world!'
Существует возможность вставить в формулу текст на разных языках. Для этого нужно нажать кнопку Вставить строку и ввести значения на нужных языках. |
В редакторе формул появится выражение вида ParseLangString('#rus#Фамилия#eng#Surname'). Строка примет соответствующее значение в зависимости от того, с каким кодом языка запускается МЕДИАЛОГ ("rus", "eng" и т.д.).
Специальные символы
Сочетание символов '**' используется для обозначения перехода на новую строку: аналог выражения Char(10)+Char(13) – перенос строки и возврат каретки. В отличие от функции Char() данное сочетание доступно только в формулах для поля и применяется только к мемо-полям.
Комментарии
Комментарии в формулах помещаются между символами /* и */:
/*текст комментария*/
Поля таблиц
Обращение к значению поля в редакторе формул осуществляется в виде {Таблица.Поле}.
Для того, чтобы не писать имя таблицы и поля вручную, следует воспользоваться кнопкой Добавить поле. |
В открывшемся окне (рис. 2.2), выбираются таблица и поле в ней. Ниже нужно указать, какое значение поля требуется подставить в формулу, и нажать кнопку Добавить.
Флажок Текущее поле возвращает курсор на текущую таблицу и текущее (редактируемое) поле.
Рисунок 2.2. Выбор поля
Пустое поле (NULL)
В формулах можно использовать специальное значение NULL, обозначающее, что поле не содержит никакого значения. Для проверки поля на пустое значение используется специальная функция ISNULL(<Поле>). Формула также может возвращать пустое значение, например,
IF(ISNULL( {Анамнез жизни.Развитие} ),NULL,'Заполнено')
Активные и динамические фильтры
Список доступных активных фильтров открывается из меню Фильтры по текущему срезу данных кнопки Добавить поле. Чтобы добавить динамический фильтр, в меню кнопки нужно выбрать пункт Динамический фильтр. В данном пункте меню перечислены динамические фильтры, активные в системе в данный момент. Чтобы вставить в выражение произвольный фильтр, нужно выбрать пункт меню Динамический фильтр / Добавить. |
Обращение к активному фильтру: {=Активный фильтр}
Обращение к динамическому фильтру: {=:Таблица.Поле}
Скрипты и запросы
Вызов в формулах скриптов и запросов производится с помощью специальных функций (см. Вызов скриптов и запросов).
Чтобы вставить в формулу имя скрипта (запроса), в меню кнопки Добавить поле нужно выбрать пункт Скрипты / запросы и в открывшемся списке выбрать скрипт (запрос). |
Локальные запросы
Кнопка, изображенная слева, открывает окно, в котором выбирается поле локального запроса, значение которого будет использовано при вычислении формулы. |
Обращение к полю локального запроса: {@Локальный запрос.Поле}
Запись таблицы
Кнопка Добавить запись позволяет сослаться на ID записи таблицы, при этом данная запись помечается в системе как ресурс. Подробнее о ресурсах см. раздел документации СИСТЕМА ПЕРЕНОСА РЕСУРСОВ. УТИЛИТА RESMANAGER (Administration.pdf). |
Функции
В формулах можно использовать функции МИС МЕДИАЛОГ.
Чтобы добавить в текст формулы какую-либо функцию, нужно выбрать ее в выпадающем списке и нажать кнопку Вставить функцию в формулу. Название функции в редакторе подсвечивается красным. |
Полный список функций см. в разделе Перечень функций МИС МЕДИАЛОГ.
Поиск строки таблицы, n-line таблицы, локального запроса
При добавлении в формулу поля таблицы или локального запроса может потребоваться взять значение поля из определенной строки, соответствующей заданным условиям. Существует несколько способов поиска нужной строки.
Условие для поиска строки в обычной таблице, n-line таблице или локальном запросе задается после символа |.
Для поиска значения в n-line таблице после символа | можно прописать условие в виде Таблица.Поле=Значение. В условии поддерживаются логические операторы, математические операции и операции сравнения. Например, чтобы из таблицы Диагнозы получить значение поля Диагноз с классификацией Диагноз стационара = "направившего учреждения" и Вид заболевания – "основное заболевание", используется следующая формула:
{Диагнозы.Диагноз|{Диагнозы.Диагноз стационара} ='направившего учреждения' AND {Диагнозы.Вид заболевания} ='основное заболевание'}
Аналогично определяется условие поиска строки локального запроса. Следующая формула вернет значение поля Развитие текущей записи ЭМК:
{@Анамнез жизни.Развитие|{@Анамнез жизни.MOTCONSU_ID}={=Текущая запись}}
Кроме того, для поиска строки локального запроса используются функции RecCount() и RecNo().
Для поиска строки в обычных таблицах, n-line таблицах и локальных запросах предназначены функции FIND() и FINDNEAREST():
FIND('<поле1> [;<поле2>;<поле3>]', <знач1> [,<знач2>, <знач3>] ) |
Функция ищет значение(-ия) в поле(-ях). Если находит, позиционируется на найденную строку и возвращает значение поля, иначе возвращает пустое значение null. |
FINDNEAREST('<поле1> [;<поле2>;<поле3>]', <знач1> [,<знач2>, <знач3>], <asc|desc> ) |
Функция, аналогичная функции FIND(), ищет ближайшее подходящее значение, если не найдено точное. Параметр asc|desc – искать ближайшее большее или меньшее значение. |
Эти функции доступны только в контексте поиска: после ввода в редакторе формул символа | они отображаются в списке функций (рис. 2.3).
Добавить функцию в выражение можно кнопкой Вставить функцию. Ниже с помощью аналогичной кнопки можно выбрать поля таблицы или локального запроса, по которым будет производиться поиск. |
Рисунок 2.3. Функции поиска по таблице и локальному запросу
Пример: выражение
{Пациенты.Номер ЭМК|FIND('NOM;PRENOM','АБАКУМОВА', 'Ирина' )}
вернет значение поля Номер ЭМК пациента с фамилией "АБАКУМОВА" и именем "Ирина".
Отличие использования выражений поиска и функций FIND(), FINDNEAREST()
При указании выражения поиска после | для n-line таблицы поиск происходит в текущей записи ЭМК. При использовании функций FIND() и FINDNEAREST() поиск производится в срезе данных по пациенту. Таким образом, при необходимости искать данные только в определенной записи необходимо добавить к полям поиска поле MOTCONSU_ID. Например, два следующих выражения аналогичны:
{Диагнозы.Вид заболевания|FIND('N_LINE;MOTCONSU_ID', 2,{=Текущая запись})}
{Диагнозы.Вид заболевания|{Диагнозы.№}=2}