Динамические и фильтрованные списки
Предположим, база данных содержит таблицы items, companies и item_companies.
Требуется, чтобы для статьи выручки отображались только покупатели, а для статьи расходов - только поставщики.
Типичный список запросов выглядит как
SELECT id, name FROM companies
Если основной запрос данных содержит параметр @item_id, то его можно использовать и для списка значений.
Например, в SQL-запросе как
SELECT c.id, c.name FROM companies c INNER JOIN item_companies ic ON ic.company_id = c.id WHERE ic.item_id = @item_id
Это пример динамического списка значений.
Такие списки значений обновляются при каждом изменении параметров типа @item_id.
Второй случай, когда колонка item_id есть в таблице данных.
В этом случае, следует показывать список покупателей, если item_id содержит статью выручки, и список поставщиков, если статью расходов.
Для решения этой задачи можно добавить третью колонку, которая используется для фильтра, как item_id для примера.
Например, SQL-запрос может выглядеть следующим образом:
SELECT c.id, c.name, ic.item_id FROM companies c INNER JOIN item_companies ic ON ic.company_id = c.id
Это пример фильтрованного списка.
В Excel для этого используются динамические формулы, которые надстройка SaveToDB создает автоматически.
Другие продукты просто фильтруют списки значений по значению третьей колонки.
В некоторых случаях, реализация может быть более простой при использовании таблиц или представлений.
Например, таблица states содержит колонки: id, country_id, state.
Если основной запрос данных содержит параметр @country_id, то можно задать запрос из таблицы в поле HANDLER_CODE в следующем виде:
id, +state, @country_id
Такой код преобразуется в запрос:
SELECT id, state FROM states WHERE country_id = @country_id ORDER BY state
Для создания фильтрованного списка значений, достаточно задать три колонки в поле HANDLER_CODE (country_id должна быть третьей):
id, state, country_id
Такой запрос преобразуется в простой SELECT:
SELECT id, state, country_id FROM states
Для фильтрованных списков параметры сортировки + и - можно не использовать, т.к. списки сортируются автоматически.