Última modificação em: 17/10/2022

Desenvolvimento de Leiautes para Importação

Por meio da rotina abaixo que será apresentada maiores orientações, por meio dela que é utilizada para a elaboração, desenvolvimento e/ou configuração de leiautes para importação ou exportação de dados do Questor com outros sistemas, planilhas ou arquivos diversos (de formatação fixa ou variável).

Nesta rotina pode-se montar leiautes de importação e/ou exportação de arquivos em formato de texto.

  • Esses arquivos podem ser arquivos de tamanho fixo, ou seja, cada linha possui uma quantidade igual de caracteres que corresponde a um registro sem separador de campos.
  • Como podem ser também de tamanhos variáveis, possuindo um caractere que delimita onde inicia e onde termina um campo, chamados de separadores. Os separadores normalmente utilizados são ponto e vírgula ";" ou vírgula "," dentre outros.

Todas as tabelas do Questor podem ser importadas ou exportadas utilizando-se desta ferramenta. Resumindo, podemos importar desde um simples cadastro de bancos até cadastros como o de funcionários, lançamentos contábeis, lançamentos fiscais e também os eventos variáveis da folha de pagamento.

Cada leiaute é guardado e/ou salvo em um arquivo com extensão ".NLI". A extensão ".NLI" é uma extensão utilizada pelo Sistema Questor especificamente para este propósito (Importação/Exportação). O formato destes arquivos é legível, sendo que a estrutura desta arquivo é a mesma estrutura dos arquivos ".DFM". Formato este utilizado pelo Borland Delphi, que é a linguagem ao qual o Sistema Questor é desenvolvido.


O configurador de leiaute é composta de três partes, como mostra a figura abaixo:

Explicação de cada parte do Configurador de Leiaute:

O configurador de leiaute esta presente em todos os módulos do Questor, sendo acessível por meio do Menu: Utilitário / Banco de Dados / Configurador de Leiaute Importação Exportação. Entretanto vale ressaltar que deve-se sempre respeitar o módulo ao qual uma determinada tabela pertence.

Para a configuração, criação de um determinado arquivo ".NLI" devemos utilizar as seguintes opções para realizar a construção deste arquivo que será o arquivo utilizado importações e/ou exportações, mais conhecido por "Leiaute":

  • 1 - Apresenta o nome da tabela e abaixo cada um de seus respectivos campos.
  • 2 - É utilizada nos leiautes para visualizar os dados em cada campo. Auxilia o usuário durante o desenvolvimento.
    • Botão Abrir Arquivo Modelo: Abre um arquivo com dados referentes ao leiaute que estamos criando para serem visualizados nesta parte da janela.
  • 3 - Aparecem as informações da tabela ou do campo no qual estamos posicionados à esquerda. Abaixo da opção de "Configurações" temos cada um dos itens que precisamos configurar para poder configurar um leiaute, onde:

