[RESOLVIDO] Geração de TAG de lotes (med) no XML

Discussão em 'EMS , HCM e Totvs 11' iniciado por cardosomauricio, Julho 24, 2012.

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

    cardosomauricio Sem Pontuação

    Pessoal,

    Devido necessidade de gerar no XML a TAG de lote (med), verifiquei que a temp-table ttMed não possuia registro, mesmo informando os lotes na emissão da nota fiscal (tabela fat-ser-lote).

    Consegui carregar a temp-table ttMed, través de EPC na transação AXSEP017, porém, ao gerar o XML referida TAG não é criada.

    Gostaria de saber se alguém teve a mesma necessidade e conseguiu que referida TAG fosse gerada no XML.

    Alterações em TAG´s que já são geradas no XML (exemplo: det), funciona.
  2. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

  3. cardosomauricio

    cardosomauricio Sem Pontuação

    Segue abaixo EPC criada da transação AXSEP017.

    Os testes foram executados através da transação FT4003, onde é emitida uma nota por vez, e está com MESSAGE para comprovar que os dados doram gravados na temp-table:

    /*****************************************************************************************************

    Programa........: upaxsep017.p

    Objetivo........: EPC para manipular informações impressas no XML - Envio NF-e

    *****************************************************************************************************/

    {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-campo as widget-handle no-undo.

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

    DEFINE NEW GLOBAL SHARED VAR rw-nota-fiscal-xml AS ROWID NO-UNDO.


    if p-ind-event = "AtualizaDadosNFe":U then do:

    for each tt-epc no-lock
    where tt-epc.cod-event = p-ind-event
    and tt-epc.cod-parameter = "ttDet":U: /***** Informacoes Itens da NF *****/

    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().

    h-query:get-first() no-error.

    DO WHILE NOT h-query:QUERY-OFF-END:

    /* exemplo de leitura da tabele it-nota-fisc a partir do buffer ttdet */

    assign h-cod-estabel = hquerybuffer:buffer-field('CodEstabelNF') no-error.
    assign h-serie = hquerybuffer:buffer-field('SerieNF') no-error.
    assign h-nr-nota-fis = hquerybuffer:buffer-field('NrNotaFisNF') no-error.

    find nota-fiscal no-lock
    where nota-fiscal.cod-estabel = h-cod-estabel :buffer-value
    and nota-fiscal.serie = h-serie :buffer-value
    and nota-fiscal.nr-nota-fis = h-nr-nota-fis :buffer-value no-error.

    IF AVAIL nota-fiscal THEN
    ASSIGN rw-nota-fiscal-xml = ROWID(nota-fiscal).
    ELSE
    ASSIGN rw-nota-fiscal-xml = ?.

    h-query:get-next() no-error.

    end.

    end.

    end.

    FOR EACH tt-epc no-lock
    WHERE tt-epc.cod-event = p-ind-event
    AND tt-epc.cod-parameter = "ttMed":U: /***** Informacoes de lotes dos Itens da NF *****/

    ASSIGN h-ttTrab = WIDGET-HANDLE(tt-epc.val-parameter)
    hquerybuffer = h-ttTrab:DEFAULT-BUFFER-HANDLE.

    if VALID-HANDLE(hquerybuffer) THEN DO:

    FIND nota-fiscal NO-LOCK
    WHERE ROWID(nota-fiscal) = rw-nota-fiscal-xml NO-ERROR.

    IF AVAIL nota-fiscal THEN
    FOR EACH it-nota-fisc OF nota-fiscal NO-LOCK,
    EACH item NO-LOCK
    WHERE item.it-codigo = it-nota-fisc.it-codigo
    AND item.tipo-con-est = 3,
    EACH fat-ser-lote OF it-nota-fisc NO-LOCK:

    hquerybuffer:BUFFER-CREATE().

    ASSIGN h-campo = hquerybuffer:BUFFER-FIELD('CodEstabelNF') NO-ERROR.
    ASSIGN h-campo:BUFFER-VALUE = it-nota-fisc.cod-estabel.

    ASSIGN h-campo = hquerybuffer:BUFFER-FIELD('SerieNF') NO-ERROR.
    ASSIGN h-campo:BUFFER-VALUE = it-nota-fisc.serie.

    ASSIGN h-campo = hquerybuffer:BUFFER-FIELD('NrNotaFisNF') NO-ERROR.
    ASSIGN h-campo:BUFFER-VALUE = it-nota-fisc.nr-nota-fis.

    ASSIGN h-campo = hquerybuffer:BUFFER-FIELD('ItCodigoNF') NO-ERROR.
    ASSIGN h-campo:BUFFER-VALUE = it-nota-fisc.it-codigo.

    ASSIGN h-campo = hquerybuffer:BUFFER-FIELD('NrSeqFatNF') NO-ERROR.
    ASSIGN h-campo:BUFFER-VALUE = STRING(it-nota-fisc.nr-seq-fat).

    ASSIGN h-campo = hquerybuffer:BUFFER-FIELD('nLote') NO-ERROR.
    ASSIGN h-campo:BUFFER-VALUE = fat-ser-lote.nr-serlote.

    ASSIGN h-campo = hquerybuffer:BUFFER-FIELD('qLote') NO-ERROR.
    ASSIGN h-campo:BUFFER-VALUE = STRING(fat-ser-lote.qt-baixada[1]).

    ASSIGN h-campo = hquerybuffer:BUFFER-FIELD('dFab') NO-ERROR.
    ASSIGN h-campo:BUFFER-VALUE = "01/01/2012".

    FIND FIRST saldo-estoq NO-LOCK
    WHERE saldo-estoq.cod-estabel = nota-fiscal.cod-estabel
    AND saldo-estoq.it-codigo = it-nota-fisc.it-codigo
    AND saldo-estoq.cod-depos = fat-ser-lote.cod-depos
    AND saldo-estoq.lote = fat-ser-lote.nr-serlote NO-ERROR.

    IF AVAIL saldo-estoq THEN DO:
    ASSIGN h-campo = hquerybuffer:BUFFER-FIELD('dVal') NO-ERROR.
    ASSIGN h-campo:BUFFER-VALUE = STRING(saldo-estoq.dt-vali-lote,"99/99/9999").
    END.

    END.

    ASSIGN rw-nota-fiscal-xml = ?.

    end.

    create query h-query.

    h-query:set-buffers(hquerybuffer).
    h-query:query-prepare('for each ' + h-ttTrab:name + ' no-lock').
    h-query:query-open().

    h-query:get-first() no-error.

    DO WHILE NOT h-query:QUERY-OFF-END:

    MESSAGE
    "Est " hquerybuffer:buffer-field('CodEstabelNF'):buffer-value skip
    "Ser " hquerybuffer:buffer-field('SerieNF'):buffer-value skip
    "NF " hquerybuffer:buffer-field('NrNotaFisNF'):buffer-value skip
    "It " hquerybuffer:buffer-field('ItCodigoNF'):buffer-value skip
    "Seq " hquerybuffer:buffer-field('NrSeqFatNF'):buffer-value skip
    "Lot " hquerybuffer:buffer-field('nLote'):buffer-value skip
    "Qt " hquerybuffer:buffer-field('qLote'):buffer-value skip
    "Fab " hquerybuffer:buffer-field('dFab'):buffer-value skip
    "Val " hquerybuffer:buffer-field('dVal'):buffer-value skip
    view-as alert-box.

    h-query:get-next() no-error.

    end.


    end.

    end.

    return "ok":u.
  4. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Faça um teste ai, insira o código abaixo e veja se funciona:

    Código:
    
    ASSIGN h-campo = hquerybuffer:BUFFER-FIELD('vPMC') NO-ERROR.
    ASSIGN h-campo:BUFFER-VALUE = 0.
    
    
    Outro detalhe, se não existir registro no saldo de estoque, dá um assign no dVal = 12/31/9999, os campos dFab, dVal, nLote, qLote e vPMC não podem conter valor igual a "?" que é o inicial.
  5. cardosomauricio

    cardosomauricio Sem Pontuação

    Eduardo,

    Funcionou, não sabia que tinha que informar todos os campos.

    Valeu pela informação.

    Abraços.
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página