Правила в ГБ

Материал из GB wiki
Перейти к: навигация, поиск

С электронными формами ГБ могут быть связаны правила. Для редактирования правил необходимо запустить редактор электронных форм и из меню выбрать пункт "Правила...".

Виды правил

  • Предусловия – срабатывают при открытии формы, после того, как загружены данные. Могут использоваться для задания значений по умолчанию, изменения внешнего вида формы в зависимости от данных и пр.


Important yellow.png Внимание!
При создании нового объекта у него еще не заполнены поля, поэтому делать какие-то проверки при создании сложно. Критерием того, что объект создается, является условие DataSet.Id=-1. Чтобы получить информацию о создаваемом объекте, можно использовать переменные :CurrentFirm (текущая собственная фирма) и :CurrentDocType (тип создаваемого документа).
  • Правила – срабатывают при изменении значений полей. Могут использоваться для реализации всевозможных пересчетов и проверок в процессе ввода данных.


Important yellow.png Внимание!
Правила срабатывают при любом изменении в датасетах, упоминаемых в правиле (см ниже), поэтому их использование часто вызывает нежелаетльные побочные эффекты. Гораздо нагляднее и прозрачнее использовать обработчики изменения полей.
  • Постусловия – срабатывают непосредственно перед сохранением изменений. Могут использоваться для проверки правильности введенных данных.
  • Постусловия после сохранения – срабатывают сразу после того, как завершено сохранение объекта в базу данных. Используются, когда необходимо узнать код созданного объекта и выполнить с ним какие-то манипуляции, либо какое-то из полей объекта, заполненное в процедуре сохранения. В таких постусловиях "Установить для поля" должно иметь значение DataSet.ObjectSaved. Код созданного объекта доступен через DataSet.Id, любое другое поле - через GB_GET.
  • Обработчики изменения полей, внешних событий, нажатий на кнопки, переключения закладок - срабатывают только при соответствующих событиях.


Important yellow.png Внимание!
После редактирования правил, чтобы увидеть результат, форму нужно открыть заново!

Колонки редактора правил: Когда (имеет смысл только для "Правил") – условие срабатывания правила. Пусто – всегда. Примеры: 1<5, HeapSet.@Discount2>0

Установить для поля – Поле, для которого будет установлено новое значение, или имя датасета, на котором срабатывает правило. Примеры: DataSet, HeapSet.@DiscountPercents

Значение - значение, которое будет установленно в поле "Установить для поля". Примеры: -0.5, HeapSet.@DiscountPercents

Принципы работы правил

Момент срабатывания

Предусловия и постусловия срабатывают при открытии и сохранении соответсвенно.

Правила срабатывают в следующих случаях:

  • При любых изменениях датасета, указанного в колонке «Установить для поля».

Пример:

Когда Установить для поля Значение
DataSet.DocNumber `!!!`

При любых действиях в документе в поле DocNumber запишется !!!

  • Если колонка «Значение» начинается с имени датасета – то при его изменении правило также срабатывает.

Пример:

Когда Установить для поля Значение
HeapSet.@PriceList DataSet.Kind.Heap.@PriceList

При изменении операции документа значение из ее хипа запишется в хип документа.

  • Если колонка «Когда» начинается с имени датасета – то при его изменении правило также срабатывает.

Пример:

Когда Установить для поля Значение
DataSet.Kind in (1,2,3) HeapSet.@PriceList 5

При изменении операции документа в хип документа запишется константа.

Результат срабатывания

Если датасет из колонки «Установить для» содержит несколько записей – значение будет записано во все. Пример:

Когда Установить для поля Значение
Goodies.Quantity 1

ВО ВСЕ товарные строчки документа запишется количество 1.

Если нужно изменить значение только в текущей строке датасета, следует пользоваться функцией ASSIGN. Пример:

Когда Установить для поля Значение
HeapSet Assign(“Goodies.Price”,1)

В ТЕКУЩУЮ товарную строчку документа запишется количество 1.


Important yellow.png Внимание!
Необходимо помнить, что правила выполняются последовательно, от первой строки правил до последней.

Если необходимо изменить положение строчек правил относительно друг друга, то необходимо произвести в строке какие-то изменения, отказаться от них, и "Принять" правила. После этих манипуляций, строка, которая редактировалась, в списке правил займет последнюю позицию.

Примечание. Имена датасетов

DataSet – основной датасет, шапка объекта. HeapSet –хип объекта. Для документов: Goodies – товары Links – связи

Примеры

установить тип операции №109, если в поле нет значения Предусловие

Установить для поля Значение
DataSet.Kind IFEMPTY(DataSet.Kind,109)

установить тип валюты документа ИД=1, если в поле нет значения Предусловие

Установить для поля Значение
DataSet.DocCurrency IFEMPTY(DataSet.DocCurrency,1)

установить в поле "Агент" текущего пользователя, если в поле нет значения Предусловие

Установить для поля Значение
DataSet.Agent IFEMPTY(DataSet.Agent,User())

установить в поле Heap.@PriceList прайс-лист с ИД=1, если в поле нет значения Предусловие

Установить для поля Значение
HeapSet.@PriceList IFEMPTY(HeapSet.@PriceList,1)