Árvore de páginas

Produto:

Datasul

Ocorrência:

Informações sobre a função Portador Financeiro do Emitente

Passo a passo:

A partir do release TOTVS 12.1.12 do Produto Datasul está liberada a função Portador Financeiro do Emitente, que permite a utilização do Portador do Cliente ou Fornecedor Financeiro no lugar do Portador do Cliente ou Fornecedor do Industrial nos módulos do Industrial.

Todas as informações sobre a nova função estão descritas nesta base de conhecimento:


  • Qual situação originou a disponibilização da nova função?

    O cadastro de Cliente e Fornecedor do Industrial (emitente) não é por empresa e por isso não é possível diferenciar o Portador, ou seja, os módulos do industrial que utilizam a informação do Portador do Cliente ou Fornecedor, utilizam a mesma informação independente da empresa logada ou da empresa do movimento. Já o cadastro de Cliente e Fornecedor do Financeiro é por empresa e é possível diferenciar o Portador. 
    Em algumas situações, os módulos do Industrial necessitam utilizar a informação do Portador do Cliente ou Fornecedor de forma diferenciado por empresa e não era possível, a menos que antes de cada movimentação, a informação no cadastro fosse alterada.
    Para solucionar o problema foi criada esta função. Ao ativá-la, os módulos do industrial que necessitam utilizar o Portador do Cliente ou Fornecedor, passam a utilizar a informação do Cliente ou Fornecedor equivalentes do Financeiro da empresa logada ou da empresa do movimento. Caso no Financeiro, o Portador seja diferenciado por empresa, os módulos passaram a utilizar a informação diferenciada.


  • Devo ativar a função?

    Caso seja necessário diferenciar o Portador do Cliente ou Fornecedor por empresa nos módulos do industrial que utilizam a informação, é necessário ativar esta função, do contrário, continuarão a utilizar a informação do Portador do Cliente ou Fornecedor do Industrial (emitente).


  • Como ativar a função?

    A função está disponível em "Parâmetros Funções do Produto" (hub.ViewParamFncProdut):

    1. Selecione a função Portador Financeiro do Emitente;
    2. Leia atentamente a Descrição da Função e esta Base de Conhecimento (FAQ);
    3. Marque a opção: "Li e Concordo com a FAQ";
    4. Clique no botão de seta para adição da função disponível para função ativa.

  1. Será exibida uma mensagem de sucesso:

Atenção

