Ir para conteúdo
  • Cadastre-se

beckershow

Membros
  • Total de ítens

    8
  • Registro em

  • Última visita

Tudo que beckershow postou

  1. Í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.
  2. 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.
  3. Segue os fontes alterados para análise. ISSBarueri.GravarXml.pas ISSBarueri.LerXml.pas ISSBarueri.Provider.pas
  4. 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.
  5. 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.
  6. beckershow

    UTF-8 LoadFromFile

    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?
  7. Fiz um update dos fontes via SVN, porém as alterações citadas, não encontram-se.
  8. 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?
×
×
  • 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.