Kuriant Dokumento formą gali atsirasti poreikis:
Šiuos papildomus veiksmus galima atlikti programavimui naudojant Rivile GAMA formules.
Servisas -> Kortelės -> Formulės
Programinis tekstas rašomas formulėje, o Dokumento formoje nurodomas formulės kodas.
Naudojimo pavyzdys formos XML aprašyme:
<app> 
    ... 
    <on_save> 
        <config>
            <id>KODAS_FR</id> 
            <value>MG_DVS_F01</value> 
        </config>
        ... 
    </on_save> 
    ... 
</app> 

Patarimai programuojantiems: Formulės programavimą ir testavimą geriausia vykdyti naudojant SQL priemones (MSSQL SSMS arba Sybase iSQL). Formulės pradžioje aprašomi standartiniai kintamieji, kurie bus naudojami užpildant juos testinėmis reikšmėmis. Vėliau keliant programinį kodą į formulę, šią dalį galima užkomentuoti.
Rašant formulę, kuri bus naudojama Dokumento formoje, yra pasiekiami tam tikri kintamieji bei laikinos lentelės su formoje užpildytais duomenimis.
| Kintamasis | Tipas | Paskirtis / Reikšmė | 
|---|---|---|
| @user | char(12) | Vartotojas, kuris atlieka tvirtinimą arba peržiūri tvirtinimą | 
| @id | int | Formos ID | 
| @lang | char(2) | Pasirinkta vartotojo kalba (lt arba en) | 
| @form_modul | char(2) | Modulis, kuriame veikia forma | 
| @form_kodas | char(12) | Kodas, su kuriuo susieta forma (DVS rūšis) | 
| @result | xml | Užpildytos formos rezultatas XML forma | 
| @form_modul | char(2) | Modulis, ryšio formavimui su kuriama operacija | 
| @form_kodas | char(12) | Operacijos kodas, ryšio formavimui su kuriama operacija | 
| @return | int | Grąžinamas rezultatas. Grąžinus reikšmę <0 – operacijos kūrimas nutraukiamas. | 
| Laukas | Tipas | Paskirtis / Reikšmė | 
|---|---|---|
| id | varchar(50) | Formos lauko ID | 
| type | varchar(10) | Formos lauko tipas (select, text, label, ...) | 
| caption | varchar(250) | Formos lauko pavadinimas | 
| value | varchar(max) | Lauko reikšmė | 
| value_name | varchar(max) | Lauko reikšmės pavadinimas | 
| Laukas | Tipas | Paskirtis / Reikšmė | 
|---|---|---|
| id | varchar(50) | Parametro ID | 
| value | varchar(max) | Parametro reikšmė | 
Funkcijos parametrų eilės tvarka:
| Parametras | Tipas | Paskirtis / Reikšmė | 
|---|---|---|
| @Tag | varchar(50) | Laukas, kuris įtakojo klaidą | 
| @Expr2 | varchar(250) | Klaidos pranešimas (LT) | 
| @Expr3 | varchar(250) | Klaidos pranešimas (EN) | 
| @Expr1 | varchar(8000) | Papildoma išplėstinė klaidos informacija | 
| @Err_Code | int | Klaidos kodas (Pagal nutylėjimą 0) | 
exec dbo.RGI_KLAIDA '@data_nuo_iki','Įvestas laikotarpis turi būti ne ilgesnis nei 7 dienos', 'The entered period must not exceed 7 days!' 
Svarbu: Formulė veikia tik tuomet, jei formos aprašyme nenurodyta SAVE SQL procedūra.

-- Pasiimame personalo kodą, kuris teikia prašymą
declare @kodas_4a char(12)
select @kodas_4a=K14_kodas_4a from dbo.K14_ASM where K14_KODAS_RS=@user
-- Patikriname užpildytame prašyme kokios yra pradžios ir pabaigos datos
declare @beg_date datetime, @end_date datetime
SELECT @beg_date = convert(datetime,[value],120) from #RGI_MGAMA_FORM_EDIT_result WHERE id = 'beg_date' 
SELECT @end_date = convert(datetime,[value],120) from #RGI_MGAMA_FORM_EDIT_result WHERE id = 'end_date'
-- Patikriname, ar datų intervalas ne ilgesnis nei 7 dienos
IF DATEDIFF(DAY, @beg_date, @end_date) + 1 > 7
BEGIN
    exec dbo.RGI_KLAIDA '@data_nuo_iki','Įvestas laikotarpis turi būti ne ilgesnis nei 7 dienos', 'The entered period must not exceed 7 days!'
    return
