; verze 27.1.2016 - Milan Slíva, sliva@fi.cz Name('Překročení stavů') ; pod tímto názvem bude sestava v menu Designed('Skl_Man#1') ; sestava bude dostupná z okna Adrman Author('Winduo Team','EMail: winduo@winduo.cz','http://www.winduo.com','http://www.winduo.cz') ;informace o autorovi Descr('Vypíše zboží které má překročen nebo podkročen stav na skladu','Změna třídění - Ne','Filtr - Ano') ;popis sestavy, tento text bude v bublince ;FileName('MinMax.WNS') ; pod tímto názvem bude sestava uložena na disku Veta:LongInt ; definuje proměnnou (sklad) Pozice:LongInt ; definuje proměnnou TiskNulove:Boolean=False TiskDruh:Boolean=False TiskNedef:Boolean=False TiskVse:Boolean=False Beru:Boolean=False x:Boolean=False Zustatek:Real=0 Rozdil:Real=0 DeclareRec('Sklad') DeclareActiveIndex(Sklad,'KeySklad') ; přiřazení a definice třídícího klíče ClearKey(KeySklad) ; resetuje ukazatel aktuální věry v souboru WNSType(1); NewWNS('MinMax.WNS','Stavy') DlgFollowMouse(True) ;{definice uvodniho dialogu} DefDialog('Překročení a podkročení stavů zboží',462,184) DlgShade(-1,'',4,27,453,86) DlgStatic(-1,' Volba údajů',3,5,104) DlgCheckBox(109,TiskNulove,10,30,438,,'Zahrnout do tisku i položky s nulovým zůstatkem') DlgOnLineHelp(109,'V sestavě budou / nebudou uveden i ty položky, které mají nulový zůstatek') DlgCheckBox(110,TiskNedef,10,50,438,,'Tisknout i ty, které nemají vyplněno Min a Max') DlgOnLineHelp(110,'Pokud mají v ceníku uvedeno Minimum = 0 a Maximum = 0, budou/nebudou tisknuty') DlgCheckBox(111,TiskDruh,10,70,438,,'Tisknout údaj Druh') DlgOnLineHelp(111,'Údaj Druh bude vytištěn do sestavy') DlgCheckBox(112,TiskVse,10,90,438,,'Tisknout vše, bez ohledu na zůstatek') DlgOnLineHelp(112,'Tisknou se všechny položky, bez ohledu na zůstatek, rozdíl počítán vůči minimálnímu zůstatku') DlgButton(id_OK,'OK',320,118); DlgOnLineHelp(id_OK,'Pokračuje ve zpracování') DlgButton(id_Cancel,'Zpět',388,118); DlgOnLineHelp(id_Cancel,'Ukončí bez zpracování') if(DlgExecute(True)<>ID_OK) Halt if(TiskDruh=False) begin SetColumn(0,ta_Right,4); SetColumn(1,ta_Left,14); SetColumn(2,ta_Left,30,pf_FatPen); SetColumn(3,ta_Left,5); SetColumn(4,ta_Right,10); SetColumn(5,ta_Right,10); SetColumn(6,ta_Right,10); SetColumn(7,ta_Right,10); SetHead('Sklad\tČíslo\tNázev\tMJ\tMin stav\tMax stav\tStav na skladě\tRozdíl'); end if(TiskDruh=True) begin SetColumn(0,ta_Right,4); SetColumn(1,ta_Right,4); SetColumn(2,ta_Left,14); SetColumn(3,ta_Left,30,pf_FatPen); SetColumn(4,ta_Left,5); SetColumn(5,ta_Right,10); SetColumn(6,ta_Right,10); SetColumn(7,ta_Right,10); SetColumn(8,ta_Right,10); SetHead('Sklad\tDruh\tČíslo\tNázev\tMJ\tMin stav\tMax stav\tStav na skladě\tRozdíl'); end SetDescr(0,0,TA_Right|descr_PageNum,'Strana: '); SetDescr(1,0,TA_Center,'Výpis překročených a podkročených zásob'); SetDescr(2,0,TA_Left|descr_Date,'Datum: '); SetDescr(3,1,TA_Left|descr_UserDescr,''); pokud je pouzit descr_UserDescr, tak si program vyzada dodatecny popis if(IsFilter(Sklad)) ; dotaz, zda je aktivní filtr do sestav begin SetDescr(4,1,TA_Right,'Aktívní filtr'); end InitStatus(UsedKeys(KeySklad)) ; inicializace stavoveho prouzku While(NextKey(KeySklad,Veta)) ; začátek cyklu přes celý soubor begin ; začátek příkazu pro zpracování jedné věty ReadRec(Sklad,Veta) ; přečte větu ze souboru if(InFilter(Sklad)) ; dotaz, zda věta prošla filtrem begin ; začátek příkazu pro operace s těmi, které prošly filtrem Beru=False Zustatek=Sklad.PocStav+Sklad.Prijmy-Sklad.Vydaje if(TiskVse) begin Beru=True Rozdil=Zustatek-Sklad.Minimum end else begin if((Zustatek>Sklad.Maximum)and(Sklad.Maximum>0)) begin Beru=True Rozdil=Zustatek-Sklad.Maximum end if(Zustatek