Configuração do Cabeçalho da Tabela Escolhida. "Sub-Aba Lateral: Configurações" [Configuração do DMClassName]:

  • Delimitador: Caracter que inicializa e finaliza os campos do tipo texto. Em alguns leiautes campo caracteres apresentam além do separador de campo, caracteres delimitadores de onde começa e termina o campo texto. Exemplo: "Nome do Cliente", onde as aspas são o delimitador. A exemplo do separador, o delimitador também só é utilizado quando a opção "EhVariavel" estiver sendo utilizada. Do contrário esta informação é ignorada.
  • DMClassName: É o nome da rotina utilizada internamente pelo Questor para realizar a importação e/ou exportação.
  • EhVariavel: Identifica-se o leiaute que estamos montando para importação e/ou exportação será de tamanho variável, ou seja, obrigatoriamente terá que ter um separador de campos.
  • FormatoData: Indica o formato da data no arquivo. Exemplo: DDMMYYYY Onde D=Dia, M=Mês e Y=Ano. Pode utilizar barras DD/MM/YYYY ou inverter YYMMDD. Em resumo, informar o formato no qual os campos do tipo data estão no arquivo.
  • IdentificadorRegistro: Esta informação somente será utilizada em leiautes onde em um mesmo arquivo existam dados referentes a mais de uma tabela. Exemplo: Lançamentos contábeis e gerenciais.
    • Deve-se informar qual ou quais caracteres identificam uma determinada linha, por exemplo, existem informações de lançamento contábil e gerencial. Neste caso, qual caractere deve ser avaliada para identificar os lançamentos contábeis e qual caractere deve ser avaliado para importar os lançamentos gerenciais.
    • É permitido também a utilização de expressões regulares para a identificação de um registro. Desta forma pode-se diferenciar um registro de uma forma mais aberta. A expressão deve ser informada no formato "exp=expressão". Ex: "exp=2\w{7}D". Utilizar site https://regex101.com para conferencia da expressão regular.
  • IdentificadorValorNulo: Com a utilização de bancos de dados padrão SQL faz-se necessário diferenciar valores nulos (sem valor) de zero, por exemplo. Vamos citar como exemplo novamente a importação de lançamentos contábeis. Imaginamos que em um lançamento podemos ter a conta débito e crédito, porém estamos fazendo um lançamento de partida simples, somente com débito. A conta crédito deve ficar sem valor, ou seja, com valor nulo e não com zero. Em várias situações, como nos históricos contábeis o valor zero é um histórico válido, desta forma não podemos assumir que zero signifique nulo. Por padrão o Questor utiliza o caracter "~" til como identificador de nulo, porém, em situações que a informação venham com zeros, podemos configurar no próprio campo para que quando venha zeros assuma nulo. Veja mais em ConverterValores.
  • Separador: Indica o caracter que separa cada campo no leiaute. Somente é utilizado quando a opção "EhVariavel" estiver sendo utilizada. Do contrário esta informação é indiferente.
  • SeparadorDecimal: Indica o caracter que separa o valor monetário, ou seja, este caractere que determina qual o caractere que vai diferencial o valor de centavos(se houver). Exemplo 1.000,00. Neste caso o valor de separador decimal ","
  • TamanhoRegistro: Identifica o tamanho de cada linha no arquivo texto. Somente é utilizado e faz sentido em leiautes com tamanho fixo, ou seja, quando a opção "EhVariavel" estiver desmarcada. Do contrário a informação é irrelevante.
  • UsarFlagImportado: É utilizado para não importar as mesmas linhas de determinado arquivo mais de uma vez. Quando marcada esta opção, o Questor modifica a primeira posição das linhas onde houve sucesso na importação para "#" sustenido, desta forma se for solicitado a importação de um mesmo arquivo mais de uma vez, os registros que tiverem o "#" na primeira posição serão ignorados, esta opção é mais utilizada em importação de arquivos de tamanho Fixo.

Configuração dos Campos da Tabela do Layout Escolhido. "Sub-Aba Lateral: Configurações":

