Ir para conteúdo
  • Cadastre-se

edv4ld0

Membros
  • Total de ítens

    19
  • Registro em

  • Última visita

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

edv4ld0's Achievements

Apprentice

Apprentice (3/14)

  • Collaborator Rare
  • Dedicated Rare
  • First Post
  • Conversation Starter
  • Week One Done

Recent Badges

1

Reputação

  1. Boa tarde, após as alterações sugeridas aqui: https://www.projetoacbr.com.br/forum/topic/65688-nfs-provedor-issdsf-campinas-units-com-corre%C3%A7%C3%B5es-para-ler-xml-de-nfs-e/ Estamos com problemas. Seguimos o seguinte fluxo: 1)Criar RPS 2)Emitir 3)Consultamos o Lote, que atualiza o RPS que esta carregado na memória com número da Nota, Código de Verificação, etc.. 4)Imprimimos/Geramos PDF Depois dessa alteração não são mais encontrados os campos. O amigo te enviou um XML que é exportado do site da prefeitura e não segue os padrão que recebemos via webservice. Revertemos para a revisão anterior para voltar a funcionar. Já havia te enviado em outro tópico os exemplos de XML desse provedor. Segue novamente em anexo. Em anexo também um arquivo exportador pelo site da prefeitura que nada tem haver com as operações do webservice. exemplosws.zip exportado_prefeitura.xml
  2. Boa tarde, Compilamos nosso emissor com as última alterações feitas no componente e constamos um erro que já havia sido corrigido. procedure TACBrNFSeProviderISSDSF.TratarRetornoEmitir(Response: TNFSeEmiteResponse); var Document: TACBrXmlDocument; AErro: TNFSeEventoCollectionItem; ANode: TACBrXmlNode; AuxNode: TACBrXmlNode; begin Document := TACBrXmlDocument.Create; try try if Response.XmlRetorno = '' then begin AErro := Response.Erros.New; AErro.Codigo := Cod201; AErro.Descricao := Desc201; Exit end; Document.LoadFromXml(Response.XmlRetorno); ANode := Document.Root; ... Essa última linha "ANode := Document.Root;" já havíamos proposto a seguinte alteração: {No WS de Campo Grande/MS tem retornado: <?xml version="1.0" encoding="UTF-8"?> <enviarReturn type="xsd:string"> <ns1:RetornoEnvioLoteRPS xsi:schemaLocation="http://localhost:8080/WsNFe2/lote http://localhost:8080/WsNFe2/xsd/RetornoEnvioLoteRPS.xsd " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tipos="http://localhost:8080/WsNFe2/tp" xmlns:ns1="http://localhost:8080/WsNFe2/lote"> <Cabecalho> <CodCidade>9051</CodCidade> <Sucesso>true</Sucesso> <NumeroLote>123456789</NumeroLote> <CPFCNPJRemetente>00000000000000</CPFCNPJRemetente> <DataEnvioLote>2021-07-08T16:12:00.0Z</DataEnvioLote> <QtdNotasProcessadas>0</QtdNotasProcessadas> <TempoProcessamento>0</TempoProcessamento> <ValorTotalServicos>0</ValorTotalServicos> <ValorTotalDeducoes>0</ValorTotalDeducoes> <Versao>1</Versao> <Assincrono>S</Assincrono> </Cabecalho> <Alertas/> <Erros/> <ChavesNFSeRPS/> </ns1:RetornoEnvioLoteRPS> </enviarReturn> } ANode := Document.Root.Childrens.FindAnyNs('RetornoEnvioLoteRPS'); if ANode = nil then ANode := Document.Root; Na revisão 23119 você novamente voltou para: ANode := Document.Root; Dessa forma não é localizado a tag "Cabecalho", por exemplo, onde esta o NumeroLote.
  3. Favor ignorar o arquivo acima, segue novamente. ACBrDFeReportFortes.pas
  4. Segue arquivo alterado ACBrDFeReportFortes.pas
  5. É justamente do componente que estamos utilizando: DANFSE.ImprimirDANFSePDF(stream) Só que em: class procedure TDFeReportFortes.AjustarReport(FReport: TRLReport; AConfig: TACBrDFeReport); begin FReport.ShowProgress := AConfig.MostraStatus; FReport.PrintDialog := AConfig.MostraSetup and (not AConfig.MostraPreview); if NaoEstaVazio(AConfig.Impressora) then if RLPrinter.PrinterName <> AConfig.Impressora then RLPrinter.PrinterName := AConfig.Impressora; if RLPrinter.SupportsDuplex Then RLPrinter.Duplex := false; if (AConfig.NumCopias > 0) and (RLPrinter.Copies <> AConfig.NumCopias) then RLPrinter.Copies := AConfig.NumCopias; end; a linha, retorna o erro. if RLPrinter.SupportsDuplex Then Se você olhar abaixo já é verificado NumCopia > 0, proposto no tópico mencionado, para não setar o RLPrinter.Copies que dava o mesmo erro, só adicionamos para também não verificar o SupportsDuplex: if (AConfig.NumCopias > 0) and RLPrinter.SupportsDuplex Then RLPrinter.Duplex := false; Caso queira fazer um teste, basta excluir todas as impressoras do windows e chamar DANFSE.ImprimirDANFSePDF, vai retornar que não tem impressora padrão, altere a linha indica e o PDF é gerado normalmente.
  6. Bom dia, abaixo algumas observações, unit ISSDSF.Provider: 1) Ainda continua verificando Erros e Alertas dentro da tag Cabecalho, no código abaixo já é chamada a procedure ProcessarMensagemErros e depois é chamada novamente usando a tag Cabecalho como RootNode: ... ProcessarMensagemErros(ANode, Response); AuxNode := ANode.Childrens.FindAnyNs('Cabecalho'); if AuxNode <> nil then begin ProcessarMensagemErros(AuxNode, Response); ... 2) Na alteração feita na procedure PrepararConsultaLoteRps agora só funciona passando o número do lote no parâmetro AProtocolo da TACBrNFSeX.ConsultarLoteRps. Se não for passado o protocolo retorno erro, o parâmetro ANumLote da função TACBrNFSeX.ConsultarLoteRps(const AProtocolo, ANumLote: String) perdeu o sentido. procedure TACBrNFSeProviderISSDSF.PrepararConsultaLoteRps(Response: TNFSeConsultaLoteRpsResponse); ... if EstaVazio(Response.Lote) then Response.Lote := Response.Protocolo; if EstaVazio(Response.Protocolo) then begin AErro := Response.Erros.New; AErro.Codigo := Cod111; AErro.Descricao := Desc111; Exit; end; ... 3) TratarRetornoConsultaNFSeporRps e TratarRetornoConsultaNFSe esta verificando a existência de erros usando Response.Erros.Count = 0, mas alguns erros vem dentro da tag Alertas Response.Sucesso := (Response.Erros.Count = 0) para Response.Sucesso := (Response.Erros.Count = 0) and (Response.Alertas.Count = 0);
  7. Não, DANFE da NFSe. Nós não usamos ACBrLib, usamos uma DLL feita apenas para para gerar o PDF da nota. E essa DLL é chamada servidor IIS. Vi que em outros tópicos teve gente com o mesmo problema.
  8. Bom dia, após tentar gerar o DANFE via servidor IIS, usando uma DLL recebemos a seguinte mensagem: There is no default printer currently selected No tópico: https://www.projetoacbr.com.br/forum/topic/52337-gerar-pdf-nfcenfe-danfe-aplica%C3%A7%C3%A3o-isapi-com-fortes-report/ foi proposto usar o NumCopias := 0, mas mesmo assim o erro continuava. Corrigimos o problema alterando a unit ACBrDFeReportFortes: class procedure TDFeReportFortes.AjustarReport(FReport: TRLReport; AConfig: TACBrDFeReport); ... if RLPrinter.SupportsDuplex Then RLPrinter.Duplex := false; ... para: class procedure TDFeReportFortes.AjustarReport(FReport: TRLReport; AConfig: TACBrDFeReport); ... if (AConfig.NumCopias > 0) and RLPrinter.SupportsDuplex Then RLPrinter.Duplex := false; ...
  9. Boa tarde, usamos em Campo Grande / MS. Mas acredito que não, no primeiro post tem o arquivo "exemplosws.zip" nele tem os exemplos do próprio provedor para as cidades que ele atende. E as tags retiradas acima não aparecem em nenhum dos exemplos. Tanto que no arquivo "Leia-me.txt" presente no arquivo tem a seguinte observação: "Os exemplos de XML encontram-se nas pastas de acordo com a cidade de declaração. Para cada prefeitura existem exemplos para cada método do Web Service, o XML não tem difereça de uma Prefeitura para outra, o que irá mudar basicamente é o codigo da cidade indicado no cabeçalho do XML."
  10. Boa tarde Italo, Atualizamos o ACBR e voltaram alguns problemas que já tínhamos corrigido. Na revisão 22644 acrescentaram novamente algumas tags. ISSDSF.GravarXml.pas ===A tag "CodigoServico" não existe nesse provedor, erro na hora de emitir. ISSDSF.Provider.pas ===Configuracao: ======Validar setado como "false". Com "true" esta dando erro na unit "ACBrDFeXsMsXml", funcao "TDFeSSLXmlSignMsXml.Validar" em "Schema.add(WideString(FpDFeSSL.NameSpaceURI), ArqSchema)"; ===TratarRetornoEmitir: ======As tags "Erros" e "Alertas" não existem dentro da tag "Cabecalho". ======O conteúdo da tag "Sucesso" é "true" ou "false" e esta sendo checado "not (xSucesso = 'N')". ======Response.Sucesso esta sendo setado novamente usando (Response.Erros.Count = 0), mas alguns erros vem dentro da tag "Alertas". ===TratarRetornoConsultaLoteRps: ======As tags "Erros" e "Alertas" não existem dentro da tag "Cabecalho". ======Response.Sucesso setado usando o conteúdo da tag "Sucesso". ===TratarRetornoConsultaNFSeporRps: ======As tags "Erros" e "Alertas" não existem dentro da tag "Cabecalho". ======Response.Sucesso acrescentado checagem da tag "Alertas". ===PrepararConsultaNFSe: ======A tag "NumeroLote" não existe, erro na hora de consultar. ===TratarRetornoConsultaNFSe: ======As tags "Erros" e "Alertas" não existem dentro da tag "Cabecalho". ======Response.Sucesso acrescentado checagem da tag "Alertas". ===PrepararCancelaNFSe: ======O Namespace "...ReqCancelamentoNFSe.xsd" deve estar presente. ===TratarRetornoCancelaNFSe: ======As tags "Erros" e "Alertas" não existem dentro da tag "Cabecalho". ======Response.Sucesso setado usando o conteúdo da tag "Sucesso". ===Recepcionar: ======Alterar de "XmlToStr(AMSG)" para "IncluirCDATA(AMSG)". Um exemplo foi uma razão social de um tomador "KAZUO & AOKI LTDA - ME" esse "&" é interpretado de maneira errada, pelo provedor, quando usamos "XmlToStr". ===Cancelar: ======Alterar de "XmlToStr(AMSG)" para "IncluirCDATA(AMSG)". No caso de alguma justificativa conter o caractere "&" por exemplo ocorre o mesmo erro acima. Em anexo arquivos alterados e manual do webservice. ISSDSF.Provider.pas ISSDSF.GravarXml.pas ManualNFSeWebService.pdf
  11. Boa tarde, segue arquivo alterado. Funções: Recepcionar, RecepcionarSincrono, TesteEnvio, ConsultarLote, ConsultarNFSePorRps, ConsultarNFSe e Cancelar. Alterado de XmlToStr(AMSG) para IncluirCDATA(AMSG). ISSDSF.Provider.pas
  12. Boa tarde, Tivemos problema com a Razão Social de um Tomador: "KAZUO & AOKI LTDA - ME" corrigimos alterando o arquivo ISSDSF.Provider.pas as funções Recepcionar, RecepcionarSincrono, TesteEnvio, ConsultarLote, ConsultarNFSePorRps, ConsultarNFSe e Cancelar de XmlToStr(AMSG) para IncluirCDATA(AMSG); O "&" estava sendo convertido corretamente para "&amp;", mas como o webservice converte de volta o conteúdo da Tag "mensagemXml" esse "&amp;" também era convertido o que causava o erro: "ERRO VALIDACAO XSD: (402)The entity name must immediately follow the '&' in the entity reference."
  13. Bom dia, Você pode abrir o arquivo "ACBrNFSeXDANFSeRL.dfm", esta dentro da pasta "ACBR\Fontes\ACBrDFe\ACBrNFSeX\DANFSE\Fortes", em algum editor de texto e incluir as linhas abaixo no componente "RLNFSe": PreviewOptions.ShowModal = True PreviewOptions.Caption = 'DANFe' ShowProgress = False OnNeedData = RLNFSeNeedData ficando assim: object frlXDANFSeRL: TfrlXDANFSeRL Left = 280 Top = 152 Caption = 'frlXDANFSeRL' ClientHeight = 537 ClientWidth = 850 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = True OnCreate = FormCreate OnDestroy = FormDestroy PixelsPerInch = 96 TextHeight = 13 object RLNFSe: TRLReport Left = 8 Top = 8 Width = 794 Height = 1123 Font.Charset = DEFAULT_CHARSET Font.Color = clBlack Font.Height = -13 Font.Name = 'Arial' Font.Style = [] PreviewOptions.ShowModal = True PreviewOptions.Caption = 'DANFe' ShowProgress = False OnNeedData = RLNFSeNeedData end object RLPDFFilter1: TRLPDFFilter DocumentInfo.Author = 'FortesReport 3.23 - Copyright '#194#169' 1999-2009 Fortes Inform'#195#161'tica' DocumentInfo.Creator = 'Projeto ACBr (Componente NFS-e)' DisplayName = 'Documento PDF' Left = 120 Top = 24 end end
  14. edv4ld0

    ACBrNFSeX - Provedor ISSDSF

    Bom dia, Segue em anexo arquivos alterados para o funcionamento do provedor ISSDSF: DANFSE: ACBrNFSeXDANFSeRL.dfm (estava faltando o evento OnNeedData no componente RLNFSe o que não gerava a lista de serviços) ACBrNFSeXDANFSeRLRetrato.dfm (caracteres estranhos no componente RLLabel66 "Descrição") Provedores: ISSDSF.GravarXml.pas ===A tag "CodigoServico" não faz parte desse provedor o que dava erro na hora de emitir. ISSDSF.LerXml.pas ===Alteração para não duplicar serviço/deduções depois de um RPS já carregado. ===Alteração para não substituir dados do RPS por "vazio", na consulta de lote por exemplo vários campos não são retornados o que deixa os campos em branco. ISSDSF.Provider.pas ===ConfigAssinar : ConsultarLote deve ser False, ConsultarNFSe deve ser True. ===ConfigSchemas: Validar setado como False. ===ProcessarMensagemErros: Adicionado para carregar os Alertas. ===PrepararEmitir: Adicionado namespace. ===TratarRetornoEmitir: No caso de Campo Grande/MS o "<ns1:RetornoEnvioLoteRPS" esta vindo dentro de "<enviarReturn". ===PrepararConsultaLoteRps: Adicionado namespace sem ele é retornado "ERRO VALIDACAO XSD: (400)error: org.xml.sax.SAXParseException". ===TratarRetornoConsultaLoteRps: o NodeArray deve ser a tag "ConsultaNFSe" e não "ListaNFSe". Esse provedor gera o número da nota no WS, alterado para localizar a nota pelo número do RPS. ===PrepararConsultaNFSeporRps: Adicionado namespace sem ele é retornado "ERRO VALIDACAO XSD: (400)error: org.xml.sax.SAXParseException". ===TratarRetornoConsultaNFSeporRps: A lista de notas deve ser a tag "Nota" e não "NFe". Alterado para localizar a nota pelo número do RPS. ===PrepararConsultaNFSe: Adicionado namespace e a tag "NotaInicial" deve ser incluída em vez de "NumeroLote". ===TratarRetornoConsultaNFSe: A lista de notas deve ser a tag "Nota" e não "NFe". Alterado para localizar a nota pelo número do RPS. ===PrepararCancelaNFSe: Adicionado namespace sem ele é retornado "ERRO VALIDACAO XSD: (400)error: org.xml.sax.SAXParseException". ===Recepcionar, RecepcionarSincrono, TesteEnvio, ConsultarLote, ConsultarNFSePorRps, ConsultarNFSe e Cancelar: Substituido "< e >" por "&lt; e &gt;". *OBS: Existe um bug nesse provedor, quando usamos "ConsultarNFSePorRps" o "BairroTomador" é retornado vazio, mas na "ConsultarNFSe" ele esta presente. ACBrNFSeX.zip exemplosws.zip
  15. Se você quer saber apenas se houve saque e de quanto foi, basta você comparar se o valor que você passou para o CRT for menor que o ValorTotal. Quanto ao problema do Saque estar zerado, acredito que encontrei uma forma de resolver o problema e ainda corrigir outro provável erro. Notei que no componente existem as seguintes propriedades: property SaldoAPagar : Double read fSaldoAPagar write fSaldoAPagar ; property SaldoRestante : Double read GetSaldoRestante; function TACBrTEFDRespostasPendentes.GetSaldoRestante : Double; var I : Integer; TotalPagoENaoImpresso : Double ; begin TotalPagoENaoImpresso := 0 ; For I := 0 to Count-1 do begin with TACBrTEFDResp(Items[I]) do begin if OrdemPagamento = 0 then // Ainda nao imprimiu no ECF ? TotalPagoENaoImpresso := TotalPagoENaoImpresso + (ValorTotal - Saque) ; end ; end; TotalPagoENaoImpresso := RoundTo( TotalPagoENaoImpresso, -2); Result := RoundTo( SaldoAPagar - TotalPagoENaoImpresso, -2) ;} end; A função GetSaldoRestante não leva em consideração por exemplo o que eu paguei em dinheiro e ainda diminui do SaldoAPagar ficando um valor que não é o que realmente falta ser pago. Por exemplo: Compra R$23,00 Dinheiro R$3,00 1º Cartão R$5,00 Ao chamar o segundo cartão o SaldoAPagar é R$15,00, só que como a Função GetSaldoRestante desconta o TotalPagoENaoImpresso o valor retornado por ela é R$10,00, o que causa um erro aqui: Procedure TACBrTEFDClass.VerificarTransacaoPagamento(Valor : Double ); (...) if (Valor > RespostasPendentes.SaldoRestante ) then raise Exception.Create( ACBrStr( 'Operação TEF deve ser igual ao '+ 'Saldo a Pagar' ) ); (...) Uma vez que estou mandando R$15,00 só que a função retorna R$10,00. O que poderia ser feito era remover a propriedade SaldoRestante juntamente com a função GetSaldoRestante, usariámos apenas a propriedade SaldoAPagar, ficando a cargo do usuário passar o valor que realmente falta ser pago através OnInfoECF, como já é feito. Fiz essas modificações aqui e além de resolver o erro relatado acima referente a propriedade Saque, ainda resolveu esse segundo erro. Se quiser fazer um teste sem alterar muito os fontes, altere a função GetSaldoRestante para o seguinte: function TACBrTEFDRespostasPendentes.GetSaldoRestante : Double; {var I : Integer; TotalPagoENaoImpresso : Double ;} begin { TotalPagoENaoImpresso := 0 ; For I := 0 to Count-1 do begin with TACBrTEFDResp(Items[I]) do begin if OrdemPagamento = 0 then // Ainda nao imprimiu no ECF ? TotalPagoENaoImpresso := TotalPagoENaoImpresso + (ValorTotal - Saque) ; end ; end; TotalPagoENaoImpresso := RoundTo( TotalPagoENaoImpresso, -2); Result := RoundTo( SaldoAPagar - TotalPagoENaoImpresso, -2) ;} Result := SaldoAPagar; end;
×
×
  • 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...