; DDT pokladní doklad - paragon ; verze z 26.11.2004 ; Autor: WinDUO Team Name('Paragon přes fiskální modul') Designed('') Author('Winduo Team','EMail: winduo@winduo.cz','http://www.winduo.com','http://www.winduo.cz') Descr('Pokladní doklad - paragon','včetně skladových pohybů.','Pro použití s fiskálním modulem a tiskárnou paragonů','- tiskárnu nutno mít zapnutou a nastavenou)') if(not ExistVariable('Storno')) Storno:Boolean Procedure TiskniSN(PohybCislo:LongInt) if(Program.Strediska) begin LocStr1:String LocStr2:String LocBool:Boolean VetaPSC:LongInt VetaSN:LongInt RozRadku:LongInt KeyPohybSeriovehoCisla3.Length=4 KeyPohybSeriovehoCisla3.CisloPH=SwapL(Pohyb.Cislo) LocBool=FindKey(KeyPohybSeriovehoCisla3,VetaPSC) While((LocBool)and(KeyPohybSeriovehoCisla3.CisloPH=SwapL(Pohyb.Cislo))) begin ReadRec(PohybSeriovehoCisla,VetaPSC) KeySerioveCislo1.Length=4 KeySerioveCislo1.Cislo=SwapL(PohybSeriovehoCisla.CisloSN) if(FindKey(KeySerioveCislo1,VetaSN)) begin ReadRec(SerioveCislo,VetaSN) LocStr1=GetString(7899) LocStr2=Copy(LocStr1,Sklad.Vymezeni+1,1) LocStr1=GetString(7900+Sklad.Vymezeni) if(Priznaky&2<>0) begin if((PohybSeriovehoCisla.Mnozstvi<>1)or(Sklad.Flags2&$02<>0)) begin ObsahRadku='*** '+Sklad.SNDescr+' '+SerioveCislo.Number+' '+StrQuantity(PohybSeriovehoCisla.Mnozstvi)+' '+Sklad.MJ end else begin ObsahRadku='*** '+Sklad.SNDescr+' '+SerioveCislo.Number; end; WriteLn(Tiskarna,TreatString(ObsahRadku,Znaku)) end; if(Priznaky&2<>0) begin if(CompareStr(LocStr2,'O')) ObsahRadku='*** '+LocStr1+' '+Str(SerioveCislo.VymezLimit) else if(CompareStr(LocStr2,'D')) ObsahRadku='*** '+LocStr1+' '+StrDate(SerioveCislo.VymezDate) else if(Length(LocStr1)>0) ObsahRadku='*** '+LocStr1 else ObsahRadku='' if(Length(ObsahRadku)<>0) WriteLn(Tiskarna,TreatString(ObsahRadku,Znaku)) end; Inc(RozRadku); end LocBool=NextKey(KeyPohybSeriovehoCisla3,VetaPSC) end if(Priznaky&6<>0)and(RozRadku<>0) WriteLn(Tiskarna) end end WNSType(-1); DeclareRec('Program') DeclareRec('Pokladna') GetBindRec(Pokladna); ; ******* Deklarace pozdeji použitých proměnných ******* Predikt:String=Year(Pokladna.Datum,4)+Month(Pokladna.Datum,2)+Day(Pokladna.Datum,2); SazbaDPHNizsi:Byte SazbaDPHVyssi:Byte VyssiDPHZaklad:Double NizsiDPHZaklad:Double VyssiDPHDan:Double NizsiDPHDan:Double CastkaSDPH:Double BezDPH:Double Celkem:Double CelkemBezDPH:Double LocL:LongInt SumaNula:Double SumaNizsi:Double SumaVyssi:Double CelkemNezaokr:Double ZaokrRozdil:Double ; ******* Otevření portu tiskárny ******* IniSoubor:String=DataPath+'PARAGON.INI' Znaku:Integer=Val(GetFromIni('PARAM','Chars',IniSoubor)); if(Znaku<=0) begin Message('Nejdříve proveďte nastavení paragonu v hlavním menu / Nastavení / Nastavení paragonu',mb_IconStop); Exit; end; Priznaky:Word=Val(GetFromIni('PARAM','Flags',IniSoubor)); Diakritika:Word=Val(GetFromIni('PARAM','Diakritika',IniSoubor)); LoadTranslateTab(Diakritika); Tiskarna:FiscalModule; SetTranslate(Tiskarna,True); if(Program.RezimDPH<>0) WriteLn(Tiskarna,49,Predikt+TreatString('Daňový doklad č.\t\t'+Pokladna.Doklad,Znaku)) else begin WriteLn(Tiskarna,49,Predikt+TreatString('P A R A G O N č.\t\t'+Pokladna.Doklad,Znaku)) WriteLn(Tiskarna,49,TreatString('\tDoklad od neplátce DPH\t',Znaku)) end; WriteLn(Tiskarna,49,DupChar('-',Znaku)) if(Program.RezimDPH<>0) WriteLn(Tiskarna,49,TreatString('Datum zdanitelného plnění\t\t'+StrDate(Pokladna.Datum_ZP),Znaku)) else WriteLn(Tiskarna,49,TreatString('Datum\t\t'+StrDate(Pokladna.Datum),Znaku)) WriteLn(Tiskarna,49) if(Storno) begin WriteLn(Tiskarna,49,DupChar('*',Znaku)); WriteLn(Tiskarna,49,TreatString('*\t\t*',Znaku)) WriteLn(Tiskarna,49,TreatString('*\tS T O R N O\t*',Znaku)) WriteLn(Tiskarna,49,TreatString('*\t\t*',Znaku)) WriteLn(Tiskarna,49,DupChar('*',Znaku)); WriteLn(Tiskarna,49); end; ; ******* Vytištění hlavičky ******* ObsahRadku:String; RozsireniRadku:String; Radku:Word=Val(GetFromIni('HEADER','Lines',IniSoubor)) Radek:Word=0 While(Radek=Program.HideICOLess) begin WriteLn(Tiskarna,49,DupChar('-',Znaku)) WriteLn(Tiskarna,49,TreatString('Odběratel:',Znaku)) ObsahRadku='IČ: '+Pokladna.ICO if(Length(Pokladna.DIC)<>0) ObsahRadku=ObsahRadku+'\t\tDIČ: '+Pokladna.DIC WriteLn(Tiskarna,49,TreatString(ObsahRadku,Znaku)); if(Length(Pokladna.Firma)<>0) WriteLn(Tiskarna,49,TreatString(Pokladna.Firma,Znaku)); if(Length(Pokladna.Rozsireni)<>0) WriteLn(Tiskarna,49,TreatString(Pokladna.Rozsireni,Znaku)); if(Length(Pokladna.Ulice)<>0) WriteLn(Tiskarna,49,TreatString(Pokladna.Ulice,Znaku)); if(Length(Pokladna.Mesto)<>0) WriteLn(Tiskarna,49,TreatString(Pokladna.Mesto,Znaku)); end; WriteLn(Tiskarna,49,DupChar(#61,Znaku)) ; ******* vytištění položek paragonu ******* WriteLn(Tiskarna,49,TreatString('\t\t'+Program.Mena+' ',Znaku)) DeclareRec('Sklad'); DeclareRec('KeySklad10'); DeclareRec('Pohyb'); if(Program.Strediska) begin DeclareRec('PohybSeriovehoCisla') DeclareRec('KeyPohybSeriovehoCisla3') DeclareRec('SerioveCislo') DeclareRec('KeySerioveCislo1') end Pohybu:Word=GetCountBindRec(Pohyb) Radek=0 While(Radek0) begin CastkaSDPH=RoundFloat(Pohyb.Castka*(1+Pohyb.DPH/100),-2) CelkemNezaokr=CelkemNezaokr+CastkaSDPH if(Pohyb.DPH=0) begin BezDPH=BezDPH+Pohyb.Castka end else if(Pohyb.DPH=SazbaDPHVyssi) begin VyssiDPHZaklad=VyssiDPHZaklad+Pohyb.Castka VyssiDPHDan=VyssiDPHDan+(CastkaSDPH-Pohyb.Castka) end else if(Pohyb.DPH=SazbaDPHNizsi) begin NizsiDPHZaklad=NizsiDPHZaklad+Pohyb.Castka NizsiDPHDan=NizsiDPHDan+(CastkaSDPH-Pohyb.Castka) end else begin if(Pohyb.DPH<15) begin if(SazbaDPHNizsi<>0) begin Chyba: Error('Chyba !!! Více sazeb DPH v jedné daňové kategorii',mb_IconStop) end SazbaDPHNizsi=Pohyb.DPH NizsiDPHZaklad=Pohyb.Castka NizsiDPHDan=CastkaSDPH-Pohyb.Castka end else begin if(SazbaDPHVyssi<>0) begin GoTo(Chyba) end SazbaDPHVyssi=Pohyb.DPH VyssiDPHZaklad=Pohyb.Castka VyssiDPHDan=CastkaSDPH-Pohyb.Castka end end end else begin Celkem=Celkem+Pohyb.Castka CastkaSDPH=Pohyb.Castka end KeySklad10.Length=4 KeySklad10.Cislo=SwapL(Pohyb.CisloMat) if(FindKey(KeySklad10,LocL)) begin ReadRec(Sklad,LocL) end else begin ClearRec(Sklad) end; if(Priznaky&1=0) ObsahRadku=Sklad.Nazev else begin ObsahRadku=Sklad.DisplayText if(Length(ObsahRadku)=0) ObsahRadku=Sklad.Nazev end; RozsireniRadku=''; if(Priznaky&$8<>0) RozsireniRadku=RozsireniRadku+Sklad.Material; if(Priznaky&$10<>0) begin if(Length(RozsireniRadku)<>0) RozsireniRadku=RozsireniRadku+' '; RozsireniRadku=RozsireniRadku+Sklad.Kod; end; if(Priznaky&$20<>0) begin if(Length(RozsireniRadku)<>0) RozsireniRadku=RozsireniRadku+' '; RozsireniRadku=RozsireniRadku+Str(Sklad.Sklad); end; if(Priznaky&$40<>0) begin if(Length(RozsireniRadku)<>0) RozsireniRadku=RozsireniRadku+' '; RozsireniRadku=RozsireniRadku+Str(Sklad.Druh); end; if(Pohyb.Mnozstvi<>1) begin if(Length(RozsireniRadku)<>0) then begin if(Length(RozsireniRadku)+Length(ObsahRadku)0) begin ;ObsahRadku=' '+StrNative(Pohyb.Mnozstvi,3)+' x '+Str(RoundFloat(Pohyb.JednCena*(1+Pohyb.DPH/100),-2),,Program.FCenaDecSize); ObsahRadku=' '+StrNative(Pohyb.Mnozstvi,3)+' x '+StrPrice(Pohyb.JednCena*(1+Pohyb.DPH/100)); end else begin ;ObsahRadku=' '+StrNative(Pohyb.Mnozstvi,3)+' x '+Str(RoundFloat(Pohyb.JednCena,-2),,2); toto tady bylo ObsahRadku=' '+StrNative(Pohyb.Mnozstvi,3)+' x '+StrPrice(RoundFloat(Pohyb.JednCena,-2)); end end ObsahRadku=ObsahRadku+'\t\t'+Str(CastkaSDPH,,2)+' '; if(Pohyb.DPH=0) begin ObsahRadku=ObsahRadku+'C' SumaNula=SumaNula+(Pohyb.Mnozstvi*(RoundFloat(Pohyb.JednCena,-2))) end else if(Pohyb.DPH=SazbaDPHNizsi) begin ObsahRadku=ObsahRadku+'B' SumaNizsi=SumaNizsi+(Pohyb.Mnozstvi*(RoundFloat(Pohyb.JednCena*(1+Pohyb.DPH/100),-2))) end else if(Pohyb.DPH=SazbaDPHVyssi) begin ObsahRadku=ObsahRadku+'A' SumaVyssi=SumaVyssi+(Pohyb.Mnozstvi*(RoundFloat(Pohyb.JednCena*(1+Pohyb.DPH/100),-2))) end else begin if(Program.RezimDPH<>0) ObsahRadku=ObsahRadku+'?' else ObsahRadku=ObsahRadku+' ' end if(Length(RozsireniRadku)<>0) then begin if(Length(RozsireniRadku)+Length(ObsahRadku)0) begin if(Pokladna.ZaokrDPH) begin NizsiDPHDan=RoundFloat(Int((NizsiDPHDan+0.09)*10)/10,-2) VyssiDPHDan=RoundFloat(Int((VyssiDPHDan+0.09)*10)/10,-2) end; CelkemBezDPH=VyssiDPHZaklad+NizsiDPHZaklad+BezDPH Celkem=CelkemBezDPH+VyssiDPHDan+NizsiDPHDan end; WriteLn(Tiskarna,49,TreatString('\t\t'+DupChar(#61,14),Znaku)); if(Storno) begin WriteLn(Tiskarna,49,DupChar('*',Znaku)); WriteLn(Tiskarna,49,TreatString('*\t\t*',Znaku)) WriteLn(Tiskarna,49,TreatString('*\tS T O R N O\t*',Znaku)) WriteLn(Tiskarna,49,TreatString('*\t\t*',Znaku)) WriteLn(Tiskarna,49,DupChar('*',Znaku)); WriteLn(Tiskarna,49); end; if(Program.RezimDPH<>0) begin if(RoundFloat(Pokladna.Castka,-2)<>RoundFloat(Celkem,-2)) begin ZaokrRozdil=(RoundFloat(Pokladna.Castka,-2)-RoundFloat(Celkem,-2)) if((NizsiDPHZaklad<>0)and(VyssiDPHZaklad=0)) begin ; je pouze nizsi sazba DPH NizsiDPHZaklad=NizsiDPHZaklad+((ZaokrRozdil*100)/(100+SazbaDPHNizsi)) NizsiDPHDan=NizsiDPHDan+(ZaokrRozdil-((ZaokrRozdil*100)/(100+SazbaDPHNizsi))) end else begin ; je vyssi i nizsi sazba DPH nebo jen vyssi VyssiDPHZaklad=VyssiDPHZaklad+((ZaokrRozdil*100)/(100+SazbaDPHVyssi)) VyssiDPHDan=VyssiDPHDan+(ZaokrRozdil-((ZaokrRozdil*100)/(100+SazbaDPHVyssi))) end end; CelkemBezDPH=NizsiDPHZaklad+VyssiDPHZaklad+BezDPH Celkem=CelkemBezDPH+NizsiDPHDan+VyssiDPHDan if(RoundFloat(CelkemNezaokr,-2)<>RoundFloat(Celkem,-2)) begin WriteLn(Tiskarna,49,TreatString('Zaokrouhlení\t\t'+Str(Pokladna.Castka-CelkemNezaokr,0,2)+' ',Znaku)) end; end WriteLn(Tiskarna,49,TreatString('C E L K E M\t\t'+Str(Pokladna.Castka,,2)+' ',Znaku)); if(Program.RezimDPH<>0) begin Writeln(Tiskarna,49) Writeln(Tiskarna,49,TreatString('\tRekapitulace DPH',Znaku)) Writeln(Tiskarna,49,TreatString('Sazba DPH\t\tCelkem ',Znaku)) ObsahRadku=' 0%'+FillStrL('',12)+'\t\t'+Str(BezDPH,,2)+' C'; Writeln(Tiskarna,49,TreatString(ObsahRadku,Znaku)) ObsahRadku=FillStrL(Str(SazbaDPH(False,Pokladna.Datum_ZP))+'%',3)+FillStrL(Str(NizsiDPHDan,,2),12)+'\t\t'+Str(NizsiDPHZaklad+NizsiDPHDan,,2)+' B'; Writeln(Tiskarna,49,TreatString(ObsahRadku,Znaku)) ObsahRadku=FillStrL(Str(SazbaDPH(True,Pokladna.Datum_ZP))+'%',3)+FillStrL(Str(VyssiDPHDan,,2),12)+'\t\t'+Str(VyssiDPHZaklad+VyssiDPHDan,,2)+' A'; Writeln(Tiskarna,49,TreatString(ObsahRadku,Znaku)) end; if(Pokladna.Sleva<>0) begin Writeln(Tiskarna,49) Writeln(Tiskarna,49,TreatString('Na dokladu byla uplatněna sleva\t\t'+StrNative(Pokladna.Sleva,2)+'%',Znaku)) Writeln(Tiskarna,49) end; ; ******* Vytištění patičky ******* WriteLn(Tiskarna,49) Radku=Val(GetFromIni('FOOTER','Lines',IniSoubor)) Radek=0 While(Radek0) WriteLn(Tiskarna,62,Char(Radku)); END