; Podprogram pro zjištění počtu stránek faktury, není určen pro přímé volání !!! ; verze z 16.21.2002 ; Autor: WinDUO Team Designed('') DeclareRec('Program') DeclareRec('Faktura') Hlavicka:Faktura GetBindRec('Hlavicka',0) if(not ExistVariable('OdRadkuPocet')) Halt('Není definována proměnná OdRadkuPocet (OdRadkuPocet:Word)') if(not ExistVariable('PocetRadku')) Halt('Není definována proměnná PocetRadku (PocetRadku:Word)') if(not ExistVariable('Strana')) Halt('Není definována proměnná Strana (Strana:Word)') if(not ExistVariable('VseVytistenoPocet')) Halt('Není definována proměnná VseVytistenoPocet (VseVytistenoPocet:Boolean)') if(not ExistVariable('FaktXPozice')) Halt('Není definována proměnná FaktXPozice (FaktXPozice:Real)') if(not ExistVariable('FaktYPozice')) Halt('Není definována proměnná FaktYPozice (FaktYPozice:Real)') if(not ExistVariable('FaktSirka')) Halt('Není definována proměnná FaktSirka (FaktSirka:Real)') if(not ExistVariable('FaktOdstup')) Halt('Není definována proměnná FaktOdstup (FaktOdstup:Real)') if(not ExistVariable('VyskaFontuText')) VyskaFontuText:Real=4.5 if(not ExistVariable('SirkaFontuText')) SirkaFontuText:Real=0 if(Program.Sklady) begin DeclareRec('Sklad') DeclareRec('KeySklad10') end TiskDPH:Boolean=(Program.RezimDPH<>0) and (Hlavicka.Typ=0) ;**************************************************************************** ; Deklarace, popřípadě i inicializace proměnných ;**************************************************************************** Radky :Word=GetCountBindRec('Faktura') TisknoutSN:Boolean=(Program.PrintSN) or (not JeFaktura); LocB :Byte LocW :Word LocW2 :Word LocL :LongInt ;**************************************************************************** ; Zjištění maximální délky jednotlivých sloupců ;**************************************************************************** if(not ExistVariable('Max[12]')) Halt('Není definováno pole Max (Max:Array[1..12] of Byte)') if(not ExistVariable('Sloupce')) Halt('Není definována proměnná Sloupce (Sloupce:Word)') if((Max[1]=0) or (Max[12]=0)) begin 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[8]=Length('MJ') Max[9]=Length('Sleva') Max[10]=Length('bez DPH') Max[11]=Length('DPH') Max[12]=Length('Celkem') Sloupce=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 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(StrNative(Faktura.Mnozstvi,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 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 end; ; tisk jen texty + mnozstvi + MJ IF(ExistVariable('TiskCen')) Sloupce=Sloupce&$DF ;**************************************************************************** ; Nastavení se na první tištěný řádek ;**************************************************************************** if(ExistVariable('Transformace')) begin if(Transformace) begin LocW=1 LocW2=0 While((LocW8)) Inc(LocW2) Inc(LocW) end; OdRadkuPocet=LocW end; end else if(OdRadkuPocet=0) begin OdRadkuPocet=1 end; ;**************************************************************************** ; Tisk radku faktury ;**************************************************************************** DynStr:String DynStr2:String Hlava1:String Hlava2:String LocL:LongInt LocW3:Word LocB2:Byte LocD:Double 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+'MJ'+#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(4.5) FontSize(VyskaFontuText) FontFace(Normal) FontWidthScale(0) DynStr='DefDynTab(FaktXPozice,FaktSirka,FaktOdstup,'+Str(LocW)+','+DynStr+DynStr2+')'; StrCom(DynStr) FontWidthScale(0) FontWidthScale(SirkaFontuText) SaveTabInfo(1) TabPos(FaktYPozice) ;DynTab(Hlava1) ;DynTab(Hlava2) Pen(0,0.4) ;Line(7,TabPos+Shr(FaktOdstup)+1,FaktSirka,0) Inc(TabPos,FaktOdstup+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 if(LocB2=0) GoTo(PrazdnyDokument); DynStr='DefDynTab(7,166,5,'+Str(LocW3+1)+','+Str(LocB2-1)+',TA_Left,'+DynStr2+')'; StrCom(DynStr) FontWidthScale(0) 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(0) FontWidthScale(SirkaFontuText) SaveTabInfo(3) LocStr:String LocStr2:String LastType:Byte ActualType:Byte LastMJ:String[7] LastType=3 While((OdRadkuPocet0)) begin GetBindRec('Faktura',OdRadkuPocet) if((Faktura.WFlags&$8000=0) and ((TisknoutSN) or (Faktura.RecType<>8))) begin LocStr='' if(Faktura.RecType=0) begin if(Sloupce&$1<>0) 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+StrNative(Faktura.Mnozstvi,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) or (Faktura.RecType=9)) begin ActualType=3 if(Sloupce&$10<>0) LocStr=LocStr+Faktura.Text3+#9 end else if(Faktura.RecType<=5) begin LastMJ=Faktura.MJ; 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 else if(Faktura.RecType=8) begin ActualType=3 LocStr2=Faktura.Text8; LocW3=StrPos(#20,LocStr2); if((LocW3<>0) and (LocW31)) begin LocStr2=LocStr2+' '+StrNative(Faktura.MnozstviSN,3)+' '+LastMJ; end; if(Sloupce&$10<>0) LocStr=LocStr+LocStr2+#9 end if(ActualType<>LastType) begin LoadTabInfo(ActualType,False,True) LastType=ActualType end; ;DynTab(LocStr) Dec(PocetRadku) end Inc(OdRadkuPocet) end VseVytistenoPocet=OdRadkuPocet>=Radky end else begin PrazdnyDokument: VseVytistenoPocet=True end; END