; vytipování záporných zůstatků na skladě ; verze z 8.6.2010 ; Autor: WinDUO Team Name('Záporný zůstatek na skladě') Designed('Skl_Man#1') Descr('Vypíše položky se záporným zůstatkem','Změna třídění - Ne','Filtr - Ne') NewWNS('SklZapor.WNS','Záporný zůstatek na skladě') WNSType(1); DeclareRec('Sklad') DeclareRec('KeySklad2') DeclareRec('Pohyb') DeclareRec('KeyPohyb2') DeclareRec('SkupinovaOperace') DeclareRec('KeySkupinovaOperace1') SetColumn(0,ta_Left,4) ;Sklad SetColumn(1,ta_Left,14) ;Material SetColumn(2,ta_Left,35) ;Popis SetColumn(3,ta_Left,10) ;Datum SetColumn(4,ta_Left,10) ;Doklad SetColumn(5,ta_Right,20) ;Zustatek pred SetColumn(6,ta_Right,20) ;Mnozstvi SetColumn(7,ta_Right,20) ;Zustatek po SetHead('Sklad\tČíslo\tPopis\tDatum\tDoklad\tZůstatek před\tMnožství\tZůstatek po'); InitStatus(UsedKeys(KeySklad2),,'Výpis záporných zůstatků') ; inicializace stavoveho prouzku SetDescr(0,0,TA_Right|descr_PageNum,'Strana: '); SetDescr(1,0,TA_Center,'Výpis záporných zůstatků ve skladu') 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 VetaP:LongInt VetaS:LongInt ClearKey(KeySklad2) ; resetuje ukazatel aktuální věry v souboru Pozice:LongInt PoslCisloMat:LongInt HlavaVytistena:Boolean x:Boolean Mnozstvi:Real Zustatek:Real ZustatekPred:Real BylaRezervace:Boolean PoslCisloMat=0 While(NextKey(KeySklad2,VetaS)) ; začátek cyklu přes celý soubor begin ; začátek příkazu pro zpracování jedné věty ReadRec(Sklad,VetaS) ; přečte větu ze souboru if(InFilter(Sklad)) begin HlavaVytistena=False Zustatek=Sklad.PocStav ZustatekPred=Zustatek if(Sklad.PocStav<0) begin ;vypis hlavicku AddComment('') SetSumLine(6) AddLine(Str(Sklad.Sklad,,,True)+#9+Sklad.Material+#9+Sklad.Nazev+#9+#9+'Poč. stav'+#9+#9+#9+StrNative(Zustatek)) HlavaVytistena=True end KeyPohyb2.Length=4 KeyPohyb2.CisloMat=SwapL(Sklad.Cislo) if(SearchKey(KeyPohyb2,VetaP)) begin ;nasel pohyb ReadRec(Pohyb,VetaP) x=True While((x) and (KeyPohyb2.CisloMat=SwapL(Sklad.Cislo))) begin ReadRec(Pohyb,VetaP) BylaRezervace=False if(not Pohyb.Vydaj) ;prijmy begin Zustatek=Zustatek+Pohyb.Mnozstvi Mnozstvi=Pohyb.Mnozstvi end else begin; vydaj nebo rezervace if(Pohyb.Rezervace=0) begin Zustatek=Zustatek-Pohyb.Mnozstvi Mnozstvi=Pohyb.Mnozstvi*(-1) end else begin BylaRezervace=True end end if((Zustatek<0)and(not BylaRezervace)) begin if(not HlavaVytistena) begin ;tisk hlavicky AddComment('') SetSumLine(6) AddLine(Str(Sklad.Sklad,,,True)+#9+Sklad.Material+#9+Sklad.Nazev+#9+#9+#9+#9+#9) HlavaVytistena=True end ;tisk pohybu se zapornym zustatkem KeySkupinovaOperace1.Length=4 KeySkupinovaOperace1.Cislo=Swapl(Pohyb.Hrom) if(SearchKey(KeySkupinovaOperace1,VetaS)) begin ReadRec(SkupinovaOperace,VetaS) end else SkupinovaOperace.Doklad=Pohyb.Doklad AddLine(Str(Sklad.Sklad,,,True)+#9+Sklad.Material+#9+Pohyb.Popis+#9+StrDate(Pohyb.Datum)+#9+SkupinovaOperace.Doklad+#9+StrNative(ZustatekPred)+#9+StrNative(Mnozstvi)+#9+StrNative(Zustatek)) end ZustatekPred=Zustatek x=NextKey(KeyPohyb2,VetaP) end; konec cyklu pres pohyb jednoho materialu end else begin ;nenasel uz zadny dalsi pohyb nasledujiciho materialu, konec souboru ClearKey(KeyPohyb2) end end Inc(Pozice) ; zvyseni citace zpracovanych vet SetStatus(Pozice) ; nastaveni stavoveho prouzku end; konec cyklu pres Sklad END ; konec programu