---
title: "MGAMA - būsenos tvirtinimas naudojant formulę"
url: "https://gidas.rivile.lt/internetiniai_moduliai/mgama/mgama_diegimas/mgama_veikimas/formuliu_naudojimas"
updated: "2025-10-31"
parent: "https://gidas.rivile.lt/internetiniai_moduliai/mgama/mgama_diegimas/mgama_veikimas.md"
---

# 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](https://gidas.rivile.lt/user/pages/010.internetiniai_moduliai/04.mgama/03.MGAMA_diegimas/10.MGAMA_veikimas/05.formuliu_naudojimas/Picture1.png)

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:<br/>I – INIT.  Suveikia pirmą kartą kai pakeičiama į šią būseną.<br/>P –  Patvirtinimas. Suveikia kai vartotojas tvirtiną būseną.<br/>A –  Atmetimas. Suveikia kai vartotojas atmeta būseną.<br/>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.<br/>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!'
```

> **Informacija:** **Patarimas programuojantiems:**<br/>Pats formulės programavimas ir testavimas vykdomas naudojant SQL priemones (MSSQL SSMS arba Sybase iSQL).<br/>Formulės pradžioje apsirašomi standartiniai kintamieji, kurie bus naudojami užpildant juos testinėmis reikšmėmis.<br/>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

```



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

```



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

```



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

```

5. Pildant atostogų prašymą, tvirtinimą atlieka ir pavaduojantis asmuo

```
-- 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

```
