Arquivo em excel ser gerado mais rápido

Discussão em 'Progress 4GL' iniciado por valter, Janeiro 11, 2011.

  1. valter

    valter Membro Participativo

    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.

    /******************************************************************************************************************************************/
  2. CarlosNobrega

    CarlosNobrega Membro Participativo

    Experimente utilizar a propriedade Visible do handle excel para False enquanto gera o arquivo.

    abraço

Compartilhe esta Página