Bom dia a todos, estou mais uma vez precisasndo de vossos conhecimentos , é o seguinte: Desenvolvi um relatório em excel, só que está demorando muito para gerar o relatório, o que pode ser feito no código para gerar mais rápido.Segue abaixo o código. ASSIGN c-subtitulo = "Com data de entrega entre " + STRING(tt-param.dt-entrega-ini) + " e " + STRING(tt-param.dt-entrega-fim). IF tt-param.tipo = 1 THEN ASSIGN c-subtitulo = c-subtitulo + " - Resumo " + tt-param.desc-classif. ELSE ASSIGN c-subtitulo = c-subtitulo + " - Detalhado " + tt-param.desc-classif. xlcreate(). xlFontSize("*",9). RUN pi-print-cabec. IF tt-param.tipo = 2 /*Detalhado*/ THEN DO: RUN pi-imprime-emitente. END. ELSE DO: IF tt-param.classifica = 1 THEN RUN pi-resumo-emitente. ELSE IF tt-param.classifica = 2 THEN RUN pi-resumo-item. END. PROCEDURE pi-print-cabec: xlSkip(1). /*---------------------------------- Imagem --------------------------------------------*/ DEFINE VARIABLE caminho-imagem AS CHARACTER NO-UNDO. ASSIGN caminho-imagem = SEARCH("gmimg/logomoura.jpg"). xlMerge("G2" + ":G2"). /* xl-center-horiz( "G" + c-lin + ":G" + c-lin ).*/ xlShowImage("G2", caminho-imagem, 5). xlAlignHoriz("G2", 5). /*xlput-c( c-empresa ).*/ xlput-c( "Acumuladores Moura S/A" ). xlFontSize( "A" + c-lin + ":H" + c-lin, 11 ). xlBold( "A" + c-lin + ":H" + c-lin ). xlSkip(2). /*xlskip(2).*/ xlput-c( "Pontualidade do Fornecedor " ). /* xlFontSize( "A" + c-lin + ":B" + c-lin, 9 ).*/ /* xlBold( "A" + c-lin + ":G" + c-lin ).*/ xlBorder( "A" + c-lin + ":G" + c-lin, 2 ). xlmerge( "A" + c-lin + ":G" + c-lin ). xlColor( "A" + c-lin + ":G" + c-lin, 0, 43 ). xlSkip(2). /*xlput-c( c-titulo-relat ).*/ xlput-c( c-subtitulo ). xlskip(1). xlBold("A" + STRING(n-lin - 5) + ":G" + STRING(n-lin - 3)). xlFontSize("A" + STRING(n-lin - 3), 14). xlFontSize("A" + STRING(n-lin - 2), 9). xlItalic("A" + STRING(n-lin - 2)). xlSkip(1). END PROCEDURE. PROCEDURE pi-imprime-emitente. DEF VAR n-tot-est AS INT NO-UNDO. DEF VAR n-atd-est AS INT NO-UNDO. DEF VAR n-nao-est AS INT NO-UNDO. DEF VAR n-tot-emit AS INT NO-UNDO. DEF VAR n-atd-emit AS INT NO-UNDO. DEF VAR n-nao-emit AS INT NO-UNDO. DEF VAR n-t-tot-est AS INT NO-UNDO. DEF VAR n-t-atd-est AS INT NO-UNDO. DEF VAR n-t-nao-est AS INT NO-UNDO. DEF VAR l-print AS LOGICAL NO-UNDO. ASSIGN n-tot-est = 0 n-atd-est = 0 n-nao-est = 0 n-tot-emit = 0 n-atd-emit = 0 n-nao-emit = 0 n-t-tot-est = 0 n-t-atd-est = 0 n-t-nao-est = 0. FOR EACH tt-parc BREAK BY tt-parc.cod-emitente BY tt-parc.cod-estabel: ASSIGN l-print = YES. /**** ignorar registros fora do filtro mas contabilizar nos totalizadores ****/ ASSIGN n-tot-est = n-tot-est + 1 n-tot-emit = n-tot-emit + 1. IF tt-parc.classe = 1 THEN DO: ASSIGN n-atd-emit = n-atd-emit + 1 n-atd-est = n-atd-est + 1. IF NOT tt-param.ind-atendidos THEN ASSIGN l-print = NO. END. ELSE DO: ASSIGN n-nao-emit = n-nao-emit + 1 n-nao-est = n-nao-est + 1. IF NOT tt-param.ind-nao-atend THEN ASSIGN l-print = NO. END. IF tt-param.situacao = 2 /*so pedidos impressos*/ AND tt-parc.sit-ped <> 1 /* 1=impresso */ THEN ASSIGN l-print = NO. IF tt-param.situacao = 3 /*so pedidos aprovados*/ AND tt-parc.sit-aprov-ped = NO THEN ASSIGN l-print = NO. IF FIRST-OF(tt-parc.cod-emitente) THEN DO: IF tt-param.ind-salta AND n-lin > 6 THEN DO: xlPageBreak("A" + c-lin). xlPrintArea-Orient(2). /*Paisagem*/ xlPrintArea-Zoom(80). xlPrintArea-Paper(9). /*A4*/. RUN pi-print-cabec. END. xlput-c("Fornecedor: " + STRING(tt-parc.cod-emitente) + " - " + tt-parc.nome-emit). xlBold("A" + c-lin). xlBorder("A" + c-lin + ":O" + c-lin, 2). xlColor("A" + c-lin + ":O" + c-lin, 0, 43). xlSkip(1). END. IF FIRST-OF(tt-parc.cod-emitente) OR FIRST-OF(tt-parc.cod-estabel) THEN DO: xlput-c( "Est." ). xlput-c( "Pedido" ). xlput-c( "OC" ). xlput-c( "Parc" ). xlput-c( "Dt.Pedido" ). xlput-c( "Dt.Entrega" ). xlput-c( "Dt.Receb." ). xlput-c( "Dt.Emiss.NF" ). xlput-c( "Atraso" ). xlput-c( "Item" ). xlput-c( "Descrição" ). xlput-c( "Qt.Pedida" ). xlput-c( "Qt.Receb." ). xlput-c( "NF" ). xlput-c( "% Atend."). xlBold( "A" + c-lin + ":O" + c-lin ). xlGrid( "A" + c-lin + ":O" + c-lin ). xl-center-horiz( "A" + c-lin + ":O" + c-lin ). xlSkip(1). ASSIGN c-aux = c-lin. END. IF l-print THEN DO: RUN pi-acompanhar IN h-acomp( INPUT "Imprimindo " + tt-parc.cod-estab + " " + STRING(tt-parc.cod-emitente) + " " + STRING(tt-parc.dt-entrega) ). xlput-c( tt-parc.cod-estabel ). xlput-i( tt-parc.num-pedido ). xlput-c( STRING(tt-parc.numero-ordem, "zzzzz9,99") ). xlput-i( tt-parc.parcela ). xlput-d( tt-parc.data-pedido ). xlput-d( tt-parc.dt-entrega ). xlput-d( tt-parc.dt-receb ). xlput-d( tt-parc.dt-emiss ). xlput-i( tt-parc.dias-atraso ). xlput-c( tt-parc.it-codigo ). xlput-c( tt-parc.desc-item ). xlput-n( tt-parc.qtd-pedida ). xlput-n( tt-parc.qtd-recebida ). xlput-c( tt-parc.nro-docto ). xlput-i( tt-parc.classe ). xl-center-horiz( "I" + c-lin ). xlFormatPercent( "O" + c-lin ). xlSkip(1). END. IF LAST-OF(tt-parc.cod-estabel) OR LAST-OF(tt-parc.cod-emitente) THEN DO: xlGrid( "A" + c-aux + ":O" + STRING(n-lin - 1) ). xlSkip(1). xlput-c( "Total do Estabelecimento " + tt-parc.cod-estabel + " Fornecedor: " + STRING(tt-parc.cod-emitente)). xlBold( "A" + c-lin ). xlBorder( "A" + c-lin + ":G" + c-lin, 2 ). xlSkip(1). xlput-c( "Total de Pedidos: " ). xlBorder( "A" + c-lin + ":E" + c-lin, 2 ). xlput-iAT( n-tot-est, "F" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(1). xlput-c( "Total de pedidos 100% atend no prazo:" ). xlBorder( "A" + c-lin + ":E" + c-lin, 2 ). xlput-iAT( n-atd-est, "F" + c-lin ). xlput-nAT( (n-atd-est / n-tot-est), "G" + c-lin ). xlFormatPercent( "G" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(1). xlput-c( "Total de pedidos não atendidos:" ). xlBorder( "A" + c-lin + ":E" + c-lin, 2 ). xlput-iAT( n-nao-est, "F" + c-lin ). xlput-nAT( (n-nao-est / n-tot-est), "G" + c-lin ). xlFormatPercent( "G" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(2). ASSIGN n-tot-est = 0 n-atd-est = 0 n-nao-est = 0. END. IF LAST-OF(tt-parc.cod-emitente) THEN DO: xlput-c( "Total do Fornecedor " + STRING(tt-parc.cod-emitente) ). xlBold( "A" + c-lin ). xlBorder( "A" + c-lin + ":G" + c-lin, 2 ). xlColor( "A" + c-lin + ":G" + c-lin, 0, 43 ). xlSkip(1). xlput-c( "Total de Pedidos: " ). xlBorder( "A" + c-lin + ":F" + c-lin, 2 ). xlput-iAT( n-tot-emit, "F" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(1). xlput-c( "Total de pedidos 100% atend no prazo:" ). xlBorder( "A" + c-lin + ":F" + c-lin, 2 ). xlput-iAT( n-atd-emit, "F" + c-lin ). xlput-nAT( (n-atd-emit / n-tot-emit), "G" + c-lin ). xlFormatPercent( "G" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(1). xlput-c( "Total de pedidos não atendidos:" ). xlBorder( "A" + c-lin + ":F" + c-lin, 2 ). xlput-iAT( n-nao-emit, "F" + c-lin ). xlput-nAT( (n-nao-emit / n-tot-emit), "G" + c-lin ). xlFormatPercent( "G" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(3). ASSIGN n-tot-emit = 0 n-atd-emit = 0 n-nao-emit = 0. END. END. xlWidth( "A", 5.00 ). xlWidth( "B", 8.15 ). xlWidth( "C", 8.15 ). xlWidth( "D", 4.15 ). xlWidth( "E", 9.43 ). xlWidth( "F", 11.5). xlWidth( "G", 15.00). xlWidth( "H", 9.43 ). xlWidth( "I", 5.71 ). xlWidth( "J", 7.86 ). xlWidth( "K",40.00 ). xlWidth( "L",11.00 ). xlWidth( "M",11.00 ). xlWidth( "N",11.00 ). xlWidth( "O", 7.14 ). /********************************************INCLUSÃO DE TOTALIZADOR POR ESTABELECIMENTO************************************************/ IF tt-param.classifica = 1 THEN DO: xlput-c( "Total Estabelecimentos " ). xlBold( "A" + c-lin ). xlBorder( "A" + c-lin + ":G" + c-lin, 2 ). xlmerge( "A" + c-lin + ":G" + c-lin ). xlColor( "A" + c-lin + ":G" + c-lin, 0, 43 ). xlSkip(2). FOR EACH tt-parc BREAK BY tt-parc.cod-estabel: ASSIGN n-tot-est = n-tot-est + 1. /**** ignorar registros fora do filtro mas contabilizar nos totalizadores ****/ IF tt-parc.classe = 1 THEN ASSIGN n-atd-est = n-atd-est + 1. ELSE ASSIGN n-nao-est = n-nao-est + 1. IF LAST-OF(tt-parc.cod-estabel) THEN DO: xlput-c( "Total do Estabelecimento " + tt-parc.cod-estabel ). xlBold( "A" + c-lin ). xlBorder( "A" + c-lin + ":G" + c-lin, 2 ). xlColor( "A" + c-lin + ":G" + c-lin, 0, 43 ). xlSkip(1). xlput-c( "Total de Pedidos: " ). xlBorder( "A" + c-lin + ":E" + c-lin, 2 ). xlput-iAT( n-tot-est, "F" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(1). xlput-c( "Total de pedidos 100% atend no prazo:" ). xlBorder( "A" + c-lin + ":E" + c-lin, 2 ). xlput-iAT( n-atd-est, "F" + c-lin ). xlput-nAT( (n-atd-est / n-tot-est), "G" + c-lin ). xlFormatPercent( "G" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(1). xlput-c( "Total de pedidos não atendidos:" ). xlBorder( "A" + c-lin + ":E" + c-lin, 2 ). xlput-iAT( n-nao-est, "F" + c-lin ). xlput-nAT( (n-nao-est / n-tot-est), "G" + c-lin ). xlFormatPercent( "G" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(2). ASSIGN n-t-tot-est = n-t-tot-est + n-tot-est n-t-atd-est = n-t-atd-est + n-atd-est n-t-nao-est = n-t-nao-est + n-nao-est n-tot-est = 0 n-atd-est = 0 n-nao-est = 0. END. END. xlput-c( "Total Geral" ). xlBold( "A" + c-lin ). xlBorder( "A" + c-lin + ":G" + c-lin, 2 ). xlColor( "A" + c-lin + ":G" + c-lin, 0, 43 ). xlmerge( "A" + c-lin + ":G" + c-lin ). xlSkip(1). xlput-c( "Total de Pedidos: " ). xlBorder( "A" + c-lin + ":E" + c-lin, 2 ). xlput-iAT( n-t-tot-est, "F" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(1). xlput-c( "Total de pedidos 100% atend no prazo:" ). xlBorder( "A" + c-lin + ":E" + c-lin, 2 ). xlput-iAT( n-t-atd-est, "F" + c-lin ). xlput-nAT( (n-t-atd-est / n-t-tot-est), "G" + c-lin ). xlFormatPercent( "G" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(1). xlput-c( "Total de pedidos não atendidos:" ). xlBorder( "A" + c-lin + ":E" + c-lin, 2 ). xlput-iAT( n-t-nao-est, "F" + c-lin ). xlput-nAT( (n-t-nao-est / n-t-tot-est), "G" + c-lin ). xlFormatPercent( "G" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(2). xlWidth( "G", 15.00). END. /*******************************************************************************************************************************************/ END PROCEDURE. PROCEDURE pi-resumo-emitente. DEF VAR n-tot-est AS INT NO-UNDO. DEF VAR n-atd-est AS INT NO-UNDO. DEF VAR n-nao-est AS INT NO-UNDO. DEF VAR n-t-tot-est AS INT NO-UNDO. DEF VAR n-t-atd-est AS INT NO-UNDO. DEF VAR n-t-nao-est AS INT NO-UNDO. ASSIGN n-tot-est = 0 n-atd-est = 0 n-nao-est = 0 n-t-tot-est = 0 n-t-atd-est = 0 n-t-nao-est = 0. FOR EACH tt-parc BREAK BY tt-parc.cod-estabel: ASSIGN n-tot-est = n-tot-est + 1. /**** ignorar registros fora do filtro mas contabilizar nos totalizadores ****/ IF tt-parc.classe = 1 THEN ASSIGN n-atd-est = n-atd-est + 1. ELSE ASSIGN n-nao-est = n-nao-est + 1. IF LAST-OF(tt-parc.cod-estabel) THEN DO: xlput-c( "Total do Estabelecimento " + tt-parc.cod-estabel ). xlBold( "A" + c-lin ). xlBorder( "A" + c-lin + ":G" + c-lin, 2 ). xlColor( "A" + c-lin + ":G" + c-lin, 0, 43 ). xlSkip(1). xlput-c( "Total de Pedidos: " ). xlBorder( "A" + c-lin + ":E" + c-lin, 2 ). xlput-iAT( n-tot-est, "F" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(1). xlput-c( "Total de pedidos 100% atend no prazo:" ). xlBorder( "A" + c-lin + ":G" + c-lin, 2 ). xlput-iAT( n-atd-est, "F" + c-lin ). xlput-nAT( (n-atd-est / n-tot-est), "G" + c-lin ). xlFormatPercent( "G" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(1). xlput-c( "Total de pedidos não atendidos:" ). xlBorder( "A" + c-lin + ":G" + c-lin, 2 ). xlput-iAT( n-nao-est, "F" + c-lin ). xlput-nAT( (n-nao-est / n-tot-est), "G" + c-lin ). xlFormatPercent( "G" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(2). /********************************************INCLUSÃO DE TOTALIZADOR POR ESTABELECIMENTO************************************************/ ASSIGN n-t-tot-est = n-t-tot-est + n-tot-est n-t-atd-est = n-t-atd-est + n-atd-est n-t-nao-est = n-t-nao-est + n-nao-est n-tot-est = 0 n-atd-est = 0 n-nao-est = 0. /* ASSIGN n-tot-est = 0 n-atd-est = 0 n-nao-est = 0.*/ END. END. xlput-c( "Total Geral" ). xlmerge( "A" + c-lin + ":G" + c-lin ). xlBold( "A" + c-lin ). xlBorder( "A" + c-lin + ":G" + c-lin, 2 ). xlColor( "A" + c-lin + ":G" + c-lin, 0, 43 ). xlSkip(1). xlput-c( "Total de Pedidos: " ). xlBorder( "A" + c-lin + ":G" + c-lin, 2 ). xlput-iAT( n-t-tot-est, "F" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(1). xlput-c( "Total de pedidos 100% atend no prazo:" ). xlBorder( "A" + c-lin + ":G" + c-lin, 2 ). xlput-iAT( n-t-atd-est, "F" + c-lin ). xlput-nAT( (n-t-atd-est / n-t-tot-est), "G" + c-lin ). xlFormatPercent( "G" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(1). xlput-c( "Total de pedidos não atendidos:" ). xlBorder( "A" + c-lin + ":G" + c-lin, 2 ). xlput-iAT( n-t-nao-est, "F" + c-lin ). xlput-nAT( (n-t-nao-est / n-t-tot-est), "G" + c-lin ). xlFormatPercent( "G" + c-lin ). xlGrid( "F" + c-lin + ":G" + c-lin ). xlskip(2). xlWidth( "G", 15.00). END PROCEDURE. /******************************************************************************************************************************************/
Experimente utilizar a propriedade Visible do handle excel para False enquanto gera o arquivo. abraço