====== Izveštaj o stanju lagera sa presekom na dan po FIFO metodu ====== Izveštaj treba da omogući analizu razlike knjigovodstvene vrednosti skladišta vođenog po metodu srednje nabavne cene u odnosu ekvivalentno stanje ako bi se magacin vodio po FIFO metodu. //Balans zvanično ne podržava rad po FIFO metodu pa se radi isključivo o simulaciji//. Realizacija izveštaja neće se oslanjati na detekciju svake promene u sistemu i dodeljivanje FIFO zapisa, već će biti iskorišćen //inverzan pristup//. Suština se sastoji u **zapažanju ** da prema FIFO-u preostala količina robe na lageru mora da je zaprimljena po poslednjem ulazu. Ukoliko je ima više od toga, znači da deo pripada pretposlednjem i tako dok se zaliha ne izravna sa nulom. Algoritam se sastoji od sledećih koraka: - Formirati spisak nabavki određenog artikla na određenom magacinu sortiran po datumu prijema **u opadajućem poretku**. - Obrisati sve stavke koje su nastale nakon dana sa kojim se vrši presek. - Formirati //lager listu// na dan preseka. - Procesirati stavku po stavku //sa lager liste// usaglašavajuči je sa //spiskom nabavki// tako da se zadovolje uslovi iz pomenutog **zapažanja**. - Obrisati sve stavke iz //spiska nabavki// kojima nije dodeljena količina iz //lager liste//. Zapažanje nalaže da su u pitanju nabavke robe koja je prodata i ne učestvuje u //lager listi//. - Napraviti izveštaj koji će prikazati rezultujući //spisak nabavki// kao **Lager listu na dan X - po FIFO metodu**. ===== Procesni zadatak ===== Priroda posla je takva da ne može biti realizovana u jednoj SQL proceduri u okviru Jet-a (moglo bi na standardnim SQL serverima). Osnovu algoritma čini petlja za raspoređivanje preostale količine po //lager listi// na //spisak nabavki//. Posao će biti poveren **BLMrdSys** biblioteci. Sistem će činiti izveštaj **Lager na dan X - po FIFO obračunu** koji će u okviru svog **mrd**-a zahevati novu sistemsku funkciju **@LFF**. ==== @LFF ==== Komanda **BLMrdSys** biblioteke ima sledeća dejstva: - Upit korisnika za datum preseka stanja na lageru (sem ako se datum preda na drugi način) - Upit korisnika da odabere magacin koji se obračunava (bez opcije "sva skladišta") - Priprema tabele **TmpKorSimpCalc ** (u njoj će se čuvati obrađeni podaci) - brisanje svih zapisa pokrenutih pre više od 2 dana - provera da li neko već radi istu stvar za isto skladiše i obaveštenje o mogućem usporenju - Prosleđivanje dobijenog //JobID-a// izveštaju ==== Tabele "TmpKorSimpCho" i "TmpKorSimpCalc" ==== Tabela sadrži rezultat obračuna @LFF procedure. Ona je podskup tabele **TmpKorSimpCho** u kojoj se evidentira tok procesa obračuna kako bi ostali korisnici mogli da preduzmu neophodne korake (sačekati da se tekući obračun završi ili prekinuti tekući obračun i započeti sopstveni). {{:kb:tmpkorsimpcalc.jpeg?258x88 }} === TmpKorSimpCho === ^Polje ^Vrsta ^Vrednost ^Opis | |JobID |Long | | | |Funkcija |Long |1001 |Indikator vrste obračuna koji se obrađuje u slogovima TmpKorSimpCalc tabele. \\ \\ Vrednosti su registrovane u KontneGrupe > KontneGrupeSas tabelama pod KGrID=1195 (Privremeni zapisi obračuna). Zapisi su dostupni i preko viewa FN_TempCalc. | |IDFld |Long |Skladista.SklID | \\ Identifikacioni broj skladišta koje se obračunava. \\ Za sada je predviđeno da se obračun uvek vrši za sve artikle na odabranom magacinu. Po potrebi moguće je dodavanje dodatnih filtera (KatID, PodKatID). | |AddID |Long |0-100 |Procenat završenosti posla. | |Datum1 |Date | |Datum i vreme pokretanja procesa. | |Datum2 |Date | |Datum i vreme poslednjeg osvežavanja statusa AddID. | |Datum3 |Date | |Datum i vreme završetka procesa. | |Datum4 |Date | |Datum i vreme sa kojim je izvršen presek stanja (datum preseka lagera). | Algoritam: - Korisnik zadaje skladište i datum (opciono i vreme) preseka stanja. - Provera da li je proces za dati magacin sa takvim parametrom preseka već pokrenut, kao i da li je u logičnim okvirima.\\ Ako je pokrenut: Ponuditi "kačenje" na proces koji je već u toku\\ Ako nije zadovoljen logički okvir: Ponuditi prekid pokrenute procedure i započinjanje nove\\ Ako nije ni pokrenut: Upis vrednosti **SklID ** u **IDFld**, resetovanje vrednosti :\\ **AddID** =0\\ **Datum1** =Datum i vreme pokretanja procedure\\ **Datum2 ** i **Datum3** = NULL\\ **Datum4** =Zabeležiti datum i vreme na koje se radi presek - Pokretanje @LFF procesa izračunavanje dužine trajanja procesa i upis progresa u **AddID ** polje. - Osvežavati polje **AddID** napretkom obračuna, istovremeno upisivati u polje **Datum2** vreme kada je poslenje osveženje obavljeno. Osveženja se rade u koracima od po 1 (%). Znači biće 100 osvežavanja zapisa. === TmpKorSimpCalc === ^Polje ^Vrsta ^Vrednost ^Opis | |TmpsccID |Long, PK |AUTOINCREMENT |Jedinstveni primarni ključ sloga. | |TmpsmpID |Long, FK |UniBroj.UsrFn (blbrUNIFUN) |Refernca ka tabeli **TmpKorSimpCho**. | |DocID |Long |Ulaz.UlID |Identifikator dokumenta (UlID) ulazne kalkulacije koja je predmet obračuna. | |SasID |Long |SasUlaz.SasUlID |Identifikator pozicije u sastavu ulazne kalkulacije koja je predmet obračuna. | |DTStamp |Double | |Vremenski pečat transakcije (kako bi se ispravno sortiralo u opadajućem poretku). | |ElID |Long |SasUlaz.ElID |Identifikator artikla koji se obrađuje. | |KolCalc |Double | |Količina koja se sa lager liste "raspoređuje" na konkretan slog. Sve što ostane sa NULL (neraspoređeno) se briše | \\