Tengo un problema con la ejecución de un informe de cierre de taquillas y es que un usuario creo una factura y en la lista de precios puso datos alfanuméricos (CX) y el campo en el informe lo espera de forma numérica, lo cual hace que me genere el siguiente error.
Mens. 245, Nivel 16, Estado 1, Línea 1
Error de conversión al convertir el valor nvarchar ‘CX’ al tipo de datos smallint.
No he encontrado la forma de convertir los datos a smallint para que me deje ejecutar el informe o que mas puedo hacer para poder solucionarlo?
Este es el código
select t0.docdate,(select u_name from ousr where USERID = T0.UserSign) 'nomuser',
T0.[u_taquilla],t1.itemcode,
t1.dscription,(case when t1.u_lista_precios is null then '1' else t1.U_LISTA_PRECIOS end) 'lista',
(case when t1.u_lista_precios is null then 'Base Parque Explora'
else (select listname from opln t3 where t1.u_lista_precios=t3.listnum) end) 'nom_lista',
sum(t1.quantity)'tcant',
sum(t1.linetotal) 'tline',
0 'totefec',
0 'tottrans','P' 'TipoM',0 'Doci',0 'Docf',0 'TT'
from OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry
where t0.docdate='09/12/2018'
group by t0.docdate, t0.usersign,T0.u_taquilla,t1.itemcode,t1.dscription,t1.u_lista_precios
Esta es la parte del código que no me deja ejecutar el informe. Resalto en negrita donde me dice que lo que sea diferente de un número de lista de precios me lo deje como Base Parque
(case when t1.u_lista_precios is null then '1' else t1.U_LISTA_PRECIOS end) 'lista',
(**case when t1.u_lista_precios is null then 'Base Parque Explora'**
else (select listname from opln t3 where t1.u_lista_precios=t3.listnum) end) 'nom_lista'
Hola amigo, lo que pasa es que estas combinando el tipo de datos en un mismo campo, para ellos primero debes convertir todo a un tipo de dato, verifica el tipo de dato de tus campos y convierte todos al mismo.
(case when t1.u_lista_precios is null then '1' else convert(nvarchar,t1.U_LISTA_PRECIOS) end) 'lista',
(case when t1.u_lista_precios is null then 'Base Parque Explora'
else (select listname from opln t3 where t1.u_lista_precios=t3.listnum) end) 'nom_lista'
Igual convirtiendo el campo t1.U_LISTA_PRECIOS me sigue saliendo el mensaje de error de conversión.
Sería algo así
select t0.docdate,(select u_name from ousr where USERID = T0.UserSign) 'nomuser',
T0.[u_taquilla],t1.itemcode,
t1.dscription,
(case when convert(int,t1.u_lista_precios) is null then '1' else convert(int,t1.u_lista_precios) end) 'lista',
(case when convert(int,t1.u_lista_precios) is null then 'Base Parque Explora'
else (select listname from opln t3 where convert(int,t1.u_lista_precios)=t3.listnum) end) 'nom_lista',
sum(t1.quantity)'tcant',
sum(t1.linetotal) 'tline',
0 'totefec',
0 'tottrans','P' 'TipoM',0 'Doci',0 'Docf',0 'TT'
from OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry
where t0.docdate='09/12/2018'
group by t0.docdate, t0.usersign,T0.u_taquilla,t1.itemcode,t1.dscription,convert(int,t1.u_lista_precios),t0.DocNum
Hola @villa54
Comprendo mejor, en un campo smallint se ingreso un alfanumérico, por tanto por mas que intentes convertirlo a int tendrás problemas, queda convertir ese campo a nvarchar no a int.
Hola @villa54 después de varias vueltas pude ver que el smallint al que te hace referencia pertenece a la tabla OPLN en tu where estas igualando un alfanumérico con un número. Verifica y me avisas:
select t0.docdate,(select u_name from ousr where USERID = T0.UserSign) 'nomuser',
T0.[u_taquilla],t1.itemcode,
t1.dscription,
(case when t1.u_lista_precios is null then '1' else t1.u_lista_precios end) 'lista',
(case when t1.u_lista_precios is null then 'Base Parque Explora'
else (select listname from opln t3 where t1.u_lista_precios=CONVERT(NVARCHAR,t3.listnum)) end) 'nom_lista',
sum(t1.quantity)'tcant',
sum(t1.linetotal) 'tline',
0 'totefec',
0 'tottrans','P' 'TipoM',0 'Doci',0 'Docf',0 'TT'
from OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry
where t0.docdate='09/12/2018'
group by t0.docdate, t0.usersign,T0.u_taquilla,t1.itemcode,t1.dscription,t1.u_lista_precios,t0.DocNum