Importante : La siguiente respuesta es generada por nuestro Robot de la comunidad de Consultoria-SAP.com denominado “CSAPBOT” usando tecnología de inteligencia artificial. Por lo tanto, puede haber datos incorrectos. No garantizamos que la información sea 100% correcta, solo consultores SAP profesionales podrían verificar la información. Muchos consultores leen nuestros foros de Ayuda SAP y lamentablemente pocos ayudan respondiendo y confirmando la información.
Si deseas aportar tus ideas para mejorar nuestros sistemas, te esperamos en este debate de la comunidad.
SAP Business One – Validación por línea en TN para precios por debajo del estándar
Hola, muy buena y específica tu consulta
. Estás tratando un caso muy común: validaciones por línea de documento en el Transaction Notification (TN)
, en especial en documentos de ventas (tipo = ‘17’) cuando hay necesidad de validar precio de línea vs. precio de lista, y luego detonar autorización por cada responsable.
Vamos a ver por qué ahora solo te valida la primera línea, y qué opciones tienes para restablecer la lógica completa sin perder tu SP personalizado.
¿Qué está pasando?
Tu Transaction Notification
probablemente recorre solo la primera línea del documento porque:
- El SP no está iterando correctamente todas las líneas (
RDR1
), o
- Se sale en la primera validación (
RETURN
) y no continúa con las demás.
- O tal vez está quedando “autorizado” el documento sin volver a validar las demás líneas.
Esto no se corrige restaurando el Stored Procedure desde Support Desk, porque:
¿Qué hace realmente la opción Restablecer Stored Procedure en SAP B1?
- Restaura los SP del sistema como el TN (SBO_SP_TransactionNotification) o PostTransaction a su versión inicial (vacía).
- Esto borra el código personalizado que tengas, y no resuelve lógicas mal implementadas.
- No “depura” ni corrige comportamientos internos, solo reinicia el SP al default de SAP.
Solo úsalo si tu SP quedó corrupto o ya no compila.
No lo uses si solo necesitas ajustar la lógica.
¿Cómo debería funcionar tu lógica de TN por línea?
Tienes que recorrer todas las líneas del documento y validar línea por línea si el precio ingresado < precio de lista y en caso afirmativo:
- Lanzar una validación que bloquee la grabación.
- O bien solicitar una autorización previa si estás usando el sistema de Aprobaciones de SAP B1.
Ejemplo simplificado de TN que evalúa por línea:
IF @object_type = '17' AND @transaction_type IN ('A','U') -- Pedido de venta
BEGIN
DECLARE @ItemCode NVARCHAR(50), @Price NUMERIC(19,6), @PriceList NUMERIC(19,6)
DECLARE @Line INT
DECLARE CURSOR_LINEAS CURSOR FOR
SELECT T1.ItemCode, T1.Price, T1.LineNum
FROM RDR1 T1
WHERE T1.DocEntry = @list_of_cols_val_tab_del
OPEN CURSOR_LINEAS
FETCH NEXT FROM CURSOR_LINEAS INTO @ItemCode, @Price, @Line
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @PriceList = Price
FROM ITM1
WHERE ItemCode = @ItemCode AND PriceList = 1 -- Aquí colocas la lista de precios estándar
IF @Price < @PriceList
BEGIN
SET @error = 999
SET @error_message = 'Línea ' + CAST(@Line AS NVARCHAR) +
' tiene precio por debajo del estándar para el artículo ' + @ItemCode
CLOSE CURSOR_LINEAS
DEALLOCATE CURSOR_LINEAS
RETURN
END
FETCH NEXT FROM CURSOR_LINEAS INTO @ItemCode, @Price, @Line
END
CLOSE CURSOR_LINEAS
DEALLOCATE CURSOR_LINEAS
END
¿Y si necesitas derivar la autorización por responsable?
SAP B1 no tiene un motor de aprobación “por línea” nativamente. Pero puedes:
- Crear una etapa de aprobación por artículo/responsable usando campos definidos por usuario o lógica Z.
- O implementar un AddOn o validación externa que revise línea a línea y asigne responsable según reglas personalizadas.
Recomendaciones prácticas
No uses la opción “Restablecer SP” desde Support Desk a menos que tengas backup del código o estés seguro de que deseas borrarlo.
Revisa si tu SP tiene un RETURN
que interrumpe el recorrido de todas las líneas.
Usa cursores o un WHILE EXISTS
para recorrer cada línea del documento.
Si trabajas con etapas de aprobación, recuerda que SAP B1 no soporta aprobaciones distintas por línea, es por documento completo, aunque puedes simularlo.
Resumen Consultoria-SAP
Si tu validación en Transaction Notification
dejó de iterar por cada línea del documento en SAP B1:
Revisa que estés recorriendo correctamente todas las líneas (RDR1
)
No uses la opción de Restablecer stored procedure, porque borra todo el código actual
Si necesitas validar por línea y asignar autorizadores distintos, deberás usar lógica personalizada o integración con el sistema de aprobaciones basado en UDFs
Desde Consultoria-SAP.com te sugerimos trabajar con tu partner para validar si tu SP necesita ser reestructurado o si puedes escalar a un flujo de aprobación más avanzado.
¿Quieres que revisemos tu código actual del TN y lo ajustemos para que valide todas las líneas? Solo pégalo y con gusto te ayudamos.
¡Estamos aquí para ayudarte! 
