; vypocet pohledavek a zavazku podle splatnosti 30-90-180-365 ; verze z 5.2.2005 ; Autor: WinDUO Team Name('Nezaplacené 30-60- po splatnosti') Designed('ZavMan#1','PohlMan#1') Author('Winduo Team','EMail: winduo@winduo.cz','http://www.winduo.com','http://www.winduo.cz') Descr('30-60-90-180-365 dní po splatnosti') NewWNS('F3060.WNS','Faktury po splatnosti') WNSType(1); UsageFilter(not Program.DanovaEvidence) ;DeclareRec('Program') LocB:Boolean LocW:Word LocStr:String Pozice:LongInt ; definuje proměnnou pro status Beru:Boolean BeruZalohy:Boolean BeruZaznam:Boolean Zalohovka:Boolean Vysledek:String VetaF:LongInt ; pro tyto firmy nelze vypočítat: IF(Program.TypFirmy=1) ; přísp. do roku 1999 LocB=True IF(Program.TypFirmy=2) ; strany a hnuti do roku 1999 LocB=True IF(Program.TypFirmy=3) ; spor.druzstva do roku 2001 LocB=True IF(Program.TypFirmy=4) ; obecne prospesne LocB=True IF(Program.TypFirmy=7) ; banky a ostatni financni instituce (od roku 2002) LocB=True IF(Program.TypFirmy>7) ; nedef. nebo nove LocB=True IF(LocB) Halt('Výpočet není určen pro Váš typ firmy: '+Str(Program.TypFirmy,2,0)) ;DlgFollowMouse(True) ValidDatum:String='0123456789.' ValidNumer:String='0123456789' Zaznam2M:String Zaznam1J:String Zaznam1M:String Odkud:String[1]=UpCase(Copy(GetBindName(),1,1)) if(CompareStr(Odkud,'P')) begin Zaznam1J='pohledávka' Zaznam1M='pohledávky' Zaznam2M='pohledávek' end else begin Zaznam1J='závazek' Zaznam1M='závazky' Zaznam2M='závazků' end INI:String=DataPath+'VYKAZY.INI' PodpisJmeno:String=GetUserName() DatumStr:String=GetFromIni('F3060','DatumD',INI) DatumD:Word Zaokr1:Boolean=True ;je-li True, tiskne presne Zaokr2:Boolean=False ;pomocná jen kvůli dialogu Zaokr:Word=VAL(GetFromIni('F3060','Zaokr',INI)) if(Zaokr=1) Zaokr1=True if(Zaokr=2) Zaokr2=True TiskDetaily:Boolean=False ;je-li True, tiskne i detailni rozpis, jinak pouze součtovou tabulku TiskDetaily=GetBoolean(GetFromIni('F3060','TiskDetaily',INI)) KO1:Boolean=False ;je-li True, je nezauctovana vedena jako kratkodoba obchodni KO2:Boolean=False ;pomocná jen kvůli dialogu KO3:Boolean=False ;pomocná jen kvůli dialogu KrObch:Word=VAL(GetFromIni('F3060','KrObch',INI)) if(KrObch=1) KO1=True if(KrObch=2) KO2=True if(KrObch=3) KO3=True ;definice čísel řádků výkazů DlRadekOd:Word=0 DlRadekDo:Word=0 KrRadekOd:Word=0 KrRadekDo:Word=0 DlObchod:Word=0 KrObchod:Word=0 ;nacteni cisel radku z TABu SouborRozv:TextFile Open(SouborRozv,GetTabName(1)) While(not(EOF(SouborRozv))) begin LocStr=Readln(SouborRozv) if(CompareStr(Copy(LocStr,1,1),'*')) begin if(CompareStr(UpCase(Copy(LocStr,2,5)),'D'+Odkud+'OD=')) ;*DPOd begin LocStr=ToChar(' ',LocStr) DlRadekOd=Val(FromChar('=',LocStr)) end if(CompareStr(UpCase(Copy(LocStr,2,5)),'D'+Odkud+'DO=')) ;*DPDo begin LocStr=ToChar(' ',LocStr) DlRadekDo=Val(FromChar('=',LocStr)) end if(CompareStr(UpCase(Copy(LocStr,2,5)),'K'+Odkud+'OD=')) ;*KPOd begin LocStr=ToChar(' ',LocStr) KrRadekOd=Val(FromChar('=',LocStr)) end if(CompareStr(UpCase(Copy(LocStr,2,5)),'K'+Odkud+'DO=')) ;*KPDo begin LocStr=ToChar(' ',LocStr) KrRadekDo=Val(FromChar('=',LocStr)) end if(CompareStr(UpCase(Copy(LocStr,2,5)),'D'+Odkud+'OB=')) ;*DPOb begin LocStr=ToChar(' ',LocStr) DlObchod=Val(FromChar('=',LocStr)) end if(CompareStr(UpCase(Copy(LocStr,2,5)),'K'+Odkud+'OB=')) ;*KPOb begin LocStr=ToChar(' ',LocStr) KrObchod=Val(FromChar('=',LocStr)) end end end if(CompareStr(Odkud,'P')) ;pohledávky begin ;nacteni radku pohl z INI: ;nacist hodnoty radku z INI. Je-li NULA, nechat default. Rozlisovat, je-li pohl nebo zavaz. DlRadekOdUz:Word=VAL(GetFromIni('F3060','DlRadekOdP',INI)) DlRadekDoUz:Word=VAL(GetFromIni('F3060','DlRadekDoP',INI)) KrRadekOdUz:Word=VAL(GetFromIni('F3060','KrRadekOdP',INI)) KrRadekDoUz:Word=VAL(GetFromIni('F3060','KrRadekDoP',INI)) DlObchodUz:Word=VAL(GetFromIni('F3060','DlObchodP',INI)) KrObchodUz:Word=VAL(GetFromIni('F3060','KrObchodP',INI)) end else ;závazky: begin ;nacteni radku zavazku z INI: ;nacist hodnoty radku z INI. Je-li NULA, nechat default. Rozlisovat, je-li pohl nebo zavaz. DlRadekOdUz:Word=VAL(GetFromIni('F3060','DlRadekOdZ',INI)) DlRadekDoUz:Word=VAL(GetFromIni('F3060','DlRadekDoZ',INI)) KrRadekOdUz:Word=VAL(GetFromIni('F3060','KrRadekOdZ',INI)) KrRadekDoUz:Word=VAL(GetFromIni('F3060','KrRadekDoZ',INI)) DlObchodUz:Word=VAL(GetFromIni('F3060','DlObchodZ',INI)) KrObchodUz:Word=VAL(GetFromIni('F3060','KrObchodZ',INI)) end ;doplni do uzivatelskeho default, je-li uzivatelsky = NULA if(DlRadekOdUz=0) DlRadekOdUz=DlRadekOd if(DlRadekDoUz=0) DlRadekDoUz=DlRadekDo if(KrRadekOdUz=0) KrRadekOdUz=KrRadekOd if(KrRadekDoUz=0) KrRadekDoUz=KrRadekDo if(DlObchodUz=0) DlObchodUz=DlObchod if(KrObchodUz=0) KrObchodUz=KrObchod ;definice dialogu AktualCover:Integer=0 DefDialog('Upřesnění pro správný výpočet',492,372) DlgShade(-1,'',4,4,482,298) DlgButton(id_OK,'OK',334,306); DlgOnLineHelp(id_OK,'Pokračuje ve zpracování') DlgButton(id_Cancel,'Zpět',404,306); DlgOnLineHelp(id_Cancel,'Ukončí bez zpracování') DlgCover(1710,2,8,8,474,290,False,AktualCover) ;{####### Cover 1 #######} SetCover(1,'Různé') DlgStatic(-1,'Datum, ke kterému bude vyhodnoceno:',10,16,255) DlgEditDate(101,DatumStr,270,11,78,22,10,,ValidDatum) DlgOnLineHelp(101,'Vyhodnocení nezaplacených '+Zaznam2M+' bude provedeno k datu (datum splatnosti)') DlgStatic(-1,'&Součtová tabulka bude:',10,36,154) DlgRadioButton(102,Zaokr1,170,34,75,,'- přesně',102,103) DlgOnLineHelp(102,'Součty za jednotlivé kategorie '+Zaznam2M+' budou uvedeny přesně') DlgRadioButton(103,Zaokr2,285,34,180,,'- zaokrouhleně na tisíce',102,103) DlgOnLineHelp(103,'Součty za jednotlivé kategorie '+Zaznam2M+' budou zaokrouhleny na tisíce') DlgCheckBox(104,TiskDetaily,10,55,250,,'tisknout včetně detailního rozpisu') DlgOnLineHelp(104,'Lze tisknout pouze rekapitulační součtovou tabulku nebo i detailní rozpis ' '+Zaznam2M) DlgStatic(-1,'Zařazení '+Zaznam2M+' je prováděno podle zaúčtování.',10,80,454) DlgStatic(-1,'Pokud není záznam zaúčtován (nebo chybně), bude zařazen:',10,102,454) DlgRadioButton(105,KO1,20,124,365,,'- jako krátkodobý z obchodních vztahů',105,107) DlgOnLineHelp(105,'Tato sestava vyhodnocuje '+Zaznam1M+' z obchodních vztahů a ostatní a dále krátkodobé a dlouhodobé.K tomu využívá údajů o zaúčtování.Pokud je záznam zaúčtován tak,že z rozvrhu není možno zatřídit,bude zařazen jako krátk.z obch.styku') DlgRadioButton(106,KO2,20,148,365,,'- jako součet nezaúčtovaných',105,107) DlgOnLineHelp(106,'Tato sestava vyhodnocuje '+Zaznam1M+' z obchodních vztahů a ostatní a dále krátkodobé a dlouhodobé. K tomu využívá údajů o zaúčtování. Pokud je chybně (nebo vůbec) zaúčtován, bude zařazen jako samostatný součet') DlgRadioButton(107,KO3,20,172,365,,'- nebude zařazen do zpracování',105,107) DlgOnLineHelp(107,'Tato sestava vyhodnocuje '+Zaznam1M+' z obchodních vztahů a ostatní a dále krátkodobé a dlouhodobé. K tomu využívá údajů o zaúčtování. Pokud je chybně (nebo vůbec) zaúčtován, nebude zařazen do zpracování') DlgCheckBox(108,BeruZalohy,10,195,350,,'zařadit zálohové '+Zaznam1M+' do výpočtu') DlgOnLineHelp(108,'Zálohové '+Zaznam1M+' budou nebo nebudou zahrnyty do výpočtu') ;{####### Cover 2 #######} SetCover(2,'Řádky') ;definovat tabulku, ktery ucet je dlouho a ktery kratko... DlgStatic(-1,'Zadání čísel řádků rozvahy pro zatřídění mezi dlouhodobé',16,10,390) DlgStatic(-1,'a krátkodobé '+Zaznam1M+':',16,30,390) DlgStatic(-1,'Číslo řádku rozvahy pro začátek intervalu dlouhod. '+Zaznam2M+':',6,54,425) DlgEdit(201,DlRadekOdUz,437,52,30,,3,ES_RIGHT,ValidNumer) DlgOnLineHelp(201,'Zadáte-li NULU, bude dosazena hodnota '+Str(DlRadekOd,3,0)+', zadáte-li 999, bude tato kategorie nulová, zadáte-li cokoliv jiného, proběhne výpočet podle Vašeho zadání') DlgStatic(-1,'Číslo řádku rozvahy pro konec intervalu dlouhod. '+Zaznam2M+':',6,76,425) DlgEdit(202,DlRadekDoUz,437,74,30,,3,ES_RIGHT,ValidNumer) DlgOnLineHelp(202,'Zadáte-li NULU, bude dosazena hodnota '+Str(DlRadekDo,3,0)+', zadáte-li 999, bude tato kategorie nulová, zadáte-li cokoliv jiného, proběhne výpočet podle Vašeho zadání') DlgStatic(-1,'Číslo řádku rozvahy pro začátek intervalu krátkod. '+Zaznam2M+':',6,98,425) DlgEdit(203,KrRadekOdUz,437,96,30,,3,ES_RIGHT,ValidNumer) DlgOnLineHelp(203,'Zadáte-li NULU, bude dosazena hodnota '+Str(KrRadekOd,3,0)+', zadáte-li 999, bude tato kategorie nulová, zadáte-li cokoliv jiného, proběhne výpočet podle Vašeho zadání') DlgStatic(-1,'Číslo řádku rozvahy pro konec intervalu krátkod. '+Zaznam2M+':',6,120,425) DlgEdit(204,KrRadekDoUz,437,118,30,,3,ES_RIGHT,ValidNumer) DlgOnLineHelp(204,'Zadáte-li NULU, bude dosazena hodnota '+Str(KrRadekDo,3,0)+', zadáte-li 999, bude tato kategorie nulová, zadáte-li cokoliv jiného, proběhne výpočet podle Vašeho zadání') DlgStatic(-1,'Zadání čísel řádků rozvahy pro zatřídění mezi obchodní a neobchodní:',10,147,459) DlgStatic(-1,'Číslo řádku rozvahy pro dlouhod. '+Zaznam1M+' z obchodních vztahů:',6,171,431) DlgEdit(205,DlObchodUz,437,169,30,,3,ES_RIGHT,ValidNumer) DlgOnLineHelp(205,'Zadáte-li NULU, bude dosazena hodnota '+Str(DlObchod,3,0)+', zadáte-li 999, bude tato kategorie nulová, zadáte-li cokoliv jiného, proběhne výpočet podle Vašeho zadání') DlgStatic(-1,'Číslo řádku rozvahy pro krátkod. '+Zaznam1M+' z obchodních vztahů:',6,193,431) DlgEdit(206,KrObchodUz,437,191,30,,3,ES_RIGHT,ValidNumer) DlgOnLineHelp(206,'Zadáte-li NULU, bude dosazena hodnota '+Str(KrObchod,3,0)+', zadáte-li 999, bude tato kategorie nulová, zadáte-li cokoliv jiného, proběhne výpočet podle Vašeho zadání') DlgStatic(-1,'V případě nejasností doporučujeme vytisknout v účetním rozvrhu',16,220,454) DlgStatic(-1,'sestavu Opis výkazu Rozvaha',16,239,454) ;{####### vyhodnocení ######} Result:Integer=DlgExecute(True) if(Result<>id_OK) Halt SetToIni('F3060','DatumD',DatumStr,INI) DatumD=ValDate(DatumStr) if(DatumD=0) DatumD=GetDate() if(Zaokr1) Zaokr=1 if(Zaokr2) Zaokr=2 SetToIni('F3060','Zaokr',Str(Zaokr,1,0),INI) SetToIni('F3060','TiskDetaily',TiskDetaily,INI) if(KO1) KrObch=1 if(KO2) KrObch=2 if(KO3) KrObch=3 SetToIni('F3060','KrObch',Str(KrObch,1,0),INI) ;ulozit hodnoty radku do INI. Rozlisovat, je-li pohl nebo zavaz.: if(CompareStr(Odkud,'P')) ;pohledavky begin ;zadal cokoliv krome nuly - pouzit jeho cislo, ulozit jeho cislo ;zadal 0 - pouzit default, ulozit 0 SetToIni('F3060','DlRadekOdP',DlRadekOdUz,INI) if(DlRadekOdUz<>0) DlRadekOd=DlRadekOdUz SetToIni('F3060','DlRadekDoP',DlRadekDoUz,INI) if(DlRadekDoUz<>0) DlRadekDo=DlRadekDoUz SetToIni('F3060','KrRadekOdP',KrRadekOdUz,INI) if(KrRadekOdUz<>0) KrRadekOd=KrRadekOdUz SetToIni('F3060','KrRadekDoP',KrRadekDoUz,INI) if(KrRadekDoUz<>0) KrRadekDo=KrRadekDoUz SetToIni('F3060','DlObchodP',DlObchodUz,INI) if(DlObchodUz<>0) DlObchod=DlObchodUz SetToIni('F3060','KrObchodP',KrObchodUz,INI) if(KrObchodUz<>0) KrObchod=KrObchodUz end else ;zavazky begin ;zadal cokoliv krome nuly - pouzit jeho cislo, ulozit jeho cislo ;zadal 0 - pouzit default, ulozit 0 SetToIni('F3060','DlRadekOdZ',DlRadekOdUz,INI) if(DlRadekOdUz<>0) DlRadekOd=DlRadekOdUz SetToIni('F3060','DlRadekDoZ',DlRadekDoUz,INI) if(DlRadekDoUz<>0) DlRadekDo=DlRadekDoUz SetToIni('F3060','KrRadekOdZ',KrRadekOdUz,INI) if(KrRadekOdUz<>0) KrRadekOd=KrRadekOdUz SetToIni('F3060','KrRadekDoZ',KrRadekDoUz,INI) if(KrRadekDoUz<>0) KrRadekDo=KrRadekDoUz SetToIni('F3060','DlObchodZ',DlObchodUz,INI) if(DlObchodUz<>0) DlObchod=DlObchodUz SetToIni('F3060','KrObchodZ',KrObchodUz,INI) if(KrObchodUz<>0) KrObchod=KrObchodUz end if(DlRadekOd>DlRadekDo) Message('Nesmyslný interval řádků pro dlouhodobé '+Zaznam1m+'. Údaj OD='+Str(DlRadekOd)+' je větší nežli DO='+Str(DlRadekDo)+'. Výpočet bude asi nesprávný.') if(KrRadekOd>KrRadekDo) Message('Nesmyslný interval řádků pro krátkodobé '+Zaznam1m+'. Údaj OD='+Str(KrRadekOd)+' je větší nežli DO='+Str(KrRadekDo)+'. Výpočet bude asi nesprávný.') if((DlObchod<>999)and(DlObchod>DlRadekDo)) Message('Nesmyslný údaj pro dlouhodobé obchodní '+Zaznam1m+'. Údaj ='+Str(DlObchod)+' je větší nežli interval dlouhodobé DO='+Str(DlRadekDo)+'. Výpočet bude asi nesprávný.') if((DlRadekOd<>999)and(DlObchod999)and(KrObchod>KrRadekDo)) Message('Nesmyslný údaj pro krátkodobé obchodní '+Zaznam1m+'. Údaj ='+Str(KrObchod)+' je větší nežli interval dlouhodobé DO='+Str(KrRadekDo)+'. Výpočet bude asi nesprávný.') if((KrRadekOd<>999)and(KrObchod0)) Kod=255 if(@LocStrVyst>DatumD) Kod=255 if(Kod<>255) begin ;číslo účtu v účetním kódu KeyUcetniRozvrh1.Length=4 LocStr=Kniha+'.rSU' KeyUcetniRozvrh1.SU=Swap(@LocStr) LocStr=Kniha+'.rAU' KeyUcetniRozvrh1.AU=Swap(@LocStr) if(FindKey(KeyUcetniRozvrh1,VetaUR)) begin ReadRec(UcetniRozvrh,VetaUR) Zatrid=False if((UcetniRozvrh.frad>=DlRadekOd)and(UcetniRozvrh.frad<=DlRadekDo)) begin Kratkodoba=False Zatrid=True end if((UcetniRozvrh.frad>=KrRadekOd)and(UcetniRozvrh.frad<=KrRadekDo)) begin Kratkodoba=True Zatrid=True end if((UcetniRozvrh.frad=DlObchod)or(UcetniRozvrh.frad=KrObchod)) else Obchodni=False end else ;nenalezeno v rozvrhu begin Kratkodoba=True Obchodni=True end ;podle data splatnosti, zaplaceni (dilci uhrady !!!) a Kratkodoba + Obchodni priradit kod Kod=0 Uhrazeno=0 if(@LocStrUhr<>0) begin ;zrusit: ;Uhrazeno=@LocStrUhr if(CompareStr(Odkud,'P')) ZjistiUhradu('@LocStrUhr',2,@LocStrCis,DatumD) else ZjistiUhradu('@LocStrUhr',3,@LocStrCis,DatumD) Uhrazeno=@LocStrUhr TempKniha.Uhrazeno=Uhrazeno ;do Uhrazeno nacist platby, ktere jsou starsi nezli DatumD end ; do lhuty: if((@LocStrSpl>=DatumD)and((@LocStrZapl=0)or(@LocStrZapl>DatumD))) begin if((Zatrid=True)and(Kratkodoba=False)and(Obchodni)) ;dlouhodoba obchodni do lhuty begin Kod=40 Castka40=Castka40+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=False)and(Obchodni=False)) ;dlouhodoba neobchodni do lhuty begin Kod=70 Castka70=Castka70+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=True)and(Obchodni=True)) ;kratkodoba obchodni do lhuty begin Kod=110 Castka110=Castka110+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=True)and(Obchodni=False)) ;kratkodoba neobchodni do lhuty begin Kod=200 Castka200=Castka200+@LocStrCastka-Uhrazeno end ; dotazem, zda nezatridene chteji do kratkodobych obchodnich nebo mimo if(Zatrid=False) ;neni zatridena, nema cislo uctu begin if(KrObch=1) begin Kod=110 Castka110=Castka110+@LocStrCastka-Uhrazeno end else begin Kod=250 Castka250=Castka250+@LocStrCastka-Uhrazeno end end end ;po lhute do 30 dnu: if((@LocStrSpl=AddDay(DatumD,-30))and((@LocStrZapl=0)or(@LocStrZapl>DatumD))) begin if((Zatrid=True)and(Kratkodoba=False)and(Obchodni)) ;dlouhodoba obchodni begin Kod=50 Castka50=Castka50+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=False)and(Obchodni=False)) ;dlouhodoba neobchodni begin Kod=80 Castka80=Castka80+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=True)and(Obchodni=True)) ;kratkodoba obchodni begin Kod=130 Castka130=Castka130+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=True)and(Obchodni=False)) ;kratkodoba neobchodni begin Kod=210 Castka210=Castka210+@LocStrCastka-Uhrazeno end ; dotazem, zda nezatridene chteji do kratkodobych obchodnich nebo mimo if(Zatrid=False) ;neni zatridena, nema cislo uctu begin if(KrObch=1) begin Kod=130 Castka130=Castka130+@LocStrCastka-Uhrazeno end else begin Kod=250 Castka250=Castka250+@LocStrCastka-Uhrazeno end end end ;po lhute 31 - 60 dnu: if((@LocStrSpl=AddDay(DatumD,-60))and((@LocStrZapl=0)or(@LocStrZapl>DatumD))) begin if((Zatrid=True)and(Kratkodoba=False)and(Obchodni)) ;dlouhodoba obchodni begin Kod=50 Castka50=Castka50+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=False)and(Obchodni=False)) ;dlouhodoba neobchodni begin Kod=80 Castka80=Castka80+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=True)and(Obchodni=True)) ;kratkodoba obchodni begin Kod=140 Castka140=Castka140+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=True)and(Obchodni=False)) ;kratkodoba neobchodni begin Kod=210 Castka210=Castka210+@LocStrCastka-Uhrazeno end ; dotazem, zda nezatridene chteji do kratkodobych obchodnich nebo mimo if(Zatrid=False) ;neni zatridena, nema cislo uctu begin if(KrObch=1) begin Kod=140 Castka140=Castka140+@LocStrCastka-Uhrazeno end else begin Kod=250 Castka250=Castka250+@LocStrCastka-Uhrazeno end end end ;po lhute do 61 - 90 dnu: if((@LocStrSpl=AddDay(DatumD,-90))and((@LocStrZapl=0)or(@LocStrZapl>DatumD))) begin if((Zatrid=True)and(Kratkodoba=False)and(Obchodni)) ;dlouhodoba obchodni begin Kod=50 Castka50=Castka50+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=False)and(Obchodni=False)) ;dlouhodoba neobchodni begin Kod=80 Castka80=Castka80+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=True)and(Obchodni=True)) ;kratkodoba obchodni begin Kod=150 Castka150=Castka150+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=True)and(Obchodni=False)) ;kratkodoba neobchodni begin Kod=210 Castka210=Castka210+@LocStrCastka-Uhrazeno end ; dotazem, zda nezatridene chteji do kratkodobych obchodnich nebo mimo if(Zatrid=False) ;neni zatridena, nema cislo uctu begin if(KrObch=1) begin Kod=150 Castka150=Castka150+@LocStrCastka-Uhrazeno end else begin Kod=250 Castka250=Castka250+@LocStrCastka-Uhrazeno end end end ;po lhute do 91 - 180 dnu: if((@LocStrSpl=AddDay(DatumD,-180))and((@LocStrZapl=0)or(@LocStrZapl>DatumD))) begin if((Zatrid=True)and(Kratkodoba=False)and(Obchodni)) ;dlouhodoba obchodni begin Kod=50 Castka50=Castka50+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=False)and(Obchodni=False)) ;dlouhodoba neobchodni begin Kod=80 Castka80=Castka80+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=True)and(Obchodni=True)) ;kratkodoba obchodni begin Kod=160 Castka160=Castka160+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=True)and(Obchodni=False)) ;kratkodoba neobchodni begin Kod=210 Castka210=Castka210+@LocStrCastka-Uhrazeno end ; dotazem, zda nezatridene chteji do kratkodobych obchodnich nebo mimo if(Zatrid=False) ;neni zatridena, nema cislo uctu begin if(KrObch=1) begin Kod=160 Castka160=Castka160+@LocStrCastka-Uhrazeno end else begin Kod=250 Castka250=Castka250+@LocStrCastka-Uhrazeno end end end ;po lhute do 181 - 365 dnu: if((@LocStrSpl=AddDay(DatumD,-365))and((@LocStrZapl=0)or(@LocStrZapl>DatumD))) begin if((Zatrid=True)and(Kratkodoba=False)and(Obchodni)) ;dlouhodoba obchodni begin Kod=50 Castka50=Castka50+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=False)and(Obchodni=False)) ;dlouhodoba neobchodni begin Kod=80 Castka80=Castka80+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=True)and(Obchodni=True)) ;kratkodoba obchodni begin Kod=170 Castka170=Castka170+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=True)and(Obchodni=False)) ;kratkodoba neobchodni begin Kod=210 Castka210=Castka210+@LocStrCastka-Uhrazeno end ; dotazem, zda nezatridene chteji do kratkodobych obchodnich nebo mimo if(Zatrid=False) ;neni zatridena, nema cislo uctu begin if(KrObch=1) begin Kod=170 Castka170=Castka170+@LocStrCastka-Uhrazeno end else begin Kod=250 Castka250=Castka250+@LocStrCastka-Uhrazeno end end end ;po lhute nad 365 dnu: if((@LocStrSplDatumD))) begin if((Zatrid=True)and(Kratkodoba=False)and(Obchodni)) ;dlouhodoba obchodni begin Kod=50 Castka50=Castka50+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=False)and(Obchodni=False)) ;dlouhodoba neobchodni begin Kod=80 Castka80=Castka80+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=True)and(Obchodni=True)) ;kratkodoba obchodni begin Kod=180 Castka180=Castka180+@LocStrCastka-Uhrazeno end if((Zatrid=True)and(Kratkodoba=True)and(Obchodni=False)) ;kratkodoba neobchodni begin Kod=210 Castka210=Castka210+@LocStrCastka-Uhrazeno end ; dotazem, zda nezatridene chteji do kratkodobych obchodnich nebo mimo if(Zatrid=False) ;neni zatridena, nema cislo uctu begin if(KrObch=1) begin Kod=180 Castka180=Castka180+@LocStrCastka-Uhrazeno end else begin Kod=250 Castka250=Castka250+@LocStrCastka-Uhrazeno end end end end TempKlic.Kod=Kod TempKlic.Doklad=TempKniha.Doklad TempKlic.DatSpl=TempKniha.DatSpl AddKey(TempKlic,AddRec(TempKniha)) ;zapise udaje do indexoveho souboru i do datoveho souboru end end if(Zaokr1=False) begin Castka4=Round(Castka40/1000) Castka5=Round(Castka50/1000) Castka7=Round(Castka70/1000) Castka8=Round(Castka80/1000) Castka11=Round(Castka110/1000) Castka13=Round(Castka130/1000) Castka14=Round(Castka140/1000) Castka15=Round(Castka150/1000) Castka16=Round(Castka160/1000) Castka17=Round(Castka170/1000) Castka18=Round(Castka180/1000) Castka20=Round(Castka200/1000) Castka21=Round(Castka210/1000) Castka25=Round(Castka250/1000) end else begin Castka4=Castka40 Castka5=Castka50 Castka7=Castka70 Castka8=Castka80 Castka11=Castka110 Castka13=Castka130 Castka14=Castka140 Castka15=Castka150 Castka16=Castka160 Castka17=Castka170 Castka18=Castka180 Castka20=Castka200 Castka21=Castka210 Castka25=Castka250 end Castka19=Castka20+Castka21 Castka12=Castka13+Castka14+Castka15+Castka16+Castka17+Castka18 Castka10=Castka11+Castka12 Castka9=Castka10+Castka19 Castka6=Castka7+Castka8 Castka3=Castka4+Castka5 Castka2=Castka3+Castka6 if(KrObch=3) Castka1=Castka2+Castka9 else Castka1=Castka2+Castka9+Castka25 SetDescr(0,0,TA_Right|descr_PageNum,'Strana: '); SetDescr(1,0,TA_Center,UpCase(Copy(Zaznam1M,1,1))+Copy(Zaznam1M,2,10)+' po splatnosti k datu '+StrDate(DatumD)); SetDescr(2,0,TA_Left|descr_Date,'Datum: '); SetDescr(3,1,TA_Left|descr_UserDescr,''); ;definice hlavicky pro tisk 1 stránky: SetColumn(0,ta_Left,44) ;text SetColumn(1,ta_Right,12) ;Castka LocStr='' if(Zaokr1=False) LocStr='(zaokrouhleno na tisíce) '+Program.Mena SetHead('Struktura '+Zaznam2M+' k '+StrDate(DatumD)+' '+LocStr+'\tSoučet'); AddLine(UpCase(Copy(Zaznam1M,1,1))+Copy(Zaznam1M,2,9)+#9+StrFinanc(Castka1,2)) AddLine('Dlouhodobé '+Zaznam1M+#9+StrFinanc(Castka2,2)) AddLine('Dlouhodobé '+Zaznam1M+' z obchodních vztahů'+#9+StrFinanc(Castka3,2)) AddLine(' z toho: do lhůty'+#9+StrFinanc(Castka4,2)) AddLine(' po lhůtě'+#9+StrFinanc(Castka5,2)) AddLine('Dlouhodobé neobchodní '+Zaznam1M+#9+StrFinanc(Castka6,2)) AddLine(' z toho: do lhůty'+#9+StrFinanc(Castka7,2)) AddLine(' po lhůtě'+#9+StrFinanc(Castka8,2)) AddLine('Krátkodobé '+Zaznam1M+#9+StrFinanc(Castka9,2)) AddLine('Krátkodobé '+Zaznam1M+' z obchodních vztahů'+#9+StrFinanc(Castka10,2)) AddLine(' z toho: do lhůty'+#9+StrFinanc(Castka11,2)) AddLine(' po lhůtě'+#9+StrFinanc(Castka12,2)) AddLine(' - do 30 dnů'+#9+StrFinanc(Castka13,2)) AddLine(' - 31 až 60 dnů'+#9+StrFinanc(Castka14,2)) AddLine(' - 61 až 90 dnů'+#9+StrFinanc(Castka15,2)) AddLine(' - 91 až 180 dnů'+#9+StrFinanc(Castka16,2)) AddLine(' - 181 až 365 dnů'+#9+StrFinanc(Castka17,2)) AddLine(' - nad 365 dnů'+#9+StrFinanc(Castka18,2)) AddLine('Krátkodobé neobchodní '+Zaznam1M+#9+StrFinanc(Castka19,2)) AddLine(' z toho: do lhůty'+#9+StrFinanc(Castka20,2)) AddLine(' po lhůtě'+#9+StrFinanc(Castka21,2)) if(KrObch=2) AddLine('Ostatní nezaúčtované '+Zaznam1M+#9+StrFinanc(Castka25,2)) if((KrObch=1)and(Castka25<>0)) AddLine('Ostatní nezaúčtované '+Zaznam1M+#9+StrFinanc(Castka25,2)); tudy by nikdy nemel jit SetNewMax(UsedKeys(TempKlic)) SetStatusText('Probíhá tisk detailních záznamů') SetStatusRemark('') Pozice=0 if(TiskDetaily) begin NextPageWNS ;definice hlavicky pro tisk: SetColumn(0,ta_Left,10) ;Doklad SetColumn(1,ta_Left,10) ;z Data SetColumn(2,ta_Left,35) ;Popis SetColumn(3,ta_Left,8) ;ICO SetColumn(4,ta_Left,35) ;nazev partnera SetColumn(5,ta_Left,3) ;rSU SetColumn(6,ta_Left,3) ;rAU SetColumn(7,ta_Right,12) ;Castka celkem SetColumn(8,ta_Right,12) ;Castka uhrazeno SetColumn(9,ta_Right,12) ;Castka zbyva ChangePageFormat SetHead('Doklad\tSplatnost\tPopis\tIČ\tNázev obch. partnera\tSU\tAU\tČástka celkem\tUhrazeno\tk úhradě'); ClearKey(TempKlic) KodOld:Byte=0 Poprve:Boolean=True While(NextKey(TempKlic,Veta)) ;cyklus pro tisk podle noveho setrideni begin Inc(Pozice) ; zvyseni citace zpracovanych vet SetStatus(Pozice) ; nastaveni stavoveho prouzku ReadRec(TempKniha,Veta) if(KodOld<>TempKlic.Kod) begin ; tisk paticek a hlavicek if(Poprve) begin Poprve=False end else begin beru=True if(KodOld=255) beru=False if(KodOld=0) beru=False if((KodOld=250)and(KrObch=3)) beru=False if(beru) begin LocStr='Castka'+Str(KodOld) AddComment('Součet '+#9+#9+StrFinanc(@LocStr,2)) end end if(TempKlic.Kod=40) begin AddComment('') AddComment('Dlouhodobé '+Zaznam1M+' z obchodních vztahů do lhůty splatnosti') end if(TempKlic.Kod=50) begin AddComment('') AddComment('Dlouhodobé '+Zaznam1M+' z obchodních vztahů po lhůtě splatnosti') end if(TempKlic.Kod=70) begin AddComment('') AddComment('Dlouhodobé neobchodní '+Zaznam1M+' do lhůty splatnosti') end if(TempKlic.Kod=80) begin AddComment('') AddComment('Dlouhodobé neobchodní '+Zaznam1M+' po lhůtě splatnosti') end if(TempKlic.Kod=110) begin AddComment('') AddComment('Krátkodobé '+Zaznam1M+' z obchodních vztahů do lhůty splatnosti') end if(TempKlic.Kod=130) begin AddComment('') AddComment('Krátkodobé '+Zaznam1M+' z obchodních vztahů do 30 dnů po lhůtě splatnosti') end if(TempKlic.Kod=140) begin AddComment('') AddComment('Krátkodobé '+Zaznam1M+' z obchodních vztahů 31 až 60 dnů po lhůtě splatnosti') end if(TempKlic.Kod=150) begin AddComment('') AddComment('Krátkodobé '+Zaznam1M+' z obchodních vztahů 61 až 90 dnů po lhůtě splatnosti') end if(TempKlic.Kod=160) begin AddComment('') AddComment('Krátkodobé '+Zaznam1M+' z obchodních vztahů 91 až 180 dnů po lhůtě splatnosti') end if(TempKlic.Kod=170) begin AddComment('') AddComment('Krátkodobé '+Zaznam1M+' z obchodních vztahů 181 až 365 dnů po lhůtě splatnosti') end if(TempKlic.Kod=180) begin AddComment('') AddComment('Krátkodobé '+Zaznam1M+' z obchodních vztahů nad 365 dnů po lhůtě splatnosti') end if(TempKlic.Kod=200) begin AddComment('') AddComment('Krátkodobé neobchodní '+Zaznam1M+' do lhůty splatnosti') end if(TempKlic.Kod=210) begin AddComment('') AddComment('Krátkodobé neobchodní '+Zaznam1M+' po lhůtě splatnosti') end if((TempKlic.Kod=250)and(KrObch=2)) begin AddComment('') AddComment('Ostatní nezaúčtované (nebo chybně zaúčtované) '+Zaznam1M) end if((TempKlic.Kod=250)and(KrObch=1)) begin; tudy by nikdy neměl jít AddComment('') AddComment('Ostatní nezaúčtované ???'+Zaznam1M) end ; if(TempKlic.Kod=255) ; begin ; AddComment('') ; AddComment('NETISKNOUT! Ostatní (zaplacené) '+Zaznam1M) ; end KodOld=TempKlic.Kod end ;tisk radku beru=True if(TempKlic.Kod=255) beru=False if((TempKlic.Kod=250)and(KrObch=3)) beru=False ;if((TempKlic.Kod=250)and(KrObch=1)); takovy pripad by nemel byt, ale raději nevynechávat, co kdyby... ; beru=False if(beru) begin if(TempKniha.Ico=0) LocStr='' else LocStr=Null(TempKniha.Ico,8,True) AddText(TempKniha.Doklad+#9+StrDate(TempKniha.DatSpl)+#9+TempKniha.Popis+#9+LocStr) AddLine(#9+TempKniha.Firma+#9+Null(TempKniha.rSU,3,True)+#9+Null(TempKniha.rAU,3,True)+#9+StrFinanc(TempKniha.Castka,2)+#9+StrFinanc(TempKniha.Uhrazeno,2)+#9+StrFinanc(TempKniha.Castka-TempKniha.Uhrazeno,2)) end end beru=True if(KodOld=255) beru=False if(KodOld=0) beru=False if((KodOld=250)and(KrObch=3)) beru=False if(beru) begin LocStr='Castka'+Str(KodOld) AddComment('Součet '+#9+#9+StrFinanc(@LocStr,2)) end end CloseTempFile(TempKniha) Procedure ZjistiUhraduVAgende(Vysledek:String,Agenda:Byte,Cislo:LongInt,Datum:Word,AgendaName:String); KeyName:String='Key'+AgendaName+'9'; SubName:String=KeyName+'.Length'; UhrVeta:LongInt; @SubName=5; AgdName:String=KeyName+'.SAgd'; @Agdname=Agenda; CisloName:String=KeyName+'.SCislo'; @CisloName=SwapL(Cislo); CastkaName:String=AgendaName+'.Castka' DatumName:String=AgendaName+'.Datum' VydajName:String=AgendaName+'.Vydaj' if(FindKey(@KeyName,UhrVeta)) begin DalsiVeta: ReadRec(@AgendaName,UhrVeta); if(@DatumName<=Datum) begin if(Agenda=2) begin if(@VydajName) @vysledek=@vysledek-@CastkaName else @vysledek=@vysledek+@CastkaName end else if(Agenda=3) begin if(@VydajName) @vysledek=@vysledek+@CastkaName else @vysledek=@vysledek-@CastkaName end; end; if(NextKey(@KeyName,UhrVeta)) begin if(@CisloName=SwapL(Cislo)) begin if(@AgdName=Agenda) GoTo(DalsiVeta); end; end; end; end; Procedure ZjistiUhradu(Vysledek:String,Agenda:Byte,Cislo:LongInt,Datum:Word); @vysledek=0 ZjistiUhraduVAgende(Vysledek,Agenda,Cislo,Datum,'Pokladna'); ZjistiUhraduVAgende(Vysledek,Agenda,Cislo,Datum,'Banka'); ZjistiUhraduVAgende(Vysledek,Agenda,Cislo,Datum,'OstatniUhrady'); end; Procedure JeZalohovka(Vysledek:String) @Vysledek=False if(CompareStr(Odkud,'P')) begin ;pohledavka if(Pohledavka.PohlFlags&1<>0) begin if((Pohledavka.TypD=1)or(Pohledavka.TypD=3)) @Vysledek=True end else begin KeyFaktura1.Length=6 KeyFaktura1.Cislo=SwapL(Pohledavka.Cislo) KeyFaktura1.Radek=0 if(FindKey(KeyFaktura1,VetaF)) begin ReadRec(Faktura,VetaF); if((Faktura.Typ=1)or(Faktura.Typ=3)) @Vysledek=True end end end else begin ;závazky if(Zavazek.TypD=1) @Vysledek=True end end; END;