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:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user