Būsenos tvirtinimui galima apsirašyti ir naudoti formulę (iš Rivile GAMA programos formulių sąrašo).
Naudojimo pavyzdys:
RGI_MGAMA_BUSENA_FORMULE @kodas_fr='MG_PO_TV'
Parametre @kodas_fr nurodoma jūsų formulė iš Rivile GAMA formulių sąrašo (Servisas -> Kortelės -> Formulės).
Panaudojimo galimybės:
Formulei pasiekiami šie kintamieji:
Kintamasis | Tipas | Paskirtis / Reikšmė |
---|---|---|
@modul | char(2) | Modulis, kuriame veikia formulė. Pavyzdžiui PO, OD |
@op | char(12) | Operacija, kuri tvirtinama |
@user | char(12) | Vartotojas, kuris atlieka tvirtinimą arba peržiūri tvirtinimą |
@veiksmas | char(1) | Veiksmas, kuris atliekamas: I – INIT. Suveikia pirmą kartą kai pakeičiama į šią būseną. P – Patvirtinimas. Suveikia kai vartotojas tvirtiną būseną. A – Atmetimas. Suveikia kai vartotojas atmeta būseną. U – Update. Suveikia, kai vartotojas atsidaro MGAMA sistemoje tvirtinimą peržiūrai. |
@kodas_be | char(12) | Būsenos kodas |
@pastaba | varchar(150) | Pastaba tvirtinant ar atmetant |
@param1_int | int | Papildomas parametras |
@param2_int | int | Papildomas parametras |
@param3_int | int | Papildomas parametras |
@param4_int | int | Papildomas parametras |
@param5_int | int | Papildomas parametras |
@param1_varchar | varchar(8000) | Papildomas parametras |
@param2_varchar | varchar(8000) | Papildomas parametras |
@param3_varchar | varchar(8000) | Papildomas parametras |
@param4_varchar | varchar(8000) | Papildomas parametras |
@param5_varchar | varchar(8000) | Papildomas parametras |
@param1_text | varchar(max) | Papildomas parametras |
@return | int | Tvirtinimo ar atmetimo atveju grąžinama reikšmė – sekančios būsenos numeris. Grąžinus reikšmę <0 – tvirtinimas arba atmetimas nutraukiamas. |
Klaidos registravimui naudojama funkcija RGI_KLAIDA.
Parametrai 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) |
Naudojimo pavyzdys:
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!'
Patarimas programuojantiems:
Pats formulės programavimas ir testavimas vykdomas naudojant SQL priemones (MSSQL SSMS arba Sybase iSQL).
Formulės pradžioje apsiraš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.
Pavyzdžiai:
if @veiksmas not in ('I','U')
return
-- Išsisaugome rezultatą į laikiną kursorių
select * into #tmp_pard from I06_PARH where I06_KODAS_PO=@op
-- Suformuojame tvirtinimo antraštę
declare @apr1 varchar(250), @apr2 varchar(250), @apr3 varchar(250)
select @apr1=rtrim(I06_PAV), @apr2='Pardavimo rezervas', @apr3=rtrim(I06_DOK_NR)+' '+rtrim(str(I06_SUMA,12,2))+'€' from #tmp_pard
-- Sugeneruojame XML
declare @xml varchar(8000)
select @xml=(
SELECT *
FROM (
select 1 as eil, 'Klientas' as [key], rtrim(I06_PAV) as [value], 'inline' as [type] from #tmp_pard
UNION ALL
select 2 as eil, 'Dokumento Nr.' as [key], rtrim(I06_DOK_NR) as [value], 'inline' as [type] from #tmp_pard
UNION ALL
select 3 as eil, 'Dokumento data' as [key], CONVERT(varchar,I06_DOK_DATA,(102)) as [value], 'inline' as [type] from #tmp_pard
UNION ALL
select 4 as eil, 'Suma be PVM' as [key], rtrim(str(I06_SUMA,12,2))+'€' as [value], 'inline' as [type] from #tmp_pard
UNION ALL
select 5 as eil, 'Suma su PVM' as [key], rtrim(str(I06_SUMA+I06_SUMA_PVM,12,2))+'€' as [value], 'inline' as [type] from #tmp_pard
UNION ALL
select 6 as eil, 'Pastabos' as [key], rtrim(I06_PASTABOS) as [value], 'block' as [type] from #tmp_pard where isnull(I06_PASTABOS,'') <> ''
) as [schema]
ORDER BY eil asc
FOR XML auto, elements
)
-- Atnaujiname tvirtinimo operacijas (užpildome tvirtinamą turinį)
-- ant INIT reikia atnaujinti visiems vartotojams
if @veiksmas='I'
exec dbo.RGI_MGAMA_BUSENA_UPD @kodas_be=@kodas_be, @modul=@modul, @kodas_op=@op, @kodas_rs=null, @perkelta=null, @set_apr1=@apr1, @set_apr2=@apr2, @set_apr3=@apr3, @set_xml=@xml
-- ant U-tik vienam, kuris peržiūri informaciją
if @veiksmas='U'
exec dbo.RGI_MGAMA_BUSENA_UPD @kodas_be=@kodas_be, @modul=@modul, @kodas_op=@op, @kodas_rs=@user, @perkelta=1, @set_apr1=@apr1, @set_apr2=@apr2, @set_apr3=@apr3, @set_xml=@xml
-- Veiks tik būsenos INIT (vieną kartą)
if @veiksmas not in ('I')
return
-- Parenkame papildomą vartotoją, kuris dalyvaus tvirtinime
-- Kai menedžerio kodas yra lygus vartotojo kodui
declare @kodas_ms_rs char(12)
select @kodas_ms_rs=I06_KODAS_MS from I06_PARH where I06_KODAS_PO=@op
-- Pridedame prie tvirtintojų sąrašo
if @kodas_rs<>''
exec dbo.RGI_MGAMA_BUSENA_LEISTI @modul=@modul, @op=@op, @user=@user, @kodas_be=@kodas_be, @rewrite=1, @vart=@kodas_ms_rs
-- Paleidžiame standartinę procedūrą, tvirtinimo turinio užpildymui
exec dbo.RGI_MGAMA_PIRK_TV @modul=@modul, @op=@op, @user=@user, @kodas_be=@kodas_be, @veiksmas=@veiksmas, @pastaba=@pastaba
-- Veiks tik būsenos atmetimo metu
if @veiksmas not in ('A')
return
-- Iš pastabos aprašymo pašaliname tarpus pradžioje ir pabaigoje
select @pastaba=ltrim(rtrim(@pastaba))
-- Jei ilgis netinkama - išduodame klaidą
if DATALENGTH(@pastaba)<50
begin
exec dbo.RGI_KLAIDA 'PASTABA','Prašome detalizuoti atmetimo priežastį išsamiau!'
return
end
-- Veiks tik būsenos tvirtinimo ir atmetimo metu
if @veiksmas not in ('P','A')
return
-- Iš pastabos aprašymo pašaliname tarpus pradžioje ir pabaigoje bei pasiimame tik 40 simbolių, kiek telpa pirkimo pastaboje
select @pastaba=left(ltrim(rtrim(@pastaba)),40)
-- Pakoreguojame operaciją - įkeliame pastabą
if DATALENGTH(@pastaba)>0
begin
declare @sql_data varchar(8000)
select @sql_data= '<DATA>
<I06>
<I06_KODAS_PO>'+dbo.RGI_F_XML_ENCODE(@op)+'</I06_KODAS_PO>
<I06_PASTABOS>'+dbo.RGI_F_XML_ENCODE(@pastaba)+'</I06_PASTABOS>
</I06>
</DATA>'
exec dbo.RGI_API_EDIT_I06 @user=@user, @params='<PARAMS><OPER>U</OPER></PARAMS>', @data=@sql_data
return
end
-- Standartinė būsena: RGI_MGAMA_PERS_AT @bukle=1, @atsaukti=1
-- Veiks tik būsenos INIT (vieną kartą)
if @veiksmas='I'
BEGIN
-- Parenkame vartotoją, kuris dalyvaus tvirtinime
declare @kodas_rs char(12)
select @kodas_rs=K14_KODAS_RS from K16_OPH INNER JOIN K14_ASM ON LOWER(LTRIM(RTRIM(K16_APRASYMAS1)))=LOWER(LTRIM(RTRIM(K14_VARDAS))+' '+RTRIM(LTRIM(K14_PAV))) where K16_KODAS_6A=@op
-- Jei neradome vartotojo - operacija atšaukiama su klaida
if ISNULL(@kodas_rs,'')=''
BEGIN
exec dbo.RGI_KLAIDA 'PAVADUOJANTIS','Nurodytas pavaduojantis asmuo nerastas!'
return
END
-- Pridedame prie tvirtintojų sąrašo
exec dbo.RGI_MGAMA_BUSENA_LEISTI @modul=@modul, @op=@op, @user=@user, @kodas_be=@kodas_be, @rewrite=1, @vart=@kodas_rs
END
-- Paleidžiame standartinę procedūrą, tvirtinimo turinio užpildymui
exec @return=dbo.RGI_MGAMA_PERS_AT @modul=@modul, @op=@op, @user=@user, @kodas_be=@kodas_be, @veiksmas=@veiksmas, @pastaba=@pastaba, @bukle=1, @atsaukti=1