Справка

Реестр формы

Облачный Pyrus
Безоблачный Pyrus

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

Есть форма «Публикация приказа» с полями «Год», «Номер» и «Документ» (файл с приказом). С помощью запроса реестра из скрипта можно убедиться, что приказ за тот же год и с тем же номером еще не был опубликован:

form.onChange(['Год', 'Номер'])
  .validateAsync('Номер', async state => {
    const [year, num] = state.changes;

    if (!year || !num)
      return null;

    if (year.text && num.text) {
      const duplicates = await form.fetchSelfRegister(f => f
        .fieldEquals('Год', year)
        .fieldEquals('Номер', num), []
      );

      if (!duplicates || !duplicates.tasks)
        return null;

      const firstDuplicate = duplicates.tasks[0];
      if (firstDuplicate)
        return {
          errorMessage: `Приказ <a href="#id${firstDuplicate.task_id}">уже опубликован</a>`
        };
    }

        return null;
    });

Теперь при попытке повторно заполнить форму теми же данными пользователь увидит ошибку со ссылкой на уже существующий приказ:

Чтобы скачать реестр формы, используйте в запросе параметр fetchSelfRegister.

По умолчанию по этому запросу приходят все включенные в реестр задачи — как открытые, так и закрытые. Для этого используется запрос вида:

const duplicates = await form.fetchSelfRegister(f => f
        .fieldEquals('Год', year)
        .fieldEquals('Номер', num), []
      );

Чтобы получить из реестра только активные задачи, используйте запрос вида:

const duplicates = await form.fetchSelfRegister(f => f
        .fieldEquals('Год', year)
        .fieldEquals('Номер', num), [], {
            activeOnly: true,
        }
      );

А чтобы отфильтровать и выгрузить из реестра только завершенные задачи, используйте запрос вида:

const duplicates = await form.fetchSelfRegister(f => f
        .fieldEquals('Год', year)
        .fieldEquals('Номер', num), [], {
            archivedOnly: true
        }
      );

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

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

const duplicates = await form.fetchRegister(id_form, f => f
       .fieldEquals('Номер', num), [] );

где в id_form следует указать id формы, реестр которой нужно получить.

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