END
-- Patikriname, ar personalo kodui, kuris pildo prašymą, yra tos rūšies DVS dokumentai, kurių intervalai persikerta
-- Jei yra tos rūšies dokumentų tame intervale - išduodama klaida
IF exists(
        SELECT K42_APRASYMAS1, K42_APRASYMAS2
        FROM K42_OD WHERE K42_KODAS_RD=@form_kodas AND K42_KODAS_4A=@kodas_4a
            and K42_APRASYMAS1<>'' and K42_APRASYMAS2<>''
            and K42_APRASYMAS1 like '20[0-9][0-9]-[0-9][0-9]-[0-9][0-9]'
            and K42_APRASYMAS2 like '20[0-9][0-9]-[0-9][0-9]-[0-9][0-9]'
            and convert(datetime,LEFT(K42_APRASYMAS1,10),120)<=@end_date and convert(datetime,LEFT(K42_APRASYMAS2,10),120)>=@beg_date
        )
BEGIN
    exec dbo.RGI_KLAIDA '@data_nuo_iki','Įvestam laikotarpiui jau yra sukurti prašymai!', 'Requests have already been created for the entered period!'
    return
END
/*
-- TESTING DATA --
declare @user char(12), @rys_kodas char(12), @rys_modul char(2)
select @user='MASTER'
if dbo.RGI_ver2_tmp_exists('#RGI_MGAMA_FORM_EDIT_result')=1
    drop table #RGI_MGAMA_FORM_EDIT_result
select cast('' as varchar(250)) as [id], cast('' as varchar(250)) as [value] into #RGI_MGAMA_FORM_EDIT_result where 1=0
insert into #RGI_MGAMA_FORM_EDIT_result ([id],[value]) values ('kodas_ks','121411842')
insert into #RGI_MGAMA_FORM_EDIT_result ([id],[value]) values ('dok_nr','DD-TEST123')
insert into #RGI_MGAMA_FORM_EDIT_result ([id],[value]) values ('dok_data','2024-10-03')
-- TESTING DATA --
*/
-- Pasiimame informaciją iš užpildytos formos
declare @kodas_ks char(12), @dok_nr char(20), @dok_data char(23)
SELECT @kodas_ks = [value] from #RGI_MGAMA_FORM_EDIT_result WHERE id = 'kodas_ks'
SELECT @dok_nr = [value] from #RGI_MGAMA_FORM_EDIT_result WHERE id = 'dok_nr'
SELECT @dok_data = [value] from #RGI_MGAMA_FORM_EDIT_result WHERE id = 'dok_data'
-- Patikriname ar toks dokumentas jau įvestas
IF exists(
        SELECT I06_KODAS_PO
        FROM I06_PARH
        WHERE I06_OP_TIP<50 and I06_DOK_NR=@dok_nr AND I06_KODAS_KS=@kodas_ks
        )
BEGIN
    exec dbo.RGI_KLAIDA '@dok_nr','Toks dokumentas jau įvestas!', 'This document already exists!'
    return
END
-- Sukuriame pirkimo užsakymo operaciją
declare @duom varchar(8000)
select @duom='
    <DATA><I06>
        <I06_OP_TIP>3</I06_OP_TIP>
        <I06_KODAS_KS>'+dbo.RGI_F_XML_ENCODE(rtrim(@kodas_ks))+'</I06_KODAS_KS>
        <I06_DOK_DATA>'+dbo.RGI_F_XML_ENCODE(rtrim(@dok_data))+'</I06_DOK_DATA>
        <I06_DOK_NR>'+dbo.RGI_F_XML_ENCODE(rtrim(@dok_nr))+'</I06_DOK_NR>
    </I06></DATA>'
select * into #I06 from dbo.I06_PARH where 1=0
EXEC dbo.RGI_API_EDIT_I06 
    @user=@user,
    @params='<PARAMS><OPER>I</OPER></PARAMS>', 
    @data=@duom,
    @response_type=3
-- Sukuriame ryšį
select @rys_kodas=i06_kodas_po, @rys_modul='PO' from #I06
drop table #I06 
-- Pasiimame formoje nurodytą datą
declare @date datetime
SELECT @date = convert(datetime,LEFT([value],10),120) from #RGI_MGAMA_FORM_EDIT_result WHERE [id] = '@k42_op_data' 
-- Patikriname ar tą mėnesį dar yra užpildytų prašymų
IF exists(
        SELECT K42_OP_DATA
        FROM K42_OD WHERE K42_KODAS_RD=@form_kodas AND K42_KODAS_RS=@user and K42_bukle=1
            and LEFT(convert(varchar,K42_OP_DATA,120),7)=LEFT(convert(varchar,@date,120),7)
        )
BEGIN
    exec dbo.RGI_KLAIDA 'DATA','Šį mėnesį prašymą jau pildėte!'
    return
END
-- Patikriname sumą
IF exists(SELECT * from #RGI_MGAMA_FORM_EDIT_result WHERE [id] = '@k42_aprasymas1' AND CAST([value] as numeric(10,2))>1000)
BEGIN
    exec dbo.RGI_KLAIDA 'SUMA','Viršijama leistina maksimali suma!'
    return
END