; vypise prodej - rekapit. výnosy - nákl. na výdejku ze skladu - 9.5.2003 Name('Výsledovka na výdejku') ; pod tímto názvem bude sestava v menu Designed('Hrp_Man') ; sestava bude dostupná z okna Hrp_Man Author('Winduo Team','EMail: winduo@winduo.cz','http://www.winduo.com') ;informace o autorovi Descr('Rekapitulace výsledku hospodaření na výdejku - vysčítáno z pohybů (výnosy - náklady)','Možnost využít filtr -Ne','Možnost změny třídění - Ne') ;popis sestavy, tento text bude v bublince VetaA:LongInt ; definuje proměnnou (adresar) VetaP:LongInt ; definuje proměnnou (pohyb) VetaS:LongInt ; definuje proměnnou (SO) VetaC:LongInt ; definuje proměnnou (Cenik) VetaF:LongInt ; definuje proměnnou (Faktura) VetaPK:LongInt ; definuje proměnnou (Pokladna) VetaPH:LongInt ; definuje proměnnou (Pohledavka) Pozice:LongInt ; definuje proměnnou mDoklad:String[10] mNazev:String[30] mCisDoklad:String[8] ; cislo dokladu ze souvisejicicho dokladu mZaokrDPH:Byte ; zaokrouhleni DPH IntCisloSDoklad:LongInt ; interni cislo souvisejiciho dokladu Naklad:Real SumaNaklad:Real SumaVynos:Real SSumaNaklad:Real SSumaVynos:Real Zisk:Real PNCDecSize:Byte=VAL(GetDataINI('SKLAD','PNCDecSize')) x:Boolean beru:Boolean ;pro rizeni tisku i:LongInt j:LongInt k:LongInt OdData:Word=0 DoData:Word=0 AsponJeden:Boolean=False ;zda se tiskl aspon jeden TiskDetail:Boolean=True ;zda tisknout i rozpis zbozi - musi byt true, jinak to nevyscita TiskP:Boolean=True ;zda tisknout v cene P - musi byt true JenP:Boolean=False ;vydejka obsahuje jen vydaje za cenu P InfoSkupOper:String[30] ;pomocny text o skupinove operace TypCeny:String[1] ;cena A,B,C... pro zobrazeni do sestavy Retez:String[255] ;retezec pro tisk detailu Fakturou:Boolean=True ;tisknout vydeje fakturou Pokladnou:Boolean=True ;tisknout vydeje pokladnou Ostatnim:Boolean=True ;tisknout vydeje ostatnimi = skupinovymi operacemi a mimo skupinove DeclareRec('SkupinovaOperace') DeclareRec('KeySkupinovaOperace1') DeclareRec('Sklad') DeclareRec('KeySklad10') DeclareRec('Pohyb') DeclareRec('keypohyb12') DeclareRec('Program') DeclareRec('Adresar') DeclareRec('KeyAdresar1') DeclareRec('Pokladna') DeclareRec('KeyPokladna7') DeclareRec('Faktura') DeclareRec('KeyFaktura1') DeclareRec('Pohledavka') DeclareRec('KeyPohledavka8') WNSType(1); NewWNS('RekDPH1.WNS','Výsledovka na výdejku') ;DlgFollowMouse(True) ;{definice uvodniho dialogu} DefDialog('Výsledovka na výdejku',462,224) DlgShade(-1,'',4,27,453,124) DlgStatic(-1,' Volba údajů',3,5,84) DlgStatic(-1,'Zadej interval od data ... ',10,34,165) DlgEditDate(101,OdData,175,29,,,,ValidDatum) DlgOnLineHelp(101,'Datum výdejky, od kterého chceš provést výpočet') DlgStatic(-1,'do data ... ',284,34,70) DlgEditDate(102,DoData,355,29,,,,ValidDatum) DlgOnLineHelp(102,'Datum výdejky, do kterého chceš provést výpočet') ;DlgCheckBox(109,TiskDetail,10,58,300,,'Zahrnout do tisku i detailní opis výdejky') ;DlgOnLineHelp(109,'V sestavě bude / nebude uveden i seznam zboží') ;DlgCheckBox(110,TiskP,10,76,300,,'Zahrnout do výpočtu i výdaje za cenu P') ;DlgOnLineHelp(110,'Výdaje za průměrnou nákupní cenu (materiál) budou / nebudou zahrnuty do sestavy') DlgCheckBox(111,Fakturou,10,94,300,,'Zahrnout do výpočtu výdaje fakturou') DlgOnLineHelp(111,'Do sestavy budou zahrnuty výdaje ze skladu přes fakturu') DlgCheckBox(112,Pokladnou,10,112,300,,'Zahrnout do výpočtu pokladnou') DlgOnLineHelp(112,'Do sestavy budou zahrnuty výdaje ze skladu pokladnou') DlgCheckBox(113,Ostatnim,10,130,300,,'Zahrnout do výpočtu ostatní výdaje') DlgOnLineHelp(113,'Do sestavy budou zahrnuty výdaje ze skladu mimo faktury a pokladnou') DlgButton(id_OK,'OK',414-124,156); DlgOnLineHelp(id_OK,'Pokračuje ve zpracování') DlgButton(id_Cancel,'Zpět',373,156); DlgOnLineHelp(id_Cancel,'Ukončí bez zpracování') if(DlgExecute()<>ID_OK) Halt if(DoData=0) DoData=65535 SetDescr(0,0,TA_Right|descr_PageNum,'Strana: '); SetDescr(1,0,TA_Center,'') SetDescr(2,0,TA_Left|descr_Date,'Datum: '); SetDescr(3,1,TA_Center,'Výsledovka na výdejku'); SetDescr(4,1,TA_Right,''); SetDescr(5,2,TA_Center,'Zadané období od '+StrDate(OdData)+' do '+StrDate(DoData)) SetDescr(6,3,TA_Left|descr_UserDescr,''); pokud je pouzit descr_UserDescr, tak si program vyzada dodatecny popis InitStatus(UsedKeys(keypohyb12)) ; inicializace stavoveho prouzku mDoklad='@@@@@@@@@@' ClearKey(keypohyb12) x=NextKey(keypohyb12,VetaP) While(x) ; začátek cyklu přes celý soubor begin ; začátek příkazu pro zpracování jedné věty ReadRec(Pohyb,VetaP) ; přečte větu ze souboru if((Pohyb.Vydaj) and (Pohyb.Rezervace=0) and (Pohyb.Datum_ZP>=OdData) and (Pohyb.Datum_ZP<=DoData)) ; aby bral jen vydaje za obdobi begin if(not(CompareStr(Pohyb.Doklad,mDoklad))) ; prvni ze skupiny pohybu, nutno vyhodnotit a vytisknout hlavicku begin beru=False mDoklad=Pohyb.Doklad mCisDoklad='' mZaokrDPH=Program.ZaokrDPH KeySkupinovaOperace1.Length=4 KeySkupinovaOperace1.Cislo=SwapL(Pohyb.Hrom) if(FindKey(KeySkupinovaOperace1,VetaS)) begin ReadRec(SkupinovaOperace,VetaS) if(SkupinovaOperace.TypDok=1) begin InfoSkupOper='faktura' KeyFaktura1.Length=6 KeyFaktura1.Cislo=SwapL(SkupinovaOperace.CisDok) KeyFaktura1.Radek=0 if(FindKey(KeyFaktura1,VetaF)) begin ReadRec(Faktura,VetaF) mZaokrDPH=Faktura.ZaokrDPH end KeyPohledavka8.Length=4 KeyPohledavka8.Cislo=SwapL(SkupinovaOperace.CisDok) if(FindKey(KeyPohledavka8,VetaPH)) begin ReadRec(Pohledavka,VetaPH) mCisDoklad=Pohledavka.Doklad end end if(SkupinovaOperace.TypDok=2) begin InfoSkupOper='pokladna' KeyPokladna7.Length=4 KeyPokladna7.Cislo=SwapL(SkupinovaOperace.CisDok) if(FindKey(KeyPokladna7,VetaPK)) begin ReadRec(Pokladna,VetaPK) mCisDoklad=Pokladna.Doklad mZaokrDPH=Byte(Pokladna.ZaokrDPH) end end if(SkupinovaOperace.TypDok=3) InfoSkupOper='závazek' if(SkupinovaOperace.TypDok=0) InfoSkupOper='pouze skup.operace' end else begin ClearRec(SkupinovaOperace) InfoSkupOper='skup.operace nenalezena' end ;vyhodnoceni, zda tisknout if((Fakturou=True)and(SkupinovaOperace.TypDok=1)) beru=True if((Pokladnou=True)and(SkupinovaOperace.TypDok=2)) beru=True if((Ostatnim=True)and(SkupinovaOperace.TypDok=0)) beru=True if(beru=True) begin AsponJeden=True ; zjisteni a tisk adresy: SetXSize(0) SetColumn(0,ta_Left,60) SetHead(''); ChangePageFormat AddComment('') AddComment('') KeyAdresar1.Length=4 KeyAdresar1.Ico=SwapL(Pohyb.Ico) SetXSize(0) SetColumn(0,ta_Left,8); SetColumn(1,ta_Left,8); SetColumn(2,ta_Left,8); SetColumn(3,ta_Left,40); SetColumn(4,ta_Left,10); SetColumn(5,ta_Left,8); SetHead('Datum\tDoklad\tIČO\tNázev firmy\tInfo\tSouv.doklad'); ChangePageFormat if(FindKey(KeyAdresar1,VetaA)) begin ReadRec(Adresar,VetaA) BindLines(6) AddLine(StrDate(Pohyb.Datum)+#9+Pohyb.Doklad+#9+Null(Adresar.ICO,8)+#9+Adresar.Nazev+#9+InfoSkupOper+#9+mCisDoklad) ;??? Windows to tu nemusi byt, Graficky dava va radky pres sebe AddComment('') end else begin ClearRec(Adresar) BindLines(6) if(Pohyb.ICO<>0) AddLine(StrDate(Pohyb.Datum)+#9+Pohyb.Doklad+#9+Null(Pohyb.ICO,8)+#9+'IČO nenalezeno v adresáři'+#9+InfoSkupOper+#9+mCisDoklad) else AddLine(StrDate(Pohyb.Datum)+#9+Pohyb.Doklad+#9+Null(Pohyb.ICO,8,True)+#9+#9+InfoSkupOper+#9+mCisDoklad) end end end i=0 JenP=True x=True if(TiskDetail=True) begin SetXSize(0) SetColumn(0,ta_Left,10); SetColumn(1,ta_Left,24); SetColumn(2,ta_Right,4); SetColumn(3,ta_Right,8); SetColumn(4,ta_Right,10); SetColumn(5,ta_Right,13); SetColumn(6,ta_Right,10); SetColumn(7,ta_Right,13); SetColumn(8,ta_Right,10); SetHead('Číslo\tNázev\tCena\tMnožství\tProdejní cena\tProd.cena celkem\tPrům.pořiz.cena\tPořízení celkem\tZisk'); ChangePageFormat end While((CompareStr(mDoklad,Pohyb.Doklad)) and (x)) begin ReadRec(Pohyb,VetaP) ; přečte větu ze souboru if(not(Pohyb.Vydaj)) ; aby bral jen vydaje GoTo(Dale) if(beru=False) GoTo(Dale) else begin if((Pohyb.CisloCeny<>1)or(Pohyb.CisloCeny=1)and(TiskP)); begin if(Pohyb.CisloCeny<>1) JenP=False if(TiskDetail=True) begin AddLine('') if(Pohyb.CisloCeny=1) TypCeny='P' if(Pohyb.CisloCeny=2) TypCeny='A' if(Pohyb.CisloCeny=3) TypCeny='B' if(Pohyb.CisloCeny=4) TypCeny='C' if(Pohyb.CisloCeny=5) TypCeny='D' if(Pohyb.CisloCeny=0) TypCeny='X' KeySklad10.Length=4 KeySklad10.Cislo=Swapl(Pohyb.CisloMat) if(FindKey(KeySklad10,VetaC)) begin ReadRec(Sklad,VetaC) mNazev=Sklad.Nazev end else begin mNazev='zboží v ceníku nenalezeno' end Naklad=Pohyb.SklCena*Pohyb.Mnozstvi SumaNaklad=SumaNaklad+Naklad SumaVynos=SumaVynos+Pohyb.Castka SSumaNaklad=SSumaNaklad+Naklad SSumaVynos=SSumaVynos+Pohyb.Castka Zisk=Pohyb.Castka-Naklad AddLine(Pohyb.Material+#9+mNazev+#9+TypCeny+#9+StrNative(Pohyb.Mnozstvi,4)+#9+StrFinanc(Pohyb.JednCena,2,True)+#9+StrFinanc(Pohyb.Castka,2,True)+#9+StrNative(Pohyb.SklCena,PNCDecSize,True)+#9+StrFinanc(Naklad,2,True)+#9+StrFinanc(Zisk,2,True)) end end Dale: x=NextKey(keypohyb12,VetaP) ReadRec(Pohyb,VetaP) ; přečte větu ze souboru Inc(Pozice) ; zvyseni citace zpracovanych vet SetStatus(Pozice) ; nastaveni stavoveho prouzku end ; konec 2. dotazu na Vydaje end ; vytiskni begin ;if((Nacti[1]<>0)or(Nacti[2]<>0)or(Nacti[3]<>0)or(Nacti[4]<>0)or(Nacti[5]<>0)) begin AddLine('Celkem'+#9+#9+#9+#9+#9+StrFinanc(SumaVynos,2,True)+#9+#9+StrFinanc(SumaNaklad,2,True)+#9+StrFinanc(SumaVynos-SumaNaklad,2,True)) Naklad=0 SumaNaklad=0 SumaVynos=0 Zisk=0 end else begin if((JenP=True)and(beru=True)) AddComment('Výdej ze skladu za cenu P'); end mDoklad='@@@@@@@@@@' end end else ; 1. dotaz na Vydaj begin Inc(Pozice) ; zvyseni citace zpracovanych vet SetStatus(Pozice) ; nastaveni stavoveho prouzku x=NextKey(keypohyb12,VetaP) ReadRec(Pohyb,VetaP) ; přečte větu ze souboru end; ; konec 1. dotazu na Vydaje end ; konec příkazu pro zpracování jedné věty If(AsponJeden=False) begin SetXSize(0) SetColumn(0,ta_Center,60); SetHead('------- Žádný doklad v zadaném období nesplňuje zadané podmínky -------'); AddComment(#9+'Zadané období od '+StrDate(OdData)+' do '+StrDate(DoData)) end else begin AddComment('') AddComment('') AddComment('') AddComment('') AddLine('Celkem'+#9+'za sestavu'+#9+#9+#9+#9+StrFinanc(SSumaVynos,2,True)+#9+#9+StrFinanc(SSumaNaklad,2,True)+#9+StrFinanc(SSumaVynos-SSumaNaklad,2,True)) end END