Problema con FMS en busqeuda formateada

hola amigos, Tengo un problema con una consulta para un proceso de autorización cuando trata de capturar datos tengo el error en una linea indicándome erro en sintaxis $

este es el query

DECLARE TIPODOC VARCHAR(3);
DECLARE DOC_BASE VARCHAR(2);
DECLARE STATUS VARCHAR(1);
DECLARE DocTotal  DECIMAL (21,6);


STATUS := '-';
TIPODOC := SUBSTRING('Entregas - C038435280', 1, 3);
DOC_BASE := 'NO';

IF :TIPODOC = 'Fac' THEN
BEGIN


    IF '-1' = '15' THEN
		BEGIN
			
			STATUS := IFNULL((SELECT "WddStatus" FROM ODLN WHERE "DocNum" = ''),'Z');
			
			IF :STATUS = 'P' THEN
				BEGIN 
									
				IF ((SELECT (IFNULL("DocTotal",0) - IFNULL("PaidToDate",0)) FROM ODLN WHERE "DocNum" = '') - 23800.000000) >= 0 THEN
					BEGIN
					DOC_BASE := 'SI';
					END;
				END IF;
					
			    END;
			END IF;
		END;
		ELSE
		BEGIN
		    IF '-1' = '17' THEN
			    BEGIN
				
				STATUS := IFNULL((SELECT "WddStatus" FROM ORDR WHERE "DocNum" = ''),'Z');
				IF :STATUS = 'P' THEN
				    BEGIN 
					
					IF ((SELECT (IFNULL("DocTotal",0) - IFNULL("PaidToDate",0)) FROM ORDR WHERE "DocNum" = '') - 23800.000000) >= 0  THEN
                        BEGIN 
						DOC_BASE := 'SI';


						END;
					END IF;
				    END;
                END IF;
			    END;
	        END IF;
		END;
	END IF;

    SELECT CASE
			WHEN (SELECT OINV."GrosProfit"/ ((OINV."DocTotal" -  OINV."VatSum") *0.01) FROM OINV WHERE OINV."DocNum" = '1250002' )   < 29  AND  :DOC_BASE = 'NO'  THEN                                        'TRUE'
			ELSE 'FALSE'
			END
			FROM DUMMY;


END;
ELSE
BEGIN

IF :TIPODOC = 'Ent' THEN
	BEGIN
                               
        IF '-1' = '17' THEN
			BEGIN		                                                                                                                    
			STATUS := IFNULL((SELECT "WddStatus" FROM ORDR WHERE "DocNum" = ''),'Z');
						
			IF :STATUS = 'P'  THEN
				BEGIN 
								
				IF ((SELECT (IFNULL("DocTotal",0) - IFNULL("PaidToDate",0)) FROM ORDR WHERE "DocNum" = '') - 23800.000000) >= 0  THEN
					BEGIN
					DOC_BASE := 'SI';
					END;
				END IF;
				END;
			END IF;
		    END;
		END IF;
		
SELECT CASE
        WHEN (SELECT ODLN."GrosProfit"/ ((ODLN."DocTotal" -  ODLN."VatSum") *0.01) FROM ODLN WHERE ODLN."DocNum" = '1250002' )   < 29 AND  :DOC_BASE = 'NO'  THEN                                        'TRUE'
			ELSE 'FALSE'
			END
			FROM DUMMY;		
		
	END;
    ELSE  
	BEGIN
		     
	 

SELECT CASE
			WHEN ( SELECT $[ORDR."GrosProfit"] / (($[ORDR."DocTotal"] - $[ORDR."VatSum"])* 0.01) FROM DUMMY)  < 29  AND  :DOC_BASE = 'NO'  THEN 'TRUE'         
			ELSE 'FALSE'
			END
			FROM DUMMY;`
			
	END; 
	END IF;

END;
END IF;

Esta es la parte especifica qeu cusa el error

SELECT CASE
			WHEN ( SELECT $[ORDR."GrosProfit"] / (($[ORDR."DocTotal"] - $[ORDR."VatSum"])* 0.01) FROM DUMMY)  < 29  AND  :DOC_BASE = 'NO'  THEN 'TRUE'         
			ELSE 'FALSE'
			END
			FROM DUMMY;`

Necesito ayuda por favor

:heavy_heart_exclamation: Importante :exclamation: 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.

Análisis del problema:

El error que mencionas relacionado con $ en la sintaxis de SQL se debe a que ese símbolo no es reconocido en la mayoría de los motores SQL estándar, incluyendo el de SAP Business One. Es probable que el error provenga de intentar utilizar un parámetro o variable de formulario de SAP Business One directamente en una consulta SQL sin el formato adecuado.

Posibles soluciones:

  1. Remover $ del código: En SAP Business One, cuando haces referencia a los campos de una tabla dentro de una consulta, no necesitas usar el símbolo $. El $ se utiliza en las Búsquedas Formateadas (FMS), pero no en las consultas directas o procedimientos almacenados. Por lo tanto, deberías eliminar el $ de tu consulta.

  2. Corrección del código: Aquí te dejo una corrección de la parte donde tienes el error, quitando el símbolo $ y ajustando la sintaxis para que sea compatible con SQL en SAP Business One:

SELECT CASE
    WHEN (SELECT ORDR."GrosProfit" / ((ORDR."DocTotal" - ORDR."VatSum") * 0.01) 
          FROM ORDR WHERE ORDR."DocNum" = '1250002') < 29 
         AND :DOC_BASE = 'NO'
    THEN 'TRUE'
    ELSE 'FALSE'
END
FROM DUMMY;

Notas adicionales:

  • Declaración de variables: Las variables que usas (por ejemplo, TIPODOC, DOC_BASE, STATUS, etc.) deben estar declaradas correctamente antes de utilizarlas. Asegúrate de que estén inicializadas antes de los condicionales o cálculos.
  • Consultas internas: Si estás utilizando un valor dinámico de la interfaz de SAP (por ejemplo, de un documento o una ventana), asegúrate de que esos valores estén disponibles en el contexto de la consulta.

Advertencia sobre cambios en la base de datos:

Si estás ejecutando estas consultas directamente sobre la base de datos de SAP Business One, ten en cuenta que cualquier error en la consulta o manipulación de datos puede llevar a inconsistencias en el sistema. Es fundamental probar estos cambios en un entorno de pruebas antes de aplicarlos en un entorno productivo.

Resumen Consultoria-SAP

En resumen, el error principal se debe al uso del símbolo $ en la consulta SQL, lo cual no es válido en este contexto. El código debe corregirse para eliminar ese símbolo y garantizar que las consultas sean válidas para el motor de base de datos de SAP Business One (B1). También es importante revisar las variables utilizadas y asegurarse de que están correctamente inicializadas antes de ejecutar las operaciones lógicas.

Si continúas teniendo problemas o necesitas más ajustes, Consultoria-SAP.com está aquí para ofrecerte asistencia.

¡Estamos aquí para ayudarte!

Prueba así:

SELECT CASE
WHEN ( SELECT ORDR."GrosProfit" / ((ORDR."DocTotal" - ORDR."VatSum")* 0.01)FROM DUMMY)  < 29   THEN 'TRUE'         
			ELSE 'FALSE'
			END FROM ORDR ORDR WHERE ORDR."DocNum"=17682

así me funcionó: