Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 2396 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

Boa tarde. Eu estou homologando a amissão de Notas de Serviços em nosso sistema, cheguei a gerar o arquivo .RPS e na hora de enviar da o seguinte erro :

image.png.65a69aa0e5011717179f7488e078751b.png

Seguem os arquivos xml da rps, e o recibo de entrega e também o comprovante do envio do lote.

Não achei o arquivo xml da NFSe !!!!

Alguém sabe o que estou fazendo errado ??

3518040893460300017256000000000000001-rps.xml

3-env-lot.xml

3518040893460300017256000000000000001-nfse.pdf

_____________________________________

Junior - Rhovanion Tecnologia

(11) 4224.6543

  • Membros Pro
Postado

Bom dia @Italo Jurisato Junior

Muito obrigado por responder !!

Com o programa de exemplo funciona 100%, este é um teste implementando no meu código.

Qual seria a propriedade para eu verificar se está consultando o lote após o envio ??

Neste trecho do código dá o erro :

 

image.png.f7ae97d68e7a81611ca381ceda51796f.png

_____________________________________

Junior - Rhovanion Tecnologia

(11) 4224.6543

  • Membros Pro
Postado

@Italo Jurisato Junior depois de muito teste ví onde está o erro. É que estava tentando pegar a informação do componente da NFSe com o número da nota fiscal e o mesmo está em branco, pois não houve retorno do método enviar.

Percebi debugando que o método sempre retorna como resultado False e por isso não tenho as informações do número de nota fiscal, já que o mesmo não foi validado.

Pergunta, pq o método enviar me retorna em branco e como devo tratar este tipo de retorno ?

Não consegui achar esta informação no exemplo do ACBrNFSe !!!

 

