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