Árvore de páginas

Como configurar o MILE para importação dos dados no FINA050 utilizando rateio contábil

Produto:

Microsiga Protheus

Versões:

P12.1.7, P12.1.16, P12.1.17

Ocorrência:

Como configurar o layout no MILE para importar os dados da rotina FINA050 com rateio contábil?

Ambiente:

Padrão

Passo a passo:

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.

Ocorrência: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.