Error en query al usar BETWEEN

Buenos días.
Tengo un problema, necesito que al ejecutar la query pueda filtrar por fechas pero me da fallo.

SELECT DISTINCT
   T0."DocEntry" AS "ID_Factura",
   T0."TransId" AS "Asiento",
   T0."DocNum" AS "Factura",
   T0."DocDate" AS "Fecha de Factura",
   (
      SELECT
         MAX(IFNULL(T1."ShipDate", T0."TaxDate")) 
      FROM
         PCH1 T1 
      WHERE
         T1."DocEntry" = T0."DocEntry"
   )
   AS "Fecha Operación",
   T0."CardName",
   T2."LicTradNum" AS "Cif",
   (
      T0."DocTotal" - T0."VatSum"
   )
   AS "Base Imponible",
   ROUND (T0."VatSum", 2) AS "IVA",
   (
      SELECT
         T3."Rate" 
      FROM
         OVTG T3 
      WHERE
         T3."Code" = 
         (
            SELECT
               MAX(T1."VatGroup") 
            FROM
               PCH1 T1 
            WHERE
               T1."DocEntry" = T0."DocEntry"
         )
   )
   AS " % Iva",
   ROUND (T0."DocTotal", 2) AS "Total" 
FROM
   OPCH T0 
   INNER JOIN
      OCRD T2 
      ON T0."CardCode" = T2."CardCode" 
WHERE
   T0."DocDate" BETWEEN [ % 0] AND [ % 1] 
GROUP BY
   T0."DocDate",
   T0."DocEntry",
   T0."TransId",
   T0."DocNum",
   T0."CardName",
   T2."LicTradNum",
   T0."DocTotal",
   T0."VatSum" 
ORDER BY
   T0."TransId"

Buen día @JuanAntonio
Ese error me reventó la cabeza durante un buen tiempo y la causa es que tienes Sub-Selects en tu consulta. Cuando tienes subconsultas, el SAP no permite utilizar parámetros. Hasta la fecha no he encontrado una solución. Yo lo que he hecho es pasar los reportes directamente a Crystal Reports cuando necesito subconsultas y parámetros.
Intenta quitar las subconsultas y verás que funciona.
Saludos.

1 me gusta

Revisa bien esta parte de tu codigo (T0.“DocTotal” - T0.“VatSum”) AS “Base Imponible” , ahi encontraba el error lo modifique por ROUND (T0.“DocTotal”-T0.“VatSum”,2) y si se ejecuta el query.

SELECT DISTINCT
   T0."DocEntry",
   T0."DocNum",
   T0."TransId" AS "Asiento",
   T0."DocDate",
   (
      SELECT
         MAX(IFNULL(A."ShipDate", T0."TaxDate")) 
      FROM
         PCH1 A 
      WHERE
         A."DocEntry" = T0."DocEntry"
   )
   AS "Fecha Operación",
   T0."CardName",
   T1."LicTradNum",
   ROUND (T0."VatSum", 2) "IVA",
   (
      SELECT
         B."Rate" 
      FROM
         OVTG B 
      WHERE
         B."Code" = 
         (
            SELECT
               MAX(C."VatGroup") 
            FROM
               PCH1 C 
            WHERE
               C."DocEntry" = T0."DocEntry"
         )
   )
   AS " % Iva",
   ROUND (T0."DocTotal", 2) total,
   ROUND (T0."DocTotal" - T0."VatSum", 2) baseImponible 
FROM
   OPCH T0 
   INNER JOIN
      OCRD T1 
      ON T0."CardCode" = T1."CardCode" 
WHERE
   T0."DocDate" between [ % 1] and [ % 2] 
GROUP BY
   T0."DocDate",
   T0."TransId",
   T0."DocEntry",
   T0."DocNum",
   T0."CardName",
   T1."LicTradNum",
   T0."VatSum",
   T0."DocTotal"
1 me gusta

Buenas tardes.
Gracias es una solución que me parece bien.

1 me gusta

Buenas tardes.
Sigue sin funcionar.

El query que has pasado da un error … no se ejecuta… porque no reconoce parte del código…

1). [Microsoft][SQL Server Native Client 10.0][SQL Server]‘IFNULL’ is not a recognized built-in function name.

1 me gusta

Buenos días.
A mí me funciona bien, puede ser por las comillas.

Intenta quitar las comillas " y ponle corchetes [ ]

1 me gusta

Aparte de las comillas por [], y lo que te mencionan arriba del Round…
Intenta normalmente colocar el “Fecha >= Variable and Fecha <= Variable2” Me he encontrado con casos muy específicos (sin razón alguna), donde el query manager no reconoce los Between, pero si me acepta y sin problemas esta configuración. No es la más optima pero funciona

1 me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.