Generador de consultas SAP B1

Buenas tardes estimados!!
Tema : MODULO PRODUCCION
Tengo este query. La primera columna es el numero del documento de la ORDEN DE PRODUCCION
El query tiene 2 query unidos por el union all.
La Parte uno del query si lo ejecuto individualmente en el generador de consultas del SAP B1 me muestra me muestra el enlace al DocNum de la ORDEN DE PRODUCCION.
Si ejecuto todo el query, incluyendo parte uno y parte dos. NO MUESTRA el enlace.
Simplificando para que me puedan entender mejor.
Ejecutando parte uno o parte dos unicamente, muestra los enlaces.
Si ejecuto con el union all NO MUESTRA el enlace.
¿ Alguien me podria esplicar el motivo?

El query lo realizo para cruzar las EMISIONES DE PRODUCCION con los RECIBOS DE PRODUCCION.

– Parte uno

select "DocNum",
       SUM("Planeado"), SUM("Recibido"), SUM("Emision"), SUM("Sueldo"), SUM("Aporte"), SUM("AGUINALDO"), count(*) as "Repe"
 from
( 
SELECT  
t2."DocNum",
t0."DocEntry",
(select sum(t11."PlannedQty") from owor t11 where t11."DocNum" = t0."BaseRef" group by t11."DocNum") as "Planeado",
(select sum(t10."Quantity") from ign1 t10 where t10."BaseRef" = t0."BaseRef" group by t10."BaseRef") as "Recibido",
 (t0."Quantity"* t0."Price") as "Emision",
  round( (t0."Quantity"* t0."Price") * 80.1064 / 100 , 0) as "Sueldo",
  round( (t0."Quantity"* t0."Price") * 13.2176 / 100 ,0) as "Aporte",
  ROUND( (t0."Quantity"* t0."Price") * 6.6756 / 100,0) AS "AGUINALDO"
  
 FROM IGE1 t0
     INNER JOIN ORSC T1 ON t0."ItemCode" = T1."VisResCode"
     INNER JOIN OWOR T2 ON T0."BaseRef" = t2."DocNum"
WHERE T0."DocDate" between '20231023'   and  '20231030'
) x

GROUP BY x."DocNum"
having count(*) = 1


union all

-- Parte dos
select "DocNum",
       SUM("Planeado"), SUM("Recibido"), SUM("Emision"), SUM("Sueldo"), SUM("Aporte"), SUM("AGUINALDO"), count(*) as "Repe"
 from
( 
SELECT  
t2."DocNum",
t0."DocEntry",
(select sum(t11."PlannedQty") from owor t11 where t11."DocNum" = t0."BaseRef" group by t11."DocNum") as "Planeado",
(select sum(t10."Quantity") from ign1 t10 where t10."BaseRef" = t0."BaseRef" group by t10."BaseRef") as "Recibido",
 (t0."Quantity"* t0."Price") as "Emision",
  round( (t0."Quantity"* t0."Price") * 80.1064 / 100 , 0) as "Sueldo",
  round( (t0."Quantity"* t0."Price") * 13.2176 / 100 ,0) as "Aporte",
  ROUND( (t0."Quantity"* t0."Price") * 6.6756 / 100,0) AS "AGUINALDO"
  
 FROM IGE1 t0
     INNER JOIN ORSC T1 ON t0."ItemCode" = T1."VisResCode"
     INNER JOIN OWOR T2 ON T0."BaseRef" = t2."DocNum"
WHERE T0."DocDate" between '20231023'   and  '20231030'
) x

GROUP BY x."DocNum"
having count(*) > 1

Hola @Juan_Gaston_U

es un comportamiento estándar de SBO. La solución podría ser obtener el docentry en lugar del docnum, o montar la consulta como procedimiento almacenado y pasar los parámetros necesarios para la consulta.

Un saludo

Recuerda formatear el código sql adecuadamente.
Como te comenta @Amarcos en Business One en el momento que la consulta tiene un Union All se pierde la navegabilidad al registro.

Me da este error

me podrian ayudar?

Hola @Juan_Gaston_U

navegando encontré esta solución:

To resolve this issue, set the ‘SQL identifier character’ in the HANA ODBC connection to “” (quotes) to enclose the table and column name in double-quotes.

Un saludo

Si eso es para las columnas en los select.
llamando el procedimiento almacenado desde el HANA STUDIO de esta forma:
CALL “CONTRAPARTE_MDO” (‘20231023’, ‘20231030’)
funciona bien no da error.

Para ejecutar desde el generador de consultas debo definir los parametros y el query manager recibe de manera difererente los parametros [%0] ; [%1]

Busque navengado y encontre esto:
DECLARE @FECHA1 AS DATE
DECLARE @FECHA2 AS DATE

SET @FECHA1 = ‘[%0]’
SET @FECHA1 = ‘[%1]’

CALL “CONTRAPARTE_MDO” (@FECHA1, @FECHA2)
Arroja el error que mostre anteriormente.

El procedimiento almacenado desde hana studio no tiene errores.
Por lo tanto el error que dispara el query manager no entiendo.

Hola @Juan_Gaston_U

y si pones las fechas entre comillas dobles ¿funciona?

Un saludo

El tema es como pasar parametros desde el query manager del SBO que tiene motor HANA.

Es diferente al SQL server

Hola @Juan_Gaston_U

en el foro de SAP ponen un ejemplo con solución válida donde el SET no tiene comillas y sí las añaden en el CALL.

Un saludo

Hola @Juan_Gaston_U, prueba a poner al final de la consulta lo siguiente:

FOR BROWSE

A veces funciona.
SAP lo explica todo en esta nota:
h_tps://me.sap.com/notes/1410595/E

Hola @Juan_Gaston_U, para solucionar el problema aqui te dejo un ejemplo de como crear tipos de variables y ponerlas en el query.

/* SELECT FROM [dbo].[OINV] P0 /
Declare FECINI timestamp;
FECINI := /
P0.DocDate */ ‘[%PAR1]’;

/* SELECT FROM [dbo].[OINV] P0 /
Declare FECFIN timestamp;
FECINI := /
P0.DocDate */ ‘[%PAR2]’;

Por otra parte, te recomiendo crear una vista Calculada ya que están bajo HANA, esto con el fin de mejorar los tiempos de respuesta y que la memoria del servidor no se vea afectada al momento de correr querys directos a la base.

Este tema se cerró automáticamente 7 días después de la última publicación. No se permiten nuevas respuestas.