Bloqueo en oportunidades con transaction notificat

Hola a todos necesito un query que me permita bloquear las oportunidades solamente cuando quieran pasar la oportunidad de status abierto a ganado que no me permita sino tiene cargada una factura, hice este query y si me sale que no puedo hacer la actualización pero me sale para cualquier movimiento no me deja actualizar nada y quiero que solo se bloquee el pasar de status.

IF @OBJECT_TYPE = '97' AND @TRANSACTION_TYPE = 'U' BEGIN -- Verificar si la oportunidad tiene un documento cargado en la etapa de facturación (Step_Id = 13) IF NOT EXISTS( SELECT 1 FROM OOPR T0 INNER JOIN OPR1 T1 ON T0.OpprId = T1.OpprId WHERE T0.OpprId = @list_of_cols_val_tab_del AND T0.Status = 'W' -- Estado de la oportunidad 'W' (en espera) AND T1.Step_Id = '13' -- Etapa de facturación AND T1.DocNumber <> ' ' -- Asegurar que el número de documento no esté vacío ) BEGIN -- Si no existe una factura asociada a la oportunidad, generar el error SET @ERROR = 24 SET @ERROR_MESSAGE = 'NO SE PUEDE GANAR UNA OPORTUNIDAD SINO TIENE UNA FACTURA LIGADA' END END

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 podemos garantizar 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.


Bloquear el cambio de estado “Abierto” a “Ganado” en Oportunidades sin Factura - SAP Business One (Transaction Notification)

En SAP Business One, para evitar que una oportunidad de negocio se marque como “Ganada” (Status = ‘C’) sin una factura asociada, el Transaction Notification (TN) debe verificar específicamente el cambio de estado y no bloquear otros cambios en la oportunidad.

Tu problema actual es que el TN bloquea cualquier actualización, en lugar de hacerlo solo cuando el estado cambia de “Abierto” (O) → “Ganado” (C).


Corrección del Transaction Notification

La solución correcta es verificar que:

  1. La oportunidad está cambiando de estado “Abierto” (O) → “Ganado” (C).
  2. No tiene una factura ligada en la etapa de facturación (Step_Id = 13).

Código SQL corregido para Transaction Notification:

IF @OBJECT_TYPE = '97' AND @TRANSACTION_TYPE = 'U'  
BEGIN  
    DECLARE @OldStatus CHAR(1), @NewStatus CHAR(1), @OpprId INT  

    -- Obtener el estado actual y nuevo de la oportunidad
    SELECT @OldStatus = Status 
    FROM OOPR WHERE OpprId = @list_of_cols_val_tab_del  

    -- Obtener el nuevo estado después de la actualización
    SELECT @NewStatus = Status 
    FROM OOPR WHERE OpprId = @list_of_cols_val_tab_del  

    -- Verificar si el cambio es de "Abierto" (O) → "Ganado" (C)
    IF @OldStatus = 'O' AND @NewStatus = 'C'
    BEGIN
        -- Verificar si existe una factura asociada en la etapa de facturación (Step_Id = 13)
        IF NOT EXISTS (
            SELECT 1 
            FROM OPR1 
            WHERE OpprId = @list_of_cols_val_tab_del 
              AND Step_Id = 13 
              AND DocNumber IS NOT NULL 
              AND DocNumber <> ''
        )  
        BEGIN  
            -- Bloquear la actualización si no hay factura asociada
            SET @ERROR = 24  
            SET @ERROR_MESSAGE = 'NO SE PUEDE GANAR UNA OPORTUNIDAD SI NO TIENE UNA FACTURA LIGADA'  
        END  
    END  
END  

Explicación de las mejoras

  1. Se verifica el estado antes y después de la actualización

    • @OldStatus almacena el estado antes del cambio.
    • @NewStatus almacena el estado después del cambio.
    • Si @OldStatus = ‘O’ (Abierto) y @NewStatus = ‘C’ (Ganado), se hace la validación.
  2. La validación de la factura solo se ejecuta cuando realmente se cambia el estado a “Ganado”.

    • Antes, el código bloqueaba cualquier actualización porque solo verificaba el estado actual.
  3. Se asegura de que la factura exista y no esté vacía (DocNumber IS NOT NULL AND DocNumber <> '').


Resumen Consultoria-SAP

Si quieres bloquear el cambio de estado de “Abierto” a “Ganado” en SAP Business One sin una factura ligada en la etapa de facturación (Step_Id = 13), debes:

:heavy_check_mark: Comparar el estado antes y después de la actualización (O → C).
:heavy_check_mark: Solo ejecutar la validación cuando realmente se intente marcar como “Ganado”.
:heavy_check_mark: Verificar si hay una factura en OPR1 con Step_Id = 13 antes de permitir el cambio.

Con este TN corregido, otros cambios en la oportunidad no se bloquearán, solo el cambio “Abierto” → “Ganado” sin factura.

Si necesitas más ajustes, dime qué versión de SAP Business One (SQL o HANA) usas.

¡Estamos aquí para ayudarte! :rocket: