Estoy implementando un modelo de autorización mediante una consulta. Necesito que las salidas de mercancía de inventario que pertenecen al almacén 10 requieran autorización. Estoy probando con la siguiente consulta, pero no activa la autorización; la salida de mercancía se crea sin pasar por el proceso de autorización.
IF (SELECT $[IGE1.WHSCODE.NUMBER]) = ‘10’ SELECT ‘TRUE’
¡Hola! Es un buen enfoque utilizar una consulta SQL para implementar el modelo de autorización en SAP Business One, sin embargo, tu consulta tiene algunos problemas que están impidiendo que se active la autorización. Voy a ayudarte a ajustarla.
Correcciones en la Consulta de Autorización
Formato de la Consulta:
La estructura que estás utilizando no es del todo correcta para activar la autorización en SAP Business One. Para este tipo de autorizaciones, se recomienda utilizar una consulta que devuelva 1 o TRUE en caso de cumplir la condición.
Uso de Campos en la Consulta:
Asegúrate de que el campo $[IGE1.WHSCODE] esté correctamente identificado. En este caso, $[IGE1.WHSCODE] hace referencia al código de almacén en la línea del documento de salida de mercancía. También es importante asegurarse de que el campo se llama exactamente WHSCODE, porque los nombres pueden variar según las personalizaciones.
Consulta Corregida
Prueba con la siguiente consulta ajustada:
SELECT CASE WHEN EXISTS (
SELECT 1
FROM IGE1
WHERE DocEntry = $[$1.0.0]
AND WHSCODE = '10'
) THEN 'TRUE' ELSE 'FALSE' END
Explicación de la Consulta
La consulta verifica si alguna línea de la salida de mercancía (IGE1) tiene el almacén 10 (almacén que requiere autorización).
DocEntry = $[$1.0.0]: Este código toma el número de documento que se está creando para verificar las líneas correspondientes.
WHSCODE = '10': Este es el código de almacén que se está verificando. Cambia '10' si el código del almacén es diferente.
Cómo Configurar la Autorización en SAP Business One
Ve a Gestión > Inicialización de sistema > Autorizaciones > Procedimientos de autorización.
Crea un nuevo procedimiento de autorización y asigna el documento Salida de mercancía de inventario.
En el campo de consulta de autorización, pega la consulta SQL ajustada.
Define las personas o usuarios que deben autorizar el documento cuando se cumpla la condición.
Consideraciones
Ejecución de la Autorización en cada Línea: Si necesitas que la autorización se active únicamente si todas las líneas están en el almacén 10, modifica la consulta para contar el total de líneas en el documento y asegúrate de que todas correspondan al almacén 10.
Pruebas: Antes de implementar la consulta en producción, realiza pruebas en un ambiente de desarrollo o de pruebas para asegurarte de que el comportamiento es el esperado.
Resumen Consultoria-SAP
La consulta para activar la autorización en una salida de mercancía cuando el almacén es 10 se ajusta utilizando DocEntry y una estructura que devuelva TRUE si la condición se cumple. Configura este modelo en los procedimientos de autorización de SAP Business One y realiza pruebas para verificar su funcionamiento.
He probado lo que mencionas y me genera el siguiente error
1). [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near ‘$1.0.0’. 2). [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Statement ‘’ (ECM2) (s) could not be prepared.
El error que estás recibiendo se debe a que SAP Business One y SQL Server tienen una sintaxis específica para referirse a los valores en una consulta de autorización, y el símbolo "$[$1.0.0]" no es reconocido en una consulta SQL estándar de SQL Server.
En SAP Business One, cuando usas consultas en el contexto de autorizaciones, debes referenciar los valores de los campos con el formato correcto y de acuerdo con los placeholders que utiliza SAP Business One.
Para lograr tu objetivo de condicionar la autorización con base en el almacén, te comparto una solución que funciona en el contexto de autorizaciones en SAP Business One:
Sintaxis Correcta para la Consulta de Autorización en SAP Business One
En el contexto de una consulta de autorización, SAP Business One espera que uses placeholders para obtener los valores de los campos directamente. En este caso, puedes simplificar la consulta sin usar EXISTS y empleando el placeholder de línea directamente.
Prueba con el siguiente código:
SELECT
CASE WHEN $[IGE1.WhsCode] = '10' THEN 'TRUE' ELSE 'FALSE' END
Explicación de la Consulta
$[IGE1.WhsCode]: Este placeholder obtiene el valor del campo WhsCode (código de almacén) directamente desde la línea de documento en la transacción de salida de mercancía (IGE1).
Condición Simple: La consulta verifica si el valor de WhsCode es igual a '10'. Si es así, devuelve 'TRUE', lo que activará la autorización. Si no, devuelve 'FALSE', permitiendo que el proceso continúe sin autorización adicional.
Consideraciones Adicionales
Usa el Placeholder Correcto: Asegúrate de utilizar el formato $[Tabla.Campo] directamente en SAP Business One cuando construyas consultas para autorizaciones.
Verifica en el Escenario de Autorización: Configura esta consulta en tu procedimiento de autorización para que aplique cuando el campo WhsCode sea '10' en la salida de mercancía.
Resumen Consultoria-SAP
La sintaxis de placeholders en SAP Business One permite referenciar campos directamente en las consultas de autorización. Con el ajuste que te proporcioné, puedes condicionar la autorización para que se active solo cuando el almacén sea '10' en una salida de mercancía. Prueba esta consulta en tu sistema y verifica que se active la autorización correctamente.
Si tienes alguna otra duda, ¡estamos aquí para ayudarte!