[RESOLVIDO] EXEMPLO UPC AXSEP017

Discussão em 'EMS , HCM e Totvs 11' iniciado por alx_amorim, Março 17, 2011.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. alx_amorim

    alx_amorim Membro Participativo

    Boa tarde pessoal, to precisando de um exemplo de uma upc para o AXSEP017 pois preciso alterar algumas situaçoes no txt que o EMS gera para NFE 2.0, alguem consegue me passar um exemplo destes? se tiverem também as includes com as temp tables ajuda muito.

    Valeu.
    Alexandre Amorim
    Progress Analista - Penápolis - SP
  2. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Segue um exemplo da AXSEP006, para AXSEP017 é só copiar e alterar as chamadas internas para AXSEP017 (claro, copiar as rotinas axsep006*.* em anexo para axsep017*.*, exceto as includes).

    Se estas includes estiverem desatualizadas, pode solicitar a Totvs.

    Arquivos Anexados:

  3. Rogerio

    Rogerio Moderator Moderador Equipe de Suporte

    Eduardo essa UPC tambem serve para a rotina AXSEP001????
  4. rafaelrubin

    rafaelrubin Sem Pontuação

    Pessoal,

    Para alteração de registros funcionará de forma perfeita, mas tenho um caso em que preciso vincular o código ANTT do veículo da Transportadora. Sei que tenho que usar as temp-tables ttVeic e ttReboque, porém não consegui um exemplo de como criar um registro nessas temp-tables e enviar ao programa, via UPC. Alguém já passou por isso?
  5. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Rogério,

    A poucos dias fiz uma UPC que deletava um registro de uma tabela temporária passada por EPC e funcionou.

    Acredito que fazendo o mesmo, só que dando um CREATE na handle da temp-table vá funcionar. Segue abaixo um código de exemplo (só comecei, não terminei de colocar os demais campos da ttVeic e não testei, mas já serve para vc ter uma ideia e validar, ok?)

    Código:
    /*****************************************************************************************************
    
        Programa........: axsep017-upc.p  
        
        Objetivo........: EPC para manipular informações impressas no XML - Envio NF-e
        
        Versão..........: 22/03/2011 - Eduardo Leite
                              
    *****************************************************************************************************/
    
    {cdp/cdcfgdis.i}
    {include/i-epc200.i1}
    
    def input        param p-ind-event as char no-undo.
    def input-output param table for tt-epc.
        
    define variable h-ttTrab     as widget-handle   no-undo.
    define variable hquerybuffer as widget-handle   no-undo.
    define variable h-query      as widget-handle   no-undo.
    define variable h-cprod      as widget-handle   no-undo.
    define variable h-campo      as widget-handle   no-undo.
    
    /**********************************************************************************************************/
    
    def new global shared var v_cod_usuar_corren as character no-undo.
    
    /***** Atualiza dados da nfe - Inserir informações das tags customizadas *****/
    if p-ind-event = "AtualizaDadosNFe":u then do:
    
        /***** Verificando a tabela de detalhes para informar as tag's de InfAdprod *****/
        for each tt-epc no-lock
           where tt-epc.cod-event     = p-ind-event
             and tt-epc.cod-parameter = "ttVeic":u     /***** Informações Veiculos           *****/:
    
            assign h-ttTrab     = widget-handle(tt-epc.val-parameter)
                   hquerybuffer = h-ttTrab:default-buffer-handle.
    
            if  valid-handle(hquerybuffer) then do:
    
                create query h-query.
    
                h-query:set-buffers(hquerybuffer).
                h-query:query-prepare('for each ' + h-ttTrab:name + ' no-lock').
                h-query:query-open().
    
                if h-ttTrab:default-buffer-handle:buffer-create then.
    
                assign h-campo              = hquerybuffer:buffer-field('anoFab':U)
                       h-campo:buffer-value = "1997"
                       h-campo              = hquerybuffer:buffer-field('anoMod':U)
                       h-campo:buffer-value = "1998". 
    
            end.
                        
        end.
    
    end.
    
    return "ok":u.
    
    thiagobhte curtiu isso.
  6. rafaelrubin

    rafaelrubin Sem Pontuação

    Eduardo, obrigado!

    Era isso mesmo que precisava. Acabei fazendo de outro jeito antes de ver a resposta (o resultado foi o mesmo). Segue abaixo:


    {cdp/cdcfgdis.i}
    {include/i-epc200.i1}

    DEF INPUT PARAM p-ind-event AS CHAR NO-UNDO.
    DEF INPUT-OUTPUT PARAM TABLE FOR tt-epc.

    def var h-ttIde as widget-handle no-undo.
    def var h-ttReboque as widget-handle no-undo.
    def var h-ttTransp as widget-handle no-undo.
    def var h-ttVol as widget-handle no-undo.
    def var h-ttLacres as widget-handle no-undo.
    def var hQueryBuffer as widget-handle no-undo.
    def var hQueryAux as widget-handle no-undo.
    def var h-query as widget-handle no-undo.
    def var h-campo as widget-handle no-undo.

    def var h-cod-estabel as widget-handle no-undo.
    def var h-serie as widget-handle no-undo.
    def var h-nr-nota-fis as widget-handle no-undo.

    def buffer b-epc for tt-epc.

    /*CHAVE DA NFE*/
    def var c-estab as char no-undo.
    def var c-serie as char no-undo.
    def var c-nf as char no-undo.
    def var c-placa as char no-undo.
    def var c-placa-aux as char no-undo.
    def var c-lacre as char no-undo.
    def var c-vol as char no-undo.

    /*ATUALIZA DADOS DA TRANSPORTADORA - PLACA + CÓDIGO ANTT*/
    FOR each tt-epc NO-LOCK
    WHERE tt-epc.cod-event = "AtualizaDadosNFe":U
    AND tt-epc.cod-parameter = "ttTransp":U :

    ASSIGN h-ttTransp = widget-handle(tt-epc.val-parameter)
    hQueryBuffer = h-ttTransp:DEFAULT-BUFFER-HANDLE.

    assign c-estab = ''
    c-serie = ''
    c-nf = ''.

    IF VALID-HANDLE(hQueryBuffer) THEN DO:

    CREATE QUERY h-query.
    h-query:SET-BUFFERS(hQueryBuffer).
    h-query:QUERY-PREPARE('for each ' + h-ttTransp:NAME + ' no-lock').
    h-query:QUERY-OPEN().

    REPEAT ON ERROR UNDO, LEAVE:

    h-query:GET-NEXT() NO-ERROR.
    IF h-query:QUERY-OFF-END THEN LEAVE.

    assign c-estab = hQueryBuffer:BUFFER-FIELD('CodEstabelNF'):buffer-value NO-ERROR.
    assign c-serie = hQueryBuffer:BUFFER-FIELD('SerieNF'):buffer-value NO-ERROR.
    assign c-nf = hQueryBuffer:BUFFER-FIELD('NrNotaFisNF'):buffer-value NO-ERROR.

    /*ATUALIZA O CÓDIGO ANTT DA TRANSPORTADORA*/
    find first nota-fiscal no-lock
    where nota-fiscal.cod-estabel = c-estab
    and nota-fiscal.serie = c-serie
    and nota-fiscal.nr-nota-fis = c-nf no-error.
    if avail nota-fiscal then do:
    find first transporte no-lock
    where transporte.nome-abrev = nota-fiscal.nome-transp no-error.
    if avail transporte then do:
    find first veiculos no-lock
    where veiculos.cod-transp = transporte.cod-transp
    and veiculos.placa = nota-fiscal.placa no-error.
    hQueryBuffer:BUFFER-FIELD('RNTC'):buffer-value = (if avail veiculos then veiculos.antt else '').
    end.
    else
    hQueryBuffer:BUFFER-FIELD('RNTC'):buffer-value = ''.
    end.
    END.
    END.
    end.

    /*DADOS DO REBOQUE*/
    FOR each tt-epc NO-LOCK
    WHERE tt-epc.cod-event = "AtualizaDadosNFe":U
    AND tt-epc.cod-parameter = "ttReboque":U :

    /*BUSCA A CHAVE DA NFE*/
    run pi_busca_nfe(output c-estab,
    output c-serie,
    output c-nf).

    ASSIGN h-ttReboque = widget-handle(tt-epc.val-parameter)
    hQueryBuffer = h-ttReboque:DEFAULT-BUFFER-HANDLE.

    IF VALID-HANDLE(hQueryBuffer) THEN DO:

    /*BUSCA NF*/
    find first nota-fiscal no-lock
    where nota-fiscal.cod-estabel = c-estab
    and nota-fiscal.serie = c-serie
    and nota-fiscal.nr-nota-fis = c-nf no-error.
    if avail nota-fiscal then do:

    find first transporte no-lock
    where transporte.nome-abrev = nota-fiscal.nome-transp no-error.
    if avail transporte then do:

    assign c-placa = ""
    c-placa-aux = "".

    find first mgesp.ext-nota-fiscal of nota-fiscal no-lock no-error.

    if nota-fiscal.nr-embarque > 0 then do:
    find first ext-embarque no-lock
    where ext-embarque.nr-embarque = nota-fiscal.nr-embarque no-error.
    if avail ext-embarque then do:
    IF ext-embarque.placa = nota-fiscal.placa THEN
    assign c-placa = ext-embarque.placa-aux
    c-placa-aux = "".
    ELSE
    assign c-placa = ext-embarque.placa
    c-placa-aux = ext-embarque.placa-aux.
    end.
    if c-placa = "" then do:
    if avail mgesp.ext-nota-fiscal then do:
    assign c-placa = mgesp.ext-nota-fiscal.placa
    c-placa-aux = mgesp.ext-nota-fiscal.placa-aux.
    end.
    end.
    end.
    else do:
    if avail mgesp.ext-nota-fiscal then do:
    assign c-placa = mgesp.ext-nota-fiscal.placa
    c-placa-aux = mgesp.ext-nota-fiscal.placa-aux.
    end.
    end.

    if c-placa <> "" and
    c-placa <> ? then do:
    IF SUBSTR(c-placa,1,4) = "-" THEN DO:
    find first veiculos no-lock
    where veiculos.cod-transp = transporte.cod-transp
    and veiculos.placa = substr(c-placa,1,3) + substr(c-placa,5,4) no-error.
    if avail veiculos then do: /*CRIA REGISTRO*/
    hQueryBuffer:buffer-create().
    hQueryBuffer:buffer-field('placa'):buffer-value = caps(substr(c-placa,1,3) + substr(c-placa,5,4)).
    hQueryBuffer:buffer-field('RNTC'):buffer-value = veiculos.antt.
    hQueryBuffer:buffer-field('UF'):buffer-value = caps(veiculos.estado).
    hQueryBuffer:buffer-field('CodEstabelNF'):buffer-value = c-estab.
    hQueryBuffer:buffer-field('SerieNF'):buffer-value = c-serie.
    hQueryBuffer:buffer-field('NrNotaFisNF'):buffer-value = c-nf.
    end.
    end.
    else do:
    find FIRST veiculos no-lock
    where veiculos.cod-transp = transporte.cod-transp
    and veiculos.placa = c-placa no-error.
    if avail veiculos then do:
    hQueryBuffer:buffer-create().
    hQueryBuffer:buffer-field('placa'):buffer-value = caps(c-placa).
    hQueryBuffer:buffer-field('RNTC'):buffer-value = veiculos.antt.
    hQueryBuffer:buffer-field('UF'):buffer-value = caps(veiculos.estado).
    hQueryBuffer:buffer-field('CodEstabelNF'):buffer-value = c-estab.
    hQueryBuffer:buffer-field('SerieNF'):buffer-value = c-serie.
    hQueryBuffer:buffer-field('NrNotaFisNF'):buffer-value = c-nf.
    end.
    END.

    end.

    if c-placa-aux <> "" and
    c-placa-aux <> ? then do:

    IF SUBSTR(c-placa-aux,1,4) = "-" THEN DO:
    find first veiculos no-lock
    where veiculos.cod-transp = transporte.cod-transp
    and veiculos.placa = substr(c-placa-aux,1,3) + substr(c-placa-aux,5,4) no-error.
    if avail veiculos then do:
    hQueryBuffer:buffer-create().
    hQueryBuffer:buffer-field('placa'):buffer-value = caps(substr(c-placa-aux,1,3) + substr(c-placa-aux,5,4)).
    hQueryBuffer:buffer-field('RNTC'):buffer-value = veiculos.antt.
    hQueryBuffer:buffer-field('UF'):buffer-value = caps(veiculos.estado).
    hQueryBuffer:buffer-field('CodEstabelNF'):buffer-value = c-estab.
    hQueryBuffer:buffer-field('SerieNF'):buffer-value = c-serie.
    hQueryBuffer:buffer-field('NrNotaFisNF'):buffer-value = c-nf.
    end.
    end.
    else do:
    find first veiculos no-lock
    where veiculos.cod-transp = transporte.cod-transp
    and veiculos.placa = c-placa-aux no-error.
    if avail veiculos then do:
    hQueryBuffer:buffer-create().
    hQueryBuffer:buffer-field('placa'):buffer-value = caps(c-placa-aux).
    hQueryBuffer:buffer-field('RNTC'):buffer-value = veiculos.antt.
    hQueryBuffer:buffer-field('UF'):buffer-value = caps(veiculos.estado).
    hQueryBuffer:buffer-field('CodEstabelNF'):buffer-value = c-estab.
    hQueryBuffer:buffer-field('SerieNF'):buffer-value = c-serie.
    hQueryBuffer:buffer-field('NrNotaFisNF'):buffer-value = c-nf.
    end.
    end.
    end.

    end.

    end.

    END.

    end.

    /*VINCULA LACRE x VOLUME*/
    /*ATUALIZA DADOS DA TRANSPORTADORA - PLACA + CÓDIGO ANTT*/
    FOR each tt-epc NO-LOCK
    WHERE tt-epc.cod-event = "AtualizaDadosNFe":U
    AND tt-epc.cod-parameter = "ttVol":U :

    ASSIGN h-ttVol = widget-handle(tt-epc.val-parameter)
    hQueryBuffer = h-ttVol:DEFAULT-BUFFER-HANDLE.

    assign c-estab = ''
    c-serie = ''
    c-nf = ''.

    IF VALID-HANDLE(hQueryBuffer) THEN DO:

    CREATE QUERY h-query.
    h-query:SET-BUFFERS(hQueryBuffer).
    h-query:QUERY-PREPARE('for each ' + h-ttVol:NAME + ' no-lock').
    h-query:QUERY-OPEN().

    REPEAT ON ERROR UNDO, LEAVE:

    h-query:GET-NEXT() NO-ERROR.
    IF h-query:QUERY-OFF-END THEN LEAVE.

    assign c-estab = hQueryBuffer:BUFFER-FIELD('CodEstabelNF'):buffer-value NO-ERROR.
    assign c-serie = hQueryBuffer:BUFFER-FIELD('SerieNF'):buffer-value NO-ERROR.
    assign c-nf = hQueryBuffer:BUFFER-FIELD('NrNotaFisNF'):buffer-value NO-ERROR.

    /*BUSCA LACRE*/
    /*BUSCA NF*/
    find first nota-fiscal no-lock
    where nota-fiscal.cod-estabel = c-estab
    and nota-fiscal.serie = c-serie
    and nota-fiscal.nr-nota-fis = c-nf no-error.
    if avail nota-fiscal then do:

    assign c-lacre = ''.

    find first transporte no-lock
    where transporte.nome-abrev = nota-fiscal.nome-transp no-error.
    if avail transporte then do:
    find first mgesp.ext-nota-fiscal of nota-fiscal no-lock no-error.
    if nota-fiscal.nr-embarque > 0 then do:
    find first ext-embarque no-lock
    where ext-embarque.nr-embarque = nota-fiscal.nr-embarque no-error.
    if avail ext-embarque then do:
    IF ext-embarque.placa = nota-fiscal.placa THEN
    assign c-lacre = ext-embarque.lacre.
    ELSE
    assign c-lacre = ext-embarque.lacre.
    end.
    if c-placa = "" then do:
    if avail mgesp.ext-nota-fiscal then do:
    assign c-lacre = mgesp.ext-nota-fiscal.lacre.
    end.
    end.
    end.
    else do:
    if avail mgesp.ext-nota-fiscal then do:
    assign c-lacre = mgesp.ext-nota-fiscal.lacre.
    end.
    end.
    end.

    /*BUSCA O BUFFER DA TABELA DE LACRES*/
    assign c-vol = ''.
    assign c-vol = hQueryBuffer:buffer-field('nVol'):buffer-value no-error.

    find first b-epc no-lock
    where b-epc.cod-event = "AtualizaDadosNFe":U
    and b-epc.cod-parameter = "ttLacres":U no-error.
    if avail b-epc then do:

    assign h-ttLacres = widget-handle(b-epc.val-parameter)
    hQueryAux = h-ttLacres:DEFAULT-BUFFER-HANDLE.

    IF VALID-HANDLE(hQueryAux) THEN DO:

    hQueryAux:buffer-create().
    hQueryAux:buffer-field('nLacre'):buffer-value = c-lacre.
    hQueryAux:buffer-field('nVol'):buffer-value = c-vol.
    hQueryAux:buffer-field('CodEstabelNF'):buffer-value = c-estab.
    hQueryAux:buffer-field('SerieNF'):buffer-value = c-serie.
    hQueryAux:buffer-field('NrNotaFisNF'):buffer-value = c-nf.

    end.

    end.

    end.
    /*FIM BUSCA LACRE*/

    leave.
    END.
    END.
    end.

    return "OK":U.

    procedure pi_busca_nfe. /*BUSCA A CHAVE DA NFE*/

    def output param c-estab as char no-undo.
    def output param c-serie as char no-undo.
    def output param c-nf as char no-undo.

    find first b-epc no-lock
    where b-epc.cod-event = "AtualizaDadosNFe":U
    and b-epc.cod-parameter = "ttIde":U no-error.
    if not avail b-epc then return 'OK':u.

    assign h-ttIde = widget-handle(b-epc.val-parameter)
    hQueryBuffer = h-ttIde:default-buffer-handle.

    if not valid-handle(hQueryBuffer) then return 'OK':u.

    CREATE QUERY h-query.
    h-query:SET-BUFFERS(hQueryBuffer).
    h-query:QUERY-PREPARE('for each ' + h-ttIde:NAME + ' no-lock').
    h-query:QUERY-OPEN().

    REPEAT ON ERROR UNDO, LEAVE:

    h-query:GET-NEXT() NO-ERROR.
    IF h-query:QUERY-OFF-END THEN LEAVE.

    assign c-estab = hQueryBuffer:BUFFER-FIELD('CodEstabelNF'):buffer-value NO-ERROR.
    assign c-serie = hQueryBuffer:BUFFER-FIELD('SerieNF'):buffer-value NO-ERROR.
    assign c-nf = hQueryBuffer:BUFFER-FIELD('NrNotaFisNF'):buffer-value NO-ERROR.

    leave.

    end.

    return 'OK':u.

    end procedure.
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página