cancel
Showing results for 
Search instead for 
Did you mean: 

Busqueda de Registros en Crystal Report

Former Member
0 Kudos

Alquien me puede ayudar a tratar que la búsqueda de un reporte que tengo programado en un query e insertado en Crystal por medio de un command sea más rápida?

Mi reporte son aproximadamente 52,000 registros de los cuales poseo un filtro que me trae menos de 10 artículos o de la cantidad que sea, que es poca siempre me está buscando lo que encuentre registro por registro.

Una búsqueda de 1 sólo artículo me está demorando hasta 15 minutos puede que hasta más. ya que el busca registro por registro y eso está ordenado por artículo o sea que si lo encuentra y no lo encontrará más pero el sigue buscando hasta llegar al último registro.

Hay alguna forma ya sea en SQL o en crystal de que solo busque el filtro que le pongo y que no demore tanto??

Saludos y Gracias

Yamilteh

Accepted Solutions (0)

Answers (1)

Answers (1)

former_member413321
Contributor
0 Kudos

Hola,

    Para poder ayudarte, necesitamos el query que estas utilizando para entender porque demora tanto.

Former Member
0 Kudos

select l.itemcode as 'Codigo', o.U_referencia as 'Estilo', o.U_Pattern as 'Pattern', o.ItemName as 'Descripcion',

       o.U_Tipo as 'Tipo',o.U_color as 'Color',

       Case

       When l.Cantidad < 0 THEN l.Cantidad*0

       Else l.Cantidad

        End as 'Cantidad',

        (select (SUM(p.OutQty))/(SUM(p.InQty))*100 from oinm p

         where n.ItemCode=p.ItemCode and TransType<>67) as '%Vendido'

        ,IT.Price as 'Precio de Venta',

       CASE

     WHEN o.OnHand = 0 THEN DATEDIFF(day, l.DocDate, getdate())*0

     WHEN o.OnHand >0  THEN DATEDIFF(day, l.DocDate, getdate())

END AS 'DII', (select cast(min(q.docdate) as DATE) from owtr q Inner Join WTR1 q1 on q.DocEntry = q1.DocEntry

         where n.ItemCode = q1.ItemCode and (q.Filler ='005' and q1.WhsCode='001')

         Group By q1.ItemCode) as 'Fecha en Venta',

         (select cast(min(p.docdate) as DATE) from OINV p Inner Join INV1 p1 on p.DocEntry = p1.DocEntry

         where n.ItemCode = p1.ItemCode

         Group By p1.ItemCode) as 'Fecha de Factura',

        

    

--Termina La Cantidad de la Temporada Facturada    

cast(l.DocDate as date) as 'Ult_Fecha',o.PurPackUn as 'Empaque', w.WhsCode as  'Bodega',

     w.OnHand as 'Stock', o.OnHand as 'Stock Global',w.IsCommited as 'Comprometido', (w.OnHand-w.IsCommited) as 'Disp.' ,

     g.ItmsGrpNam as 'Grupo', o.U_subgrupart as 'SubGrupo', o.U_marca as 'Marca', o.FrgnName as 'Composición',o.U_Categoria as 'Categoría'

-------------INICIA PROGRAMACION DETALLE--------------------    

From (select j.itemcode, j.docdate, sum(j.InQty-j.OutQty) as 'Cantidad'

from (select itemcode,

      case when TransType= 20 then InQty else InQty*0 End as 'InQty',

      Case when TransType =20 then OutQty else OutQty*0 End as 'OutQty',

      docdate from OINM

WHERE TransType in (59,20,21,10000071)) j

Inner join (Select

CASE

  WHEN CO.ItemCode IS NULL THEN AJ.ItemCode

  ELSE CO.ItemCode

  End as 'ItemCode',

CASE

  WHEN CO.COMPRA < AJ.AJUSTE THEN CO.COMPRA

  WHEN CO.COMPRA IS NULL THEN AJ.AJUSTE

  ELSE CO.COMPRA

  END AS 'Ult_fecha'

FROM

(select C.ItemCode, max(C.DocDate ) as 'COMPRA'

from OINM C

Where C.TransType =20

Group By C.ItemCode)CO

FULL OUTER JOIN

(select I.ItemCode, min(I.DocDate) as 'AJUSTE'

from OINM I

Where I.TransType =59 or I.TransType =10000071

Group By I.ItemCode) AJ

ON CO.ItemCode = AJ.ItemCode)  k

on j.ItemCode = k.ItemCode and j.docdate = k.Ult_Fecha

Group by j.itemcode, j.DocDate) l

Inner Join OITM o ON l.itemcode=o.itemcode Inner join OITB g ON o.ItmsGrpCod=g.ItmsGrpCod

Inner Join ITM1 IT ON o.ItemCode = IT.ItemCode

Inner Join OINM n ON n.ItemCode = o.ItemCode

Inner Join OITW w ON o.ItemCode = w.ItemCode

