Ayuda SAP

Query despachos

Hola buen día a todos.

Tengo un problema con un query, en realidad es algo que no entiendo porque ocurre.

Tengo este query que me muestra, el numero de documento (que puede ser el numero de folio “[FolioNum]”, si es que tiene, o el numero de orden de compra “[NumAtCard]” si es que no tiene numero de folio ) la ciudad a donde despacho, si se despacha a oficina o domicilio, el servicio de transporte utilizado, pero por alguna razon a pensar de tener el campo de “[FolioNum]” vacio no me rellena el campo con el numero de OC.

les adjunto código y resultado del query:

SELECT CASE WHEN T0.[FolioNum]  = ' ' THEN T0.[NumAtCard] ELSE T0.[FolioNum] END AS 'DOCUMENTO', T0.[CardName], T0.[U_AI_Ciudad], CASE T0.[U_AI_Despacho] WHEN 01 THEN 'Oficina' WHEN 02 THEN 'Domicilio' END 'Despachar a', T0.[U_AI_TransNac] AS 'TRASNPORTE', T0.[NumAtCard]
FROM ODLN T0  INNER JOIN OSHP T1 ON T0.[TrnspCode] = T1.[TrnspCode]
 WHERE datediff(day,getdate(),t0.docduedate)=0 AND T1.[TrnspName] IN ('Por pagar', 'Pagado', 'Cargo Cta. Corriente Cliente')

Nota: El ultimo campo del query lo agregue solo para tener una vista de lo que contiene el campo
“[NumAtCard]”

Hola @JuanR
Prueba con ISNULL

Andres Ramirez Jaramillo :colombia:

2 Me gusta

Modifique el codigo asi:

SELECT CASE WHEN T0.[FolioNum]  = 'ISNULL' THEN T0.[NumAtCard] ELSE T0.[FolioNum] END AS 'DOCUMENTO', T0.[CardName], T0.[U_AI_Ciudad], CASE T0.[U_AI_Despacho] WHEN 01 THEN 'Oficina' WHEN 02 THEN 'Domicilio' END 'Despachar a', T0.[U_AI_TransNac] AS 'TRASNPORTE' 

FROM ODLN T0  INNER JOIN OSHP T1 ON T0.[TrnspCode] = T1.[TrnspCode] 

WHERE datediff(day,getdate(),t0.docduedate)=0 AND T1.[TrnspName] IN ('Por pagar', 'Pagado', 'Cargo Cta. Corriente Cliente')

y me arroja este error:

1). [Microsoft][SQL Server Native Client 11.0][SQL Server]Conversion failed when converting the varchar value ‘ISNULL’ to data type int. ‘’ (SWEI)

Al parecer es un tema de el tipo de dato

es correcto esto es lo que esta mal T1.[TrnspName] IN ('Por pagar', 'Pagado', 'Cargo Cta. Corriente Cliente') esos datos no están en la tabla que pones borra esa parte desde el in y te va a correr.

Creo que no es nada de eso, ya que esa sentencia esta en el where y el error en en select, igual para verificar modifique la linea que me comentas y sigue con el mismo error

SELECT CASE WHEN T0.[FolioNum] = ' ' THEN T0.[NumAtCard]  ELSE T0.[FolioNum] END AS 'DOCUMENTO', T0.[CardName], T0.[U_AI_Ciudad], CASE T0.[U_AI_Despacho] WHEN 01 THEN 'Oficina' WHEN 02 THEN 'Domicilio' END 'Despachar a', T0.[U_AI_TransNac] AS 'TRASNPORTE' 

FROM ODLN T0  INNER JOIN OSHP T1 ON T0.[TrnspCode] = T1.[TrnspCode]

 WHERE datediff(day,getdate(),t0.docduedate)=0  AND T0.[U_AI_TransNac] != ' '

estas usando mal la funcion ISNULL.
Esto se usa de la siguiente manera:

select CASE WHEN ISNULL(T0.[FolioNum],'')='' THEN T0.[NumAtCard] ELSE T0.[FolioNum] END AS 'DOCUMENTO'

:dizzy_face: :dizzy_face: no entiendo que pasa

cambie el codigo asi:

SELECT CASE WHEN ISNULL(T0.[FolioNum],' ')= ' ' THEN T0.[NumAtCard] ELSE T0.[FolioNum] END  AS 'DOCUMENTO', T0.[CardName], T0.[U_AI_Ciudad], CASE T0.[U_AI_Despacho] WHEN 01 THEN 'Oficina' WHEN 02 THEN 'Domicilio' END 'Despachar a', T0.[U_AI_TransNac] AS 'TRASNPORTE' 

FROM ODLN T0  INNER JOIN OSHP T1 ON T0.[TrnspCode] = T1.[TrnspCode]

 WHERE datediff(day,getdate(),t0.docduedate)=0  AND T0.[U_AI_TransNac] != ' '

y me arroja este error:

