Back to Gidas

Papildomi veiksmai atliekami formos saugojimo metu

internetiniai-underscore-moduliai-mgama-mgama-underscore-diegimas-mgama-underscore-dokumentu-underscore-formos-papildomi-underscore-veiksmai.md

latest8.9 KB
Original Source

PDF

Pradžia Internetiniai moduliai Rivile MGAMA MGAMA - diegimas MGAMA - dokumentų formos Papildomi veiksmai atliekami formos saugojimo metu

Papildomi veiksmai atliekami formos saugojimo metu

Kuriant Dokumento formą gali atsirasti poreikis:

  • atlikti papildomus formos testavimus ir tikrinimus,
  • sugeneruoti ar koreguoti susijusias operacijas.

Š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:

xml
<app> 
    ... 
    <on_save> 
        <config>
            <id>KODAS_FR</id> 
            <value>MG_DVS_F01</value> 
        </config>
        ... 
    </on_save> 
    ... 
</app>

Formulės aprašymas

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.

  • Formulėje pasiekiami kintamieji :
KintamasisTipasPaskirtis / Reikšmė
@userchar(12)Vartotojas, kuris atlieka tvirtinimą arba peržiūri tvirtinimą
@idintFormos ID
@langchar(2)Pasirinkta vartotojo kalba (lt arba en)
@form_modulchar(2)Modulis, kuriame veikia forma
@form_kodaschar(12)Kodas, su kuriuo susieta forma (DVS rūšis)
@resultxmlUžpildytos formos rezultatas XML forma
@form_modulchar(2)Modulis, ryšio formavimui su kuriama operacija
@form_kodaschar(12)Operacijos kodas, ryšio formavimui su kuriama operacija
@returnintGrąžinamas rezultatas. Grąžinus reikšmę <0 – operacijos kūrimas nutraukiamas.
  • Laikinoje lentelėje #RGI_MGAMA_FORM_EDIT_result įkelti užpildytos formos rezultatai (išskleistas @result XML turinys):
LaukasTipasPaskirtis / Reikšmė
idvarchar(50)Formos lauko ID
typevarchar(10)Formos lauko tipas (select, text, label, ...)
captionvarchar(250)Formos lauko pavadinimas
valuevarchar(max)Lauko reikšmė
value_namevarchar(max)Lauko reikšmės pavadinimas
  • Laikinoje lentelėje #RGI_MGAMA_FORM_EDIT_on_save įkelti užpildytos formos išsaugojimo parametrų reikšmės:
LaukasTipasPaskirtis / Reikšmė
idvarchar(50)Parametro ID
valuevarchar(max)Parametro reikšmė
  • Klaidos registravimui naudojama funkcija RGI_KLAIDA.

Funkcijos parametrų eilės tvarka:

ParametrasTipasPaskirtis / Reikšmė
@Tagvarchar(50)Laukas, kuris įtakojo klaidą
@Expr2varchar(250)Klaidos pranešimas (LT)
@Expr3varchar(250)Klaidos pranešimas (EN)
@Expr1varchar(8000)Papildoma išplėstinė klaidos informacija
@Err_CodeintKlaidos kodas (Pagal nutylėjimą 0)

Naudojimo pavyzdys

sql
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.

Formulių pavyzdžiai

    1. Testavimas, neleidžiantis įvesti vienodų įrašų tam pačiam žmogui, kai formoje nurodyti intervalai susikerta. Formulės tekstas:
sql
-- 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
    1. Forma sukurianti pirkimo operaciją (be detalių eilučių), o iš DVS operacijos sukurianti informacijos ryšį su šia pirkimo operacija. Taip pat šiame pavyzdyje parodyta testavimo dalis, kuri yra užkomentuota.
sql
/*
-- 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
    1. Tikrinimas, kad būtų galima prašyti avanso tik 1 kartą per mėnesį ir ne didesnei nei 1000 EUR sumai.
-- 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