ÍNDICE
01. VISÃO GERAL
Configurar e Executar Importação de registros para a rotina FINA040 - Contas a Receber via MILE.
Importante
O parâmetro MV_MULNATR deve estar habilitado .T. para que os registros sejam importados com sucesso.
02. CONFIGURAÇÃO MILE
Para realizar a importação dos dados na rotina FINA040 - Contas a Receber utilizando o MILE, são necessárias algumas configurações adicionais conforme veremos a seguir.
Basicamente, o MILE funciona da seguinte forma: para cada canal criado, será enviado sequencialmente para a rotina em questão um array como parâmetro, seguido do nOpc de 3 de inclusão.
Ao realizar a chamada da MsExecAuto da rotina FINA040, será enviado da seguinte forma:
Se tivermos 1 canal (1 Master):
- FMile040(vetor[1], 3)
Se tivermos 2 canais:
- FMile040(vetor[1], vetor[2], 3)
E assim por diante.
Importante
A rotina FINA040 possui suporte ao tipo de Adapter Função (Veja no documento de referência o item - tópico Composição do Layout - Geral)
03. EXEMPLO DE CONFIGURAÇÃO MILE
Modelo de configuração do layout do MILE:
1) Informações sobre o tipo de Adapter, o nome da função Adapter, a Tabela Principal (SE1 neste modelo) e o Tipo de Layout (Importação):
2) Defina a formatação do arquivo.
Obs.:
Origem do Canal: Posição de onde esta a informação de canal do layout. Quando o formato do TXT é largura fixa informa-se a posição inicial e final separadas por um traço. Ex. 0001-0005.
Quando o formato do TXT é por separador informa-se a posição da informação. Ex. 0001, isso significa que o canal é o 1º campo da linha.
Quando não há canais informar 0000-0000 ou 0000 conforme o formato;- Entrada Multi-Canal: conforme veremos detalhes mais adiante.
Ilustração deste modelo de configuração:
3) Configurando o tipo Adapter Função os campos abaixo não estarão disponíveis para alteração:
4) Definição dos Canais: Por envolver mais de uma tabela no destino (SE1/SEV/SEZ) dos dados utilizaremos o modelo de Multi-Canais (Veja Doc. Referência: Exemplificando alguns Layouts). Para este modelo serão configurados 2 canais, conforme abaixo:
- Canal E1: Lista de campos da tabela SE1 - Contas a Receber - Defina a ordem dos campos que estarão dentro do arquivo de importação. Note que a sequência do primeiro campo é 0002 pois a posição 0001 é identificadora do canal E1. Definiremos 12 campos:
- Canal NTCC: Servirá para representar os dados mínimos do rateio Naturezas X Cento de Custo:
- Aponte o Canal que será configurado:
- Insira os campos conforme abaixo:
04. USER FUNCTION - ADAPTER
Iremos utilizar uma User Function para execução do Adapter.
User Function MileF040(lInterface, aInfos, aLayOut, aSaidas) //-- Declarações - Propriedades Local nPosVl As Numeric Local nPosPc As Numeric Local nPosNt As Numeric Local nPosCc As Numeric Local nI As Numeric Local lNewNt As Logical Local cNat As Char Local aVetorRat As Array Local aTitulo As Array Local aRatNtCc As Array Local aRatNt As Array Local aRatCc As Array Local aLstRatCc As Array Default lInterface := .F. Default aInfos := {} Default aLayOut := {} Default aSaidas := {} //- Controle e separação dos Rateios aLstRatCc := {} //-- Lista dos Rateios de CC por Natureza aRatCc := {} //-- Um registro - rateio CC aRatNt := {} //-- Um rateio Natureza aRatNtCc := {} //-- Lista dos Rateios Natureza com espectivos CCs aTitulo := {} //-- Dados do Título aVetorRat := {} //-- Auxiliar no processamento dos rateios Nt/Cc cNat := "" //-- Auxiliar no processamento dos rateios Nt lNewNt := .T. //-- Auxiliar no processamento dos rateios Nt nI := 0 //-- Auxiliar no processamento dos rateios Nt/Cc nPosCc := 0 //-- Auxiliar no processamento dos rateios Cc nPosNt := 0 //-- Auxiliar no processamento dos rateios Nt nPosPc := 0 //-- Auxiliar no processamento dos rateios Nt/Cc nPosVl := 0 //-- Auxiliar no processamento dos rateios Nt/Cc //-- Controle de erro da rotina automática Private lMsErroAuto := Empty(aSaidas) Private lAutoErrNoFile := .T. //-- Inicio do pocesso de separação de dados If !Empty(aSaidas) aTitulo := {} AEVAL(aSaidas[1,4,1],{|e| AAdd(aTitulo,e)}) AAdd(aVetorRat,aSaidas[2,4]) nPosNt := ASCAN(aVetorRat[1,1],{|a| alltrim(a[1]) == "EZ_NATUREZ"}) nPosCc := ASCAN(aVetorRat[1,1],{|a| alltrim(a[1]) == "EZ_CCUSTO"}) nPosVl := ASCAN(aVetorRat[1,1],{|a| alltrim(a[1]) == "EZ_VALOR"}) nPosPc := ASCAN(aVetorRat[1,1],{|a| alltrim(a[1]) == "EZ_PERC"}) For nI := 1 To Len(aVetorRat[1]) If lNewNt //-- Adiciona Item Rateio Natureza cNat := aVetorRat[1][Ni][nPosNt][2] AAdd(aRatNt,{"EV_NATUREZ",cNat,Nil}) AAdd(aRatNt,{"EV_VALOR",0,NIL}) AAdd(aRatNt,{"EV_PERC",0,NIL}) AAdd(aRatNt,{"EV_RATEICC","1",NIL}) EndIf //-- Atualiza Valores do Rateio de Naturezas aRatNt[2][2] += aVetorRat[1][Ni][nPosVl][2] aRatNt[3][2] += aVetorRat[1][Ni][nPosPc][2] //-- Adiciona Item Rateio Centro-Custo AAdd(aRatCc,aVetorRat[1][Ni][nPosNt]) AAdd(aRatCc,aVetorRat[1][Ni][nPosCc]) AAdd(aRatCc,aVetorRat[1][Ni][nPosVl]) AAdd(aLstRatCc,AClone(aRatCc)) FwFreeArray(aRatCc) aRatCc := {} //-- Verifica se eh último Item da lista geral ou se eh novo item de Natureza lNewNt := (nI == Len(aVetorRat[1])) .Or. (aVetorRat[1][Ni+1][nPosNt][2] <> cNat) //-- Se eh novo item ou o último da lista, conclui a Inclusão do Rateio da Natureza atual. If lNewNt AAdd(aRatNt,{"AUTRATEICC", aLstRatCc, Nil }) AAdd(aRatNtCc,AClone(aRatNt)) FwFreeArray(aRatNt) aRatNt := {} FwFreeArray(aRatCc) aRatCc := {} FwFreeArray(aLstRatCc) aLstRatCc := {} EndIf Next nI //-- Fim //-- Execução do Adapter por Rotina Automática. MsExecAuto({ |x,y,z,a| FINA040(x,y,z,a)},aClone(aTitulo),3,,aClone(aRatNtCc)) //-- Tratamento para o caso de erros If lMsErroAuto MOSTRAERRO() EndIf EndIf Return !lMsErroAuto
05. EXEMPLO DE ARQUIVO DE IMPORTAÇÃO - TXT
E1;D MG 01;GRV;MILE00001;C;NF;001;001;01;20230113;20230113;1000;1 NTCC;000003;000001;500;100 NTCC;000001;000002;500;100 E1;D MG 01;GRV;MILE00001;D;NF;001;001;01;20230113;20230113;1000;1 NTCC;000003;000001;250;50 NTCC;000003;000002;250;50 NTCC;000001;000002;500;100 E1;D MG 01;GRV;MILE00001;E;NF;001;001;01;20230113;20230113;1000;1 NTCC;000003;000001;500;100 NTCC;000001;000001;250;50 NTCC;000001;000002;250;50
06. EXEMPLO DE ARQUIVO LAYOUT IMPORTAÇÃO - XML
O arquivo de importação deverá ser criado conforme as regras definidas no cadastro do Mile.IMPORTANTE!
07. TABELAS UTILIZADAS
SE1 - Contas a Receber
- SEV - Múltiplas Naturezas por Título
- SEZ - Distrib de Naturezas em CC