Ir para conteúdo
  • Cadastre-se

peterson161

Membros
  • Total de ítens

    407
  • Registro em

  • Última visita

  • Days Won

    7

Tudo que peterson161 postou

  1. \Pacotes\Delphi\ACBrNFe2\ACBrNFeDanfeRVCodeBase.dpk
  2. Sugestão enviada para o SVN, revisão 3586.
  3. Página 39 do Manual de Orientação: Mensagem de erro: 610 - Rejeição: Total da NF difere do somatório dos Valores compõe o valor Total da NF. (NT 2011/005) Se NF-e de Saída (tpNF=1): -Total do vNF (id:W16) difere do somatório de: (+) vProd (id:W07) ==> 8.00 (-) vDesc (id:W10) ==> 0.00 (+) vST (id:W06) ==> 0.00 (+) vFrete (id:W08) ==> 0.00 (+) vSeg (id:W09) ==> 0.00 (+) vOutro (id:W15) ==> 0.00 (+) vII (id:W11) ==> 0.00 (+) vIPI (id:W12) ==> 0.00 (+) vServ (id:W18) ==> 8.00 Então: vNF (id:W16) ==> 16.00 Mensagem de erro do arquivo XML: Total da NF difere do somatorio dos Valores compoe o valor Total da NF. (vNF informado: 8.00, vNF calculado: 16.00) (Ou você pode eliminar o vServ)
  4. Procure no Google por "rave_be_5_0_8.exe" e instale esta versão.
  5. Hum... lendo novamente, estou tendo a mesma impressão... foi mal. Então, Alexandre, me desculpe.
  6. O componente é excelente, é o melhor que você poderá encontrar por aí. Pergunto: Por que não não gerar seus XML's por ele ? Sem contar que seriam gerados da maneira correta.
  7. Seus XML's estão errados. Você colocou a informação: "xmlns="http://www.portalfiscal.inf.br/nfe" em todos os grupos, enquanto que deveria ser colocada apenas uma vez no grupo :
  8. E o resultado final fica mais ou menos assim: ******************************************************************************************* AMBIENTE: 2 - Homologação ******************************************************************************************* ------------------------------------------------------------------------------------------- => Enviando lote de nota(s) fiscal(is) ------------------------------------------------------------------------------------------- 25/05/2012 09:34:11 103 - Lote recebido com sucesso Recibo nº 351000062026233 ------------------------------------------------------------------------------------------- => Consultando recibo nº 351000062026233 ------------------------------------------------------------------------------------------- Nota fiscal Número do protocolo Status da NF-e ----------- ----------------------------------- --------------------------------------- 000.000.057 135120003247292 25/05/2012 09:34:11 100 - Autorizado o uso da NF-e ------------------------------------------------------------------------------------------- => Imprimindo DANFE (1 via de cada) ------------------------------------------------------------------------------------------- Nota fiscal Cliente ----------- ---------------------------------------------------------------------------- 000.000.057 NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL ------------------------------------------------------------------------------------------- Quantidade de DANFES impressos: 2 ------------------------------------------------------------------------------------------- => Iniciando o envio do e-mail da nota fiscal para seu destinatário ------------------------------------------------------------------------------------------- Quantidade de notas fiscais no lote: 1 Quantidade de notas fiscais autorizadas e/ou canceladas: 1 ------------------------------------------------------------------------------------------- => Enviando e-mail da nota fiscal (Envio nº 1 de 1) ------------------------------------------------------------------------------------------- Nota fiscal: 000.000.057 Cliente: NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FI Preparando mensagem Anexando arquivo XML da NF-e Anexando arquivo PDF do DANFE Conectando-se ao servidor SMTP: smtp.jbrt.com.br ... => Conectado! Enviando e-mail para o destinatário: peterson@jbrt.com.br E-mail enviado ------------------------------------------------------------------------------------------- => Fim do envio de e-mails ------------------------------------------------------------------------------------------- Quantidade de e-mails enviados: 1 ------------------------------------------------------------------------------------------- => Iniciando o envio do e-mail da fatura para o departamento financeiro ------------------------------------------------------------------------------------------- Responsável pelo departamento financeiro: PETERSON Quantidade de faturas: 1 ------------------------------------------------------------------------------------------- => Enviando e-mail da fatura (Envio nº 1 de 1) ------------------------------------------------------------------------------------------- Fatura: 000.000.057 Sacado: CONFECÇÕES CAEDU LTDA Preparando mensagem Conectando-se ao servidor SMTP: smtp.jbrt.com.br ... => Conectado! Enviando e-mail para: peterson@jbrt.com.br E-mail enviado ------------------------------------------------------------------------------------------- => Fim do envio de e-mails ------------------------------------------------------------------------------------------- Quantidade de emails enviados: 1
  9. Basicamente todos os dados do XML eu gravo no Banco de dados, inclusive o XML completo. Vou te passar trechos do meu sistema para você ver como eu gravo no Banco de Dados. O Componente nos retorna os resultados da Sefaz e o sistema os exibe em memo chamado MemoStatus: Envio de lote. Neste envio já recebemos o número do recibo: function TF_StatusEnvioNFe.EnvioNFe: Boolean; var i: Integer; begin try MemoStatus.Lines.Add('-------------------------------------------------------------------------------------------'); MemoStatus.Lines.Add(' => Enviando lote de nota(s) fiscal(is)'); MemoStatus.Lines.Add('-------------------------------------------------------------------------------------------'); F_Menu.ACBrNFe1.NotasFiscais.Assinar; F_Menu.ACBrNFe1.NotasFiscais.Valida; F_Menu.ACBrNFe1.WebServices.Enviar.Lote := FNFe.FEnvio.FNumLote; F_Menu.ACBrNFe1.WebServices.Enviar.Executar; FInfoRecibo := F_Menu.ACBrNFe1.WebServices.Enviar.Recibo; FInfoStat := IntToStr(F_Menu.ACBrNFe1.WebServices.Enviar.cStat); FInfoMotivo := F_Menu.ACBrNFe1.WebServices.Enviar.xMotivo; FInfoDataHora := DateTimeToStr(F_Menu.ACBrNFe1.WebServices.Enviar.dhRecbto); MemoStatus.Lines.Add(' ' + FInfoDataHora + ' ' + FInfoStat + ' - ' + FInfoMotivo); if F_Menu.ACBrNFe1.WebServices.Enviar.cStat = 103 then begin for i := 0 to (F_Menu.ACBrNFe1.NotasFiscais.Count - 1) do begin qryNfiscal.Close; qryNfiscal.SQL.Clear; qryNfiscal.SQL.Add('SELECT tbl_NOTA_FISCAL.*, ' + 'tbl_EMITENTE.CPF_CNPJ_EMIT FROM ' + 'tbl_NOTA_FISCAL LEFT OUTER JOIN tbl_EMITENTE ' + 'ON tbl_NOTA_FISCAL.ID_EMIT_NF = ' + 'tbl_EMITENTE.ID_EMIT ' + 'WHERE tbl_NOTA_FISCAL.NUM_NF = ' + IntToStr(F_Menu.ACBrNFe1.NotasFiscais.Items[i].NFe.Ide.nNF) + ' AND ' + 'tbl_EMITENTE.CPF_CNPJ_EMIT = ' + F_Menu.ACBrNFe1.NotasFiscais.Items[i].NFe.Emit.CNPJCPF); qryNfiscal.Open; qryNfiscal.Edit; qryNFiscal.FieldByName('SITUACAO_NF').Value := 1; qryNFiscal.FieldByName('NUM_RECIBO_NF').Value := FInfoRecibo; qryNFiscal.Post; end; MemoStatus.Lines.Add(' Recibo nº ' + FInfoRecibo); MemoStatus.Lines.Add(' '); Result := True; end else begin Disponivel; Result := False; end; except on E: Exception do begin MemoStatus.Lines.Add(' '); MemoStatus.Lines.Add(' ERRO: Não foi possível enviar o lote de NF-e'); MemoStatus.Lines.Add(' MOTIVO: ' + E.Message); Disponivel; end; end; end; Com o número do recibo em nosso poder, fazemos a consulta dele para saber o resultado do processamento das notas fiscais contidas no lote: function TF_StatusEnvioNFe.ConsultaReciboNFe: Boolean; var sRecibo: String; i: Integer; begin try if FAcao = taEnvioNFe then sRecibo := F_Menu.ACBrNFe1.WebServices.Enviar.Recibo else sRecibo := FNFe.FConsultaRecibo.FNumRecibo; MemoStatus.Lines.Add('-------------------------------------------------------------------------------------------'); MemoStatus.Lines.Add(' => Consultando recibo nº ' + sRecibo); MemoStatus.Lines.Add('-------------------------------------------------------------------------------------------'); F_Menu.ACBrNFe1.WebServices.Retorno.Recibo := sRecibo; F_Menu.ACBrNFe1.WebServices.Retorno.Executar; MemoStatus.Lines.Add(' Nota fiscal Número do protocolo Status da NF-e'); MemoStatus.Lines.Add(' ----------- ----------------------------------- ---------------------------------------'); for i := 0 to (F_Menu.ACBrNFe1.WebServices.Retorno.NFeRetorno.ProtNFe.Count - 1) do begin FInfoDataHora := DateTimeToStr(F_Menu.ACBrNFe1.WebServices.Retorno.NFeRetorno.ProtNFe.Items[i].dhRecbto); FInfoProtocolo := F_Menu.ACBrNFe1.WebServices.Retorno.NFeRetorno.ProtNFe.Items[i].nProt; FInfoStat := IntToStr(F_Menu.ACBrNFe1.WebServices.Retorno.NFeRetorno.ProtNFe.Items[i].cStat); FInfoMotivo := F_Menu.ACBrNFe1.WebServices.Retorno.NFeRetorno.ProtNFe.Items[i].xMotivo; FInfoNotaFiscal := Copy(F_Menu.ACBrNFe1.WebServices.Retorno.NFeRetorno.ProtNFe.Items[i].chNFe, 26, 3) + '.' + Copy(F_Menu.ACBrNFe1.WebServices.Retorno.NFeRetorno.ProtNFe.Items[i].chNFe, 29, 3) + '.' + Copy(F_Menu.ACBrNFe1.WebServices.Retorno.NFeRetorno.ProtNFe.Items[i].chNFe, 32, 3); // Grava as informações recebidas pela Sefaz no banco de dados if FAcao = taEnvioNFe then begin qryNfiscal.Close; qryNfiscal.SQL.Clear; qryNfiscal.SQL.Add('SELECT tbl_NOTA_FISCAL.*, ' + 'tbl_EMITENTE.CPF_CNPJ_EMIT FROM ' + 'tbl_NOTA_FISCAL LEFT OUTER JOIN tbl_EMITENTE ' + 'ON tbl_NOTA_FISCAL.ID_EMIT_NF = ' + 'tbl_EMITENTE.ID_EMIT ' + 'WHERE tbl_NOTA_FISCAL.NUM_NF = ' + IntToStr(F_Menu.ACBrNFe1.NotasFiscais.Items[i].NFe.Ide.nNF) + ' AND ' + 'tbl_EMITENTE.CPF_CNPJ_EMIT = ' + F_Menu.ACBrNFe1.NotasFiscais.Items[i].NFe.Emit.CNPJCPF); qryNfiscal.Open; qryNfiscal.Edit; qryNFiscal.FieldByName('CHAVE_NFE').Value := F_Menu.ACBrNFe1.NotasFiscais.Items[i].NFe.procNFe.chNFe; case F_Menu.ACBrNFe1.NotasFiscais.Items[i].NFe.procNFe.cStat of 100: qryNFiscal.FieldByName('SITUACAO_NF').Value := 2; 110: qryNFiscal.FieldByName('SITUACAO_NF').Value := 3; end; qryNFiscal.FieldByName('NUM_PROT_AUTO_NF').Value := FInfoProtocolo; qryNFiscal.FieldByName('DH_PROT_AUTO_NF').Value := FInfoDataHora; qryNFiscal.FieldByName('XML_NFE').Value := F_Menu.ACBrNFe1.NotasFiscais.Items[i].XML; if F_Menu.ACBrNFe1.NotasFiscais.Items[i].NFe.procNFe.cStat > 200 then //in [100, 110] then begin qryNFiscal.FieldByName('SITUACAO_NF').Value := 0; qryNFiscal.FieldByName('NUM_PROT_AUTO_NF').Value := ''; qryNFiscal.FieldByName('DH_PROT_AUTO_NF').Value := ''; end; qryNfiscal.Post; end; if FAcao = taConsultaNFe then begin qryNfiscal.Close; qryNfiscal.SQL.Clear; qryNfiscal.SQL.Add('SELECT tbl_NOTA_FISCAL.*, ' + 'tbl_EMITENTE.CPF_CNPJ_EMIT FROM ' + 'tbl_NOTA_FISCAL LEFT OUTER JOIN tbl_EMITENTE ' + 'ON tbl_NOTA_FISCAL.ID_EMIT_NF = ' + 'tbl_EMITENTE.ID_EMIT ' + 'WHERE tbl_NOTA_FISCAL.NUM_NF = ' + IntToStr(F_Menu.ACBrNFe1.NotasFiscais.Items[i].NFe.Ide.nNF) + ' AND ' + 'tbl_EMITENTE.CPF_CNPJ_EMIT = ' + F_Menu.ACBrNFe1.NotasFiscais.Items[i].NFe.Emit.CNPJCPF); qryNfiscal.Open; qryNfiscal.Edit; case F_Menu.ACBrNFe1.WebServices.Retorno.NFeRetorno.ProtNFe.Items[i].cStat of 100: begin // Autorizada qryNFiscal.FieldByName('SITUACAO_NF').Value := 2; if qryNFiscal.FieldByName('NUM_PROT_AUTO_NF').Value > '' then else begin qryNFiscal.FieldByName('NUM_PROT_AUTO_NF').Value := FInfoProtocolo; qryNFiscal.FieldByName('DH_PROT_AUTO_NF').Value := FInfoDataHora; end; qryNFiscal.FieldByName('XML_NFE').Value := F_Menu.ACBrNFe1.NotasFiscais.Items[i].XML; end; 110: begin // Denegada qryNFiscal.FieldByName('SITUACAO_NF').Value := 3; if qryNFiscal.FieldByName('NUM_PROT_AUTO_NF').Value > '' then else begin qryNFiscal.FieldByName('NUM_PROT_AUTO_NF').Value := FInfoProtocolo; qryNFiscal.FieldByName('DH_PROT_AUTO_NF').Value := FInfoDataHora; end; qryNFiscal.FieldByName('XML_NFE').Value := F_Menu.ACBrNFe1.NotasFiscais.Items[i].XML; end; 101: begin // Cancelada qryNFiscal.FieldByName('SITUACAO_NF').Value := 5; if qryNFiscal.FieldByName('NUM_PROT_AUTO_NF').Value = '' then else begin qryNFiscal.FieldByName('NUM_PROT_CANC_NF').Value := FInfoProtocolo; qryNFiscal.FieldByName('DH_PROT_CANC_NF').Value := FInfoDataHora; end; qryNFiscal.FieldByName('XML_CANC_NFE').Value := F_Menu.ACBrNFe1.NotasFiscais.Items[i].XML; end else begin qryNFiscal.FieldByName('SITUACAO_NF').Value := 0; qryNFiscal.FieldByName('NUM_PROT_AUTO_NF').Value := ''; qryNFiscal.FieldByName('DH_PROT_AUTO_NF').Value := ''; qryNFiscal.FieldByName('XML_NFE').Value := ''; end; end; // case F_Menu.ACBrNFe1.WebServices.Retorno.NFeRetorno.ProtNFe.Items[i].cStat qryNfiscal.Post; end; // if FAcao = taConsultaNFe // Fim da gravação no banco de dados. MemoStatus.Lines.Add(' ' + FInfoNotaFiscal + ' ' + FInfoProtocolo + ' ' + FInfoDataHora + ' ' + FInfoStat + ' - ' + FInfoMotivo); end; // for i := 0 to (F_Menu.ACBrNFe1.WebServices.Retorno.NFeRetorno.ProtNFe.Count - 1) MemoStatus.Lines.Add(' '); Result := True; except on E: Exception do begin MemoStatus.Lines.Add(' '); MemoStatus.Lines.Add(' ERRO: Não foi possível consultar o recibo'); MemoStatus.Lines.Add(' MOTIVO: ' + E.Message); Disponivel; Result := False; end; end; // try end; Se precisar cancelar uma nota: function TF_StatusEnvioNFe.CancelamentoNFe: Boolean; var i, iCaracteres, iCaractereAtual: Integer; begin try MemoStatus.Lines.Add('-------------------------------------------------------------------------------------------'); MemoStatus.Lines.Add(' => Cancelando NF-e com chave de acesso nº ' + FNFe.FCancelamento.FChaveNFe); MemoStatus.Lines.Add('-------------------------------------------------------------------------------------------'); if F_Menu.ACBrNFe1.NotasFiscais.Count > 0 then begin F_Menu.ACBrNFe1.WebServices.Cancelamento.NFeChave := FNFe.FCancelamento.FChaveNFe; F_Menu.ACBrNFe1.WebServices.Cancelamento.Justificativa := FNFe.FCancelamento.FJustificativa; F_Menu.ACBrNFe1.WebServices.Cancelamento.Protocolo := FNFe.FCancelamento.FProtocolo; F_Menu.ACBrNFe1.WebServices.Cancelamento.Executar; FInfoProtocolo := F_Menu.ACBrNFe1.WebServices.Cancelamento.Protocolo; FInfoMotivo := F_Menu.ACBrNFe1.WebServices.Cancelamento.xMotivo; FInfoStat := IntToStr(F_Menu.ACBrNFe1.WebServices.Cancelamento.cStat); FInfoDataHora := DateTimeToStr(F_Menu.ACBrNFe1.WebServices.Cancelamento.DhRecbto); iCaracteres := Length(FNFe.FCancelamento.FJustificativa) div 57; if iCaracteres = 0 then MemoStatus.Lines.Add(' Justificativa: ' + FNFe.FCancelamento.FJustificativa) else begin iCaractereAtual := 0; for i := 1 to (iCaracteres + 1) do begin iCaractereAtual := iCaractereAtual + 57; MemoStatus.Lines.Add(' Justificativa: ' + Copy(FNFe.FCancelamento.FJustificativa, (iCaractereAtual - 56), iCaractereAtual)); end; end; if FInfoStat <> '101' then begin Disponivel; MemoStatus.Lines.Add(' '); Result := False; end else begin MemoStatus.Lines.Add(' Status...: ' + FInfoStat + ' - ' + FInfoMotivo); MemoStatus.Lines.Add(' Protocolo: ' + FInfoProtocolo + ' ' + FInfoDataHora); qryNfiscal.Close; qryNfiscal.SQL.Clear; qryNfiscal.SQL.Add('SELECT tbl_NOTA_FISCAL.*, ' + 'tbl_EMITENTE.CPF_CNPJ_EMIT FROM ' + 'tbl_NOTA_FISCAL LEFT OUTER JOIN tbl_EMITENTE ' + 'ON tbl_NOTA_FISCAL.ID_EMIT_NF = ' + 'tbl_EMITENTE.ID_EMIT ' + 'WHERE tbl_NOTA_FISCAL.NUM_NF = ' + IntToStr(F_Menu.ACBrNFe1.NotasFiscais.Items[0].NFe.Ide.nNF) + ' AND ' + 'tbl_EMITENTE.CPF_CNPJ_EMIT = ' + F_Menu.ACBrNFe1.NotasFiscais.Items[0].NFe.Emit.CNPJCPF); qryNfiscal.Open; qryNfiscal.Edit; qryNFiscal.FieldByName('SITUACAO_NF').Value := 5; qryNFiscal.FieldByName('NUM_PROT_CANC_NF').Value := FInfoProtocolo; qryNFiscal.FieldByName('DH_PROT_CANC_NF').Value := FInfoDataHora; qryNFiscal.FieldByName('JUSTIF_CANC_NF').Value := FNFe.FCancelamento.FJustificativa; qryNFiscal.FieldByName('XML_CANC_NFE').Value := F_Menu.ACBrNFe1.NotasFiscais.Items[0].XML; qryNFiscal.Post; MemoStatus.Lines.Add(' '); Result := True; end; end else begin Result := False; end; if Result = False then begin MemoStatus.Lines.Add(' ERRO: Não foi possível cancelar a NF-e'); MemoStatus.Lines.Add(' MOTIVO: ' + IntToStr(F_Menu.ACBrNFe1.WebServices.Cancelamento.cStat) + ' - ' + F_Menu.ACBrNFe1.WebServices.Cancelamento.xMotivo); Exit; end; except on E: Exception do begin MemoStatus.Lines.Add(' '); MemoStatus.Lines.Add(' ERRO: Não foi possível cancelar a NF-e'); MemoStatus.Lines.Add(' MOTIVO: ' + E.Message); Disponivel; Result := False; end; end; end; Basicamente é esse o procedimento que eu faço.
  10. Estão em: \Fontes\PCN2\pcnConversao.pas
  11. Fabio, para consultar NF-e de terceiros, tente informar somente a chave de acesso, sem carregar o XML por completo: ACBrNFe1.WebServices.Consulta.NFeChave := varChave; ACBrNFe1.WebServices.Consulta.Executar; varInfoProtocolo := ACBrNFe1.WebServices.Consulta.Protocolo; varInfoMotivo := ACBrNFe1.WebServices.Consulta.XMotivo; varInfoStat := IntToStr(ACBrNFe1.WebServices.Consulta.cStat); varInfoDataHora := DateTimeToStr(ACBrNFe1.WebServices.Consulta.DhRecbto);
  12. Limpe o componente (ACBrNFe1.NotasFiscais.Clear), carregue a nota (ACBrNFe1.NotasFiscais.LoadFromFile) e depois utilize: Copy(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44)
  13. Uma saída que eu utilizei com um amigo foi compartilhar a porta USB da máquina que tem o certificado A3, com o programa "USB Over Network 4.3". Funciona perfeitamente até hoje. A desvantagem é que o programa não deixa a porta USB funcionar na máquina do certificado. Mas até aí tudo bem porque somente os outros micros da rede emitiam nota e acessavam o mesmo certificado A3 do servidor.
  14. Página 102 do Manual de Orientação do Contribuinte, versão 5.00: 7.7 Padrões de Caracteres (Tipos de Fontes) Todos os caracteres deverão estar impressos na fonte Times New Roman ou na fonte Courier New. A impressão dos dados variáveis feitas por Impressoras de Impacto (Matricial e de Linha) deverá estar entre 10 e 17 CPP (Caracteres por Polegada).
  15. A pasta PathPDF está nas propriedades do componente DANFE.
  16. Camila, o João se referiu ao componente Danfe feito em Rave via código, sem arquivo ".rav". Por isso o nome "Rave Code Base". Atualize seu Rave. Baixe-o em http://www.4shared.com/file/z-w6vsEI/rave_be_5_0_8.html O componente Danfe está na pasta do componente ACBr: "\Pacotes\Delphi\ACBrNFe2\ACBrNFeDanfeRVCodeBase.dpk". Instale-o, faça os testes e reporte para nós.
  17. Aparentemente é isso mesmo.
  18. ACBrNFe1.Configuracoes.Certificados.Senha := ****
  19. Poste o XML que é enviado/retornado e a sua rotina de envio da CC-e
  20. Me passou pela cabeça: No rotina de gerar um XML de NF-e acho que você deve dar um "Clear" antes, certo ? Será que quando você conserta o erro você repete a mesma rotina de geração e com isso um novo "Clear" é dado e ocorre alguma falta de atualização em algum outro local do sistema ?
  21. Muito simples. Carregue o componente com as notas de 100 a 350 e depois mande imprimir: ACBrNFe1.NotasFiscais.Imprimir;
  22. O Danfe em Fortes faz a continuação dos dados adicionais no corpo da nota, conforme PDF anexo.
  23. Como você não sabe a causa do erro, tente instalar o certificado em outra máquina, de preferência som S.O. diferente para ver se lá funciona e assim já ter uma idéia melhor.
  24. Em Uses declare a unit pcnConversao e uma variável booleana (pode ser com o nome 'ok'). Desta maneira você vai conseguir preencher o frete corretamente, conforme segue: Prod.IndTot := StrToindTot(ok, '1');
  25. Com certeza, todos os usuários estão muito felizes com essa conquista. Parabéns.
×
×
  • 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...