Ir para conteúdo
  • Cadastre-se

dev botao

ACBrGTIN Lazarus linux centos


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

Recommended Posts

Postado

estou testando o componente ACBrGTIN

só pra deixar claro no delphi funciona muito bem.

meu problema esta em usar com lazarus linux

vou descrever aki como fiz para funcionar.

não vou adicionar as units modificadas pois não sei se vai gerar problema em outros componentes.

vou listar o que fiz para funcionar.

unit ACBrGTINWebServices Linha  169 adicinar uses pcnConsts

unit ACBrGTINRetConsultar linha 88
function TRetConsultarGTIN.LerXml: boolean;
remover o 

Try 
...
Except
 Result := False;
End;

pois esta suprimindo erros como falta do libxml2 e conversão de data
então as propertys sempre ficam vazias quando acontece algum Except

no xml a data vem nesse formato 2022-06-17T16:50:16-03:00

então na unit ACBrXmlBase na linha 275
era assim
result := EncodeDataHora(ConteudoTag, 'YYYY/MM/DD')
eu alterei para 
result := Iso8601ToDateTime(ConteudoTag)

pois na unit
ACBrUtil.DateTime na function EncodeDataHora

ele esta convertendo todos os "-" por "/"
xData := Trim(StringReplace(DataStr, '-', '/', [rfReplaceAll]));
o que faz isso 
2022-06-17T16:50:16-03:00 
virar isso
2022/06/17T16:50:16/03:00

e gera esse Except: "16:50:16/03:00" is not a valid time

por isso alterei para Iso8601ToDateTime que funciona perfeitamente.
 

Postado (editado)
10 horas atrás, Juliomar Marchetti disse:

Hum estranho eu to aqui com o pacote do ACBrGTIN para Lazarus. não subi ainda.

como tu conseguiu instalar ele?

eu não instalei ele apenas coloquei as pastas no path e crio o componente em tempo de execução.

depois das alterações que fiz esta funcionando perfeitamente.

Editado por datilas
Postado (editado)
11 minutos atrás, Italo Giurizzato Junior disse:

Boa tarde,

Já inclui na minha lista de tarefas para analisar essa questão. TK-2808

No Delphi windows tá tudo ok, no Lazarus linux está vindo caracteres especiais inválidos, os produtos que não tem caracteres especiais estão vindo normal, testei 29000 produtos.

Editado por datilas
Postado
Agora, datilas disse:

No Delphi windows tá tudo ok, no Lazarus linux está vindo caracteres especiais inválidos, os produtos que não tem caracteres especiais estão vindo normal, testei 29000 produtos.

vc pode testar os gtins :

7896380103188 com xProd invalido

e

7895511301093 com xMotivo invalido

isso no lazarus linux

no delphi esta tudo ok.

 

  • Consultores
Postado

Bom dia Datilas,

Favor atualizar os fontes, enviei para o SVN uma possível solução no que se refere a leitura correta da data.

Quando aos retornos de caracteres especiais, você poderia configurar o componente para salvar os (soap) e anexar os XML (soap) de retorno dessas consultas?

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado
30 minutos atrás, Italo Giurizzato Junior disse:

Bom dia Datilas,

Favor atualizar os fontes, enviei para o SVN uma possível solução no que se refere a leitura correta da data.

Quando aos retornos de caracteres especiais, você poderia configurar o componente para salvar os (soap) e anexar os XML (soap) de retorno dessas consultas?

quanto a data ficou ok,

segue os arquivos (os ".txt" é o result que vem do componente coloquei em uma stringlist e depois fiz um savetofile)

        sl.Values['GTIN'] := aGTIN;
        sl.Values['tpGTIN'] := ACBrGTIN.WebServices.Consulta.tpGTIN.ToString;
        sl.Values['xProd'] := ACBrGTIN.WebServices.Consulta.xProd;
        sl.Values['NCM'] := ACBrGTIN.WebServices.Consulta.NCM;
        sl.Values['CEST'] := ACBrGTIN.WebServices.Consulta.CEST;
        sl.Values['dhResp'] := DateTimeToStr(ACBrGTIN.WebServices.Consulta.dhResp);
        sl.Values['cStat'] := ACBrGTIN.WebServices.Consulta.cStat.ToString;
        sl.Values['xMotivo'] := ACBrGTIN.WebServices.Consulta.xMotivo;