Da mesma forma que na tabela, nos campos temos a opção de "Configurações", porém ainda temos a opção de "Informações", sendo que estas não podem ser modificas e/ou configuradas pelo usuário. Temos os alguns itens em configurações que devem ser configurados para cada campo, e neles algumas opções de funcionalidades que auxiliam na utilização do layout, sendo:

  • Coluna = Identifica qual é a coluna no arquivo, ou seja, se é a primeira, segunda, terceira, ..., coluna. Somente utilizado quando é um leiaute variável.
  • ConverterValores = Utilizado para modificar o valor do campo com regras fixas, exemplos:
    • ConverterValores: Utilizado para modificar o valor do campo com regras fixas, exemplos:
    • 1. Na importação dos lançamentos contábeis, no arquivo vem a informação D e C, (débito ou crédito), portanto devemos colocar no converter valores o seguinte valor:
      • C=-1
      • D=1
      • Esta opção também é chamada de "De / Para", de C para -1.
    • 2. Campos que vem com o conteúdo zero e devem ser transformados para nulo, informar:
      • 000.00=~
      • Neste caso se o campo vier com cinco zeros será transformado em nulo, deve-se sempre informar a quantidade de zeros conforme o tamanho do campo no arquivo.
    • 3. Poderíamos também mesclar o exemplo 1 com o 2, ou seja:
      • C=-1
      • D=1
      • 000.00=~
    • 4. Utilizado para adicionar um valor no início do campo, pode ser utilizado tanto para cadastrar quanto para fazer consulta.
      • Exemplo: cadastro de produtos, você tem na referência o valor M10 e no arquivo do detalhamento dos produtos apenas o 10, então é passado o parâmetro mascara=M%s no converter valores do campo Referência, vai passar a fazer a consulta com o valor M10.
      • mascara=(Valor qualquer)%s =
        • M = uma string (um ou vários caracteres) qualquer para ser adicionada no início. Obs: Pode ser qualquer valor, ou seja, poderia ser HFJ, ao invés de M.
        • %s = é o valor do campo que está no arquivo.
        • Caso seja utilizado mesclado com com os exemplos 1, 2 e 3 funcionará assim: Primeiro executa a parte da máscara e após a outra operação.
  • IgnorarSeDuplicado = Quando marcado ele ignora o registro com o campo duplicado em relação aos registro que estão no banco ou aos que esta no arquivo de importação. Quando mais que um campo marcado será considerado o conjunto para ele ignorar.
  • IgnorarSeNull = Quando marcado ele ignora o registro com o campo nulo/zero. Quando mais que um campo marcado todos devem estar nulo/zero para ele ignorar. Exemplo de utilização: Quando em uma mesma linha existem vários registros de um mesmo tipo, sendo que nem sempre todos vem preenchidos, então podemos marcar determinado como como "ignorarsenull", que quando vier nulo/zero, vai ignorar o registro, ou seja, não vai importar a tabela em questão.
  • Precisao = Informação da quantidade de casas decimais existentes no arquivo, ou seja, quantas casas do tamanho definido para o campo devem ser consideradas como decimais, usada nos casos que não são definidas as casas decimais de determinado valor, ex: 15000, pode ser interpretado como quinze mil visualmente falando, caso seja este o formato de valor apresentado no arquivo a ser importado.
    • Contudo, se incluso no campo "Precisão" incluirmos o valor "2", o sistema irá interpretar que este valor do arquivo contém 2 casas decimais, ou seja, sera interpretado como 150,00, uma vez que no valor 15000 contou-se "2" casas decimais da direita para a esquerda aplicando nesta posição o valor decimal (15000 = 150,00).
    • Caso seja inserido no campo precisão "0" neste caso, o próprio valor do campo da tabela será aplicado no valor do arquivo, ou seja, se o campo caso digitado manualmente, possuir 2 casas decimais, o próprio sistema irá converter o valor em 2 casas decimais e aplicar esta regra, ou seja, (15000 = 150,00).
    • É possível atribuir valores negativos no campo precisão de forma que ignore a quantidade de casas decimais do dicionário do campo, desta forma, caso inserido no campo "-2" neste cenário, o sistema irá ignorar o numero de casas da tabela e consequentemente aplicar isso como o valor, ou seja, (15000 = 15000,00)
  • Tamanho = Identifica qual o tamanho do campo no leiaute. Também só é utilizado em leiautes fixos (veja também TamanhoRegistro e EhVariavel).
  • PosicaoInicio = Identifica nos leiautes fixos (veja também TamanhoRegistro e EhVariavel) qual é a posição inicial daquele campo no leiaute.
  • Tipo: Identifica como a informação do campo será feita. Possui várias opções conforme segue:
    • itCampo: Os valores serão lidos do arquivo texto;
    • itValorFixo: Deverá ser informado um valor para o campo na propriedade ValorFixo;
    • itIgnorar: É ignorado o registro, ou seja, o campo ficará nulo após a importação.(Obs: Para os campos obrigatórios no sistema, esta função não deve ser usada, passando um valor fixo se o mesmo não vier no arquivo de importação);
    • itPerguntar: No momento de realizar a importação e/ou exportação aparece uma caixa de diálogo solicitando o valor que deve-se assumir para aquele campo;
    • itMaster: Usado para pegar dados da tabela anterior, amarar duas tabelas. Ex: Na importação dos lançamentos contábeis com lançamentos gerenciais, temos campos iguais nas duas tabelas, CodigoEmpresa e ChaveLctoCtb, portanto para não solicitarmos as mesmas informações nas duas tabelas, "Amarramos" elas, a tabela "Pai" é a LCTOCTB e a "Filho" LCTOGER, portanto na LCTOGER colocamos como itMaster, e no valor fixo colocamos LCTOCTB.CodigoEmpresa, que significa que esta pegando a informação que esta vindo na LCTOCTB campo CodigoEmpresa, o mesmo para ChaveLctoCtb;
      itLookup: Utilizado para pegar um valor através de uma consulta. Exemplo: Importação de Pessoas (Clientes\Fornecedores), código do Município, temos no arquivo txt o Código Estadual, então, deve-se informar na propriedade Tipo como itLookup e na propriedade ValorFixo "CodigoEstad", vai trazer o nome do Município através do Código Estadual, o mesmo acontece quando no arquivo vier o nome do Município, colocamos itLookup e na propriedade do ValorFixo "SiglaEstado;NomeMunic", porque colocar o "SiglaEstado"? Para deixar a importação mais rápida, ou seja, com isso estamos dizendo para a pesquisa ir direto dentro do estado que estiver informado no arquivo, com isso otimizamos a pesquisa, se deixarmos apenas com o ValorFixo "NomeMunic", também vai funcionar, porem, mais lento.
    • itConcatenar: Utilizado para montar um campo utilizando-se vários. Primeiramente duplica-se o campo destino e no segundo campo troca-se para este tipo "itConcatenar".
    • itEventoPreDefinido: Utilizadas em situações específicas necessárias durante a importação de determinados arquivos. Situações nas quais a equipe de suporte do Questor precisa deixar pré-definida para a utilização. Ex: Na importação dos lançamentos contábeis para determina Empresa, solicitamos o CNPJ da empresa no arquivo, pois pode ocorrer que não bata o número de cadastro do sistema comercial com o Questor, neste caso usamos o Tipo itEventoPreDefinido e no Valor Fixo, "InscrFederal", o que o sistema vai fazer neste caso, vai pegar o CNPJ e ir até o banco e retornar o código que esta no cadastro do Questor. As situações que temos ate o momento são:
      • ArrumaCFOP: Acerta os códigos das CFOP antigos (com 6 dígitos) para os novos (com 7 dígitos).
      • Copy: Copia parte do campo, com dois parâmetros, posição inicial e quantidade de caracteres.
        • Exemplo: Vem em um campo o valor 170783, mas necessita apenas dos quatro últimos dígitos.
        • Usa-se "Copy;2;4", ou seja, vai começar a copiar da posição dois, quatro dígitos.
      • EnderecoLogradouro: Pega o logradouro do endereço quando o endereço vem somente em um campo ex: "Rua Nereu Ramos 300", vai pegar apenas o "Rua".
      • EnderecoEndereco: Pega o endereço quando o endereço vem somente em um campo ex: "Rua Nereu Ramos 300", vai pegar apenas "Nereu Ramos".
      • EnderecoNumero: Pega o número quando o endereço vem somente em um campo ex: "Rua Nereu Ramos 300", vai pegar apenas o "300".
      • EnderecoComplemento: Pega o complemento quando o endereço vem somente em um campo ex: "Rua Nereu Ramos 300 BL1 AP202", vai pegar apenas "BL1 AP202".
      • FormatarData: Usado para formatar alguma data especifica de um determinado campo, ou seja, quando a data estiver faltando dia, mês ou ano, ex: temos a data 12/1900 (mês e ano), mas precisamos do dia, então usamos "FormatarData;MM/YYYY;D=1", vai assumir o dia 01 durante a importação, ficando 01/12/1900, o mesmo pode ser feito para qualquer valor da data.
      • HoraParaMinuto: Converte de hora para minutos, 1 para Hora normal e 2 para hora Centesimal. ex.: "HoraParaMinuto;2"
      • InscrFederal: Hoje este campo pode ser CPF, CNPJ ou CEI e ainda pode vir com formatação (com os caracteres de separação, vírgulas, pontos, barras, etc) ou sem formatação.
      • LimparInteiro: Limpar o conteúdo para poder ser convertido para um número inteiro.
      • Pesquisar: Para pegar valor de outras consultas. Cria-se um leiaute auxiliar somente com os campos a utilizar na pesquisa em outra consulta ligada ao campo em questão, e se informa os campos da parte local da chave e depois o leiaute auxiliar. Ex.: Em LctoFisEntProduto.ChaveLctoFisEnt colocar Pesquisar;CodigoEmpresa;leiaute.nli, ele vai pegar o arquivo no mesmo diretório/pasta do leiaute principal.
        • Se houver uma CONTACTBCRED informada no LCTOCTB, o campo NATURLCTOCTB = -1 ( Crédito ) e o campo CONTACTB será igual ao CONTACTBCRED.
        • Se não houver uma CONTACTBCRED informada no LCTOCTB, o campo NATURLCTOCTB = 1 ( Débito ) e o campo CONTACTB será igual ao CONTACTBDEB.
      • PegarCampoTabela: Este evento pré-definido possibilita buscar um campo de uma tabela sendo que tenho somente a informação de outro campo da mesma tabela, campo e filtro pra buscar dados do banco de dados. Ex.: Quero a Tabela Contábil que esta configurada na CFOP, mas somente tenho o código da CFOP da tebala CFOP, devo configurar com o Tipo itEventoPreDefinido e no campo ValorFixo informar 'PegarCampoTabela;CODIGOTABCTBFISVLRCONTABIL;CFOP;CODIGOCFOP'
      • PegarContaCtbGer: Para usar no LCTOGER.ContaCtb, ele analisa o LCTOGER.NATURLCTOCTB e para carregar o LCTOCTB.CONTACTBDEB ou o LCTOCTB.CONTACTBCRED.
      • PegarChaveOrigem: Somente utilizado na tabela LCTOTMPCTB, campo CHAVEORIGEM para buscar dados das tabelas LCTOFISENT, LCTOFISENTRETIDO e LCTOFISSAI gerando a ligação deste lançamentos. Gera a chave origem baseando-se no registro anterior ou buscando diretamente no banco de dados. A função aceita dois parâmetros, onde o primeiro pode ser "ME", "RE" ou "MS" que representam as tabelas acima, respectivamente. Já o segundo parâmetro somente é utilizado quando é para buscar no banco de dados, ou seja, os registros mestres não estão no próprio arquivo. Neste caso deve-se passar a letra "L". Exemplo: PegarChaveOrigem;MS;L
      • PegaContaCtbCliForInscr: Somente utilizado na tabela LCTOCTB, campo CONTACTBDEB e CONTACTBCRED o qual retornará o Código da Conta Contábil através da Inscrição Federal informada no arquivo. Como parâmetros se deve informar "1" para retornar a conta Cliente ou 2 para a conta Fornecedor. Ex.: PegaContaCtbCliForInscr;2. Para que a fórmula funcione corretamente a empresa deve utilizar o Grupo de Pessoas Padrão e ter os intervalos para as contas Clientes/Fornecedores definidos no Plano de Contas.
      • PegaContaCTBReserva: Somente utilizado na tabela LCTOCTB, campo CONTACTBDEB e CONTACTBCRED o qual retornará o Código da Conta Contábil através da Reserva da Conta informado no arquivo. Ex: Foi cadastrado pessoa no questor já foi gerado a reserva da conta contábil para esta pessoa, mas ainda não foi gerado a conta contábil no plano de contas e o arquivo que está importando está com o mesmo código da reserva, quando executar a importação o questor vai criar automaticamente esta conta contábil no plano de contas.
      • PegarContaeNaturezaLcto: Este evento pré-definido deve ser utilizado no campo LCTOGER.CONTACTB, o mesmo não possui parâmetros. Quando houver este evento, o mesmo vai consultar no LCTOCTB ( deve possuir um leiaute master da tabela LCTOCTB ) e preencher os campos NATURLCTOCTB e CONTACTB da seguinte forma:
      • ReferOuValorEvento: Quando a mesma coluna tem a referência ou o valor, tem mais dois parâmetros. Primeiro especifica quando são permitidos os dois qual atribuir onde 0 = atribui os dois, 1 = atribui a referência ou 2 = atribui o valor. Segundo é passado quando referência para o HoraParaMinuto.
      • TipoInscrFederal: Recebe uma inscrição federal e retorna o tipo, podendo-se por o padrão quando erro ex.: "TipoInscrFederal;1" que significa que se não validar vai ficar como CPF, se não tiver informado o padrão será CNPJ.
      • TelefoneDDD: Pega o DDD do telefone quando o vier os dois campos juntos, ex: "49 3361 8100", vai pegar apenas o "49".
      • TelefoneNumero: Pega o número do telefone quando o vier os dois campos juntos, ex: "49 3361 8100", vai pegar apenas o "3361 8100". .
      • PesquisarTabela: Utilizado para pesquisar em uma tabela por mais de um campo, através da duplicação do mesmo no leiaute. Deve-se criar uma cópia do campo a se pesquisado para cada campo envolvido na pesquisa. Ex: Para se pesquisar a pessoa pela Inscrição Federal e pela Inscrição Estadual, deve-se criar 2 campos CODIGOPESSOA no leiaute. No primeiro campo código pessoa informa-se "PESQUISARTABELA;PESSOA;INSCRFEDERAL" no valor fixo. No segundo campo
        informa-se "PESQUISARTABELA;PESSOA;INSCRESTAD;CODIGOPESSOA" no valor fixo. O último campo do leiaute envolvido na pesquisa sempre deve informar um campo a mais no final, que indica qual campo deve ser pesquisado para retorno da tabela.
  • ValorFixo = Deve-se preencher esta informação quando a propriedade "Tipo" for de um dos seguintes tipos: itValorFixo, itMaster, itLookup ou itEventoPreDefinido.

