beckershow
Membros-
Total de ítens
8 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que beckershow postou
-
Problemas encontrados servidor Barueri + Sugestão de correção
beckershow replied to beckershow's tópico in ACBrNFSe
Ítalo, me desculpe. Sim, realmente também fiz este ajuste, pois a descrição e a solução do erro não estava correta do jeito que estava, não retornava a descrição. Infelizmente as classes TObjectDictionary só são compatíveis com a versão do delphi que tem Generics.Collections, acredito que seja superior a versão do Delphi 7. Poderíamos como sugestão, usar uma TStringList. e usar o um AddOjbect(index, Objeto). e sempre fazer casting quando necessário. Assim será compatível com todos os demais. Se necessário posso arrumar aqui e anexar. -
Problemas encontrados servidor Barueri + Sugestão de correção
beckershow replied to beckershow's tópico in ACBrNFSe
Bom dia, Unica alteração foi neste fonte foi: *PadLeft(AIdentificacaoRemessa, 11, '0') , o qual não modifica muita a estrutura a e compatibilidade entre os delphis. -
Problemas encontrados servidor Barueri + Sugestão de correção
beckershow replied to beckershow's tópico in ACBrNFSe
Segue os fontes alterados para análise. ISSBarueri.GravarXml.pas ISSBarueri.LerXml.pas ISSBarueri.Provider.pas -
Problemas encontrados servidor Barueri + Sugestão de correção
um tópico no fórum postou beckershow ACBrNFSe
Fonte: ISSBarueri.LerXml - Método: procedure TNFSeR_ISSBarueri.LerRegistroTipo2(const ALinha: String); if NaoEstaVazio(Trim(Copy(ALinha, 22, 6))) then begin NFSe.DataEmissao := EncodeDataHora(Trim(Copy(ALinha, 13, 8)), 'YYYYMMDD'); //NFSe.DataEmissao := NFSe.DataEmissao + StrToTime(Format('%S:%S:%S', [Trim(Copy(ALinha, 22, 2)), Trim(Copy(ALinha, 24, 2)), Trim(Copy(ALinha, 26, 2))])); --> deixei em comentário pois dá erro na conversão de data e hora. NFSe.DataEmissao := NFSe.DataEmissao + StrToTime(Format('%S:%S:%S', [Trim(Copy(ALinha, 21, 2)), Trim(Copy(ALinha, 23, 2)), Trim(Copy(ALinha, 25, 2))])); -> esses são os campos certos a serem pegos. mudar pra essa linha. end else NFSe.DataEmissao := EncodeDataHora(Trim(Copy(ALinha, 13, 8)), 'YYYYMMDD'); Fonte: ISSBarueri.Provider; - Método: procedure TACBrNFSeProviderISSBarueri.TratarRetornoConsultaLoteRps(Response: TNFSeConsultaLoteRpsResponse); Aqui irei fazer uma sugestão, sendo do jeio que está, funciona, porém se deixar do jeito que está, temos que mexer no ISSBarueri.GravarXML. Na linha 870: NumRps := Trim(Copy(Dados[0], Pos('PMB002', Dados[0]), Length(Dados[0]))); NumRps := StringReplace(NumRps, 'PMB002', '', [rfReplaceAll]); Ele assume que o Numero do RPS é a identificação dele, que é montado no Método ISSBarueri.GravarXML -> GravarXML, porém ele usa PadRight(AIdentificacaoRemessa, 11, '0') sendo assim temos um problem. Se o seu numero de RPS foi "60", ele vai tornar o numero "60000000000000", quando vc pegar este campo no retorno, ele vai te retornar "6000000000000" e não o "60" que vc passou. Correção: PadLeft(AIdentificacaoRemessa, 11, '0') // Identificação da Remessa do Contribuinte , fazer um PadLef(); asssim ficaria "00000000000000000060", corrigindo isto. StrToInt(00000000000000000060) = 60 Correção: procedure TNFSeW_ISSBarueri.GerarRegistroTipo1(const AIdentificacaoRemessa: String); begin FConteudoTxt.Add( '1'+ // Tipo do Registro S Numérico 1 1 1 1 PadRight(OnlyNumber(NFSe.Prestador.IdentificacaoPrestador.InscricaoMunicipal), 7, ' ')+ // Inscrição do Contribuinte S Texto 7 2 8 Inscrição do Prestador de Serviço 'PMB002'+ // Versão do Lay-Out S Texto 6 9 14 Versão do Lay-Out "PMB002" PadLeft(AIdentificacaoRemessa, 11, '0') // Identificação da Remessa do Contribuinte - Corrigido. ); end; Sugestão número 2: que é a mais fácil, Na linha 870: NumRps := Trim(Copy(Dados[0], Pos('PMB002', Dados[0]), Length(Dados[0]))); NumRps := StringReplace(NumRps, 'PMB002', '', [rfReplaceAll]); Pegar a verdadeira posição, o NumRps, está sendo pego da identificação sendo que tem um campo só pra ele. NumRps := Trim(Copy(Dados[1], 55, 11); Dúvidas só me chamares, implementado e válidado. Estou para ajudar os amigos em qualquer dúvida. -
Ok, peço desculpa pelo ocorrido. Já descobri o problema, a tag nos xmls antigos da SEFAZ, não contia a tag "<?xml version="1.0" encoding="utf-8"?> Sendo assim, não fazia a conversão. Ao tentar reimprimir um DANFE muito antigo acontecia o problema. Grato.
-
Olá, Estou passando por um problema de caracteres unicode, pois migrei do Delphi7 para Seattle. Ao pesquisar no ACBR, econtrei esse post Porém, ao fazer um update dos fontes do ACBR/Trunk2, não vi a devida alteração. Poderiam me ajudar?
-
Fiz um update dos fontes via SVN, porém as alterações citadas, não encontram-se.
-
DocFabio e Italo, O problema de mexermos no componente é sempre a atualização! Quando vem uma nova "leva" de alterações, sempre temos que acabar mexendo nesses fontes e alterando. Vejo que o DocFabio teve que mexer em pcnNfe, pcnFnew, pcnNFER e pcNFeRtxt. Pois só o fato de mexer no pcnNFeW e trocar para string não resolve, sendo que a entrada de dados se dá da seguinte forma: Produto.nItemPed := valordigitadonainteface. Sendo assim, se digitar 00001 o sistema vai suprimir para 1. A propriedade nItemPed, também terá que ser alterada para string, para aceitar o que você digitou. Se mexer somente no pcnNFeW, vai ficar engessado, ele vai por teu zeros, mas sempre com uma quantidade fixa determinada pelo parametro max. Será que não temos como por isto com string, e o usuário trata isto na inteface? Ou até mesmo por uma propriedade para tratar como string ou inteiro. Ou melhor um atributo nItemPed: Variant. e tratar da seguinte forma if (VarOf(nItemPed) = Int) then ..... else String... Alguma sugestão?