Seguiremos estudando cada registro individualmente, de acordo com o layout geral proposto no artigo anterior sobre o Registro 10. Sendo assim, o segundo registro a ser estudado é o Registro 11 que contém dados complementares do informante e é um dos registros mais simples de serem tratados.
O Registro 11
O Registro 11 é obrigatório, deve ser sempre o segundo registro do arquivo
magnético e contém informações complementares sobre o informante, tais como
telefone e pessoa responsável para contato.
Cada arquivo magnético deve conter apenas 1 (um) Registro 11, e a sua formatação
deve ser feita de acordo com a Tabela 01.

O Registro 11 e o seu Sistema Gerencial
Até agora abordamos o Registro 11 apenas do ponto de vista teórico, conforme
apresentado na documentação oficial dos convênios que regulamentam o Sintegra.
Mas como implementar tudo isso na prática? O que o Registro 11 representa para o
meu aplicativo gerencial?
A tela mostrada na Figura 01 é uma tela de Cadastro do Informante do Sintegra,
apresentada inicialmente no artigo sobre o Registro 10, que mantém um perfil do
usuário quanto ao Sintegra e salva em uma tabela do banco de dados as
informações dos campos Contato, Telefone, Logradouro, CEP, Nº, Complemento e
Bairro do Registro 11. Estas informações são informações que não mudarão a cada
geração do arquivo magnético, sendo quase que constantes durante todo período de
utilização do programa gerencial por parte do seu cliente.

