Ir para conteúdo
  • Cadastre-se

dev botao

Problemas encontrados servidor Barueri + Sugestão de correção


beckershow
  • Este tópico foi criado há 639 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

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.

Link para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia,

Muito obrigada pela análise e proposta de ajuste...poderia por favor anexar o .pas alterado?

At.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • Administradores

Obrigado pela contribuição, em breve será validada para possível inclusão ao svn

TK-2913

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia,

A alteração que você fez na unit ISSBarueri.Provider é compatível com o Delphi 7 em diante?

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Consultores

Essa alteração foi feita no ISSBarueri.GravarXml

No ISSBarueri.Provider foi feito alteração no tipo TACBrNFSeProviderBarueriErros.

No SVN esta da seguinte forma:

  TACBrNFSeProviderBarueriErros = class(TStringList)
  public
    constructor Create;

    function Causa(const ACodigo: String): String;
    function Solucao(const ACodigo: String): String;
  end;

A unit que você anexou esta desta forma:

  TErro = class
  private
    FCodigo: string;
    FCausa: string;
    FSolucao: string;
  public
    property Codigo: string   read FCodigo  write FCodigo;
    property Causa: string    read FCausa   write FCausa;
    property Solucao: string  read FSolucao write FSolucao;
  end;

  TACBrNFSeProviderBarueriErros = class
  private
    FListaErros: TObjectDictionary<String, TErro>;

    procedure Add(aCodigo, aDescricao, aSolucao: string);
  public
    destructor  Destroy; override;
    constructor Create;

    function Causa(const ACodigo: String): String;
    function Solucao(const ACodigo: String): String;
  end;

 

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Í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.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde,

Por favor faça a alteração e anexe para que possamos analisar.

Desde já muito obrigado pela colaboração.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia,

As alterações nas units GravarXml e LerXml, foram enviadas para o SVN.

Fico no aguardo de uma nova versão da unit Provider que seja compatível com o Delphi 7.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 639 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.