fix: discriminare pe PRET+SIGN(CANTITATE) pentru duplicate CODMAT pe comanda

Permite articole duplicate cu preturi diferite pe aceeasi comanda (kit + direct
cu acelasi CODMAT) si articol + retur la acelasi pret. Cheia de unicitate devine
(ID_COMANDA, ID_ARTICOL, PTVA, PRET, SIGN(CANTITATE)).

Modificari in 8 locuri: duplicate check (pack_comenzi), cursor_comanda factura/aviz,
cursor_lucrare ambele ramuri, adauga_articol_lucrare_pret, adauga_articol_factura,
inchide_comanda. Zero signatura schimbata, zero schema change, zero VFP impact.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-03-20 10:32:55 +00:00
parent 93314e7a6a
commit 95565af4cd
2 changed files with 22 additions and 10 deletions

View File

@@ -785,6 +785,8 @@ create or replace package body PACK_COMENZI is
WHERE ID_COMANDA = V_ID_COMANDA
AND ID_ARTICOL = V_ID_ARTICOL
AND NVL(PTVA,0) = NVL(V_PTVA,0)
AND PRET = V_PRET2
AND SIGN(CANTITATE) = SIGN(V_CANTITATE)
AND STERS = 0;
IF V_NR_INREG > 0 THEN

View File

@@ -3034,15 +3034,15 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is
ON B.ID_POL = G.ID_POL
LEFT JOIN NOM_ARTICOLE C
ON A.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN (SELECT B1.ID_ARTICOL, SUM(B1.CANTITATE) AS CANTITATE
LEFT JOIN (SELECT B1.ID_ARTICOL, B1.PRET, SUM(B1.CANTITATE) AS CANTITATE
FROM VANZARI A1
LEFT JOIN VANZARI_DETALII B1
ON A1.ID_VANZARE = B1.ID_VANZARE
AND B1.STERS = 0
WHERE A1.STERS = 0
AND A1.ID_COMANDA = V_ID_COMANDA
GROUP BY B1.ID_ARTICOL) D
ON A.ID_ARTICOL = D.ID_ARTICOL
GROUP BY B1.ID_ARTICOL, B1.PRET) D
ON A.ID_ARTICOL = D.ID_ARTICOL AND A.PRET = D.PRET
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
@@ -3121,15 +3121,15 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is
ON B.ID_POL = G.ID_POL
LEFT JOIN NOM_ARTICOLE C
ON A.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN (SELECT B1.ID_ARTICOL, SUM(B1.CANTITATE) AS CANTITATE
LEFT JOIN (SELECT B1.ID_ARTICOL, B1.PRET, SUM(B1.CANTITATE) AS CANTITATE
FROM VANZARI A1
LEFT JOIN VANZARI_DETALII B1
ON A1.ID_VANZARE = B1.ID_VANZARE
AND B1.STERS = 0
WHERE A1.STERS = 0
AND A1.ID_COMANDA = V_ID_COMANDA
GROUP BY B1.ID_ARTICOL) D
ON A.ID_ARTICOL = D.ID_ARTICOL
GROUP BY B1.ID_ARTICOL, B1.PRET) D
ON A.ID_ARTICOL = D.ID_ARTICOL AND A.PRET = D.PRET
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
FROM CURS
WHERE DATA <= V_DATA_CURS
@@ -3362,15 +3362,17 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is
ON A.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN (SELECT B1.ID_ARTICOL,
A1.ID_COMANDA,
B1.PRET,
SUM(B1.CANTITATE) AS CANTITATE
FROM VANZARI A1
LEFT JOIN VANZARI_DETALII B1
ON A1.ID_VANZARE = B1.ID_VANZARE
AND B1.STERS = 0
WHERE A1.STERS = 0
GROUP BY B1.ID_ARTICOL, A1.ID_COMANDA) D
GROUP BY B1.ID_ARTICOL, A1.ID_COMANDA, B1.PRET) D
ON A.ID_ARTICOL = D.ID_ARTICOL
AND A.ID_COMANDA = D.ID_COMANDA
AND A.PRET = D.PRET
LEFT JOIN (SELECT ID_ARTICOL,
SUM(CANTS + CANT - CANTE) AS CANT_STOC,
CONT
@@ -3510,15 +3512,17 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is
ON A.ID_ARTICOL = C.ID_ARTICOL
LEFT JOIN (SELECT B1.ID_ARTICOL,
A1.ID_COMANDA,
B1.PRET,
SUM(B1.CANTITATE) AS CANTITATE
FROM VANZARI A1
LEFT JOIN VANZARI_DETALII B1
ON A1.ID_VANZARE = B1.ID_VANZARE
AND B1.STERS = 0
WHERE A1.STERS = 0
GROUP BY B1.ID_ARTICOL, A1.ID_COMANDA) D
GROUP BY B1.ID_ARTICOL, A1.ID_COMANDA, B1.PRET) D
ON A.ID_ARTICOL = D.ID_ARTICOL
AND A.ID_COMANDA = D.ID_COMANDA
AND A.PRET = D.PRET
LEFT JOIN (SELECT ID_ARTICOL,
SUM(CANTS + CANT - CANTE) AS CANT_STOC,
CONT
@@ -4867,6 +4871,7 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is
WHERE A.ID_COMANDA = V_ID_COMANDA
AND A.ID_ARTICOL = V_ID_ARTICOL
AND A.ID_POL = V_ID_POL
AND A.PRET = V_PRETIN
AND A.STERS = 0;
EXCEPTION
WHEN TOO_MANY_ROWS THEN
@@ -5044,6 +5049,7 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is
ON A.ID_ARTICOL = D.ID_ARTICOL
WHERE A.ID_COMANDA = V_ID_COMANDA
AND A.ID_ARTICOL = V_ID_ARTICOL
AND A.PRET = V_PRET_TEMP
AND A.STERS = 0;
WHEN pack_facturare.ntip = 4 THEN
@@ -5758,15 +5764,18 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is
LEFT JOIN (SELECT ID_ARTICOL,
ID_POL,
ID_VALUTA,
PRET,
SUM(CANTITATE) AS CANTITATE
FROM VANZARI_DETALII_TEMP
GROUP BY ID_ARTICOL, ID_POL, ID_VALUTA) B
GROUP BY ID_ARTICOL, ID_POL, ID_VALUTA, PRET) B
ON A.ID_ARTICOL = B.ID_ARTICOL
AND A.ID_POL = B.ID_POL
AND A.ID_VALUTA = B.ID_VALUTA
AND A.PRET = B.PRET
LEFT JOIN (SELECT B.ID_ARTICOL,
B.ID_POL,
B.ID_VALUTA,
B.PRET,
SUM(B.CANTITATE) AS CANTITATE
FROM VANZARI A
LEFT JOIN VANZARI_DETALII B
@@ -5774,10 +5783,11 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is
AND B.STERS = 0
WHERE A.ID_COMANDA = to_number(pack_facturare.clistaid)
AND A.STERS = 0
GROUP BY B.ID_ARTICOL, B.ID_POL, B.ID_VALUTA) C
GROUP BY B.ID_ARTICOL, B.ID_POL, B.ID_VALUTA, B.PRET) C
ON A.ID_ARTICOL = C.ID_ARTICOL
AND A.ID_POL = C.ID_POL
AND A.ID_VALUTA = C.ID_VALUTA
AND A.PRET = C.PRET
WHERE A.STERS = 0
AND A.ID_COMANDA = to_number(pack_facturare.clistaid)
AND A.CANTITATE > NVL(C.CANTITATE, 0) + NVL(B.CANTITATE, 0);