; prepocet kurzovných rozdílů pohledavek a zavazku výsledkovým způsobem ;princip: pův.částka v Kč-platby v Kč=zbývá v Kč dle pův.kurzů ;pův.částka v CM-platby v CM=zbývá v CM ;zbývá v CM*kurz CNB k přecenění=zbývá v Kč dle ČNB ;zbývá v Kč dle pův.kurzů - zbývá v Kč dle ČNB = kurz.rozdíl ; verze z 28.1.2004 ; Autor: WinDUO Team Name('Přecenění P/Z v cizí měně') Designed('ZavMan#1','PohlMan#1') Author('Winduo Team','EMail: winduo@winduo.cz','http://www.winduo.com','http://www.winduo.cz') Descr('Změní částku v Kč podle kurzu, do rozkontu zaúčtuje rozdíl') NewWNS('PrepKurz.WNS','Přepočet kurzů') WNSType(1); ;DlgFollowMouse(True) DeclareRec('Denik'); DeclareRec('KeyDenik2'); DeclareRec('Program') LocB:Boolean=False LocW:Word LocStr:String Pozice:LongInt SUZisk:Word AUZisk:Word SUZtrata:Word AUZtrata:Word MenaVKnize:Integer KurzVKnize:Real KurzRozdil:Real SouhlasMeny:Boolean LocStrSpl:String LocStrZapl:String LocStrVyst:String LocStrCastka:String LocStrCastkaM:String LocStrUhr:String LocStrUhrazena:String LocStrUhrM:String LocStrCislo:String LocStrDoklad:String LocStrDatum:String LocStrICO:String LocStrFirma:String LocStrMena:String LocStrPoznamka:String LocStrObdobi:String LocStrDt_change:String LocStrChange:String LocStrCounter:String LocStrRozkont:String LocStrrSU:String LocStrrAU:String LocStrrHS:String LocStrrKJ:String SumaRozkont:Real Limit:Real=0.10 JenTisk:Boolean=True CastkaOri:Real Uhrazeno:Real UhrazenoM:Real KUhrade:Real KUhradeM:Real NahrSU:Word NahrAU:Word LocI:Integer Veta:LongInt VetaK:LongInt VetaD:LongInt LocText1:String Hledani:Boolean IndexCiziMeny:Real=1 Zalohovka:Boolean VetaF:LongInt ValidDatum:String='0123456789.' ValidNumer:String='0123456789' ValidCislo: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' Kniha:String='Pohledavka' KnihaAgenda:Byte=2 NahrSU=311 NahrAU=0 DeclareRec('Faktura'); DeclareRec('KeyFaktura1'); end else begin Zaznam1J='závazek' Zaznam1M='závazky' Zaznam2M='závazků' Kniha:String='Zavazek' KnihaAgenda:Byte=3 NahrSU=321 NahrAU=0 end PodpisJmeno:String=GetUserName() DatumD:Word ;DatumD:Word=12191 ;DatumD:Word=11847 ;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í') DlgButton(id_Help,'Help',19,306); DlgOnLineHelp(id_Help,'Help') DlgSetHelp(help_Context,1050) DlgStatic(-1,'Tato volba provede přecenění '+Zaznam2M+' v cizí měně kurzem',10,16,470) DlgStatic(-1,'devizového trhu stanoveným Českou národní bankou',10,34,470) DlgStatic(-1,'(viz § 24 odst. 4 Zákona o účetnictví)',10,52,255) DlgStatic(-1,'U nezaplacených nebo částečně zaplacených '+Zaznam2M+' bude údaj',10,70,470) DlgStatic(-1,'Částka v '+Program.Mena+' změněn podle kurzu z kurzového lístku. Dále bude',10,88,470) DlgStatic(-1,'do rozkontu přidán další řádek, v němž bude zaúčtován rozdíl.',10,106,470) DlgStatic(-1,'Kurzový lístek musíte mít vyplněn, jinak bude výpočet přerušen',10,124,470) DlgStatic(-1,'Zálohové '+Zaznam1M+' nebudou přeceněny.',10,124,470) DlgDivider(10,150,470,0) DlgStatic(-1,'Datum, ke kterému bude přeceněno:',10,174,255) DlgEditDate(101,DatumD,260,172,78,22,,,ValidDatum) DlgOnLineHelp(101,'Přecenění '+Zaznam2M+' bude provedeno k datu (konec rozvahového dne nebo jiný okamžik, k němuž se účetní závěrka sestavuje)') DlgStatic(-1,'Účet pro zaúčtování kurzového zisku:',10,196,255) DlgEdit(102,SUZisk,260,194,30,22,3,,ValidNumer) DlgOnLineHelp(102,'Tento synt. účet bude použit pro zaúčtování kurzovného rozdílu v případě kurz. zisku') DlgStatic(-1,'/',293,196,8) DlgEdit(103,AUZisk,302,194,30,22,3,,ValidNumer) DlgOnLineHelp(103,'Tento anal. účet bude použit pro zaúčtování kurzovného rozdílu v případě kurz. zisku') DlgStatic(-1,'ztráty:',342,196,44) DlgEdit(104,SUZtrata,388,194,30,22,3,,ValidNumer) DlgOnLineHelp(104,'Tento synt. účet bude použit pro zaúčtování kurzovného rozdílu v případě kurz. ztráty') DlgStatic(-1,'/',421,196,8) DlgEdit(105,AUZtrata,430,194,30,22,3,,ValidNumer) DlgOnLineHelp(105,'Tento anal. účet bude použit pro zaúčtování kurzovného rozdílu v případě kurz. ztráty') DlgStatic(-1,'Náhradní účet '+Zaznam2M+', pokud není zaúčtováno:',10,218,376) DlgEdit(106,NahrSU,388,216,30,22,3,,ValidNumer) DlgOnLineHelp(106,'Tento synt. účet bude použit pro zaúčtování '+Zaznam2M+' v případě, že '+Zaznam1J+' dosud nebyl zaúčtován. Jinak bude použit účet z rozkontování dokladu') DlgStatic(-1,'/',421,218,8) DlgEdit(107,NahrAU,430,216,30,22,3,,ValidNumer) DlgOnLineHelp(106,'Tento anal. účet bude použit pro zaúčtování '+Zaznam2M+' v případě, že '+Zaznam1J+' dosud nebyl zaúčtován. Jinak bude použit účet z rozkontování dokladu') DlgStatic(-1,'Nezpracovávat '+Zaznam1M+', jejichž kurzový rozdíl je menší než:',10,240,417) DlgEdit(116,Limit,430,238,50,,10,ES_RIGHT,ValidCislo) DlgOnLineHelp(116,'Pokud bude kurzový rozdíl menší nebo roven Vámi zadané hodnotě, nebude '+Zaznam1J+' přeceněn. Doporučeno rozumné číslo, neboť při výpočtu kurzů vznikají výpočty na mnoho desetinných míst a s tím i problémy se zaokrouhlováním') DlgCheckBox(117,JenTisk,10,268,474,,'Pouze sestava bez zásahu do dat, vypočte jen protokol o přecenění') DlgOnLineHelp(117,'Zaškrtnutím nedojde k zásahu do Vašich dat a k přecenění '+Zaznam2M+', ale jen k výpočtu sestavy o tom, který záznam bude přeceněn') Result:Integer=DlgExecute(True) if(Result<>id_OK) Halt if(not JenTisk) ModifyMode(True) Klic:String='Key'+kniha+'1' DeclareRec(Kniha) DeclareRec(Klic) DeclareRec('Denik') DeclareRec('KeyDenik7') DeclareRec('Kurz') DeclareRec('KeyKurz1') DeclareRec('Pokladna'); DeclareRec('KeyPokladna9'); DeclareRec('Banka'); DeclareRec('KeyBanka9'); DeclareRec('OstatniUhrady'); DeclareRec('KeyOstatniUhrady9'); InitStatus(UsedKeys(@Klic)) ; inicializace stavoveho prouzku LocStrDoklad=Kniha+'.Doklad' LocStrDatum=Kniha+'.Datum' LocStrObdobi=Kniha+'.Obdobi' LocStrSpl=Kniha+'.DatSpl' LocStrZapl=Kniha+'.DatZapl' LocStrVyst=Kniha+'.DatVyst' LocStrCastka=Kniha+'.Castka' LocStrCastkaM=Kniha+'.CastkaM' LocStrUhrazena=Kniha+'.Uhrazena' LocStrUhr=Kniha+'.Uhrazeno' LocStrUhrM='UhrazenoM' LocStrCislo=Kniha+'.Cislo' LocStrICO=Kniha+'.ICO' LocStrFirma=Kniha+'.Firma' LocStrMena=Kniha+'.Mena' LocStrPoznamka=Kniha+'.Poznamka' LocStrDt_change=Kniha+'.Dt_change' LocStrChange=Kniha+'.change' LocStrCounter=Kniha+'.counter' LocStrRozkont=Kniha+'.Rozkont' LocStrrSU=Kniha+'.rSU' LocStrrAU=Kniha+'.rAU' LocStrrHS=Kniha+'.rHS' LocStrrKJ=Kniha+'.rKJ' SetDescr(0,0,TA_Right|descr_PageNum,'Strana: '); SetDescr(1,0,TA_Center,'Přeceněné '+Zaznam1M+' k datu '+StrDate(DatumD)+' - přeceněny ty záznamy, u nichž je kurz. rozdíl větší nežli '+StrFinanc(Limit,2)+' '+Program.Mena); SetDescr(2,0,TA_Left|descr_Date,'Datum: '); SetDescr(3,1,TA_Left|descr_UserDescr,''); SetStatusText('Probíhá tisk detailních záznamů') Pozice=0 ;definice hlavicky pro tisk: SetColumn(0,ta_Left,10) ;Doklad SetColumn(1,ta_Left,10) ;Datum SetColumn(2,ta_Left,8) ;ICO SetColumn(3,ta_Left,30) ;nazev partnera SetColumn(4,ta_Right,12) ;Castka celkem v cizí měně SetColumn(5,ta_Right,12) ;Castka celkem v Kč SetColumn(6,ta_Right,8) ;Kurz pri prijeti / vystaveni SetColumn(7,ta_Right,12) ;Castka uhrazeno v cizí měně SetColumn(8,ta_Right,12) ;Castka uhrazeno v Kč SetColumn(9,ta_Right,12) ;Castka zbyva k uhradě v cizí měně SetColumn(10,ta_Right,8) ;kurz CNB SetColumn(11,ta_RIGHT,12) ;Castak zbyva k uhrade v Kc SetColumn(12,ta_RIGHT,10) ;kurz. rozdíl SetColumn(13,ta_Left,40) ;poznamka SetHead('Doklad\tDatum\tIČ\tNázev obch. partnera\tČástka v CM\tČástka v '+Program.Mena+'\tKurz\tUhrazeno v CM\tUhrazeno v '+Program.Mena+'\tk úhradě v CM\tKurz ČNB\tk úhradě v '+Program.Mena+'\t Kurz.rozdíl\tPoznámka'); ClearKey(@Klic) While(NextKey(@Klic,Veta)) ;cyklus pres pohledavky/zavazky begin ReadRec(@Kniha,Veta) Inc(Pozice) ; zvyseni citace zpracovanych vet SetStatus(Pozice) ; nastaveni stavoveho prouzku Zalohovka=False if(CompareStr(Odkud,'P')) begin ;pohledavka if(Pohledavka.PohlFlags&1<>0) begin if(Pohledavka.TypD=1) Zalohovka=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) Zalohovka=True end end end else begin ;závazky if(Zavazek.TypD=1) Zalohovka=True end if((InFilter(@Kniha))and(@LocStrCastkaM<>0)and(not Zalohovka));prosel filtrem a ma cizi menu begin ;číslo účtu v účetním kódu LocStr=Kniha+'.rSU' LocStr=Kniha+'.rAU' MenaVKnize=@LocStrMena IndexCiziMeny=CurrencyIndex(MenaVKnize) if(IndexCiziMeny=0); begin Halt('IndexCiziMeny=0, nelze pokračovat') end KurzVKnize=0 if(@LocStrCastkaM<>0) KurzVKnize=@LocStrCastka*IndexCiziMeny/@LocStrCastkaM else begin Halt('Částka v cizí měně = NULA '+NumToCCC(MenaVKnize)+' doklad: '+@LocStrDoklad+' Nelze zpracovat',mb_IconExclamation) ;Goto(KonecCyklu); kdyz je cizi mena NULA, ale sem by to nemelo vstoupit end SouhlasMeny=True KUhrade=0 KUhradeM=0 UhrazenoM=0 Uhrazeno=0 ;podle data splatnosti, zaplaceni (dilci uhrady !!!) if(@LocStrUhr<>0) begin if(CompareStr(Odkud,'P')) ZjistiUhradu('@LocStrUhr','@LocStrUhrM',2,@LocStrCislo,DatumD) else ZjistiUhradu('@LocStrUhr','@LocStrUhrM',3,@LocStrCislo,DatumD) Uhrazeno=@LocStrUhr UhrazenoM=@LocStrUhrM end if((Uhrazeno=0)and(@LocStrUhrazena)); ma odfajfknuto Uhrazeno, ale zadne platby. Neberu. Pokud platby ma, tak beru, aby mohl precenit i preplatky begin LocText1=@LocStrDoklad+#9+StrDate(@LocStrDatum)+#9+Null(@LocStrICO,8,True)+#9+@LocStrFirma+#9+StrFinanc(@LocStrCastkaM,2)+' '+NumToCCC(@LocStrMena) AddLine(LocText1+#9+StrFinanc(@LocStrCastka,2)+#9+Str(@LocStrCastka*IndexCiziMeny/@LocStrCastkaM,8,4)+#9+StrFinanc(UhrazenoM,2)+#9+StrFinanc(Uhrazeno,2)+#9+#9+#9+#9+#9+'nemá platby,zatrženo: Uhrazeno=nezpracováno') Goto(KonecCyklu) end if(SouhlasMeny) begin ;zpracovani KUhradeM=@LocStrCastkaM-UhrazenoM KeyKurz1.Length=4 KeyKurz1.Mena=SwapI(MenaVKnize) KeyKurz1.Datum=Swap(DatumD) if(FindKey(KeyKurz1,VetaK)) begin ReadRec(Kurz,VetaK) if(Kurz.CNBStred=0) begin Halt('V kurz.lístku není vyplněn kurz '+NumToCCC(MenaVKnize)+' - ČNB k datu '+StrDate(DatumD)+'. Nutno doplnit',mb_IconExclamation) end end else begin Halt('V kurz.lístku není vyplněn kurz '+NumToCCC(MenaVKnize)+' - ČNB k datu '+StrDate(DatumD)+'. Nutno doplnit',mb_IconExclamation) end KurzRozdil=0 if(RoundFloat(Kurz.CNBStred,-5)<>RoundFloat(KurzVKnize,-5)) begin ; je rozdil v kurzech ; co zbývá k úhradě v cizí měně pronásobit kurzem na Kč k DatumD ČNB KUhrade=KUhradeM*Kurz.CNBStred/IndexCiziMeny; tolik zbyva k uhrade v Kc KurzRozdil=KUhrade-(@LocStrCastka-Uhrazeno) if((Abs(KurzRozdil)<=Limit)and(Round(KurzRozdil,2)<>0)) begin LocText1=@LocStrDoklad+#9+StrDate(@LocStrDatum)+#9+Null(@LocStrICO,8,True)+#9+@LocStrFirma+#9+StrFinanc(@LocStrCastkaM,2)+' '+NumToCCC(@LocStrMena)+#9+StrFinanc(@LocStrCastka,2)+#9+Str(@LocStrCastka*IndexCiziMeny/@LocStrCastkaM,8,4) AddLine(LocText1+#9+StrFinanc(UhrazenoM,2)+#9+StrFinanc(Uhrazeno,2)+#9+StrFinanc(KUhradeM,2)+#9+Kurz.CNBStred+#9+StrFinanc(KUhradeM*Kurz.CNBStred/IndexCiziMeny,2)+#9+StrFinanc(KurzRozdil,2)+#9+'Kurz.rozdíl je menší než zadaný limit') GoTo(KonecCyklu) end ;test, zda existuje rozkont a zda je počet řádků rozkontu shodný s tím, co by mělo být if(@LocStrCounter>0) begin KeyDenik7.Length=6 KeyDenik7.Cislo=SwapL(@LocStrCislo) KeyDenik7.SubLine=Swap(@LocStrCounter-1) if(FindKey(KeyDenik7,VetaD)) begin if(NextKey(KeyDenik7,VetaD)) begin if(KeyDenik7.Cislo=SwapL(@LocStrCislo)) GoTo(ChybaRozkont) end; end else begin ChybaRozkont: Halt('Proveďte nejprve speciální funkci Aktualizace rozkontu - zpracování ukončeno',mb_IconExclamation) end; end; ;modifikace údajů o počtu řádků rozkontu ve všech řádcích rozkontu: KeyDenik7.Length=6 KeyDenik7.Cislo=SwapL(@LocStrCislo) KeyDenik7.SubLine=0 Hledani=SearchKey(KeyDenik7,VetaD) SumaRozkont=0 While((Hledani) and (KeyDenik7.Cislo=SwapL(@LocStrCislo))) begin ReadRec(Denik,VetaD) SumaRozkont=SumaRozkont+Denik.Castka Denik.Count=@LocStrCounter; if(not JenTisk) begin Denik.Castka=RoundFloat(Denik.Castka,-2) ModifyRec(Denik,VetaD); end Hledani=NextKey(KeyDenik7,VetaD); end; ;přidání dalšího řádku s kurz. rozdílem do rozkontu: Denik.dt_create=GetDate()*65536+GetTime() Denik.create=GetUserName() Denik.ICO=@LocStrIco Denik.cislo=@LocStrCislo Denik.obdobi=Month(DatumD)*100+Year(DatumD)%100 Denik.datum=DatumD Denik.Datum_zp=0 Denik.doklad=@LocStrDoklad Denik.agenda=KnihaAgenda Denik.popis='přecenění kurzem ČNB: '+StrNative(Kurz.CNBStred,4) Denik.subline=@LocStrCounter; Denik.navaznost=@LocStrDoklad Denik.Count=@LocStrCounter; Denik.Mena=0 Denik.CastkaM=0 Denik.DanT=0 Denik.DanT2=0 ;je-li v závazku/pohl staré období, změnit na období = DatumD a vyhodnotit tak, aby se nezmenil ucetni kod if(@LocStrCounter=0); neni rozkontovan. Aby se nezmenil uc.kod, musi se uctovat kurz.rozdil vzdy P=Dal, Z=MD begin if(@LocStrObdobi%100<>Val(Rok(2))); neni aktualni rok, je nutno zmenit obdobi @LocStrObdobi=Month(DatumD)*100+Year(DatumD)%100 If(KnihaAgenda=2) ;pohledavka begin ;čísla účtů: Denik.mdSU=@LocStrrSU Denik.mdAU=@LocStrrAU if(Denik.mdSU=0) begin Denik.mdSU=NahrSU Denik.mdAU=NahrAU end Denik.mdHS=@LocStrrHS Denik.mdKJ=@LocStrrKJ Denik.dalHS=@LocStrrHS Denik.dalKJ=@LocStrrKJ Denik.castka=KurzRozdil if(KurzRozdíl>0); pohled. se zvetsuje, je to tedy kurz.zisk begin Denik.dalSU=SUZisk Denik.dalAU=AUZisk end else; pohled. se snizuje, je to tedy kurz.ztrata begin Denik.dalSU=SUZtrata Denik.dalAU=AUZtrata end end else ;závazek begin ;čísla účtů: Denik.dalSU=@LocStrrSU Denik.dalAU=@LocStrrAU if(Denik.dalSU=0) begin Denik.dalSU=NahrSU Denik.dalAU=NahrAU end Denik.mdHS=@LocStrrHS Denik.mdKJ=@LocStrrKJ Denik.dalHS=@LocStrrHS Denik.dalKJ=@LocStrrKJ Denik.castka=KurzRozdil if(KurzRozdíl>0); zavazek se zvetsuje, je to tedy kurz.ztrata begin Denik.mdSU=SUZtrata Denik.mdAU=AUZtrata end else; zavazek se snizuje, je to tedy kurz.zisk begin Denik.mdSU=SUZisk Denik.mdAU=AUZisk end end end else begin; zaznam je v aktualnim roce, byl rozkontovan, lze tedy uctovat na logicke strany N na MD, V na Dal If(KnihaAgenda=2) ;pohledavka begin if(KurzRozdíl>0); pohled. se zvetsuje, je to tedy kurz.zisk begin ;čísla účtů: Denik.mdSU=@LocStrrSU Denik.mdAU=@LocStrrAU if(Denik.mdSU=0) begin Denik.mdSU=NahrSU Denik.mdAU=NahrAU end Denik.mdHS=@LocStrrHS Denik.mdKJ=@LocStrrKJ Denik.dalSU=SUZisk Denik.dalAU=AUZisk Denik.dalHS=@LocStrrHS Denik.dalKJ=@LocStrrKJ Denik.castka=KurzRozdil end else; pohled. se snizuje, je to tedy kurz.ztrata begin Denik.dalSU=@LocStrrSU Denik.dalAU=@LocStrrAU if(Denik.dalSU=0) begin Denik.dalSU=NahrSU Denik.dalAU=NahrAU end Denik.mdHS=@LocStrrHS Denik.mdKJ=@LocStrrKJ Denik.mdSU=SUZtrata Denik.mdAU=AUZtrata Denik.dalHS=@LocStrrHS Denik.dalKJ=@LocStrrKJ Denik.castka=KurzRozdil*(-1) end end else ;závazek begin if(KurzRozdíl>0); zavazek se zvetsuje, je to tedy kurz.ztrata begin ;čísla účtů: Denik.dalSU=@LocStrrSU Denik.dalAU=@LocStrrAU if(Denik.dalSU=0) begin Denik.dalSU=NahrSU Denik.dalAU=NahrAU end Denik.mdHS=@LocStrrHS Denik.mdKJ=@LocStrrKJ Denik.mdSU=SUZtrata Denik.mdAU=AUZtrata Denik.dalHS=@LocStrrHS Denik.dalKJ=@LocStrrKJ Denik.castka=KurzRozdil end else; zavazek se snizuje, je to tedy kurz.zisk begin Denik.mdSU=@LocStrrSU Denik.mdAU=@LocStrrAU if(Denik.mdSU=0) begin Denik.mdSU=NahrSU Denik.mdAU=NahrAU end Denik.mdHS=@LocStrrHS Denik.mdKJ=@LocStrrKJ Denik.dalSU=SUZisk Denik.dalAU=AUZisk Denik.dalHS=@LocStrrHS Denik.dalKJ=@LocStrrKJ Denik.castka=KurzRozdil*(-1) end end end if(not JenTisk) begin Denik.Castka=RoundFloat(Denik.Castka,-2) LocB=AddRec(Denik) end ;do poznámky v pohl/závazku zadat původní částku @LocStrCastka a puv.kurz KurzVKnize @LocStrPoznamka=Ltrim(@LocStrPoznamka+' pův.'+StrFinanc(@LocStrCastka,2)+Program.Mena+',kurz:'+StrNative(KurzVKnize,5)) CastkaOri=@LocStrCastka @LocStrCastka=@LocStrCastka+KurzRozdil @LocStrRozkont=SumaRozkont+KurzRozdil @LocStrCounter=@LocStrCounter+1 @LocStrDt_change=GetDate()*65536+GetTime() @LocStrChange=GetUserName() if(not JenTisk) begin @LocStrRozkont=RoundFloat(@LocStrRozkont,-2) @LocStrCastka=RoundFloat(@LocStrCastka,-2) ModifyRec(@Kniha,Veta) end LocText1=@LocStrDoklad+#9+StrDate(@LocStrDatum)+#9+Null(@LocStrICO,8,True)+#9+@LocStrFirma+#9+StrFinanc(@LocStrCastkaM,2)+' '+NumToCCC(@LocStrMena)+#9+StrFinanc(CastkaOri,2)+#9+StrNative(CastkaOri*IndexCiziMeny/@LocStrCastkaM,5) AddLine(LocText1+#9+StrFinanc(UhrazenoM,2)+#9+StrFinanc(Uhrazeno,2)+#9+StrFinanc(KUhradeM,2)+#9+Kurz.CNBStred+#9+StrFinanc(KUhradeM*Kurz.CNBStred/IndexCiziMeny,2)+#9+StrFinanc(KurzRozdil,2)+#9+@LocStrPoznamka) end else begin LocText1=@LocStrDoklad+#9+StrDate(@LocStrDatum)+#9+Null(@LocStrICO,8,True)+#9+@LocStrFirma+#9+StrFinanc(@LocStrCastkaM,2)+' '+NumToCCC(@LocStrMena)+#9+StrFinanc(@LocStrCastka,2)+#9+Str(@LocStrCastka*IndexCiziMeny/@LocStrCastkaM,8,4) AddLine(LocText1+#9+StrFinanc(UhrazenoM,2)+#9+StrFinanc(Uhrazeno,2)+#9+StrFinanc(KUhradeM,2)+#9+Kurz.CNBStred+#9+StrFinanc(KUhradeM*Kurz.CNBStred/IndexCiziMeny,2)+#9+StrFinanc(KurzRozdil,2)+#9+'nepřeceněno, není rozdíl v kurzech') end end else begin ;v platbach neni stejna mena, nezpracovavat LocText1=@LocStrDoklad+#9+StrDate(@LocStrDatum)+#9+Null(@LocStrICO,8,True)+#9+@LocStrFirma+#9+StrFinanc(@LocStrCastkaM,2)+' '+NumToCCC(@LocStrMena) if((@LocStrUhrazena)and(UhrazenoM=@LocStrCastkaM)and(Uhrazeno=@LocStrCastka)) begin ;je uhrazeno a castka v cizi mene je shodna i castka ceska je shodna. Navic existuje alespon jedna platba, ktera neni v cizi mene. Pravdepodobne to je kurz. rozdil AddLine(LocText1+#9+StrFinanc(@LocStrCastka,2)+#9+Str(@LocStrCastka*IndexCiziMeny/@LocStrCastkaM,8,4)+#9+StrFinanc(UhrazenoM,2)+#9+StrFinanc(Uhrazeno,2)+#9+#9+#9+#9+#9+'uhrazeno, nezpracováno') end else begin ;neni uhrazeno a existuje alespon jedna platba, ktera neni v cizi mene AddLine(LocText1+#9+StrFinanc(@LocStrCastka,2)+#9+Str(@LocStrCastka*IndexCiziMeny/@LocStrCastkaM,8,4)+#9+'???'+#9+StrFinanc(Uhrazeno,2)+#9+#9+#9+#9+#9+'platba není ve shodné cizí měně, nezpracováno') end end KonecCyklu: Inc(Pozice) ; zvyseni citace zpracovanych vet SetStatus(Pozice) ; nastaveni stavoveho prouzku end end Procedure ZjistiUhraduVAgende(Vysledek:String,VysledekM: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); DokladName:String=AgendaName+'.Doklad'; CastkaName:String=AgendaName+'.Castka' CastkaNameM:String=AgendaName+'.CastkaM' MenaName:String=AgendaName+'.Mena' 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(@MenaName<>MenaVKnize) begin NCis :LongInt NExi :Boolean KurzRoz :Boolean =False KeyDenik2.Length=SizeOf(KeyDenik2.Doklad) KeyDenik2.Doklad=@DokladName NExi=SearchKey(KeyDenik2,NCis) while((NExi)and(KeyDenik2.Doklad=@DokladName)) begin ReadRec(Denik,NCis) if((Denik.MDSU=563)or(Denik.MDSU=663)) KurzRoz=True NextKey(KeyDenik2,NCis) end; if(not(KurzRoz)) SouhlasMeny=False end if(@VydajName) begin @vysledek=@vysledek-@CastkaName @vysledekM=@vysledekM-@CastkaNameM end else begin @vysledek=@vysledek+@CastkaName @vysledekM=@vysledekM+@CastkaNameM end end else if(Agenda=3) begin if(@VydajName) begin @vysledek=@vysledek+@CastkaName @vysledekM=@vysledekM+@CastkaNameM end else begin @vysledek=@vysledek-@CastkaName @vysledekM=@vysledekM-@CastkaNameM end 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,VysledekM:String,Agenda:Byte,Cislo:LongInt,Datum:Word); @vysledek=0 @vysledekM=0 ZjistiUhraduVAgende(Vysledek,VysledekM,Agenda,Cislo,Datum,'Pokladna'); ZjistiUhraduVAgende(Vysledek,VysledekM,Agenda,Cislo,Datum,'Banka'); ZjistiUhraduVAgende(Vysledek,VysledekM,Agenda,Cislo,Datum,'OstatniUhrady'); end; END;