Tempo aproximado para leitura: 00:10:00 min
Dúvida
Como configurar o layout no MILE para importar os dados da rotina FINA050 com rateio?
Ambiente
Cross Segmentos - TOTVS Backoffice (Linha Protheus) - Financeiro - Todas as versões
Solução:
Para realizar a importação dos dados na rotina de Contas a Pagar (FINA050) com rateio contábil utilizando o MILE, é necessário algumas configurações adicionais que veremos a seguir, pois atualmente, a estrutura do MILE não permite realizar a importação utilizando simplesmente a configuração de canais.
Basicamente o MILE funciona da seguinte forma: para cada canal criado, será enviado sequencialmente para a rotina em questão um array como um parâmetro.
Então se temos 2 canais (1 Master e 1 Detail), ao realizar a chamada da MsExecAuto da rotina, será enviado da seguinte forma:
FuncaoXXX(vetor[1], vetor[2], 3)
Se tivermos 3 canais , será desta forma:
FuncaoXXX(vetor[1], vetor[2],vetor[3], 3)
E assim por diante.
Visto isso, temos uma incompatibilidade de uso, para a inclusão do rateio, pois na rotina FINA050 o parâmetro que recebe os dados do rateio está na oitava posição.
Veja os parâmetros recebidos pela rotina FINA050:
Fina050(aRotAuto,nOpcion,nOpcAuto,bExecuta,aDadosBco,lExibeLanc,lOnline,aDadosCTB,aTitPrv,lMsBlQl,lPaMovBco)
onde:
aRotAuto - Array - Contém os dados dos campos e conteúdo do título para inclusão via rotina automática
nOpcion - Numérico - Opção desejada do menu
nOpcAuto -Numérico - Opção desejada do menu via rotina automática
bExecuta - bloco de código - Permite executar uma função diferente ao invés da chamada da mbrowse
aDadosBco - Array - Somente para integração com o módulo SIGATMS para informar os dados do banco do adiantamento
lExibeLanc - Lógico - Define se exibe os Lançamentos Contábeis
lOnline - Lógico - Define se contabiliza On-Line
aDadosCTB - Array - Contém os dados do rateio contábil
aTitPrv - Array - Informações do título provisório
lMsBlQl - Lógico - Define se irá validar o campo E2_MSBLQL
lPaMovBco - Lógico - Define se PA gera movimento bancário
Neste caso, precisamos enviar o vetor do canal Master como primeiro parâmetro (aRotAuto) e o vetor do canal Detail como oitavo parâmetro (aDadosCTB).
Vamos precisar manipular o array de canais criado pelo MILE através de user function.
Configuração do Layout
Supondo a seguinte configuração de layout do MILE:
1) Informações sobre a rotina:

2) Defina a formatação do arquivo. Atente-se para o campo Pré-Execução, onde iremos utilizar uma função para mudar o vetor criado pelo MILE, antes de chamar a ExecAuto do Fina050.

3) Defina o tipo de MsExecAuto, e neste caso podemos utilizar os Modelos 2 ou 3. Como a rotina não está em MVC, não necessita a configuração do Adapters em MVC.

4) Defina os canais. Será necessário um canal Master para receber os dados do título (Canal A).



5) E um canal Detail para receber os dados do rateio (Canal B).

Pronto, o layout do MILE está configurado.
Agora veremos sobre a user function utilizada na Pré-Execução.
A função configurada na pré-execução receberá os seguintes parâmetros do MILE:
[1] - Lógico - .T. se está sendo executado com interface / .F. se está sendo executado sem interface
[2] - Array - Vetor com informações adicionais como linha inicial e final lida, nome do arquivo etc.
[3] - Array - Informações das definições do layout.
[4] - Array - Estrutura do vetor sobre dados de saída
[5] - Array - Vetores de rotina automática (MSExecAuto).
Exemplo da função de Pré-Execução
A função deverá retornar um novo vetor dos canais a serem enviados para a rotina.
No exemplo abaixo, para cada parâmetro recebido pela rotina FINA050, estamos criando um array e colocamos na oitava posição, que seria o parâmetro dos dados do rateio, o vetor do canal B - Detail.
User Function vetor050(lInterface, aInfos, aLayOut, aSaidas, aVetores)
Local aNewVet := array(11)
aNewVet[1] := aClone(aVetores[1]) // aRotAuto
aNewVet[2] := {} // nOpcion
aNewVet[3] := {3} // nOpcAuto
aNewVet[4] := {} // bExecuta
aNewVet[5] := {} // aDadosBco
aNewVet[6] := {} // lExibeLanc
aNewVet[7] := {} // lOnline
aNewVet[8] := aClone(aVetores[2]) // aDadosCTB
aNewVet[9] := {} // aTitPrv
aNewVet[10] := {} // lMsBlQl
aNewVet[11] := {} // lPaMovBco
Return aClone(aNewVet)
Exemplo de Arquivo de Importação
Veja neste exemplo de arquivo onde temos uma inclusão de um título (A) com dois rateios (B):
Lembrando que, conforme a configuração do layout, a primeira posição de cada registro se refere ao canal.
|A|D MG 01 |999|||NF|SEMIMPOSTO|000001|01|20170731|20170830|20170830|1000|S|
|B|100|200|60|600|
|B|200|100|40|400|
Agora basta processar o arquivo, que o mesmo deverá realizar a importação.
1) Processando o arquivo TXT:

2) Informando o caminho do arquivo TXT:

3) Final de processamento:

4) Acessando a rotina Fina050, veja que o título foi incluído com rateio contábil:

Visualizando o rateio:

Observações:
Este tratamento é exclusivo para a rotina Contas a Pagar (FINA050) pois a mesma foi adaptada para receber as informações do MILE que estão no formato array.
Este é somente um exemplo de configuração do layout, podendo ser adaptado conforme a necessidade do cliente.
Como importar títulos para várias filiais diferentes no mesmo arquivo?
Passo a passo:
Ao realizar a importação do arquivo no MILE, a execução da MsExecAuto será realizada pela filial logada.
Para trocar a filial (CFILANT) conforme a filial do registro a ser incluso, é necessário configurar o MILE para que realize a troca da variável global CFILANT para a filial do registro conforme exemplo abaixo.
Na aba Variáveis é possível manipular o conteúdo da variável informada e em Origem Dado, informe a posição do dado onde se encontra no arquivo de importação que irá setar o conteúdo da variável. Utilizando o exemplo do arquivo acima, a informação da filial se encontra na segunda posição do arquivo.
Observação: a informação de Origem Dado depende da configuração do separador de campo, seja por largura fixa ou por separador.
Saiba mais: FINA050 - Importação com rateio via MILE
0 Comentários