Segue a configuração do componente, talvez esteja faltando algo :

		if Result then
		begin
			v_nome_arquivo := l_client.FieldByName('C_CAMINHO_ARQ_INI_NFSE').AsString + '\Cidades.ini';
			if not FileExists(v_nome_arquivo) then
			begin
				Result := False;
				MessageDlg('Arquivo de Parâmetro não encontrado: ' + v_nome_arquivo, mtError, [mbOk], 0);
			end
			else
			begin
				v_memo_ini := TMemIniFile.Create(v_nome_arquivo);
				l_provedor := v_memo_ini.ReadString(IntToStr(g_num_municipio_servicos), 'Provedor', '');
				v_memo_ini.Free;
			end;
		end;

		if Result then
		begin
			try
				with l_acbr.Configuracoes do
				begin
					with Certificados do
					begin
						NumeroSerie := l_client.FieldByname('C_NUMERO_SERIE_CERT_DIGITAL').AsString;
						if not VerificarValidade then
						begin
							MessageDlg('Certificado Digital Vencido.'+#13#10+#13#10+
								'Impossível CONTINUAR !', mtError, [mbOk], 0);
							Result := False;
						end;
						if Trim(l_client.FieldByName('C_SENHA_CERT_DIGITAL').AsString) <> '' then
						begin
							Senha := F_Uncript(
								l_client.FieldByName('C_SENHA_CERT_DIGITAL').AsString);
						end;
					end;

					if Result  then
					begin
						with Geral do
						begin
							if l_client.FieldByName('C_TIPO_CONEXAO').AsString = 'SSL' then
							begin
								SSLLib := libOpenSSL;
							end
							else if l_client.FieldByName('C_TIPO_CONEXAO').AsString = 'WynCript' then
							begin
								SSLLib := libWinCrypt;
							end
							else if l_client.FieldByName('C_TIPO_CONEXAO').AsString = 'Capicom Delphi SOAP' then
							begin
								SSLLib := libCapicomDelphiSoap;
							end
							else
							begin
								SSLLib := libCapicom;
							end;

							with Emitente do
							begin
								CNPJ := g_cnpj_empresa;
								InscMun := g_inscr_municipal;
								RazSocial := g_nome_nf_empresa;
								WebUser := l_client.FieldByname('C_USUARIO_WS_NFSE').AsString;
								WebSenha := l_client.FieldByname('C_SENHA_WS_NFSE').AsString;
								WebFraseSecr := '';
							end;

							PathIniCidades := l_client.FieldByname('C_CAMINHO_ARQ_INI_NFSE').AsString;
							PathIniProvedor := l_client.FieldByname('C_CAMINHO_ARQ_INI_NFSE').AsString;
							UserWeb := l_client.FieldByname('C_USUARIO_WS_NFSE').AsString;
							SenhaWeb := l_client.FieldByname('C_SENHA_WS_NFSE').AsString;
							CodigoMunicipio := l_client.FieldByname('C_NUM_MUN_NF').AsInteger;
							FormaEmissao := F_Forma_Emissao(l_tipo_emissao);
							Salvar := True;
							ConsultaLoteAposEnvio := True;
							SetConfigMunicipio;
						end;

						with Arquivos do
						begin
							PathSalvar := l_client.FieldByName('C_CAMINHO_SALVAR_E_NFSE').AsString;
							PathSchemas := l_client.FieldByName('C_CAMINHO_SCHEMAS_NFSE').AsString;
							PathGer := l_client.FieldByName('C_CAMINHO_LOGS_NFSE').AsString;
							AdicionarLiteral := True;
							EmissaoPathNFSe := True;
							SepararPorMes := False;
							SepararPorCNPJ := False;
							NomeLongoNFSe := True;
						end;

						with WebServices do
						begin
							UF := g_uf_origem_empresa;
							Ambiente := F_Ambiente_Emissao(l_client.FieldByName('C_AMBIENTE_NFSE').AsInteger);
							Visualizar := True;
							Salvar := True;
							if Trim(l_client.FieldByName('C_SENHA_CERT_DIGITAL').AsString) <> '' then
							begin
								ProxyPass := F_Uncript(
									l_client.FieldByName('C_SENHA_CERT_DIGITAL').AsString);
							end;
						end;
					end;
				end;

				if Result then
				begin

					RLPrinter.PrinterName := F_Nome_Impressora(g_cod_impressora_nfe);

					if not DirectoryExists(l_client.FieldByName('C_CAMINHO_SCHEMAS_NFSE').AsString) then
					begin
						CreateDir(l_client.FieldByName('C_CAMINHO_SCHEMAS_NFSE').AsString);
					end;

					if not DirectoryExists(l_client.FieldByName('C_CAMINHO_SALVAR_E_NFSE').AsString) then
					begin
						CreateDir(l_client.FieldByName('C_CAMINHO_SALVAR_E_NFSE').AsString);
					end;

					if not DirectoryExists(l_client.FieldByName('C_CAMINHO_SALVAR_PDF_NFSE').AsString) then
					begin
						CreateDir(l_client.FieldByName('C_CAMINHO_SALVAR_PDF_NFSE').AsString);
					end;
					l_acbr_danfe.PathPDF := l_client.FieldByName('C_CAMINHO_SALVAR_PDF_NFSE').AsString;

					v_sql := 'select C_COD_EMPRESA, C_LOGO_EMPRESA '+
								'from EM0100 '+
								'where C_COD_EMPRESA = '''+g_cod_empresa+'''';
					F_Query(MD.QGERAL, MD.cdsGeral, v_sql, 'O');

					v_imagem := TImage.Create(g_component);
					v_stream := MD.cdsGeral.CreateBlobStream(MD.cdsGeral.FieldByName('C_LOGO_EMPRESA'), bmRead);
					v_imagem.Picture.Bitmap.LoadFromStream(v_stream);
					v_imagem.Picture.SaveToFile(l_client.FieldByName('C_CAMINHO_SALVAR_E_NFSE').AsString+'\Logo.bmp');
					v_stream.Free;
					v_imagem.Free;

					with l_acbr.DANFSE do
					begin
						//Logo := l_client.FieldByName('C_CAMINHO_SALVAR_E_NFSE').AsString+'\Logo.bmp';
						PrestLogo := l_client.FieldByName('C_CAMINHO_SALVAR_E_NFSE').AsString+'\Logo.bmp';
						TipoDANFSE := tpPadrao;
					end;
				end;
			except on E:Exception do
				begin
					MessageDlg('Erro ao CARREGAR as CONFIGURAÇÕES do CERTIFICADO DIGITAL. '+#13#10+#13#10+
								  'Erro: '+E.Message, mterror, [mbOk], 0);
					Result := False;
				end;
			end;
		end;

 

_____________________________________

Junior - Rhovanion Tecnologia

(11) 4224.6543

  • Consultores
Postado

Boa tarde Edevair,

Primeiramente peço para que não post trechos longos de código, procure sempre colocar em um arquivo texto e anexar na postagem.

O Consultar lote após o envio é um propriedade de configuração do componente.

O provedor Ginfes segue a versão 1 do layout da ABRASF, como que funciona:

Se a propriedade de configuração: ConsultarLoteAposEnvio = False

1. Alimentar o componente com os dados do Serviço;

2. Executar o método Enviar (este se encarrega de gerar o XML do RPS, montar, assinar e validar o Lote, por fim enviar para o webservice do provedor);

3. É retornado o numero do protocolo que atesta que o lote foi recebido pelo webservice, esse retorno é salvo em disco caso o componente esteja configurado para isso;

4. Executar o método ConsultarSituacao (devemos passar para esse método o numero do protocolo);

5. É retornado a situação do lote, que pode ser: 1 = lote não enviado, 2 = lote em processamento, 3 = lote processado com falhas, 4 = lote processado com sucesso;

6. Se a situação for 2 devemos aguardar alguns segundos e Consultar a Situação novamente, por outro lado se for 3 ou 4 devemos executar o método ConsultarLoteRps passando como parâmetro o numero do protocolo e do lote;

7. Se a situação era 3 será retornado a lista de rejeições, por outro lado se a situação era 4 será retornado o XML da NFS-e.

8. Se retornou o XML da NFS-e devemos carregar o mesmo através do método LoadFromFile e depois executar o método Imprimir, para que tenhamos o DANFSE impresso.

Se a propriedade de configuração: ConsultarLoteAposEnvio = True

1. Alimentar o componente com os dados do Serviço;

2. Executar o método Enviar (ele vai fazer tudo o que foi descrito acima);

Para saber mais sobre o ACBrNFSe assista o vídeo: 

 

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Membros Pro
Postado

@Italo Jurisato Junior muito obrigado pela resposta, porém mais do mesmo. Já ví o vídeo uma centena de vezes e todas as rotinas que vc descreveu estão sendo feitas rigorosamente conforme você postou.

De acordo com minha resposta :

19 horas atrás, Edevair Viesa Junior disse:

Percebi debugando que o método sempre retorna como resultado False e por isso não tenho as informações do número de nota fiscal, já que o mesmo não foi validado.

O problema não está na forma em como usar o componente e sim que ele não retorna NADA após o método enviar, como vou consultar o lote se não tenho NENHUMA informação ?????? Não tenho número de protocolo e mesmo com a propriedade ConsultarLOteAposEnvio = True o componente no método Enviar retorna False e não faz nada !!!

Não estou vendo caminhos para conseguir resolver o problema...

Este retorno como False não deveria gerar algum log ou dar alguma mensagem do motivo de retornar False no método enviar ???

_____________________________________

Junior - Rhovanion Tecnologia

(11) 4224.6543

  • Moderadores
Postado
20 horas atrás, Edevair Viesa Junior disse:

Pergunta, pq o método enviar me retorna em branco e como devo tratar este tipo de retorno ?

O componente deve gerar uma exceção em caso de erro no envio.

No seu código abaixo você está ignorando a exceção gerada pelo componente e apenas atribuindo False ao retorno do envio:

Em 27/04/2018 at 10:23, Edevair Viesa Junior disse:

image.png.f7ae97d68e7a81611ca381ceda51796f.png

Você pode inserir no except nesse trecho o tratamento de erros.

 

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • Membros Pro
Postado
1 minuto atrás, BigWings disse:

O componente deve gerar uma exceção em caso de erro no envio.

No seu código abaixo você está ignorando a exceção gerada pelo componente e apenas atribuindo False ao retorno do envio:

Você pode inserir no except nesse trecho o tratamento de erros.

 

Muito Obrigado por responder...

Show. Porém como trato os erros se não tenho nenhum retorno no método ??

No programa exemplo não há nenhuma tratativa de um retorno com erro. Tem alguma propriedade que preciso setar para obter tais informações ??

_____________________________________

Junior - Rhovanion Tecnologia

(11) 4224.6543

  • Moderadores
Postado
2 minutos atrás, Edevair Viesa Junior disse:

Show. Porém como trato os erros se não tenho nenhum retorno no método ??

Eu apenas replico a exceção do componente:

try
  ACBrNFSe1.Enviar(vNumLote);
except
  on E:Exception do
    ShowMessage('Erro no envio: ' + E.Message);
end;

 

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • Membros Pro
Postado
3 minutos atrás, BigWings disse:

Eu apenas replico a exceção do componente:


try
  ACBrNFSe1.Enviar(vNumLote);
except
  on E:Exception do
    ShowMessage('Erro no envio: ' + E.Message);
end;

 

Rsss. Eu acabei de fazer isso e vc me respondeu.

Segue a tela de erro :

 

Erro.png

Estou configurando o componente para usar wincrypt

_____________________________________

Junior - Rhovanion Tecnologia

(11) 4224.6543

  • Membros Pro
Postado

Mudei para Capicom e agora retorna o seguinte erro :

image.png.d67a227435b0c273a19563f1bc5ce81e.png

Estou configurando assim :

if l_client.FieldByName('C_TIPO_CONEXAO').AsString = 'SSL' then
begin
	SSLLib        := libOpenSSL;
	SSLCryptLib   := cryOpenSSL;
	SSLHttpLib    := httpOpenSSL;
	SSLXmlSignLib := xsXmlSec;
end
else if l_client.FieldByName('C_TIPO_CONEXAO').AsString = 'WinCript' then
begin
	SSLLib        := libWinCrypt;
	SSLCryptLib   := CryWinCrypt;
	SSLHttpLib    := httpWinHttp;
	SSLXmlSignLib := xsLibXML2;
end
else if l_client.FieldByName('C_TIPO_CONEXAO').AsString = 'Capicom Delphi SOAP' then
begin
	SSLLib        := libCapicomDelphiSoap;
	SSLCryptLib   := cryCapicom;
	SSLHttpLib    := httpWinINet;
	SSLXmlSignLib := xsMsXmlCapicom;
end
else
begin
	SSLLib        := libCapicom;
	SSLCryptLib   := cryCapicom;
	SSLHttpLib    := httpWinINet;
	SSLXmlSignLib := xsMsXmlCapicom;
end;

 

_____________________________________

Junior - Rhovanion Tecnologia

(11) 4224.6543

  • Membros Pro
Postado

@BigWings resolví configurando o TLS corretamente.

Agora a mensagem é outra :

image.png.fcaf30cfc4155f57c1dcb37798b47eb6.png

Será que tem que fazer alguma solicitação / homologação junto ao provedor ??

Só pra cosntar estou usando nossa prórpia empresa como teste de envio e emitimos NFSe via site do ginfes normalmente !

Seguem em anexo o PDF e o XML do RPS gerados !!!

No xml pude verificar na tag prestador -> cnpj que o mesmo está preenchido corretamente, mas no PDF está tudo 0 (zero)

Será que estou configurando o xml errado ??

3518040893460300017256000000000000009-rps.xml

3518040893460300017256000000000000009-nfse.pdf

_____________________________________

Junior - Rhovanion Tecnologia

(11) 4224.6543

  • Consultores
Postado

Bom dia Edevair,

Alguns provedores requerem que seja feito um cadastro para emitir via site e outro via Webservice.

Quanto ao PDF não vai sair mesmo, uma vez que você gerou o PDF com base no XML do RPS que não tem todos os dados do Prestador, somente o CNPJ e Inscrição Municipal.

O PDF do DANFSE tem que ser gerado com base no XML da NFS-e.

Esse XML só temos quando o RPS é recepcionado e processado com sucesso pelo Webservice do provedor.

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Membros Pro
Postado
3 horas atrás, Italo Jurisato Junior disse:

Bom dia Edevair,

Alguns provedores requerem que seja feito um cadastro para emitir via site e outro via Webservice.

Quanto ao PDF não vai sair mesmo, uma vez que você gerou o PDF com base no XML do RPS que não tem todos os dados do Prestador, somente o CNPJ e Inscrição Municipal.

O PDF do DANFSE tem que ser gerado com base no XML da NFS-e.

Esse XML só temos quando o RPS é recepcionado e processado com sucesso pelo Webservice do provedor.

Bom dia @Italo Jurisato Junior muito obrigado pelo retorno, eu realmente havia imaginado isso mesmo.

Vou entrar em contato com o provedor GINFES para ver o procedimento. Assim que me responderem posto os resultados.

 

Muito Obrigado !

  • Curtir 1

_____________________________________

Junior - Rhovanion Tecnologia

(11) 4224.6543

×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.