Зависимые списки значений
Рассмотрим следующую конфигурацию:
ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE |
---|---|---|---|---|---|---|---|---|
s02 | usp_cashbook | company_id | ValidationList | s02 | companies | TABLE | id, +name | |
s02 | usp_cashbook | company_id | ParameterValues | s02 | companies | TABLE | id, +name |
В этом примере списки значений для колонки и параметра company_id
берутся из таблицы companies
.
Если кто-то добавит или изменит компанию, пользователи, открывшие запрос usp_cashbook
, должны обновить данные и конфигурацию или списки значений.
SaveToDB 10
предлагает более эффективное решение, если пользователь обновляет справочники и данные в одной книге. Например, при сохранении изменений в таблице companies
надстройка автоматически обновит списки значений для колонки и параметра.
Приведенный выше пример достаточно прост, так как список загружается из таблицы, которая сохраняется.
Теперь рассмотрим новую конфигурацию, где для получения значений используются процедуры, которые извлекают данные из таблицы companies
.
ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE |
---|---|---|---|---|---|---|---|---|
s02 | usp_cashbook | company_id | ValidationList | s02 | xl_list_company_id | PROCEDURE | ||
s02 | usp_cashbook | company_id | ParameterValues | s02 | xl_list_company_id | PROCEDURE |
В этом случае надстройка будет автоматически обновлять списки, если сможет проанализировать код хранимой процедуры и определить исходную таблицу.
Разработчики могут явно указать зависимость, используя тип события DependsOn.
Например:
ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE |
---|---|---|---|---|---|---|---|---|
s02 | usp_cashbook | company_id | DependsOn | s02 | companies | TABLE |
Этот подход достаточно прост: можно просто скопировать строку настройки списка значений и заменить ValidationList
на DependsOn
. Однако он приводит к дублированию строк для многих объектов.
Существует альтернативный способ указания зависимостей:
ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE |
---|---|---|---|---|---|---|---|---|
s02 | xl_list_company_id | DependsOn | s02 | companies | TABLE |
Эта настройка указывает, что процедура списка значений зависит от таблицы companies
. Таким образом, надстройка обновит все списки, основанные на xl_list_company_id
, при сохранении изменений в таблице companies
.
Кроме того, можно установить зависимость между формами редактирования и их исходными таблицами. Например, если процедура usp_companies
используется для редактирования компаний, можно установить ее зависимость:
ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE |
---|---|---|---|---|---|---|---|---|
s02 | usp_companies | DependsOn | s02 | companies | TABLE |
В этом случае, если пользователь сохранит значения, загруженные из процедуры usp_companies
, надстройка обновит все списки, основанные на таблице companies
и процедуре xl_list_company_id
.