where  w.WhsCode IN (Select WhsCode from OWHS where Locked ='N')

          and  o.[frozenFor] ='N' and IT.PriceList=3 and o.ItemCode not in('10101MC00MFITTA21060',

'10101MC00MFITTA21070',

'10101MC00MFITTA21080',

'10101MC00MFITTA21090',

'10101MC00MFITTA21100',

'10101MC00MFITTA21110',

'10101MC00MFITTA21120',

'10101MC00MFITTA21130',

'10101MC00MFITTA21220',

'10101MC00MFITTA21230',

'10101MC00MFITTA21240',

'10101MC00MFITTA21250',

'10101ML00MFITLG23010',

'10101ML00MFITLG23020',

'10101ML00MFITLG23030',

'10101ML00MFITLG23040',

'10101ML00MFITLG23050',

'10101ML00MFITLG23060',

'10101ML00MFITLG23070',

'10101ML00MFITLG23080',

'10101ML00MFITLG23090',

'10101ML00MFITLG23100',

'10101ML00MFITLG23110',

'10101ML00MFITLG23120',

'10101ML00MFITLG23130',

'10101ML00MFITLG23140',

'10101ML00MFITLG23160',

'10101ML00MFITLG23170',

'10101ML00MFITLG2319A',

'10101ML00MFITLG2319B',

'10101ML00MFITTA21010',

'10101ML00MFITTA21020',

'10101ML00MFITTA21030',

'10101ML00MFITTA21040',

'10101ML00MFITTA21050',

'10101ML00MFITTA21150',

'10101ML00MFITTA21160',

'10101ML00MFITTA21170',

'10101ML00MFITTA21180',

'10101ML00MFITTA21190',

'10101ML00MFITTA21200',

'10101ML00MFITTA21210',

'10101ML00MFITTA21260',

'10101ML00MFITTA21270',

'10101ML00MFITTA21280',

'10103ML00MFITLG22030',

'10103ML00MFITLG22040',

'10103ML00MFITLG22050',

'10103ML00MFITLG22060',

'10103ML00MFITLG22070',

'10103ML00MFITLG22080',

'10103ML00MFITSO24010',

'10103ML00MFITSO24020',

'10103ML00MFITSO24030',

'10103ML00MFITSO24040',

'10103ML00MFITSO24050',

'10103ML00MFITSO24060',

'10103ML00MFITSO24070',

'203010P00CF211081120',

'203010P00CF218080110',

'203020P00CF21038NAVY',

'203020P00CF212012680',

'203020P00CF21961BLK0',

'20402220PD721038NAVY',

'20402220PD7212012680',

'20402220PD7214070180',

'20402220PD721961BLK0',

'20403220PD7211081120',

'20403220PD7212088490',

'20403220PD7212270120',

'20403220PD7218080020',

'20403220PD7218080120',

'20403220PD72180-8038',

'20403220PD7812028358',

'20403220PD7AR010S500',

'20403220PD7TM10F36MG',

'30105MC00CFCH01ALTBL',

'30105MC00CFCH01BLILA',

'30105MC00CFCREAMSLD0',

'30105MC00CFLILACSLD',

'30105MC00CFLTBLUESLD',

'30105MC00CFST01ABLUE',

'30105MC00CFST01BPNK',

'30105MC00CFST01CBLK',

'30105MC00CFST04ABL',

'30105MC00CFST04BORG',

'30105ML00CFALTBLUEST',

'30105ML00CFBCREAMST',

'30105ML00CFST02ALTBL',

'30105ML00CFST02BLILA',

'30105ML00CFST02CORNG',

'30105ML00CFST03ALBL',

'30105ML00CFST03BPNK',

'30105ML00CFST03CBLK',

'30106AMC0CFB11218HAB',

'30106AMC0CFB11218LBL',

'30106AMC0CFB11218WHT',

'30106AMC0CFB11230LBL',

'30106AMC0CFB11230WHT',

'30106AMC0CFB11232WHT',

'30106MC00CBB11238WHT',

'30106ML00CBB11234HAB',

'30106ML00CBB11234WHT',

'30106ML00CBB11236HAB',

'30106ML00CBB11236WHT',

'30500NT22CFBZNT01BEI',

'30500NT22CFBZNT01BLK',

'30500NT22CFBZNT01CRM',

'30500NT22CFBZNT01NAV',

'30801NT20CFBZNC02BEI',

'30801NT20CFBZNC02CRM',

'30801NT20CFBZNC02NAV',

'30101MC00MF0M9504A00',

'30101MC00MF0M9504B00',

'30102MC00MF0OXS01AQU',

'30102MC00MF0OXS01BLU',

'30102MC00MF0OXS01PNK',

'30102MC00MF0OXS01PUR',

'30102MC00MF0OXS01WHT',

'30102MC00MF0OXS02NAV',

'30102MC00MF0OXS02RED',

'30102MC0MF0114B09NAV',

'30102MC0MF0114B09RED',

'30102MC0MF0115C09BLU',

'30102MC0MF0115C09PUR',

'30102ML00MF0OXS01AQU',

'30102ML00MF0OXS01BLU',

'30102ML00MF0OXS01PNK',

'30102ML00MF0OXS01PUR',

'30102ML00MF0OXS01WHT',

'30102ML00MF0OXS02NAV',

'30102ML00MF0OXS02RED',

'30103MC00MF0OXF0102A',

'30103MC00MF0OXF0102B',

'30103MC00MF0OXF0102C',

'30103MC00MF0OXF0103A',

'30103MC00MF0OXF0103B',

'30103MC00MF0OXF0202A',

'30103MC00MF0OXF0202B',

'30103MC00MF0OXF0203A',

'30103MC00MF0OXF0203B',

'30103MC00MF0OXF0204A',

'30103MC00MF0OXF0204B',

'30103ML00MF0OXF0101A',

'30103ML00MF0OXF0101B',

'30103ML00MF0OXF0101C',

'30103ML00MF0OXF0102A',

'30103ML00MF0OXF0102B',

'30103ML00MF0OXF0102C',

'30103ML00MF0OXF0104A',

'30103ML00MF0OXF0104B',

'30103ML00MF0OXF0105A',

'30103ML00MF0OXF0105B',

'30103ML00MF0OXF0106A',

'30103ML00MF0OXF0106B',

'30103ML00MF0OXF0106C',

'30103ML00MF0OXF0107A',

'30103ML00MF0OXF0107B',

'30103ML00MF0OXF0201A',

'30103ML00MF0OXF0201B',

'30108MC00MF00CD0401A',

'30108MC00MF00CD0401B',

'30108MC00MF00CD0402A',

'30108MC00MF00CD0402B',

'105060PFTMFBLACK0000',

'30201PIMCCFST2103C00',

'30200PIMCCFSP1101P00'

)

