cancel
Showing results for 
Search instead for 
Did you mean: 

Manipulacion de lineas de Documento

Former Member
0 Kudos

Hola buen dia!!!

Mi duda consiste en lo siguiente, tengo el requerimiento de poder desarrollar un Procedimiento de Autorizacion que consiste en poder validar linea por linea de la factura si el precio se aumento o se disminuyo en X %, para eso mi primera solucion que realize fue por medio de un curso de SQL.

DECLARE @cliente AS VARCHAR(50)
DECLARE @codigoArticulo AS VARCHAR(50)
DECLARE @PrecioUnitario AS DECIMAL(10,6)
DECLARE @columnas AS INT
DECLARE @listadeprecios AS INT
DECLARE @precio AS DECIMAL(10,6)


SET @cliente = (SELECT cardcode FROM dbo.OINV WHERE DocNum='50')
PRINT @cliente
SET	@listadeprecios = (SELECT t0.ListNum FROM dbo.OCRD t0 WHERE t0.CardCode = @cliente)
PRINT CAST(@listadeprecios AS VARCHAR(10))
  
  declare CURSORITO cursor for
  select t0.ItemCode, t0.Price FROM dbo.INV1 t0 INNER JOIN dbo.OINV t1 ON(t0.DocEntry = t1.DocEntry) WHERE t1.CardCode=@cliente AND t1.DocNum='50'
    open CURSORITO
        -- Avanzamos un registro y cargamos en las variables los valores encontrados en el primer registro
  fetch next from CURSORITO
  into @codigoArticulo, @PrecioUnitario
      while @@fetch_status = 0
    begin
	PRINT @codigoArticulo
	PRINT @PrecioUnitario
	--Consulta sobre el articulo para obtener el precio de su lista de precios    
	SET @precio= (SELECT Price FROM dbo.ITM1 WHERE ItemCode = @codigoArticulo AND PriceList = @listadeprecios)
	PRINT @PrecioUnitario-@precio
		IF((@PrecioUnitario-@precio)>= 50  OR (@PrecioUnitario - @precio) <= -50 )
			BEGIN
				
				SELECT DISTINCT 'True'
				--close CURSORITO
				--deallocate CURSORITO
				
			END
	
    
    fetch next from CURSORITO
		into @codigoArticulo, @PrecioUnitario
    end
    -- cerramos el cursor
  close CURSORITO
  deallocate CURSORITO

en este curso lo que realizo es checar la lista de precios que tiene asignada el Socio de Negocio luego obtengo el precio que tiene el articulo en dicha Lista de Precios y después comparo con la linea el precio unitario en la factura y si la diferencia entre ambos precios es mayor o menos 50 que me mande la Autorización (SELECT DISTINCT 'True') , e aquí mi problema, sucede que no había contemplado que no me puedo mover entre las lineas de la Factura o el detalle únicamente la validación me la realiza sobre la primer linea .

Alguien sabe como puedo hacer para moverme entre las lineas de la factura??

NOTA: Les recuerdo que la factura no se encuentra creada por lo que no hay registros en ninguna tabla.

Saludos y agradeceré mucho su ayuda.

Edited by: María de la Luz Gama García on May 12, 2010 11:51 PM

Accepted Solutions (0)

Answers (3)

Answers (3)

former_member210784
Active Contributor
0 Kudos

Hola.

Estoy de acuerdo con los otros colegas. El procedimiento de autorización se debe aplicar a nivel de encabezado del documento, cuando se intenta aplicar sobre las líneas sólo toma la primera línea.

Exite un workaround proporcionado por Lazcano Rivera que permite realizar la validación en las líneas pero disparando la autorización desde un campo de usuario a nivel de encabezado. Por favor revisa el siguiente link con el ejemplo de cómo implementar este workarround: Procedimiento autorización en filas de documento.

Otra opción sería utilizando el objeto TransactionNotification, como lo menciona Mauricio. Esta opción requiere de más cuidado puesto que si se hace mal o se abusa de este medio puede afectar el comportamiento y desempeño del Business One.

SAludos.

former_member188440
Active Contributor
0 Kudos

Coincido con Darwin,podria funcionar asi con un campo de usuario a nivel cabecera, ¿porque a nivel cabecera? porque el procedimiento de autorizacion unicamente funciona como tu ya viste. No puede dispararse de esa forma, mejor a nivel de cabecera si podria ser.

Has trabajado con el store procedure de TransactionNotification?

Quizas apoyandote asi, y con una tabla temporal que te sirva para hacer la comparacion en lugar del cursor.

Former Member
0 Kudos

Lo que podrias hacer es un campo de usuario a nivel de la cabecera de factura y que se actualize cuando se cambie un precio a nivel de linea, y asi haces la validacion de tu procedimiento de autorizacion basada en ese campo.

Saludos