Passo a passo: | A partir da release TOTVS 12.1.12 do Produto Datasul está liberado 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 criado 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):
- Selecione a função Portador Financeiro do Emitente;
- Leia atentamente a Descrição da Função e esta Base de Conhecimento (FAQ);
- Marque a opção: "Li e Concordo com a FAQ";
- Clique no botão de seta para adição da função disponível para função ativa;
- Será exibida uma mensagem de sucesso:
Aviso |
---|
| 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?
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:
Aviso |
---|
| 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). |
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:
Aviso |
---|
| 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). |
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: - Através 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);
- 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;
- 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;
- 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);
Informações |
---|
A informação do Portador poderá ser diferente por empresa conforme cadastro de Cliente ou Fornecedor do Financeiro. |
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: Mensagem | Descrição | Ajuda | Detalhes |
---|
12295 | Cliente 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. | 10769 | Fornecedor 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. | 9960 | Portador não informado ! | | Indica que não há informação para o Portador no cadastro do Cliente ou Fornecedor do Financeiro. | 22200 | Matriz 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. | 21138 | Matriz 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. | 22197 | Traduçã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)
- Deverá ser definida duas variáveis e uma temp-table para o contexto do programa:
- Variável handle para armazenar o programa do HUB que possui a procedure que retorna se uma função está ativa ou não;
- Variável lógica para armazenar o estado da função: sim (ativo) e não (inativo);
- Temp-table tt_log_erro;
Bloco de código |
---|
title | Exemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
|
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".
|
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: Bloco de código |
---|
title | Exemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
|
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.
|
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: - Variável inteira que terá o valor do Portador;
- Variável inteira que terá o valor da Modalidade;
Bloco de código |
---|
title | Exemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
|
define variable i-port-emit as integer no-undo.
define variable i-modalid-emit as integer no-undo.
|
Informações |
---|
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. |
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: - 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;
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;
Bloco de código |
---|
title | Exemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
|
• 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.
|
Bloco de código |
---|
title | Exemplo Completo |
---|
linenumbers | true |
---|
collapse | true |
---|
| /* 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. |
|