TN validar precio de lista

Buenas tardes a la comunidad de SAp

Tengo una consulta

se ha creado un TN para que al momento de crear una nota de ventas en el grid en cada linea valide si esta por debajo del precio de lista pida autorizacion a la personas responsable por articulos , pero me esta pasando que si la linea 1 es de pantalones y el responsable es jose , jose autoriza y despues deberia ir a la linea 2 y entrar a la validacion y si tiene precios por debajo , volver a perdir y mencionar la linea 2 , asi en un ciclo , pero el sistema antes me lo hacia , pero ahora se queda en la opcion linea 1 , existe la forma de restablecer un store produce ,

Observe que en sap dice support Desk → Restablecer->Restablecer stored producered

sera que funciona

Hola @Jorge_Hernand

esa opción es para poner la versión inicial de los SP propios de SBO. En teoría, los dos únicos que se pueden modificar son el Transaction y PostTransaction. Restaurar no haría lo que tú esperas, quizás te borre también estos dos SP.

Un saludo

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.


:hammer_and_wrench: 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 :clap:. 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.


:mag: ¿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:

:warning: ¿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.

:white_check_mark: Solo úsalo si tu SP quedó corrupto o ya no compila.
:x: No lo uses si solo necesitas ajustar la lógica.


:white_check_mark: ¿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:

  1. Lanzar una validación que bloquee la grabación.
  2. O bien solicitar una autorización previa si estás usando el sistema de Aprobaciones de SAP B1.

:brain: 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

:white_check_mark: ¿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.

:pushpin: Recomendaciones prácticas

  • :warning: 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.
  • :white_check_mark: Revisa si tu SP tiene un RETURN que interrumpe el recorrido de todas las líneas.
  • :white_check_mark: Usa cursores o un WHILE EXISTS para recorrer cada línea del documento.
  • :brain: 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.

:white_check_mark: Resumen Consultoria-SAP

Si tu validación en Transaction Notification dejó de iterar por cada línea del documento en SAP B1:

:heavy_check_mark: Revisa que estés recorriendo correctamente todas las líneas (RDR1)
:heavy_check_mark: No uses la opción de Restablecer stored procedure, porque borra todo el código actual
:heavy_check_mark: 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! :brain::briefcase: