Check your invoice candidate according to the expectations described in the SQL. They should all match.
SELECT
ic.c_invoice_candidate_id,
ic.qtyordered -- >0
icr.c_invoice_candidate_id -- is NULL (=not enqueued in recompute)
ic.processed, -- is N (= not invoiced)
ic.qtytoinvoice, -- > 0
ic.qtytoinvoice_override, -- NULL or > 0
ic.netamttoinvoice, -- > 0
istoclear, -- is N
iserror, -- is Y
DateToInvoice, -- is not NULL
invoicescheduleamtstatus -- contains "OK"
FROM c_invoice_candidate ic
JOIN ad_org o ON ic.ad_org_id = o.ad_org_id
LEFT JOIN c_invoice_candidate_recompute icr ON icr.c_invoice_candidate_id = ic.c_invoice_candidate_id
LEFT JOIN c_invoice_line_alloc ila ON ila.C_invoice_candidate_id = ic.C_invoice_candidate_id
LEFT JOIN c_invoiceline il ON ila.c_invoiceline_id = il.c_invoiceline_id
LEFT JOIN c_invoice i ON il.c_invoice_id = i.c_invoice_id
WHERE true
and ic.processed = 'N'
Check the process revision for the invoicing process you started for details. You can see the selection query there.
With the ad_pinstance_id
from process revision you can check the t_lock
table if the invoice candidate was already enqueued.
Check if an async work package was created and if that is on error or still in progress.
Mark invoice candidate to be recomputed:
insert into c_invoice_candidate_recompute
select c_invoice_candidate_id,NULL,'3'
...
Cause: Something which is basic to the invoice candidate has changed. Most common is a price change after the candidate was created.
Troubleshoot: Using https://github.com/metasfresh/metasfresh-documentation/issues/223
Sample:
select p_msg,* from de_metas_invoicecandidate.c_invoice_candidate_diagnose_haschanges_error_v.
1000002: @LineNetAmt@: 0.00->700.00
1000003: @LineNetAmt@: 0.00->2800.00
1000005: @LineNetAmt@: 0.00->-175.00
1000006: @LineNetAmt@: 0.00->-232.75
Update invalid result: Updated 7 invoice candidates, 0 errors
Solution: Delete affected invoice candidates via the WebUI. They will be recreated automatically.
Alternative: Delete via SQL but then you need to run the process to recreate the ICs.
Symptom: Invoice is not created
Analyse: Error in async workpackage:
Error: The two augents need to have an equal productId; firstAugent=StockQtyAndUOMQty(productId=ProductId(repoId=2006242), stockQty=5 Stk, uomQty=5 Stk); secondAugent=StockQtyAndUOMQty(productId=ProductId(repoId=2006262), stockQty=5 Stk, uomQty=5 Stk) (AdempiereException)
Explanation: The product was changed in the order after the order was completed but the old product is still in the invoice candidate.
workaround: Delete the invoice candidate. It will be automatically regenerated.