A program a tárgyi eszköz tárgy időszaki értékcsökkenését az alábbi esetekben számítja ki:
| ♦ | A tárgyi eszköz adatainak módosítása |
| ♦ | Mozgás könyvelés tárgyi eszközön |
| ♦ | Tárgyi eszközök időszaki zárása |
A tárgy időszakra kiszámított ÉCS csak mint tájékoztató adat szerepel az adatbázisban. A kiszámított ÉCS tényleges elszámolására az időszaki zárás során kerül sor. A kiszámított ÉCS-t figyelembe véve jelennek meg a tárgyi eszközök adatai (halmozott ÉCS, nettó érték, stb.) az adatbázisban és a listákban.
Program paraméterek:
KAzoAda
TaeIdoTip Tárgyi eszköz időszak típus: 12 – hónap
4 – negyedév
TaeAktEv Tárgyi eszköz aktuális év
TaeAktId Tárgyi eszköz időszak (hónap vagy negyedév)
Változók:
TaiKezDat: Tárgy időszak kezdő dátum kiszámítandó
TaiBefDat: Tárgy időszak befejező dátum kiszámítandó
EliKezDat: Előző időszak kezdő dátum kiszámítandó
EliBefDat: Előző időszak befejező dátum kiszámítandó
TaiMozDb Tárgy időszaki lekönyvelt mozgások száma (QueryC)
EliMozDb Előző időszaki lekönyvelt mozgások száma (QueryB)
TaiMozMax Tárgy időszaki napok maximális száma Const=100
TaiNapSza Tárgy időszaki napok száma kiszámítandó
EcsMaxPlu Elszámolható ÉCS növekmény a mozgásokból
EliMozErt Előző időszak mozgásainak értéke (LeiMod=2)
TaiMozErt Tárgy időszak mozgásainak értéke (LeiMod=2)
BttErtU Mozgás bruttó érték – számított
EcsErtU Mozgás ÉCS érték – számított
HelErtU Mozgás ÉH érték – számított
AktBttU Aktuális bruttó érték – számított / új
AktHalU Aktuális halmozott ÉCS – számított / új
AktHelU Aktuális halmozott ÉH – számított / új
AktEcsU Aktuális ÉCS érték – számított / új
AktNetU Aktuális nettó érték – számított / új
HibKodU Hibakód
EcsSzTp Értékcsökkenés számítás típusa
1 – Számviteli törvény szerint
2 – Adó törvény szerint
Időszaki értékváltozás tömb – Rögzített mozgások:
IdErVaRoT: array[0..TaiMozMax,1..2] of float
1 – Számviteli törvény szerinti értékek
2 – Adó törvény szerinti értékek
Időszaki értékváltozás tömb – Input mozgás
IdErVaInT: array[0..TaiMozMax,1..2] of float
1 – Számviteli törvény szerinti értékek
2 – Adó törvény szerinti értékek
1. Előző év ugyanezen időszaki mozgásainak beolvasása:
Minden mozgás Insert előtt.
QueryB
SELCET * FROM FTaeMoz
WHERE MozDat>=EliKezDat AND MozDat<=EliBefDat
EliMozDb:=QueryB.Count
2. Előző év ugyanezen időszaki mozgások feldolgozása
Minden mozgás Insert előtt.
EliMozFeld(EcsSzTp)
1 – Számviteli törvény szerint
2 – Adó törvény szerint
EliMozErt:=0
For j1:=1 To EliMozDb Do
Begin
EliMozErt:=EliMozErt+(BttErt-EcsErt)
End
3. Tárgy időszaki mozgások beolvasása:
Minden mozgás Insert előtt.
QueryC
SELCET * FROM FTaeMoz
WHERE MozDat>=TaiKezDat AND MozDat<=TaiBefDat
TaiMozDb:=QueryC.Count
4. Tárgy időszaki mozgások feldolgozása
Minden mozgás Insert előtt.
TaiMozFeld(EcsSzTp)
1 – Számviteli törvény szerint
2 – Adó törvény szerint
MozNapSor A mozgás napjának sorszáma az aktuális időszakon belül
IdErVaRoT:=0
EcsMaxPlu:=0
TaiMozErt:=0;
For j1:=1 To TaiMozDb Do
Begin
MozTip:=f(TeMoKd) >>> FTeMoDf.TeMoJo >>> TEJ
TaiMozErt:=TaiMozErt+(BttErt-EcsErt)
Case MozTip Of
1,2:EcsMaxPlu:=EcsMaxPlu+(BttErt-EcsErt)
MozNapSor:=NapDiff(TaiKezDat,MozDat)
If (MozNapSor>0) And (MozNapSor<=TaiMozMax) Then
Begin
IdErVaRoT[MozNapSor,EcsSzTp]:= IdErVaRoT[MozNapSor,EcsSzTp]+BttErt
End
End
5. Mozgás input adatok feldolgozása / ÉCS számítás
Elvégzendő, ha {MozDat,TeMoKd,BttErt,EcsErt,HelErt} bármelyik értéke megváltozott, de már mind ki van töltve, továbbá FTaeFej post előtt.
BttErtU:=0;EcsErtU:=0;HelErtU:=0;
AktBttU:=0;AktHalU:=0;AktHelU:=0;AktNetU:=0;
HibKodU:=0;
VarLeiU:='';
Az aktuális értékcsökkenést kiszámító rutin:
AktEcsU:=LeiErtSzam(EcsSzTp,
FTaeFej.LeiMod, FTaeFej.Status, FTaeFej.SzuKez, FTaeFej.SzuVeg,FTaeFej.KivDat,
FTaeFej.SzvKul, FTaeFej.AktBtt, FTaeFej.AktHal, FTaeFej.AktHel, FTaeFej.AktEcs,
FTaeFej.IdoBtt, FTaeFej.IdoHal,FTaeFaj.MarErt,
FTaeFej.EgLeIr,
FTaeFej.LeiNor, FTaeFej.LeiAla,
FTaeFej.DegKul,
FTaeMoz.MozDat, FTaeMoz.TeMoKd,
FTaeMoz.BttErt, FTaeMoz.EcsErt,FTaeMoz.HelErt,
BttErtU,EcsErtU,HelErtU,
AktBttU,AktHalU,AktHelU,AktNetU,
HibKodU,
VarLeiU)
FUNCTION LeiErtSzam(EcsSzTp,
LeiModX:Char(1); StatusX:Char(1); SzuKezX,SzuVegX,KivDatX:Datetime;
LeiKulX,AktBttX,AktHalX,AktHelX,AktEcsX,
IdoBttX,IdoHalX,MarErtX:Real;
EgLeErX:Float;
LeiNorX,LeiAlaX,
DegKulX:Float;
MozDatX:Datetime;TeMoKdX:Char(4);
BtErX,EcErX,EhErX:Float;
Var BtErY:Float; Var EcErY:Float; Var EhErY:Float;
Var AktBttY:Float; Var AktHalY:Float; Var AktHelY; Var AktNetY;
Var HibKodY:Integer,
Var VarLeiY:Char(7)):Float
Bemenő paraméterek:
EcsSzTp ÉCS számítás típusa
LeiModX Leírási mód
StatusX Tárgyi eszköz státusz kód
SzuKezX Leírás szüneteltetés kezdete
SzuVegX Leírás szüneteltetés vége
LeiKulX Leírási kulcs %
AktBttX Aktuális bruttó érték – a mozgás könyvelése előtt
AktHalX Aktuális halmozott ÉCS érték – a mozgás könyvelése előtt
AktHelX Aktuális halmozott ÉH érték – a mozgás könyvelése előtt
AktEcsX Aktuális időszaki ÉCS érték – a mozgás könyvelése előtt
IdoBttX Időszaki nyitó bruttó érték
IdoHalX Időszaki nyitó halmozott ÉCS érték
MarErtX Maradványérték
EgLeErX Egyedi leírás értéke
LeiNorX Leírási norma
LeiAlaX Leírási vetítési alap
DegKulX Degresszív leírási kulcs
BtErX Mozgás bruttó érték - Bemenő
EcErX Mozgás ÉCS érték - Bemenő
EhErX Mozgás ÉH érték - Bemenő
Kimenő paraméter:
BtErY Mozgás bruttó érték - Kimenő
EcErY Mozgás ÉCS érték - Kimenő
EhErY Mozgás ÉH érték - Kimenő
AktBttY Aktuális bruttó érték – számított / új
AktHalY Aktuális halmozott ÉCS – számított / új
AktHelY Aktuális halmozott ÉH – számított / új
AktEcsY Aktuális ÉCS érték – számított / új
AktNetY Aktuális nettó érték – számított / új
HibKodY Hibakód
VarLeiY Várható leírás időpontja
LeiErtSzam Az időszaki leírás számított értéke (AktEcsY)
Lokális változók:
MozTip Mozgás típus Int
MozElj Mozgás előjel (-1,0,+1) Int
EcsMax Az elszámolható ÉCS maximuma Float
MozNapSor A mozgás napjának sorszáma az aktuális időszakon belül Int
AktBttErt Aktuális bruttó érték az ÉCS számítás során Float
NapAktErt Napi aktuális bruttó érték az ÉCS számítás során Float
NapAktLei Napi számított ÉCS Float
EloNapSor Előző nap sorszáma az ÉCS számítás során Int
NapAkt Aktuális nap sorszáma – ciklusváltozó Int
ErtValTet Értékváltozások száma Int
SzuKezSor Szüneteltetés kezdő napjának sorszáma Int
SzuBefSor Szüneteltetés befejező napjának sorszáma Int
{FUNCTION LeiErtSzam}
Begin {If (StatusX<='2”) }
HibKodY:=0
MozTip:=f(TeMoKdX) >>> FTeMoDf.TeMoJo >>> TEJ
MozElj Mozgás előjel (-1,0,+1) f(TeMoKd) >>> FteMoDf.TeMoIr
TeMoIr=1 >>> MozElj:=1
TeMoIr=2 >>> MozElj:=-1
Else >>> MozElj:=0
EcsMax:=IdoBttX-IdoHalX-MarErtX+EcsMaxPlu !
If MarErtX<0 Then MarErtX:=0 Else !
BtErY:=MozElj*Abs(BtErX)
EcErY:=MozElj*Abs(EcErX)
EhErY:=MozElj*Abs(EhErX)
AktBttY:=AktBttX+BtErY If AktBttY<-1E-4 Then HibKodY:=1 Else
AktHalY:=AktHalX+EcErY If AktHalY<-1E-4 Then HibKodY:=2 Else
AktHelY:=AktHelX+EhErY If AktHelY<-1E-4 Then HibKodY:=3 Else
If (MozTip=1) Or (MozTip=2) Then EcsMax:=EcsMax+(BtErY-EcErY)
{Case LeiModX='0'} Nincs leírás
AktEcsY:=0
{Case LeiModX='1'} Azonnali leírás
AktEcsY:=AktBttY-AktHalY+BtErY-EcErY
{Case LeiModX='2'} Két naptári éves leírás
AktEcsY:=Round(EliMozErt/2+(TaiMozErt+BtErY-EcErY)/2,0)
{Case LeiModX='3'} Lineáris napi leírás
Input mozgástömb előállítása
IdErVaInT:=0
MozNapSor:=NapDiff(TaiKezDat,MozDatX)+1
If (MozNapSor>0) And (MozNapSor<=TaiMozMax) Then
Begin
IdErVaInT[MozNapSor,EcsSzTp]:= IdErVaInT[MozNapSor,EcsSzTp]+BtErY
End
Időszaki értékadatok kiszámítása
AktBttErt:=IdoBttX
For NapAkt:=1 To TaiNapSza Do
Begin
NapAktErt:=AktBttErt+ IdErVaRoT[NapAkt,EcsSzTp]+ IdErVaInT[NapAkt,EcsSzTp]
IdErVaInT[NapAkt,EcsSzTp]:=NapAktErt
AktBttErt:=NapAktErt
End
ÉCS szüneteltetési napok kinullázása
SzuKezSor:=NapDiff(TaiKezDat,SzuKezX)+1
If SzuKezSor<0 Then SzuKezSor:=0 Else
SzuBefSor:=NapDiff(TaiKezDat,SzuBefX)+1
If SzuBefSor<0 Then SzuBefSor:=0 Else
If SzuBefSor>TaiNapSza Then SzuBefSor:=TaiNapSza Else
If SzuBefSor>0 Then
Begin
For NapAkt:=SzuKezSor To SzuBefSor Do
Begin
IdErVaInT[NapAkt,EcsSzTp]:=0
End
End Else
Időszaki értékcsökkenés kiszámítása
AktBttErt:=IdoBttX
EloNapSor:=0
AktEcsY:=0
ErtValTet:=0
NapAktLei:=0
For NapAkt:=1 To TaiNapSza Do
Begin
NapAktErt:=IdErVaInT[NapAkt,EcsSzTp]
If (Abs(AktBttErt-NapAktErt])>1E-4) Or (NapAkt=TaiNapSza) Then
Begin
If (NapAkt<>TaiNapSza) Then ErtValTet:=ErtValTet+1 Else
NapAktLei:=Round((AktBttErt-MarErtX)*LeiKulX*
(NapAkt-EloNapSor)/TaeIdoTip/TaiNapSza/100,0)
AktEcsY:=AktEcsY+NapAktLei
EloNapSo:=NapAkt
AktBttErt:=NapAktErt
End Else
End
If ErtValTet=0 Then
Begin
AktEcsY:=Round((AktBttY-MarErtX)*LeiKulX/TaeIdoTip/100,0)
End Else
{Case LeiModX='4'} Egyedi leírás
AktEcsY:=EgLeErX
{Case LeiModX='5'} Normatív leírás
AktEcsY:=Round(LeiNorX*LeiAlaX,0)
{Case LeiModX='6'} Degresszív leírás
If IdoBttX>0 Then
Begin
AktEcsY:=Round((IdoBttX-IdoHalX)*DegKulX,0)
End
Else
Begin
AktEcsY:=Round((AktBttX-AktHalX)*DegKulX,0)
End
{Case LeiModX End}
If AktEcsY>EcsMax Then AktEcsY:=EcsMax Else
If AktEcsY<1E-4 Then AktEcsY:=0 Else
AktNetY:=AktBttY-AktHalY-AktEcsY If AktNetY<-1E-4 Then HibKodY:=3 Else
{VarLeiY}
LeiErtSzam:=AktEcsY
End