; Popis formuláře 'Kontrolní hlášení k DPH od roku 2016' ; verze: z 31.10.2016 ; Autor: Milan Slíva Name('Kontrolní hlášení k DPH') Designed('') Author('Milan Slíva','eMail: sliva@fi.cz') Descr('Kontrolní hlášení k DPH platné od 1.1.2016') WNSType(1) Staty:Array[1..28] of String[2]='AT','BE','BG','CY','CZ','DE','DK','EE','EL','ES','FI','FR','GB','HR','HU','IE','IT','LT','LU','LV','MT','NL','PL','PT','RO','SE','SI','SK' StateID:String[2]='CZ' SekceStr:Array[1..8] of String[8]='A.1','A.2','A.3','A.4','A.5','B.1','B.2','B.3' CastkaLimit:Real=10000 AlfaNum:String='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' PlneniDruhyA:Array[1..16] of Byte=69,91,92,93,94,95,96,97,98,99,100,113,116,119,122,141 PlneniKodyA:Array[1..16] of Byte= 0, 1,11, 3, 4, 5,12,13,14,15, 16, 17, 18, 19, 20, 21 PlneniDruhyB:Array[1..38] of Byte=62,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,101,102,103,104,105,106,107,108,109,110,111,112,115,117,118,120,121,123,140,142 PlneniKodyB:Array[1..38] of Byte= 0, 4, 5,12,13,14,15,16, 1,11, 3, 4, 5,12,13,14,15,16, 1, 11, 3, 4, 5, 12, 13, 14, 15, 16, 0, 17, 18, 18, 19, 19, 20, 20, 21, 21 BKraceny:Array[1..2] of Byte=1,66 BPomerem:Array[1..1] of Byte=21 Record DataRec Sekce :Byte Kod :Byte DIC :String[14] Doklad :String[10] Cislo :String[60] Datum :Word ZakladBez:Double ZakladV :Double DanV :Double ZakladN :Double DanN :Double ZakladS :Double DanS :Double DatumNDen:Byte DatumNMes:Byte DatumNRok:Word Nazev :String[57] Sidlo :String[100] Kraceni :Boolean Pomer :Boolean end Record DataKey Length :Byte Sekce :Byte Kod :Byte DIC :Array[1..14] of Char; DatumNRok:Word DatumNMes:Byte DatumNDen:Byte Cislo :Array[1..60] of Char; Doklad :Array[1..10] of Char; Datum :Word end Record DataKey2 Length :Byte; Sekce :Byte; Doklad :Array[1..10] of Char; end DeclareRec('Program') DeclareRec('Denik') DeclareRec('KeyDenik7') DeclareRec('Adresar') DeclareRec('KeyAdresar1') DeclareRec('UcetniUdalost') DeclareRec('KeyUcetniUdalost4') DeclareRec('Pohledavka') DeclareRec('KeyPohledavka8') DeclareRec('Zavazek') DeclareRec('KeyZavazek8') DeclareRec('Pokladna') DeclareRec('KeyPokladna7') DeclareRec('Banka') DeclareRec('KeyBanka7') DeclareRec('OstatniUhrady') DeclareRec('KeyOstatniUhrady7') LocW:Word LocW2:Word LocB:Byte LocI:Integer LocStr:String IsOK:Boolean SekceID:String[32] KeyID:String[32] MesicKV:String[16]=GetDataINI('INFO','LastMesicKV') KvartalKV:String[16]=GetDataINI('INFO','LastKvartalKV') Mesice:Array[1..1] of String[16]; LocW=Program.FiscalOffset LocW2=Val(Rok(4)); LocB=0 IsOK=False While(LocB12) begin LocW=1 Inc(LocW2) end; LocStr=NuLL(Str(LocW),2)+'/'+Str(LocW2) Push(Mesice,LocStr) if(CompareStr(LocStr,MesicKV)) IsOK=true; end; if(not IsOK) MesicKV='' Kvartaly:Array[1..1] of String[16]; LocW=Program.FiscalOffset/3 LocW2=Val(Rok(4)) LocI=Program.FiscalLength IsOK=False While(LocI>0) begin Dec(LocI,3); Inc(LocW); if(LocW>4) begin LocW=1 Inc(LocW2) end; LocStr=Str(LocW)+'/'+Str(LocW2) Push(Kvartaly,LocStr) if(CompareStr(LocStr,KvartalKV)) IsOK=true; end; if(not IsOK) KvartalKV='' Veta:LongInt VetaA:LongInt VetaH:LongInt VetaT:LongInt Zprava:String DICO:String InAt:LongInt Doklad:String[10] Cislo:String[60] Castka:Real DanT:Byte DatumN_Den:Byte DatumN_Mesic:Byte DatumN_Rok:Word Nazev:String[57] Sidlo:String[100] Oddil:Byte Procedure GetAdresar(MayBeBorn:Boolean,IgnoreZjed:Boolean,IsA45:Boolean) if((IgnoreZjed)and(not(IsA45))) begin if(Abs(Castka)>CastkaLimit) IgnoreZjed=False end if(Oddil=2) begin IgnoreZjed=true end if(Denik.ICO=0) begin if(not IgnoreZjed) begin Zprava='Není vyplněno IČ u\rdokladu '+Denik.Doklad+' z data '+StrDate(Denik.Datum)+'\rv agendě\r'+GetAgendaName(Denik.Agenda); if(not Question(Zprava+'\r\rMám pokračovat?')) Halt() end; DICO='' ClearRec(Adresar) Exit end if(Denik.ICO=Adresar.ICO) Exit ClearRec(Adresar) DICO='' DatumN_Den=0 DatumN_Mesic=0 DatumN_Rok=0 Nazev='' Sidlo='' KeyAdresar1.Length=4 KeyAdresar1.ICO=SwapL(Denik.ICO) if(FindKey(KeyAdresar1,VetaA)) begin ReadRec(Adresar,VetaA) DICO=NTrim(Adresar.DIC) if((Length(DICO)<=2)or(not InArray(Staty,UpCase(Copy(DICO,1,2))))) begin if(not IgnoreZjed) begin if((Length(DICO)=0)and(MayBeBorn)) begin DatumN_Den=Adresar.DatumN_Den DatumN_Mesic=Adresar.DatumN_Mesic DatumN_Rok=Adresar.DatumN_Rok Nazev=XTrim(Adresar.Nazev+' '+Adresar.Rozsireni) Sidlo=XTrim(Adresar.Ulice+' '+Adresar.Mesto+' '+Adresar.Stat) if((DatumN_Rok=0)or(DatumN_Mesic=0)or(DatumN_Den=0)) begin Zprava='Není vyplněno DIČ ani datum narození pro IČ '+Str(Adresar.ICO)+'u\rdokladu '+Denik.Doklad+' z data '+StrDate(Denik.Datum)+'\rv agendě\r'+GetAgendaName(Denik.Agenda); if(not Question(Zprava+'\r\rMám pokračovat?')) Halt() end; end else begin Zprava='Chybné DIČ\r'+Adresar.DIC+'\ru IČ '+Str(Adresar.ICO); if(not Question(Zprava+'\r\rMám pokračovat?')) Halt() end end else begin DICO='' end; end; end else begin if(not IgnoreZjed) begin Zprava='V adresáři nebylo nalezeno IČ '+Str(Denik.ICO)+'\rz dokladu '+Denik.Doklad+'\rz data '+StrDate(Denik.Datum)+'\rv agendě\r'+GetAgendaName(Denik.Agenda); if(not Question(Zprava+'\r\rMám pokračovat?')) Halt() end end end; Procedure GetDoklad() if(Denik.Agenda=agd_Udalosti) begin if(UcetniUdalost.Cislo<>Denik.Cislo) begin KeyUcetniUdalost4.Length=4 KeyUcetniUdalost4.Cislo=SwapL(Denik.Cislo) if(FindKey(KeyUcetniUdalost4,VetaH)) begin ReadRec(UcetniUdalost,VetaH) end else begin Zprava='Nebyla nalezena nadřazená učetní událost\rpro doklad číslo '+Denik.Doklad+'\rz data '+StrDate(Denik.Datum); if(not Question(Zprava+'\r\rMám pokračovat?')) Halt() ClearRec(UcetniUdalost) UcetniUdalost.Cislo=Denik.Cislo end; end; Doklad=UcetniUdalost.Doklad Cislo=UcetniUdalost.Doklad_Ev Castka=UcetniUdalost.Castka Oddil=UcetniUdalost.DFlags&3 end else if(Denik.Agenda=agd_Pohledavky) begin if(Pohledavka.Cislo<>Denik.Cislo) begin KeyPohledavka8.Length=4 KeyPohledavka8.Cislo=SwapL(Denik.Cislo) if(FindKey(KeyPohledavka8,VetaH)) begin ReadRec(Pohledavka,VetaH) end else begin Zprava='Nebyla nalezena nadřazená pohledávka\rpro doklad číslo '+Denik.Doklad+'\rz data '+StrDate(Denik.Datum); if(not Question(Zprava+'\r\rMám pokračovat?')) Halt() ClearRec(Pohledavka) Pohledavka.Cislo=Denik.Cislo Pohledavka.Doklad=Denik.Doklad end; end; Doklad=Pohledavka.Doklad Cislo=Pohledavka.Doklad_Ev if(Length(Cislo)=0) begin Cislo=Doklad end; Castka=Pohledavka.Castka Oddil=Pohledavka.DFlags&3 end else if(Denik.Agenda=agd_Zavazky) begin if(Zavazek.Cislo<>Denik.Cislo) begin KeyZavazek8.Length=4 KeyZavazek8.Cislo=SwapL(Denik.Cislo) if(FindKey(KeyZavazek8,VetaH)) begin ReadRec(Zavazek,VetaH) end else begin Zprava='Nebyl nalezen nadřazený závazek\rpro doklad číslo '+Denik.Doklad+'\rz data '+StrDate(Denik.Datum); if(not Question(Zprava+'\r\rMám pokračovat?')) Halt() ClearRec(Zavazek) Zavazek.Cislo=Denik.Cislo end; end; Doklad=Zavazek.Doklad Cislo=Zavazek.Doklad_Ev Castka=Zavazek.Castka Oddil=Zavazek.DFlags&3 end else if(Denik.Agenda=agd_Pokladna) begin if(Pokladna.Cislo<>Denik.Cislo) begin KeyPokladna7.Length=4 KeyPokladna7.Cislo=SwapL(Denik.Cislo) if(FindKey(KeyPokladna7,VetaH)) begin ReadRec(Pokladna,VetaH) end else begin Zprava='Nebyl nalezen nadřazený pokladní doklad\rpro doklad číslo '+Denik.Doklad+'\rz data '+StrDate(Denik.Datum); if(not Question(Zprava+'\r\rMám pokračovat?')) Halt() ClearRec(Pokladna) Pokladna.Cislo=Denik.Cislo end; end; Doklad=Pokladna.Doklad Cislo=Pokladna.Doklad_Ev Castka=Pokladna.Castka Oddil=Pokladna.DFlags&3 end else if(Denik.Agenda=agd_Banka) begin if(Banka.Cislo<>Denik.Cislo) begin KeyBanka7.Length=4 KeyBanka7.Cislo=SwapL(Denik.Cislo) if(FindKey(KeyBanka7,VetaH)) begin ReadRec(Banka,VetaH) end else begin Zprava='Nebyl nalezen nadřazený pokladní doklad\rpro doklad číslo '+Denik.Doklad+'\rz data '+StrDate(Denik.Datum); if(not Question(Zprava+'\r\rMám pokračovat?')) Halt() ClearRec(Banka) Banka.Cislo=Denik.Cislo end; end; Doklad=Banka.Doklad if(Banka.Vydaj) Cislo=Banka.Doklad_Ev else Cislo=Banka.Doklad Castka=Banka.Castka Oddil=Banka.DFlags&3 end else if(Denik.Agenda=agd_OstatniUhrady) begin if(OstatniUhrady.Cislo<>Denik.Cislo) begin KeyOstatniUhrady7.Length=4 KeyOstatniUhrady7.Cislo=SwapL(Denik.Cislo) if(FindKey(KeyOstatniUhrady7,VetaH)) begin ReadRec(OstatniUhrady,VetaH) end else begin Zprava='Nebyl nalezen nadřazený doklad ostatních úhrad\rpro doklad číslo '+Denik.Doklad+'\rz data '+StrDate(Denik.Datum); if(not Question(Zprava+'\r\rMám pokračovat?')) Halt() ClearRec(OstatniUhrady) OstatniUhrady.Cislo=Denik.Cislo end; end; Doklad=OstatniUhrady.Doklad if(OstatniUhrady.Vydaj) Cislo=OstatniUhrady.Doklad_Ev else Cislo=OstatniUhrady.Doklad Castka=OstatniUhrady.Castka Oddil=OstatniUhrady.DFlags&3 end else begin Zprava='Rozkont odkazuje na neočekávanou agendu\r'+GetAgenda+'pro doklad číslo '+Denik.Doklad+'\rz data '+StrDate(Denik.Datum); if(not Question(Zprava+'\r\rMám pokračovat?')) Halt() Doklad=Denik.Doklad Cislo=Denik.Doklad Castka=Denik.Doklad Oddil=0 end; if(Length(Cislo)=0) begin Cislo=Doklad end end; Procedure DodejCastku() if(Denik.DanT&$C0=$80) begin if(Denik.DanT&$30=$00) DataRec.ZakladBez=DataRec.ZakladBez+Denik.Castka else if(Denik.DanT&$30=$10) DataRec.ZakladN=DataRec.ZakladN+Denik.Castka else if(Denik.DanT&$30=$20) DataRec.ZakladV=DataRec.ZakladV+Denik.Castka else if(Denik.DanT&$30=$30) DataRec.ZakladS=DataRec.ZakladS+Denik.Castka end else if(Denik.DanT&$C0=$C0) begin if(Denik.DanT&$30=$10) DataRec.DanN=DataRec.DanN+Denik.Castka else if(Denik.DanT&$30=$20) DataRec.DanV=DataRec.DanV+Denik.Castka else if(Denik.DanT&$30=$30) DataRec.DanS=DataRec.DanS+Denik.Castka end; end Procedure Uloz() ClearRec(DataKey); DataKey.Length=SizeOf(DataKey)-1 DataKey2.Length=SizeOf(DataKey2)-1 DataKey.Sekce=DataRec.Sekce DataKey2.Sekce=DataRec.Sekce DataKey.Kod=DataRec.Kod DataKey.Datum=Swap(DataRec.Datum) StrToChars(DataKey.DIC,DataRec.DIC) StrToChars(DataKey.Cislo,DataRec.Cislo) StrToChars(DataKey.Doklad,DataRec.Doklad) StrToChars(DataKey2.Doklad,DataRec.Doklad) DataKey.DatumNDen=DataRec.DatumNDen DataKey.DatumNMes=DataRec.DatumNMes DataKey.DatumNRok=Swap(DataRec.DatumNRok) StrToChars(DataKey.Cislo,DataRec.Cislo) if(FindKey(DataKey,VetaT)) begin ReadRec(DataRec2,VetaT) DataRec2.ZakladBez=DataRec2.ZakladBez+DataRec.ZakladBez DataRec2.ZakladV=DataRec2.ZakladV+DataRec.ZakladV DataRec2.DanV=DataRec2.DanV+DataRec.DanV DataRec2.ZakladN=DataRec2.ZakladN+DataRec.ZakladN DataRec2.DanN=DataRec2.DanN+DataRec.DanN DataRec2.ZakladS=DataRec2.ZakladS+DataRec.ZakladS DataRec2.DanS=DataRec2.DanS+DataRec.DanS ModifyRec(DataRec2,VetaT) end else begin VetaT=AddRec(DataRec) AddKey(DataKey,VetaT) AddKey(DataKey2,VetaT) end end ;{******* Dialog *******} Znova: INIzDPPO:String=DataPath+'DPPO.INI' if(not CompareStr(UpCase(Copy(Program.DIC,1,2)),'CZ')) begin Halt('DIČ musí začínat znaky CZ !!!'); end; ObdMode:Byte ;DlgFollowMouse(True) ValidDIC:String='0123456789CZcz' ValidCisla:String='0123456789' ViesPath:String=GetFromIni('PATHS','Vies',INIzDPPO); if(Length(ViesPath)=0) ViesPath=GetIni('PATHS','Vies'); Nace:String[6]=GetFromINI('INFO','NACE',INIzDPPO) if(Length(Nace)=0) Nace=GetDataINI('INFO','NACE') if((Val(Nace)<1000) or (Val(Nace)>99999)) Nace='' else Nace=NulL(Nace,5) ;definice dialogu AktualCover:Integer=0 FinancniUradNum:Word=Val(GetFromINI('INFO','FinancniUradCislo',INIzDPPO)) if(FinancniUradNum=0) FinancniUradNum=Val(GetDataINI('INFO','FinancniUradCislo')) FinancniUrad:String[32]=GetFromINI('INFO','FinancniUrad',INIzDPPO) if(Length(FinancniUrad)=0) FinancniUrad=GetDataINI('INFO','FinancniUrad') PracovisteFUNum:Word=Val(GetFromINI('INFO','PracovisteFUCislo',INIzDPPO)) if(PracovisteFUNum=0) PracovisteFUNum=Val(GetDataINI('INFO','PracovisteFUCislo')) PracovisteFU:String[32]=GetFromINI('INFO','PracovisteFU',INIzDPPO) if(Length(PracovisteFU)=0) PracovisteFU=GetDataINI('INFO','PracovisteFU') LocStr=GetFromINI('INFO','TypSubjektu',INIzDPPO) if(Length(LocStr)=0) LocStr=GetDataINI('INFO','TypSubjektu') TypSubjektu:Byte=Val(LocStr) DatumPriznani:Word=ValDate(GetFromINI('DPH','DatumPriznani',INIzDPPO)) if(DatumPriznani=0) DatumPriznani=ValDate(GetDataINI('DPH','DatumPriznani')) Prijmeni:String[25]=GetFromINI('INFO','PrijmeniZastupce',INIzDPPO) if(Length(Prijmeni)=0) Prijmeni=GetDataINI('INFO','PrijmeniZastupce') Jmeno:String[11]=GetFromINI('INFO','JmenoZastupce',INIzDPPO) if(Length(Jmeno)=0) Jmeno=GetDataINI('INFO','JmenoZastupce') ObchodniJmeno:String[37]=GetFromINI('INFO','ObchodniJmeno',INIzDPPO) if(Length(ObchodniJmeno)=0) ObchodniJmeno=GetDataINI('INFO','ObchodniJmeno') ObchodniJmeno2:String[25]=GetFromINI('INFO','ObchodniJmeno2',INIzDPPO) if(Length(ObchodniJmeno2)=0) ObchodniJmeno2=GetDataINI('INFO','ObchodniJmeno2') DodatekJmena:String[11]=GetFromINI('INFO','DodatekJmena',INIzDPPO) if(Length(DodatekJmena)=0) DodatekJmena=GetDataINI('INFO','DodatekJmena') IDDatSch:String[7]=GetFromINI('TITULNI','DatovaSchranka',INIzDPPO) Postaveni:String[37]=GetFromINI('INFO','PostaveniZastupce',INIzDPPO) if(Length(Postaveni)=0) Postaveni=GetDataINI('INFO','PostaveniZastupce') FOPrijmeni:String[21]=GetFromINI('INFO','FOPrijmeni',INIzDPPO) if(Length(FOPrijmeni)=0) FOPrijmeni=GetDataINI('INFO','FOPrijmeni') FOJmeno:String[11]=GetFromINI('INFO','FOJmeno',INIzDPPO) if(Length(FOJmeno)=0) FOJmeno=GetDataINI('INFO','FOJmeno') FOTitul:String[4]=GetFromINI('INFO','FOTitul',INIzDPPO) if(Length(FOTitul)=0) FOTitul=GetDataINI('INFO','FOTitul') HlCinnost1:String[37]=GetFromINI('INFO','HlCinnost1',INIzDPPO) if(Length(HlCinnost1)=0) HlCinnost1=GetDataINI('INFO','HlCinnost1') LocStr=GetFromINI('DPH','TypPriz',INIzDPPO) if(Length(LocStr)=0) LocStr=GetDataIni('DPH','TypPriz') TypPriz:Byte=Val(LocStr) LocStr=GetFromINI('DPH','TypPlatce',INIzDPPO) if(Length(LocStr)=0) LocStr=GetDataIni('DPH','TypPlatce') TypPlatce:Byte=Val(LocStr) SestavilJmeno:String[20]=GetFromINI('INFO','SestavilJmeno',INIzDPPO) if(Length(SestavilJmeno)=0) SestavilJmeno=GetDataINI('INFO','SestavilJmeno') SestavilPrijmeni:String[36]=GetFromINI('INFO','SestavilPrijmeni',INIzDPPO) if(Length(SestavilPrijmeni)=0) SestavilPrijmeni=GetDataINI('INFO','SestavilPrijmeni') Sestavil:String[25] TelefonDPH:String[20]=GetFromINI('INFO','TelefonDPH',INIzDPPO) if(Length(TelefonDPH)=0) TelefonDPH=GetDataINI('INFO','TelefonDPH') ZastupceDPHKod:String[2]=GetFromINI('INFO','ZastupceDPHKod',INIzDPPO) ZastupceDPHKod:String[2]=GetDataINI('INFO','ZastupceDPHKod') ZastupceDPHNazev:String[36]=GetFromINI('INFO','ZastupceDPHNazev',INIzDPPO) ZastupceDPHNazev:String[36]=GetDataINI('INFO','ZastupceDPHNazev') ZastupceDPHID:String[36]=GetFromINI('INFO','ZastupceDPHID',INIzDPPO) ZastupceDPHID:String[36]=GetDataINI('INFO','ZastupceDPHID') ZastupceDPHPrijmeni:String[25]=GetFromINI('INFO','ZastupceDPHPrijmeni',INIzDPPO) ZastupceDPHPrijmeni:String[25]=GetDataINI('INFO','ZastupceDPHPrijmeni') ZastupceDPHJmeno:String[11]=GetFromINI('INFO','ZastupceDPHJmeno',INIzDPPO) ZastupceDPHJmeno:String[11]=GetDataINI('INFO','ZastupceDPHJmeno') LocStr=GetFromINI('INFO','ZastupceDPHTyp',INIzDPPO) LocStr=GetDataINI('INFO','ZastupceDPHTyp') ZastupceDPHTyp:Byte=Val(LocStr) if(ZastupceDPHTyp>1) ZastupceDPHTyp=0 LocStr=GetFromINI('INFO','ZastupceDPHIDTyp',INIzDPPO) LocStr=GetDataINI('INFO','ZastupceDPHIDTyp') ZastupceDPHIDTyp:Byte=Val(LocStr) if(ZastupceDPHIDTyp>2) ZastupceDPHIDTyp=0 SortMode:Byte=Val(GetFromIni('INFO','Trideni',INIzDPPO)) Obec:String[48]=GetFromIni('TITULNI','Obec',INIzDPPO) PSCDan:String=GetFromIni('TITULNI','PSC',INIzDPPO) PSCDan=NTrim(PSCDan) UliceBC:String[35]=GetFromIni('TITULNI','Ulice',INIzDPPO) if(Length(UliceBC)=0) begin LocStr=GetFromIni('TITULNI','UliceDan',INIzDPPO) LocB=Length(LocStr) While((LocB>0) and (Asc(Copy(LocStr,LocB,1))<>32)) begin Dec(LocB); end; if(LocB>0) Dec(LocB) UliceBC=Copy(LocStr,1,LocB); end; UliceCP:String[6]=GetFromIni('TITULNI','CisloPopisne',INIzDPPO) UliceCO:String[6]=GetFromIni('TITULNI','CisloOrientacni',INIzDPPO) Stat:String[15]=GetFromIni('TITULNI','Stat',INIzDPPO) Telefon:String[12]=GetFromIni('TITULNI','Telefon',INIzDPPO) Email:String[64]=GetFromIni('TITULNI','Email',INIzDPPO) DICZastupce:String[12]=GetFromIni('TITULNI','DICZastupce',INIzDPPO) Sestavil=XTrim(SestavilPrijmeni+' '+SestavilJmeno); DefDialog('Údaje pro kontrolní hlášení k DPH',492,540) DlgShade(-1,'',4,4,482,466) DlgButton(id_OK,'OK',334,474); DlgOnLineHelp(id_OK,'Pokračuje ve zpracování') DlgButton(id_Cancel,'Zpět',404,474); DlgOnLineHelp(id_Cancel,'Ukončí bez zpracování') DlgCover(1710,4,8,8,474,458,False,AktualCover) ;{####### Cover 1 #######} SetCover(1,'&Společné údaje') DlgStatic(-1,'&Měsíc pro kontrolní hlášení',12,10,340,,,ES_RIGHT) DlgCombo(,MesicKV,360,6,100,256,9,CBS_DropDownList,Mesice) DlgStatic(-1,'nebo &kvartál pro kontrolní hlášení',12,34,340,,,ES_RIGHT) DlgCombo(,KvartalKV,360,30,100,128,9,CBS_DropDownList,Kvartaly) DlgStatic(-1,'třídění položek kontrolního hlášení dle',12,58,340,,,ES_RIGHT) DlgCombo(,SortMode,360,54,100,128,9,CBS_DropDownList,'DIČ','Doklad') DlgStatic(-1,'&Finančnímu úřadu pro',10,84,194) DlgCFU(101,FinancniUradNum,204,80,256,384,FinancniUrad); DlgOnLineHelp(101,'Údaje pro formulář... str. 1') DlgStatic(-1,'Územní &pracoviště v,ve,pro',10,108,194) DlgSubCFU(,PracovisteFUNum,204,104,256,384,PracovisteFU); DlgOnLineHelp(GetLastID(),'Údaje pro formulář... str. 1') DlgStatic(-1,'&Typ přiznání',12,134,90) DlgCombo(103,TypPriz,102,130,100,128,9,CBS_DropDownList,'řádné','opravné') DlgOnLineHelp(103,'Údaje pro formulář... str. 1'+#13+'(dodatečné DP program WinDUO neumí)') DlgStatic(-1,'od',210,134,20) DlgCombo(114,TypPlatce,234,130,226,128,9,CBS_DropDownList,'Plátce daně § 6 až § 6f','Identifikovaná osoba § 6g až § 6l','Skupina § 5a','Neplátce daně § 19 nebo § 108') DlgStatic(-1,'&Typ daňového subjektu',10,160,160) DlgCombo(135,TypSubjektu,170,156,148,260,2,CBS_DropDownList,'Fyzická osoba','Právnická osoba'); DlgStatic(-1,'&Datum',332,160,44,,,ES_LEFT) DlgEditDate(102,DatumPriznani,380,156,80) DlgOnLineHelp(102,'Údaje pro formulář... str. 4') DlgStatic(-1,'&Cesta pro soubory',10,194,120) DlgEdit(134,ViesPath,136,190,262,,255); DlgPathButton(134,398,189); DlgStatic(-1,'&Sídlo (právnické osoby) / adresa místa pobytu fyzické osoby podle § 13 odst. 1 daňového řádu',10,226,400) DlgStatic(-1,'&Obec:',10,252,47) DlgEdit(105,Obec,58,248,182,,48) DlgOnLineHelp(105,'Údaje pro formulář... str. 1') DlgStatic(-1,'Psč:',243,252,28) DlgEdit(106,PSCDan,273,248,50,,5,,ValidCisla) DlgOnLineHelp(106,'Údaje pro formulář... str. 1') DlgStatic(-1,'Tlf:',326,252,21) DlgEdit(107,Telefon,348,248,114,,12) DlgOnLineHelp(107,'Údaje pro formulář... str. 1') DlgStatic(-1,'&Ulice:',10,280,47) DlgEdit(108,UliceBC,58,276,182,,27) DlgOnLineHelp(108,'Údaje pro formulář... str. 1') DlgStatic(-1,'Čís.pop:',243,280,56) DlgEdit(109,UliceCP,300,276,48,,6) DlgOnLineHelp(109,'Údaje pro formulář... str. 1') DlgStatic(-1,'Čís.or.:',358,280,46) DlgEdit(709,UliceCO,414,276,48,,6) DlgOnLineHelp(149,'Údaje pro formulář... str. 1') DlgStatic(-1,'&email:',10,308,47) DlgEdit(110,Email,58,304,217,,64) DlgOnLineHelp(110,'Údaje pro formulář... str. 1') DlgStatic(-1,'&Stát:',280,308,29) DlgEdit(111,Stat,313,304,149,,16) DlgOnLineHelp(111,'Údaje pro formulář... str. 1') DlgStatic(-1,'&Identifikace datové schránky',10,342,348,,,ES_RIGHT) DlgEdit(,IDDatSch,366,338,96,,7,ES_LEFT,AlfaNum) DlgOnLineHelp(GetLastID(),'Údaje pro formulář... str. 1') DlgStatic(-1,'Hlavní ekonomická činnost (CZ &NACE)',10,366,190) DlgNACE(NACE,10,384,450,384,HlCinnost1); DlgDivider(6,184,458); DlgDivider(6,218,458); DlgDivider(6,332,458); ;{####### Cover 2 #######} SetCover(2,'&Právnická osoba') DlgStatic(-1,'&Obchodní jméno',12,14,110) DlgEdit(201,ObchodniJmeno,120,10,338,,37) DlgOnLineHelp(201,'Údaje pro formulář... str. 1') DlgEdit(202,ObchodniJmeno2,12,38,240,,25) DlgOnLineHelp(202,'Údaje pro formulář... str. 1') ;DlgStatic(-1,'&Dodatek obchodního jména',12,70,184) DlgEdit(203,DodatekJmena,265,38,193,,11) DlgOnLineHelp(203,'Údaje pro formulář... str. 1') DlgStatic(-1,'Postavení osoby opravněné k podpisu za daňový subjekt',12,114,440) DlgEdit(204,Postaveni,12,136,446,,37) DlgOnLineHelp(204,'Údaje pro formulář... str. 4') DlgDivider(10,100,450); ;{####### Cover 3 #######} SetCover(3,'&Fyzická osoba') DlgStatic(-1,'&Příjmení',12,14,64) DlgEdit(301,FOPrijmeni,80,10,258,,21) DlgOnLineHelp(301,'Údaje pro formulář... str. 1') DlgStatic(-1,'&Jméno',12,42,64) DlgEdit(302,FOJmeno,80,38,258,,11) DlgOnLineHelp(302,'Údaje pro formulář... str. 1') DlgStatic(-1,'&Titul',12,70,64) DlgEdit(303,FOTitul,80,66,80,,4) DlgOnLineHelp(303,'Údaje pro formulář... str. 1') ;{####### Cover 4 #######} SetCover(4,'&Ostatní spol.') DlgShade(-1,'Osoba oprávněná k podpisu za daňový subjekt',4,2,464,54,,es_Center) DlgStatic(-1,'&Příjmení',12,30,60) DlgEdit(401,Prijmeni,78,26,178,,23) DlgOnLineHelp(401,'Údaje pro formulář... str. 4') DlgStatic(-1,'&Jméno',266,30,46) DlgEdit(402,Jmeno,322,26,138,,11) DlgOnLineHelp(402,'Údaje pro formulář... str. 4') DlgShade(-1,'Sestavil',4,62,464,76,,es_Center) DlgStatic(-1,'Pří&jmení',12,88,60) DlgEdit(405,SestavilPrijmeni,78,84,178,,23) DlgOnLineHelp(405,'Údaje pro formulář... str. 4') DlgStatic(-1,'Jmé&no',266,88,46) DlgEdit(406,SestavilJmeno,322,84,138,,11) DlgOnLineHelp(406,'Údaje pro formulář... str. 4') DlgStatic(-1,'&Telefon',266,112,53) DlgEdit(404,TelefonDPH,322,108,138,,20) DlgOnLineHelp(404,'Telefon - údaje pro formulář... str. 4') DlgShade(-1,'Údaje o podepisující osobě',4,144,464,158) DlgStatic(-1,'Kód osoby',12,174,96) DlgCombo(450,ZastupceDPHKod,116,170,48,256,2,CBS_DropDownList,'','1','2','3','4a','4b','4c') DlgStatic(-1,'&Typ zástupce',166,174,140,,,TA_Right) DlgCombo(455,ZastupceDPHTyp,312,170,148,260,2,CBS_DropDownList,'Fyzická osoba','Právnická osoba'); DlgStatic(-1,'Název právnické osoby',12,202,448) DlgEdit(451,ZastupceDPHNazev,12,220,448,,36) DlgStatic(-1,'&Příjmení',12,248,60) DlgEdit(453,ZastupceDPHPrijmeni,78,244,178,,23) DlgStatic(-1,'&Jméno',266,248,46) DlgEdit(454,ZastupceDPHJmeno,322,244,138,,11) DlgCombo(456,ZastupceDPHIDTyp,12,268,160,128,32,CBS_DropDownList,'Datum narození','Evidenční číslo','IČ právnické osoby') DlgEdit(452,ZastupceDPHID,172,268,288,,36) Result:Integer=DlgExecute() if(Result<>id_OK) Halt SetToIni('INFO','FinancniUrad',FinancniUrad,INIzDPPO) SetToIni('INFO','FinancniUradCislo',Str(FinancniUradNum),INIzDPPO) SetToIni('INFO','PracovisteFU',PracovisteFU,INIzDPPO) SetToIni('INFO','PracovisteFUCislo',Str(PracovisteFUNum),INIzDPPO) SetToIni('INFO','TypSubjektu',Str(TypSubjektu),INIzDPPO) SetToIni('DPH','DatumPriznani',StrDate(DatumPriznani),INIzDPPO) SetToIni('INFO','PrijmeniZastupce',Prijmeni,INIzDPPO) SetToIni('INFO','JmenoZastupce',Jmeno,INIzDPPO) SetToIni('INFO','ObchodniJmeno',ObchodniJmeno,INIzDPPO) SetToIni('INFO','ObchodniJmeno2',ObchodniJmeno2,INIzDPPO) SetToIni('INFO','DodatekJmena',DodatekJmena,INIzDPPO) SetToIni('INFO','PostaveniZastupce',Postaveni,INIzDPPO) SetToIni('INFO','FOPrijmeni',FOPrijmeni,INIzDPPO) SetToIni('INFO','FOJmeno',FOJmeno,INIzDPPO) SetToIni('INFO','FOTitul',FOTitul,INIzDPPO) SetToIni('INFO','HlCinnost1',HlCinnost1,INIzDPPO) SetToIni('INFO','SestavilJmeno',SestavilJmeno,INIzDPPO) SetToIni('INFO','SestavilPrijmeni',SestavilPrijmeni,INIzDPPO) SetToIni('INFO','TelefonDPH',TelefonDPH,INIzDPPO) SetToIni('INFO','ZastupceDPHKod',ZastupceDPHKod,INIzDPPO) SetToIni('INFO','ZastupceDPHNazev',ZastupceDPHNazev,INIzDPPO) SetToIni('INFO','ZastupceDPHID',ZastupceDPHID,INIzDPPO) SetToIni('INFO','ZastupceDPHPrijmeni',ZastupceDPHPrijmeni,INIzDPPO) SetToIni('INFO','ZastupceDPHJmeno',ZastupceDPHJmeno,INIzDPPO) SetToIni('INFO','ZastupceDPHTyp',Str(ZastupceDPHTyp),INIzDPPO) SetToIni('INFO','ZastupceDPHIDTyp',Str(ZastupceDPHIDTyp),INIzDPPO) SetToIni('INFO','LastMesicKV',MesicKV,INIzDPPO) SetToIni('INFO','LastKvartalKV',KvartalKV,INIzDPPO) SetToIni('INFO','Trideni',Str(SortMode),INIzDPPO) SetToIni('TITULNI','Obec',Obec,INIzDPPO) SetToIni('TITULNI','PSC',PSCDan,INIzDPPO) SetToIni('TITULNI','Ulice',UliceBC,INIzDPPO) SetToIni('TITULNI','CisloPopisne',UliceCP,INIzDPPO) SetToIni('TITULNI','CisloOrientacni',UliceCO,INIzDPPO) SetToIni('TITULNI','Stat',Stat,INIzDPPO) SetToIni('TITULNI','Telefon',telefon,INIzDPPO) SetToIni('TITULNI','Email',email,INIzDPPO) SetToIni('TITULNI','DICZastupce',DICZastupce,INIzDPPO) SetToIni('TITULNI','DatovaSchranka',IDDatSch,INIzDPPO) SetToIni('DPH','TypPriz',TypPriz,INIzDPPO) SetToIni('DPH','TypPlatce',TypPlatce,INIzDPPO) SetToIni('PATHS','VIES',TransToEsc(ViesPath),INIzDPPO); SetToIni('INFO','NACE',Nace,INIzDPPO) ;{*******} MakeTempFile(DataRec,DataKey,false,false) MakeTempFile(,DataKey2,true,true) DataRec2:DataRec KVMesic:Byte KVRok:Word KVRozsah:Byte KVMesicDo:Byte KVRokDo:Word DatumOd:Word DatumDo:Word Pozice:LongInt if(Length(MesicKV)<>0) begin KVMesic=Val(ToChar('/',MesicKV)) KVRok=Val(FromChar('/',MesicKV)) KVRozsah=1 end else if(Length(KvartalKV)<>0) begin KVMesic=(Val(ToChar('/',KvartalKV))-1)*3+1 KVRok=Val(FromChar('/',KvartalKV)) KVRozsah=3 end else begin Message('Musíte zvolit měsíc nebo kvartál pro výpočet kontrolního hlášení',mb_IconStop) GoTo(Znova) end; InitDPHTab(KVMesic,KVRok,KVRozsah) InitStatus(UsedKeys(KeyDenik7),'Třídím data ...') DatumOd=ValDate('1.'+Str(KVMesic)+'.'+Str(KVRok)); KVRokDo=KVRok KVMesicDo=KVMesic+KVRozsah While(KVMesicDo>12) begin Dec(KVMesicDo,12) Inc(KVRokDo) end; DatumDo=ValDate('1.'+Str(KVMesicDo)+'.'+Str(KVRokDo)) DatumDo=AddDay(DatumDo,-1) SazbaDPHNizsi:String[3]=Str(SazbaDPH(dph_Snizena,DatumOd)) SazbaDPHVyssi:String[3]=Str(SazbaDPH(dph_Zakladni,DatumOd)) SazbaDPHSnizena:String[3]=Str(SazbaDPH(dph_Snizena2,DatumOd)) ClearKey(KeyDenik7); While(NextKey(KeyDenik7,Veta)) begin ReadRec(Denik,Veta); if((Denik.datum_dzp=0)or(Denik.Agenda=agd_Pohledavky)) Denik.datum_dzp=Denik.datum_zp; if((Denik.datum_zp>=DatumOd)and(Denik.datum_zp<=DatumDo)) begin if(GetDPHLines('Lines',MakeWord(Denik.DanT,Denik.DanT2))) begin ClearRec(DataRec); if(InArray(Lines,25)) ; {sekce A.1} begin InAt=Index(PlneniDruhyA,Denik.Dant2) if(InAt>=0) begin GetDoklad() GetAdresar(False,False,False) DataRec.Sekce=1 DataRec.Kod=PlneniKodyA[InAt] DataRec.DIC=DICO DataRec.Doklad=Doklad DataRec.Cislo=Cislo DataRec.Datum=Denik.Datum_Dzp DodejCastku() Uloz() end; end; if((InArray(Lines,3))or(InArray(Lines,4))or(InArray(Lines,9))or(InArray(Lines,5))or(InArray(Lines,6))or(InArray(Lines,12))or(InArray(Lines,13))) ; {sekce A.2} begin GetDoklad() GetAdresar(False,False,False) DataRec.Sekce=2 DataRec.DIC=DICO DataRec.Doklad=Doklad DataRec.Cislo=Cislo DataRec.Datum=Denik.Datum_Dzp DodejCastku() Uloz() end if(InArray(Lines,26)) ; {sekce A.3} begin if(Denik.DanT2=150) begin GetDoklad() GetAdresar(True,False,False) DataRec.Sekce=3 DataRec.DIC=DICO if(Length(DICO)=0) begin DataRec.DatumNDen=DatumN_Den DataRec.DatumNMes=DatumN_Mesic DataRec.DatumNRok=DatumN_Rok DataRec.Nazev=Nazev DataRec.Sidlo=Sidlo end; DataRec.Doklad=Doklad DataRec.Cislo=Cislo DataRec.Datum=Denik.Datum_Dzp DodejCastku() Uloz() end; end; if((InArray(Lines,1))or(InArray(Lines,2))) ; {sekce A.4 a sekce A.5} begin GetDoklad() GetAdresar(True,True,True) if(Oddil=1) DataRec.Sekce=4 else if(Oddil=2) DataRec.Sekce=5 else if((Abs(Castka)>CastkaLimit)and(Length(DICO)>0)and(CompareStr(UpCase(Copy(DICO,1,2)),StateID))) DataRec.Sekce=4 else DataRec.Sekce=5 DataRec.DIC=DICO DataRec.Doklad=Doklad DataRec.Cislo=Cislo DataRec.Datum=Denik.Datum_Dzp DodejCastku() Uloz() end; if((InArray(Lines,10))or(InArray(Lines,11))) ; {sekce B.1} begin InAt=Index(PlneniDruhyB,Denik.Dant2) if(InAt>=0) begin GetDoklad() GetAdresar(False,False,False) DataRec.Sekce=6 DataRec.Kod=PlneniKodyB[InAt] DataRec.DIC=DICO DataRec.Doklad=Doklad DataRec.Cislo=Cislo DataRec.Datum=Denik.Datum_Dzp DodejCastku() Uloz() end; end; if((InArray(Lines,40))or(InArray(Lines,41))) ; {sekce B.2 a sekce B.3} begin GetDoklad() GetAdresar(True,True,False) if(Oddil=1) DataRec.Sekce=7 else if(Oddil=2) DataRec.Sekce=8 else if(Abs(Castka)>CastkaLimit) DataRec.Sekce=7 else DataRec.Sekce=8 DataRec.Kraceni=InArray(BKraceny,Denik.DanT2) DataRec.Pomer=InArray(BPomerem,Denik.DanT2) DataRec.DIC=DICO DataRec.Doklad=Doklad DataRec.Cislo=Cislo DataRec.Datum=Denik.Datum_Dzp DodejCastku() Uloz() end; end; end; Inc(Pozice) SetStatus(Pozice) end; SetStatusMax(UsedKeys(DataKey),'Vytvářím XML soubor ...') Pozice=0 XML:TextFile; XMLName:String=ViesPath+'DPHKH1-'+Copy(Program.DIC,3)+'-'+Str(AmendYear(Val(KVRok)))+'-'; Kvartal:Byte; if(KVRozsah=1) begin XMLName=XMLName+NulL(Str(KVMesic),2) end else begin Kvartal=KVMesic/3+1 XMLName=XMLName+Str(Kvartal)+'Q'; end; XMLName=XMLName+'.XML' Rewrite(XML,XMLName); WriteLn(XML,''); WriteLn(XML,''); WriteLn(XML,''); Write(XML,''); Write(XML,'0) begin Write(XML,' id_dats="'+StrToUTF8(IDDatSch)+'"') end; Write(XML,' ulice="'+StrToUTF8(UliceBC)+'" c_pop="'+StrToUTF8(UliceCP)+'" c_orient="'+StrToUTF8(UliceCO)+'" naz_obce="'+StrToUTF8(Obec)+'" psc="'+NTrim(PSCDan)+'" c_telef="'+Telefon+'"'); Write(XML,' opr_jmeno="'+StrToUTF8(Jmeno)+'" opr_prijmeni="'+StrToUTF8(Prijmeni)+'" opr_postaveni="'+StrToUTF8(Postaveni)+'"'); Write(XML,' sest_jmeno="'+StrToUTF8(SestavilJmeno)+'" sest_prijmeni="'+StrToUTF8(SestavilPrijmeni)+'" sest_telef="'+StrToUTF8(TelefonDPH)+'" email="'+email+'"'); if(Length(ZastupceDPHKod)<>0) begin LocZn='F' if(ZastupceDPHTyp<>0) LocZn='P' Write(XML,' zast_typ="'+LocZn+'" zast_kod="'+StrToUTF8(ZastupceDPHKod)+'"'); if(ZastupceDPHTyp=0) Write(XML,' zast_prijmeni="'+StrToUTF8(ZastupceDPHPrijmeni)+'" zast_jmeno="'+StrToUTF8(ZastupceDPHJmeno)+'"'); else Write(XML,' zast_nazev="'+StrToUTF8(ZastupceDPHNazev)+'"') LocStr='' if(ZastupceDPHIDTyp=0) LocStr='zast_dat_nar' else if(ZastupceDPHIDTyp=1) LocStr='zast_ev_cislo' else if(ZastupceDPHIDTyp=2) LocStr='zast_ic' if(Length(LocStr)<>0) Write(XML,' '+LocStr+'="'+ZastupceDPHID+'"'); end; Writeln(XML,' />'); DatStr:String[10] DatStr2:String[10] LocD:Double NeedHead:Boolean Sections:Byte NewWNS('CZ_KVDPH.wns') SetDescr(0,0,TA_Right|descr_PageNum,'Strana: '); SetDescr(1,0,TA_Left|descr_Date,'Datum: '); SetDescr(2,0,TA_Center,'Rekapitulace položek kontrolního hlášení'); ;{******* A1 *******} SetStatusRemark('A.1'); NeedHead=true CelkemA1Zaklad:Double PCA1:LongInt PrepareSection(1) IsOK=SearchKey(@KeyID,VetaT); While((IsOK)and(@SekceID=1)) begin if(NeedHead) begin NeedHead=False SetDescr(3,1,TA_Center,'oddíl A.1'); if(Sections>0) begin NextPageWNS end; SetXSize(0) SetColumn(0,ta_Right,6) ; radek SetColumn(1,ta_Left,14) ; DIC SetColumn(2,ta_Right,4) ; kod SetColumn(3,ta_Left,11) ; doklad SetColumn(4,ta_Left,32) ; doklad pro kontrolni hlaseni SetColumn(5,ta_Right,10) ; DUZP SetColumn(6,ta_Right,14) ; zaklad dane SetHead('řádek\tDIČ odběratele\tkód\tdoklad\tdoklad pro kontrolní hlášení\tDUZP\tzáklad daně'); if(Sections>0) begin ChangePageFormat() end; Inc(Sections) end; ReadRec(DataRec,VetaT) DatStr=Day(DataRec.Datum,2)+'.'+Month(DataRec.Datum,2)+'.'+Year(DataRec.Datum,4) LocD=DataRec.ZakladBez+DataRec.ZakladV+DataRec.ZakladN+DataRec.ZakladS CelkemA1Zaklad=CelkemA1Zaklad+LocD Inc(PCA1); Write(XML,''); AddLine(Str(PCA1),DataRec.DIC,Str(DataRec.Kod),DataRec.Doklad,DataRec.Cislo,DatStr,Str(LocD,,2)) IsOK=NextKey(@KeyID,VetaT); Inc(Pozice) SetStatus(Pozice) end; if(PCA1>0) begin AddComment('') SetSumLine(2) AddLine(Str(PCA1),'Celkem A.1',,,,,Str(CelkemA1Zaklad,,2)) end; ;{******* A2 *******} SetStatusRemark('A.2'); NeedHead=true CelkemA2ZakladV:Double CelkemA2DanV:Double CelkemA2ZakladN:Double CelkemA2DanN:Double CelkemA2ZakladS:Double CelkemA2DanS:Double PCA2:LongInt PrepareSection(2) IsOK=SearchKey(@KeyID,VetaT); While((IsOK)and(@SekceID=2)) begin if(NeedHead) begin NeedHead=False SetDescr(3,1,TA_Center,'oddíl A.2'); if(Sections>0) begin NextPageWNS end; SetXSize(0) SetColumn(0,ta_Right,6) ; radek SetColumn(1,ta_Left,14) ; DIC SetColumn(2,ta_Left,11) ; doklad SetColumn(3,ta_Left,32) ; doklad pro kontrolni hlaseni SetColumn(4,ta_Right,10) ; DPPD SetColumn(5,ta_Right,14) ; zaklad dane vyssi SetColumn(6,ta_Right,14) ; dan vyssi SetColumn(7,ta_Right,14) ; zaklad dane nizsi SetColumn(8,ta_Right,14) ; dan nizsi SetColumn(9,ta_Right,14) ; zaklad dane specialni SetColumn(10,ta_Right,14) ; dan specialni SetHead('řádek\tDIČ dodavatele\tdoklad\tdoklad pro kontrolní hlášení\tDPPD\tzáklad '+SazbaDPHVyssi+'%\tdaň '+SazbaDPHVyssi+'%\tzáklad '+SazbaDPHNizsi+'%\tdaň '+SazbaDPHNizsi+'%\tzáklad '+SazbaDPHSnizena+'%\tdaň '+SazbaDPHSnizena+'%'); if(Sections>0) begin ChangePageFormat() end; Inc(Sections) end; ReadRec(DataRec,VetaT) DatStr=Day(DataRec.Datum,2)+'.'+Month(DataRec.Datum,2)+'.'+Year(DataRec.Datum,4) CelkemA2ZakladV=CelkemA2ZakladV+DataRec.ZakladV CelkemA2DanV=CelkemA2DanV+DataRec.DanV CelkemA2ZakladN=CelkemA2ZakladN+DataRec.ZakladN CelkemA2DanN=CelkemA2DanN+DataRec.DanN CelkemA2ZakladS=CelkemA2ZakladS+DataRec.ZakladS CelkemA2DanS=CelkemA2DanS+DataRec.DanS Inc(PCA2) Write(XML,'0) begin Write(XML,'k_stat="'+Copy(DataRec.DIC,1,2)+'" vatid_dod="'+Copy(DataRec.DIC,3,255)+'" ') end; Write(XML,'zakl_dane1="'+Str(DataRec.ZakladV,,2)+'" dan1="'+Str(DataRec.DanV,,2)+'" ') Write(XML,'zakl_dane2="'+Str(DataRec.ZakladN,,2)+'" dan2="'+Str(DataRec.DanN,,2)+'" ') Write(XML,'zakl_dane3="'+Str(DataRec.ZakladS,,2)+'" dan3="'+Str(DataRec.DanS,,2)+'" ') WriteLn(XML,'/>'); AddLine(Str(PCA2),DataRec.DIC,DataRec.Doklad,DataRec.Cislo,DatStr,Str(DataRec.ZakladV,,2),Str(DataRec.DanV,,2),Str(DataRec.ZakladN,,2),Str(DataRec.DanN,,2),Str(DataRec.ZakladS,,2),Str(DataRec.DanS,,2)) IsOK=NextKey(@KeyID,VetaT); Inc(Pozice) SetStatus(Pozice) end; if(PCA2>0) begin AddComment('') SetSumLine(2) AddLine(Str(PCA2),'Celkem A.2',,,,Str(CelkemA2ZakladV,,2),Str(CelkemA2DanV,,2),Str(CelkemA2ZakladN,,2),Str(CelkemA2DanN,,2),Str(CelkemA2ZakladS,,2),Str(CelkemA2DanS,,2)) end; ;{******* A3 *******} SetStatusRemark('A.3'); NeedHead=true CelkemA3Zaklad:Double PCA3:LongInt PrepareSection(3) IsOK=SearchKey(@KeyID,VetaT); While((IsOK)and(@SekceID=3)) begin if(NeedHead) begin NeedHead=False SetDescr(3,1,TA_Center,'oddíl A.3'); if(Sections>0) begin NextPageWNS end; SetXSize(0) SetColumn(0,ta_Right,6) ; radek SetColumn(1,ta_Left,14) ; DIC SetColumn(2,ta_Left,30) ; Jmeno SetColumn(3,ta_Right,10) ; Datum narozeni SetColumn(4,ta_Left,40) ; Misto SetColumn(5,ta_Left,11) ; doklad SetColumn(6,ta_Left,32) ; doklad pro kontrolni hlaseni SetColumn(7,ta_Right,10) ; DUP SetColumn(8,ta_Right,14) ; zaklad dane SetHead('řádek\tDIČ odběratele\tjméno\tnarození\tsídlo\tdoklad\tdoklad pro kontrolní hlášení\tDUP\tvýše plnění'); if(Sections>0) begin ChangePageFormat() end; Inc(Sections) end; ReadRec(DataRec,VetaT) DatStr=Day(DataRec.Datum,2)+'.'+Month(DataRec.Datum,2)+'.'+Year(DataRec.Datum,4) CelkemA3Zaklad=CelkemA3Zaklad+DataRec.ZakladBez Inc(PCA3) Write(XML,'0) begin Write(XML,'k_stat="'+Copy(DataRec.DIC,1,2)+'" vatid_odb="'+Copy(DataRec.DIC,3,255)+'" ') end else begin DatStr2=NulL(Str(DataRec.DatumNDen),2)+'.'+NulL(Str(DataRec.DatumNMes),2)+'.'+NulL(Str(DataRec.DatumNRok),4) Write(XML,'d_narozeni="'+DatStr2+'" jm_prijm_obch="'+StrToUTF8(DataRec.Nazev)+'" m_pobytu_sidlo="'+StrToUTF8(DataRec.Sidlo)+'" ') end; Write(XML,'osv_plneni="'+Str(DataRec.ZakladBez,,2)+'" ') WriteLn(XML,'/>'); AddText(Str(PCA3),DataRec.DIC,) if(Length(DataRec.DIC)=0) begin AddText(DataRec.Nazev,DatStr2,DataRec.Sidlo,) end else begin AddText(,,,,) end AddLine(DataRec.Doklad,DataRec.Cislo,DatStr,Str(DataRec.ZakladBez,,2)); IsOK=NextKey(@KeyID,VetaT); Inc(Pozice) SetStatus(Pozice) end; if(PCA3>0) begin AddComment('') SetSumLine(2) AddLine(Str(PCA3),'Celkem A.3',,,,,,,Str(CelkemA3Zaklad,,2)) end; ;{******* A4 *******} SetStatusRemark('A.4'); NeedHead=true CelkemA4ZakladV:Double CelkemA4DanV:Double CelkemA4ZakladN:Double CelkemA4DanN:Double CelkemA4ZakladS:Double CelkemA4DanS:Double PCA4:LongInt PrepareSection(4) IsOK=SearchKey(@KeyID,VetaT); While((IsOK)and(@SekceID=4)) begin if(NeedHead) begin NeedHead=False SetDescr(3,1,TA_Center,'oddíl A.4'); if(Sections>0) begin NextPageWNS end; SetXSize(0) SetColumn(0,ta_Right,6) ; radek SetColumn(1,ta_Left,14) ; DIC SetColumn(2,ta_Left,11) ; doklad SetColumn(3,ta_Left,32) ; doklad pro kontrolni hlaseni SetColumn(4,ta_Right,10) ; DPPD SetColumn(5,ta_Right,14) ; zaklad dane vyssi SetColumn(6,ta_Right,14) ; dan vyssi SetColumn(7,ta_Right,14) ; zaklad dane nizsi SetColumn(8,ta_Right,14) ; dan nizsi SetColumn(9,ta_Right,14) ; zaklad dane specialni SetColumn(10,ta_Right,14) ; dan specialni SetHead('řádek\tDIČ odběratele\tdoklad\tdoklad pro kontrolní hlášení\tDPPD\tzáklad '+SazbaDPHVyssi+'%\tdaň '+SazbaDPHVyssi+'%\tzáklad '+SazbaDPHNizsi+'%\tdaň '+SazbaDPHNizsi+'%\tzáklad '+SazbaDPHSnizena+'%\tdaň '+SazbaDPHSnizena+'%'); if(Sections>0) begin ChangePageFormat() end; Inc(Sections) end; ReadRec(DataRec,VetaT) DatStr=Day(DataRec.Datum,2)+'.'+Month(DataRec.Datum,2)+'.'+Year(DataRec.Datum,4) CelkemA4ZakladV=CelkemA4ZakladV+DataRec.ZakladV CelkemA4DanV=CelkemA4DanV+DataRec.DanV CelkemA4ZakladN=CelkemA4ZakladN+DataRec.ZakladN CelkemA4DanN=CelkemA4DanN+DataRec.DanN CelkemA4ZakladS=CelkemA4ZakladS+DataRec.ZakladS CelkemA4DanS=CelkemA4DanS+DataRec.DanS Inc(PCA4) Write(XML,''); AddLine(Str(PCA4),DataRec.DIC,DataRec.Doklad,DataRec.Cislo,DatStr,Str(DataRec.ZakladV,,2),Str(DataRec.DanV,,2),Str(DataRec.ZakladN,,2),Str(DataRec.DanN,,2),Str(DataRec.ZakladS,,2),Str(DataRec.DanS,,2)) IsOK=NextKey(@KeyID,VetaT); Inc(Pozice) SetStatus(Pozice) end; if(PCA4>0) begin AddComment('') SetSumLine(2) AddLine(Str(PCA4),'Celkem A.4',,,,Str(CelkemA4ZakladV,,2),Str(CelkemA4DanV,,2),Str(CelkemA4ZakladN,,2),Str(CelkemA4DanN,,2),Str(CelkemA4ZakladS,,2),Str(CelkemA4DanS,,2)) end; ;{******* A5 *******} SetStatusRemark('A.5'); NeedHead=true CelkemA5ZakladV:Double CelkemA5DanV:Double CelkemA5ZakladN:Double CelkemA5DanN:Double CelkemA5ZakladS:Double CelkemA5DanS:Double PCA5:LongInt PrepareSection(5) IsOK=SearchKey(@KeyID,VetaT); While((IsOK)and(@SekceID=5)) begin if(NeedHead) begin NeedHead=False SetDescr(3,1,TA_Center,'oddíl A.5'); if(Sections>0) begin NextPageWNS end; SetXSize(0) SetColumn(0,ta_Right,6) ; radek SetColumn(1,ta_Left,14) ; DIC SetColumn(2,ta_Left,11) ; doklad SetColumn(3,ta_Left,32) ; doklad pro kontrolni hlaseni SetColumn(4,ta_Right,10) ; DPPD SetColumn(5,ta_Right,14) ; zaklad dane vyssi SetColumn(6,ta_Right,14) ; dan vyssi SetColumn(7,ta_Right,14) ; zaklad dane nizsi SetColumn(8,ta_Right,14) ; dan nizsi SetColumn(9,ta_Right,14) ; zaklad dane specialni SetColumn(10,ta_Right,14) ; dan specialni SetHead('řádek\tDIČ odběratele\tdoklad\tdoklad pro kontrolní hlášení\tDPPD\tzáklad '+SazbaDPHVyssi+'%\tdaň '+SazbaDPHVyssi+'%\tzáklad '+SazbaDPHNizsi+'%\tdaň '+SazbaDPHNizsi+'%\tzáklad '+SazbaDPHSnizena+'%\tdaň '+SazbaDPHSnizena+'%'); if(Sections>0) begin ChangePageFormat() end; Inc(Sections) end; ReadRec(DataRec,VetaT) DatStr=Day(DataRec.Datum,2)+'.'+Month(DataRec.Datum,2)+'.'+Year(DataRec.Datum,4) CelkemA5ZakladV=CelkemA5ZakladV+DataRec.ZakladV CelkemA5DanV=CelkemA5DanV+DataRec.DanV CelkemA5ZakladN=CelkemA5ZakladN+DataRec.ZakladN CelkemA5DanN=CelkemA5DanN+DataRec.DanN CelkemA5ZakladS=CelkemA5ZakladS+DataRec.ZakladS CelkemA5DanS=CelkemA5DanS+DataRec.DanS Inc(PCA5) AddLine(Str(PCA5),DataRec.DIC,DataRec.Doklad,DataRec.Cislo,DatStr,Str(DataRec.ZakladV,,2),Str(DataRec.DanV,,2),Str(DataRec.ZakladN,,2),Str(DataRec.DanN,,2),Str(DataRec.ZakladS,,2),Str(DataRec.DanS,,2)) IsOK=NextKey(@KeyID,VetaT); Inc(Pozice) SetStatus(Pozice) end; if(PCA5>0) begin Write(XML,''); SetSumLine(2) AddLine(Str(PCA5),'Celkem A.5',,,,Str(CelkemA5ZakladV,,2),Str(CelkemA5DanV,,2),Str(CelkemA5ZakladN,,2),Str(CelkemA5DanN,,2),Str(CelkemA5ZakladS,,2),Str(CelkemA5DanS,,2)) end; ;{******* B1 *******} SetStatusRemark('B.1'); NeedHead=true CelkemB1ZakladV:Double CelkemB1DanV:Double CelkemB1ZakladN:Double CelkemB1DanN:Double CelkemB1ZakladS:Double CelkemB1DanS:Double PCB1:LongInt PrepareSection(6) IsOK=SearchKey(@KeyID,VetaT); While((IsOK)and(@SekceID=6)) begin if(NeedHead) begin NeedHead=False SetDescr(3,1,TA_Center,'oddíl B.1'); if(Sections>0) begin NextPageWNS end; SetXSize(0) SetColumn(0,ta_Right,6) ; radek SetColumn(1,ta_Left,14) ; DIC SetColumn(2,ta_Right,4) ; kod SetColumn(3,ta_Left,10) ; doklad SetColumn(4,ta_Left,32) ; doklad dodavatele SetColumn(5,ta_Right,10) ; DUZP SetColumn(6,ta_Right,14) ; zaklad dane vyssi SetColumn(7,ta_Right,14) ; dan vyssi SetColumn(8,ta_Right,14) ; zaklad dane nizsi SetColumn(9,ta_Right,14) ; dan nizsi SetColumn(10,ta_Right,14) ; zaklad dane specialni SetColumn(11,ta_Right,14) ; dan specialni SetHead('řádek\tDIČ dodavatele\tkód\tdoklad\tdoklad dodavatele\tDUZP\tzáklad '+SazbaDPHVyssi+'%\tdaň '+SazbaDPHVyssi+'%\tzáklad '+SazbaDPHNizsi+'%\tdaň '+SazbaDPHNizsi+'%\tzáklad '+SazbaDPHSnizena+'%\tdaň '+SazbaDPHSnizena+'%'); if(Sections>0) begin ChangePageFormat() end; Inc(Sections) end; ReadRec(DataRec,VetaT) DatStr=Day(DataRec.Datum,2)+'.'+Month(DataRec.Datum,2)+'.'+Year(DataRec.Datum,4) CelkemB1ZakladV=CelkemB1ZakladV+DataRec.ZakladV CelkemB1DanV=CelkemB1DanV+DataRec.DanV CelkemB1ZakladN=CelkemB1ZakladN+DataRec.ZakladN CelkemB1DanN=CelkemB1DanN+DataRec.DanN CelkemB1ZakladS=CelkemB1ZakladS+DataRec.ZakladS CelkemB1DanS=CelkemB1DanS+DataRec.DanS Inc(PCB1) Write(XML,''); AddLine(Str(PCB1),DataRec.DIC,Str(DataRec.Kod),DataRec.Doklad,DataRec.Cislo,DatStr,Str(DataRec.ZakladV,,2),Str(DataRec.DanV,,2),Str(DataRec.ZakladN,,2),Str(DataRec.DanN,,2),Str(DataRec.ZakladS,,2),Str(DataRec.DanS,,2)) IsOK=NextKey(@KeyID,VetaT); Inc(Pozice) SetStatus(Pozice) end; if(PCB1>0) begin AddComment('') SetSumLine(2) AddLine(Str(PCB1),'Celkem B.1',,,,,Str(CelkemB1ZakladV,,2),Str(CelkemB1DanV,,2),Str(CelkemB1ZakladN,,2),Str(CelkemB1DanN,,2),Str(CelkemB1ZakladS,,2),Str(CelkemB1DanS,,2)) end ;{******* B2 *******} SetStatusRemark('B.2'); NeedHead=true CelkemB2ZakladV:Double CelkemB2DanV:Double CelkemB2ZakladN:Double CelkemB2DanN:Double CelkemB2ZakladS:Double CelkemB2DanS:Double PCB2:LongInt PrepareSection(7) IsOK=SearchKey(@KeyID,VetaT); While((IsOK)and(@SekceID=7)) begin if(NeedHead) begin NeedHead=False SetDescr(3,1,TA_Center,'oddíl B.2'); if(Sections>0) begin NextPageWNS end; SetXSize(0) SetColumn(0,ta_Right,6) ; radek SetColumn(1,ta_Left,14) ; DIC SetColumn(2,ta_Left,10) ; doklad SetColumn(3,ta_Left,32) ; doklad dodavatele SetColumn(4,ta_Right,10) ; DPPD SetColumn(5,ta_Right,14) ; zaklad dane vyssi SetColumn(6,ta_Right,14) ; dan vyssi SetColumn(7,ta_Right,14) ; zaklad dane nizsi SetColumn(8,ta_Right,14) ; dan nizsi SetColumn(9,ta_Right,14) ; zaklad dane specialni SetColumn(10,ta_Right,14) ; dan specialni SetColumn(11,ta_Center,2) ; kraceni SetHead('řádek\tDIČ dodavatele\tdoklad\tdoklad dodavatele\tDPPD\tzáklad '+SazbaDPHVyssi+'%\tdaň '+SazbaDPHVyssi+'%\tzáklad '+SazbaDPHNizsi+'%\tdaň '+SazbaDPHNizsi+'%\tzáklad '+SazbaDPHSnizena+'%\tdaň '+SazbaDPHSnizena+'%\t/'); if(Sections>0) begin ChangePageFormat() end; Inc(Sections) end; ReadRec(DataRec,VetaT) DatStr=Day(DataRec.Datum,2)+'.'+Month(DataRec.Datum,2)+'.'+Year(DataRec.Datum,4) CelkemB2ZakladV=CelkemB2ZakladV+DataRec.ZakladV CelkemB2DanV=CelkemB2DanV+DataRec.DanV CelkemB2ZakladN=CelkemB2ZakladN+DataRec.ZakladN CelkemB2DanN=CelkemB2DanN+DataRec.DanN CelkemB2ZakladS=CelkemB2ZakladS+DataRec.ZakladS CelkemB2DanS=CelkemB2DanS+DataRec.DanS Inc(PCB2) if(DataRec.Pomer) LocZn='A' else LocZn='N' Write(XML,''); AddLine(Str(PCB2),DataRec.DIC,DataRec.Doklad,DataRec.Cislo,DatStr,Str(DataRec.ZakladV,,2),Str(DataRec.DanV,,2),Str(DataRec.ZakladN,,2),Str(DataRec.DanN,,2),Str(DataRec.ZakladS,,2),Str(DataRec.DanS,,2),LocZn) IsOK=NextKey(@KeyID,VetaT); Inc(Pozice) SetStatus(Pozice) end; if(PCB2>0) begin AddComment('') SetSumLine(2) AddLine(Str(PCB2),'Celkem B.2',,,,Str(CelkemB2ZakladV,,2),Str(CelkemB2DanV,,2),Str(CelkemB2ZakladN,,2),Str(CelkemB2DanN,,2),Str(CelkemB2ZakladS,,2),Str(CelkemB2DanS,,2)) end ;{******* B3 *******} SetStatusRemark('B.3'); NeedHead=true CelkemB3ZakladV:Double CelkemB3DanV:Double CelkemB3ZakladN:Double CelkemB3DanN:Double CelkemB3ZakladS:Double CelkemB3DanS:Double PCB3:Double PrepareSection(8) IsOK=SearchKey(@KeyID,VetaT); While((IsOK)and(@SekceID=8)) begin if(NeedHead) begin NeedHead=False SetDescr(3,1,TA_Center,'oddíl B.3'); if(Sections>0) begin NextPageWNS end; SetXSize(0) SetColumn(0,ta_Right,6) ; radek SetColumn(1,ta_Left,14) ; DIC SetColumn(2,ta_Left,10) ; doklad SetColumn(3,ta_Left,32) ; doklad dodavatele SetColumn(4,ta_Right,10) ; DPPD SetColumn(5,ta_Right,14) ; zaklad dane vyssi SetColumn(6,ta_Right,14) ; dan vyssi SetColumn(7,ta_Right,14) ; zaklad dane nizsi SetColumn(8,ta_Right,14) ; dan nizsi SetColumn(9,ta_Right,14) ; zaklad dane specialni SetColumn(10,ta_Right,14) ; dan specialni SetHead('řádek\tDIČ dodavatele\tdoklad\tdoklad dodavatele\tDPPD\tzáklad '+SazbaDPHVyssi+'%\tdaň '+SazbaDPHVyssi+'%\tzáklad '+SazbaDPHNizsi+'%\tdaň '+SazbaDPHNizsi+'%\tzáklad '+SazbaDPHSnizena+'%\tdaň '+SazbaDPHSnizena+'%'); if(Sections>0) begin ChangePageFormat() end; Inc(Sections) end; ReadRec(DataRec,VetaT) DatStr=Day(DataRec.Datum,2)+'.'+Month(DataRec.Datum,2)+'.'+Year(DataRec.Datum,4) CelkemB3ZakladV=CelkemB3ZakladV+DataRec.ZakladV CelkemB3DanV=CelkemB3DanV+DataRec.DanV CelkemB3ZakladN=CelkemB3ZakladN+DataRec.ZakladN CelkemB3DanN=CelkemB3DanN+DataRec.DanN CelkemB3ZakladS=CelkemB3ZakladS+DataRec.ZakladS CelkemB3DanS=CelkemB3DanS+DataRec.DanS Inc(PCB3) AddLine(Str(PCB3),DataRec.DIC,DataRec.Doklad,DataRec.Cislo,DatStr,Str(DataRec.ZakladV,,2),Str(DataRec.DanV,,2),Str(DataRec.ZakladN,,2),Str(DataRec.DanN,,2),Str(DataRec.ZakladS,,2),Str(DataRec.DanS,,2)) IsOK=NextKey(@KeyID,VetaT); Inc(Pozice) SetStatus(Pozice) end; if(PCB3>0) begin Write(XML,''); AddComment('') SetSumLine(2) AddLine(Str(PCB3),'Celkem B.3',,,,Str(CelkemB3ZakladV,,2),Str(CelkemB3DanV,,2),Str(CelkemB3ZakladN,,2),Str(CelkemB3DanN,,2),Str(CelkemB3ZakladS,,2),Str(CelkemB3DanS,,2)) end; Write(XML,'0) begin LocD=CelkemA2ZakladV+CelkemA2ZakladN+CelkemA2ZakladS Write(XML,'celk_zd_a2="'+Str(LocD,,2)+'" ') end if((PCA4>0)or(PCA5>0)) begin LocD=CelkemA4ZakladV+CelkemA5ZakladV Write(XML,'obrat23="'+Str(LocD,,2)+'" ') LocD=CelkemA4ZakladN+CelkemA5ZakladN+CelkemA4ZakladS+CelkemA5ZakladS Write(XML,'obrat5="'+Str(LocD,,2)+'" ') end if((PCB2>0)or(PCB3>0)) begin LocD=CelkemB2ZakladV+CelkemB3ZakladV Write(XML,'pln23="'+Str(LocD,,2)+'" ') LocD=CelkemB2ZakladN+CelkemB3ZakladN+CelkemB2ZakladS+CelkemB3ZakladS Write(XML,'pln5="'+Str(LocD,,2)+'" ') end if(PCA1>0) begin Write(XML,'pln_rez_pren="'+Str(CelkemA1Zaklad,,2)+'" ') end if(PCB1>0) begin LocD=CelkemB1ZakladV Write(XML,'rez_pren23="'+Str(LocD,,2)+'" ') LocD=CelkemB1ZakladN+CelkemB1ZakladS Write(XML,'rez_pren5="'+Str(LocD,,2)+'" ') end WriteLn(XML,'/>'); WriteLn(XML,''); WriteLn(XML,''); Message('Byl úspěšně vytvořen soubor kontrolního hlášení\r\r'+TransChar('\','/',XMLName),mb_IconInformation); Procedure PrepareSection(ID:Byte) if(SortMode=0) begin DataKey.Length=1 DataKey.Sekce=ID KeyID='DataKey' end else begin DataKey2.Length=1 DataKey2.Sekce=ID KeyID='DataKey2' end; SekceID=KeyID+'.Sekce' end; END