As soluções de componentes da Tecnospeed servem para facilitar e agilizar a vida do desenvolvedor de software. Atualmente, contamos com o componente MDFe para emissão de Manifesto Eletrônico Digital. Aqui, iremos percorrer passo a passo, a instalação, montagem e emissão de MDFe através do componente TecnoSpeed.
Primeiramente é necessário a instalação do componente. Caso haja alguma dúvida, basta seguir a documentação de Instalação.
Lembre-se sempre de instalar 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
Primeiramente é necessário adicionar o os componentes no Uses do seu projeto.
spdMDFe,
spdMDFeUtils,
spdMDFeTypes,
spdXsdMDFeUtils,
spdMDFeException,
spdMDFeDatasetX_TLB,
spdMDFeDataSetAdapter,
{$I GovTLB.inc};
const
INI_FILE = 'mdfeConfig.ini';
INI_SECTION = 'MDFE';
Em seguida é necessário criar suas variáveis, como no exemplo a baixo.
MDFe: TspdMDFe;
MDFeDataSet: TspdMDFeDatasetX;
fUtils: TspdGovUtils;
Após é necessário criar o objeto na variável:
MDFe := TspdMDFe.Create(nil);
MDFeDataSet := TspdMDFeDatasetX.Create(nil);
fUtils := TspdGovUtils.Create(nil);
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 mdfeConfig.ini com os dados preenchidos corretamente. Abaixo segue um exemplo para revisão.
[MDFE]
UF=PR
CNPJ=08087168000160
NomeCertificado=
ArquivoServidoresHom=C:\Program Files\TecnoSpeed\MDFe\Arquivos\mdfeServidoresHom.ini
ArquivoServidoresProd=C:\Program Files\TecnoSpeed\MDFe\Arquivos\mdfeServidoresProd.ini
TipoCertificado=File
DiretorioEsquemas=C:\Program Files\TecnoSpeed\MDFe\arquivos\Esquemas\
DiretorioTemplates=C:\Program Files\TecnoSpeed\MDFe\arquivos\Templates\
DiretorioLog=Log\
DiretorioLogErro=\DiretorioLogErro\
DiretorioTemporario=\DiretorioTemporario\
Ambiente=2
ValidarEsquemaAntesEnvio=0
PINCODE=
VersaoManual=3.00
MaxSizeLoteEnvio=500
DiretorioXmlDestinatario=\XmlDestinatario\
TimeOut=0
UsuarioProxy=
SenhaProxy=
Proxy=
ModoOperacao=NORMAL
CaracteresRemoverAcentos=
AtualizarArquivoServidores=1
[DAMDFE]
ModeloRetrato=C:\Program Files\TecnoSpeed\MDFe\Arquivos\Templates\3.00\DAMDFE\retrato.rtm
LogotipoEmitente=
FraseContingencia=Impressão em contingência. Obrigatória a autorização em 24 horas após esta impressão.
ModeloPaisagem=C:\Program Files\TecnoSpeed\MDFe\Arquivos\Templates\3.00\DAMDFE\paisagem.rtm
LineDelimiter=|
QtdeCopias=1
[MAIL]
AnexarDamdfePDF=1
Servidor=smtp.gmail.com
EmailRemetente=testedamdfe@gmail.com
Assunto="Exemplo de envio de DAMDFE por email"
Mensagem="O arquivo está anexo."
Usuario=testedamdfe@gmail.com
Senha=12345
TimeOut=30000
EmailDestinatario=testedamdfe@gmail.com
CCo=
CC=
Autenticacao=1
Porta=587
Caso prefira a configuração dentro do código, basta informar os valores desejados para cada uma delas.
Após todos os botões, memos e combos devidamente montados e nomeados, partimos para conferir se está tudo funcionando corretamente, primeiro listamos os certificados no FormCreate, instanciamos os componentes, passamos para o edit os CNPJs que serão utilizados e carregamos o arquivo ini através do método LoadConfig().
// Inicialização do formulário
procedure TFrmExemplo.FormCreate(Sender: TObject);
begin
//Configuração de CNPJ de SoftwareHouse emissora
edtCNPJSoftwareHouse.text := '29062609000177';
edtCNPJ.text := '29062609000177';
//lista os certificados no combo criado
MDFe.ListarCertificados(cbListaCertificados.Items);
//Carrega o arquivo ini de configuração externo
MDFe.LoadConfig();
FrmExemplo.Caption := 'Tecnospeed MDFe - Versão: ' + MDFe.Versao;
fTipoConfiguracao := tcViaIni;
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 MDF-e
ConfigurarSoftwareHouse: Método utilizado para carregar no componente dados da softwarehouse
LoadConfig: Método utilizado para carregar valores das propriedades do componente através do arquivo INI
begin
MDFe.ConfigurarSoftwareHouse(edtCNPJSoftwareHouse.Text,edtTokenSoftwareHouse.Text);
LoadConfig;
edtCNPJ.Text := MDFe.CNPJ;
edtUF.Text := MDFe.UF;
cbListaCertificados.Text := MDFe.NomeCertificado;
end;
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.
begin
CheckConfig(False);
try
(Sender as TWinControl).Enabled := False;
try
UpdateStatus('Verificando status...');
_returnValue := MDFe.StatusDoServicoMDFe;
UpdateOutput(_returnValue);
UpdateStatus('Status do Serviço OK.');
finally
(Sender as TWinControl).Enabled := true;
end;
except
UpdateStatus(' falha', False, true);
raise ;
end;
end;
ConverterTx2ParaXml: Transforma arquivo tx2 em xml adequadamente para envio à Sefaz.
try
OpnDlgTx2.FileName := 'mdfe.tx2';
if OpnDlgTx2.Execute then
begin
aXML := MDFe.ConverterTx2ParaXml(OpnDlgTx2.FileName);
UpdateOutput(aXML);
UpdateStatus('XML via Tx2 gerado com sucesso.');
edtChave.Text := GetValueChave(aXML);
end;
finally
(Sender as TWinControl).Enabled := True;
end;
AssinarMDFe: Método do componente NF-e que tem como parâmetro o XML gerado pelo Data Set e retorna o XML assinado do MDF-e para ser enviado. Obs.: Caso o XML sofra alterações após ser assinado, ocorrerá rejeição na SEFAZ.
_returnValue := mOutput.Text;
_returnValue := MDFe.AssinarMDFe(_returnValue);
PreverMDFe: Método de previsão da DAMDFE
MDFe.VisualizarMDFe(mOutput.Lines.Text );
EnviarMDFe: Método de envio da MDFe ao Webservice da Sefaz.
begin
try
_returnValue := mOutput.Text;
_returnValue := MDFe.EnviarMDFe('1', _returnValue);
UpdateOutput(_returnValue);
edtRecibo.Text := spdMDFeUtils.GetValueTag('nRec', _returnValue);
finally
(Sender as TWinControl).Enabled := true;
end;
ConsultarReciboMDFe: Método de verificação da situação da MDFe junto à sefaz através do recibo retornado após o envio.
begin
_returnValue := MDFe.ConsultarReciboMDFe(edtRecibo.Text);
UpdateOutput(_returnValue);
edtProtocolo.Text := spdMDFeUtils.GetValueTag('nProt', _returnValue);
end
ConsutarMDfe: Método para consultar MDFe no servidor
begin
_returnValue := MDFe.ConsultarMDFe(edtChave.Text);
edtProtocolo.Text := spdMDFeUtils.GetValueTag('nProt', _returnValue);
UpdateOutput(_returnValue);
end
EncerrarMDFe: Método para encerrar uma MDF-e já emitido
begin
_returnValue := MDFe.EncerrarMDFe(_Chave, _Protocolo, _DataHora, '1', _DataEnc, _CodUFEnc, _CodMunEnc, _Fuso);
end;
CancelarMDFe: Método para solicitações de cancelamento da MDFe junto à Sefaz.
begin
_DataHora := InputBox('Data e Hora do Evento', 'Digite a Data e Hora do Evento: ', FormatDateTime('YYYY-MM-DD"T"HH:MM:SS',Now) + GetTimeZone);
_returnValue := MDFe.CancelarMDFe(_Chave, _Protocolo, _Justificativa, _DataHora, '1', GetTimeZone);
end;
________________________________________________________________________________________________________________
Para mais detalhes e aprofundamento à respeito ao fluxo de emissão da MDFe, temos uma documentação específica no tema.
Comentários
0 comentário
Artigo fechado para comentários.