; DDT faktury do predtisteneho formulare 1 ; verze z 7.11.1999 ; Autor: WinDUO Team Name('Faktura IV') FileName('Fakt4.WNS') Designed('Faktura') Author('Winduo Team','EMail: winduo@winduo.mine.nu','http://www.winduo.com','http://winduo.mine.nu') Descr('Zálohová faktura do předtištěného formuláře z DUO pro DOS','druhá a další strana na čistý papír.') ; netiskne nazev banky MaxLines:Word MaxLinesPril:Word YTextFakt:Word YTextPril:Word SirkaFontuText:Real VyskaFontuText:Real MaxLines=9 ;Maximalni pocet radku ve fakture MaxLinesPril=45 ;Maximalni pocet radku v priloze YTextFakt=120 ;y-souřadnice začátku textu ve fakture YTextPril=10 ;y-souřadnice začátku textu v priloze SirkaFontuText=1.5 VyskaFontuText=4 Designed('Faktura') DeclareRec('Program') DeclareRec('Faktura') DeclareRec('Pohledavka') DeclareRec('RozpisFaktury') if(Program.Sklady) begin DeclareRec('Sklad') DeclareRec('KeySklad10') end if(Program.TiskIDB) begin DeclareRec('BankovniUcet') DeclareRec('KeyBankovniUcet1') end Hlavicka:Faktura LocL:LongInt LocStr:String TiskDPH:Boolean GetBindRec('Hlavicka',0) GetBindRec('Pohledavka',0) GetBindRec('RozpisFaktury') TiskDPH=(Program.RezimDPH<>0) and (Hlavicka.Typ=0) ;**************************************************************************** ; Tisk hlavickovych udaju ;**************************************************************************** PaintMetaFile(5,8,23.8,24.2,Program.Logo) FontFace(Bold) FontSize(6) FontWidthScale(2.0) Text(96,25,TA_RIGHT,'ZÁLOHOVÁ') FontWidthScale(0) FontFace(Bold|Italic) FontSize(4) Text(44,33,TA_LEFT,Program.ICO) FontSize(5) Text(175,34,TA_RIGHT,Pohledavka.Doklad); FontSize(4) Text(44,37,TA_LEFT,Program.DIC) Text(175,39,TA_RIGHT,Pohledavka.KSymb) Text(24,44,TA_LEFT,Program.Firma) ;Text(175,43,TA_RIGHT,'SPEC.SYMB') ; ve strukture WinDUO neni Text(24,48,TA_LEFT,Program.Rozsireni) Text(24,52,TA_LEFT,Program.Ulice) Text(130,50,TA_LEFT,Pohledavka.ICO) Text(12,56,TA_LEFT,Program.PSC) Text(24,56,TA_LEFT,Program.Mesto) Text(130,54,TA_LEFT,Pohledavka.DIC) FontSize(5) Text(105,59,TA_LEFT,Pohledavka.Firma) Text(105,64,TA_LEFT,Pohledavka.Rozsireni) Text(105,69,TA_LEFT,Pohledavka.Ulice) Text(105,74,TA_LEFT,Pohledavka.Mesto) Text(105,79,TA_LEFT,Pohledavka.PSC) if(Pohledavka.Banka<>0) begin Text(30,65,TA_LEFT,Pohledavka.Ucet+'/'+Null(Str(Pohledavka.Banka),4)) if(Program.TiskIDB) begin KeyBankovniUcet1.Ucet=Null(Str(Pohledavka.Banka),4)+Pohledavka.Ucet if(FindKey(KeyBankovniUcet1,LocL)) ReadRec(BankovniUcet,LocL) else ClearRec(BankovniUcet) Text(30,71,TA_LEFT,BankovniUcet.NazevB) ;nazev banky LocStr=BankovniUcet.Ulice if((Length(LocStr)<>0) and (Length(BankovniUcet.Mesto)<>0)) LocStr=LocStr+',' LocStr=LocStr+BankovniUcet.Mesto Text(30,76,TA_LEFT,LocStr) end end; Text(45,88,TA_LEFT,Pohledavka.OBJEDNAVKA) FontFace(Bold|Italic) FontSize(3.5) Text(150,88,TA_Left,StrDate(Pohledavka.DatSpl)) ;datum splatnosti Text(150,92,TA_Left,StrDate(Pohledavka.DatVyst)) ;datum odeslání = vystevení Text(150,96,TA_Left,StrDate(Pohledavka.DatVyst)) ;datum vystavení if(Program.RezimDPH<>0) begin FontFace(Bold) Text(150,100,TA_Left,StrDate(Pohledavka.Datum_ZP)) ;datum DPH end else begin Text(150,100,TA_Left,'dodavatel není plátce DPH') ;datum DPH end; Text(150,104,TA_Left,GetString(5500-Pohledavka.Platba)) FontFace(Normal) FontSize(3) TabPos=200 ; pozice pro tabulku rozpisu DPH if(TiskDPH) begin Pen(0,0.5) BoxA(10,TabPos,85,TabPos+20) ;Brush(UserBrush) BoxA(10,TabPos,35,TabPos+20) BoxA(10,TabPos,85,TabPos+5) ;Brush(NullBrush) Pen(0,0.2) LinesA(10,TabPos+5,85,TabPos+5,0,5,3) LinesA(35,TabPos,35,TabPos+20,25,0,2) Text(22.5,TabPos+1,TA_CENTER,'Sazba daně') Text(47.5,TabPos+1,TA_CENTER,'Základ') Text(72.5,TabPos+1,TA_CENTER,'Daň') if(RozpisFaktury.DPHZakladBez<>0) begin Text(22.5,TabPos+6,TA_CENTER,'0 %') Text(58,TabPos+6,TA_Right,Str(RozpisFaktury.DPHZakladBez,0,2)) Text(72.5,TabPos+6,TA_Center,'×') end if(RozpisFaktury.DPHZakladNizsi<>0) begin Text(22.5,TabPos+11,TA_CENTER,'5 %') Text(58,TabPos+11,TA_Right,Str(RozpisFaktury.DPHZakladNizsi,0,2)) Text(83,TabPos+11,TA_Right,Str(RozpisFaktury.DPHDanNizsi,0,2)) end if(RozpisFaktury.DPHZakladVyssi<>0) begin Text(22.5,TabPos+16,TA_CENTER,'22 %') Text(58,TabPos+16,TA_Right,Str(RozpisFaktury.DPHZakladVyssi,0,2)) Text(83,TabPos+16,TA_Right,Str(RozpisFaktury.DPHDanVyssi,0,2)) end end TabPos=185 if(RozpisFaktury.Zaloha=0) begin if(TiskDPH) begin Text(150,TabPos,TA_Right,'Celkem bez DPH') Text(173,TabPos,TA_Right,Str(RozpisFaktury.Celkem,0,2)) TabPos=TabPos+5 Text(150,TabPos,TA_Right,'DPH') Text(173,TabPos,TA_Right,Str(RozpisFaktury.CelDPH-RozpisFaktury.Celkem,0,2)) TabPos=TabPos+5 Text(150,TabPos,TA_Right,'Celkem s DPH') Text(173,TabPos,TA_Right,Str(RozpisFaktury.CelDPH,0,2)) if(RozpisFaktury.Zaokr<>0) begin TabPos=TabPos+5 Text(150,TabPos,TA_Right,'Zaokrouhlení') Text(173,TabPos,TA_Right,Str(RozpisFaktury.Zaokr,0,2)) end; end else begin TabPos=TabPos+5 Text(150,TabPos,TA_Right,'Celkem') Text(173,TabPos,TA_Right,Str(RozpisFaktury.CelDPH,0,2)) if(RozpisFaktury.Zaokr<>0) begin TabPos=TabPos+5 Text(150,TabPos,TA_Right,'Zaokrouhlení') Text(173,TabPos,TA_Right,Str(RozpisFaktury.Zaokr,0,2)) end; end end else begin Text(150,TabPos,TA_Right,'Celkem na dokladu') Text(173,TabPos,TA_Right,Str(RozpisFaktury.Doklad,0,2)) TabPos=TabPos+5 Text(150,TabPos,TA_Right,'Záloha') Text(173,TabPos,TA_Right,Str(RozpisFaktury.Zaloha,0,2)) TabPos=TabPos+5 Text(150,TabPos,TA_Right,'Zbývá k proplacení') Text(173,TabPos,TA_Right,Str(RozpisFaktury.CelBZ,0,2)) if(RozpisFaktury.Zaokr<>0) begin TabPos=TabPos+5 Text(150,TabPos,TA_Right,'Zaokrouhlení') Text(173,TabPos,TA_Right,Str(RozpisFaktury.Zaokr,0,2)) end; end if(Hlavicka.FSleva<>0) begin FontSize(3.5) Text(7,190,TA_Left,'Na doklad byla poskytnuta sleva ve výši '+Str(Hlavicka.FSleva)+'%') end; FontSize(3.5) ;FontWidthScale(0.80) ;do zálohové faktury NE: ;Text(5,220,TA_LEFT,SupplString(Str(Program.Penale,0,2),Program.FText)) ;FontWidthScale(0) Text(9,236,TA_Left,Pohledavka.Vystavil) FontSize(7) FontFace(Bold) Text(171,209,TA_RIGHT,Str(RozpisFaktury.Propla,0,2)) Text(173,209,TA_LEFT,'Kč') ;**************************************************************************** ; Tisk radku faktury ;**************************************************************************** Radky:Word Strana:Word Radky=GetCountBindRec('Faktura') FontSize(5) LocW:Word Sloupce:Word DynStr:String DynStr2:String Hlava1:String Hlava2:String Radku:Word Max:Array[1..12] of Byte LocB:Byte LocL:LongInt LocW2:Word LocW3:Word LocB2:Byte LocD:Double AktRadek:Byte Max[1]=Length('Skl.') Max[2]=Length('Druh') Max[3]=Length('Kód') Max[4]=Length('Označení') Max[5]=Length('Popis položky') Max[6]=Length('Cena za MJ') Max[7]=Length('Množství') Max[9]=Length('Sleva') Max[10]=Length('bez DPH') Max[11]=Length('DPH') Max[12]=Length('Celkem') Sloupce=0 Radku=0 if(Program.RezimDPH<>0) begin Sloupce=Sloupce|$C00 end LocW=1 While(LocW0) begin Sloupce=Sloupce|$10 if(LocB>Max[5]) begin Max[5]=LocB end end if(Faktura.RecType=0) begin OdCena: if(Faktura.Cena<>0) begin Sloupce=Sloupce|$20 if(Hlavicka.FSleva<>0) begin Faktura.Cena=((100-Hlavicka.FSleva)/100)*Faktura.Cena; end LocB=Length(Str(Faktura.Cena,0,2)) if(LocB>Max[6]) Max[6]=LocB end if(Faktura.Mnozstvi<>0) begin Sloupce=Sloupce|$40 LocB=Length(Str(Faktura.Mnozstvi,0,3)) if(LocB>Max[7]) Max[7]=LocB end; LocB=Length(Faktura.MJ) if(LocB<>0) begin Sloupce=Sloupce|$80 if(LocB>Max[8]) Max[8]=LocB end OdCelkem: if(Faktura.Sleva<>0) begin Sloupce=Sloupce|$100 LocB=Length(Str(Faktura.Sleva,0,2)) if(LocB>Max[9]) Max[9]=LocB end if(Faktura.Celkem<>0) begin if((Hlavicka.FSleva<>0)and(Faktura.DPH<98)) begin Faktura.Celkem=((100-Hlavicka.FSleva)/100)*Faktura.Celkem; end; if(Faktura.Sleva<>0) then begin Faktura.Celkem=(100-Faktura.Sleva)/100*Faktura.Celkem end; Sloupce=Sloupce|$200 LocB=Length(Str(Faktura.Celkem,0,2)) if(LocB>Max[10]) Max[10]=LocB end if(Program.RezimDPH<>0) begin if(Faktura.DPH<90) begin LocB=Length(Str(Faktura.DPH)) if(LocB>Max[11]) Max[11]=LocB end; if(Faktura.DPH<90) begin LocB=Length(Str(Faktura.Celkem*(1+Faktura.DPH/100),0,2)) if(LocB>Max[12]) Max[12]=LocB end else begin LocB=Length(Str(Faktura.Celkem,0,2)) if(LocB>Max[12]) Max[12]=LocB end; end end else if((Faktura.RecType=1) or (Faktura.RecType=6)) begin GoTo(OdCelkem) end else if((Faktura.RecType=3) or (Faktura.RecType=4) or (Faktura.RecType=5)) begin if(Program.Sklady) begin KeySklad10.Length=4 KeySklad10.Cislo=SwapL(Faktura.CisMat) if(FindKey(KeySklad10,LocL)) begin ReadRec(Sklad,LocL) end else begin ClearRec(Sklad) end; if((Program.FTiskFlags&1<>0) and (Sklad.Sklad<>0)) begin Sloupce=Sloupce|1 LocB=Length(Str(Sklad.Sklad)) if(LocB>Max[1]) Max[1]=LocB end if((Program.FTiskFlags&2<>0) and (Sklad.Druh<>0)) begin Sloupce=Sloupce|2 LocB=Length(Str(Sklad.Druh)) if(LocB>Max[2]) Max[2]=LocB end LocB=Length(Sklad.Kod) if((Program.FTiskFlags&2<>0) and (LocB<>0)) begin Sloupce=Sloupce|4 if(LocB>Max[3]) Max[3]=LocB end LocB=Length(Sklad.Material) if(Program.TiskCis and (LocB<>0)) begin Sloupce=Sloupce|8 if(LocB>Max[4]) Max[4]=LocB end end GoTo(OdCena) end end Inc(LocW) end if(Sloupce<>0) begin DynStr='' Hlava1='' Hlava2='' LocW=0 LocW3=0 if(Sloupce&1<>0) begin DynStr=DynStr+Str(Max[1])+',TA_Right,' Hlava1=Hlava1+#9 Hlava2=Hlava2+'Skl.'+#9 Inc(LocW) end if(Sloupce&2<>0) begin DynStr=DynStr+Str(Max[2])+',TA_Right,' Hlava1=Hlava1+#9 Hlava2=Hlava2+'Druh'+#9 Inc(LocW) end if(Sloupce&4<>0) begin DynStr=DynStr+Str(Max[3])+',TA_Left,' Hlava1=Hlava1+#9 Hlava2=Hlava2+'Kód'+#9 Inc(LocW) end if(Sloupce&$8<>0) begin DynStr=DynStr+Str(Max[4])+',TA_Left,' Hlava1=Hlava1+#9 Hlava2=Hlava2+'Označení'+#9 Inc(LocW) end if(Sloupce&$10<>0) begin DynStr=DynStr+Str(Max[5])+',TA_Left,' Hlava1=Hlava1+#9 Hlava2=Hlava2+'Popis položky'+#9 Inc(LocW) end if(Sloupce&$20<>0) begin DynStr=DynStr+Str(Max[6])+',TA_Right,' if(Program.RezimDPH<>0) begin Hlava1=Hlava1+'Cena za MJ'+#9 Hlava2=Hlava2+'bez DPH'+#9 end else begin Hlava1=Hlava1+#9 Hlava2=Hlava2+'Cena za MJ'+#9 end Inc(LocW) end if(Sloupce&$40<>0) begin DynStr=DynStr+Str(Max[7])+',TA_Right,' Hlava1=Hlava1+#9 Hlava2=Hlava2+'Množství'+#9 Inc(LocW) end if(Sloupce&$80<>0) begin DynStr=DynStr+Str(Max[8])+',TA_Left,' Hlava1=Hlava1+#9 Hlava2=Hlava2+#9 Inc(LocW) end if(Sloupce&$100<>0) begin DynStr2=DynStr2+Str(Max[9])+',TA_Right,' Hlava1=Hlava1+'Sleva'+#9 Hlava2=Hlava2+'%'+#9 Inc(LocW3) end if(Sloupce&$200<>0) begin DynStr2=DynStr2+Str(Max[10])+',TA_Right,' if(Program.RezimDPH<>0) begin Hlava1=Hlava1+'Celkem'+#9 Hlava2=Hlava2+'bez DPH'+#9 end else begin Hlava1=Hlava1+#9 Hlava2=Hlava2+'Celkem'+#9 end Inc(LocW3) end if(Sloupce&$400<>0) begin DynStr2=DynStr2+Str(Max[11])+',TA_Right,' Hlava1=Hlava1+'DPH'+#9 Hlava2=Hlava2+'%'+#9 Inc(LocW3) end if(Sloupce&$800<>0) begin DynStr2=DynStr2+Str(Max[12])+',TA_Right,' Hlava1=Hlava1+'Celkem'+#9 Hlava2=Hlava2+'s DPH'+#9 Inc(LocW3) end Inc(LocW,LocW3) FontSize(VyskaFontuText) FontFace(Normal) FontWidthScale(0) DynStr='DefDynTab(7,166,5,'+Str(LocW)+','+DynStr+DynStr2+')'; StrCom(DynStr) FontWidthScale(SirkaFontuText) SaveTabInfo(1) TabPos=YTextFakt DynTab(Hlava1) DynTab(Hlava2) Pen(0,0.4) Line(7,TabPos+Shr(Odstup)+1,166,0) Inc(TabPos,Odstup+1) LocW2=1 LocB=1 LocB2=0 While(LocB<=8) begin if(Sloupce&LocW2<>0) LocB2=LocB2+Max[LocB]+1 LocW2=Shl(LocW2) Inc(LocB) end DynStr='DefDynTab(7,166,5,'+Str(LocW3+1)+','+Str(LocB2-1)+',TA_Left,'+DynStr2+')'; StrCom(DynStr) FontWidthScale(SirkaFontuText) SaveTabInfo(2) While(LocB<=12) begin if(Sloupce&LocW2<>0) LocB2=LocB2+Max[LocB]+1 LocW2=Shl(LocW2) Inc(LocB) end Dec(LocB); DynStr='DefDynTab(7,166,5,1,78,TA_Left)'; StrCom(DynStr) FontWidthScale(SirkaFontuText) SaveTabInfo(3) LocStr:String LastType:Byte ActualType:Byte LocW=1 LastType=3 While(LocW0) LocStr=LocStr+#9 if(Sloupce&$2<>0) LocStr=LocStr+#9 if(Sloupce&$4<>0) LocStr=LocStr+#9 if(Sloupce&$8<>0) LocStr=LocStr+#9 Typ0: ActualType=1 if(Sloupce&$10<>0) LocStr=LocStr+Faktura.Text+#9 if(Sloupce&$20<>0) begin if(Hlavicka.FSleva<>0) begin Faktura.Cena=((100-Hlavicka.FSleva)/100)*Faktura.Cena; end; if(Faktura.Cena<>0) LocStr=LocStr+Str(Faktura.Cena,0,2)+#9 else LocStr=LocStr+#9 end; if(Sloupce&$40<>0) begin if(Faktura.Mnozstvi<>0) LocStr=LocStr+Str(Faktura.Mnozstvi,0,3)+#9 else LocStr=LocStr+#9 end; if(Sloupce&$80<>0) LocStr=LocStr+Faktura.MJ+#9 TiskOdCelkem: if(Sloupce&$100<>0) begin if(Faktura.Sleva<>0) LocStr=LocStr+Str(Faktura.Sleva,0,2)+#9 else LocStr=LocStr+#9 end if(Faktura.Celkem<>0) begin if((Hlavicka.FSleva<>0)and(Faktura.DPH<98)) begin Faktura.Celkem=((100-Hlavicka.FSleva)/100)*Faktura.Celkem; end; if(Faktura.Sleva<>0) then begin Faktura.Celkem=(100-Faktura.Sleva)/100*Faktura.Celkem end; if(Sloupce&$200<>0) begin LocStr=LocStr+Str(Faktura.Celkem,0,2)+#9 end if(Sloupce&$400<>0) begin if(Faktura.DPH<90) LocStr=LocStr+Str(Faktura.DPH)+#9 else LocStr=LocStr+#9 end if(Sloupce&$800<>0) begin if(Faktura.DPH<90) LocStr=LocStr+Str(Faktura.Celkem*(1+Faktura.DPH/100),0,2)+#9 else LocStr=LocStr+Str(Faktura.Celkem,0,2)+#9 end end end else if((Faktura.RecType=1) or (Faktura.RecType=6)) begin ActualType=2 if(Sloupce&$10<>0) LocStr=LocStr+Faktura.Text2+#9 GoTo(TiskOdCelkem) end else if((Faktura.RecType=2) or (Faktura.RecType=7)) begin ActualType=3 if(Sloupce&$10<>0) LocStr=LocStr+Faktura.Text3+#9 end else if(Faktura.RecType<=5) begin if(Sloupce&$F<>0) begin KeySklad10.Length=4 KeySklad10.Cislo=SwapL(Faktura.CisMat) if(FindKey(KeySklad10,LocL)) begin ReadRec(Sklad,LocL) end else begin ClearRec(Sklad) end; if(Sloupce&$1<>0) begin if(Sklad.Sklad<>0) LocStr=LocStr+Str(Sklad.Sklad)+#9 else LocStr=LocStr+#9 end if(Sloupce&$2<>0) begin if(Sklad.Druh<>0) LocStr=LocStr+Str(Sklad.Druh)+#9 else LocStr=LocStr+#9 end if(Sloupce&$4<>0) begin if(Length(Sklad.Kod)<>0) LocStr=LocStr+Sklad.Kod+#9 else LocStr=LocStr+#9 end if(Sloupce&$8<>0) begin if(Length(Sklad.Material)<>0) LocStr=LocStr+Sklad.Material+#9 else LocStr=LocStr+#9 end end GoTo(Typ0) end Inc(AktRadek) if(AktRadek>MaxLines) begin ; FontSize(5) AktRadek=0 Inc(Strana) ; Text(7,260,TA_Left,'Počet stránek faktury: '+Str(Word((Radky-1)/MaxLines+1))+' (Strana '+Str(Strana)+')') NextPage MaxLines=MaxLinesPril TabPos=YTextPril LastType=1 LoadTabInfo(LastType,False,True) DynTab(Hlava1) DynTab(Hlava2) Pen(0,0.4) Line(7,TabPos+Shr(Odstup)+1,166,0) Inc(TabPos,Odstup+1) end; if(ActualType<>LastType) begin LoadTabInfo(ActualType,False,True) LastType=ActualType end; DynTab(LocStr) end Inc(LocW) end ; if(Radky>9) ; begin ; FontSize(5) ; Inc(Strana) ; Text(7,260,TA_Left,'Počet stránek faktury: '+Str(Word((Radky-1)/MaxLines+1))+' (Strana '+Str(Strana)+')') ; end; end if(Strana=1) begin Message('Faktura obsahuje první stranu a jednu stranu přílohy, v tiskárně musí být vhodné papíry...',mb_IconExclamation) end; if(Strana>1) begin debug if(Strana<5) begin Message('Faktura obsahuje první stranu a '+Str(Strana)+' strany přílohy, v tiskárně musí být vhodné papíry...',mb_IconExclamation) end; else begin Message('Faktura obsahuje první stranu a '+Str(Strana)+' stran přílohy, v tiskárně musí být vhodné papíry...',mb_IconExclamation) end; end END