Árvore de páginas


Í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.: 

    1. 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;


    2. 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.

Modelo de Adapte
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

fina040.xml

IMPORTANTE!

O arquivo de importação deverá ser criado conforme as regras definidas no cadastro do Mile.

07. TABELAS UTILIZADAS

  • SE1 - Contas a Receber

  • SEV - Múltiplas Naturezas por Título
  • SEZ - Distrib de Naturezas em CC

08. ASSUNTOS RELACIONADOS

MILE - Model Integrator Layout Engine