Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
kb:artikli:optimizacija_po_vazecem_periodu_main [2019/05/12 18:15] – created milano | kb:artikli:optimizacija_po_vazecem_periodu_main [2019/05/12 18:56] (current) – [Algoritam "važećeg perioda" (optmizacija)] milano | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Algoritam " | ====== Algoritam " | ||
- | Autor: | + | Autor: |
+ | Revizija: Milan Oparnica (06.08.2017) Od sada zapisi koji ne trebaju imati uticaj na važeći period imaju NULL u vazod/vazdo | ||
Algoritam iza zadatak da ukloni sledeća uska grla kod određivanja prodajne i cene koštanja: | Algoritam iza zadatak da ukloni sledeća uska grla kod određivanja prodajne i cene koštanja: | ||
Line 8: | Line 9: | ||
- Određivanje početne vrednosti za potrebe ažuriranje cena | - Određivanje početne vrednosti za potrebe ažuriranje cena | ||
- Utvrđivanje otpremnica i računa sa netačnim srednjim cenama i njihova ispravka | - Utvrđivanje otpremnica i računa sa netačnim srednjim cenama i njihova ispravka | ||
+ | |||
===== Određivanje početnih vrednosti za ažuriranje cena ===== | ===== Određivanje početnih vrednosti za ažuriranje cena ===== | ||
Line 34: | Line 36: | ||
^Polje^Tip^Svrha| | ^Polje^Tip^Svrha| | ||
- | |VazOd|INTEGER|Celobrojno polje koje predstavlja **datum početka** perioda za koji srednja i prodajna cena u slogu **SasUlaz** važi.| | + | |vazod|INTEGER|Celobrojno polje koje predstavlja **datum početka** perioda za koji srednja i prodajna cena u slogu **SasUlaz** važi.| |
- | |VazDo|INTEGER|Celobrojno polje koje predstavlja **datum kraja** perioda (ne uključujući dan unet u **VazDo**) od kog srednja i prodajna cena u slogu **SasUlaz** više ne važi.| | + | |vazdo|INTEGER|Celobrojno polje koje predstavlja **datum kraja** perioda (ne uključujući dan unet u **VazDo**) od kog srednja i prodajna cena u slogu **SasUlaz** više ne važi.| |
- | |VazDTS|DOUBLE|Duplikat **DTStamp** polja iz **Ulaz** tabele kako bi se izbegao nepotreban **JOIN** u upitima koji će vraćati rezulate strukture.| | + | |vazdts|DOUBLE|Duplikat **DTStamp** polja iz **Ulaz** tabele kako bi se izbegao nepotreban **JOIN** u upitima koji će vraćati rezulate strukture.| |
===== Validne vrednosti polja VazOd i VazDo (logička provera) ===== | ===== Validne vrednosti polja VazOd i VazDo (logička provera) ===== | ||
- | Primeri su dati nad sledećim vrednostima (# | + | Primeri su dati nad sledećim vrednostima (# |
+ | |||
+ | ^vazod^vazdo^Opis situacije| | ||
+ | |39875|401769|Ovo je normalno kod prvog i jedinog ulaza artikla koji tada važi od datuma ulaza do kraja (1/ | ||
+ | | | | | | ||
+ | |39875|39885|vo je normalno za artikal koji je ponovo nabaljen za 10 dana, pri čemu bi drugi slog izgledao...| | ||
+ | |39885|401769|...ovako| | ||
+ | | | | | | ||
+ | |39875|39875|Ovo je normalno za artikal koji je u toku jednog dana više puta ulazio. Mogući scenario sledećih polja je...| | ||
+ | |39875|39875|...ponovo je ušao, ali ima još jedan ulaz od istog dana| | ||
+ | |39875|39885|...sledeći ulaz od istog dana važi narednih 9 dana| | ||
+ | |39885|401769|...a 10-tog dana je artikal ponovo ušao, i od tada se više nije pojavljivao| | ||
+ | |||
+ | Iz ovih vrednosti mogu se izvući sledeći logički zaključci: | ||
+ | |||
+ | - Polja sa **vazod = vazdo** | ||
+ | - Ni jedan par **[elid, sklid]** | ||
+ | - Ni jedan par **[elid, sklid]** | ||
+ | - Ni jedan par **[elid, sklid]** | ||
+ | ====== Popisi ====== | ||
+ | |||
+ | Izuzetno je važno da se popisi više ne tretiraju kao poslednji dokumenti u danu, ako već nisu tako i snimljeni. Periodi **vazod** | ||
+ | |||
+ | Popisima se na **DTStamp** | ||
+ | |||
+ | Pošto su svi izlazi agregirani pod jednim danom i smešteni na njegov kraj, jedini podatak koji nam informaciju može pružiti jeste **TKol** | ||
+ | |||
+ | < | ||
+ | zbir svih ulaza do pre popisa + izmene po popisu – zbir izlaza do kraja prošlog dana. | ||
+ | </ | ||
+ | |||
+ | Tablica koja demonstrira problem: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Iz ovoga se vidi da će prethodni **TKol** | ||
+ | |||
+ | ===== Rešenje ===== | ||
+ | |||
+ | Razlog za usaglašavanje dokumenta Popis može biti samo promena u stanju (ili ceni, ali ako to nema veze sa količinom radi se o drugoj priči) pre popisa. Do promene stanja može doći samo izmenom tabele **Ulaz** | ||
+ | |||
+ | U prvom slučaju, izmena će se odraziti na **TKol** | ||
+ | |||
+ | Problem je kako razlikovati da li je do razlike u izlazima došlo pre ili posle popisa ? | ||
+ | |||
+ | Jedino rešenje je ipak da popis u okviru zapisa u **Popis** | ||
+ | |||
+ | ==== Implementacija u BLSCNIV | ||
+ | |||
+ | U strukturu **uMag** | ||
+ | |||
+ | === Matrica popisa === | ||
+ | |||
+ | Matrica popisa se formira prilikom prebacivanja podataka iz recordseta sa prometom artikala. Tada se za sve slogove, za koje se otkrije da predstavljaju slog popisa, umetne zapis u matricu popisa koja ima sledeći format: | ||
+ | |||
+ | ^Naziv polja^Vrsta^Opis| | ||
+ | |iIndex|Long|Ovde se upisuje broj reda iz osnovne matrice gde se čuvaju svi podaci o slogu popisa. Pošto je taj broj unikatan poslužiće nam kao unikatan index.| | ||
+ | |iElID|Long|ID artikla na koji se popis odnosi| | ||
+ | |iSklID|Long|ID skladišta na kom je popis urađen| | ||
+ | |dDatum|TDateTime|Datum i vreme izrade popisa| | ||
+ | |nLoTKol|Double|Originalna TKol vrednost učitana iz baze| | ||
+ | |nLoKol|Double|Količina uneta kroz popis| | ||
+ | |nChTKol1|Double|Vrednost TKol-a iz poslednjeg Ulaza pre popisa| | ||
+ | |nChTKol2|Double|Vrednost TKol-a iz Ulaza posle popisa| | ||
+ | | | |//< ima još polja u ovoj matrici...potrebno je updateovati ovaj dokument >// | | ||
+ | |||
+ | === Implementacija === | ||
+ | |||
+ | Izmene se dešavaju u modulu za obračun srednjih cena i nivelacija [[: | ||
+ | Koraci bitni za implementaciju: | ||
+ | |||
+ | - Sve izmene uMag.TKol (trenutna količina po faktičkom stanju) su preusmereni na jednu proceduru mSetNewTKol. \\ Izuzetak je jedino promena koja se dešava pod uicajem izlaza (Otpremnice) jer ona ne podleže analizi. | ||
+ | - TUlazRec strukturi dodato je novo polje LastUlDocTip. U to polje se smešta tip ulaznog dokumenta u trenutku izmene/ | ||
+ | |||
+ | ====== Izuzetci iz strukture " | ||
+ | |||
+ | ===== Inetrni nalozi za prijem i prenos robe ===== | ||
+ | |||
+ | U strukturu se ne unose slogovi iz **SasUlaz** | ||
+ | |||
+ | ===== Dokumenti koji ne utiču na obračun prodajne ili cene koštanja ===== | ||
+ | |||
+ | Od **06.08.2017** | ||
+ | |||
+ | ====== Važni upiti ====== | ||
- | | \\ <font 9pt/ | + | ^Upit^Opis| |
- | | \\ <font 9pt/ | + | |CS_UlaziDDDoc|Novi upit za dobijanje obracunskog peroda sc i nivel po predatom dokumentu| |
- | | \\ <font 9pt/ | + | |CS_UlaziSumIzlazi_Tst|CS_UlaziSumIzlazi samo bez UNIONA po Ulaz tabelama| |
- | | \\ <font 9pt/ | + | |zCalc_INKOLByDoc_xx|Upiti za dobijanje stanja svih lagera artikala predatog dokumenta na trenutak pre izrade predatog dokumenta| |
- | | \\ <font 9pt/ | + | |CS2_GetPer4Del| | |
- | | \\ <font 9pt/ | + | |CS2_GetPer4New| | |
- | | \\ <font 9pt/ | + | |CS2_GetPerErr_1| | |
- | | \\ <font 9pt/ | + | |
- | | \\ <font 9pt/ | + | |
- | | \\ <font 9pt/ | + | |
\\ | \\ | ||