Stav materiálu |
Top Previous Next |
Seznam témat:
Zjistili jsme, že při nedodržení organizačních předpokladů při provozu systému na dvou oddělených místech, která si předávají data pomocí replikačního systému je možno narušit konzistenci pohybů na skladech a stavů. Princip vzniku chyby není na tomto místě podstatný. Důvodem je pořízení výdejky ze stejného skladu na dvou oddělených místech a následná replikace těchto dat. Výsledkem může být skutečně vznik nekonzistence stavů a pohybů.
Dalším důvodem vzniku nekonzistence mohla být chyba v replikačním systému (01/2002), která pravděpodobně způsobila nevykonání některých trigerů a následně potom nesoulad stavového souboru a pohybů materiálu na kartě.
Zde je funkce která přepočítá stavový soubor. Tuto funkci lze použít pouze v případech, kdy je používána striktně FIFO metoda na skladech a nepoužívá se "možnost výdejů dodávek ručně". delete from DBA.osklstavevidceny go delete from DBA.osklstavdod go insert into DBA.osklstavevidceny(sklad_id,material_id,data_id,poradi_id,mnoz,cena) select rada_id,material_id,data_id,id_poradi,(1-zruseno)*(mnoz-mnozstor),evidcena from DBA.osklprijemit where druhdokl = 0 and storno = 0 go insert into DBA.osklstavdod(sklad_id,material_id,data_id,poradi_id,mnoz) select rada_id,material_id,data_id,id_poradi,(1-zruseno)*(mnoz-mnozstor) from DBA.osklprijemit where druhdokl = 0 and storno = 0 go update DBA.osklstavdod as d set mnoz = mnoz - isnull ((select sum (mnoz-mnozstor) from DBA.osklvydejit where storno = 0 and prijemdoddata_id = d.data_id and prijemdodporadi_id = d.poradi_id),0) go update DBA.osklstavevidceny as e set mnoz = mnoz - isnull ((select sum (mnoz-mnozstor) from DBA.osklvydejit where storno = 0 and prijemdoddata_id = e.data_id and prijemdodporadi_id = e.poradi_id),0)
Výsledek je možno zkontrolovat touto sestavou: Datový zdroj : SELECT omater.id_material as kod, omater.nazev, omater.druh_id, osklady.id_sklad as sklad, osklady.nazev as skladnazev,
(SELECT SUM(osklstavevidceny.cena*osklstavevidceny.mnoz) FROM dba.osklstavevidceny WHERE osklstavevidceny.sklad_id = sklad AND osklstavevidceny.material_id = kod) as stavkc,
(SELECT SUM(osklstavevidceny.mnoz) FROM dba.osklstavevidceny WHERE osklstavevidceny.sklad_id = sklad AND osklstavevidceny.material_id = kod) as stav,
(SELECT ISNULl((SELECT SUM(osklprijemit.mnoz*(osklprijemit.storno*(-2)+1)*(osklprijemit.druhdokl*(-2)+1)) FROM dba.osklprijemit WHERE osklprijemit.rada_id=sklad AND osklprijemit.material_id=kod),0) -
ISNULl((SELECT SUM(osklvydejit.mnoz*(osklvydejit.storno*(-2)+1)) FROM dba.osklvydejit WHERE osklvydejit.rada_id=sklad AND osklvydejit.material_id=kod),0)) as stav_pohyby,
(SELECT ISNULl((SELECT SUM(osklprijemit.evidcena*osklprijemit.mnoz*(osklprijemit.storno*(-2)+1)*(osklprijemit.druhdokl*(-2)+1)) FROM dba.osklprijemit WHERE osklprijemit.rada_id=sklad AND osklprijemit.material_id=kod),0) -
ISNULl((SELECT SUM(osklvydejit.evidcena*osklvydejit.mnoz*(osklvydejit.storno*(-2)+1)) FROM dba.osklvydejit WHERE osklvydejit.rada_id=sklad AND osklvydejit.material_id=kod),0)) as stavkc_pohyby
FROM dba.omater, dba.osklady WHERE (stav - stav_pohyby <> 0) or (stavkc - stavkc_pohyby <> 0) ORDER BY sklad, kod
Související témata |