Figura 01: Tela de Cadastro de Informante
A tela da Figura 01 contém mais informações do que as
necessárias no Registro 11. Estas são informações relativas a outros registros
do Sintegra, que já foram ou serão abordadas em detalhes nos artigos seguintes.
Apenas os campos da Figura 01 indicados pelas setas vermelhas fazem parte das
informações do Registro 11.
O Registro 11 e o Banco de Dados
Segue abaixo uma proposta de estrutura da tabela de “Informante” para armazenar
as informações relativas ao Registro 11 e alteradas através da tela de Cadastro
do Informante do Sintegra mostrada na Figura 01. Utilizamos a mesma estrutura da
tabela proposta no artigo sobre o Registro 10, e adicionamos os campos relativos
ao Registro 11, que estão ressaltados em negrito.
É muito importante que no momento do cadastro das informações do Registro 11,
seja feita a validação dos campos de Telefone, Cep, Complemento e Nº, antes que
os mesmos sejam salvos definitivamente no banco de dados. Caso contrário,
poderão surgir erros durante a geração ou validação do arquivo magnético.
CREATE
TABLE "INFORMANTE"
(
"COD_INFORMANTE" INTEGER NOT NULL,
"CNPJ" VARCHAR(14),
"INSC_EST" VARCHAR(14),
"NOME_CONTRIBUINTE" VARCHAR(35),
"MUNICIPIO" VARCHAR(30),
"UF" CHAR(2),
"FAX" VARCHAR(10),
"LOGRADOURO" VARCHAR(34),
"NUMERO" INTEGER,
"COMPLEMENTO" VARCHAR(22),
"BAIRRO" VARCHAR(15),
"CEP" INTEGER,
"CONTATO" VARCHAR(28),
"TELEFONE" INTEGER,
PRIMARY KEY ("COD_INFORMANTE")
); |
O Registro 11 e a Sintegra32dll.dll
A declaração da função Registro 11 na Sintegra32dll.dll é mostrada abaixo:
Function Registro11(Logradouro, Nro, Complemento,
Bairro, CEP, Nome_Contato, Telefone: ShortString): ShortString; ; stdcall;
external 'SIntegra32Dll.DLL';
Na declaração mostrada acima vemos que a função Registro 11 da Sintegra32dll.dll
contém uma variável do tipo ShortString para cada campo do Registro 11 mostrado
na Tabela 01.
A função mostrada tem retorno do tipo ShortString, que pode assumir dois tipos
de valores: valores em caso de haver erro nos parâmetros de entrada, e valores
em caso de não haver erro nos parâmetros de entrada.
Os valores de retorno da função em caso de erro são:
• '-0 Função Inicia_Sintegra não chamada'
• '-1 CEP Inválido :: ' + Cep
• '-2 Complemento ou Número Inválido :: Pelo menos 1 dos campos deve ser
preenchido';
Caso não haja erro nos parâmetros de entrada da função, o retorno será uma
variável do tipo ShortString contendo o Registro 11 devidamente formatado
conforme o padrão da Tabela 01 exemplificado abaixo:
Tipo + Logradouro + Nro + Complemento + Bairro + CEP + Nome_Contato + Telefone
Gerando o Registro 11 com a Sintegra32dll.dll
Como já foi visto, o processo de geração dos registros em geral passa por
basicamente 3 etapas, que são descritas a seguir:
Primeiramente devemos selecionar os registros do banco de dados que serão
utilizados para a geração do registro, como mostrado abaixo.
Neste caso, o sistema prevê que só pode ser cadastrado um único registro na
tabela INFORMANTE, que contém as informações mostradas na Figura 01. Logo não há
problemas quanto à questão do comando “Select *“ estar sendo executado sem
restrição de número de registros retornados, e o fato de que cada arquivo
magnético deve conter apenar 1 (um) Registro 11.
//Registro11 - Dados complementares do informante
function TSIntegra_ListFrm.sRegistro11(var Err_Msg: string): boolean;
var
TempStr: string;
begin
//Executa a seleção dos registros no banco de dados
if not QrySintegra_Info.Active then
begin
with QrySintegra_Info do
begin
Close;
UnPrepare;
SQL.Clear;
SQL.Add('SELECT * FROM informante');
Prepare;
Open;
end;
end;
... |
Em segundo lugar, deve ser feita a passagem dos parâmetros para a
Sintegra32dll.dll, informando para cada parâmetro, o campo respectivo do banco
de dados, como mostrado abaixo.
...
TempStr := Registro11(QrySintegra_Info.Fields.FieldByName('logradouro').AsString,
//Logradouro
QrySintegra_Info.Fields.FieldByName('nro').AsString, //Número
QrySintegra_Info.Fields.FieldByName('complemento').AsString,
//Complemento
QrySintegra_Info.Fields.FieldByName('bairro').AsString, //Bairro
QrySintegra_Info.Fields.FieldByName('cep').AsString, //Cep
QrySintegra_Info.Fields.FieldByName('nome_contato').AsString, //Nome
Contato
QrySintegra_Info.Fields.FieldByName('telefone').AsString //Telefone
);
... |
E finalmente, após a passagem dos parâmetros, devemos testar o retorno da
sintegra32dll.dll para saber se a geração do registro transcorreu normalmente ou
se houve algum erro, como mostrado abaixo.
Em caso de erro, apresentamos na tela o erro e todas as informações passadas
para a sintegra32dll.dll como parâmetros. Caso contrário, procede-se o
salvamento do retorno formatado do Registro 11 no arquivo magnético de destino.
...
//Executa o tratamento da string temporária testando se houve erro
Result := Trata_SIntegra_Str(TempStr);
//Caso haja erro, executa o log das informações inconsistentes no
RichEdit
if not Result then
begin
Err_Msg :=
' Logradouro: ' + QrySintegra_Info.Fields.FieldByName('logradouro').AsString
+ #13 +
' Número: ' + QrySintegra_Info.Fields.FieldByName('nro').AsString
+ #13 +
' Complemento: ' + QrySintegra_Info.Fields.FieldByName('complemento').AsString
+ #13 +
' Bairro: ' + QrySintegra_Info.Fields.FieldByName('bairro').AsString
+ #13 +
' Cep: ' + QrySintegra_Info.Fields.FieldByName('cep').AsString
+ #13 +
' Contato: ' + QrySintegra_Info.Fields.FieldByName('nome_contato').AsString
+ #13 +
' Telefone: ' + QrySintegra_Info.Fields.FieldByName('telefone').AsString;
end;
... |
O código mostrado foi retirado do demo de geração do Sintegra com banco de
dados disponível para download em:
http://www.igara.com.br/downloads/sintegradll/projeto_sintegra32dll_v3.zip
Perguntas e Repostas sobre o Registro 11
1. Como informar um endereço sem número?
Preencher o campo 03 (Número) com zeros, pois o campo é numérico. No campo
04 (Complemento) informar a situação. Se for SEM NÚMERO ou KM-XXX ou outra
situação.
2. Como informar um endereço com número composto (por ex.: 101-A)?
Preencher o campo número com 00101 e no campo complemento informar CASA-A,
LOJA-A ou a informação que melhor identificar o imóvel.
3. Por que o Validador informa que o campo do Telefone está com o
Formato/Conteúdo Inválido?
Este campo é obrigatório e não pode ficar sem informação. O campo 08 (telefone)
é um campo numérico, sendo aceitos apenas números sem pontos, traços, barras,
espaços e outros caracteres especiais. Caso não tenha telefone informe o do
Contador ou de contato.
Por enquanto é só. Não perca a próxima edição quando continuaremos os estudos a
respeito dos registros do Sintegra e veremos a geração do Registro 50.
As telas apresentadas fazem parte do Sistema
Tk-EPR da TKS Software.
Este artigo foi baseado nas informações contidas nos seguintes documentos
disponíveis para download na internet:
Convênio ICMS 020 de 2000.doc, Convênio ICMS 31 de 1999.doc, CONVÊNIO ICMS 057
de 1995.doc, Convênio ICMS 069 de 2002.doc, CONVÊNIO ICMS 078 de 1997.doc,
Convênio ICMS 142 de 2002.doc, convenio_icms_018_de_2004.doc,
convenio_icms_019_de_2004.doc, convenio_icms_020_de_2004.doc, Decreto 11614 de
2004.doc, manualdoconvenio57-95 C 76-03.RTF
Victory Fernandes é Engenheiro Mestrando em Redes de computadores, e
desenvolvedor sócio da TKS Software - Soluções de Automação de Processos e
Softwares Dedicados e Administrador do projeto Sintegra32dll.dll (
www.sintegrafacil.com.br ). Pode ser contatado em
victory@igara.com.br , ou através dos
sites www.igara.com.br -
www.victory.hpg.com.br
|