excel e email

Discussão em 'EMS , HCM e Totvs 11' iniciado por Carlos Alberto Giusti, Maio 9, 2024.

  1. Carlos Alberto Giusti

    Carlos Alberto Giusti Membro Ativo

    Alguem tem um programa que gera excel, salva numa pasta e envia email para me enviar?
    Grato.
  2. rodolfo.rcs

    rodolfo.rcs Membro Participativo

    /*Define vari veis de acumuladores*/
    {utp\ut-glob.i}
    {utp/utapi019.i2}

    Define Variable excelAppl As Com-handle No-undo.
    Define Variable c-padrao As Character No-undo.
    Define Variable c-arq-salva As Character No-undo.
    Define Variable i-auxiliar As Integer No-undo.
    DEFINE VARIABLE c-range AS CHAR NO-UNDO.
    DEFINE VARIABLE d-prod AS DATE NO-UNDO.
    DEFINE VARIABLE c-contatos AS CHAR NO-UNDO.

    DEFINE BUFFER bf_usuar_grp_usuar FOR usuar_grp_usuar.

    DEFINE TEMP-TABLE tt-resumo-prd NO-UNDO
    FIELD cod-estabel AS CHARACTER FORMAT "x(05)"
    FIELD it-codigo AS CHARACTER FORMAT "x(16)"
    FIELD cod-depos AS CHARACTER FORMAT "x(03)"
    FIELD lote AS CHARACTER FORMAT "x(16)"
    FIELD qtd AS DECIMAL FORMAT ">>>,>>9.9999"
    FIELD palet-prod AS INTEGER
    FIELD qtd-report AS DECIMAL FORMAT ">>>,>>9.9999"
    FIELD palet-rep AS INTEGER
    FIELD nr-ord-prod AS INTEGER
    FIELD dt-trans AS DATE.


    DEFINE TEMP-TABLE tt-email NO-UNDO
    FIELD cod_usuario AS CHAR FORMAT "x(12)"
    FIELD e-mail AS CHAR FORMAT "x(100)".

    FOR EACH pallet-lata NO-LOCK
    WHERE pallet-lata.dt-trans = TODAY - 1
    AND pallet-lata.dt-exclusao = ?
    AND pallet-lata.cod-estabel = "202"
    BY pallet-lata.cod-estabel
    BY pallet-lata.nr-ord-prod.

    IF NOT CAN-FIND(FIRST tt-resumo-prd NO-LOCK
    WHERE tt-resumo-prd.cod-estabel = pallet-lata.cod-estabel
    AND tt-resumo-prd.it-codigo = pallet-lata.it-codigo
    AND tt-resumo-prd.cod-depos = pallet-lata.cod-depos
    AND tt-resumo-prd.nr-ord-prod = pallet-lata.nr-ord-prod
    AND tt-resumo-prd.lote = pallet-lata.lote
    AND tt-resumo-prd.dt-trans = pallet-lata.dt-trans) THEN DO:
    CREATE tt-resumo-prd.
    ASSIGN tt-resumo-prd.cod-estabel = pallet-lata.cod-estabel
    tt-resumo-prd.it-codigo = pallet-lata.it-codigo
    tt-resumo-prd.cod-depos = pallet-lata.cod-depos
    tt-resumo-prd.nr-ord-prod = pallet-lata.nr-ord-prod
    tt-resumo-prd.dt-trans = pallet-lata.dt-trans
    tt-resumo-prd.qtd = pallet-lata.quantidade
    tt-resumo-prd.lote = pallet-lata.lote
    d-prod = pallet-lata.dt-trans.
    END.
    ELSE DO:
    FIND FIRST tt-resumo-prd
    WHERE tt-resumo-prd.cod-estabel = pallet-lata.cod-estabel
    AND tt-resumo-prd.it-codigo = pallet-lata.it-codigo
    AND tt-resumo-prd.cod-depos = pallet-lata.cod-depos
    AND tt-resumo-prd.nr-ord-prod = pallet-lata.nr-ord-prod
    AND tt-resumo-prd.dt-trans = pallet-lata.dt-trans
    AND tt-resumo-prd.lote = pallet-lata.lote NO-ERROR.
    ASSIGN tt-resumo-prd.qtd = tt-resumo-prd.qtd + pallet-lata.quantidade.
    END.
    END.

    FOR EACH movto-estoq USE-INDEX reporte NO-LOCK
    WHERE movto-estoq.cod-estabel = "202"
    AND movto-estoq.dt-trans = TODAY - 1
    AND movto-estoq.nr-ord-prod > 0
    AND movto-estoq.op-seq = 1
    AND (movto-estoq.esp-docto = 1
    OR movto-estoq.esp-docto = 8),
    FIRST ITEM NO-LOCK
    WHERE ITEM.it-codigo = movto-estoq.it-codigo
    AND (ITEM.ge-codigo = 1
    OR ITEM.ge-codigo = 2),
    FIRST ord-prod OF movto-estoq NO-LOCK.

    IF NOT CAN-FIND(FIRST tt-resumo-prd NO-LOCK
    WHERE tt-resumo-prd.cod-estabel = movto-estoq.cod-estabel
    AND tt-resumo-prd.it-codigo = movto-estoq.it-codigo
    AND tt-resumo-prd.cod-depos = movto-estoq.cod-depos
    AND tt-resumo-prd.nr-ord-prod = movto-estoq.nr-ord-prod
    AND tt-resumo-prd.lote = movto-estoq.lote
    AND tt-resumo-prd.dt-trans = movto-estoq.dt-trans) THEN DO:
    CREATE tt-resumo-prd.
    ASSIGN tt-resumo-prd.cod-estabel = movto-estoq.cod-estabel
    tt-resumo-prd.it-codigo = movto-estoq.it-codigo
    tt-resumo-prd.cod-depos = movto-estoq.cod-depos
    tt-resumo-prd.nr-ord-prod = movto-estoq.nr-ord-prod
    tt-resumo-prd.dt-trans = movto-estoq.dt-trans
    tt-resumo-prd.lote = movto-estoq.lote
    tt-resumo-prd.qtd-report = IF movto-estoq.esp-docto = 1 THEN movto-estoq.quantidade ELSE movto-estoq.quantidade * -1.
    END.
    ELSE DO:
    FIND FIRST tt-resumo-prd
    WHERE tt-resumo-prd.cod-estabel = movto-estoq.cod-estabel
    AND tt-resumo-prd.it-codigo = movto-estoq.it-codigo
    AND tt-resumo-prd.cod-depos = movto-estoq.cod-depos
    AND tt-resumo-prd.nr-ord-prod = movto-estoq.nr-ord-prod
    AND tt-resumo-prd.lote = movto-estoq.lote
    AND tt-resumo-prd.dt-trans = movto-estoq.dt-trans NO-ERROR.
    IF movto-estoq.esp-docto = 1 THEN
    ASSIGN tt-resumo-prd.qtd-report = tt-resumo-prd.qtd-report + movto-estoq.quantidade.
    ELSE
    ASSIGN tt-resumo-prd.qtd-report = tt-resumo-prd.qtd-report - movto-estoq.quantidade.
    END.
    END.
    /*
    FOR EACH tt-resumo-prd NO-LOCK,
    EACH movto-estoq NO-LOCK
    WHERE movto-estoq.cod-estabel = tt-resumo-prd.cod-estabel
    AND movto-estoq.nr-ord-prod = tt-resumo-prd.nr-ord-prod
    AND movto-estoq.it-codigo = tt-resumo-prd.it-codigo
    AND movto-estoq.lote = tt-resumo-prd.lote
    AND movto-estoq.dt-trans = tt-resumo-prd.dt-trans
    AND movto-estoq.cod-depos = tt-resumo-prd.cod-depos
    AND (movto-estoq.esp-docto = 1
    OR movto-estoq.esp-docto = 8).
    IF movto-estoq.esp-docto = 1 THEN
    ASSIGN tt-resumo-prd.qtd-report = tt-resumo-prd.qtd-report + movto-estoq.quantidade.
    ELSE
    ASSIGN tt-resumo-prd.qtd-report = tt-resumo-prd.qtd-report - movto-estoq.quantidade.
    END.
    */
    FOR EACH tt-resumo-prd NO-LOCK,
    FIRST ordem-benef NO-LOCK
    WHERE ordem-benef.nr-ord-prod = tt-resumo-prd.nr-ord-prod.
    ASSIGN
    tt-resumo-prd.palet-prod = tt-resumo-prd.qtd / ordem-benef.quant-pallet
    tt-resumo-prd.palet-rep = tt-resumo-prd.qtd-rep / ordem-benef.quant-pallet.
    END.

    If Search("modelo\etqProdRep.xlt") <> ?
    Then Assign c-padrao = Search("modelo\etqProdRep.xlt").
    Else Assign c-padrao = Search("c:\temp\etqProdRep.xlt").

    Create "Excel.Application" excelAppl.
    excelappl:workbooks:Add(c-padrao).
    excelappl:worksheets:Item(1):Select.
    excelappl:Visible = No.


    Assign c-arq-salva = "c:\temp\" + "RESUMO DIÁRIO PRODUÇÃO " + ".xlsx".

    IF SEARCH (c-arq-salva) <> ? THEN OS-DELETE VALUE (c-arq-salva).

    ASSIGN i-auxiliar = 4.

    ASSIGN excelappl:range("A2"):VALUE = "CANPACK - Data " + STRING(d-prod,"99/99/9999").

    FOR EACH tt-resumo-prd NO-LOCK,
    FIRST ITEM NO-LOCK
    WHERE ITEM.it-codigo = tt-resumo-prd.it-codigo.
    ASSIGN
    c-range = "A" + STRING(i-auxiliar)
    excelappl:range(c-range):VALUE = tt-resumo-prd.cod-estabel
    c-range = "B" + STRING(i-auxiliar)
    excelappl:range(c-range):VALUE = tt-resumo-prd.nr-ord-prod
    c-range = "C" + STRING(i-auxiliar)
    excelappl:range(c-range):VALUE = tt-resumo-prd.it-codigo
    c-range = "D" + STRING(i-auxiliar)
    excelappl:range(c-range) = ITEM.desc-item
    c-range = "E" + STRING(i-auxiliar)
    excelappl:range(c-range):VALUE = tt-resumo-prd.cod-depos
    c-range = "F" + STRING(i-auxiliar)
    excelappl:range(c-range):VALUE = tt-resumo-prd.lote
    c-range = "G" + STRING(i-auxiliar)
    excelappl:range(c-range):VALUE = tt-resumo-prd.qtd
    c-range = "H" + STRING(i-auxiliar)
    excelappl:range(c-range):VALUE = tt-resumo-prd.palet-prod
    c-range = "I" + STRING(i-auxiliar)
    excelappl:range(c-range):VALUE = tt-resumo-prd.qtd-rep
    c-range = "J" + STRING(i-auxiliar)
    excelappl:range(c-range):VALUE = tt-resumo-prd.palet-rep
    c-range = "K" + STRING(i-auxiliar)
    excelappl:range(c-range):VALUE = tt-resumo-prd.palet-prod - tt-resumo-prd.palet-rep.
    IF tt-resumo-prd.palet-prod > tt-resumo-prd.palet-rep THEN
    ASSIGN excelappl:range(c-range):interior:colorindex = 06.
    ELSE IF tt-resumo-prd.palet-prod < tt-resumo-prd.palet-rep THEN
    ASSIGN excelappl:range(c-range):interior:colorindex = 03.
    ELSE
    ASSIGN excelappl:range(c-range):interior:colorindex = 00.

    ASSIGN i-auxiliar = i-auxiliar + 1.
    END.

    excelappl:DisplayAlerts = NO.
    excelappl:workbooks:Item(1):SaveAs(c-arq-salva,,,,,,).
    excelappl:Visible = NO.
    excelAppl:quit().
    Release Object excelappl.

    RUN pi-usuarios.
    RUN pi-mail.

    PROCEDURE pi-usuarios.
    FOR EACH bf_usuar_grp_usuar NO-LOCK
    WHERE bf_usuar_grp_usuar.cod_grp_usuar = "202".
    FOR FIRST usuar_grp_usuar NO-LOCK
    WHERE usuar_grp_usuar.cod_usuario = bf_usuar_grp_usuar.cod_usuario
    AND (usuar_grp_usuar.cod_grp_usuar = "SPR"
    OR usuar_grp_usuar.cod_grp_usuar = "SUP"
    OR usuar_grp_usuar.cod_grp_usuar = "FAT"
    OR usuar_grp_usuar.cod_grp_usuar = "SEX"
    OR usuar_grp_usuar.cod_grp_usuar = "MPL"
    OR usuar_grp_usuar.cod_grp_usuar = "GCQ"
    OR usuar_grp_usuar.cod_grp_usuar = "SCQ"
    OR usuar_grp_usuar.cod_grp_usuar = "GPL"
    OR usuar_grp_usuar.cod_grp_usuar = "APP"
    OR usuar_grp_usuar.cod_grp_usuar = "ECP"
    OR usuar_grp_usuar.cod_grp_usuar = "GCM"
    OR usuar_grp_usuar.cod_grp_usuar = "API"
    OR usuar_grp_usuar.cod_grp_usuar = "EPR"),
    FIRST usuar_mestre OF usuar_grp_usuar
    WHERE usuar_mestre.cod_e_mail_local <> "" NO-LOCK
    BREAK BY usuar_grp_usuar.cod_grp_usuar.
    IF ENTRY(2,usuar_mestre.cod_e_mail_local,"@") = ".com.br" THEN NEXT.
    IF NOT CAN-FIND(FIRST tt-email
    WHERE tt-email.cod_usuario = usuar_mestre.cod_usuario) THEN DO:
    CREATE tt-email.
    ASSIGN tt-email.cod_usuario = usuar_mestre.cod_usuario
    tt-email.e-mail = usuar_mestre.cod_e_mail_local.
    END.
    END.
    END.
    FOR EACH tt-email NO-LOCK.
    assign c-contatos = c-contatos + tt-email.e-mail + ",".
    END.
    END PROCEDURE.

    PROCEDURE pi-mail.

    EMPTY TEMP-TABLE tt-erros.
    RUN utp/utapi019.p PERSISTENT SET h-utapi019.
    CREATE tt-envio2.
    ASSIGN tt-envio2.versao-integracao = 1
    tt-envio2.servidor = ip_servidor_e-mail
    tt-envio2.porta = porta_servidor_e-mail
    tt-envio2.destino = c-contatos
    tt-envio2.remetente = "remetente@remetente.com.br"
    tt-envio2.assunto = "Resumo produção diário"
    tt-envio2.arq-anexo = c-arq-salva
    tt-envio2.formato = "HTML".
    CREATE tt-mensagem.
    ASSIGN tt-mensagem.seq-mensagem = 1
    tt-mensagem.mensagem = "" /*"<h1><center>Prezados validar e-mail </n> </pre>
    <h1><center>Este e-mail foi enviado de FORMA automatica favor validar </n> </pre>
    <h1><center> Automação </n> </pre>
    "*/.
    CREATE tt-mensagem.
    ASSIGN tt-mensagem.seq-mensagem = 2
    tt-mensagem.mensagem = "<b> Prezados(as),<br/><br/>
    Segue anexo arquivo produção diária.<br/><br/>
    Este e-mail foi enviado de forma automática (favor não responder).<br/><br/>
    Atenciosamente, <br/><br/>
    Depto. TI <br/><br/>
    CANPACK GROUP.
    </b>".

    /*
    CREATE tt-paramEmail.
    ASSIGN tt-paramEmail.caminhoEmail = 1.
    */
    CREATE tt-paramEmail2.
    ASSIGN tt-paramEmail2.caminhoEmail = 1.

    OUTPUT to value(SESSION:TEMP-DIRECTORY + "envemail.txt").

    /*
    RUN pi-execute3 IN h-utapi019 (INPUT table tt-envio2,
    INPUT table tt-mensagem,
    INPUT TABLE tt-paramEmail,
    OUTPUT table tt-erros).
    */

    RUN pi-execute4 in h-utapi019(INPUT TABLE tt-envio2,
    INPUT TABLE tt-mensagem,
    INPUT TABLE tt-paramEmail2,
    INPUT TABLE ttAttachment,
    OUTPUT TABLE tt-erros).
    OUTPUT close.
    IF RETURN-VALUE = "NOK" THEN DO:
    FOR EACH tt-erros:
    DISP tt-erros WITH 1 COLUMN WIDTH 300.
    END.
    END.
    DELETE PROCEDURE h-utapi019.

    END PROCEDURE.
  3. rodolfo.rcs

    rodolfo.rcs Membro Participativo

Compartilhe esta Página