Query con campo BaseRef

Que tal compañeros como están

Estoy tratando de asociar el numero de referencia (T1.“BaseRef” ) de la tabla IGN1 con el numero de documento (T2.“DocNum” ) de la tabla OWOR, sin embargo siempre se muestra el error por el tipo de dato.

SELECT DISTINCT  T0."DocNum", T1."BaseRef", T1."BaseEntry", T2."DocNum" 
FROM OIGN T0  
INNER JOIN IGN1 T1 ON T0."DocEntry" = T1."DocEntry"
LEFT JOIN OWOR T2 ON T1."BaseEntry" = T2."DocEntry" AND  T2."DocNum" = T1."BaseRef"
 
WHERE T0."DocDate" = '2019-12-31' 
ORDER BY T0."DocNum"

img err

Ya intente la conversión a entero, omitir los valores null pero no me ha funcionado, espero me puedan ayudar.

Hola @camilog, ejecuté tu consulta en query manager y me funcionó sin cambiar nada.
image
A veces el query manager se queda colgado con el mismo error aunque lo corrijas, intenta copiar la query y pegarlo en una nueva ventana de query manager, o reinicia SAP si el problema persiste.
Por lo que probé, la sintaxis y la semántica está correcta.

hola buenos días, el otro problema que se puede dar es que el motor este parametrizado de forma distintas y tengas que cambiar el formato de fecha de año mes día, por día mes año.
Lo probé asi como lo tienes directo en SQL y no arroja errores.

Que tal @JhosserRomero
Yo sigo usando el codigo y me da el mismo problema, de echo solo se presenta con el dia 31 de diciembre, con cualquier otro rango de fecha el query funciona correctamente.
El query completo es este:

SELECT DISTINCT  T0."TransNum",
CASE
WHEN T0."TransType" = 13 THEN 'RF'
WHEN T0."TransType" = 14 THEN 'RC'
WHEN T0."TransType" = 15 THEN 'NE'
WHEN T0."TransType" = 16 THEN 'DV'
WHEN T0."TransType" = 18 THEN 'TT'
WHEN T0."TransType" = 19 THEN 'PC'
WHEN T0."TransType" = 20 THEN 'EP'
WHEN T0."TransType" = 21 THEN 'DM'
WHEN T0."TransType" = 59 THEN 'EM'
WHEN T0."TransType" = 60 THEN 'OA'
WHEN T0."TransType" = 67 THEN 'IM'
WHEN T0."TransType" = 162 THEN 'RI'
WHEN T0."TransType" = 202 THEN 'OF'
END AS "Documento",
T0."BASE_REF" AS "Nº Documento", CAST (T0."DocDate" AS DATE) AS "Fecha", 
T0."ItemCode" AS "Item", T0."Dscription" AS "Descripciòn", 
T0."Warehouse" AS "Bodega", T0."CardCode", T0."CardName", 
T0."JrnlMemo", T0."Comments", ((T0."InQty" - T0."OutQty")* T1."IWeight1")AS "KILOS",
T1."IWeight1" AS "UNID/MED", T0."InQty"AS "Entrada", T0."OutQty" AS "Salida", 
T0."CalcPrice" AS "VALOR UNID", T0."TransValue" AS "VALOR TOTAL",
T2."DocNum" AS "Recibo", T4."DocNum" AS "Emision", T6."DocNum" AS "Orden F", T8."ItemName" AS "Desc. Orden F"
  
FROM OINM T0
INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode"
LEFT JOIN NNM1 A2 ON T0."TransType" = A2."ObjectCode"
LEFT JOIN OIGN T2 ON T0."TransType" = T2."ObjType" AND T0."BASE_REF" = T2."DocNum" --Entradas
LEFT JOIN IGN1 T3 ON T2."DocEntry" = T3."DocEntry" 

LEFT JOIN OIGE T4 ON T0."TransType" = T4."ObjType" AND T0."BASE_REF" = T4."DocNum" --Salidas
			OR T2."DocEntry" = T4."RelatedEnt" AND T2."ObjType" = T4."RelatedTyp"  
LEFT JOIN IGE1 T5 ON T4."DocEntry" = T5."DocEntry" OR T3."BaseRef" = T5."BaseRef" 
	
LEFT JOIN OWOR T6 ON T5."BaseEntry" = T6."DocEntry" AND T5."BaseRef" = T6."DocNum" 
			OR T3."BaseEntry" = T6."DocEntry" AND T3."BaseRef" = T6."DocNum" 
LEFT JOIN WOR1 T7 ON T6."DocEntry" = T7."DocEntry"
LEFT JOIN OITM T8 ON T6."ItemCode" = T8."ItemCode"

WHERE CAST (T0."DocDate" AS DATE) >= [%0]
AND CAST (T0."DocDate" AS DATE) <= [%1]
AND T0."ItemCode" LIKE '11%'

ORDER BY T0."BASE_REF"

Que tal @Patricio_Guti

El tema no es de fecha, el codigo completo es este:

