§Функциональность доступна при наличии лицензии на модуль "ЭМК"
Создание запроса с таким выражением для подсчета количества записей рассмотрим на примере: создадим простой локальный запрос, вычисляющий количество диагнозов с признаком «основной» в текущей записи.
Фильтр в запросе:
{Вид заболевания} = 0 and ( {MOTCONSU_ID} = {Текущая запись} and {DATA22_ID} <> {Диагнозы.DATA22_ID},
где
·{Вид заболевания} = 0 – это признак основного заболевания;
·{MOTCONSU_ID} = {Текущая запись} – диагнозы только текущей записи;
·{DATA22_ID} <> {Диагнозы.DATA22_ID} – выражение, означающее, что строка локального запроса не равна текущей строке курсора таблицы DATA22 в памяти.
Курсор таблицы DATA22 в памяти – это те данные из таблицы DATA22, которые мы видим при редактировании экрана ДИАГНОЗЫ. Эти данные отличаются от физических данных в таблице DATA22 на SQL сервере до момента выхода с экрана (сохранения данных на сервере).
Текущая строка курсора – может быть любая строка n-line таблицы в записи, которая выбрана (выделена). Если в записи есть только одна строка в таблице Диагнозы, то эта запись и будет текущей, причем неважно, какой экран открыт в МЕДИАЛОГ (это могут быть, например, Резюме или Титульный лист).
Последнее условие приводит к тому, что счетчик возвращает всегда на единицу меньшее значение, чем число строк в DATA22 в записи. Это сделано для того, чтобы исключить из контроля текущую строку ДИАГНОЗОВ – ту, которая редактируется, т.к. эта строка до момента ее сохранения не попадает в локальный запрос.
Контроль по текущей строке ДИАГНОЗОВ можно осуществить в формуле контроля для таблицы Диагнозы:
IF( {@кол-во основных заболеваний.кол-во} > 0 and {Диагнозы.Вид заболевания} = 0 and not isnull({Диагнозы.Вид заболевания}), MSGWARN( 'В РАМКАХ ОДНОГО СЛУЧАЯ НЕ МОЖЕТ БЫТЬ ПОСТАВЛЕНО БОЛЕЕ ОДНОГО ОСНОВНОГО ДИАГНОЗА' ), 0 )
Рисунок 7.1. Локальный запрос «кол-во основных заболеваний»
Такая конфигурация осуществляет гарантированный контроль количества диагнозов по основному заболевания – не более двух в одной записи (либо событии).
Этот контроль будет срабатывать только при редактировании данных таблицы Диагнозы; если же редактировались данные из других таблиц, например, поле Случай посещения из таблицы Амбулаторный талон, контроль не сработает.
Для того чтобы контроль срабатывал при редактировании любых данных на экране, формулу контроля нужно поставить контроль экранной формы соответствующего типа записи (рис. 20).
Рисунок 7.2. Формула контроля в типе записи «Форма 025-12/у»