Stav materiálu

Top  Previous  Next

Seznam témat:

řešení

 

Řešení

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

Začínáme_se_skladem