Ir para conteúdo
  • Cadastre-se

dev botao

AcbrNfseX Provedor Webiss v2 erro ao ler o xml tag dataemissao


EdmarFrazao
Ver Solução Respondido por Italo Giurizzato Junior,
  • Este tópico foi criado há 777 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

ao ler o xml para imprimir da erro na leitura da data

unit: ACBrNFSeXLerXml_ABRASFv2 linha 482 e 667

NFSe.DataEmissao       := ObterConteudo(AuxNode.Childrens.FindAnyNs('DataEmissao'), tcDat);

 

o xml gravado tem a data assim:

<DataEmissao>2022-03-02T09:57:51.79</DataEmissao>

 

como resolver?

202200000000018.xml

Link para o comentário
Compartilhar em outros sites

A Data esta invertida e o procedimento LerDatas não trata a data invertida

unit: ACBrXmlBase 

o procedimento LerDatas  anterior funcionava:

function LerDatas(const DataStr: string): TDateTime;
var
  xData: string;
begin
  xData := Trim(DataStr);

  if xData = '' then
    Result := 0
  else
  begin
    xData := StringReplace(xData, '-', '/', [rfReplaceAll]);

    // Alguns provedores retorna a data de competencia com o ano, mês e dia e
    // sem a barra exemplo <Competencia>20220121</Competencia>
    // Correção: Inclusão da barra "/"
    if (Pos('/', xData) = 0) and (Length(xData) = 😎 then
    begin
      if Copy(xData, 1, 4) = IntToStr(YearOf(Date)) then
        xData := copy(xData, 1, 4) + '/' + copy(xData, 5, 2) + '/' + copy(xData, 7, 2)
      else
        xData := copy(xData, 1, 2) + '/' + copy(xData, 3, 2) + '/' + copy(xData, 5, 4);
    end;

    // Alguns provedores retorna a data de competencia só com o ano e mês e
    // sem a barra exemplo <Competencia>202111</Competencia>
    // Correção: Inclusão da barra "/"
    if (Pos('/', xData) = 0) and (Length(xData) = 6) then
    begin
      if Copy(xData, 1, 4) = IntToStr(YearOf(Date)) then
//      if Copy(xData, 1, 2) = Copy(IntToStr(YearOf(Date)), 1, 2) then
        xData := copy(xData, 1, 4) + '/' + copy(xData, 5, 2)
      else
        xData := copy(xData, 1, 2) + '/' + copy(xData, 3, 4);
    end;

    // Alguns provedores retorna a data de competencia só com o mês e ano
    // Correção: Inclusão do dia na data
    if Length(xData) = 7 then
    begin
      if Pos('/', xData) = 3 then
        xData := '01/' + xData
      else
        xData := xData + '/01';
    end;

    if (Length(xData) >= 16) and CharInSet(xData[11], ['T', ' ']) then
    begin
      if Pos('/', xData) = 5 then
        // Le a data/hora no formato YYYY/MM/DDTHH:MM:SS
        Result := EncodeDate(StrToInt(copy(xData, 1, 4)),
                             StrToInt(copy(xData, 6, 2)),
                             StrToInt(copy(xData, 9, 2))) +
                  EncodeTime(StrToIntDef(copy(xData, 12, 2), 0),
                             StrToIntDef(copy(xData, 15, 2), 0),
                             StrToIntDef(copy(xData, 18, 2), 0),
                             0)
      else
        // Le a data/hora no formato DD/MM/YYYYTHH:MM:SS
        Result := EncodeDate(StrToInt(copy(xData, 7, 4)),
                             StrToInt(copy(xData, 4, 2)),
                             StrToInt(copy(xData, 1, 2))) +
                  EncodeTime(StrToIntDef(copy(xData, 12, 2), 0),
                             StrToIntDef(copy(xData, 15, 2), 0),
                             StrToIntDef(copy(xData, 18, 2), 0),
                             0)
    end
    else
    begin
      if Pos('/', xData) = 5 then
        // Le a data no formato YYYY/MM/DD
        Result := EncodeDate(StrToInt(copy(xData, 1, 4)),
                             StrToInt(copy(xData, 6, 2)),
                             StrToInt(copy(xData, 9, 2)))
      else
        // Le a data no formato DD/MM/YYYY
        Result := EncodeDate(StrToInt(copy(xData, 7, 4)),
                             StrToInt(copy(xData, 4, 2)),
                             StrToInt(copy(xData, 1, 2)));
    end;
  end;
end;

 

Link para o comentário
Compartilhar em outros sites

  • Consultores
  • Solution

Boa tarde Edmar,

Faça uma copia da unit alterada e atualize novamente os fontes, pois o LerDatas foi totalmente reformulado.

  • Curtir 1
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

23 minutos atrás, Italo Giurizzato Junior disse:

Boa tarde Edmar,

Faça uma copia da unit alterada e atualize novamente os fontes, pois o LerDatas foi totalmente reformulado.

a unit acima esta com o novo LerDatas ( que não funciona com as datas invertidas na nfse)

fiz a alteração para chamar o lerdatas2(procedimento antigo)

vou atualizar e ver se funciona

Editado por EdmarFrazao
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 777 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.