Reporte de Devolución con lotes Crystal SAP B1

Buen día,
Espero se encuentren bien. Les escribo porque tengo un inconveniente con un layout de crystal. Si se duplica un artículo en el detalle de la entrega el reporte está mostrando duplicadas las líneas. Entiendo que está tomando tanto la tabla de detalle de la devolución como el detalle del informe de operaciones de número de lote. Adicionalmente, en el mismo reporte, si no se coloca la fecha de vencimiento al lote no aparecen los campos citados en el comando con el identificador “Descripción”.
Les anexo el comando del reporte para que por favor me orienten:

select o1.docentry,o2.itemcode,O1.DOCNUM,O2.ITEMCODE,O4.ItemName,O2.Quantity,O2.UomCode,(case when ISNULL(o4.ManSerNum,'')='Y' then 1 else o2.Quantity end) 'Cantidad',
		(case  when ISNULL(o4.ManBtchNum,'')='Y' AND isnull(o4.MngMethod,'') = 'A' then 'Código: '+ISNULL(o4.SuppCatNum,'') +' /Marca: '+ISNULL(o4.U_CTS_MARCAS,'') + ' /Presentación: '+ ISNULL(o4.U_CTS_PRESENT,'') + ' /Lote: ' + ISNULL(o8.BatchNum,'') + ' /Expiración: '+ convert(nvarchar(max),o9.ExpDate,103)
		       when ISNULL(o4.ManSerNum,'')='Y' then 'Código: '+ISNULL(o4.SuppCatNum,'') +' /Marca: '+ISNULL(o4.U_CTS_MARCAS,'') + ' /Presentación: '+ ISNULL(o4.U_CTS_PRESENT,'') + ' /Serie: '+ISNULL(o7.SuppSerial,'') 
			   else 'Código: '+ISNULL(o4.SuppCatNum,'') +' /Marca: '+ISNULL(o4.U_CTS_MARCAS,'') +' /Presentación: '+ ISNULL(o4.U_CTS_PRESENT,'')
		end) 'Descripcion'
		
FROM
	ordn o1 inner join rdn1 o2 on o1.docentry=o2.docentry
		    inner join ocrd o3 on o1.CardCode=o3.cardcode
			inner join OITM o4 on o2.itemcode=o4.itemcode
			left join oitl o5 on o1.docentry=o5.docentry and
								 o1.docnum=o5.docnum and
								 o2.itemcode = o5.itemcode and 
								 o2.baseLine = o5.AllocateLn and
								 o2.BaseType = o5.AllocateTp and 
								 o2.BaseEntry = o5.AllocatEnt
			left join sri1 o6 on o2.itemcode = o6.itemcode and
								o2.objtype = o6.basetype and
								o2.docentry = o6.baseentry and
								o2.WhsCode = o6.WhsCode
			left join osri o7 on o6.SysSerial=o7.SysSerial and o2.itemcode=o7.itemcode
			left join ibt1 o8 on o2.ItemCode = o8.itemcode and o1.objtype=o8.BaseType AND O1.DocEntry=o8.BaseEntry
			left join obtn o9 on o8.itemcode = o9.itemcode and o8.BatchNum=o9.DistNumber 

Muchas gracias de antemano,
Saludos

Si te sirve Crystal tiene la opción de omitir lineas duplicadas dándole click derecho al campo opción dar formato en la pestaña de común viene la opción eliminar si se duplica.

Saludos

3 Me gusta

Buen día @Carlos_Rabiel, muchas gracias, ya probé esa opción pero no me sirve porque las líneas que suprime me las deja en blanco en el formato con espacios. Adicionalmente, en los casos de las cantidades son iguales también me las suprime y no me conviene…Creo que el problema que tengo es de vínculos entre las tablas pero no he logrado dar con la solución…

en tu query puedes usar un select distinct si son iguales todos los campos repetidos los agrupara