Somente será possível ativar esta função, caso os parâmetros de integração: Fornecedores 2.00 e Clientes 2.00 estejam ativos em Parâmetros Integração Datasul-EMS (fnc_param_integr_ems), pois indicam que há integração entre os cadastros de Cliente e Fornecedor do Industrial com o Financeiro.

 

  • Posso desligar a função a qualquer momento?

    Sim, está função pode ser ativada ou desligada a qualquer momento.


  • Quais mudanças ocorrerão no sistema com a função ativa?

    1. Manutenção Fornecedores (cd0401)

      Na aba "Financ", ao lado do campo Portador e Modalidade aparecerá um botão de Zoom (Portador Financeiro):



      Este botão estará habilitado nas telas: Base e Inclusão, tendo os seguintes tratamentos:

      • Tela Base: irá apresentar os respectivos Portadores do Fornecedor Financeiro de todas as empresas que o mesmo esteja cadastrado:



      • Tela Inclusão: irá apresentar todos os Portadores do Industrial e sua relação com Portador Financeiro caso esteja devidamente cadastrada na Matriz de Tradução de Portador (prgint/dcf/dcf013aa.p) indicada na tradução da empresa corrente na Matriz Tradução Organização Externa (prgint/utb/utb118aa.p) informada no Parâmetro Integração Datasul-EMS (prgint/utb/utb036za.p): Fornecedores 2.00:

      Atenção

      Na alteração, os campos: Portador e Modalidade e o botão de Zoom (Portador Financeiro) permanecerão desabilitados e somente será possível alterar a informação do Portador no Fornecedor Financeiro (prgint/ufn/ufn003aa.p). Caso o Fornecedor seja incluído e ocorra algum erro de integração com o Financeiro, mesmo corrigindo o erro, o Fornecedor Financeiro não será mais criado automaticamente na próxima alteração, pois não será possível informar o Portador. Desta forma, será necessário incluir o Fornecedor Financeiro diretamente no cadastro Fornecedor Financeiro (prgint/ufn/ufn003aa.p). Após a inclusão, ele será atualizado normalmente nas próximas alterações realizadas a partir do Industrial.
    2. Manutenção Clientes (cd0704)

      Na aba "Financeiro", ao lado do campo Portador e Modalidade e ao lado do campo Port Preferencial e Modalidade Preferencial aparecerá um botão de Zoom (Portador Financeiro):


      Estes botões estarão habilitados nas telas: Base e Inclusão, tendo os seguintes tratamentos:

      • Tela Base: irá apresentar os respectivos Portadores do Cliente Financeiro de todas as empresas que o mesmo esteja cadastrado (para o Portador e Portador Preferencial):



      • Tela Inclusão: irá apresentar todos os Portadores do Industrial e sua relação com Portador Financeiro caso esteja devidamente cadastrada na Matriz de Tradução de Portador (prgint/dcf/dcf013aa.p) indicada na tradução da empresa corrente na Matriz Tradução Organização Externa (prgint/utb/utb118aa.p) informada no Parâmetro Integração Datasul-EMS (prgint/utb/utb036za.p): Clientes 2.00:

      Atenção

      Na alteração, os campos: Portador e Modalidade, Portador Preferencial e Modalidade Preferencial e seus respectivos botões de Zoom (Portador Financeiro) permanecerão desabilitados e somente será possível alterar a informação do Portador e Portador Preferencial no Cliente Financeiro (prgint/ufn/ufn011aa.p). Caso o Cliente seja incluído e ocorra algum erro de integração com o Financeiro, mesmo corrigindo o erro, o Cliente Financeiro não será mais criado automaticamente na próxima alteração, pois não será possível informar o Portador. Desta forma, será necessário incluir o Cliente Financeiro diretamente no cadastro Cliente Financeiro (prgint/ufn/ufn011aa.p). Após a inclusão, ele será atualizado normalmente nas próximas alterações realizadas a partir do Industrial.
    3. Programas dos módulos do Industrial que utilizam a informação do Portador do Cliente ou Fornecedor

      Em relação aos programas dos módulos do Industrial que utilizam a informação do Portador ou Portador Preferencial do Cliente (cd0704) e Portador do Fornecedor (cd0401), passaram a utilizar estas informações dos cadastros do Financeiro, respectivamente Cliente Financeiro (prgint/ufn/ufn011aa.p) e Fornecedor Financeiro (prgint/ufn/ufn003aa.p).

      As seguintes regras são utilizadas para identificar as informações do financeiro:

      1. Por meio do código do cliente ou fornecedor do industrial é identificado o respectivo cliente ou fornecedor no financeiro da empresa passada pelo programa do módulo (empresa corrente ou empresa da movimentação);
      2. As informações do financeiro: Portador e Carteira passam pela Matriz de Tradução de Portador (prgint/dcf/dcf013aa.p) indicada na tradução da empresa passada pelo programa do módulo na Matriz Tradução Organização Externa (prgint/utb/utb118aa.p) informada no Parâmetro Integração Datasul-EMS (prgint/utb/utb036za.p): Clientes 2.00 ou Fornecedores 2.00;
      3. O programa do módulo do industrial continua utilizando a informação Portador e Modalidade, porém, não diretamente do cadastro de emitente (cliente ou fornecedor do industrial) e sim, do respectivo Portador e Carteira do Cliente ou Fornecedor do Financeiro da empresa passada pelo programa do módulo;
      4. Qualquer inconsistência que possa existir, por exemplo, não encontre o cliente ou fornecedor no financeiro ou não há tradução para o portador, o programa do módulo utilizará as informações do cadastro de emitente (como é feito quando a função não está ativa);
      A informação do Portador poderá ser diferente por empresa conforme cadastro de Cliente ou Fornecedor do Financeiro.
    4. Relatório Emitente x Portador Financeiro

      Novo relatório que tem como objetivo listar os Portadores Financeiros (Portador do Cliente, Portador Preferencial do Cliente e Portador do Fornecedor) de uma faixa de Emitentes (Clientes e/ou Fornecedores do Industrial) de uma faixa de empresas, com base nos respectivos Clientes e/ou Fornecedores Financeiros.

      Também apresenta inconsistências que podem existir:

      MensagemDescriçãoAjudaDetalhes
      12295Cliente Financeiro não cadastrado para Empresa &1 !O Cliente Financeiro &2, não está cadastrado para a Empresa &1.Situação ocorre quando o respectivo código do emitente não está cadastrado como Cliente Financeiro para uma determinada empresa. Caso seja um emitente utilizado pela empresa, cadastre como Cliente Financeiro.
      10769Fornecedor Financeiro não cadastrado para Empresa &1 !O Fornecedor financeiro &2, não está cadastrado para a Empresa &1.Situação ocorre quando o respectivo código do emitente não está cadastrado como Fornecedor Financeiro para uma determinada empresa. Caso seja um emitente utilizado pela empresa, cadastre como Fornecedor Financeiro.
      9960Portador não informado ! Indica que não há informação para o Portador no cadastro do Cliente ou Fornecedor do Financeiro.
      22200Matriz de Tradução para UO não encontrada !Não foi encontrada a Matriz de Tradução Organizacional &1 ou esta Matriz de Tradução não possui a Unidade Organizacional &2 parametrizada com o tipo &3.Situação ocorre quando a Matriz Tradução Organizacional não está devidamente cadastrada.
      21138Matriz de Tradução de Portador não informada ou inválida !Matriz de Tradução de Portador não informada ou inválida. Informar uma Matriz de Tradução de Portador válida para a Matriz de Tradução Organização Externa &2, Tipo UO &3, UO Ext &4 e Unid Organ &5.Situação ocorre quando não foi informada ou não é válida a Matriz Tradução Portador que deve estar indicada na tradução da empresa na Matriz Tradução Organização Externa.
      22197Tradução do Portador não encontrada !Não foi encontrada Tradução para o Portador: &1, Carteira: &2 na Matriz de Tradução de Portador: &3. Efetue o cadastro na Manutenção Matriz de Tradução de Portador (prgint/dcf/dcf013aa.p).Indica que não existe tradução para o Portador e Carteira na Matriz Tradução Portador.
      22198&1 possui valor inválido !&1 informado na Tradução do Portador: &2, Carteira: &3 na Matriz de Tradução de Portador: &4 não possui um valor do tipo numérico. Não foi possível converter o valor para o tipo adequado. Verifique a tradução na Manutenção Matriz de Tradução de Portador (prgint/dcf/dcf013aa.p).Indica que o valor informado para Portador e Modalidade na Tradução do Portador não é numérico.




  • Desejo que meu programa customizado utilize a técnica do Portador Financeiro do Emitente. Como devo fazer?

    Conteúdo extremamente técnico
    1. Deverá ser definida duas variáveis e uma temp-table para o contexto do programa:
      1. Variável handle para armazenar o programa do HUB que possui a procedure que retorna se uma função está ativa ou não;
      2. Variável lógica para armazenar o estado da função: sim (ativo) e não (inativo);
      3. Temp-table tt_log_erro;
      Exemplo
       
      define variable h-api              as handle  no-undo.
      define variable l-fn-port-emitente as logical no-undo.
      def temp-table tt_log_erro no-undo
          field ttv_num_cod_erro  as integer   format ">>>>,>>9" label "Número"         column-label "Número"
          field ttv_des_msg_ajuda as character format "x(40)"    label "Mensagem Ajuda" column-label "Mensagem Ajuda"
          field ttv_des_msg_erro  as character format "x(60)"    label "Mensagem Erro"  column-label "Inconsistência".
       
    2. Na inicialização do programa (main_code, local-initialize ou outra procedure que é chamada inicialmente ao executar o programa), é necessário persistir o programa do HUB e chamar a procedure que irá retornar para uma variável se a função relacionada ao Portador Financeiro do Emitente está ativa:

      Exemplo
       
      assign l-fn-port-emitente = no.
          if search("hbbo\boParamFuncaoProdut.r") <> ?
          or search("hbbo\boParamFuncaoProdut.p") <> ? then do:
              run hbbo\boParamFuncaoProdut.p persistent set h-api.
              if valid-handle(h-api) then do:
                  if h-api:get-signature('pi_existe_funcao':U) <> "" then
                      run pi_existe_funcao in h-api (input "Portador Financeiro do Emitente":U,
                                                     output l-fn-port-emitente).                             
                  delete procedure h-api.
          end.
      end.
       
    3. Caso em algum ponto do fonte está sendo utilizado diretamente os campos: emitente.portador, emitente.portad-prefer, emitente.portador-ap, emitente.modalidade, emitente.mod-prefer, emitente.modalidade-ap, deverá ser alterado para utilizar variáveis. É necessário definir mais duas variáveis no mesmo ponto do item 1:

      1. Variável inteira que terá o valor do Portador;
      2. Variável inteira que terá o valor da Modalidade;
      Exemplo
       
      define variable i-port-emit    as integer no-undo.
      define variable i-modalid-emit as integer no-undo.
       
      Somente se utilizar diretamente os campos. Caso o valor seja transferido para uma variável e esta que realmente seja utilizada, não é necessário realizar esta etapa.
    4. Em cada ponto do fonte que está sendo utilizado os campos: emitente.portador, emitente.portad-prefer, emitente.portador-ap, emitente.modalidade, emitente.mod-prefer, emitente.modalidade-ap, deverá ter o seguinte tratamento:

      1. Caso a variável que indica o estado da função esteja inativa, deverá continuar utilizando os campos do emitente. Basta atualizar as variáveis diretamente com os valores dos campos;
      2. Caso a variável que indica o estado da função esteja ativa, deverá ser persistido a API de Portador e Carteira e após chamar a procedure pi_busca_dados_portador_fin, que irá retornar os valores de Portador e Modalidade e uma temp-table de erros;

      Exemplo
       
      •   Portador do Cliente:
      run prgint/ufn/ufn008za.py persistent set h-api.
      if valid-handle(h-api) then do:
          run pi_busca_dados_portador_fin in h-api (input "",
                                                    input emitente.portador,
                                                    input emitente.modalidade,
                                                    input emitente.cod-emitente,
                                                    input "Cliente":U,
                                                    input "",
                                                    output i-port-emit,
                                                    output i-modalid-emit,
                                                    output table tt_log_erro).
          delete procedure h-api.
      end.
       
      •   Portador Preferencial do Cliente:
      run prgint/ufn/ufn008za.py persistent set h-api.
      if valid-handle(h-api) then do:
          run pi_busca_dados_portador_fin in h-api (input "",
                                                    input emitente.port-prefer,
                                                    input emitente.mod-prefer,
                                                    input emitente.cod-emitente,
                                                    input "Cliente":U,
                                                    input "Prefer":U,
                                                    output i-port-emit,
                                                    output i-modalid-emit,
                                                    output table tt_log_erro).
          delete procedure h-api.
      end.
       
      •   Portador do Fornecedor:
      run prgint/ufn/ufn008za.py persistent set h-api.
      if valid-handle(h-api) then do:
          run pi_busca_dados_portador_fin in h-api (input "",
                                                    input emitente.portador-ap,
                                                    input emitente.modalidade-ap,
                                                    input emitente.cod-emitente,
                                                    input "Fornecedor":U,
                                                    input "":U,
                                                    output i-port-emit,
                                                    output i-modalid-emit,
                                                    output table tt_log_erro).
          delete procedure h-api.
      end.
       
    Exemplo Completo
    /* DEFINIÇÕES */
    define variable h-api              as handle  no-undo.
    define variable l-fn-port-emitente as logical no-undo.
    def temp-table tt_log_erro no-undo
        field ttv_num_cod_erro  as integer   format ">>>>,>>9" label "Número"         column-label "Número"
        field ttv_des_msg_ajuda as character format "x(40)"    label "Mensagem Ajuda" column-label "Mensagem Ajuda"
        field ttv_des_msg_erro  as character format "x(60)"    label "Mensagem Erro"  column-label "Inconsistência".
    define variable i-port-emit        as integer no-undo.
    define variable i-modalid-emit     as integer no-undo.
     
    ...
     
    /* LOCAL-INITIALIZE */
    assign l-fn-port-emitente = no.
        if search("hbbo\boParamFuncaoProdut.r") <> ?
        or search("hbbo\boParamFuncaoProdut.p") <> ? then do:
            run hbbo\boParamFuncaoProdut.p persistent set h-api.
            if valid-handle(h-api) then do:
                if h-api:get-signature('pi_existe_funcao':U) <> "" then
                    run pi_existe_funcao in h-api (input "Portador Financeiro do Emitente":U,
                                                   output l-fn-port-emitente).                             
                delete procedure h-api.
        end.
    end.
     
    ...
     
    /* PONTO A SER ALTERADO */
    assign i-port-emit    = emitente.portador-ap
           i-modalid-emit = emitente.modalidade-ap.
     
     
    if l-fn-port-emitente then do:
    
        run prgint/ufn/ufn008za.py persistent set h-api.
        if valid-handle(h-api) then do:
            run pi_busca_dados_portador_fin in h-api (input "",
                                                      input i-port-emit,
                                                      input i-modalid-emit,
                                                      input emitente.cod-emitente,
                                                      input "Fornecedor":U,
                                                      input "":U,
                                                      output i-port-emit,
                                                      output i-modalid-emit,
                                                      output table tt_log_erro).
            delete procedure h-api.
        end.
     
        /* Neste ponto pode ser realizado o devido tratamento de erros. Caso não seja tratado, irá retornar os valores que estão no cadastro do   emitente (como se a função não estivesse ativa)
           
           Exemplo:
     
           for each tt_log_erro:
            create tt-erros-api…
           end.
     
           Exemplo apenas apresentando os erros no clientlog:
     
           if log-manager:logging-level > 2 then do:
               for each tt_log_erro:
                 log-manager:write-message("Código do Erro: " + string(tt_log_erro.ttv_num_cod_erro), "UFN008ZA":U).
                  log-manager:write-message("Mensagem......: " + tt_log_erro.ttv_des_msg_erro        , "UFN008ZA":U).
                 log-manager:write-message("Ajuda.........: " + tt_log_erro.ttv_des_msg_ajuda       , "UFN008ZA":U).
               end.
           end.
     
        */
    end.
     
    assign tt-emitente-tr.portador   = i-port-emit
           tt-emitente-tr.modalidade = i-modalid-emit.

Observações:

Pontos de Atenção

  • Para que seja possível diferenciar os portadores entre as empresas, não deve ser utilizada a opção “Rec Alteração Fornec” e “Rec Alteração Client” existente no cadastro de Empresa (prgint/utb/utb069aa.p), pois se for utilizado, a informação do portador sempre será atualizado com base nas informações da última empresa alterada.