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).
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 |