Problem zerowych wartosci na dokumentach rozchodowych LISICKI

Problem zerowych wartości na dokumentach rozchodowych. Może się zdążyć, że przy dostawach z dużą ilością na pozycji przy niewielkiej cenie wartość pozycji przy rozchodach ulegnie wyzerowaniu nim wyzeruje się ilość. Kolejne rozchody pobierają tylko ilość przez co mamy zjawisko dokumentów (np. RW) z zerową wartością przy niezerowej ilości.

System automatycznie wycenia dokument wydania, aby na końcu bilans przyjęć i wydań był równy zero. Tutaj wycena nastąpiła na zero, ponieważ dokument przyjęcia się już zbilansował. Dzieje się tak w wyjątkowych przypadkach ja ten, kiedy jest duża ilość w małej cenie i wartość sztuki razy ilość nie daje wartości dokumentu. Przykład: PZ/001/00037/06/21 Wartość przyjęcia: 217,20, Cena jednostkowa 0,0362 zł, sztuk 6000. Wydania zaokrąglone do 0,04 zł powodują, że wartość dostawy szybciej zejdzie do 0 niż ilość. RW-P/001/00077/06/21 wydane 300 szt. pozycja 25 po 0 zł.

Przykład: Indeks: http://lisicki.platformacrm.pl/sales-met/item/2920accc-df4a-e911-841d-7ed30a52f64f

zgłoszenie:

Dzień dobry, bardzo proszę o sprawdzenie rejestru obrotu dla indeksu 29110. Niektóre dokumenty mają wartość zerową. Tak być nie może, coś jest niepoprawnego

Jeden z problemów będący efektem: zgłoszenie:

w szkicu mam dokument ZW/103/00001/10/21 którego nie mogę zatwierdzić ponieważ pokazuje różnice wartości, to jest właśnie ten indeks 29110 Bardzo proszę o pilne sprawdzenie

klient: Lisicki nie można zatwierdzić ZW o id: e7ba29d7-642a-ec11-8442-7ed30a52f64f treść błędu : ZW/103/00001/10/21 NIEPRAWIDŁOWA ILOŚĆ NA POZYCJI

source: NRWP/103/00015/10/21 source DL id: 44281E51-5E2A-EC11-8442-7ED30A52F64F

Błąd pochodzi z procedury document.documentlineID_Commit linia:225 wywołanie dla documenlineID: A16B6A85-6A2A-EC11-8442-7ED30A52F64F

Procedura Od lini 195 updatuje source dl m.in itemvalueLeft = itemvalueleft - @itemValue i sysItemValueLeft = sysItemValueLeft - @sysItemValue gdzie itemvalueLeft wynosi 0, a @itemValue = 0.12 i gdzie sysItemvalueLeft wynosi 0, a @sysItemValue = 0.12

Sprawdzany jest warunek w lini 203 przechodzi z true dlatego ze sysItemValueLeft != sysItemValue gdyż sysItemValueLeft został chwile wcześniej ustawiony na wartosć -0.12 która jest różna od 0.

ustawiana jest wartosć @sysItemValueLeftOnRwp = sysItemValueLeft z source (-0.12)

wykonywany jest update tym razem na dl gdzie documentLineID = @documentLineID m.in itemValue = itemValue + @sysItemValueLeftOnRwp i sysItemValue = sysItemValue + @sysItemValueLeftOnRwp w obu przypadkach pozostaje 0 bo 0.12+(-0.12) = 0

Następnie mamy if z dl where documentLineID = @documentLineID and (itemValue <= 0 or sysitemValue <= 0)) wywołanie błędu RAISERROR('#error.documentLine.invalidQuantity' , 16, 1)

Propozycja naprawienia: zmiana warunku w ifie /Jeśli RW zostaje skorygowane na maksa poprzez ZW to sprawdzamy czy nie zostaje końcówka wartości i ja sprzedajemy do ZW/ dodanie and sysItemValueLeft >0

lub zmiana w wczesniejszym update source , że jeżeli wartosc <0 to 0.

Zmiana kodu od linii 195:

Text Only
1
2
3
4
5
6
update [document].[documentLine]
set correctedItemQuantity = isnull(correctedItemQuantity,0) - @itemQuantity
    , correctedItemValue = isnull(correctedItemValue, 0) - @itemValue
    , itemvalueLeft = itemvalueleft - @itemValue
    , sysItemValueLeft = sysItemValueLeft - @sysItemValue
where [documentLineid] = @sourceDocumentLineId AND [sign] =  -1

Na:

Text Only
1
2
3
4
5
6
update [document].[documentLine]
set correctedItemQuantity = case when isnull(correctedItemQuantity,0) - @itemQuantity < 0 then 0 else isnull(correctedItemQuantity,0) - @itemQuantity end
    , correctedItemValue = case when isnull(correctedItemValue, 0) - @itemValue < 0 then 0 else isnull(correctedItemValue, 0) - @itemValue end
    , itemvalueLeft = case when itemvalueleft - @itemValue < 0 then 0 else itemvalueleft - @itemValue end
    , sysItemValueLeft = case when sysItemValueLeft - @sysItemValue < 0 then 0 else sysItemValueLeft - @sysItemValue end
where [documentLineid] = @sourceDocumentLineId AND [sign] =  -1