scripts:catalogs

Справочники

Скрипты позволяют с помощью метода getCatalog получать значения справочников и использовать их в форме: например, вычислять табличные значения или фильтровать строки одного справочника по значению из другого справочника.

Допустим, есть задача: когда оператор выбирает в форме регион, в поле «Город» должны быть доступны только города из этого региона, а не общий список городов.

В этом примере полю «Регион» соответствует справочник «Регионы», а полю «Город» — справочник «Города». Города и регионы связаны между собой в отдельном справочнике «Города по регионам».

Чтобы фильтровать список городов по выбранному региону, добавим в скрипты формы следующий блок кода:

let catalogItems = null;

form.getCatalog("
Города по регионамНазвание справочника, который связывает значения двух других справочников
").then(items => { catalogItems = items; }); form.onChange(["
РегионПоле, при изменении которого меняется список выбираемых значений в другом поле
"]) .setFilter("
ГородПоле, значения в котором фильтруются в зависимости от выбора в первом поле
", state => { const [region] = state.changes; if (!catalogItems || !region || !region.columns) return null; const regionCol = region.columns["
РегионНазвание колонки, по значениям которой осуществляется фильтрация
"]; const filtered = catalogItems .filter(item => item.columns["
РегионНазвание колонки, по значениям которой осуществляется фильтрация
"] === regionCol) .map(item => item.columns["
ГородНазвание колонки, из которой берутся отфильтрованные значения
"]); return filtered.length > 0 ? { values: filtered } : null });

Обратите внимание: получить справочник можно не только по названию, но еще и номеру ID. В этом случае соотвествующий фрагмент кода в скрипте будет выглядеть так:

let catalogItems = null;
form.getCatalog(
123ID справочника, который связывает значения двух других справочников
).then(items => { catalogItems = items; });

Подсказка: при создании скрипта следует учитывать, что он должен обращаться к названию собственно справочника, а не одноименного поля в форме. Например, в форме может использоваться поле типа Справочник под названием Страны и регионы, к которому привязан сам справочник Страны. В этом случает скрипт должен обращаться к объекту под названием Страны.

Была ли эта статья полезной?

Да, спасибо! Нет, остался вопрос