As soluções de componentes da Tecnospeed servem para facilitar e agilizar a vida do desenvolvedor de software. Atualmente, contamos com o componente CTe, uma biblioteca para facilitar a emissão do Conhecimento de Transporte Eletrônico. Digital. Aqui, iremos percorrer passo a passo, a instalação, montagem e emissão de CTe através do componente TecnoSpeed.
Para a comunicação com a a Secretaria da Fazenda, primeiramente é necessário um CNPJ com Inscrição Estadual e um certificado digital deste CNPJ cadastrado no Web Service da SEFAZ. Tendo adquirido o certificado, podemos partir para o componente.
Primeiramente é necessário a instalação do componente, o qual se encontra na Central do Cliente Tecnospeed, na aba Download ou mesmo a versão trial dentro de nosso GitHub. Caso haja alguma dúvida, basta seguir a documentação de Instalação. Lembre-se sempre instalar o componente como administrador e selecionar o Delphi utilizado no instalador.
Após a instalação, crie o projeto e verifique se o componente está corretamente instalado e funcional dentro da IDE.
O próximo passo é montar o Form, a interface a qual o usuário utilizará para se comunicar com o componente. A forma com que os itens são organizados pode ser alterado de acordo com o desenvolvedor e sua forma de trabalho. Temos como exemplo um projeto demonstração em nosso GitHub, o qual pode ser clonado para análise. Temos em nossa demo, um exemplo de interface para apresentação dos métodos:
Uma das grandes facilidades do Delphi é a fácil visualização e alteração das propriedades do componente, como apresentados no Object Inspector. Para mais detalhes à respeito do que o que significa cada um deles, é possível analisar nossa documentação sobre as propriedades do componente.
Instanciando o componente
Há duas formas de se instanciar o componente no Delphi, a primeira e mais fácil é adicioná-lo através da paleta de ferramentas, encontrada no canto superior da tela. É só selecioná-lo e clicar posteriormente no form.
A outra forma é através do código direto, primeiramente é necessário adicionar o spdCTe, spdCteDataSet e spdCTeUtils ao Uses do seu projeto, em seguida é necessário criar suas variáveis, como no exemplo a baixo.
spdCTe: TspdCTe;
spdCteDataSet: TspdCteDataset;
spdCTeUtils: TspdCTeUtils;
Após é necessário criar o objeto na variável:
vCTe := TspdCTe.Create(nil);
vCTeDataSet := TspdCTeDataSet.Create(nil);
vCTeUtils := TspdCTeUtils.Create;
Configurar o componente
Antes de utilizar os métodos e funções do componente, é necessário configurar as suas propriedades. Elas podem ser configuradas utilizando um arquivo de configuração (.ini) ou através do código fonte.
Através do arquivo .ini, os valores das propriedades são carregados no componente através do método LoadConfig(). Na pasta do projeto, tenha um arquivo chamado CTeConfig.ini com os dados preenchidos corretamente. Abaixo segue um exemplo para revisão.
[CTE]
UF=PR
CNPJ=00000000000000
CNPJSH=00000000000000
NomeCertificado= //preencha aqui o certificado digital
ArquivoServidoresHom=C:\Program Files\TecnoSpeed\CTe\Arquivos\cteServidoresHom.ini
ArquivoServidoresProd=C:\Program Files\TecnoSpeed\CTe\Arquivos\cteServidoresProd.ini
TipoCertificado=File
DiretorioEsquemas=C:\Program Files\TecnoSpeed\CTe\Arquivos\Esquemas\
DiretorioTemplates=C:\Program Files\TecnoSpeed\CTe\Arquivos\Templates\
DiretorioLog=Log\
DiretorioLogErro=
DiretorioTemporario=
Ambiente=2 //1 para produção, 2 para homologação
Repositorio=CURRENT_USER_STORE
ValidarEsquema=0
PINCODE=
VersaoManual=3.00
MaxSizeLoteEnvio=500
DiretorioXmlTomadorServico=XmlTomadorServico\
AnexarDactePDF=1
IgnoreInvalidCertificates=1
TimeOut=0
Usuario=
Senha=
ConexaoSegura=1
Proxy=
ModoOperacao=NORMAL
CaminhoCertificado=
SenhaCertificado=
HttpLibs=SBB
[DACTE]
ModeloRetrato=retrato.rtm
ModeloRTMCCe=C:\Program Files\TecnoSpeed\CTe\Demo\Templates\cce\Impressao\modeloCCe.rtm
LogotipoEmitente=tecnospeed.jpg
FraseHomologacao=SEM VALOR FISCAL
ModeloPaisagem=
QtdeCopias=1
[MAIL]
Servidor=smtp.gmail.com
EmailRemetente=testedacte@gmail.com
Assunto="Exemplo de envio de DACTE por email"
Mensagem="O arquivo está anexo."
Usuario=testedacte@gmail.com
Senha=tecnospeed
TimeOut=30000
EmailDestinatario=
CCo=
CC=
Autenticacao=1
Porta=0
Caso prefira a configuração dentro do código, basta informar os valores desejados para cada uma delas dentro das propriedades da classe instanciada
//[CTE]
spdCTe.UF := 'PR';
spdCTe.CNPJ := '00000000000000' //preencha com o cnpj da empresa;
spdCTe.NomeCertificado := '' // preencha com o certificado digital da empresa;
spdCTe.ArquivoServidoresHom := 'C:\Program Files\TecnoSpeed\CTe\Arquivos\cteServidoresHom.ini';
spdCTe.ArquivoServidoresProd := 'C:\Program Files\TecnoSpeed\CTe\Arquivos\cteServidoresProd.ini';
spdCTe.TipoCertificado := File;
spdCTe.DiretorioEsquemas := 'C:\Program Files\TecnoSpeed\CTe\Arquivos\Esquemas\';
spdCTe.DiretorioTemplates := 'C:\Program Files\TecnoSpeed\CTe\Arquivos\Templates\';
spdCTe.DiretorioLog := 'Log\';
spdCTe.DiretorioLogErro := 'LogErro\';
spdCTe.DiretorioTemporario := '';
spdCTe.Ambiente := 1;
spdCTe.Repositorio := CURRENT_USER_STORE;
spdCTe.ValidarEsquema := 1;
spdCTe.PINCODE := '';
spdCTe.VersaoManual := 3.00a;
spdCTe.MaxSizeLoteEnvio := '500';
spdCTe.DiretorioXmlTomadorServico := 'XmlTomadorServico\';
spdCTe.AnexarDactePDF := 1;
spdCTe.IgnoreInvalidCertificates := 1;
spdCTe.TimeOut := '0';
spdCTe.Usuario := '';
spdCTe.Senha := '';
spdCTe.ConexaoSegura := '1';
spdCTe.Proxy := '';
spdCTe.ModoOperacao := 'NORMAL';
spdCTe.CaminhoCertificado := '';
spdCTe.SenhaCertificado := '';
//[DACTE]
spdCTe.ModeloRetrato := 'C:\Program Files\TecnoSpeed\CTe\Arquivos\Templates\3.00a\DACTE\Retrato.rtm';
spdCTe.ModeloPaisagem := 'C:\Program Files\TecnoSpeed\CTe\Arquivos\Templates\3.00a\DACTE\Paisagem.rtm';
spdCTe.ModeloRTMCCe := 'C:\Program Files\TecnoSpeed\CTe\Arquivos\Templates\cce\Impressao\modeloCCe.rtm';
spdCTe.LogotipoEmitente := 'C:\Program Files\TecnoSpeed\CTe\Arquivos\Templates\3.00\DACTE\TECNOSPEED.jpg';
spdCTe.FraseHomologacao := 'SEM VALOR FISCAL';
spdCTe.QtdeCopias := '1';
//[MAIL]
spdCTe.Servidor := 'smtp.gmail.com';
spdCTe.EmailRemetente := 'testedacte@gmail.com';
spdCTe.Assunto := 'Exemplo de envio de DACTE por email';
spdCTe.Mensagem := 'O arquivo esta em anexo.';
spdCTe.Usuario := 'testedacte@gmail.com';
spdCTe.Senha := 'tecnospeed';
spdCTe.TimeOut := '30000';
spdCTe.EmailDestinatario := '';
spdCTe.CCo := '';
spdCTe.CC := '';
spdCTe.Autenticacao := 1;
spdCTe.Porta := '0';
procedure TfrmCTePrincipal.CarregarDadosCTe;
begin
edtCNPJ.Text := vArquivoIni.ReadString('CTE','CNPJ','');
edtTOKEN.Text := vArquivoIni.ReadString('CTE','TOKENSH','');
edtCNPJEmitente.Text := vArquivoIni.ReadString('CTE','CNPJ','');
spdCTe.LoadConfig();
spdCTe.ListarCertificados(cbCertificado.Items); -0
{
Quando o ListarCertificados não trouxer nada, verificar se o certificado foi instalado por maquina ou por usuário
}
cbCertificado.ItemIndex := 0;
EdtUF.Text := vCTe.UF;
end;
Após a configuração inicial, é necessário passar os métodos para os botões e retornos para seus respectivos campos criados no Form.
Métodos do Componente CT-e
Lista de alguns dos principais métodos do componente. Lista completa pode ser analisada com detalhes em cada um dos métodos pode ser consultada na nossa documentação.
LoadConfig: Método utilizado para carregar valores das propriedades do componente através do arquivo INI
spdCTe.LoadConfig();
ConfiguraSoftwareHouse: Método utilizado para carregar no componente dados da softwarehouse
spdCTe.ConfigurarSoftwareHouse(edtCNPJ.Text, edtTOKEN.Text);
AssinarCT: Método do componente que tem como parâmetro o XML e retorna XML assinado do CT-e para ser enviado. Obs.: Caso o XML sofra alterações após ser assinado, ocorrerá rejeição na SEFAZ.
spdCTe.AssinarCT(XMLString);
CancelarCTEvento: Método de solicitações de cancelamento de evento de CT-e junto à SEFAZ
spdCTe.CancelarCTEvento('00000000000000000000000000000000000000000000', '123456789123456', 'Estou realizando um teste de cancelamento', '2021-07-18T09:45:00-03:00');
ConsultarRecibo: Método de consulta através de Recibo gerado
spdCTe.ConsultarRecibo(edtRecibo.Text);
ConsultarCT: Método de consulta de CT
spdCTe.ConsultarCT(edtChave.Text);
ConverteXmlparaDataSet: Método que recebe xml e transforma em dataset
spdCTe.EnviarCTSincrono('XML da Nota Assinada');
EnviarCCe: Método de envio de Carta de Correção do CTe
spdCTe.EnviarCCe(edtChave.text, FormatDateTime('yyyy-mm-dd"T"hh:nn:ss',date)+'-03:00', mmXMLEnvio.Text, '1');
EnviarCTSincrono: Envio de CTes assinados que já obtém retorno da Sefaz, sem necessidade de consulta de chave ou recibo
EnviarCT: Envio de CTe assinado para Sefaz
spdCTe.vCTe.EnviarCT('1', mmXMLEnvio.Text);
ExportarDacteParaPDF: Método utilizado para exportação do Dacte em um arquivo formato PDF
spdCTe.ExportarDacteParaPDF('Conteúdo do XML', '', 'C:\teste.pdf');
GerarXMLporTX2: Método que gera arquivo XML com dados retirados de TX2
spdCTe.GerarXMLporTx2(vTX2);
ImprimirDacte: Método de impressão de Dacte na impressora configurada
spdCTe.ImprimirDACTE(vXML, '', '');
StatusdoServico: Método utilizado para realizar a consulta de Status da UF configurada na propriedade UF. Tem como retorno um XML com a resposta do Web Service da UF.
spdCTe.StatusDoServico;
Para mais detalhes e aprofundamento à respeito ao fluxo de emissão da CFe, temos uma documentação específica no tema.
Comentários
0 comentário
Por favor, entre para comentar.