;není hotovo ani nahodou, nutno vymyslet nejaky novy rozumny index ; DDT vypíše dle interniho čísla rekapitulaci DPH, jeden doklad = jeden radek ; verze z 8.8.2002 ; Autor: WinDUO Team Name('Rekapitulace DPH úsporná') ;FileName('KonDPH1.WNS') Designed('DenMan') Author('Winduo Team','EMail: winduo@winduo.cz','http://www.winduo.com','http://www.winduo.cz') Descr('V rámci jednoho interního čísla vypíše podklady pro DPH') WNSType(1); NewWNS('RekDPH.WNS','Rekapitulace DPH úsporná') SetColumn(0,ta_Left,8); SetColumn(1,ta_Left,20); SetColumn(2,ta_Right,13); SetColumn(3,ta_Right,13); SetColumn(4,ta_Right,13); SetColumn(5,ta_Right,13); SetColumn(6,ta_Right,13); SetColumn(7,ta_Right,4); SetHead('DPH\tDoklad\tZ22\tD22\tZ5\tD5\tZ0\tChyba'); TabFontScale:Double TabFontScale=1.8 ;TabFontScale - nastavení šířky písma v tabulce položek ;=1 písmo dle odhadu WinDUO ;=0 písmo bez změny šířky ;jinak index, tzn.např. =1.5 je 150% šířky odhladlé WinDUO ; =0.75 je 75% šířky odhladlé WinDUO ;cim vetsi cislo, tim tlustsi, obéznější (prsatější) písmenka Strana:Word ; definuje číslo stránky Radek:Word ; promměnná pro počítání vytištěných řádků PocetRadku:Word ; promměnná pro počet řádků na stránku Pozice:LongInt ; definuje proměnnou Strana=0 ; úvodní hodnoty = aktuální číslo strany PocetRadku=50 ; kolik řádků na stranu chcete tisknout TabPos=10 ; první řádek na stránce se bude tisknout 10mm shora IntCislo:LongInt Doklad:String DatumDPH:String SazbaDPHNizsi:Byte SazbaDPHVyssi:Byte VyssiDPHZaklad:Double=0 NizsiDPHZaklad:Double=0 VyssiDPHDan:Double=0 NizsiDPHDan:Double=0 BezDPH:Double=0 LocBo:Boolean Rozdil:Double Chyba:Integer SChyba:String Tolerance:Real=0.1 ;toleruje 10 haleru TiskJenChyb:Boolean=True ;**************************************************************************** DeclareRec('Denik') ;DeclareRec('Program') DeclareRec('KeyDenik7') VetaD:LongInt ; definuje proměnnou pro denik ClearKey(KeyDenik7) ; resetuje ukazatel aktuální věry v souboru LocBo=NextKey(KeyDenik7,VetaD); InitStatus(UsedKeys(KeyDenik7)) ; inicializace stavoveho prouzku ReadRec(Denik,VetaD) ; přečte větu ze souboru While((VetaD<>0)and(NextKey(KeyDenik7,VetaD))) ; začátek cyklu přes celý soubor begin ; začátek příkazu pro zpracování jedné věty LocBo=PrevKey(KeyDenik7,VetaD) IntCislo=Denik.Cislo Doklad=Denik.Doklad DatumDPH=StrDate(Denik.Datum_ZP) While((Denik.Cislo=IntCislo)and(VetaD<>0)) begin ;ReadRec(Denik,VetaD) ; přečte větu ze souboru if(Denik.DanT&$C0=$80) ; zaklad dane begin if(Denik.DanT&$30=0) begin BezDPH=BezDPH+Denik.Castka end else if(Denik.DanT&$30=$10) begin NizsiDPHZaklad=NizsiDPHZaklad+Denik.Castka end else if(Denik.DanT&$30=$20) begin VyssiDPHZaklad=VyssiDPHZaklad+Denik.Castka end; end else if(Denik.DanT&$C0=$C0) ; dan begin if(Denik.DanT&$30=$10) begin NizsiDPHDan=NizsiDPHDan+Denik.Castka end else if(Denik.DanT&$30=$20) begin VyssiDPHDan=VyssiDPHDan+Denik.Castka end; end; ;skok na dalsi vetu LocBo=NextKey(KeyDenik7,VetaD); ReadRec(Denik,VetaD) ; přečte větu ze souboru Inc(Pozice) ; zvyseni citace zpracovanych vet SetStatus(Pozice) ; nastaveni stavoveho prouzku end; ;Tisk: ;testuje pouze v ramci jednoho interniho cisla, zda souhlasi zaklad a dan SazbaDPHNizsi=SazbaDPH(False,DatumDPH) ;SazbaDPHNizsi=5 SazbaDPHVyssi=SazbaDPH(True,DatumDPH) ;SazbaDPHVyssi=22 Chyba=0 LocBo=True Rozdil=VyssiDPHDan-(VyssiDPHZaklad*SazbaDPHVyssi/100) If(Rozdil<0) Rozdil=Rozdil*(-1) If(Rozdil>Tolerance) Chyba=22 Rozdil=NizsiDPHDan-(NizsiDPHZaklad*SazbaDPHNizsi/100) If(Rozdil<0) Rozdil=Rozdil*(-1) If(Rozdil>Tolerance) Chyba=Chyba+5 If(Chyba=22) SChyba='22' If(Chyba=5) SChyba='5' If(Chyba=27) SChyba='22+5' If(Chyba=0) begin SChyba='' LocBo=False end If(not(TiskJenChyb)) LocBo=True If(LocBo) AddLine(DatumDPH+#9+Doklad+#9+StrFinanc(VyssiDPHZaklad,2)+#9+StrFinanc(VyssiDPHDan,2)+#9+StrFinanc(NizsiDPHZaklad,2)+#9+StrFinanc(NizsiDPHDan,2)+#9+StrFinanc(BezDPH,2)+#9+SChyba) VyssiDPHZaklad=0 NizsiDPHZaklad=0 VyssiDPHDan=0 NizsiDPHDan=0 BezDPH=0 end; END;