Правила в ГБ
С электронными формами ГБ могут быть связаны правила. Для редактирования правил необходимо запустить редактор электронных форм и из меню выбрать пункт "Правила...".
Содержание
Виды правил
- Предусловия – срабатывают при открытии формы, после того, как загружены данные. Могут использоваться для задания значений по умолчанию, изменения внешнего вида формы в зависимости от данных и пр.
- Правила – срабатывают при изменении значений полей. Могут использоваться для реализации всевозможных пересчетов и проверок в процессе ввода данных.
Внимание! Правила срабатывают при любом изменении в датасетах, упоминаемых в правиле (см ниже), поэтому их использование часто вызывает нежелаетльные побочные эффекты. Гораздо нагляднее и прозрачнее использовать обработчики изменения полей. |
- Постусловия – срабатывают непосредственно перед сохранением изменений. Могут использоваться для проверки правильности введенных данных.
- Постусловия после сохранения – срабатывают сразу после того, как завершено сохранение объекта в базу данных. Используются, когда необходимо узнать код созданного объекта и выполнить с ним какие-то манипуляции, либо какое-то из полей объекта, заполненное в процедуре сохранения. В таких постусловиях "Установить для поля" должно иметь значение DataSet.ObjectSaved. Код созданного объекта доступен через DataSet.Id, любое другое поле - через GB_GET.
- Обработчики изменения полей, внешних событий, нажатий на кнопки, переключения закладок - срабатывают только при соответствующих событиях.
Внимание! После редактирования правил, чтобы увидеть результат, форму нужно открыть заново! |
Колонки редактора правил: Когда (имеет смысл только для "Правил") – условие срабатывания правила. Пусто – всегда. Примеры: 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.
Примечание. Имена датасетов
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) |