gtin-soap.zip

Postado (editado)
36 minutos atrás, datilas disse:

quanto a data ficou ok,

segue os arquivos (os ".txt" é o result que vem do componente coloquei em uma stringlist e depois fiz um savetofile)

        sl.Values['GTIN'] := aGTIN;
        sl.Values['tpGTIN'] := ACBrGTIN.WebServices.Consulta.tpGTIN.ToString;
        sl.Values['xProd'] := ACBrGTIN.WebServices.Consulta.xProd;
        sl.Values['NCM'] := ACBrGTIN.WebServices.Consulta.NCM;
        sl.Values['CEST'] := ACBrGTIN.WebServices.Consulta.CEST;
        sl.Values['dhResp'] := DateTimeToStr(ACBrGTIN.WebServices.Consulta.dhResp);
        sl.Values['cStat'] := ACBrGTIN.WebServices.Consulta.cStat.ToString;
        sl.Values['xMotivo'] := ACBrGTIN.WebServices.Consulta.xMotivo;

gtin-soap.zip 3 kB · 0 downloads

tem que remover o try except do TRetConsultarGTIN.LerXml; na unit ACBrGTINRetConsultar.pas

pois ele esta suprimindo erros.

eu me enganei quanto as datas pois ainda esta dando erro: "11:26:30/03:00" is not a valid time

mas eu não vi por causa do try except

 

se usar Iso8601ToDateTime a data funciona.7895511301093.txt7896380103188.txt

Editado por datilas
Postado (editado)

na unit ACBrXmlBase.pas

function ObterConteudoTag(const ANode: TACBrXmlNode; const Tipo: TACBrTipoCampo): variant;

