Duvida Customizar UF origem do combustivel - BODI317ef

Discussão em 'EMS , HCM e Totvs 11' iniciado por Heber Fomin, Outubro 31, 2023.

  1. Heber Fomin

    Heber Fomin Sem Pontuação

    Prezados,
    Alguém já fez customização na BODI317ef? Eu preciso fornecer as seguintes informações no exato momento em que a nota ganha o número de nota fiscal e vai gravar um item, que no caso é combustível.
    Segundo o que a TOTVS me passou, o trecho do programa de cálculo vai executar essa rotina, pegando os dados da tabela item-nf-adc.
    Esses dados atualmente são alimentados pelo programa FT4035, só que tem que ser alimentado Nota-a-nota.

    /* Trecho do programa de calculo que pega informações do FT4035 */
    FOR EACH item-nf-adc NO-LOCK
    WHERE item-nf-adc.cod-estab = it-nota-fisc.cod-estabel
    AND item-nf-adc.cod-serie = it-nota-fisc.serie
    AND item-nf-adc.cod-nota-fisc = it-nota-fisc.nr-nota-fis
    AND item-nf-adc.cdn-emitente = nota-fiscal.cod-emitente
    AND item-nf-adc.cod-natur-operac = it-nota-fisc.nat-operacao
    AND item-nf-adc.idi-tip-dado = 37
    AND item-nf-adc.num-seq-item-nf = it-nota-fisc.nf-seq-fat
    AND item-nf-adc.cod-item. = it-nota-fisc.it-codigo:
    FOR FIRST bf-unid-feder
    WHERE bf-unid-feder.pais = "BRASIL"
    AND bf-unid-feder.estado = item-nf-adc.cod-livre-1:
    END.
    CREATE ttOrigComb.
    ASSIGN ttOrigComb.indImport = STRING(item-nf-adc.num-livre-1)
    ttOrigComb.cUFOrig. = bf-unid-feder.cod-uf-ibge when bf-unid-feder
    ttOrigComb.pOrig = DEC(item-nf-adc.val-livre-1).
    ASSIGN ttOrigComb.CodEstabelNF = item-nf-adc.cod-estab
    ttOrigComb.SerieNF. = item-nf-adc.cod-serie
    ttOrigComb.NfNotaFisNF = item-nf-adc.cod-nota-fisc
    ttOrigComb.ItCodigNF. = item-nf-adc.cod-item
    ttOrigComb.NrSeqFatNF. = item-nf-adc.num-seq-item-nf.
    END.
    /* ============================*/

    Eu pretendo "forçar" 100% para a proporção e "SP" para a UF de origem.

    Segundo a TOTVS, poderia fazer uma customização na BODI317ef para fazer com que os dados fossem alimentados nessa item-nf-adc, logo após a nota ganhar um numero de nota, acredito ser, no momento em que vai gravar na tabela Nota-fiscal.

    Como nunca mexi em BODI, algum de vocês poderia me dar uma ajuda?

    Agradeço antecipadamente.
  2. lcpaulino

    lcpaulino Membro Participativo

    Boa tarde, segue abaixo um exemplo de UPC na bodi317ef: tem uma chamada de procedure "RUN pi-trata-mensagem.", basta colocar a sua lógica naquele ponto, ou, como no exemplo criar uma procedure e colocar a lógica lá... o importante é que neste ponto todas as regras de negócio do Datasul já foram feitas e você tem acesso a tabela nota-fiscal (podendo alterar esta ou outra a partir desta) e aqui ainda não foi gerado xml (axsep037) e nem foi enviado para autorização, ou seja, um bom ponto para fazer "acertos/adaptações/gambiarras" após as lógicas oficiais do Datasul, outra coisa que é importante saber é que depois desse ponto ainda tem o (axsep037) que trata das lógicas de construção do XML, então, a depender da situação você vai ter que apelar para uma upc no (axsep037) e adaptar o xml gerado.


    /*******************************************************************************
    *** UPC DE tratamento Nota Fiscal
    ********************************************************************************/
    {utp/ut-glob.i}
    {include/i-epc200.i bodi317ef}
    /* Include com definicao da temp-table RowErros */
    DEFINE TEMP-TABLE RowErros NO-UNDO
    FIELD errorSequence AS INTEGER
    FIELD errorNumber AS INTEGER
    FIELD errorDescription AS CHARACTER
    FIELD errorParameters AS CHARACTER
    FIELD errorType AS CHARACTER
    FIELD errorHelp AS CHARACTER
    FIELD errorsubtype AS CHARACTER.
    /* Integracao Modulo de Importacao */
    DEFINE TEMP-TABLE RowObject NO-UNDO LIKE ped-item
    FIELD r-rowid AS ROWID.
    DEF INPUT PARAM p-ind-event AS CHAR NO-UNDO.
    DEF INPUT-OUTPUT PARAM TABLE FOR tt-epc.
    IF p-ind-event = "EndEfetivaNota" THEN DO:
    FOR EACH tt-epc:

    if tt-epc.cod-event = "EndEfetivaNota" and
    tt-epc.cod-parameter = "ROWID(nota-fiscal)" then do:

    find nota-fiscal
    where rowid(nota-fiscal) = to-rowid(tt-epc.val-parameter) exclusive-lock no-error.

    if avail nota-fiscal then do:

    IF CAN-FIND(FIRST ser-estab WHERE
    ser-estab.cod-estabel = nota-fiscal.cod-estabel AND
    ser-estab.serie = nota-fiscal.serie AND
    &IF "{&bf_dis_versao_ems}":U >= "2.07":U &THEN
    ser-estab.log-nf-eletro = YES
    &ELSE
    ser-estab.log-nf-eletro = yes
    &ENDIF
    ) THEN DO:
    RUN pi-trata-mensagem.

    END.
    END.
    END.
    END.
    END.

    /***************** PROCEDURES******************/
    PROCEDURE pi-trata-mensagem:
    /* lógica para para alterar o campo: nota-fiscal.observ-nota*/

    END PROCEDURE.
  3. Heber Fomin

    Heber Fomin Sem Pontuação

    Eu vou tentar fazer deste modo.
    Muito obrigado.

Compartilhe esta Página