MGAMA - būsenos tvirtinimas naudojant formulę

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'

Picture1

Parametre @kodas_fr nurodoma jūsų formulė iš Rivile GAMA formulių sąrašo (Servisas -> Kortelės -> Formulės).

Panaudojimo galimybės:

  • Papildyti standartinį funkcionalumą papildomai testavimais ir tikrinimais
  • Papildyti standartinį funkcionalumą papildomų tvirtinimo leidimų sugeneravimu
  • Sugeneruoti ar koreguoti susijusias operacijas ar duomenis

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:

  1. Pardavimo tvirtinimas – užpildomas tvirtinimo turinys iš operacijos
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
  1. Pirkimo tvirtinime pridedamas papildomas tvirtinamas asmuo ir paleidžiama standartinė procedūra
-- 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 
  1. Atmetimo metu reikalauti pastabos, ne trumpesnės nei 50 simbolių
-- 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
  1. Tvirtinimo metu įvestą pastabą įkelti į pirkimo operacijos pastabos lauką
-- 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