1). [Microsoft][SQL Server Native Client 11.0][SQL Server]Conversion failed when converting the nvarchar value ‘BOLETA 2293’ to data type int. ‘’ (SWEI)

@JuanR estan mal tus Case

la sintaxis es la siguiente
CASE WHEN T1."InvCurr"='USD' THEN SUM(T1."InvPayAmnt")* T1."LineRate" ELSE SUM(T1."InvPayAmnt") END AS "IMPORTE",

cámbialo conforme a tu query.

CASE WHEN T0.[FolioNum] = ’ ’ THEN T0.[NumAtCard] ELSE T0.[FolioNum] END AS ‘DOCUMENTO’

Seria así en mi caso?

1 me gusta

Intenta con esto para ver que te arroja el campo:

SELECT CASE WHEN T0.[FolioNum]  = ' ' THEN T0.[NumAtCard] ELSE T0.[FolioNum] END AS 'DOCUMENTO', T0.[CardName], T0.[U_AI_Ciudad], CASE T0.[U_AI_Despacho] WHEN 01 THEN 'Oficina' WHEN 02 THEN 'Domicilio' END 'Despachar a', T0.[U_AI_TransNac] AS 'TRASNPORTE', T0.[NumAtCard], T0.[FolioNum] 
FROM ODLN T0  INNER JOIN OSHP T1 ON T0.[TrnspCode] = T1.[TrnspCode]
 WHERE datediff(day,getdate(),t0.docduedate)=0 AND T1.[TrnspName] IN ('Por pagar', 'Pagado', 'Cargo Cta. Corriente Cliente')

Los 2 últimos campos son los que te están faltando verdad??? La cosa es que lo estás validando contra ’ ’ (es decir un espacio), pero que ocurre cuando T0.[FolioNum] = ‘’ (sin espacio)? ese seguramente es el caso que te está dando problemas. Lo vas a notar con el query que te estoy dando. donde al final podrás ver el valor del T0.[FolioNum] y del T0.[NumAtCard] y entender porqué esa línea te viene en vacío.

1 me gusta

El problema es por que el campo [FolioNum] es un int, no un varchar, asi que debes usarlo asi: ISNULL(T0.[FolioNum],-1) = -1

1 me gusta

No es lo mismo NULL que vacio, el vacio al menos contiene el fin de cadena. En tu ejemplo tu lo que pones es un espacio entre las dos comillas simples, y para esto van pegadas, lo que yo usatia en la condición seria algo asi

WHEN COALESCE(T0.FolioNum,'') = '' THEN

Con eso, si es NULL te devuelve vacío y si no cualquier otra cosa que contenga incluido el vacío

1 me gusta

hola, aun no he podido dar con el error, intente todo lo que me han propuesto y sigue igual.

lo ultimo que hice fue lo que tu me recomendaste dejando el codigo asi:

SELECT CASE WHEN COALESCE(T0.FolioNum,' ') = ' ' THEN T0.[NumAtCard] ELSE T0.[FolioNum] END  AS 'DOCUMENTO', T0.[CardName], T0.[U_AI_Ciudad], CASE T0.[U_AI_Despacho] WHEN 01 THEN 'Oficina' WHEN 02 THEN 'Domicilio' END 'Despachar a', T0.[U_AI_TransNac] AS 'TRASNPORTE' 

FROM ODLN T0  INNER JOIN OSHP T1 ON T0.[TrnspCode] = T1.[TrnspCode] 

WHERE T0.[DocDate] >=[%0] AND T0.[U_AI_TransNac] != ' '

y me sigue arrojando este error:

1). [Microsoft][SQL Server Native Client 11.0][SQL Server]Conversion failed when converting the nvarchar value ‘BOLETA 2293’ to data type int. ‘’ (SWEI)

el campo no es varchar, usa como te indico aqui.

lo hice asi:

no se si esta bien copiado pero me sigue arrojando este error:

1). [Microsoft][SQL Server Native Client 11.0][SQL Server]Conversion failed when converting the nvarchar value ‘BOLETA 2293’ to data type int. ‘Valores definidos por usuario’ (CSHS)

No leí bien el mensaje de error, lo que te dice que estas tratando de cambiar un varchar a int, y en tu consulta solo puede ocurrir en esta parte, al comparar con un entero trata de convertirlo a entero, y ese UDF debe ser varchar…

Buenos Dias ,

Considero que el problema es como estamos colocando la sententencia esn el select. por favor prueba colocándola de esta forma.

SELECT CASE WHEN T0.[FolioNum] IS NULL THEN T0.[NumAtCard] ELSE T0.[FolioNum] END

Saludos,

Hola Saida, gracias por ayudar, intente lo que dices pero sigue arrojando el mismo error:

1). [Microsoft][SQL Server Native Client 11.0][SQL Server]Conversion failed when converting the nvarchar value ‘BOLETA 2296’ to data type int. ‘’ (WLS1)

prueba asi amigo -> SELECT CASE WHEN T0.[FolioNum] IS NULL