Ir para conteúdo
  • Cadastre-se

marciost

Membros
  • Total de ítens

    117
  • Registro em

  • Última visita

Tudo que marciost postou

  1. Pessoal, creio que haja um problema na forma como está implementada a rotina de carregamento da lista de notas ao efetuar consulta de lote de RPS. Simulação de um caso que funciona: - cliente envia lista de RPS em um lote. - componente de Nfs-e efetua o envio, verifica que o lote foi processado com sucesso, faz a consulta de notas do lote e gera o arquivo individual de cada nota que é gravado dentro do diretório NFSe. Nessa situação descrita acima, funciona perfeitamente. É o caso onde dentro do próprio envio o componente já consegue executar a consulta de lote de RPS. Simulação de um caso que não funciona: - cliente envia lista de RPS em um lote. - componente de Nfs-e efetua o envio, verifica que o lote ainda não foi processado. - cliente executa a consulta a situação de lote. - componente retorna 'Processado com sucesso'. - cliente executa a consulta de lote RPS. - componente executa a consulta, XML retornado está OK, porém não carrega a lista de notas e não gera o arquivo individual por nota. Esse é o caso de problema, quando o lote não é processado na hora e tenho que fazer uma consulta de lote posteriormente. No final, o que preciso mesmo é dos arquivos XML individual das notas, que nesse caso acabam não sendo gerados aparentemente por um problema no componente. Me corrijam se eu estiver errado. Sei que eu posso ainda busca depois o XML, mas pensam que são vários arquivos em vários clientes. O ideal seria ajustar o componente mesmo. Segue minha análise de onde está o problema - só não tenho sugestão de ajuste, pois não conheço a forma de cada provedor trabalhar - segue: Arquivo: ACBrNFSeWebServices.pas, +- na linha 3660. {Abaixo, rotina tenta localizar na lista de notas, as notas retornadas para então recarregar os dados por completo. Porém, na consulta de lote FNotasFiscais está vazia, o que não ocorre quando a consulta é feita junto com o envio. No envio a lista já vem carregada com as notas que fazem parte do lote de RPS, por isso quando a consulta é feita junto com o envio o problema não ocorre. } while FRetListaNfse <> '' do begin j := Pos('</' + Prefixo3 + DFeUtil.seSenao(FProvedor = proBetha, 'ComplNfse', 'CompNfse') + '>', FRetListaNfse); p := Length(trim(Prefixo3)); if j > 0 then begin for iNFRetorno := 0 to NFSeRetorno.ListaNfse.CompNfse.Count - 1 do begin for iNF := 0 to FNotasFiscais.Count - 1 do begin if FNotasFiscais.Items[iNF].NFSe.IdentificacaoRps.Numero = NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.IdentificacaoRps.Numero then begin FNotasFiscais.Items[iNF].Confirmada := True; FNotasFiscais.Items[iNF].NFSe.CodigoVerificacao := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.CodigoVerificacao; FNotasFiscais.Items[iNF].NFSe.Numero := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.Numero; FNotasFiscais.Items[iNF].NFSe.Competencia := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.Competencia; FNotasFiscais.Items[iNF].NFSe.NfseSubstituida := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.NfseSubstituida; FNotasFiscais.Items[iNF].NFSe.OutrasInformacoes := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.OutrasInformacoes; FNotasFiscais.Items[iNF].NFSe.DataEmissao := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.DataEmissao; FNotasFiscais.Items[iNF].NFSe.Servico.xItemListaServico := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.Servico.xItemListaServico; FNotasFiscais.Items[iNF].NFSe.PrestadorServico.RazaoSocial := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.RazaoSocial; FNotasFiscais.Items[iNF].NFSe.PrestadorServico.NomeFantasia := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.NomeFantasia; FNotasFiscais.Items[iNF].NFSe.PrestadorServico.IdentificacaoPrestador.Cnpj := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.IdentificacaoPrestador.Cnpj; FNotasFiscais.Items[iNF].NFSe.PrestadorServico.IdentificacaoPrestador.InscricaoMunicipal := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.IdentificacaoPrestador.InscricaoMunicipal; FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.Endereco := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.Endereco; FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.Numero := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.Numero; FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.Complemento := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.Complemento; FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.Bairro := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.Bairro; FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.CodigoMunicipio := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.CodigoMunicipio; FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.UF := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.UF; FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.CEP := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.CEP; FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Endereco.xMunicipio := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.xMunicipio; FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Contato.Telefone := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Contato.Telefone; FNotasFiscais.Items[iNF].NFSe.PrestadorServico.Contato.Email := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Contato.Email; FNotasFiscais.Items[iNF].NFSe.Tomador.Endereco.xMunicipio := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.Tomador.Endereco.xMunicipio; if FProvedor = proISSNet then FRetNfse := AnsiString(StringReplace(String(NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.XML), '<br>', '', [rfReplaceAll])) else FRetNfse := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.XML; // FRetNfse := ParseText(NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.XML); k := Pos('<' + Prefixo4 + 'Nfse', FRetNfse); FRetNfse := Copy(FRetNfse, k, length(FRetNfse)); // Recoloca o prefixo4 quando o provedor for ISSNet if FProvedor = proISSNet then begin m := length(FRetNFSe); FRetNfse2 := ''; l := 1; while l <= m do begin if FRetNFSe[l] = '<' then begin if FRetNFSe[l+1] = '?' then FRetNfse2 := FRetNfse2 + FRetNFSe[l] else begin if FRetNFSe[l+1] = '/' then begin FRetNfse2 := FRetNfse2 + '</' + Prefixo4; inc(l); end else FRetNfse2 := FRetNfse2 + '<' + Prefixo4; end; end else FRetNfse2 := FRetNfse2 + FRetNFSe[l]; inc(l); end; FRetNFSe := FRetNfse2; end; if FProvedor = proSisPMJP then Prefixo3 := 'nfse:'; FRetNFSe := FProvedorClass.GeraRetornoNFSe(Prefixo3, FRetNFSe, FNomeCidade); // if FConfiguracoes.Geral.Salvar // then begin if FConfiguracoes.Arquivos.EmissaoPathNFSe then PathSalvar := FConfiguracoes.Arquivos.GetPathNFSe(FNotasFiscais.Items[iNF].NFSe.DataEmissao) else PathSalvar := FConfiguracoes.Arquivos.GetPathNFSe(0); if FConfiguracoes.Arquivos.NomeLongoNFSe then NomeArq := NotaUtil.GerarNomeNFSe(UFparaCodigo(NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.Endereco.UF), NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.DataEmissao, NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.PrestadorServico.IdentificacaoPrestador.Cnpj, StrToIntDef(NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.Numero, 0)) + '-nfse.xml' else NomeArq := NFSeRetorno.ListaNfse.CompNfse.Items[iNFRetorno].Nfse.Numero + '-nfse.xml'; FConfiguracoes.Geral.Save(NomeArq, FRetNfse, PathSalvar); // NotaUtil.RetirarPrefixos(FRetNfse), PathSalvar); if FNotasFiscais.Count>0 then FNotasFiscais.Items[iNF].NomeArq := PathWithDelim(PathSalvar) + NomeArq; // end; FNotasFiscais.Items[iNF].XML_NFSe := FRetNfse; break; end; end; end; FRetListaNfse := Copy(FRetListaNfse, j + 11 + p, length(FRetListaNfse)); // inc(i); end else FRetListaNfse:=''; end;
  2. Esse método... não é possível para mim testar agora, mas teria que tratar a cidade, certo? function TProvedorBHISS.GetSoapAction(Acao: TnfseAcao; NomeCidade: String): String; begin case Acao of acRecepcionar: Result := 'http://ws.bhiss.pbh.gov.br/RecepcionarLoteRps'; acConsSit: Result := 'http://ws.bhiss.pbh.gov.br/ConsultarSituacaoLoteRps'; acConsLote: Result := 'http://ws.bhiss.pbh.gov.br/ConsultarLoteRps'; acConsNFSeRps: Result := 'http://ws.bhiss.pbh.gov.br/ConsultarNfsePorRps'; acConsNFSe: Result := 'http://ws.bhiss.pbh.gov.br/ConsultarNfse'; acCancelar: Result := 'http://ws.bhiss.pbh.gov.br/CancelarNfse'; acGerar: Result := ''; end; end;
  3. marciost

    Nfs-E De Porto Alegre

    Alguém está implementando a NFS-e para Porto Alegre/RS? Acho que o provedor é Procempa.
  4. Boa tarde. Estou fazendo uma consulta por perído, por exemplo 01/07/2013 a 30/07/2013, a consulta em si já esta demorando, mas até ai tranquilo. O problema está no tratamento do XML (metodos ParseText, TiraAcendo...), esses estão muito demorados, ficou umas 4 horas rodando e acabei desistindo. Um coisa que percebi é que o StringReplace demora mesmo quando a String é muito grande. Alguém já passou por isso e conseguir resolver? Provedor IssNer, de Novo Hamburgo/RS. São cerca de 1900 notas.
  5. Boa tarde. Funciona com a tag <br>, mas tem que substituir os caracteres de abertura e fechamento: use &lt;br&gt; ao invés de <>. Inclusive pode montar uma tabela, é bem prático quando quiser deixar sua descrição formatada.
  6. Boa tarde. Alguém ai já teve um erro parecido? Alguns lotes ocorrem esse erro outros não.
  7. Pessoal, tem um erro nas últimas atualizações do componente, o provedor Thema está sempre enviando em homogação. Segue unit ajustada, porém aviso que tem outras alterações minhas. ACBrProvedorThema.pas
  8. marciost

    Erro Ao Consultar Lote

    Boa tarde. O webservice está retornando o seguinte erro no retorno do método ConsultarLoteRpsEnvio: <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <soap:Fault> <faultcode>soap:Server</faultcode> <faultstring>O servidor nao pode processar a solicitacao. ---> Declaracao XML inesperada. A declaracao XML deve ser o primeiro no no documento e nao pode haver espaco em branco antes dela. Linha 1, posicao 15663.</faultstring> <detail /> </soap:Fault> </soap:Body> </soap:Envelope> Por coincidencia, ocorre somente me lotes que tem notas canceladas, não sei se tem algo a ver. Provedor IssNet, município de Novo Hamburgo/RS. Alguém já teve esse erro? Sabe como resolver?
  9. Se for Rps, passa 1 ou usa TipoRPSToStr(trRPS).
  10. Pessoal, usei a primeira opção e ajustes o provedor Thema para tratar quando poderá usar o método síncrono de envio. Estou dispinibilizando aqui para o caso dos moderadores ter interesse em dar uma olhada e passar pro svn se julgarem a alteração importante. Verificar que há alterações quando ao cancelamento de nfs-e também. ACBrProvedorThema.pas
  11. Pois, olhando agora vejo de caro 2 opções: - no método TProvedorThema.GeraEnvelopeRecepcionarLoteRPS tenho os dados do Xml, dali posso pegar a quantidade de Rps e verificar qual método usar. Jogo o nome desse método numa variável privada, e ao chamar TProvedorThema.GetSoapAction se a ação for acRecepcionar chamo o conteúdo dessa variável, que estara alimentada porque a geração do envelope ocorre antes. - criar um tipo de enumerado chamado acRecepcionarSincrono e ajustar todos os provedores, chamando por default o que já é chamado no acRecepcionar, e no provedor Thema, fazer o tratamento. A primeira opção é mais fácil e menos impactante, mas parece meio gambi... a segunda é mais trabalhosa, mas parece um solução mais completa. Alguém tem uma opinião sobre isso?
  12. Pessoal, bom dia. Consegui fazer funcionar usando o método síncrono, eu estava colocando o nome recepcionarLoteRpsLimitado somente no envelope, mas tem que colocar também no soap action. Agora só preciso encontrar uma forma de tratar isso, ou seja, quando tiver até 3 Rps no lote tenho que chamar recepcionarLoteRpsLimitado, senão recepcionarLoteRps. Sugestões são bem vindas.
  13. Bom dia. Alguém já usou o método recepcionarLoteRpsLimitado ao invés de recepcionarLoteRps para enviar os lotes nessa cidade? Estou usando Acbr agora, mas antes eu tinha uma implementação própria, e usava recepcionarLoteRpsLimitado (quando for até 3 Rps por lote), dava certo, mas agora mesmo alterando o método na unit do provedor Thema ele não é processado na hora. Alguém tem algum palpite? Estou em homologação.
  14. Bom dia. Estou com problemas para cancelar nota (testando em homologação. Diz que o código de cancelamento é inválido. Tentei mandar com 1, 2 e 3. Sempre mesma coisa. Alguém ai já conseguiu fazer o cancelamento nessa cidade?
  15. Mas esse certificado não tem instalador, pelo menos não que eu saiba, é só colocar a leitora e o cartão que aparece na lista de certificados.
  16. Bom dia. Homologando NFS-e de um cliente da cidade de Novo Hamburgo - Prevedor IssNet. O meu problema é com a senha do certificado, apesar de eu passar a senha para as configurações do Acbr ao solicitar pela primeira vez o certificado aparece a tela pedindo senha. Isso somente ocorre com o certificado A3, nos certificados A1 fica ok, pega a senha configurada. Isso é um comportamente padrão ou tem algo que preciso ajustar?
  17. Estramo mesmo, é como se fosse a exclusão da nota ao invés de cancelamento. Mas esse empresa Nota Control tem mesmo algumas peculiariedades.
  18. Resposta da empresa Nota Control: "As notas que são emitidas por integração, ao serem canceladas, o RPS utilizado volta a ficar disponível. Neste caso, a nota foi emitida utilizando o RPS 14, porem ao ser cancelada, o RPS 14 voltou a ficar disponível. Portanto, a consulta da nota pelo RPS não trará o resultado desejado (a nota cancelada)."
  19. Quando implementei ainda não estava disponível no Acbr, então fiz tudo manual (geração das classes a partir dos Xsd, geração da classe do webservice a partir do Wsdl...). Porém quero usar ainda o Acbr para isso, a princípio está funcionando, já consegui testar algumas consultas, só falta o envio.
  20. Datilas, o problema é com arquivo fora de estrutura ou aquela mensagem de que o município de prestacao de servico informado no XML diferente da URL do webservice? Arquivo fora de estrutura: tive problema com isso enquando não estava mandando o código do município (999 no caso de homologação), e também estava tendo erro de arquivo fora de estrutura naquela rotina de consulta a Nfse-e por Rps. Esse segundo erro acontecia porque eu não estava passando o número do Rps por estar usando direto aquele método de cancelamento que recebe todos os parametros, resolvi isso passando a carregar uma NFS-e e a chamar o cancelamento que recebe somente o código do motivo. Assim está meu código: FNFSe.NotasFiscais.Add; FNFSe.NotasFiscais.Items[0].NFSe.Numero := aEnvio.NumeroNfse; FNFSe.NotasFiscais.Items[0].NFSe.IdentificacaoRps.Numero := aEnvio.NumeroRps; FNFSe.NotasFiscais.Items[0].NFSe.IdentificacaoRps.Serie := aEnvio.Serie; FNFSe.NotasFiscais.Items[0].NFSe.IdentificacaoRps.Tipo := trRPS; FNFSe.NotasFiscais.Items[0].NFSe.PrestadorServico.IdentificacaoPrestador.Cnpj := aEnvio.Cnpj; FNFSe.NotasFiscais.Items[0].NFSe.PrestadorServico.IdentificacaoPrestador.InscricaoMunicipal := aEnvio.InscricaoMunicipal; FNFSe.NotasFiscais.Items[0].NFSe.PrestadorServico.Endereco.CodigoMunicipio := '999'; try FNFSe.WebServices.CancelaNFSe('2'); except if FNFSe.WebServices.CancNfse.Msg <> '' then raise Exception.Create(FNFSe.WebServices.CancNfse.Msg); end; Outra coisa, está informando o município 999 no cancelamento?
  21. Um opção que testei agora foi adaptar a leitura do Xml de retorno ao Ginfes. Vou deixar o fonte aqui caso a equipe do Acbr tenha interesse em publicar isso. pnfsCancNfseResposta.pas pnfsCancNfseResposta.pas
  22. Também estou com o mesmo problema, município de Pelotas/RS. Uma das coisas que percebi, é que a rotina de lê o retorno parece estar esperando outra estrutura. A data até que está no lugar certo, mas o Prefixo3 deveria ter 'n2':... Alguém já resolveu?
  23. Na empresa onde trabalho já implementamos para dois clientes. Tem alguma dúvida? É basicamente passar os dados pro componente que ele faz o resto.
  24. Só tenho uma dúvida: - componente executou a rotina de cancelamento, ficou ok. - após o cancelamento, a rotina faz uma consulta ao Rps, webservice retorna o seguinte: 'RPS nao encontrado ou nao processado na base de dados.'. Creio que essa mensagem ocorra porque a nota foi cancelada, ou seja já não existe mais para consulta, é isso? - como a consulta ao Rps retorna mensagens, a rotina levanta uma exception, fazendo com que o Result := True do final não seja executado. - no meu sistema uso o cancelamento da seguinte forma: if FNFSe.WebServices.CancelaNFSe('2') then... e trato o cancelamento na minha base de dados. Só que por causa dessa consulta ao Rps a function está sempre retornando False. Estou usando a rotina de cancelamento do componente de forma correta?
×
×
  • 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.