Error Acuerdo Global En Query SAP

Buenas tardes.

Estoy generando un Query en SAP para poder traer una información que me solicitan, pero al momento de correr el Query en Query Manager el sistema me manda un mensaje de error “Acuerdo Global (OOAT)” y no me genera la consulta.

Por lo cual me gustaria me apoyaran a saber cual es el error que tengo al momento de generarla.

Anexo Query que estoy generando:

SELECT
        a."CardCode" AS "Codigo",
        a."CardName" AS "Cliente",
        a."State1" AS "Estado",
        a."City" AS "Ciudad",  
        a."SlpName" AS "Empleado dpto",
        a."DocNum" AS "No. Factura",
        a."DocDate" AS "Fecha factura",
        a."DocTotal" AS "Total Factura"
    FROM (
        -- Primer bloque para las facturas (OINV)
        SELECT
            t0."CardCode",
            t0."CardName",
            t3."State1",
            t3."City",
            t1."SlpName",
            t0."DocTotal",
            t0."DocNum",
	    t0."DocDate"
        FROM oinv t0
        LEFT JOIN OSLP t1 ON t0."SlpCode" = t1."SlpCode"
        LEFT JOIN INV1 t2 ON t0."DocEntry" = t2."DocEntry"
        LEFT JOIN OCRD t3 ON t0."CardCode" = t3."CardCode"
        LEFT JOIN CRD1 t4 ON t3."CardCode" = t4."CardCode"
        WHERE t0."CANCELED" = 'N'
        UNION 
        -- Segundo bloque para las notas de crédito (ORIN)
        SELECT
            t0."CardCode",
            t0."CardName",
            t3."State1",
            t3."City",  
            t1."SlpName",
            t0."DocTotal",
            t0."DocNum",
	    t0."DocDate"
        FROM orin t0
        LEFT JOIN OSLP t1 ON t0."SlpCode" = t1."SlpCode"
        LEFT JOIN RIN1 t2 ON t0."DocEntry" = t2."DocEntry"
        LEFT JOIN OCRD t3 ON t0."CardCode" = t3."CardCode"
        LEFT JOIN CRD1 t4 ON t3."CardCode" = t4."CardCode"  
        WHERE t0."CANCELED" = 'N'
        AND t0."DocDate" BETWEEN [%0] and [%1]
        AND t2."BaseType" <> '203'
    ) a
    ORDER BY a."CardCode";

Agradezco de su atención y muchas gracias por el apoyo.

: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 “Acuerdo Global (OOAT)” en SAP Business One HANA al ejecutar un query en el Query Manager puede deberse a varias razones:

  1. El uso de alias “a” en la consulta final

    • Como el UNION está dentro de un subquery (a), SAP B1 a veces tiene problemas al procesarlo.
  2. Condición de fecha solo en ORIN

    • El BETWEEN [%0] AND [%1] solo está en el bloque de notas de crédito, lo que puede afectar la unión con facturas.
  3. Uso de JOIN con CRD1 en lugar de filtrar solo direcciones activas

    • La tabla CRD1 contiene múltiples direcciones de un cliente. Si no se usa correctamente, puede generar errores o información duplicada.
  4. Errores con el campo “BaseType” en RIN1

    • Filtrar con t2."BaseType" <> '203' en RIN1 puede ser problemático si t2 no tiene registros relacionados en algunas notas de crédito.

Solución propuesta

Aquí tienes una versión optimizada del query que debería funcionar sin el error de “Acuerdo Global (OOAT)”:

SELECT 
    t0."CardCode" AS "Codigo",
    t0."CardName" AS "Cliente",
    t3."State1" AS "Estado",
    t3."City" AS "Ciudad",  
    t1."SlpName" AS "Empleado dpto",
    t0."DocNum" AS "No. Factura",
    t0."DocDate" AS "Fecha factura",
    t0."DocTotal" AS "Total Factura"
FROM 
    OINV t0
LEFT JOIN OSLP t1 ON t0."SlpCode" = t1."SlpCode"
LEFT JOIN OCRD t3 ON t0."CardCode" = t3."CardCode"
WHERE 
    t0."CANCELED" = 'N'
    AND t0."DocDate" BETWEEN [%0] AND [%1]

UNION ALL

SELECT 
    t0."CardCode",
    t0."CardName",
    t3."State1",
    t3."City",  
    t1."SlpName",
    t0."DocNum",
    t0."DocDate",
    t0."DocTotal"
FROM 
    ORIN t0
LEFT JOIN OSLP t1 ON t0."SlpCode" = t1."SlpCode"
LEFT JOIN OCRD t3 ON t0."CardCode" = t3."CardCode"
WHERE 
    t0."CANCELED" = 'N'
    AND t0."DocDate" BETWEEN [%0] AND [%1]
    AND NOT EXISTS (
        SELECT 1 FROM RIN1 r WHERE r."DocEntry" = t0."DocEntry" AND r."BaseType" = '203'
    )
ORDER BY 
    "Codigo";

Mejoras realizadas

:white_check_mark: Eliminación de subquery innecesario: Ahora el UNION ALL se ejecuta sin encapsular en otro SELECT, lo que reduce la carga de SAP B1.

:white_check_mark: Filtrado de fecha en ambas secciones: Se agregó AND t0."DocDate" BETWEEN [%0] AND [%1] también en las facturas para evitar inconsistencias.

:white_check_mark: Uso de NOT EXISTS en lugar de BaseType <> '203': Mejora la performance y evita errores cuando no hay registros en RIN1.

:white_check_mark: Evita LEFT JOIN innecesario con CRD1: Como OCRD ya tiene la información del cliente, no es necesario traer CRD1 a menos que necesites validar direcciones específicas.


Resumen Consultoria-SAP

El error “Acuerdo Global (OOAT)” en SAP Business One al ejecutar un query puede deberse a problemas con la estructura del UNION, condiciones mal aplicadas o referencias a tablas innecesarias.

Para solucionarlo, hemos optimizado tu consulta eliminando el subquery innecesario, asegurando que los filtros de fecha sean consistentes y mejorando la forma en que se excluyen las notas de crédito con referencia a pedidos.

Prueba esta versión y dime si necesitas más ajustes.

¡Estamos aquí para ayudarte! :rocket:

La ejecuto y me devuelve datos sin problemas.