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:
- La oportunidad está cambiando de estado “Abierto” (O) → “Ganado” (C).
- 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
-
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.
-
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.
-
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:
Comparar el estado antes y después de la actualización (O → C
).
Solo ejecutar la validación cuando realmente se intente marcar como “Ganado”.
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! 