OnModifyField - Событие изменения значения поля документа
Событие изменения значения поля.
Событие OnModifyField - событие приходящее к документу после изменения значения поля при его редактировании в форме или при автоматизированном формировании документа. Вы самостоятельно можете инициировать вызов данного события, если будете использовать функции src/kernel/set_ffv.p и функцию src/kernel/set_ftv.p. Первая функция предназначена для записи данных в нетабличную область данных, а вторая в табличную. Нужно заметить, что данное событие не вызывается если в поле записывается тоже самое значение. В обработчике данного события можно использовать функцию src/kernel/prevalue.p для получения, если нужно, получить предыдущее значения поля.
Система имеет возможность отключения триггера OnModifyField на некоторое время с целью ускорения выполнения процесса. Например, при автоматическом создании документов, для ускорения процесса создания и исключения ненужных пересчетов Вы можете отключить событие OnModifyField. Для этого, в системе имеется глобальная переменная ModifyMode as logical. По умолчанию значение данной переменной = yes. Но если установить ее в состояние false, триггер OnModifyField перестанет срабатывать.
Синтаксис вызова события :
PROCEDURE ONModifyField :
define input parameter rid-doc as integer.
define input parameter fld as character.
define input parameter row as integer.
Где rid-doc - внутренний номер редактируемого в форме документа, fld - поле для которого пришло данное событие, row - номер строки в табличной части документа.
Пример Использования:
Define shared variable ModifyMode as logical.
PROCEDURE ONModifyField :
define input parameter rid-doc as integer.
define input parameter fld as character.
define input parameter row as integer.
define variable d as date.
define variable tpdoc as integer.
define variable rid-main as integer.
define variable quantity as decimal.
define variable tprice as decimal.
define variable cost as decimal.
define variable nds as decimal.
define variable stavka as integer.
define variable not-plat-nds as logical.
run src/kernel/get_ffv.p ( "1:1", rid-doc ).
d = DATE ( RETURN-VALUE ).
run src/kernel/getconst.p ( "Ф-НП-НДС", doc-date ) . /* Неплательщик НДС */
if return-value = "Да" or return-value = "Yes" then
not-plat-nds = Yes.
if fld = "1:18"
then do:
run src/kernel/get_ffv.p ( "1:18",rid-doc ).
rid-main = INTEGER (RETURN-VALUE).
run src/kernel/doc2tp.p ( rid-main, OUTPUT tpdoc ).
if tpdoc = 141
then do:
ModifyMode = no.
run src/kernel/deltable.p ( 2, rid-doc ).
run src/kernel/cp_fld.p ( rid-main, "1:3,1:4,1:6,1:7,1:8,1:9,1:12,1:14,1:15,1:17,1:21,1:27,1:28,1:33,1:34,1:39,1:44,2:1,2:2,2:3,2:4,2:5,2:6,2:8,2:9,2:10,2:16",
rid-doc, "1:3,1:4,1:6,1:7,1:8,1:9,1:12,1:14,1:15,1:17,1:21,1:27,1:28,1:33,1:34,1:39,1:44,2:1,2:2,2:3,2:4,2:5,2:6,2:8,2:9,2:10,2:16" ).
ModifyMode = yes.
end.
end.
if fld = "2:3" or fld = "2:4" then
do:
run src/kernel/get_ftv.p ( "2:3", rid-doc, row ).
tprice = DECIMAL (RETURN-VALUE).
run src/kernel/get_ftv.p ( "2:4", rid-doc, row ).
quantity = DECIMAL (RETURN-VALUE).
cost = quantity * tprice .
cost = ROUND ( cost, 2 ).
run src/kernel/set_ftv.p ( "2:5", rid-doc, row, STRING (cost) ).
end.
IF fld = "2:5" THEN
do:
run src/kernel/get_tfun.p ( "2:5", rid-doc, 1, OUTPUT cost ).
run src/kernel/set_ffv.p ( "1:12", rid-doc, STRING ( cost ) ).
end.
if fld = "2:5" then
do:
run src/kernel/get_ftv.p ( "2:16", rid-doc, row ).
stavka = INTEGER (RETURN-VALUE).
run src/kernel/get_ftv.p ( "2:5", rid-doc, row ).
cost = DECIMAL (RETURN-VALUE).
run getnds ( d, stavka, cost, OUTPUT nds ).
nds = round(nds, 2).
if not-plat-nds then
nds = 0.
run src/kernel/set_ftv.p ( "2:6", rid-doc, row, STRING ( nds ) ).
end.
if fld = "2:6"
then do:
run src/kernel/get_tfun.p ( "2:6", rid-doc, 1, OUTPUT nds ).
run src/kernel/set_ffv.p ( "1:6", rid-doc, STRING (nds) ).
end.
END.



