Правила в ГБ — различия между версиями
Bars (обсуждение | вклад) |
Bars (обсуждение | вклад) |
||
Строка 10: | Строка 10: | ||
*Правила – срабатывают при изменении значений полей. Могут использоваться для реализации всевозможных пересчетов и проверок в процессе ввода данных. | *Правила – срабатывают при изменении значений полей. Могут использоваться для реализации всевозможных пересчетов и проверок в процессе ввода данных. | ||
− | Внимание | + | {{Внимание|1=Правила срабатывают при любом изменении в датасетах, упоминаемых в правиле (см [[#Момент срабатывания|ниже]]), поэтому их использование часто вызывает нежелаетльные побочные эффекты. Гораздо нагляднее и прозрачнее использовать обработчики изменения полей.}} |
− | Правила срабатывают при любом изменении в датасетах, упоминаемых в правиле (см [[#Момент срабатывания|ниже]]), поэтому их использование часто вызывает нежелаетльные побочные эффекты. Гораздо нагляднее и прозрачнее использовать обработчики изменения полей. | ||
*Постусловия – срабатывают непосредственно перед сохранением изменений. Могут использоваться для проверки правильности введенных данных. | *Постусловия – срабатывают непосредственно перед сохранением изменений. Могут использоваться для проверки правильности введенных данных. | ||
Строка 19: | Строка 18: | ||
*Обработчики изменения полей, внешних событий, нажатий на кнопки, переключения закладок - срабатывают только при соответствующих событиях. | *Обработчики изменения полей, внешних событий, нажатий на кнопки, переключения закладок - срабатывают только при соответствующих событиях. | ||
− | Внимание | + | {{Внимание|1=После редактирования правил, чтобы увидеть результат, форму нужно открыть заново!}} |
− | После редактирования правил, чтобы увидеть результат, форму нужно открыть заново! | ||
Колонки редактора правил: | Колонки редактора правил: | ||
Строка 84: | Строка 82: | ||
В ТЕКУЩУЮ товарную строчку документа запишется количество 1. | В ТЕКУЩУЮ товарную строчку документа запишется количество 1. | ||
− | + | {{Внимание|1=Необходимо помнить, что правила выполняются последовательно, от первой строки правил до последней. | |
− | Необходимо помнить, что правила выполняются последовательно, от первой строки правил до последней. | + | Если необходимо изменить положение строчек правил относительно друг друга, то необходимо произвести в строке какие-то изменения, отказаться от них, и "Принять" правила. После этих манипуляций, строка, которая редактировалась, в списке правил займет последнюю позицию.}} |
− | Если необходимо изменить положение строчек правил относительно друг друга, то необходимо произвести в строке какие-то изменения, отказаться от них, и "Принять" правила. После этих манипуляций, строка, которая редактировалась, в списке правил займет последнюю позицию. | ||
==Примечание. Имена датасетов== | ==Примечание. Имена датасетов== | ||
Строка 95: | Строка 92: | ||
Links – связи | Links – связи | ||
− | == | + | ==Примеры== |
установить тип операции №109, если в поле нет значения | установить тип операции №109, если в поле нет значения | ||
Предусловие | Предусловие |
Текущая версия на 10:53, 11 января 2011
С электронными формами ГБ могут быть связаны правила. Для редактирования правил необходимо запустить редактор электронных форм и из меню выбрать пункт "Правила...".
Содержание
Виды правил
- Предусловия – срабатывают при открытии формы, после того, как загружены данные. Могут использоваться для задания значений по умолчанию, изменения внешнего вида формы в зависимости от данных и пр.
- Правила – срабатывают при изменении значений полей. Могут использоваться для реализации всевозможных пересчетов и проверок в процессе ввода данных.
Внимание! Правила срабатывают при любом изменении в датасетах, упоминаемых в правиле (см ниже), поэтому их использование часто вызывает нежелаетльные побочные эффекты. Гораздо нагляднее и прозрачнее использовать обработчики изменения полей. |
- Постусловия – срабатывают непосредственно перед сохранением изменений. Могут использоваться для проверки правильности введенных данных.
- Постусловия после сохранения – срабатывают сразу после того, как завершено сохранение объекта в базу данных. Используются, когда необходимо узнать код созданного объекта и выполнить с ним какие-то манипуляции, либо какое-то из полей объекта, заполненное в процедуре сохранения. В таких постусловиях "Установить для поля" должно иметь значение 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) |