; VZaZ nevýdělečných organizací pro rok 2003 ; verze z 9.3.2004 ; Autor: WinDUO Team Designed('') Author('Winduo Team','EMail: winduo@winduo.cz','http://www.winduo.com','http://www.winduo.cz') Descr('Výkaz zisku a ztráty pro účetní jednotky u kterých hlavním předmětem činnosti není podnikání') FileName('FIVZ'+ObdMesic(2)+ObdRok(2)+'.WNS') WNSType(0); TiskMinule:Boolean=False; pro pripad, ze to nekdo bude chtit. Prevod z 2002 neni doresen - zmena formulare + souctove radky!!! 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 PocRadCelkem:Word PocRadTiskCelkem:Word PocetStr1:Byte=43; jeste se to upresnuje jako Rozhrani PocetStr2:Byte=41 PocetNakladu:Byte PocetVynosu:Byte Rozhrani:Byte PouzeJednaStrana:Boolean LocI:Byte i:Byte=1 j:Byte=1 X1:Real X2:Real X3:Real StrLetos:String StrLoni:String StatusWindowInCall(False) ItsBlank:Boolean FormName:String=GetTabName(4); 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)and(TiskMinule)) CallDDT('DoplMO.ddt') ;hlavicka Global NazevSest1:String='Výkaz zisku a ztráty pro účetní jednotky,' Global NazevSest2:String='u kterých hlavním předmětem činnosti není podnikání.' Global Opatr1:String='Podle Sbírky zákonů' Global Opatr2:String='vyhlášky č. 504/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... 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) if(not ItsBlank) PocRadCelkem=PocRadCelkem+2 LocStr=FromChar(',',LocStr) LocStr=FromChar(',',LocStr) LocStr1=ToChar(',',LocStr) Rozhrani=Val(LocStr1) PocetStr1=Rozhrani 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; ArrCastka1 :Double; ArrCastka2 :Double; ArrCastkaSuma :Double; end; MaxRadky:Word=65448/SizeOf(ArrRadky); if(MaxRadkyID_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].ArrCastkaSuma=0)and(Hodnoty[i].ArrCastkaLoni=0)) ;if(Hodnoty[i].ArrCastkaSuma=0) ;if((Hodnoty[i].ArrCastka1=0)and(Hodnoty[i].ArrCastka2=0)) if(Hodnoty[i].ArrCastka1=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) if((Hodnoty[i].ArrTisk)and(i=Rozhrani+1)) Inc(PocetVynosu) Inc(i) end end ;AAAAAAAAAAAAAAAAAAAAA1 PocRadTiskCelkem=PocRadTiskCelkem+2 ; texty Naklady, Vynosy ;VVVVVVVVVVVVVVVVV2 if(TiskJenNenul) begin Inc(PocetNakladu) Inc(PocetVynosu) if(PocRadTiskCelkem>PocetStr1-10); minus 10 je kvuli ramecku pro podpisy begin; tisknout se 2 strany PouzeJednaStrana=False PocRad1:Byte=PocetNakladu ;pocet radku tabulky na 1. strane YRadkovani1:Real=4.8 ;posun radku v tabulce na 1.strane PouzeJednaStrana=False PocRad2:Byte=PocetVynosu YRadkovani2:Real=5.5 YKonec1:Real=YTlusta1+(PocRad1*YRadkovani1) YTlusta2:Real=20.5 ; Y-souradnice prvni tluste cary na 2. straně end else begin ;tiskne se jenom jedna strana PouzeJednaStrana=True PocRad1:Byte=PocetNakladu ;pocet radku tabulky na 1. strane YRadkovani1:Real=4.8 ;posun radku v tabulce na 1.strane PocRad2:Byte=PocetVynosu YRadkovani2:Real=4.8 YKonec1:Real=YTlusta1+(PocRad1*YRadkovani1) YTlusta2:Real=YKonec1+30 ; Y-souradnice prvni tluste cary na str.2 end end else begin PocRad1:Byte=PocetStr1 ;pocet radku tabulky na 1. strane YRadkovani1:Real=4.8 ;posun radku v tabulce na 1.strane PouzeJednaStrana=False PocRad2:Byte=PocetStr2 YRadkovani2:Real=5.5 YKonec1:Real=YTlusta1+(PocRad1*YRadkovani1) YTlusta2:Real=20.5 ; Y-souradnice prvni tluste cary na 2. straně end ;AAAAAAAAAAAAAAAAAAA1 ;{definice 1.strany} ;PocRad1:Byte=43 ;pocet radku tabulky na 1. strane ;YRadkovani1:Real=4.8 ;posun radku v tabulce na 1.strane ;YKonec1:Real=YTlusta1+(pocrad1*YRadkovani1) X1Svisla1:Real=XZacatek1+13 X2Svisla1:Real=XZacatek1+110 X3Svisla1:Real=XZacatek1+122 if(TiskMinule) X4Svisla1:Real=(X3Svisla1+(XKonec1-X3Svisla1)/2) else X4Svisla1:Real=XKonec1 Y2Hlav1:Real=9.5 ;{definice 2.strany} ;PocRad2:Byte=41 ;pocet radku tabulky na 2. strane XZacatek2:Real=0 ; x souradnice zacatku tabulky na 2. straně XKonec2:Real=188 ; x souradnice konce tabulky na 2. straně ;YTlusta2:Real=20.5 ; Y-souradnice prvni tluste cary na 2. straně ;YRadkovani2:Real=5.5 YKonec2:Real=YTlusta2+(pocrad2*YRadkovani2) X1Svisla2:Real=X1Svisla1 X2Svisla2:Real=X2Svisla1 X3Svisla2:Real=X3Svisla1 X4Svisla2:Real=X4Svisla1 Y1Hlav2:Real=Y1Hlav1 Y2Hlav2:Real=Y2Hlav1 ;{paticka} Global X1Pata:Real=XZacatek2 Global Y1Pata:Real=YKonec2+5 Global X2Pata:Real=XKonec2 Global Y2Pata:Real=YKonec2+30 CallDDT('HlavVyk.ddt') ;definice tabulky hodnot ;{========================================== str. 1} 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 if(TiskMinule) begin LINEA(X4Svisla1,YTlusta1-Y2Hlav1,X4Svisla1,YKonec1) ; 4. svisla LINEA(X3Svisla1,YTlusta1-Y2Hlav1,XKonec1,YTlusta1-Y2Hlav1) ; vodorovna v prave pulce hlavicky end LocI=PocRad1 if(LocI=0) LocI=1 LINESA(XZacatek1,YTlusta1+YRadkovani1,XKonec1,YTlusta1+YRadkovani1,0,YRadkovani1,LocI-1) FONTSIZE(3) FontFace(Normal) XTEXT(XZacatek1+(X1Svisla1-XZacatek1)/2,YTlusta1-Y1Hlav1+5,X1Svisla1-XZacatek1-1,TA_CENTER,'Položka') TEXT((X1Svisla1+(X2Svisla1-X1Svisla1)/2),YTlusta1-Y1Hlav1+5,TA_CENTER,'T E X T') if(not TiskJenNenul) XTEXT((X2Svisla1+(X3Svisla1-X2Svisla1)/2),YTlusta1-Y1Hlav1+5,X3Svisla1-X2Svisla1-1,TA_CENTER,'Označ.') if(TiskMinule) begin TEXT((X3Svisla1+(XKonec1-X3Svisla1)/2),YTlusta1-Y1Hlav1+2.5,TA_CENTER,'Skutečnost v účetním období') TEXT((X3Svisla1+(X4Svisla1-X3Svisla1)/2),YTlusta1-Y2Hlav1+3,TA_CENTER,'sledovaném') TEXT((X4Svisla1+(XKonec1-X4Svisla1)/2),YTlusta1-Y2Hlav1+3,TA_CENTER,'minulém') end else begin TEXT((X3Svisla1+(XKonec1-X3Svisla1)/2),YTlusta1-Y1Hlav1+5,TA_CENTER,'Hodnoty') end TabPos(YTlusta1+1) if(ItsBlank) begin 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) PrintText(PocRad1); end else begin ;X1=X1Svisla1-2 ;X2=X3Svisla1-X1Svisla1-4 ;X3=X2Svisla1+(X3Svisla1-X2Svisla1)/2 if(TiskJenNenul) begin DefTab(3,YRadkovani1,XZacatek1+2,X1Svisla1-2,TA_LEFT,X1Svisla1+2,X3Svisla1-X1Svisla1-4,TA_Left|TA_MaskRight,XKonec1-2,XKonec1-X3Svisla1-8,TA_RIGHT) j=2 end else begin DefTab(4,YRadkovani1,XZacatek1+2,X1Svisla1-2,TA_LEFT,X1Svisla1+2,X2Svisla1-X1Svisla1-4,TA_Both,(X2Svisla1+(X3Svisla1-X2Svisla1)/2),X3Svisla1-X2Svisla1-2,TA_CENTER,XKonec1-2,XKonec1-X3Svisla1-8,TA_RIGHT) j=1 end if(TiskJenNenul) DynTab('A.'+#9+'Náklady') i=1 While(j<=PocRad1) begin if(Hodnoty[i].ArrTisk) begin if(Hodnoty[i].ArrCastka1=0) StrLetos='' else StrLetos=Str(Hodnoty[i].ArrCastka1,0,PocetDesMist) ;if(Hodnoty[i].ArrCastkaSuma=0) ; StrLetos='' ; else ; StrLetos=Str(Hodnoty[i].ArrCastkaSuma,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) else DynTab(Hodnoty[i].ArrPolozka+#9+Hodnoty[i].ArrText+#9+Null(Hodnoty[i].ArrRadek,2,True)+#9+StrLetos) Inc(j) end Inc(i) end end; ;TabPos(YTlusta1+1) ;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 ; SaveWnsPos(1) ; TabFromWns(2,6,PocRad1,$7) ; SaveWnsPos(2) ; LoadWnsPos(1) ; FontSize(4.5) ; FontFace(Bold|Italic) ; TabPos(YTlusta1+0.4) ; DefTab(1,YRadkovani1,X4Svisla1-5,X4Svisla1-X3Svisla1-2,TA_RIGHT) ; TabFromWns(2,6,PocRad1,$8) ; end; ;{========================================== str. 2} IF(not PouzeJednaStrana) NextPage FONTFACE(Normal); PEN(0,0.7) LINEA(XZacatek2,YTlusta2,XKonec2,YTlusta2); PEN(0,0.3) BOXA(XZacatek2,YTlusta2-Y1Hlav2,XKonec2,YKonec2) ; obdelnik na 1. straně LINEA(X1Svisla2,YTlusta2-Y1Hlav2,X1Svisla2,YKonec2) ; 1. svisla if(not TiskJenNenul) LINEA(X2Svisla2,YTlusta2-Y1Hlav2,X2Svisla2,YKonec2) ; 2. svisla LINEA(X3Svisla2,YTlusta2-Y1Hlav2,X3Svisla2,YKonec2) ; 3. svisla if(TiskMinule) begin LINEA(X4Svisla2,YTlusta2-Y2Hlav2,X4Svisla2,YKonec2) ; 4. svisla LINEA(X3Svisla2,YTlusta2-Y2Hlav2,XKonec2,YTlusta2-Y2Hlav2) ; vodorovna v prave pulce hlavicky end LocI=PocRad2 if(LocI=0) LocI=1 LINESA(XZacatek2,YTlusta2+YRadkovani2,XKonec2,YTlusta2+YRadkovani2,0,YRadkovani2,LocI-1) FONTSIZE(3) FontFace(Normal) XTEXT(XZacatek2+(X1Svisla2-XZacatek2)/2,YTlusta2-Y1Hlav2+5,X1Svisla2-XZacatek2-1,TA_CENTER,'Položka') TEXT((X1Svisla2+(X2Svisla2-X1Svisla2)/2),YTlusta2-Y1Hlav2+5,TA_CENTER,'T E X T') if(not TiskJenNenul) XTEXT((X2Svisla2+(X3Svisla2-X2Svisla2)/2),YTlusta2-Y1Hlav2+5,X3Svisla2-X2Svisla2-1,TA_CENTER,'Označ.') if(TiskMinule) begin TEXT((X3Svisla2+(XKonec2-X3Svisla2)/2),YTlusta2-Y1Hlav2+2.5,TA_CENTER,'Skutečnost v účetním období') TEXT((X3Svisla2+(X4Svisla2-X3Svisla2)/2),YTlusta2-Y2Hlav2+3,TA_CENTER,'sledovaném') TEXT((X4Svisla2+(XKonec2-X4Svisla2)/2),YTlusta2-Y2Hlav2+3,TA_CENTER,'minulém') end else begin TEXT((X3Svisla2+(XKonec2-X3Svisla2)/2),YTlusta2-Y1Hlav2+5,TA_CENTER,'Hodnoty') end ;{hodnoty:} ;vvvvvvvvvvvv TabPos(YTlusta2+1) if(ItsBlank) begin DefTab(3,YRadkovani2,XZacatek2+2,X1Svisla2-2,TA_LEFT,X1Svisla2+2,X2Svisla2-X1Svisla2-4,TA_BOTH,(X2Svisla2+(X3Svisla2-X2Svisla2)/2),X3Svisla2-X2Svisla2-2,TA_CENTER) PrintText(PocRad2); end else begin if(TiskJenNenul) begin DefTab(3,YRadkovani2,XZacatek2+2,X1Svisla2-2,TA_LEFT,X1Svisla2+2,X2Svisla2-X1Svisla2-4,TA_Left|TA_MaskRight,XKonec2-2,XKonec2-X3Svisla2-8,TA_RIGHT) end else begin DefTab(4,YRadkovani2,XZacatek2+2,X1Svisla2-2,TA_LEFT,X1Svisla2+2,X2Svisla2-X1Svisla2-4,TA_Both,(X2Svisla2+(X3Svisla2-X2Svisla2)/2),X3Svisla2-X2Svisla2-2,TA_CENTER,XKonec2-2,XKonec2-X3Svisla2-8,TA_RIGHT) end LocI=PocRadCelkem if(TiskJenNenul) DynTab('B.'+#9+'Výnosy') else LocI=PocRadCelkem+2 j=1 While((j<=PocRad2)and(i<=PocRadCelkem)) begin if(Hodnoty[i].ArrTisk) begin if(Hodnoty[i].ArrCastka1=0) StrLetos='' else StrLetos=Str(Hodnoty[i].ArrCastka1,0,PocetDesMist) ;if(Hodnoty[i].ArrCastkaSuma=0) ; StrLetos='' ; else ; StrLetos=Str(Hodnoty[i].ArrCastkaSuma,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) else DynTab(Hodnoty[i].ArrPolozka+#9+Hodnoty[i].ArrText+#9+Null(Hodnoty[i].ArrRadek,2,True)+#9+StrLetos) Inc(j) end Inc(i) end end; ;AAAAAAAAAAA ;hodnoty: ;TabPos(YTlusta2+1.5) ;DefTab(3,YRadkovani2,XZacatek2+2,X1Svisla2-2,TA_LEFT,X1Svisla2+2,X2Svisla2-X1Svisla2-4,TA_BOTH,(X2Svisla2+(X3Svisla2-X2Svisla2)/2),X3Svisla2-X2Svisla2-2,TA_CENTER) ;FontWidthScale(0.75) ;zuzeni dlouhych textů, aby vyšly na řádek ;if(ItsBlank) ; begin ; PrintText(PocRad2); ; end else ; begin ; LoadWNSPos(2) ; TabFromWns(2,6,PocRad2,$7) ; LoadWNSPos(2) ; FontSize(4.5) ; FontFace(Bold|Italic) ; TabPos(YTlusta2+0.8) ; DefTab(1,YRadkovani2,X4Svisla2-5,X4Svisla2-X3Svisla2-2,TA_RIGHT) ; TabFromWns(2,6,PocRad2,$8) ; end; ;if(MinRok) ; begin ; OpenWNSIfExist(MinRokName) ;VZaZ z minuleho roku ; LoadWNSPos(12); ; TabPos(YTlusta2+0.8) ; DefTab(1,YRadkovani2,XKonec2-5,XKonec2-X4Svisla2-2,TA_RIGHT) ; TabFromWns(2,6,PocRad2,$8) ; OpenWNS(WNSName) ; otevreni zase toho aktualniho roku ; end CallDDT('PataVyk.ddt') END