Pravidla pro dotazy mířené na množství v příjemkách, výdejkách a fakturách

Top  Previous  Next

Seznam témat:

řešení

 

Řešení

Tento dokument popisuje některá pravidla ve výpočtu celkového množství a cen na příjemkách, výdejkách, resp. fakturách.

 

1. Příjemky (výdejky) jsou v databázi uchovávány tak, že množství, evidenční cena (příp. i prodejní cena) jsou vždy kladné, bez ohledu na to, jestli jde o storno položku. Zda se jedná, či nejedná o storno (vratku) říká sloupeček storno v tabulce osklprijemit (osklvydejit). To, že na položkách příjemky (výdejky) je vidět záporné množství a celkovou cenu (mnoz*cena) pro storna (vratky), je jenom věcí zobrazení, aby se v tom uživatel líp orientoval. V DB je to ale opravdu uloženo s kladnými hodnotami. Existuje jednoduché řešení, jak to do sestav dostat mínusem. Tam, kde se používá hodnota mnoz z tabulky osklprijemit (osklvydejit) (např. pro výpočet celkové evidenční ceny), nutno tuto hodnotu vynásobit hodnotou (1-2*storno):

A. pro storno=0 platí:        1-2*storno = 1-2*0 =  1
 
B. pro storno=1 platí:        1-2*storno = 1-2*1 = -1

 

Takže storna (vratky) tímto obrátí množství do mínusu.

 

2. U faktur je to trochu jinak. Kvůli tomu, že je možné dávat slevy rovnou v Kč, bude znaménko ceny rozhodovat o tom, zda jde o fakturovanou nebo "dobropisovanou" částku. Proto i klasické dobropisy dávají záporné ceny, ale množství zůstává kladné. Tak je možné prostým vynásobením množství a ceny dostat celkovou částku s odpovídajícím znaménkem...

 

3. Storna hlaviček dokladů.

Příjemky (výdejky) mají v tabulkách osklprijemhd a osklprijemit (osklvydejhd a osklvydejit) jako součást primárního klíče i položku druhdokl, která určuje zda jde o normální příjemku (výdejku), nebo o storno dokladu (druhdokl = 1). Podobně tak faktury mají v tabulkách ovydfakthd a ovydfaktit položku druhpln, která kromě toho, že říká o jaký druh plnění se jedná, může nabývat hodnoty 1, což znamená storno dokladu.

 

3a. Provedení storna hlavičky příjemky způsobí kromě jiného i to, že vytvoří zápis do tabulek osklprijemhd a osklprijemit s druhdokl=1 a původnímu záznamu nastaví položku zruseno na 1 (v osklprijemhd i osklprijemit). Aby správně zafungovaly sumace množství, příp. cen na příjemkách, které můžou být stornovány, je nutno použít jeden ze dvou následujících postupů:

i) buďto omezit daný SQL dotaz jenom na záznamy, které mají druhdokl = 0 a zároveň zruseno = 0

ii) nebo tam, kde se selektuje (sumuje) množství, vynásobit jeho hodnotu výrazem (1-2*druhdokl), což zafunguje podobně jako (1-2*storno) pro položkové storno

Přirozeně v obou případech je nutno použít i výraz 1-2*storno, aby se správně započetly i položková storna...

 

3b. Zachování integrity a existujících vazeb při použití kombinace položkových a hlavičkových storn je úloha extrémně složitá. Na příjemkách to funguje normálně, ale u výdejek je toto zadání neschůdné. Proto je použito poněkud zjednodušující řešení, a to zrušení všech položek výdejky při hlavičkovém stornu. To má za následek to, že u výdejek není nutné ohlížet se na hodnotu položky druhdokl.

 

3c. U faktur hlavičkové storno funguje trošku jinak. Protože se připouští, že jeden účetní doklad může obsahovat více druhů plnění (např. faktura a dobropis), nelze jednoduše použít vzoreček typu 1-2*druhpln, protože ono druhpln je z intervalu [0..6]. Celé storno se tudíž řeší jenom na úrovni hlaviček - původním druhům plnění se nastaví položka zruseno na 1. Žádné položky se ale do tabulky ovydfaktit nekopírují, takže pro sumace např. do sestav nutno použít podmínku přes hlavičku dané faktury: druhpln = 0 a zruseno = 0. 

 

Související témata