Para realizar o envio de um MDF-e basta utilizar o método EnviarMDFe informando o conteúdo do arquivo TX2 de envio. Segue abaixo os detalhes do método e de seu retorno.
Detalhes EnviarMDFe
Função: Realiza a emissão de um MDF-e.
Classe: TspdMDFeClientX
Método: EnviarMDFe
Tipo Retorno: spdRetEnvioListX
Parâmetros aceitos:
Nome | Tipo | Obrigatório | Valor |
aMDFe | Texto | Sim | Conteúdo do arquivo TX2 de envio. |
Delphi
procedure TfrmExemplo.btnEnviarMDFeClick(Sender: TObject);
var
_Retorno: spdRetEnvioListX;
_Manifesto: TStringList;
I: Integer;
begin
_Manifesto := TStringList.Create;
try
_Manifesto.LoadFromFile('C:\MDFe.tx2');
_Retorno := MDFe.EnviarMDFe(_Manifesto.Text);
// O count sempre será 1 quando for autorizado, pois MDF-e não aceita lote
for I := 0 to _Retorno.Count - 1 do
begin
if _Retorno.Status = Sucesso then
Result := Result + 'Mensagem: ' + _Retorno.Item(I).Mensagem +', 'Chave: '+ _Retorno.Item(I).Chave;
else
Result := Result + 'Erro: ' + _Retorno.Item(I).NomeExcecao
end;
finally
FreeAndNil(_Manifesto);
end;
end;
- O envio de MDF-e deve ser unitário, porém, para seguir um padrão de interface com os outros documentos e estarmos previamente preparados para um possível envio de lote, o retorno do envio é uma lista e deve ser tratado como um array.
- A mensagem traz o resultado da comunicação, em caso de sucesso, a mensagem será "Autorizado o uso do MDF-e" e no caso de falha, ele terá a mensagem do motivo da falha.
C#
private void buttonEnviarMDFe_Click(object sender, EventArgs e)
{
int i;
String _Manifesto;
spdRetEnvioListX Retorno = null;
DialogResult result = cdManifesto.ShowDialog();
if (result == DialogResult.OK)
{
string file = cdManifesto.FileName;
//Esse método envia o manifesto através do Componente Manager Client
_Manifesto = File.ReadAllText(file);
Retorno = MDFe.EnviarMDFe(_Manifesto);
//Exibe o retorno no memo
memoRetorno.Text = "";
if (Retorno.Status == spdManagerClientX.TStatus.Sucesso)
{
for (i = 0; i < Retorno.Count(); i++)
memoRetorno.Text = memoRetorno.Text + "Mensagem: " + Retorno.Item(i).Mensagem + " - Chave: " + Retorno.Item(i).Chave;
}
else
memoRetorno.Text = "Erro: " + Retorno.NomeExcecao + ", " + Retorno.Mensagem;
}
}
Visual Basic 6
Private Sub btnEnviarMDFe_Click()
Dim Handle As Integer
Dim Manifesto As String
Dim Retorno As spdRetEnvioListX
Dim I As Integer
cdManifesto.ShowOpen
If cdManifesto.FileName <> "" Then
Handle = FreeFile
Open cdManifesto.FileName For Input As #Handle
Manifesto = Input$(LOF(Handle), Handle)
Close #Handle
'Esse método envia o manifesto através do Componente Manager Client
Set Retorno = MDFe.EnviarMDFe(Manifesto)
'Exibe o retorno no memo
memoRetorno.Text = ""
If Retorno.Status = Sucesso Then
For I = 0 To Retorno.Count - 1
memoRetorno.Text = memoRetorno.Text + "Mensagem: " + Retorno.Item(I).Mensagem + " - Chave: " + Retorno.Item(I).Chave + vbCrLf
Next I
Else
memoRetorno.Text = "Erro: " + Retorno.NomeExcecao + ", " + Retorno.Mensagem
End If
cdManifesto.FileName = ""
End If
End Sub
Retorno
O tipo spdRetEnvioListX possui os seguintes campos:
Campo | Tipo | Descrição |
Status | Constante | Retorna o status da operação: Sucesso ou Erro. |
NomeExcecao | Texto | Em caso de erro retorna a classe da Exception. |
Mensagem | Texto | Retorna a descrição da resposta do servidor. |
Item | Array do tipo spdRetEnvioX | Lista com os retornos. |
O tipo spdRetEnvioX possui os seguintes campos:
Campo | Tipo | Descrição |
CodigoDoc | Texto | Código do MDF-e. |
Chave | Texto | Chave do MDF-e. |
CodigoStatus | Texto | Código cStat da SEFAZ. |
SituacaoEvento | Texto |
Situação do evento. Exemplo: AUTORIZADA, REJEITADA. |
Situacao | Texto |
Situação do MDF-e. Exemplo: AUTORIZADA, REJEITADA, REGISTRADA. |
Mensagem | Texto | Retorna a resposta do servidor. |
Envio em Contingência
Para fazer o envio de MDF-e em contingência utilizando o Manager Client, devem ser executados três passos:
- No TX2 de envio mudar o campo tpEmis_15 para o valor 2. (Indica o modo de emissão em contingência)
- Utilizando o método Executar do Manager Client para mudar o modo de operação do Manager SaaS/EDoc, informando modoOperacao=Contingencia no parâmetro conteúdo e MODO no parâmetro comando, conforme exemplo abaixo:
var
_Conteudo: TStringList;
begin
_Conteudo := TStringList.Create;
try
_Conteudo.LoadFromFile('C:\MDFeModo.tx2');
_Retorno := MDFe.Executar('MODO',_Conteudo.text);
finally
FreeAndNil(_Conteudo);
end;
end;
- Após a alteração do modo operação, utilizar o método EnviarMDFe com o TX2 alterado normalmente.
Comentários
0 comentário
Por favor, entre para comentar.