alterar 
result := (ConteudoTag;
para
result := ACBrStrToAnsi(ConteudoTag);

e

result := EncodeDataHora(ConteudoTag, 'YYYY/MM/DD')
para

result := Iso8601ToDateTime(ConteudoTag)

resolve a data e os acentos.

function ObterConteudoTag(const ANode: TACBrXmlNode; const Tipo: TACBrTipoCampo): variant;
var
  ConteudoTag: string;
  iDecimais: Integer;
  aFloatIsIntString: Boolean;
begin
  if not Assigned(ANode) or (ANode = nil) then
  begin
    ConteudoTag := '';
    aFloatIsIntString := False;
  end
  else
  begin
    ConteudoTag := Trim(ANode.Content);
    aFloatIsIntString := ANode.FloatIsIntString;
  end;

  case Tipo of
    tcStr,
    tcEsp:
      result := ACBrStrToAnsi(ConteudoTag);

    tcDat,
    tcDatHor,
    tcDatCFe,
    tcDatHorCFe:
      begin
        if length(ConteudoTag) > 0 then
          result := Iso8601ToDateTime(ConteudoTag)
        else
          result := 0;
      end;

    tcDatVcto:
      begin
        if length(ConteudoTag) > 0 then
          result := EncodeDataHora(ConteudoTag, 'DD/MM/YYYY')
        else
          result := 0;
      end;

    tcDatUSA:
      begin
        if length(ConteudoTag) > 0 then
          result := EncodeDataHora(ConteudoTag, 'MM/DD/YYYY')
        else
          result := 0;
      end;

    tcHor:
      begin
        if length(ConteudoTag) > 0 then
          result := EncodeTime(StrToInt(copy(ConteudoTag, 1, 2)),
                               StrToInt(copy(ConteudoTag, 4, 2)),
                               StrToInt(copy(ConteudoTag, 7, 2)), 0)
        else
          result := 0;
      end;

    tcHorCFe:
      begin
        if length(ConteudoTag) > 0 then
          result := EncodeTime(StrToInt(copy(ConteudoTag, 1, 2)),
                               StrToInt(copy(ConteudoTag, 3, 2)),
                               StrToInt(copy(ConteudoTag, 5, 2)), 0)
        else
          result := 0;
      end;

    tcDe2, tcDe3, tcDe4, tcDe5, tcDe6, tcDe7, tcDe8, tcDe10:
      begin
        if aFloatIsIntString then
        begin
          case Tipo of
            tcDe2:  iDecimais := 2;
            tcDe3:  iDecimais := 3;
            tcDe4:  iDecimais := 4;
            tcDe5:  iDecimais := 5;
            tcDe6:  iDecimais := 6;
            tcDe7:  iDecimais := 7;
            tcDe8:  iDecimais := 8;
            tcDe10: iDecimais := 10;
          else
            iDecimais := 2;
          end;

          Result := StringDecimalToFloat(ConteudoTag, iDecimais);
        end
        else
          Result := StringToFloatDef(ConteudoTag, 0);
      end;

    tcInt:
      begin
        if length(ConteudoTag) > 0 then
          result := StrToIntDef(OnlyNumber(ConteudoTag), 0)
        else
          result := 0;
      end;

    tcInt64:
      begin
        if length(ConteudoTag) > 0 then
          result := StrToInt64Def(OnlyNumber(ConteudoTag), 0)
        else
          result := 0;
      end;

    tcBool:
      begin
        if length(ConteudoTag) > 0 then
        begin
          ConteudoTag := NormatizarBoolean(ConteudoTag);
          result := StrToBool(ConteudoTag);
        end
        else
          result := False;
      end;

    tcStrOrig:
      begin
        // Falta implementar
        Result := '';
      end;

    tcNumStr:
      begin
        // Falta implementar
        Result := '';
      end

  else
    raise Exception.Create('Node <' + ANode.Name + '> com conteúdo inválido. ' +
                           ConteudoTag);
  end;
end;

 

7895511301093.txt 7896380103188.txt

Editado por datilas
Postado
2 horas atrás, datilas disse:

na unit ACBrXmlBase.pas

function ObterConteudoTag(const ANode: TACBrXmlNode; const Tipo: TACBrTipoCampo): variant;

alterar 
result := (ConteudoTag;
para
result := ACBrStrToAnsi(ConteudoTag);

e

result := EncodeDataHora(ConteudoTag, 'YYYY/MM/DD')
para

result := Iso8601ToDateTime(ConteudoTag)

resolve a data e os acentos.

function ObterConteudoTag(const ANode: TACBrXmlNode; const Tipo: TACBrTipoCampo): variant;
var
  ConteudoTag: string;
  iDecimais: Integer;
  aFloatIsIntString: Boolean;
begin
  if not Assigned(ANode) or (ANode = nil) then
  begin
    ConteudoTag := '';
    aFloatIsIntString := False;
  end
  else
  begin
    ConteudoTag := Trim(ANode.Content);
    aFloatIsIntString := ANode.FloatIsIntString;
  end;

  case Tipo of
    tcStr,
    tcEsp:
      result := ACBrStrToAnsi(ConteudoTag);

    tcDat,
    tcDatHor,
    tcDatCFe,
    tcDatHorCFe:
      begin
        if length(ConteudoTag) > 0 then
          result := Iso8601ToDateTime(ConteudoTag)
        else
          result := 0;
      end;

    tcDatVcto:
      begin
        if length(ConteudoTag) > 0 then
          result := EncodeDataHora(ConteudoTag, 'DD/MM/YYYY')
        else
          result := 0;
      end;

    tcDatUSA:
      begin
        if length(ConteudoTag) > 0 then
          result := EncodeDataHora(ConteudoTag, 'MM/DD/YYYY')
        else
          result := 0;
      end;

    tcHor:
      begin
        if length(ConteudoTag) > 0 then
          result := EncodeTime(StrToInt(copy(ConteudoTag, 1, 2)),
                               StrToInt(copy(ConteudoTag, 4, 2)),
                               StrToInt(copy(ConteudoTag, 7, 2)), 0)
        else
          result := 0;
      end;

    tcHorCFe:
      begin
        if length(ConteudoTag) > 0 then
          result := EncodeTime(StrToInt(copy(ConteudoTag, 1, 2)),
                               StrToInt(copy(ConteudoTag, 3, 2)),
                               StrToInt(copy(ConteudoTag, 5, 2)), 0)
        else
          result := 0;
      end;

    tcDe2, tcDe3, tcDe4, tcDe5, tcDe6, tcDe7, tcDe8, tcDe10:
      begin
        if aFloatIsIntString then
        begin
          case Tipo of
            tcDe2:  iDecimais := 2;
            tcDe3:  iDecimais := 3;
            tcDe4:  iDecimais := 4;
            tcDe5:  iDecimais := 5;
            tcDe6:  iDecimais := 6;
            tcDe7:  iDecimais := 7;
            tcDe8:  iDecimais := 8;
            tcDe10: iDecimais := 10;
          else
            iDecimais := 2;
          end;

          Result := StringDecimalToFloat(ConteudoTag, iDecimais);
        end
        else
          Result := StringToFloatDef(ConteudoTag, 0);
      end;

    tcInt:
      begin
        if length(ConteudoTag) > 0 then
          result := StrToIntDef(OnlyNumber(ConteudoTag), 0)
        else
          result := 0;
      end;

    tcInt64:
      begin
        if length(ConteudoTag) > 0 then
          result := StrToInt64Def(OnlyNumber(ConteudoTag), 0)
        else
          result := 0;
      end;

    tcBool:
      begin
        if length(ConteudoTag) > 0 then
        begin
          ConteudoTag := NormatizarBoolean(ConteudoTag);
          result := StrToBool(ConteudoTag);
        end
        else
          result := False;
      end;

    tcStrOrig:
      begin
        // Falta implementar
        Result := '';
      end;

    tcNumStr:
      begin
        // Falta implementar
        Result := '';
      end

  else
    raise Exception.Create('Node <' + ANode.Name + '> com conteúdo inválido. ' +
                           ConteudoTag);
  end;
end;

 

7895511301093.txt 149 B · 1 download 7896380103188.txt 159 B · 1 download

Boa Tarde!

Primeiro gostaria de parabenizar a todos pela ajuda que tive ao ler o fórum e encontrar várias informações.

Estou utilizando os arquivos Xml enviados pelo Datilas no Postman para efetuar testes iniciais de consulta GTIN por webservice. Não sei se vocês já se depararam com essa situação mas utilizando um leiaute de xml ocorre erro de rejeição 588 -

<xMotivo>Rejeicao: Nao eh permitida a presenca de caracteres de edicao no inicio/fim da mensagem ou entre as tags da mensagem</xMotivo>
 
<?xml version="1.0" encoding="UTF-8"?>
<soap12:Envelope xmlns:soap12="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soap12:Body>
      <ccgConsGTIN xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/ccgConsGtin">
         <nfeDadosMsg>
            <consGTIN xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00">
               <GTIN>7896380103188</GTIN>
            </consGTIN>
         </nfeDadosMsg>
      </ccgConsGTIN>
   </soap12:Body>
</soap12:Envelope>
 
E se informo o leiaute todo sem espaços, a resposta é positiva. É isso mesmo? Obrigado a Todos.
<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><ccgConsGTIN xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/ccgConsGtin"><nfeDadosMsg><consGTIN xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00"><GTIN>7896380103188</GTIN></consGTIN></nfeDadosMsg></ccgConsGTIN></soap:Body></soap:Envelope>
 
Obrigado a Todos.
 
 
 
Postado
12 minutos atrás, Fabio.Maioli disse:

Boa Tarde!

Primeiro gostaria de parabenizar a todos pela ajuda que tive ao ler o fórum e encontrar várias informações.

Estou utilizando os arquivos Xml enviados pelo Datilas no Postman para efetuar testes iniciais de consulta GTIN por webservice. Não sei se vocês já se depararam com essa situação mas utilizando um leiaute de xml ocorre erro de rejeição 588 -

<xMotivo>Rejeicao: Nao eh permitida a presenca de caracteres de edicao no inicio/fim da mensagem ou entre as tags da mensagem</xMotivo>
 
<?xml version="1.0" encoding="UTF-8"?>
<soap12:Envelope xmlns:soap12="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soap12:Body>
      <ccgConsGTIN xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/ccgConsGtin">
         <nfeDadosMsg>
            <consGTIN xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00">
               <GTIN>7896380103188</GTIN>
            </consGTIN>
         </nfeDadosMsg>
      </ccgConsGTIN>
   </soap12:Body>
</soap12:Envelope>
 
E se informo o leiaute todo sem espaços, a resposta é positiva. É isso mesmo? Obrigado a Todos.
<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><ccgConsGTIN xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/ccgConsGtin"><nfeDadosMsg><consGTIN xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00"><GTIN>7896380103188</GTIN></consGTIN></nfeDadosMsg></ccgConsGTIN></soap:Body></soap:Envelope>
 
Obrigado a Todos.
 
 
 

vc tentou usar o demo do ACBr? pois é ele que gera o xml faz o envio e pega o retorno. como vc esta usando?

Postado (editado)
47 minutos atrás, Italo Giurizzato Junior disse:

Boa tarde,

Favor atualizar novamente os fontes, reinstale o ACBr e faça novos testes.

Acredito que agora ele vai ler corretamente a data.

o problema ainda persiste.

o que causa o problema é o time zone -03:00

quando faz o replace

fica /03:00 é isso que esta causando o problema

original 2022-06-17T16:50:16-03:00

replace: 2022/06/17T16:50:16/03:00

erro: "16:56:30/03:00" is not a valid time

 

 

Editado por datilas
Postado (editado)

@gilspider

baixei a revisão: 25995

29/06/2022
-- ACBrUtil.DateTime --
[*] Possível correção para datas que estejam no formato: "2022-06-27-03:00".
   Por: Gil Spider

mas o problema ainda persiste.

Editado por datilas
  • Administradores
Postado

Bom dia,

Seus fontes não tem nenhum conflito?

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 !!

Postado
1 minuto atrás, Juliana Tamizou disse:

Bom dia,

Seus fontes não tem nenhum conflito?

At.

não tem, eu nem instalo o acbr eu apenas aponto os path's e crio em tempo de execução.

eu fiz um teste aqui na unit ACBrXmlBase

criei mais em enumerator de TACBrTipoCampo  = (..., tcDatIso8601)

e uso assim:

result := Iso8601ToDateTime(ConteudoTag)

assim funciona perfeito delphi,lazarus-windows,linux

gostaria de saber se posso enviar essa unit para analize pois não vai interferir em outros componentes do acbr

  • Administradores
Postado

Bom dia,

Claro, basta anexar ao tópico.

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 !!

  • Consultores
Postado

Boa tarde,

No que se refere a data no formato: 2022-06-27-03:00

Me recordo de ter feita uma alteração visando contornar esse problema.

Favor fazer uma cópia das units que você alterou, dele as units alteradas e atualize novamente todos os fontes de todas as pastas, reinstale o ACBr e faça novos testes.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado (editado)
3 minutos atrás, Italo Giurizzato Junior disse:

Boa tarde,

No que se refere a data no formato: 2022-06-27-03:00

Me recordo de ter feita uma alteração visando contornar esse problema.

Favor fazer uma cópia das units que você alterou, dele as units alteradas e atualize novamente todos os fontes de todas as pastas, reinstale o ACBr e faça novos testes.

não funcionou,

eu fiz essa alteração com base na revisão 26055 que saiu hoje e não estava funcionando.

eu faço meus teste em uma vm limpa e sempre restauro ao ponto inicial para não haver conflitos

e antes de atualizar o acbr eu sempre executo um svn clean e marco todas as opções do menu.

só quando todas as patas estão com o ícone verde eu clico no update

Editado por datilas
Postado (editado)
3 minutos atrás, Italo Giurizzato Junior disse:

Esse erro esta ocorrendo ao usar qual componente?

ACBrGTIN

eu uso lazarus no windows compilando para linux em modo NoGUI

Editado por datilas
  • 1 mês depois ...
Postado

Olá boa tarde. 
Estou com o mesmo problema ao consultar GTIN no Lazarus Linux. 
Preciso fazer essa mudança nos fontes do acbr?
 

        if length(ConteudoTag) > 0 then
          result := Iso8601ToDateTime(ConteudoTag)
        else
          result := 0;

Obrigada, 

Melissa

Captura de tela de 2022-08-10 12-29-25.png

Captura de tela de 2022-08-10 12-31-55.png

  • Este tópico foi criado há 820 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.