Разработка в Облик Saas>Програмирование в Oblik-SaaS>События документа>OnModifyField - Событие изменения значения поля документа
Начать работу

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.