; převod učt. deníku do 56Dg - Příspěvkové MSKraj ; verze z 22.3.2005 ; Autor: WinDUO Team Name('Export dat 569GxY2k') Designed('WinDUO','DENMAN') Author('Winduo Team','EMail: winduo@winduo.cz','http://www.winduo.com','http://www.winduo.cz') Descr('Převede účetní deník do TXT souboru pro zřizovatele příspěvkových organizací') ;{*******************************************************************************************************************************************} UsageFilter(Program.TypFirmy=5) WNSType(-1) LocStr:String Veta:LongInt VetaN:LongInt Pozice:LongInt ObdobiProVetu6:Word=0 StrObdobi:String ObdobiMail:String[7] Zprac:Boolean PocetZaznamu:LongInt=1 PoslCislo:LongInt PoslAgenda:Byte LocB:Boolean Popis:String PouzitFiltr:Boolean=False ValidCislo:String='0123456789' ValidCisloLom:String='0123456789/' ;IsFilter:Boolean=False ZpusobOdeslani:Byte; MailKomu:String='fin.pomsk@kr-moravskoslezsky.cz' Nove:Boolean=True ;je-li True, tiskne presne Opravy:Boolean=False ;pomocná jen kvůli dialogu Beru9text:Boolean=True ;pomocná, dokud se nevyresi problem s prebiranim Beru:Boolean Po1:Boolean=True Po2:Boolean=False i:Integer=4 j:byte posun:byte LPrevodUZ:Boolean p:byte PocetODPAORJ :Byte=80 ODPAORJ :Array[1..PocetODPAORJ] of LongInt HS :Array[1..PocetODPAORJ] of Word LocODPAORJ :Word=0 PocetUZ :Byte=80 UZNA :Array[1..PocetUZ] of LongInt UZZD :Array[1..PocetUZ] of LongInt UZ :Array[1..PocetUZ] of LongInt KJ :Array[1..PocetUZ] of LongInt LocUZ :LongInt=0 5yy:String='00' 5cccc:String='0000' 6zz:String 6t:String='0' 9dd:String 9kk:String='00' ;KAP 9oooooo:String='000000' ;OD - oddil 9llll:String='0000' ;POL 9zzz:String='000' ;ZP 9nnn:String='000' ;UZ nastroj 9z:String='0' ;UZ zdroj 9uuuuu:String='00000' ;UZ 9jjjjjjjjjj:String='0000000000' ;ORJ 9ccccccccc:String 9sss:String 9aaaa:String[4] 9mcastka:String 9dcastka:String 9mznamenko:String 9dznamenko:String ObdobiOd:Word ObdobiDo:Word SObdobi:String[4] SObdobiOd:String[4] SObdobiDo:String[4] ;DeclareRec('Program') DeclareRec('Denik') DeclareRec('KeyDenik7') ClearKey(KeyDenik7) ; resetuje ukazatel aktuální věty v souboru procedure NulyHS(vstup:String); While(length(vstup)<4) begin vstup='0'+vstup; end end; CestaINI:String=workpath+'569GxY2k.ini'; p=0 while(p ODPA / ORJ') DlgStatic(-1,'Ve WinDUO údaj HS bude převeden na číslo ODPA / ORJ:',20,10,400) posun=30 i=10 p=1 while(p<=PocetODPAORJ) begin inc(i,posun); j=0 while((j<5)and(p<=pocetODPAORJ)) begin DlgEdit(2000+p,HS[p],j*150+10,i,40,,Program.HSSize,ES_RIGHT,ValidCislo) DlgOnLineHelp(2000+p,'Číslo HS ve WinDUO') DlgStatic(-1,'>',j*150+52,i+2,26) DlgEdit(2100+p,ODPAORJ[p],j*150+62,i,90,,10,ES_RIGHT,ValidCislo) DlgOnLineHelp(2100+p,'Číslo ODPA (oddíl/paragraf) nebo ORJ - třídění pěstounské péče (organizační jednotka) pro výstup nadřízenému orgánu') inc(j) inc(p) end; end; ;{*** Cover 3 **********************************************************************************************************************} SetCover(3,'KJ -> UZ') DlgCheckBox(220,LPrevodUZ,20,10,600,,'&Převádět čísla KJ na údaj UZ? Ve WinDUO údaj KJ bude převeden na číslo UZ:') DlgOnLineHelp(220,'Pokud jste do políčka KJ zadávali údaje UZ podle pokynů nadř. orgánu, neodfajfkovávejte. Pokud jste používali jiné kódy, odfajfkujte a vyplňte převodní tabulku. Nenajde-li se údaj KJ v tabulce, bude předán KJ') posun=30 i=10 p=1 while(p<=PocetUZ) begin inc(i,posun); j=0 while((j<5)and(p<=PocetUZ)) begin DlgEdit(2200+p,KJ[p],j*147+10,i,40,,Program.KJSize,ES_RIGHT,ValidCislo) DlgOnLineHelp(2000+p,'Číslo KJ ve WinDUO') DlgStatic(-1,'>',j*147+51,i+2,26) DlgEdit(2300+p,UZNA[p],j*147+60,i,30,,3,ES_RIGHT,ValidCislo) DlgOnLineHelp(2300+p,'Nástroj') DlgEdit(2400+p,UZZD[p],j*147+91,i,12,,1,ES_RIGHT,ValidCislo) DlgOnLineHelp(2400+p,'Zdroj') DlgEdit(2500+p,UZ[p],j*147+104,i,48,,5,ES_RIGHT,ValidCislo) DlgOnLineHelp(2500+p,'Číslo UZ (účelový znak = zdroj financování) pro výstup nadřízenému orgánu') inc(j) inc(p) end; end; p=1 ;{*** Události **********************************************************************************************************************} if(DlgExecute(True)<>ID_OK) Halt if(Opravy) begin Opravy=Question('Opravdu máte vyfiltrované pouze ty doklady, které již byly dříve odeslány a chcete je nyní odeslat znovu (=opravy)') end if((Opravy)and(not PouzitFiltr)) begin Opravy=Question('Nevěřím, vždyť filtr do sestav není zapnut nebo jste nepotvrdili dotaz na filtr v úvodní obrazovce. Opravdu chcete pokračovat?') end if(Opravy) 6t='2' p=0 while(p12) Halt('Období od je větší nežli 12') if(Val(SobdobiDo)>12) Halt('Období do je větší nežli 12') if(Val(SobdobiOd)>Val(SobdobiDo)) Halt('Období od je větší než do') 5yy=SObdobiOd ;SObdobi=SObdobi+Rok(2) SObdobiOd=SObdobiOd+Rok(2) SObdobiDo=SObdobiDo++Rok(2) ObdobiOd=Val(SObdobiOd) ObdobiDo=Val(SObdobiDo) if((ObdobiOd=0)or(ObdobiDo=0)) Halt('Údaj "Období" musí být vyplněn = měsíc, za který chcete exportovat data') LocStr=Null(ObdobiOd,4) LocStr=Copy(LocStr,3,2)+Copy(LocStr,1,2) ObdobiOd=Val(LocStr) LocStr=Null(ObdobiDo,4) LocStr=Copy(LocStr,3,2)+Copy(LocStr,1,2) ObdobiDo=Val(LocStr) IniRok:String=Rok(2) TXTFileD:TextFile SUBFile:TextFile if(ZpusobOdeslani=1) begin Cesta:String=GetPathName(WorkPath) DenikTXT:String=Cesta+''+Ico+'.RM6' end else begin DenikTXT:String=WorkPath+Ico+'.RM6' end VetaPS:LongInt Rewrite(TXTFileD,DenikTXT,True) ; otevře textový soubor TXTHlavicka:TextFile ; definuje proměnnou textového souboru if(ZpusobOdeslani=1);disketa SoubHlavicka:String=Cesta+'AUTOMAT.SUB' else SoubHlavicka:String=WorkPath+'AUTOMAT.SUB' Rewrite(TXTHlavicka,SoubHlavicka,True) ; otevře textový soubor DeclareRec('UcetniUdalost') DeclareRec('KeyUcetniUdalost4') DeclareRec('Pohledavka') DeclareRec('KeyPohledavka8') DeclareRec('Zavazek') DeclareRec('KeyZavazek8') DeclareRec('Pokladna') DeclareRec('KeyPokladna7') DeclareRec('Banka') DeclareRec('KeyBanka7') DeclareRec('OstatniUhrady') DeclareRec('KeyOstatniUhrady7') if(Program.Sklady<>0) begin DeclareRec('Pohyb') DeclareRec('KeyPohyb1') DeclareRec('SkupinovaOperace') DeclareRec('KeySkupinovaOperace1') end; if(Program.Majetky<>0) begin DeclareRec('Majetek') DeclareRec('KeyMajetek6') DeclareRec('DKP') DeclareRec('KeyDKP6') end; Record NovaVeta Length:Byte; obdobi:Word; cislo:longint subline:word end; TempKlic01:NovaVeta; klic pro poc.stavy TempKlic00:NovaVeta; klic pro bezne doklady TempKlic05:NovaVeta; klic pro kon.stavy MakeTempFile(,TempKlic01,True) MakeTempFile(,TempKlic00,True) MakeTempFile(,TempKlic05,True) if(Length(SObdobiOd)=3) LocStr='0'+SObdobiOd else LocStr=SObdobiOd InitStatus(UsedKeys(KeyDenik7),'Probíhá export dat do formátu 569GxY2k','za období '+LocStr) ;{*** zápis hlavičky 5/@ **********************************************************************************************************************} LocStr='5/@'+Null(Program.Ico,8)+'00'+5yy+'000'+5cccc LocStr=FillStrR(LocStr,64,' ',True) Writeln(TXTFileD,LocStr); ClearKey(KeyDenik7) While(NextKey(KeyDenik7,Veta)) begin ReadRec(Denik,Veta) if(InFilter(Denik)) ; dotaz, zda věta prošla filtrem begin ; začátek příkazu pro operace s těmi, které prošly filtrem LocStr=Null(Denik.Obdobi,4) LocStr=Copy(LocStr,3,2)+Copy(LocStr,1,2) Denik.Obdobi=Val(LocStr) Zprac=False beru=False if((Denik.Obdobi>=ObdobiOd)and(Denik.Obdobi<=ObdobiDo)) beru=True ; if((Val(Copy(SObdobi,1,2))=12)and(Denik.Obdobi=(100*Val(Rok(2)))+99)) ; Beru=True ; if(Denik.Obdobi=ObdobiOd) ; Beru=True if(beru) begin ;{pocatecni stavy} if((Denik.mdSU=Program.UcetPocatecniStav)or(Denik.dalSU=Program.UcetPocatecniStav)) begin TempKlic01.Length=8 TempKlic01.obdobi=Swap(Denik.Obdobi) TempKlic01.cislo=Swapl(Denik.Cislo) TempKlic01.subline=Swap(Denik.Subline) AddKey(TempKlic01,Veta) Zprac=True end ;{do uzaviracich operaci jdou nejen ucet 962, ale i 963. Byl dotaz p.Magyaricsovi 24.3.2003 - bez odpovědi} if((Denik.mdSU=Program.UcetKonecnyStav)or(Denik.dalSU=Program.UcetKonecnyStav)or(Denik.mdSU=Program.UcetZiskuAZtrat)or(Denik.dalSU=Program.UcetZiskuAZtrat)) begin TempKlic05.Length=8 TempKlic05.obdobi=Swap(Denik.Obdobi) TempKlic05.cislo=Swapl(Denik.Cislo) TempKlic05.subline=Swap(Denik.Subline) AddKey(TempKlic05,Veta) Zprac=True end if(not Zprac) begin TempKlic00.Length=8 TempKlic00.obdobi=Swap(Denik.Obdobi) TempKlic00.cislo=Swapl(Denik.Cislo) TempKlic00.subline=Swap(Denik.Subline) AddKey(TempKlic00,Veta) end end end Inc(Pozice) SetStatus(Pozice) end ;{pocatecni stavy} SetNewMax(UsedKeys(TempKlic01)) SetStatusText('Probíhá převod poč. stavů') Pozice=0 PoslCislo=0 PoslAgenda=999 ObdobiProVetu6=0 ClearKey(TempKlic01) While(NextKey(TempKlic01,Veta)) begin ReadRec(Denik,Veta) if(Denik.Cislo<>PoslCislo) Zapis9#() if(ObdobiProVetu6<>Denik.Obdobi) begin StrObdobi=Null(Denik.Obdobi,4) StrObdobi=Copy(StrObdobi,1,2) 6zz='01' Zapis6() ObdobiProVetu6=Denik.Obdobi end Zapis9@$(True) Zapis9@$(False) Inc(PocetZaznamu) Inc(Pozice) SetStatus(Pozice) end Zapis9#() ;{běžný měsíc} SetNewMax(UsedKeys(TempKlic00)) SetStatusText('Probíhá převod běžných záznamů') Pozice=0 PoslCislo=0 PoslAgenda=999 ObdobiProVetu6=0 ClearKey(TempKlic00) While(NextKey(TempKlic00,Veta)) begin ;PoslCislo=Denik.Cislo ReadRec(Denik,Veta) if(Denik.Cislo<>PoslCislo) Zapis9#() if(ObdobiProVetu6<>Denik.Obdobi) begin StrObdobi=Null(Denik.Obdobi,4) StrObdobi=Copy(StrObdobi,1,2) 6zz='00' Zapis6() ObdobiProVetu6=Denik.Obdobi end Zapis9@$(True) Zapis9@$(False) Inc(PocetZaznamu) Inc(Pozice) SetStatus(Pozice) end Zapis9#() ;{uzavírací zápisy} SetNewMax(UsedKeys(TempKlic05)) SetStatusText('Probíhá převod uzavíracích zápisů') Pozice=0 PoslCislo=0 PoslAgenda=999 ObdobiProVetu6=0 ClearKey(TempKlic05) While(NextKey(TempKlic05,Veta)) begin ReadRec(Denik,Veta) if(Denik.Cislo<>PoslCislo) Zapis9#() if(ObdobiProVetu6<>Denik.Obdobi) begin StrObdobi='12'; Null(Denik.Obdobi,4) 6zz='05' Zapis6() ObdobiProVetu6=Denik.Obdobi end Zapis9@$(True) Zapis9@$(False) Inc(PocetZaznamu) Inc(Pozice) SetStatus(Pozice) end Zapis9#() Close(TXTFileD) ;{tvorba AUTOMAT.SUB} if(Length(Trim(ObdobiMail))=0) LocStr='WinUCR21 '+Copy(Null(ObdobiDo,4),3,2)+'/'+Rok(4)+' '+Copy(ReplaceStr(StrDate(GetDate(),true),' ','0'),1,6)+Year(GetDate())+' '+StrTime(GetTime(),True)+' '+Null(ico(),8)+' '+Firma+' '+Rozsireni else LocStr='WinUCR21 '+ObdobiMail+' '+Copy(StrDate(GetDate(),True),1,6)+Year(GetDate())+' '+StrTime(GetTime(),True)+' '+Null(ico(),8)+' '+Firma+' '+Rozsireni Writeln(TXTHlavicka,LocStr); if(ZpusobOdeslani=0); mailem begin Mail:EMLFile; SetEMLItem(Mail,eml_To,MailKomu); SetEMLItem(Mail,eml_Subject,LocStr); AttachFile(Mail,DenikTXT); Create(Mail,'569GxY2k.EML',True); Open(Mail); end Dec(PocetZaznamu) if(PocetZaznamu=0) begin Message('Soubor '+TransToEsc(DenikTXT)+' pravděpodobně NEBYL úspěšně vytvořen.'+#13+'Počet záznamů: '+Str(PocetZaznamu)) end else begin LocStr='Soubor '+TransToEsc(DenikTXT)+' byl vytvořen.'+#13+'Počet záznamů: '+Str(PocetZaznamu) if(PouzitFiltr) LocStr=LocStr+#13+'Byl použit filtr' if(Opravy) LocStr=LocStr+#13+'Soubor vytvořen v režimu OPRAVY' else LocStr=LocStr+#13+'Soubor vytvořen v režimu NOVÉ ZÁZNAMY' end Message(LocStr) Procedure Zapis6() LocStr='6/@'+Null(Program.Ico,8)+StrObdobi+6zz+' '+6t+' '+Rok(4) LocStr=FillStrR(LocStr,64,' ',True) Writeln(TXTFileD,LocStr); end Procedure Zapis9@$(StranaMD:Boolean) 9ccccccccc=ValidateStr(Denik.Doklad,'0123456789'); 9mcastka=Null('',18) 9dcastka=Null('',18) 9mznamenko=' ' 9dznamenko=' ' 9nnn='000' ;UZ nastroj 9z='0' ;UZ zdroj 9uuuuu='00000' ;UZ 9oooooo='000000' ;ODPA 1.cast 9jjjjjjjjjj='0000000000' ;ORJ if(Length(9ccccccccc)>9) begin 9ccccccccc=Copy(9ccccccccc,1,9) end if(Length(9ccccccccc)<9) begin 9ccccccccc=FillStrL(9ccccccccc,9,'0') end if(StranaMD) begin 9sss=Null(Denik.mdSU,3) ;if(Denik.mdAU<100) ; 9aaaa=Null(Denik.mdAU,3)+'0' ;else 9aaaa=Null(Denik.mdAU,4) ;if(Denik.mdSU=343) ; 9aaaa=Null(Denik.mdAU,4) 9mcastka=Null(Str(Abs(Denik.Castka)*100,,0),18) if(Denik.Castka>=0) 9mznamenko=' ' else 9mznamenko='-' if(Po1) begin if((Word(Denik.mdSU/100)=Program.TridaNaklady)or(Word(Denik.mdSU/100)=Program.TridaVynosy)) begin DoplnOdpaOrj(True) DoplnUZ(True) end end else begin DoplnOdpaOrj(True) if((Word(Denik.mdSU/100)=Program.TridaNaklady)or(Word(Denik.mdSU/100)=Program.TridaVynosy)) begin DoplnUZ(True) end end end else begin 9sss=Null(Denik.dalSU,3) ;if(Denik.dalAU<100) ; 9aaaa=Null(Denik.dalAU,3)+'0' ;else 9aaaa=Null(Denik.dalAU,4) ;if(Denik.dalSU=343) ; 9aaaa=Null(Denik.dalAU,4) 9dcastka=Null(Str(Abs(Denik.Castka)*100,,0),18) if(Denik.Castka>=0) 9dznamenko=' ' else 9dznamenko='-' if(Po1) begin if((Word(Denik.dalSU/100)=Program.TridaNaklady)or(Word(Denik.dalSU/100)=Program.TridaVynosy)) begin DoplnOdpaOrj(False) DoplnUZ(False) end end else begin DoplnOdpaOrj(False) if((Word(Denik.dalSU/100)=Program.TridaNaklady)or(Word(Denik.dalSU/100)=Program.TridaVynosy)) begin DoplnUZ(False) end end end 9dd=Null(DenZData(StrDate(Denik.Datum)),2) if((CompareStr(9sss,'343')) or (CompareStr(9sss,'395'))) LocStr='G/@'+9dd+9ccccccccc+'000'+9sss+9aaaa+9kk+9oooooo+9llll+9zzz+9nnn+9z+9uuuuu+9jjjjjjjjjj+'00000000'+'00000'+9mcastka+9mznamenko+9dcastka+9dznamenko else LocStr='G/@'+9dd+9ccccccccc+'000'+9sss+9aaaa+9kk+9oooooo+9llll+9zzz+9nnn+9z+9uuuuu+9jjjjjjjjjj+Null(Denik.Ico,8)+'00000'+9mcastka+9mznamenko+9dcastka+9dznamenko LocStr=FillStrR(LocStr,111,' ',True) Writeln(TXTFileD,LocStr); if(Beru9text) begin LocStr='G/$'+Null(Str(Denik.SubLine+1),4)+9ccccccccc+Denik.Popis Writeln(TXTFileD,LocStr); end end Procedure Zapis9#() Popis='' if(PoslCislo=0) goto(Ven9#) if(not Beru9text) goto(Ven9#) ;vyhledani nadr. dokladu podle int.cisla predchozi vety if(PoslAgenda=1) begin KeyUcetniUdalost4.Length=4 KeyUcetniUdalost4.Cislo=Swapl(PoslCislo) LocB=SearchKey(KeyUcetniUdalost4,VetaN) if(LocB) begin ReadRec(UcetniUdalost,VetaN) Popis=UcetniUdalost.Popis end end if(PoslAgenda=2) begin KeyPohledavka8.Length=4 KeyPohledavka8.Cislo=Swapl(PoslCislo) LocB=SearchKey(KeyPohledavka8,VetaN) if(LocB) begin ReadRec(Pohledavka,VetaN) Popis=Pohledavka.Popis end end if(PoslAgenda=3) begin KeyZavazek8.Length=4 KeyZavazek8.Cislo=Swapl(PoslCislo) LocB=SearchKey(KeyZavazek8,VetaN) if(LocB) begin ReadRec(Zavazek,VetaN) Popis=Zavazek.Popis end end if(PoslAgenda=4) begin KeyPokladna7.Length=4 KeyPokladna7.Cislo=Swapl(PoslCislo) LocB=SearchKey(KeyPokladna7,VetaN) if(LocB) begin ReadRec(Pokladna,VetaN) Popis=Pokladna.Popis end end if(PoslAgenda=5) begin KeyBanka7.Length=4 KeyBanka7.Cislo=Swapl(PoslCislo) LocB=SearchKey(KeyBanka7,VetaN) if(LocB) begin ReadRec(Banka,VetaN) Popis=Banka.Popis end end if(PoslAgenda=6) begin KeyOstatniUhrady7.Length=4 KeyOstatniUhrady7.Cislo=Swapl(PoslCislo) LocB=SearchKey(KeyOstatniUhrady7,VetaN) if(LocB) begin ReadRec(OstatniUhrady,VetaN) Popis=OstatniUhrady.Popis end end if(PoslAgenda=7) begin KeyPohyb1.Length=4 KeyPohyb1.Cislo=Swapl(PoslCislo) LocB=SearchKey(KeyPohyb1,VetaN) if(LocB) begin ReadRec(Pohyb,VetaN) Popis=Pohyb.Popis end end if(PoslAgenda=8) begin KeySkupinovaOperace1.Length=4 KeySkupinovaOperace1.Cislo=Swapl(PoslCislo) LocB=SearchKey(KeySkupinovaOperace1,VetaN) if(LocB) begin ReadRec(SkupinovaOperace,VetaN) Popis=SkupinovaOperace.Popis end end if(PoslAgenda=9) begin KeyMajetek6.Length=4 KeyMajetek6.Cislo=Swapl(PoslCislo) LocB=SearchKey(KeyMajetek6,VetaN) if(LocB) begin ReadRec(Majetek,VetaN) Popis=Majetek.Popis end end if(PoslAgenda=10) begin KeyDKP6.Length=4 KeyDKP6.Cislo=Swapl(PoslCislo) LocB=SearchKey(KeyDKP6,VetaN) if(LocB) begin ReadRec(DKP,VetaN) Popis=DKP.Popis end end LocStr='G/#0001'+9ccccccccc+Popis ;LocStr=FillStrR(LocStr,140,' ',True) Writeln(TXTFileD,LocStr); Ven9#: PoslCislo=Denik.Cislo PoslAgenda=Denik.Agenda end Procedure DoplnOdpaOrj(StranaMD:Boolean) 9oooooo='000000' ;OD - oddil 9jjjjjjjjjj='0000000000' ;ORJ LocStrDopl:String=9oooooo if(StranaMD) LocODPAORJ=Denik.mdHS else LocODPAORJ=Denik.dalHS ;použít tabulku i=1 While(i<=PocetODPAORJ) begin if(LocODPAORJ=HS[i]) begin LocStrDopl=ODPAORJ[i] goto(KonecCyklu2) end inc(i) end KonecCyklu2: if(Po1) 9oooooo=Null(LocStrDopl,6) else 9jjjjjjjjjj=Null(LocStrDopl,10) end Procedure DoplnUZ(StranaMD:Boolean) LocUZ=0 9nnn='000' 9z='0' 9uuuuu='00000' if(StranaMD) LocUZ=Denik.mdKJ else LocUZ=Denik.dalKJ if(LPrevodUZ) begin ;použít tabulku i=1 While(i<=PocetUZ) begin if(LocUZ=KJ[i]) begin LocUZ=UZ[i] 9nnn=Null(UZNA[i],3) 9z=Null(UZZD[i],1) goto(KonecCyklu1) end inc(i) end KonecCyklu1: end if(LocUZ>99999) begin ;je delsi, oseknout zprava, dat jim do napovedy, ze je oseknuto, mozna do nejakeho protokolu, pokud tady existuje 9uuuuu=Str(LocUZ) 9uuuuu=Copy(LocUZ,1,5) end else begin 9uuuuu=Null(LocUZ,5) end end END