Group By

l.itemcode , o.U_referencia , o.U_Pattern, o.ItemName,

       o.U_color, l.Cantidad, IT.Price,

       o.U_Tipo, l.DocDate,l.DocDate,o.PurPackUn,o.OnHand,w.WhsCode, w.OnHand, w.IsCommited ,

       (w.OnHand-w.IsCommited) , g.ItmsGrpNam, o.U_subgrupart, o.U_marca,n.ItemCode, o.FrgnName,o.U_Categoria

  

UNION ALL

select * from dbo.Cantidad_Errada

order by 1

former_member413321
Contributor
0 Kudos

Hola,

      Tu query por lo que puedo ver puede ser optimizado. Ademas de que me queda la pregunta de que, cual es el contenido de select * from Cantidad_Errada?? hacer un select * sobre una tabla con muchos registro o sin considerar llaves hace peligroso el tiempo de respuesta.

   Hay 1 maneras de ver cuales son las consultas que se podrian mejorar:

  1. Pega tu query en el SQL Manager.
  2. En la barra de arriba hay un boton que indica "Include Actual Execution Plan"
  3. ejecuta tu query.
  4. El SQL mostrará ademas de resultado, el consumo que hace cada una de las consultas de BD y hace sugerencias de mejora
    .

Verificalo de esta manera, para ver que se puede mejorar, porque para poder ayudarte bien, a mejorarlo, necesitaria entender primero el objetivo del mismo y luego ver los datos.

Por lo que si no puedes optimizarlo por este modo, comentame y vemos a ver como te puedo colaborar.

former_member413321
Contributor
0 Kudos

Hola,

    Otra pregunta, que es la tabla OINM?

No la conozco, no viene en la ayuda del SDK, y ademas no tiene llaves, por lo que consultar de esta tabla siempre va a generar mucho tiempo.

Former Member
0 Kudos

la OINM es la tabla transaccional de todos los artículos, allí todo lo que transaccionas con un artículo se va a esa tabla, sea RF, TT, RC TR, lo que sea va a esa tabla como es un reporte del master de inventario necesito tenerla de esa tabla.  Cantidad errada son 4 situaciones de errores que se habían dado en entradas con los empaques del artículo que tuve que manipular las 4 por separado, las uno y me saca un reporte de 1004 artículos.  En si en reporte en SQL me demora 1 minuto y 26 segundos en generarse, la cosa es cuando lo llevo a Crystal aya si que demora bastante muchísimo.

Déjame hacer lo que me dijiste arriba a ver que onda.

Saludos y Gracias

Former Member
0 Kudos

Hola tengo la ejecución que me dices, a donde te la puedo enviar?  La guarde en formato de sql.

former_member413321
Contributor
0 Kudos

Enviamela a amora@ld.co.cr, pero te digo, que al ser la tabla OINM una tabla de bitacora de movimiento, la cual con cada documento consultado agrega una nueva linea y al no tener llaves, consultas sobre esta tabla son grandes,

Veamos el resultado que muestra, pero lo mejor es buscar opciones. En el Servidor corre rapido por ser el servidor, pero Crystal no corre en el server.

Former Member
0 Kudos

Listo ya te lo mande al correo que me indicaste.

Saludos y Gracias en cualquier ayuda que me puedas brindar.

former_member413321
Contributor
0 Kudos

Hola,

    La sugerencia final es pasarlo a un Store Procedure, esto para enviar la carga al servidor del reporte y asi, baje el tiempo por la velocidad del servidor.

Former Member
0 Kudos

Lo hice y bajo un poco el tiempo no tanto pero algo es algo, adicional son 2 procedimientos almacenados unidos por el código del artículo y esto hace que el tiempo no haya bajado practicamente nada.

Muchas gracias Alejandro.