SELECT DISTINCT  T0."TransNum",
CASE
WHEN T0."TransType" = 13 THEN 'RF'
WHEN T0."TransType" = 14 THEN 'RC'
WHEN T0."TransType" = 15 THEN 'NE'
WHEN T0."TransType" = 16 THEN 'DV'
WHEN T0."TransType" = 18 THEN 'TT'
WHEN T0."TransType" = 19 THEN 'PC'
WHEN T0."TransType" = 20 THEN 'EP'
WHEN T0."TransType" = 21 THEN 'DM'
WHEN T0."TransType" = 59 THEN 'EM'
WHEN T0."TransType" = 60 THEN 'OA'
WHEN T0."TransType" = 67 THEN 'IM'
WHEN T0."TransType" = 162 THEN 'RI'
WHEN T0."TransType" = 202 THEN 'OF'
END AS "Documento",
T0."BASE_REF" AS "Nº Documento", CAST (T0."DocDate" AS DATE) AS "Fecha", 
T0."ItemCode" AS "Item", T0."Dscription" AS "Descripciòn", 
T0."Warehouse" AS "Bodega", T0."CardCode", T0."CardName", 
T0."JrnlMemo", T0."Comments", ((T0."InQty" - T0."OutQty")* T1."IWeight1")AS "KILOS",
T1."IWeight1" AS "UNID/MED", T0."InQty"AS "Entrada", T0."OutQty" AS "Salida", 
T0."CalcPrice" AS "VALOR UNID", T0."TransValue" AS "VALOR TOTAL",
T2."DocNum" AS "Recibo", T4."DocNum" AS "Emision", T6."DocNum" AS "Orden F", T8."ItemName" AS "Desc. Orden F"
  
FROM OINM T0
INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode"
LEFT JOIN NNM1 A2 ON T0."TransType" = A2."ObjectCode"
LEFT JOIN OIGN T2 ON T0."TransType" = T2."ObjType" AND T0."BASE_REF" = T2."DocNum" --Entradas
LEFT JOIN IGN1 T3 ON T2."DocEntry" = T3."DocEntry" 

LEFT JOIN OIGE T4 ON T0."TransType" = T4."ObjType" AND T0."BASE_REF" = T4."DocNum" --Salidas
			OR T2."DocEntry" = T4."RelatedEnt" AND T2."ObjType" = T4."RelatedTyp"  
LEFT JOIN IGE1 T5 ON T4."DocEntry" = T5."DocEntry" OR T3."BaseRef" = T5."BaseRef" 
	
LEFT JOIN OWOR T6 ON T5."BaseEntry" = T6."DocEntry" AND T5."BaseRef" = T6."DocNum" 
			OR T3."BaseEntry" = T6."DocEntry" AND T3."BaseRef" = T6."DocNum" 
LEFT JOIN WOR1 T7 ON T6."DocEntry" = T7."DocEntry"
LEFT JOIN OITM T8 ON T6."ItemCode" = T8."ItemCode"

WHERE CAST (T0."DocDate" AS DATE) >= [%0]
AND CAST (T0."DocDate" AS DATE) <= [%1]
AND T0."ItemCode" LIKE '11%'

ORDER BY T0."BASE_REF"

Lo que logre encontrar es que del dia 31 de diciembre uno de los documentos de entrada me da esta dando el problema, justo en este parte:

LEFT JOIN OWOR T6 ON T5."BaseEntry" = T6."DocEntry" AND T5."BaseRef" = T6."DocNum" 
			OR T3."BaseEntry" = T6."DocEntry" AND T3."BaseRef" = T6."DocNum"

cuando se compara

T3.“BaseRef” = T6.“DocNum”

Valida un documento, puede tener un campo con dato erróneo yo lo genere sin problemas en mi base

image

ahora mi duda si tienes el 99% de los datos en la tabla OINM por que llamar las otras tablas de documentos, en la OINM tienes el Numero de Orden de Fabricación cuando son movimientos por ordenes por ejemplo (OINM.appObjAbs)

Hola @Patricio_Guti

No entiendo como usar el campo appObjAbs

supongo que si a los demás les esta ejecutando exitosa mente la consulta, entonces quizá alguno de los campos que mandas traer del 31 probablemente se genero de forma incorrecta.

cuando ese campo esta con dato. Quiere decir que esta relacionada a una orden de fabricación.
Por ejemplo si el transtype es 59 esto quiere decir EM y el campo AppbjAbs esta con numero es un recibo de producción y que la orden de fabricación a la que pertenece es la que sale en ese campo. Ahora ademas si ocupas Ordenes de tipo desmontaje, debes validar que el campo AppObjType sea P.

Saludos

Como estas @Diego_RS
Lo raro es que no se usan campos definidos por el usuario o datos ingresados manualmente, todo esta directamente asociado con campos propios del sistema.

Tendrías que probar agregando los campos uno a uno en la query para la fecha que te genera problemas. Creo que es la única forma de que encuentres cual es el campo problemático.
Ya luego se ve que solución aplicar.

Hola @camilog
No necesitas aplicar 2 condiciones en el INNER JOIN, con una condicion es suficiente.
Deja la consulta de la siguiente manera

SELECT DISTINCT  T0."DocNum", T1."BaseRef", T1."BaseEntry", T2."DocNum" 
FROM OIGN T0  
INNER JOIN IGN1 T1 ON T0."DocEntry" = T1."DocEntry"
LEFT JOIN OWOR T2 ON T1."BaseEntry" = T2."DocEntry" 
WHERE T0."DocDate" = '2019-12-31' ORDER BY T0."DocNum"

Andres Ramirez Jaramillo :colombia:

1 me gusta

Que tal @andresramirez
He decidido dejarlo como indicas, confiando en los docentry y el tipo de documento espero no se pierdan datos.

Muchas gracias.