ummm no se donde colocarlo…:(:confused:

así como lo puse select distinct y el resto del query

Al poner el distinct luego del select ya no me duplica las líneas pero me desaparecen otros detalles del formato…
Esta es la vista con Distinct:


Sin distinct esto es lo que me pasa:

Adicionalmente para el primer artículo (TCRB…), como el lote no tiene fecha de expiración no me está mostrando otros detalles del artículo. En este caso creo que debo colocar un IS NULL pero como es una variable convertida no se como hacerlo…
Saludos

Parece que los esta suprimiendo crystal porque les deja el espacio asegurate a ver quitado los suprimir lo del isnull serias mas o menos así

Isnull((case when ISNULL(o4.ManBtchNum,’’)=‘Y’ AND isnull(o4.MngMethod,’’) = ‘A’ then ‘Código: ‘+ISNULL(o4.SuppCatNum,’’) +’ /Marca: ‘+ISNULL(o4.U_CTS_MARCAS,’’) + ’ /Presentación: ‘+ ISNULL(o4.U_CTS_PRESENT,’’) + ’ /Lote: ’ + ISNULL(o8.BatchNum,’’) + ’ /Expiración: ‘+ convert(nvarchar(max),o9.ExpDate,103)
when ISNULL(o4.ManSerNum,’’)=‘Y’ then ‘Código: ‘+ISNULL(o4.SuppCatNum,’’) +’ /Marca: ‘+ISNULL(o4.U_CTS_MARCAS,’’) + ’ /Presentación: ‘+ ISNULL(o4.U_CTS_PRESENT,’’) + ’ /Serie: ‘+ISNULL(o7.SuppSerial,’’)
else ‘Código: ‘+ISNULL(o4.SuppCatNum,’’) +’ /Marca: ‘+ISNULL(o4.U_CTS_MARCAS,’’) +’ /Presentación: ‘+ ISNULL(o4.U_CTS_PRESENT,’’)
end),'') ‘Descripcion’
1 me gusta

Gracias @Carlos_Rabiel…verifiqué lo de suprimir y nada…lo que sucede es que este reporte no lo hice yo y me estoy dando cuenta de estos dos detalle que te comento no sé como solventar…la duplicidad y los casos de la descripción de lote sin fecha de vencimiento…

Buen día Connie una consulta cuando realizar la consulta en SQL te sigue mostrando los datos duplicados o solo es directamente en el Crystal, si en el SQL te muestra la misma información eso indica que tu script tiene algún valor que lo esta duplicando, si es tu script te recomiendo que lo realices por parte e identifiques que tabla es la que te ocasionando la duplicidad.

Con la tabla identificada ya podrías tomar las acciones para que ya no te duplique la información.

Espero te sea de ayuda mi comentario y siempre cuéntanos como te fue.

Saludos

1 me gusta

Estimado @CJPG, en SQL también me lo duplica…es específicamente los casos en los que colocaron el mismo artículo en diferentes líneas para referenciar diferentes números de lote (en SAP sabemos que no es necesario duplicar las líneas pero como están poniendo al día las operaciones lo están replicando exactamente en SAP…)
En otro orden de ideas el formato me coloca en NULL en todo lo referenciado en la Descripción cuando el lote no tiene fecha de vencimiento. Entiendo que debo colocar una condición en donde hago referencia a la fecha de vencimiento pero no se como…: /Expiración: '+ convert(nvarchar(max),o9.ExpDate,103)
Muchas gracias por tu ayuda

En sql el distinc también te elimina el detalle?
El is null para esa parte seria de

Isnull(convert(nvarchar(max),o9.ExpDate,103),'')
1 me gusta

En SQL el distinc no me elimina el detalle, de hecho no me duplica las líneas como en Crystal.
Ya coloqué el Isnull para la fecha como me comentas y en SQL funciona ok…entonces el del tema es Crystal pero no se que hacer…

ya no se me ocurre algo mas mas que estarle moviendo a crystal o hacer otro reporte lo difícil es el query y ya lo tienes

Si…en eso estoy…ya a punto de hacer el reporte desde cero…gracias por tu ayuda

:coffee: Pasaba por aquí… muy lindo debate …

Solo una observación, @Connie y @Carlos_Rabiel, revisen éste mensaje para aprender a formatear código en sus mensajes del foro. :+1: Se los recomiendo, es muy simple, y le agrega muchísimo valor al debate que los códigos estén formateados.

No les distraigo más, no es necesario que respondan a este mensaje. Éxitos a todos.

1 me gusta

Connie

Cual es el propósito del informe porque si un articulo aparece 2 veces en la entrega es correcto que la query que pusiste lo muestre, pero todo depende del propósito del informe.

Saludos,

Estimado @PBECERRA,
En este caso la necesidad de duplicar surge por el formato anterior de la entrega que tenían en esta empresa, el cual para expresar diferentes números de lote para el mismo artículo duplicaban el mismo. Para registrar las operaciones exactamente al origen han duplicado el artículo en el despacho, entonces ya el reporte lo que hace es que me pone 4 líneas en vez de cuatro.
Yo les he dicho que con SAP no será necesario hacer eso porque no es necesario duplicar los artículos en la entrega para ingresar diferentes números de lote.
La verdad creo que este caso difícilmente se presentará en un futuro pero quería saber si existe la manera que no me aparezcan 4 líneas en lugar de 2…
Gracias por tu ayuda,
Saludos,

gracias @SidV, lo había visto en otros mensajes pero no sabía como formatearlos…efectivamente mis mensajes parecen un chorizo jajajaja gracias!

@Connie las sentencias inner y left antes de join generalmente sirven para unir dos tablas sin que se pierda información de previas asociaciones, pero tiene el inconveniente que si no son bien administradas provocan la duplicidad de registros. Es importante tener muy claro dos conceptos para realizar la asociación que es la que se relaciona despues del ON:

  1. llave foránea en una de las tablas que marca la relación entre las dos.
  2. y filtros de negocio, que son los que definen la información que se requiere, estos generalmente son constantes o son ingresados por los usuarios a nivel de interfaz.
1 me gusta