on 04-30-2021 7:55 AM
Hola a todos, tengo un problema, espero puedan ayudarme:
Estoy programando una restricción de precios en Transaction Notification, a nivel detalle, en el momento en que sea crea una Factura de Deudores, en donde se compare el precio unitario de venta del producto con un precio de lista, el cual se extrae desde una tabla definida por usuario la cual cree (@PRECIOVENTAFIJO) dependiendo los plazos de pago del cliente. El precio unitario de venta debe ser mayor o igual a este precio de lista, si esto no se cumple, debe tirar un error. No tengo problemas al momento de ingresar un producto, pero al momento de ingresar dos o más, me sale el siguiente error: Se ha producido un error interno (512) [Mensaje 131-183].
Este es mi código:
DECLARE @DIF FLOAT
If @object_type='13'
BEGIN
If @transaction_type = 'A'
BEGIN
SET @DIF= (Select case when INV1.Currency='USD' then INV1.PRICE else INV1.PRICE/ORTT.Rate END FROM INV1 INNER JOIN ORTT ON INV1.DOCDATE=ORTT.RATEDATE WHERE ORTT.Currency='usd' and INV1.DOCENTRY=@list_of_cols_val_tab_del)
- (SELECT CASE WHEN DATEDIFF(day,dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=120 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio120] WHEN DATEDIFF(day,dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=150 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio150] WHEN DATEDIFF(day, dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=180 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio180] WHEN DATEDIFF(day, dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=210 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio210] WHEN DATEDIFF(day, dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=240 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio240] WHEN DATEDIFF(day, dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=270 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio270] WHEN DATEDIFF(day, dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=300 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio300] WHEN DATEDIFF(day, dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=330 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio330] ELSE dbo.[@PRECIOVENTAFIJO].[U_Precio360] END
FROM dbo.OINV inner join dbo.INV1 ON dbo.OINV.Docentry = dbo.INV1.Docentry inner join [dbo].[@PRECIOVENTAFIJO] ON dbo.[@PRECIOVENTAFIJO].[CODE]=dbo.INV1.Itemcode
WHERE OINV.Docentry = @list_of_cols_val_tab_del and month(dbo.[@PRECIOVENTAFIJO].[U_FechaPrecio])=month(OINV.Taxdate) and year(dbo.[@PRECIOVENTAFIJO].[U_FechaPrecio])=year(OINV.Taxdate))
-- ESTA ES LA DIFERENCIA ENTRE PRECIOS @DIF=(PRECIO UNITARIO DE VENTA) - (PRECIO LISTA SEGÚN PLAZO)
IF (@DIF<0)
BEGIN
SET @error = 213
SET @error_message = 'El precio unitario debe ser mayor o igual al precio fijo'
END
END
END
Ya lo resolví, dejo la query para quién lo necesite:
DECLARE @DIF FLOAT
DECLARE @CONT INT
DECLARE @CONTLINE INT
If @object_type='13'
BEGIN
If @transaction_type = 'A'
BEGIN
SET @CONT=(SELECT COUNT(INV1.ITEMCODE) FROM INV1 WHERE INV1.DOCENTRY=@list_of_cols_val_tab_del)
SET @CONTLINE=0
WHILE @CONTLINE<=(@CONT-1)
BEGIN
SET @DIF= ((Select case when INV1.Currency='USD' then INV1.PRICE else INV1.PRICE/ORTT.Rate END FROM INV1 INNER JOIN ORTT ON INV1.DOCDATE=ORTT.RATEDATE WHERE ORTT.Currency='usd' and INV1.LINENUM=@CONTLINE AND INV1.DOCENTRY=@list_of_cols_val_tab_del)
-(SELECT CASE WHEN DATEDIFF(day,dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=120 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio120]
WHEN DATEDIFF(day,dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=150 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio150]
WHEN DATEDIFF(day, dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=180 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio180]
WHEN DATEDIFF(day, dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=210 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio210]
WHEN DATEDIFF(day, dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=240 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio240]
WHEN DATEDIFF(day, dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=270 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio270]
WHEN DATEDIFF(day, dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=300 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio300]
WHEN DATEDIFF(day, dbo.OINV.TAXDATE,dbo.OINV.DOCDUEDATE)<=330 THEN dbo.[@PRECIOVENTAFIJO].[U_Precio330] ELSE
dbo.[@PRECIOVENTAFIJO].[U_Precio360] end
FROM dbo.OINV inner join dbo.INV1 ON dbo.OINV.Docentry = dbo.INV1.Docentry
inner join [dbo].[@PRECIOVENTAFIJO] ON dbo.[@PRECIOVENTAFIJO].[CODE]=dbo.INV1.Itemcode
WHERE OINV.Docentry = @list_of_cols_val_tab_del
AND INV1.LINENUM=@CONTLINE
and month(dbo.[@PRECIOVENTAFIJO].[U_FechaPrecio])=month(OINV.Taxdate)
and year(dbo.[@PRECIOVENTAFIJO].[U_FechaPrecio])=year(OINV.Taxdate)
))
IF (@DIF<0)
BEGIN
SET @error = 213
SET @error_message = 'El precio unitario debe ser mayor o igual al precio fijo'
END
SET @CONTLINE=@CONTLINE+1
END
END
END
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
105 | |
9 | |
7 | |
6 | |
5 | |
4 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.