cancel
Showing results for 
Search instead for 
Did you mean: 

Restricción en detalle Factura Deudores con Transaction Notification SAP B1

former_member979579
Discoverer
0 Kudos

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 

Accepted Solutions (1)

Accepted Solutions (1)

former_member979579
Discoverer
0 Kudos

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 


Answers (0)