A stornó funkció segítségével, a [Stornózás] gomb
megnyomása után egy bevételezési (vásárlás, termelés, egyéb készletnövekedés) bizonylatfejhez tartozó mozgástételek stornózása végezhető el.
| Jogosultságkód: | A stornózás ugyanazzal a jogosultsággal végezhető el, mint a stornózandó mozgás rögzítése. |
A stornózás elvégzésének lépései:
A, Bizonylat fej kiválasztása
Ki kell választanunk azt a bizonylatfejet, amelyen a stornózandó mozgás található.
B, A stornózandó mozgástétel kiválasztása
A bizonylatfejen rá kell állnunk arra a mozgásra, amelyet stornózni szeretnénk és meg kell nyomnunk a [Stornózás] gombot.
Csak olyan mozgás tételek stornózhatók, ahol a tétel adataira igazak az alábbi feltételek: AND
| • | KRakMoz.PenAll=0 Pénzügyi alapállapot Csak Jogcim='1' – Vásárlás esetén! |
A mozgáshoz nincs számla áru tétel rendelve. Ha a mozgás számla áru tételhez van kapcsolva, akkor előbb le kell bontani az összerendelést.
| • | KRakMoz.FokAll=0 Főkönyvi kontírozatlan állapot |
A mozgás még nincs kontírozva. Kontírozott mozgás kontírozását előbb vissza kell stornózni.
| • | KRakMoz.StoKod=0 Nem stornó vagy stornózott tétel |
Stornózott tétel már nem stornózható még egyszer, a stornó mozgást pedig nem lehet visszastornózni.
Kulcs paraméterek:
| • | Mozgás azonosító RaMoIdX:= KRakMoz.RaMoID |
| • | Eredeti mozgáskód MozKodX:= KRakMoz.MozKod |
MozIraX:=Copy(MozKodX,4,1)
A mozgás iránya a mozgás kód negyedik karakteréből határozható meg.
| • | Stornó mozgáskód MozKodY: előállítandó a MozKodX alapján |
If MozIraX=1 Then MozIraY:=2 Else MozIraY:=1
A MozKodY többi eleme megegyezik a MoKodX-el.
A stornó mozgáskód az eredeti mozgáskódból úgy állítható elő, hogy a mozgás irányát ellentétesre változtatjuk. Növekedés irányú mozgás stornó mozgása csökkenés irányú lesz, csökkenés irányúé pedig növekedés.
Ellenőrizni kell, hogy az új kód létezik-e! Ha az előállított stornó mozgáskód nem létezik a mozgástörzsben, akkor stornózás nem végezhető el.
| • | Mozgás előjel If MozIraY=1 Then MozEljY:=1 Else MozEljY:=-1 |
Növekedés irányú mozgás előjele pozitív, csökkenésé negatív.
| • | Árukód AruKodX:= KRakMoz.AruKod |
| • | Tárolóhely TarHelX:=KRakMoz.TarHel |
| • | Mennyiség MennyiX:=KRakMoz.Bevete |
| • | Tétel sorszám TetSorX:= KRakMoz.Tetsor |
C, A stornózandó mozgáshoz tartozó tételes mozgások felolvasása
Fel kell olvasni a stornózandó raktári mozgáshoz tartozó tételes készlet (KTetKes) és tételes mozgás (KTetMoz) tételeket. Bevételezési mozgáshoz mind a két táblából egy tétel rendelhető hozzá.
Query_A
SELECT M.TeMoID, M.TeKeID M_TeKeID, M.RaMoID, M.Bevete, M.Kiadas,
K.TeKeID K_TeKeID, K.AruKod, K.ParKod, K.BizAzo, K.BevDat, K.TeKeSo,
K.BevEar, K.NyiKes, K.Bevete K_Bevete, K.Kiadas, K.AktEar, K_Kiadas
FROM KTetMoz M, KTetKes K
WHERE M.TeKeID=K.TeKeID
AND M.RaMoID=:RaMoIdX
ORDER BY M.RaMoID
D, Query_A kiértékelése
OszKiad:=0;
While Not EOF(Query_A) Do
Begin
OszKiad:=OszKiad+Query_A.K_Kiadas
Next
End
E, A felolvasott tételek megjelenítése adatrácsban (Query_A)
A stornózás folyamata a [Stornó végrehajtása] gomb megnyomásával indul.

F, Stornózás elvégezhetőségének vizsgálata
If OszKiad>0 Then
Begin
Message('Nem stornózható !')
Abort
End Else
A vizsgálat addicionális bevételezési tételre nem végzendő el!
G, A stornózás elvégzése
StartTransaction
G.1. Raktári készlet módosítása
Készlet sor beolvasása (AruKodX,TarHelX)
Készlet sor módosítása
KRakKes.Bevete:= KRakKes.Bevete + MozEljY * MennyiX
Update KRakKes(AruKodX,TarHelX)
G.2. Raktári mozgás tétel
G.2.a. A stornó tétel előállítása Insert
Adatai megegyeznek a stornózandó tételével, kivéve:
KRakMoz.RaMoID generált RaMoIDY
KRakMoz.Tetsor generált
TetSorY:= KRakMoz.Tetsor
KRakMoz.Bevete:= MozEljY * MennyiX
KRakMoz.Stokod:=2
KRakMoz.StornA:=TetSorX
KRakMoz.StornB:=0
KRakMoz.Insert
G.2.b. Stornózott tétel (RaMoIDX) Update
KRakMoz.Stokod:=1
KRakMoz.StornA:=0
KRakMoz.StornB:=TetSorY
KRakMoz.Update
G.3. Árutörzs módosítása
Az árutörzsbe készletkönyveléskor már nem történik visszaírás! A korábban visszaírt adatokat a program az adatok megjelenítésekor számolja ki.
G.4. Rendelés módosítás
A rendelés tételbe készletkönyveléskor már nem történik visszaírás! A korábban visszaírt adatokat a program az adatok megjelenítésekor számolja ki.
G.5. Tételes mozgás és készlet
While Not EOF(Query_A) Do
Begin
G.5.a Tételes készlet módosítása Update
Tételes készlet sor beolvasása M.TeKeID
Tételes készlet sor módosítása
KTetKes.Bevete:= KTetKes.Bevete + MozElj * M.Bevete
If Abs(K.Bevete - K.Kiadas)>1E-4 Then K.Elokod:='I' Else K.Elokod:='N'
A többi mező nem változik
KTetKes(M.TeKeID).Update
G.5.b Tételes mozgás tétel előállítása Insert
Tételes mozgás sor beolvasása M.TeMoID
Új tételes mozgás sor előállítása
KTetMoz.Bevete:=MozElj * M.Bevete
KTetMoz.RaMoID:=RaMoIDY (KRakMoz.RaMoID stornó tétel)
A többi mező megegyezik az eredeti sor mezőjével
KTetMoz.Insert
Next
End
CommitTransaction