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
|
WHERE ID_COMANDA = V_ID_COMANDA
|
||||||
AND ID_ARTICOL = V_ID_ARTICOL
|
AND ID_ARTICOL = V_ID_ARTICOL
|
||||||
AND NVL(PTVA,0) = NVL(V_PTVA,0)
|
AND NVL(PTVA,0) = NVL(V_PTVA,0)
|
||||||
|
AND PRET = V_PRET2
|
||||||
|
AND SIGN(CANTITATE) = SIGN(V_CANTITATE)
|
||||||
AND STERS = 0;
|
AND STERS = 0;
|
||||||
|
|
||||||
IF V_NR_INREG > 0 THEN
|
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
|
ON B.ID_POL = G.ID_POL
|
||||||
LEFT JOIN NOM_ARTICOLE C
|
LEFT JOIN NOM_ARTICOLE C
|
||||||
ON A.ID_ARTICOL = C.ID_ARTICOL
|
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
|
FROM VANZARI A1
|
||||||
LEFT JOIN VANZARI_DETALII B1
|
LEFT JOIN VANZARI_DETALII B1
|
||||||
ON A1.ID_VANZARE = B1.ID_VANZARE
|
ON A1.ID_VANZARE = B1.ID_VANZARE
|
||||||
AND B1.STERS = 0
|
AND B1.STERS = 0
|
||||||
WHERE A1.STERS = 0
|
WHERE A1.STERS = 0
|
||||||
AND A1.ID_COMANDA = V_ID_COMANDA
|
AND A1.ID_COMANDA = V_ID_COMANDA
|
||||||
GROUP BY B1.ID_ARTICOL) D
|
GROUP BY B1.ID_ARTICOL, B1.PRET) D
|
||||||
ON A.ID_ARTICOL = D.ID_ARTICOL
|
ON A.ID_ARTICOL = D.ID_ARTICOL AND A.PRET = D.PRET
|
||||||
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
|
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
|
||||||
FROM CURS
|
FROM CURS
|
||||||
WHERE DATA <= V_DATA_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
|
ON B.ID_POL = G.ID_POL
|
||||||
LEFT JOIN NOM_ARTICOLE C
|
LEFT JOIN NOM_ARTICOLE C
|
||||||
ON A.ID_ARTICOL = C.ID_ARTICOL
|
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
|
FROM VANZARI A1
|
||||||
LEFT JOIN VANZARI_DETALII B1
|
LEFT JOIN VANZARI_DETALII B1
|
||||||
ON A1.ID_VANZARE = B1.ID_VANZARE
|
ON A1.ID_VANZARE = B1.ID_VANZARE
|
||||||
AND B1.STERS = 0
|
AND B1.STERS = 0
|
||||||
WHERE A1.STERS = 0
|
WHERE A1.STERS = 0
|
||||||
AND A1.ID_COMANDA = V_ID_COMANDA
|
AND A1.ID_COMANDA = V_ID_COMANDA
|
||||||
GROUP BY B1.ID_ARTICOL) D
|
GROUP BY B1.ID_ARTICOL, B1.PRET) D
|
||||||
ON A.ID_ARTICOL = D.ID_ARTICOL
|
ON A.ID_ARTICOL = D.ID_ARTICOL AND A.PRET = D.PRET
|
||||||
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
|
LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR
|
||||||
FROM CURS
|
FROM CURS
|
||||||
WHERE DATA <= V_DATA_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
|
ON A.ID_ARTICOL = C.ID_ARTICOL
|
||||||
LEFT JOIN (SELECT B1.ID_ARTICOL,
|
LEFT JOIN (SELECT B1.ID_ARTICOL,
|
||||||
A1.ID_COMANDA,
|
A1.ID_COMANDA,
|
||||||
|
B1.PRET,
|
||||||
SUM(B1.CANTITATE) AS CANTITATE
|
SUM(B1.CANTITATE) AS CANTITATE
|
||||||
FROM VANZARI A1
|
FROM VANZARI A1
|
||||||
LEFT JOIN VANZARI_DETALII B1
|
LEFT JOIN VANZARI_DETALII B1
|
||||||
ON A1.ID_VANZARE = B1.ID_VANZARE
|
ON A1.ID_VANZARE = B1.ID_VANZARE
|
||||||
AND B1.STERS = 0
|
AND B1.STERS = 0
|
||||||
WHERE A1.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
|
ON A.ID_ARTICOL = D.ID_ARTICOL
|
||||||
AND A.ID_COMANDA = D.ID_COMANDA
|
AND A.ID_COMANDA = D.ID_COMANDA
|
||||||
|
AND A.PRET = D.PRET
|
||||||
LEFT JOIN (SELECT ID_ARTICOL,
|
LEFT JOIN (SELECT ID_ARTICOL,
|
||||||
SUM(CANTS + CANT - CANTE) AS CANT_STOC,
|
SUM(CANTS + CANT - CANTE) AS CANT_STOC,
|
||||||
CONT
|
CONT
|
||||||
@@ -3510,15 +3512,17 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is
|
|||||||
ON A.ID_ARTICOL = C.ID_ARTICOL
|
ON A.ID_ARTICOL = C.ID_ARTICOL
|
||||||
LEFT JOIN (SELECT B1.ID_ARTICOL,
|
LEFT JOIN (SELECT B1.ID_ARTICOL,
|
||||||
A1.ID_COMANDA,
|
A1.ID_COMANDA,
|
||||||
|
B1.PRET,
|
||||||
SUM(B1.CANTITATE) AS CANTITATE
|
SUM(B1.CANTITATE) AS CANTITATE
|
||||||
FROM VANZARI A1
|
FROM VANZARI A1
|
||||||
LEFT JOIN VANZARI_DETALII B1
|
LEFT JOIN VANZARI_DETALII B1
|
||||||
ON A1.ID_VANZARE = B1.ID_VANZARE
|
ON A1.ID_VANZARE = B1.ID_VANZARE
|
||||||
AND B1.STERS = 0
|
AND B1.STERS = 0
|
||||||
WHERE A1.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
|
ON A.ID_ARTICOL = D.ID_ARTICOL
|
||||||
AND A.ID_COMANDA = D.ID_COMANDA
|
AND A.ID_COMANDA = D.ID_COMANDA
|
||||||
|
AND A.PRET = D.PRET
|
||||||
LEFT JOIN (SELECT ID_ARTICOL,
|
LEFT JOIN (SELECT ID_ARTICOL,
|
||||||
SUM(CANTS + CANT - CANTE) AS CANT_STOC,
|
SUM(CANTS + CANT - CANTE) AS CANT_STOC,
|
||||||
CONT
|
CONT
|
||||||
@@ -4867,6 +4871,7 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is
|
|||||||
WHERE A.ID_COMANDA = V_ID_COMANDA
|
WHERE A.ID_COMANDA = V_ID_COMANDA
|
||||||
AND A.ID_ARTICOL = V_ID_ARTICOL
|
AND A.ID_ARTICOL = V_ID_ARTICOL
|
||||||
AND A.ID_POL = V_ID_POL
|
AND A.ID_POL = V_ID_POL
|
||||||
|
AND A.PRET = V_PRETIN
|
||||||
AND A.STERS = 0;
|
AND A.STERS = 0;
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN TOO_MANY_ROWS THEN
|
WHEN TOO_MANY_ROWS THEN
|
||||||
@@ -5044,6 +5049,7 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is
|
|||||||
ON A.ID_ARTICOL = D.ID_ARTICOL
|
ON A.ID_ARTICOL = D.ID_ARTICOL
|
||||||
WHERE A.ID_COMANDA = V_ID_COMANDA
|
WHERE A.ID_COMANDA = V_ID_COMANDA
|
||||||
AND A.ID_ARTICOL = V_ID_ARTICOL
|
AND A.ID_ARTICOL = V_ID_ARTICOL
|
||||||
|
AND A.PRET = V_PRET_TEMP
|
||||||
AND A.STERS = 0;
|
AND A.STERS = 0;
|
||||||
|
|
||||||
WHEN pack_facturare.ntip = 4 THEN
|
WHEN pack_facturare.ntip = 4 THEN
|
||||||
@@ -5758,15 +5764,18 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is
|
|||||||
LEFT JOIN (SELECT ID_ARTICOL,
|
LEFT JOIN (SELECT ID_ARTICOL,
|
||||||
ID_POL,
|
ID_POL,
|
||||||
ID_VALUTA,
|
ID_VALUTA,
|
||||||
|
PRET,
|
||||||
SUM(CANTITATE) AS CANTITATE
|
SUM(CANTITATE) AS CANTITATE
|
||||||
FROM VANZARI_DETALII_TEMP
|
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
|
ON A.ID_ARTICOL = B.ID_ARTICOL
|
||||||
AND A.ID_POL = B.ID_POL
|
AND A.ID_POL = B.ID_POL
|
||||||
AND A.ID_VALUTA = B.ID_VALUTA
|
AND A.ID_VALUTA = B.ID_VALUTA
|
||||||
|
AND A.PRET = B.PRET
|
||||||
LEFT JOIN (SELECT B.ID_ARTICOL,
|
LEFT JOIN (SELECT B.ID_ARTICOL,
|
||||||
B.ID_POL,
|
B.ID_POL,
|
||||||
B.ID_VALUTA,
|
B.ID_VALUTA,
|
||||||
|
B.PRET,
|
||||||
SUM(B.CANTITATE) AS CANTITATE
|
SUM(B.CANTITATE) AS CANTITATE
|
||||||
FROM VANZARI A
|
FROM VANZARI A
|
||||||
LEFT JOIN VANZARI_DETALII B
|
LEFT JOIN VANZARI_DETALII B
|
||||||
@@ -5774,10 +5783,11 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is
|
|||||||
AND B.STERS = 0
|
AND B.STERS = 0
|
||||||
WHERE A.ID_COMANDA = to_number(pack_facturare.clistaid)
|
WHERE A.ID_COMANDA = to_number(pack_facturare.clistaid)
|
||||||
AND A.STERS = 0
|
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
|
ON A.ID_ARTICOL = C.ID_ARTICOL
|
||||||
AND A.ID_POL = C.ID_POL
|
AND A.ID_POL = C.ID_POL
|
||||||
AND A.ID_VALUTA = C.ID_VALUTA
|
AND A.ID_VALUTA = C.ID_VALUTA
|
||||||
|
AND A.PRET = C.PRET
|
||||||
WHERE A.STERS = 0
|
WHERE A.STERS = 0
|
||||||
AND A.ID_COMANDA = to_number(pack_facturare.clistaid)
|
AND A.ID_COMANDA = to_number(pack_facturare.clistaid)
|
||||||
AND A.CANTITATE > NVL(C.CANTITATE, 0) + NVL(B.CANTITATE, 0);
|
AND A.CANTITATE > NVL(C.CANTITATE, 0) + NVL(B.CANTITATE, 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user