; Výkaz ZaZ pro banky a fin.instituce pro rok 2002 ; verze z 2.1.2004 FileName('FIVZ'+ObdMesic(2)+ObdRok(2)+'.WNS') Designed('') Author('Winduo Team','EMail: winduo@winduo.cz','http://www.winduo.com','http://www.winduo.cz') Descr('VZaZ pro banky a některé finanční instituce') WNSType(0); LocStr:String LocCis:Byte DeclareRec('Program') Procedure PrintText(PocetRadku:Word,PrintLine:Word); While((EOF(Soubor)=False) and (PocetRadku>0)) begin ReadedLine=ReadLn(Soubor); FirstChar=Asc(ReadedLine) if(FirstChar=Asc('$')) begin end else begin if(FirstChar=Asc('@')) begin ReadedLine=FromChar('@',ReadedLine); end else if(FirstChar=Asc('#')) begin ReadedLine=FromChar(',',FromChar(',',ReadedLine)); end ReadedLine=ReadedLine+#9; if(PrintLine=0) begin if(FirstChar=Asc('@')) begin ReadedLine=ReadedLine end else begin ReadedLine=ReadedLine+Str(LineNum) Inc(LineNum); end end else begin ReadedLine=ReadedLine+Str(PrintLine) end; DynTab(ReadedLine) Dec(PocetRadku) end; end; end; SetFillToBlank('') INI:String=DataPath+'VYKAZY.INI' TiskJenNenul:Boolean TiskNulRadku:Boolean=GetBoolean(GetFromIni('VYKAZY','TiskNulRadku',INI)) TiskJenNenul=(not TiskNulRadku) LocI:Integer VelikostPisma:Real=0 VelikostPisma=Val(GetFromIni('VYKAZY','VelikostPisma',INI)) if(VelikostPisma=0) VelikostPisma=3.5 PocetDesMist:Byte=0 ZpusobZaokr:Byte=Val(GetDataINI('INFO','ZaokrouhleniVykazu')) if(ZpusobZaokr=1) PocetDesMist=2 if(ZpusobZaokr=2) PocetDesMist=2 FormName:String=GetTabName(4); PocRadCelkem:Word PocRadTiskCelkem:Word PocetStr1:Byte=32 PocetStr2:Byte=0 PouzeJednaStrana:Boolean LocI:Byte i:Byte=1 j:Byte=1 X1:Real X2:Real X3:Real StrLetos:String StrLoni:String ItsBlank:Boolean LocStr:String LocStr1:String LocStr2:String if(Length(ObdMesic(2))<>0) begin Name('Výkaz zisků a ztrát - Formulář za '+ObdMesic(2)+ObdRok(2)) end else begin Name('Výkaz zisků a ztrát - Prázdný') ItsBlank=True ReadedLine:String FirstChar:Byte LineNum:Word=1 end; Global MinRok:Boolean=False Global MinRokName:String StatusWindowInCall(False) Global VyplMO:Byte=0 if(not ItsBlank) CallDDT('DoplMO.ddt') ;hlavicka Global NazevSest1:String='Výkaz zisku a ztráty' Global NazevSest2:String='podle pravidel pro banky a jiné finanční instituce' ;např. v plném rozsahu Global Opatr1:String='Podle Sbírky zákonů' Global Opatr2:String='vyhlášky č. 501/2002' Global Opatr3:String='ze dne 5.prosince 2002' Global XZacatek1:Real=0 ; x souradnice zacatku tabulky na 1. straně Global YTlusta1:Real=72 ; Y-souradnice prvni tluste cary Global Y1Hlav1:Real=16 ; Global XKonec1:Real=188 ; x souradnice konce tabulky na 1. straně if(ItsBlank) begin Soubor:TextFile; Open(Soubor,FormName); TiskJenNenul=False end else begin OpenWNS(WNSName) SaveWNSPos(1) end; ;vvvvvvvvvvvvvvvvvvvvv1 ;{blok natazeni letosnich a lonskych hodnot do tabulky v pameti} if(not ItsBlank) begin ;{zjistění, které řádky jsou nenulové = se tisknou} ;zjisteni poctu radku, poctu aktiv a poctu pasiv z radku # v .TAB SouborTab:TextFile Open(SouborTab,GetTabName(2)) While(not(EOF(SouborTab))) begin LocStr=Readln(SouborTab) if(CompareStr(Copy(LocStr,1,1),'#')) begin LocStr=FromChar('#',LocStr) LocStr1=ToChar(',',LocStr) PocRadCelkem=Val(LocStr1) Goto(KonecCyklu1) end end KonecCyklu1: Close(SouborTab) Open(SouborTab,GetTabName(2)) ;While(not(EOF(SouborTab))) ; begin ; LocStr=Readln(SouborTab) ; if(CompareStr(Copy(LocStr,1,1),'*')) ; begin ; if(CompareStr(UpCase(Copy(LocStr,2,7)),'HVPRED=')) ;*HV-DanR= číslo řádku s Výsledkem hospodaření po zdanění ; begin ; LocStr=ToChar(' ',LocStr) ; RadekVH=Val(FromChar('=',LocStr)) ; GoTo(KonecCyklu2) ; end ; end ; end KonecCyklu2: Record ArrRadky ;definuje strukturu, ktera se pouzije pro Array ArrTisk :Boolean; ArrPolozka :String[16]; ArrText :String[120]; ArrRadek :Byte; ArrCastkaLetos :Double; ArrCastkaLoni :Double; end; MaxRadky:Word=65448/SizeOf(ArrRadky); if(MaxRadky0); nasel hodnotu pro testovani ; begin ; if((Hodnoty[i].ArrCastkaLetos<>VAL(GetFromIni('VH','VH'+Obdobi(4),INI)))and(Length(HS())=0)) ; begin ; ;DlgFollowMouse(True) ; DefDialog('Výsledek hospodaření',462,264) ; DlgShade(-1,'',4,10,453,164) ; DlgStatic(-1,'Nesouhlasí Výsledek hospodaření v Rozvaze = '+GetFromIni('VH','VH'+Obdobi(4),INI),10,16,440) ; DlgStatic(-1,'a ve Výkazu zisku a ztráty = '+Str(Hodnoty[i].ArrCastkaLetos,2),10,32,440) ; DlgStatic(-1,'Upozornění:',10,64,440) ; DlgStatic(-1,'V rozvaze počítáno: Aktiva - Zákl.kapitál - Kapitál.fondy',10,88,440) ; DlgStatic(-1,'- Rezervní fondy - VH minulých let - Cizí zdroje - Čas.rozlišení',10,104,440) ; DlgStatic(-1,'Ve VZaZ počítáno: Provozní + finanční +mimořádný výsledek hospodaření',10,128,440) ; DlgStatic(-1,'(výpočet za '+ObdMesic(2)+ObdRok(2)+')',10,152,440) ; DlgButton(id_OK,'OK',363,196); ; DlgOnLineHelp(id_OK,'Pokračuje ve zpracování') ; ;DlgButton(id_Cancel,'Zpět',373,196); ; ;DlgOnLineHelp(id_Cancel,'Ukončí bez zpracování') ; DlgButton(id_Help,'Help',33,196); ; DlgOnLineHelp(id_Help,'Help') ; DlgSetHelp(help_Context,520) ; ; Result:Integer=DlgExecute() ; if(Result<>id_OK) ; Halt ; end ; end ; end Inc(i) end ;{Naplnit tabulku texty a hodnotami lonského roku} if(MinRok) begin OpenWNSIfExist(MinRokName) ;VZaZ z minuleho roku if(Val(PredObdRok(2))=2) begin ;{prevod z roku 2002 nelze mechanicky:} ;TabPos(YTlusta1+1.5) ;TabFromWns(2,0,19,$8) i=1 While(i<=19) begin LoadWNSLine(2,7) Hodnoty[i].ArrCastkaLoni=GetFromWNSLine(4,True) Inc(i) end i=21; přeskoceni volneho radku, ktery se netiskne (ř20) While(i<=22) begin LoadWNSLine(2,7) Hodnoty[i].ArrCastkaLoni=GetFromWNSLine(4,True) Inc(i) end SkipWNSLine(2,7,3); preskocit 3 radky stareho roku (22,23,24) LoadWNSLine(2,7); tisk dalsiho 1 radku = radek 25 z roku 2002 Hodnoty[i].ArrCastkaLoni=GetFromWNSLine(4,True) Inc(i) ;24 SkipWNSLine(2,7,5); preskocit 5 radky stareho roku (26,27,28,29,30) LoadWNSLine(2,7); tisk dalsiho 1 radku = radek 31 z roku 2002 Hodnoty[i].ArrCastkaLoni=GetFromWNSLine(4,True) Inc(i)) ;25 SkipWNSLine(2,7,3); preskocit 3 radky stareho roku (32,33,34) LoadWNSLine(2,7); tisk dalsiho 1 radku = radek 35 z roku 2002 Hodnoty[i].ArrCastkaLoni=GetFromWNSLine(4,True) SkipWNSLine(2,7,3); preskocit 3 radky stareho roku (36,37,38) Inc(i)) ;26 While(i<=29) begin LoadWNSLine(2,7) Hodnoty[i].ArrCastkaLoni=GetFromWNSLine(4,True); tisk dalsich 4 radku 26,27,28,29 = radky 39,40,41,42 z roku 2002 Inc(i) end ;i je nyní 30 SaveWnsPos(12) ;znacka v souboru z minuleho roku, je treba vytisknout radek 50/2002 SkipWNSLine(2,7,7); preskocit 7 radky stareho roku (43,44,45,46,47,48,49) LoadWNSLine(2,7); natazení r. 50 z roku 2002 Hodnoty[i].ArrCastkaLoni=GetFromWNSLine(4,True); tisk dalsiho 1 radku = radek 50 z roku 2002 Inc(i)) ;31 LoadWNSPos(12); návrat na řádek 42/2002 SkipWNSLine(2,7,2); preskocit 2 radky (řádky 43 a 44 z roku 2002 se ztraci) While(i<=35) begin LoadWNSLine(2,7) Hodnoty[i].ArrCastkaLoni=GetFromWNSLine(4,True); tisk dalsich 5 radku 31,32,33,34,35 = radky 45,46,47,48,49 z roku 2002 Inc(i) end ;i je nyní 36 SkipWNSLine(2,7,1); preskocit 1 radek (řádky 50 již byl vytištěn dříve) LoadWNSLine(2,7); natazení r. 51 z roku 2002 Hodnoty[i].ArrCastkaLoni=GetFromWNSLine(4,True); tisk dalsiho 1 radku = radek 51 z roku 2002 end else begin ;mechanicky prebira udaje z minuleho roku - platí, pokud bude výkaz v aktuálním roce shodný s minulým rokem i=1 While(i<=PocRadCelkem) begin if(not ItsBlank) LoadWNSLine(2,7) Hodnoty[i].ArrCastkaLoni=GetFromWNSLine(4,True) Inc(i) end end end; RucniUprava:Boolean=False if(RucniUprava) begin ;{pokus o ruční úpravu - nejsou ale prostředky...} AktualCover:Integer=0 RadkuVZalozce:Byte=14 PocetZalozek:Byte=Round((PocRadCelkem+(RadkuVZalozce/2))/RadkuVZalozce) DlgFollowMouse(True) DefDialog('Úprava údajů',620,450) DlgCover(199,PocetZalozek,8,4,604,350,False,AktualCover) ;DlgShade(-1,'',4,27,453,124) ;DlgStatic(-1,'Úprava údajů VZaZ',16,4,326) i=1; řádky z=1; záložky DlgButton(id_OK,'OK',166+120,383); DlgOnLineHelp(id_OK,'Pokračuje ve zpracování') DlgButton(id_Cancel,'Zpět',373,383); DlgOnLineHelp(id_Cancel,'Ukončí bez zpracování') DlgButton(id_Help,'Help',33,383); DlgOnLineHelp(id_Help,'Help') DlgSetHelp(help_Context,1040) While((z<=PocetZalozek)and(i<=PocRadCelkem)) begin SetCover(z,'Strana '+Str(z)) j=1 While((j<=RadkuVZalozce)and(i<=PocRadCelkem)) begin DlgEdit(1000+i,Hodnoty[i].ArrPolozka,5,((j-1)*22)+3,40,,10,ES_Left) DlgEdit(2000+i,Hodnoty[i].ArrText,48,((j-1)*22)+3,230,,200,ES_Left) DlgEdit(3000+i,Hodnoty[i].ArrCastkaLetos,278,((j-1)*22)+3,100,22,13,ES_Right) DlgEdit(4000+i,Hodnoty[i].ArrCastkaLoni,380,((j-1)*22)+3,100,22,13,ES_Right) Inc(j) Inc(i) end Inc(z) end i=1 IF(DlgExecute(False)<>ID_OK) Halt end PouzeJednaStrana:Boolean=False ;analyza poctu radku: PocRadTisk:Byte i=1 While(i<=PocRadCelkem) begin Hodnoty[i].ArrTisk=True; pro jistotu if(TiskJenNenul) begin if((Hodnoty[i].ArrCastkaLetos=0)and(Hodnoty[i].ArrCastkaLoni=0)) begin ;oznacit False vsechny, ktere maji nulove hodnoty Hodnoty[i].ArrTisk=False end end Inc(i) end PocRadTiskCelkem=0 i=1 While(i<=PocRadCelkem) begin if(Hodnoty[i].ArrTisk) Inc(PocRadTiskCelkem) Inc(i) end end ;AAAAAAAAAAAAAAAAAAAAA1 ;VVVVVVVVVVVVVVVVV2 if(TiskJenNenul) begin if(PocRadTiskCelkem>PocetStr1); begin ;tudy by nemel nikdy jit - pro rok 2003 PocRad1:Byte=PocetStr1 ;pocet radku tabulky na 1. strane YRadkovani1:Real=5 ;posun radku v tabulce na 1.strane PouzeJednaStrana=False PocRad2:Byte=PocRadTiskCelkem-PocRad1 YRadkovani2:Real=5 end else begin ;tudy vzdycky v roce 2003 PocRad1:Byte=PocRadTiskCelkem ;pocet radku tabulky na 1. strane YRadkovani1:Real=5 ;posun radku v tabulce na 1.strane PouzeJednaStrana=True ;PocRad2:Byte=0 ;YRadkovani2:Real=5 end end else begin PocRad1:Byte=37 ;pocet radku tabulky na 1. strane YRadkovani1:Real=5 ;posun radku v tabulce na 1.strane PouzeJednaStrana=True ;PocRad2:Byte=31 ;YRadkovani2:Real=6.2 end ;AAAAAAAAAAAAAAAAAAA1 YKonec1:Real=YTlusta1+(pocrad1*YRadkovani1) X1Svisla1:Real=XZacatek1+10 X2Svisla1:Real=XZacatek1+107+20 X3Svisla1:Real=XZacatek1+116+20 X4Svisla1:Real=(X3Svisla1+(XKonec1-X3Svisla1)/2) Y2Hlav1:Real=9.5 ;paticka Global X1Pata:Real=XZacatek1 Global Y1Pata:Real=YKonec1+3 Global X2Pata:Real=XKonec1 Global Y2Pata:Real=YKonec1+25 CallDDT('HlavVyk.ddt') ;{definice tabulky hodnot} FONTFACE(Normal); PEN(0,0.7) LINEA(XZacatek1,YTlusta1,XKonec1,YTlusta1); PEN(0,0.3) BOXA(XZacatek1,YTlusta1-Y1Hlav1,XKonec1,YKonec1) ; obdelnik na 1. straně LINEA(X1Svisla1,YTlusta1-Y1Hlav1,X1Svisla1,YKonec1) ; 1. svisla if(not TiskJenNenul) LINEA(X2Svisla1,YTlusta1-Y1Hlav1,X2Svisla1,YKonec1) ; 2. svisla LINEA(X3Svisla1,YTlusta1-Y1Hlav1,X3Svisla1,YKonec1) ; 3. svisla LINEA(X4Svisla1,YTlusta1-Y2Hlav1,X4Svisla1,YKonec1) ; 4. svisla LINEA(XKonec1,YTlusta1-Y2Hlav1,XKonec1,YKonec1) ; 5. svisla LINEA(X3Svisla1,YTlusta1-Y2Hlav1,XKonec1,YTlusta1-Y2Hlav1) ; vodorovna v prave pulce hlavicky LocI=PocRad1 if(LocI=0) LocI=1 LINESA(XZacatek1,YTlusta1+YRadkovani1,XKonec1,YTlusta1+YRadkovani1,0,YRadkovani1,LocI-1) ;LINESA(XZacatek1,YTlusta1+YRadkovani1,XKonec1,YTlusta1+YRadkovani1,0,YRadkovani1,PocRad1-1) FONTSIZE(3) FontFace(Normal) TEXT(XZacatek1+(X1Svisla1-XZacatek1)/2,YTlusta1-Y1Hlav1+2.5,TA_CENTER,'Označ.') TEXT(XZacatek1+(X1Svisla1-XZacatek1)/2,YTlusta1-5,TA_CENTER,'a') TEXT((X1Svisla1+(X2Svisla1-X1Svisla1)/2),YTlusta1-Y1Hlav1+2.5,TA_CENTER,'T E X T') TEXT((X1Svisla1+(X2Svisla1-X1Svisla1)/2),YTlusta1-5,TA_CENTER,'b') ;TEXT((X2Svisla1+(X3Svisla1-X2Svisla1)/2),YTlusta1-Y1Hlav1+2.5,TA_CENTER,'Číslo') if(not TiskJenNenul) begin XTEXT((X2Svisla1+(X3Svisla1-X2Svisla1)/2),YTlusta1-Y1Hlav1+2.5,X3Svisla1-X2Svisla1-1,TA_CENTER,'Položka') TEXT((X2Svisla1+(X3Svisla1-X2Svisla1)/2),YTlusta1-5,TA_CENTER,'c') end TEXT((X3Svisla1+(XKonec1-X3Svisla1)/2),YTlusta1-Y1Hlav1+2.5,TA_CENTER,'Skutečnost v účetním období') TEXT((X3Svisla1+(X4Svisla1-X3Svisla1)/2),YTlusta1-Y2Hlav1+1.5,TA_CENTER,'sledovaném') TEXT((X3Svisla1+(X4Svisla1-X3Svisla1)/2),YTlusta1-5,TA_CENTER,'1'); TEXT((X4Svisla1+(XKonec1-X4Svisla1)/2),YTlusta1-Y2Hlav1+1.5,TA_CENTER,'minulém') TEXT((X4Svisla1+(XKonec1-X4Svisla1)/2),YTlusta1-5,TA_CENTER,'2'); TabPos(YTlusta1+0.6) DefTab(3,YRadkovani1,XZacatek1+2,X1Svisla1-2,TA_LEFT,X1Svisla1+2,X2Svisla1-X1Svisla1-4,TA_BOTH,(X2Svisla1+(X3Svisla1-X2Svisla1)/2),X3Svisla1-X2Svisla1-2,TA_CENTER) if(ItsBlank) begin PrintText(PocRad1); end else begin X1=X1Svisla1-2 X2=X2Svisla1-X1Svisla1-4 X3=X2Svisla1+(X3Svisla1-X2Svisla1)/2 if(TiskJenNenul) DefTab(4,YRadkovani1,XZacatek1+2,X1,TA_LEFT,X1Svisla1+2,X2,TA_Left|TA_MaskRight,X4Svisla1-2,X4Svisla1-X3Svisla1-2,TA_RIGHT|TA_NoBlank,XKonec1-2,XKonec1-X4Svisla1-2,TA_RIGHT|TA_NoBlank) else DefTab(5,YRadkovani1,XZacatek1+2,X1,TA_LEFT,X1Svisla1+2,X2,TA_Both,X3,X3Svisla1-X2Svisla1-2,TA_CENTER,X4Svisla1-2,X4Svisla1-X3Svisla1-2,TA_RIGHT|TA_NoBlank,XKonec1-2,XKonec1-X4Svisla1-2,TA_RIGHT|TA_NoBlank) i=1 j=1 While(j<=PocRad1) begin if(Hodnoty[i].ArrTisk) begin if(Hodnoty[i].ArrCastkaLetos=0) StrLetos='' else StrLetos=Str(Hodnoty[i].ArrCastkaLetos,0,PocetDesMist) if(Hodnoty[i].ArrCastkaLoni=0) StrLoni='' else StrLoni=Str(Hodnoty[i].ArrCastkaLoni,0,PocetDesMist) if(TiskJenNenul) DynTab(Hodnoty[i].ArrPolozka+#9+Hodnoty[i].ArrText+#9+StrLetos+#9+StrLoni) else DynTab(Hodnoty[i].ArrPolozka+#9+Hodnoty[i].ArrText+#9+Hodnoty[i].ArrRadek+#9+StrLetos+#9+StrLoni) Inc(j) end Inc(i) end end; ;if(MinRok) ; begin ; OpenWNSIfExist(MinRokName) ;VZaZ z minuleho roku ; TabPos(YTlusta1+0.5) ; DefTab(1,YRadkovani1,XKonec1-2,XKonec1-X4Svisla1-2,TA_RIGHT) ; if(Val(PredObdRok(2))=2) ; begin ;prevod z roku 2002 nelze mechanicky ; TabFromWns(2,7,19,$8) ; TabPos(YTlusta1+0.5+((19+1)*YRadkovani1)); přeskoceni volneho radku, ktery se netiskne ; ;LoadWNSLine(2,7) ; TabFromWns(2,7,2,$8); tisk dalsich 2 radku = radek 20 a 21 z roku 2002 ; SkipWNSLine(2,7,3); preskocit 3 radky ; TabFromWns(2,7,1,$8); tisk dalsiho 1 radku = radek 25 z roku 2002 ; SkipWNSLine(2,7,5); preskocit 5 radku ; TabFromWns(2,7,1,$8); tisk dalsiho 1 radku = radek 31 z roku 2002 ; SkipWNSLine(2,7,3); preskocit 3 radky ; TabFromWns(2,7,1,$8); tisk dalsiho 1 radku = radek 35 z roku 2002 ; SkipWNSLine(2,7,3); preskocit 3 radky ; TabFromWns(2,7,4,$8); tisk dalsiho 4 radku = radek 39 az 42 z roku 2002 ; SaveWnsPos(12) ;znacka v souboru z minuleho roku, je treba vytisknout radek 50/2002 ; SkipWNSLine(2,7,7); preskocit 7 radky ; TabFromWns(2,7,1,$8); tisk dalsiho radku = radek 50 z roku 2002 ; LoadWNSPos(12); návrat na řádek 42/2002 ; SkipWNSLine(2,7,2); preskocit 2 radky (řádky 43 a 44 z roku 2002 se ztraci) ; TabFromWns(2,7,5,$8); tisk dalsich 5 radku = radky 45 az 49 ; SkipWNSLine(2,7,1); preskocit 1 radky 50/2002 ; TabFromWns(2,7,1,$8); tisk dalsiho 1 radku = radek 51/2002 ; ; ;SaveWnsPos(12) ;znacka v souboru z minuleho roku - pouze kdyby se tiskla dalsi strana ; end else ; begin ;mechanicky prebira udaje z minuleho roku - pokud bude rok 4 mit stejnou VZaZ jako rok 3, nemusi se menit ; TabFromWns(2,7,PocRad1,$8) ; ;SaveWnsPos(12) ;znacka v souboru z minuleho roku - pouze kdyby se tiskla dalsi strana ; end ; OpenWNS(WNSName) ; otevreni zase toho aktualniho roku ; end; CallDDT('PataVyk.ddt') END