Criação de Leiaute Auxiliar

  • 1 - Criação o Leiaute Auxiliar:
    • Somente com os campos a utilizar na pesquisa os demais campos fica como itIgnorar, lembrando que o arquivo é mesmo que vai ser usado na importação.
      • Exemplo: Tenho que importar o Recebimento das Duplicatas mas no arquivo de importação tenho as seguintes informações (CNPJ do Cliente) e (Numero da Duplicata), só que com apenas esta informações eu não consigo importar o recebimento usando o Leiaute Principal por falta informação da (Chave da Duplicata) que é informação obrigatória para o Questor.
    • Então crio leiaute Auxiliar usando Leiaute DuplicataSai, neste leiaute vou ter os campos (CodigoPessoa) e (NumeroDuplicataSai) para a Pesquisa, uso a função itCampo.
  • 2 - Leiaute Principal:
    • No Leiaute principal no campo aonde necessito que leiaute Auxiliar realize a pesquisa vou usar seguinte função:
      • Tipo:ItEventoPreDefinido
      • ValorFixo: Pesquisar;CODIGOEMPRESA;CODIGOESTAB;Auxiliar.nli
    • Podemos observar que nome do Leiaute Auxiliar foi informado no ValorFixo, será desta forma que ele vai identificar o Leiaute Auxiliar.
    • Continuando no Exemplo:
      • No Leiaute Principal DuplicataSaiPagto vou no função ChaveDuplicata e realizo parametrização:
      • Tipo:ItEventoPreDefinido
      • ValorFixo: Pesquisar;CODIGOEMPRESA;CODIGOESTAB;Auxiliar.nli
  • 3 - Observação:
    • Leiaute Auxiliar deve ficar salvo na mesma Pasta do Leiaute Principal, e não deve ser informado no Parâmetro de Importação do arquivo.
    • Pessoal na importar do Pagamento das Duplicatas sobre as entradas não necessita usar leiaute auxiliar, desde que no arquivo venha todas as informações necessárias.

 

 

 

 

 

CCQ Blog
© Questor Sistemas 2025