; vypise vysledovku na zboží - 20.8.2003 Name('Výsledovka na zboží') ; pod tímto názvem bude sestava v menu Designed('Skl_Man#1') Author('Winduo Team','EMail: winduo@winduo.cz','http://www.winduo.com') ;informace o autorovi Descr('Výnosy - náklady na jednotlivá zboží','Možnost využít filtr - Ano','Možnost změny třídění - Ne') ;popis sestavy, tento text bude v bublince NewWNS('VyslZboz.WNS','Výsledovka na zboží') WNSType(1); VetaP:LongInt ; definuje proměnnou (pohyb) VetaS:LongInt ; definuje proměnnou (sklad) Pozice:LongInt ; definuje proměnnou PrijemKc:Real VydajKc:Real PocetPrijmu:Real PocetVydaju:Real PrumNakCena:Real PrumProdCena:Real Rabat:Real LocStr:String PoslNakCena:Real PNCDecSize:Byte=VAL(GetDataINI('SKLAD','PNCDecSize')) x:Boolean OdData:Word=0 DoData:Word=0 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 Beru:Boolean ZpusobTisku1:Boolean=True ZpusobTisku2:Boolean ZpusobTisku3:Boolean ZpusobTisku4:Boolean ZpusobTisku5:Boolean Omezeni2:Real Omezeni3:Real Omezeni4:Real Omezeni5:Real ValidCislo:String='0123456789.-' DeclareRec('Sklad') DeclareRec('KeySklad6') DeclareRec('Pohyb') DeclareRec('KeyPohyb8') DeclareRec('Program') ;{definice uvodniho dialogu} ;DlgFollowMouse(True) DefDialog('Výsledovka na zboží',462,274) DlgShade(-1,'',4,27,453,174) 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/příjemky, 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/příjemky, 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,53,280,,'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') DlgStatic(-1,'Vytisknout:',10,74,70) DlgRadioButton(120,ZpusobTisku1,85,73,70,,'vše',120,124) DlgOnLineHelp(120,'Budou vytištěny informace o všech skladových položkách') DlgRadioButton(121,ZpusobTisku2,85,93,222,,'prům. rabat v % je menší než:',120,124) DlgOnLineHelp(121,'JENOM ŠPATNÉ ZBOŽÍ - budou vytištěny informace o těch položkách, na nichž byl dosažený rabat v procentuálním vyjádření menší nežli zadaná hodnota') DlgEdit(221,Omezeni2,310,91,50,20,6,,ValidCislo,,True) DlgOnLineHelp(221,'Zadej hodnotu v procentech, např. 10. Položky, jejichž rabat je větší nežli 10% pak nebudou vytištěny') DlgRadioButton(122,ZpusobTisku3,85,113,222,,'prům. rabat v % je větší než:',120,124) DlgOnLineHelp(122,'JENOM DOBRÉ ZBOŽÍ - budou vytištěny informace o těch položkách, na nichž byl dosažený rabat v procentuálním vyjádření větší nebo roven nežli zadaná hodnota') DlgEdit(222,Omezeni3,310,111,50,20,6,,ValidCislo,,True) DlgOnLineHelp(222,'Zadej hodnotu v procentech, např. 10. Položky, jejichž rabat je menší nežli 10% pak nebudou vytištěny') DlgRadioButton(123,ZpusobTisku4,85,133,222,,'prům. rabat v '+Program.Mena+' je menší než:',120,124) DlgOnLineHelp(123,'JENOM ŠPATNÉ ZBOŽÍ - budou vytištěny informace o těch položkách, na nichž byl dosažený rabat v absolutní částce menší nežli zadaná hodnota') DlgEdit(223,Omezeni4,310,131,80,20,8,,ValidCislo,,True) DlgOnLineHelp(223,'Zadej hodnotu v '+Program.Mena+', např. 5000. Položky, jejichž rabat je větší nežli 5000,-'+Program.Mena+', pak nebudou vytištěny') DlgRadioButton(124,ZpusobTisku5,85,153,222,,'prům. rabat v '+Program.Mena+' je větší než:',120,124) DlgOnLineHelp(124,'JENOM DOBRÉ ZBOŽÍ - budou vytištěny informace o těch položkách, na nichž byl dosažený rabat v absolutní částce větší nebo roven nežli zadaná hodnota') DlgEdit(224,Omezeni5,310,151,80,20,8,,ValidCislo,,True) DlgOnLineHelp(224,'Zadej hodnotu v '+Program.Mena+', např. 5000. Položky, jejichž rabat je menší nežli 5000,-'+Program.Mena+', pak nebudou vytištěny') DlgButton(id_OK,'OK',414-124,156+50); DlgOnLineHelp(id_OK,'Pokračuje ve zpracování') DlgButton(id_Cancel,'Zpět',373,156+50); DlgOnLineHelp(id_Cancel,'Ukončí bez zpracování') DlgButton(id_Help,'Help',24,156+50); DlgOnLineHelp(id_Help,'Help') DlgSetHelp(help_ContextPopUp,244) if(DlgExecute(True)<>ID_OK) Halt if(DoData=0) DoData=65535 SetDescr(0,0,TA_Right|descr_PageNum,'Strana: '); SetDescr(1,0,TA_Center,'Výsledovka na zboží') SetDescr(2,0,TA_Left|descr_Date,'Datum: '); SetDescr(3,1,TA_Center,''); if(IsFilter(Sklad)) SetDescr(4,1,TA_Right,'Aktivní filtr'); else SetDescr(4,1,TA_Right,''); SetDescr(5,1,TA_Center,'Zadané období od '+StrDate(OdData)+' do '+StrDate(DoData)) SetDescr(6,2,TA_Left|descr_UserDescr,''); pokud je pouzit descr_UserDescr, tak si program vyzada dodatecny popis SetColumn(0,ta_Left,14) ;material SetColumn(1,ta_Left,30) ;nazev SetColumn(2,ta_Right,12) ;pocet prijmu SetColumn(3,ta_Right,13) ;nakup celkem SetColumn(4,ta_Right,13) ;PrumNakCena SetColumn(5,ta_Right,13) ;PoslNakCena SetColumn(6,ta_Right,12) ;PocetVydaj SetColumn(7,ta_Right,13) ;prodej celkem SetColumn(8,ta_Right,13) ;PrumProdCena SetColumn(9,ta_Right,13) ;rabat absol SetColumn(10,ta_Right,6) ;rabat% SetColumn(11,ta_Right,13) ;zustatek SetHead('Číslo\tNázev\tPočet příjmů\tNákup celkem\tPrům.nákup.cena\tPosl.nákup.cena\tPočet výdajů\tProdej celkem\tPrům.prod.cena\tRabat\tRabat%\tAktuální zůstatek'); InitStatus(UsedKeys(KeySklad6)) ; inicializace stavoveho prouzku ClearKey(KeySklad6) While(NextKey(KeySklad6,VetaS)) ; začátek cyklu přes celý soubor begin ; začátek příkazu pro zpracování jedné věty ReadRec(Sklad,VetaS) if((InFilter(Sklad))and(Sklad.TypKarty=0)) begin PrijemKc=0 VydajKc=0 PocetPrijmu=0 PocetVydaju=0 PoslNakCena=0 KeyPohyb8.Length=4 KeyPohyb8.CisloMat=Swapl(Sklad.Cislo) x=SearchKey(KeyPohyb8,VetaP) While((x)and(KeyPohyb8.CisloMat=Swapl(Sklad.Cislo))) begin ReadRec(Pohyb,VetaP) if((Pohyb.Datum>=OdData)and(Pohyb.Datum<=DoData)) begin if(Pohyb.Vydaj) ; zpracovani vydaje begin if(Pohyb.Rezervace=0) ; aby nebral rezervace begin if((Pohyb.CisloCeny=1)and(not TiskP)); je-li Nebrat ceny C begin end else begin PocetVydaju=PocetVydaju+Pohyb.Mnozstvi VydajKc=VydajKc+Pohyb.Castka end end end else ; prijem begin PocetPrijmu=PocetPrijmu+Pohyb.Mnozstvi PrijemKc=PrijemKc+Pohyb.Castka if(Pohyb.Mnozstvi<>0) PoslNakCena=Pohyb.Castka/Pohyb.Mnozstvi end ;AddLine(Pohyb.Material+#9+StrDate(Pohyb.Datum)#9+#9+#9+#9+'test pohyb'); toto by se dalo využít pro tisk detailu, ale bylo by vhodné to zduplikovat a dát až za tisk součtového řádku end x=NextKey(KeyPohyb8,VetaP) end PrumNakCena=0 if(PocetPrijmu<>0) PrumNakCena=PrijemKc/PocetPrijmu PrumProdCena=0 if(PocetVydaju<>0) PrumProdCena=VydajKc/PocetVydaju Rabat=0 if(PrumNakCena<>0) Rabat=100*((PrumProdCena/PrumNakCena)-1) if(PrumProdCena=0) Rabat=0 beru=false if(ZpusobTisku1) beru=True if((ZpusobTisku2)and(Rabat=Omezeni3)) beru=True if((ZpusobTisku4)and(VydajKc-(PocetVydaju*PrumNakCena)=Omezeni5)) beru=True if(beru) begin LocStr=Sklad.Material+#9+Sklad.Nazev+#9+StrNative(PocetPrijmu)+#9+StrFinanc(PrijemKc,2)+#9+StrFinanc(PrumNakCena,PNCDecSize)+#9 AddLine(LocStr+StrFinanc(PoslNakCena,PNCDecSize)+#9+StrNative(PocetVydaju)+#9+StrFinanc(VydajKc,2)+#9+StrPrice(PrumProdCena)+#9+StrFinanc(VydajKc-(PocetVydaju*PrumNakCena),2)+#9+Str(Rabat,0,2)+#9+StrNative(Sklad.Zustatek)) end end Inc(Pozice) ; zvyseni citace zpracovanych vet SetStatus(Pozice) ; nastaveni stavoveho prouzku end END