Problem
Klient prowadzi skup owoców i warzyw. Wystawia Faktury RR (dla rolników ryczałtowych) w Comarch ERP Optima. Zgodnie z przepisami, od niektórych produktów rolnych powinien naliczać opłatę na Fundusz Promocji Owoców i Warzyw (0,1% wartości netto). W pewnym momencie klient zauważył, że na wydrukach faktur RR nie pojawia się składka na fundusz.
Ustalono następujące fakty:
- okazało się że kody PKWiU w kartotekach towarów na zgłoszonych dokumentach były puste
- klient później uzupełnił PKWiU w kartotekach, ale to nie pomogło – na już wystawionych fakturach nadal brakowało składki
- faktury RR wydawały się poprawne, a jedynie brakowało im tej pozycji
Dlaczego poprawienie kartoteki nie działa na już wystawionych fakturach
Comarch ERP Optima nalicza opłatę na fundusz automatycznie w momencie zapisu dokumentu.
W momencie zapisu dokumentu FRR wartość Twr_SWW (PKWiU) z kartoteki towaru (Towary) jest kopiowana do TrE_TwrSWW na pozycję dokumentu do (TraElem). Procedura RozliczenieFPPRDlaFRR czyta dane właśnie z pola TraElem
from cdn.TraElem join ##Tabla_Funduszy_Stawek_SWW on TwrSWW = TrE_TwrSWW
Późniejsza zmiana w kartotece nie aktualizuje już wystawionych dokumentów. Jeśli w momencie wystawiania FRR towar nie miał kodu PKWiU (NULL/pusty), TrE_TwrSWW na pozycji pozostaje pusty, procedura nie znajduje dopasowania i opłata = 0.
Tak więc jeśli podczas zapisu faktury kod PKWiU na towarze był pusty (nawet jeśli później został uzupełniony w kartotece), to na pozycji dokumentu pole TrE_TwrSWW pozostanie puste i już nigdy nie zostanie automatycznie uzupełnione.
Optima nie przelicza istniejących dokumentów. Operacja kopiowania PKWiU z kartoteki na pozycję odbywa się tylko raz – przy zapisie dokumentu.
Jak zdiagnozować?
Wystarczy proste zapytanie SQL porównujące kod PKWiU w karotece z kodem na pozycji faktury:
SELECT tn.TrN_NumerPelny, tn.TrN_DataOpe,
te.TrE_TwrSWW AS PKWiU_na_dokumencie,
t.Twr_SWW AS PKWiU_w_karotece,
te.TrE_TwrKod, te.TrE_TwrNazwa,
te.TrE_WartoscNetto
FROM CDN.TraElem te
JOIN CDN.TraNag tn ON tn.TrN_TrNID = te.TrE_TrNID
JOIN CDN.Towary t ON t.Twr_TwrId = te.TrE_TwrID
WHERE tn.TrN_Rodzaj = 350008 -- Faktura RR
AND tn.TrN_Bufor = 0
AND tn.TrN_Anulowany = 0
AND (te.TrE_TwrSWW IS NULL OR te.TrE_TwrSWW = '') -- PKWiU puste na dokumencie
AND t.Twr_SWW IS NOT NULL AND t.Twr_SWW != '' -- ale w karotece jest
ORDER BY tn.TrN_DataOpe DESC
W realnym przypadku wyszło 28 faktur RR z pustym PKWiU na pozycjach.
Rozwiązanie
UPDATE kopiujący kod PKWiU z karoteki towaru na puste pozycje dokumentów:
UPDATE te
SET te.TrE_TwrSWW = t.Twr_SWW
FROM CDN.TraElem te
JOIN CDN.TraNag tn ON tn.TrN_TrNID = te.TrE_TrNID
JOIN CDN.Towary t ON t.Twr_TwrId = te.TrE_TwrID
WHERE tn.TrN_Rodzaj = 350008
AND tn.TrN_Bufor = 0
AND tn.TrN_Anulowany = 0
AND (te.TrE_TwrSWW IS NULL OR te.TrE_TwrSWW = '')
AND t.Twr_SWW IS NOT NULL AND t.Twr_SWW != ''
WAŻNE:
- Rób backup przed UPDATE – zawsze.
- Przetestuj na kopii bazy lub sprawdź powyższym SELECT-em, które rekordy zostaną zmodyfikowane.
- Po UPDATE otwórz fakturę w Optimie, wygeneruj podgląd wydruku i składka na fundusz powinna pojawić się na wydruku.
Uwagi dodatkowe
- Faktury FRR mają
TrN_Rodzaj = 350008(zatwierdzone),350000(bufor/robocze),350002(korekta FRRK) - W tabeli nie ma kolumn dedykowanych dla opłaty na fundusz (jak przy opłacie cukrowej) – fundusz jest liczony ad hoc przez procedurę przy raporcie/naliczaniu
- Aktualizacja PKWiU na pozycjach nie wymaga restartu Optimy – procedura czyta dane przy każdym jej uruchomieniu
- Kolumna w bazie nazywa się
Twr_SWW(historyczna nazwa), ale w GUI i dokumentacji programu jest to kod PKWiU
