Правила в ГБ — различия между версиями
Bars (обсуждение | вклад) (Новая страница: «Категория:Настройка ГБ С электронными формами ГБ могут быть связаны правила. Для редак…») |
Bars (обсуждение | вклад) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 6: | Строка 6: | ||
*Предусловия – срабатывают при открытии формы, после того, как загружены данные. Могут использоваться для задания значений по умолчанию, изменения внешнего вида формы в зависимости от данных и пр. | *Предусловия – срабатывают при открытии формы, после того, как загружены данные. Могут использоваться для задания значений по умолчанию, изменения внешнего вида формы в зависимости от данных и пр. | ||
− | Внимание | + | {{Внимание|1=При создании нового объекта у него еще не заполнены поля, поэтому делать какие-то проверки при создании сложно. Критерием того, что объект создается, является условие DataSet.Id=-1. Чтобы получить информацию о создаваемом объекте, можно использовать переменные :CurrentFirm (текущая собственная фирма) и :CurrentDocType (тип создаваемого документа).}} |
− | При создании нового объекта у него еще не заполнены поля, поэтому делать какие-то проверки при создании сложно. Критерием того, что объект создается, является условие DataSet.Id=-1. Чтобы получить информацию о создаваемом объекте, можно использовать переменные :CurrentFirm (текущая собственная фирма) и :CurrentDocType (тип создаваемого документа). | ||
*Правила – срабатывают при изменении значений полей. Могут использоваться для реализации всевозможных пересчетов и проверок в процессе ввода данных. | *Правила – срабатывают при изменении значений полей. Могут использоваться для реализации всевозможных пересчетов и проверок в процессе ввода данных. | ||
− | Внимание | + | {{Внимание|1=Правила срабатывают при любом изменении в датасетах, упоминаемых в правиле (см [[#Момент срабатывания|ниже]]), поэтому их использование часто вызывает нежелаетльные побочные эффекты. Гораздо нагляднее и прозрачнее использовать обработчики изменения полей.}} |
− | Правила срабатывают при любом изменении в датасетах, упоминаемых в правиле (см [[#Момент срабатывания|ниже]]), поэтому их использование часто вызывает нежелаетльные побочные эффекты. Гораздо нагляднее и прозрачнее использовать обработчики изменения полей. | ||
*Постусловия – срабатывают непосредственно перед сохранением изменений. Могут использоваться для проверки правильности введенных данных. | *Постусловия – срабатывают непосредственно перед сохранением изменений. Могут использоваться для проверки правильности введенных данных. | ||
Строка 20: | Строка 18: | ||
*Обработчики изменения полей, внешних событий, нажатий на кнопки, переключения закладок - срабатывают только при соответствующих событиях. | *Обработчики изменения полей, внешних событий, нажатий на кнопки, переключения закладок - срабатывают только при соответствующих событиях. | ||
− | Внимание | + | {{Внимание|1=После редактирования правил, чтобы увидеть результат, форму нужно открыть заново!}} |
− | После редактирования правил, чтобы увидеть результат, форму нужно открыть заново! | ||
Колонки редактора правил: | Колонки редактора правил: | ||
Строка 40: | Строка 37: | ||
*При любых изменениях датасета, указанного в колонке «Установить для поля». | *При любых изменениях датасета, указанного в колонке «Установить для поля». | ||
Пример: | Пример: | ||
− | {| | + | {| class="wikitable" |
|Когда||Установить для поля||Значение | |Когда||Установить для поля||Значение | ||
|- | |- | ||
Строка 50: | Строка 47: | ||
*Если колонка «Значение» начинается с имени датасета – то при его изменении правило также срабатывает. | *Если колонка «Значение» начинается с имени датасета – то при его изменении правило также срабатывает. | ||
Пример: | Пример: | ||
− | {| | + | {| class="wikitable" |
|Когда||Установить для поля||Значение | |Когда||Установить для поля||Значение | ||
|- | |- | ||
Строка 59: | Строка 56: | ||
*Если колонка «Когда» начинается с имени датасета – то при его изменении правило также срабатывает. | *Если колонка «Когда» начинается с имени датасета – то при его изменении правило также срабатывает. | ||
Пример: | Пример: | ||
− | {| | + | {| class="wikitable" |
|Когда||Установить для поля||Значение | |Когда||Установить для поля||Значение | ||
|- | |- | ||
Строка 69: | Строка 66: | ||
Если датасет из колонки «Установить для» содержит несколько записей – значение будет записано во все. | Если датасет из колонки «Установить для» содержит несколько записей – значение будет записано во все. | ||
Пример: | Пример: | ||
− | {| | + | {| class="wikitable" |
|Когда||Установить для поля||Значение | |Когда||Установить для поля||Значение | ||
|- | |- | ||
Строка 78: | Строка 75: | ||
Если нужно изменить значение только в текущей строке датасета, следует пользоваться функцией ASSIGN. | Если нужно изменить значение только в текущей строке датасета, следует пользоваться функцией ASSIGN. | ||
Пример: | Пример: | ||
− | {| | + | {| class="wikitable" |
|Когда||Установить для поля||Значение | |Когда||Установить для поля||Значение | ||
|- | |- | ||
Строка 85: | Строка 82: | ||
В ТЕКУЩУЮ товарную строчку документа запишется количество 1. | В ТЕКУЩУЮ товарную строчку документа запишется количество 1. | ||
− | + | {{Внимание|1=Необходимо помнить, что правила выполняются последовательно, от первой строки правил до последней. | |
− | Необходимо помнить, что правила выполняются последовательно, от первой строки правил до последней. | + | Если необходимо изменить положение строчек правил относительно друг друга, то необходимо произвести в строке какие-то изменения, отказаться от них, и "Принять" правила. После этих манипуляций, строка, которая редактировалась, в списке правил займет последнюю позицию.}} |
− | Если необходимо изменить положение строчек правил относительно друг друга, то необходимо произвести в строке какие-то изменения, отказаться от них, и "Принять" правила. После этих манипуляций, строка, которая редактировалась, в списке правил займет последнюю позицию. | ||
==Примечание. Имена датасетов== | ==Примечание. Имена датасетов== | ||
Строка 96: | Строка 92: | ||
Links – связи | Links – связи | ||
− | == | + | ==Примеры== |
установить тип операции №109, если в поле нет значения | установить тип операции №109, если в поле нет значения | ||
Предусловие | Предусловие | ||
− | {| | + | {| class="wikitable" |
|Установить для поля||Значение | |Установить для поля||Значение | ||
|- | |- | ||
Строка 107: | Строка 103: | ||
установить тип валюты документа ИД=1, если в поле нет значения | установить тип валюты документа ИД=1, если в поле нет значения | ||
Предусловие | Предусловие | ||
− | {| | + | {| class="wikitable" |
|Установить для поля||Значение | |Установить для поля||Значение | ||
|- | |- | ||
Строка 115: | Строка 111: | ||
установить в поле "Агент" текущего пользователя, если в поле нет значения | установить в поле "Агент" текущего пользователя, если в поле нет значения | ||
Предусловие | Предусловие | ||
− | {| | + | {| class="wikitable" |
|Установить для поля||Значение | |Установить для поля||Значение | ||
|- | |- |
Текущая версия на 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) |