Ir para conteúdo
  • Cadastre-se

dev botao

bloco x inconsistencia na validação redução


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

Recommended Posts

ja procurei em todos os topicos referente ao bloco x e nao achei algo que pudesse solucionar.

 

estou testando o arquivo da reducao z no endereco

https://sathomologa.sef.sc.gov.br/tax.NET/sat.dfe.siv.web/validacao.aspx

Configurei o componente acbrbloco x para usar a ER 02.04.

so que da o erro DadosREducaoZ apresenta elemetro Filho DataHoraEmissao inválido.
e esperado DataReferencia.

ai tentei trocar DataHoraEmissao por DataRerencia nos fontes regerei o arquivo ai  da o erro

o Elemetro DadosReducaoZ apresenta o elemento filho CRZ invalido, lista possiveis de elementos esperados DataHoraEmissao

o site nao diz qual versao da ER e para ser usada.. 

esse link achado em outro post, 

file:///C:/Users/wilton.RADINFO/Downloads/Requisito%20LVIII%20(Redu%C3%A7%C3%A3o%20Z)%20e%20LIX%20(Estoque)%20-%20httpsdocs.google.comdocumentd1yez14gry9Mi4rTpwDRDf--bR-SLzijD81OPeJzh9FqEeditpref=2&pli=1%23heading=h.lgwkd0xm996m.pdf

faz referencia a ER 04. 

segui a ordem e nao vai valida..

 

agradeço a ajuda de todos.

 

obs: TRUNCK abr atualizadissimo!

 

 

 

 

 

validacao reducao z bloco x Print 1 ER0204.png

validacao reducao z bloco x print 2 ER 0204.png

validacao reducao z bloco x print 3 ER 0205.png

Editado por wilton_rad
falta info
Link para o comentário
Compartilhar em outros sites

Olá Anderson, agora validou.

portanto o componente esta gerando o arquivo errado

 


procedure TACBrBlocoX_ReducaoZ.GerarXML(const Assinar: Boolean);
var
  I, X: Integer;
begin
  FXMLOriginal := '';
  FXMLAssinado := '';
  FGerador.ArquivoFormatoXML := '';

  FGerador.wGrupo(ENCODING_UTF8, '', False);
  FGerador.wGrupo('ReducaoZ Versao="1.0"');
  FGerador.wGrupo('Mensagem');

  GerarDadosEstabelecimento;
  GerarDadosPafECF;

  FGerador.wGrupo('Ecf');
  with TACBrBlocoX(FACBrBlocoX).ECF do
  begin
    FGerador.wCampo(tcStr, '', 'NumeroCredenciamento', 0, 0, 1, NumeroCredenciamento);
    FGerador.wCampo(tcStr, '', 'NumeroFabricacao', 0, 0, 1, NumeroFabricacao);
    FGerador.wCampo(tcStr, '', 'Tipo', 0, 0, 1, Tipo);
    FGerador.wCampo(tcStr, '', 'Marca', 0, 0, 1, Marca);
    FGerador.wCampo(tcStr, '', 'Modelo', 0, 0, 1, Modelo);
    FGerador.wCampo(tcStr, '', 'Versao', 0, 0, 1, Versao);
    FGerador.wCampo(tcStr, '', 'Caixa', 0, 0, 1, Caixa);
  end;

  FGerador.wGrupo('DadosReducaoZ');
  FGerador.wCampo(tcStr, '', 'DataReferencia', 0, 0, 1, FORMATDATETIME('yyyy-mm-dd',DataReferencia));

  case TACBrBlocoX(FACBrBlocoX).Configuracoes.VersaoER of
       erv0205 :
       begin

         // a data e hora e gerada em uma so tag, e nao em duas como esta no fonte!.

            FGerador.wCampo(tcStr, '', 'DataHoraEmissao', 0, 0, 1, FORMATDATETIME('yyyy-mm-dd',DataEmissaoReducaoZ)+'T'+HoraEmissaoReducaoZ);
           // FGerador.wCampo(tcStr, '', 'DataEmissaoReducaoZ', 0, 0, 1, FORMATDATETIME('yyyy-mm-dd',DataEmissaoReducaoZ));
           // FGerador.wCampo(tcStr, '', 'HoraEmissaoReducaoZ', 0, 0, 1, HoraEmissaoReducaoZ);
       end;
  end;

me parece que aqui no estado (TO) so vao verificar a estrutura do layout, ainda não sera obrigado o envio, visto que aqui ainda não existe webservice para isso.

 

Link para o comentário
Compartilhar em outros sites

o arquivo de estoque tambem esta totalmente fora do padrao que o validador verifica..

anderson, vc tem ai a sequencia correta das tags, cada hora que mexe em uma da erro em outra.

o validador tambem esta recusando os valores em campos numericos. passando com virgula ex 10,000  com com pontos ex 10.000

 

 

 

procedure TACBrBlocoX_Estoque.GerarXML(const Assinar: Boolean);
var
  I: Integer;
begin

  FXMLOriginal := '';
  FXMLAssinado := '';
  FGerador.ArquivoFormatoXML := '';

  FGerador.wGrupo(ENCODING_UTF8, '', False);
  FGerador.wGrupo('Estoque Versao="1.0"');
  FGerador.wGrupo('Mensagem');

  GerarDadosEstabelecimento;
  GerarDadosPafECF;

  FGerador.wGrupo('DadosEstoque');

  FGerador.wCampo(tcStr, '', 'DataReferencia', 0, 0, 1, FORMATDATETIME('yyyy-mm-dd',DataReferenciaFinal));

//DEU PROBLEMA NESSAS 2 TAGS, o validador diz que tem que passar DATAREFERENCIA
//  FGerador.wCampo(tcStr, '', 'DataReferenciaInicial', 0, 0, 1, FORMATDATETIME('yyyy-mm-dd',DataReferenciaInicial));
//  FGerador.wCampo(tcStr, '', 'DataReferenciaFinal', 0, 0, 1, FORMATDATETIME('yyyy-mm-dd',DataReferenciaFinal));

  if Produtos.Count > 0 then
  begin
    FGerador.wGrupo('Produtos');
    For I := 0 to Produtos.Count - 1 do
    Begin
      FGerador.wGrupo('Produto');
      FGerador.wCampo(tcStr, '', 'Descricao', 0, 0, 1, Produtos.Descricao);

      Case TACBrBlocoX(FACBrBlocoX).Configuracoes.VersaoER of
           erv0204 :
           begin
                FGerador.wCampo(tcStr, '', 'Codigo',     0,  0, 1, Produtos.Codigo.CodigoProprio);
                FGerador.wCampo(tcStr, '', 'CodigoTipo', 0,  0, 1, TipoCodigoToStr(Produtos.Codigo.Tipo));
                FGerador.wCampo(tcDe3, '', 'Quantidade', 1, 20, 1, formatfloat('0.000',Abs(Produtos.Quantidade)));
           end;
           erv0205 :
           begin
              with Produtos do
               begin
               // FGerador.wGrupo('Codigo');  //NAO RECONHECEU ESSA TAG !!!!
                FGerador.wCampo(tcStr, '', 'CodigoGTIN', 0, 0, 1, Produtos.Codigo.CodigoGTIN);
                FGerador.wCampo(tcStr, '', 'CodigoCEST', 0, 0, 1, Produtos.Codigo.CodigoCEST);
                FGerador.wCampo(tcStr, '', 'CodigoNCMSH', 0, 0, 1,Produtos.Codigo.CodigoNCMSH);
                FGerador.wCampo(tcStr, '', 'CodigoProprio', 0, 0, 1,Produtos.Codigo.CodigoProprio);
               // FGerador.wGrupo('/Codigo');
                FGerador.wCampo(tcDe3, '', 'Quantidade', 1, 20, 1, formatfloat('0.000',Abs(Produtos.Quantidade)));
               end;
           end;
      end;

// A SEQUENCIA ABAIXO DE CAMPOS NAO ESTA CORRETA, INCLUSIVE COM NOMES DE CAMPOS INVALIDOS. SEM O SCHEMA CORRETO QUE O VALIDADOR USA, FICA COMPLICADO ADVINHAR QUAL E A CORRETA.

      FGerador.wCampo(tcDe3, '', 'QuantidadeTotalAquisicao', 1, 1, 1, formatfloat('0.000',Produtos.QuantidadeTotalAquisicaoMercadoria));
      FGerador.wCampo(tcStr, '', 'Unidade', 0, 0, 1, Produtos.Unidade);
      FGerador.wCampo(tcDe2, '', 'ValorUnitario', 1, 20, 1, formatfloat('0.00',Produtos.ValorUnitario));

      case TACBrBlocoX(FACBrBlocoX).Configuracoes.VersaoER of
           erv0205 :FGerador.wCampo(tcDe2, '', 'ValorTotalAquisicao', 1, 1, 1, formatfloat('0.00',Produtos.ValorTotalAquisicaoMercadoria));
      end;

      FGerador.wCampo(tcStr, '', 'SituacaoTributaria', 1, 1, 1, SituacaoTributariaToStr(Produtos.SituacaoTributaria));
      FGerador.wCampo(tcStr, '', 'Aliquota', 4, 4, 1, FormatFloat('0.00',Produtos.Aliquota));
      FGerador.wCampo(tcStr, '', 'IsArredondado', 1, 1, 1, IfThen(Produtos.IndicadorArredondamento, 'true', 'false'));
      FGerador.wCampo(tcStr, '', 'Ippt', 1, 1, 1, IpptToStr(Produtos.Ippt));
      FGerador.wCampo(tcStr, '', 'SituacaoEstoque', 1, 1, 1, IfThen(Produtos.Quantidade >= 0, 'Positivo', 'Negativo'));

      case TACBrBlocoX(FACBrBlocoX).Configuracoes.VersaoER of
           erv0205 :
           begin
              FGerador.wCampo(tcDe2, '', 'ValorTotalAquisicaoMercadoria', 1, 1, 1, formatfloat('0.00',Produtos.ValorTotalAquisicaoMercadoria));
              FGerador.wCampo(tcStr, '', 'QuantidadeTotalAquisicaoMercadoria', 1, 1, 1, formatfloat('0.000',Produtos.QuantidadeTotalAquisicaoMercadoria));
              FGerador.wCampo(tcDe2, '', 'ValorTotalICMSDebitoFornecedor', 1, 1, 1, formatfloat('0.00',Produtos.ValorTotalICMSDebitoFornecedor));
              FGerador.wCampo(tcDe2, '', 'ValorBaseCalculoICMSST', 1, 1, 1, formatfloat('0.00',Produtos.ValorBaseCalculoICMSST) );
              FGerador.wCampo(tcDe2, '', 'ValorTotalICMSST', 1, 1, 1, formatfloat('0.00',Produtos.ValorTotalICMSST));
           end;
      end;

      FGerador.wGrupo('/Produto');
    end;
    FGerador.wGrupo('/Produtos');
  end;

  FGerador.wGrupo('/DadosEstoque');
  FGerador.wGrupo('/Mensagem');
  FGerador.wGrupo('/Estoque');

  FXMLOriginal := ConverteXMLtoUTF8(FGerador.ArquivoFormatoXML);
  if Assinar then
    FXMLAssinado := TACBrBlocoX(FACBrBlocoX).SSL.Assinar(FXMLOriginal, 'Estoque', 'Mensagem');
end;

 

 

Link para o comentário
Compartilhar em outros sites

consegui fazer os ajustes, em anexo funcao  procedure TACBrBlocoX_Estoque.GerarXML(const Assinar: Boolean);

na unit ACBrBlocoX_Estoque

com as correções, obs: testado com o validador no link

https://sathomologa.sef.sc.gov.br/tax.NET/sat.dfe.siv.web/validacao.aspx

em 26-07-2017  

obs:  nao tem mais os campos DataReferenciaInicial e DataReferenciaFinal

tem apenas o DataReferencia, no qual eu passei o ultimo dia do mes anterior.

 

blocox gerar estoque.txt

Estoque_26072017.xml

Link para o comentário
Compartilhar em outros sites

Você conseguiu transmitir o xml de estoque para o webservice de homologação?

Aqui uso o ACBrMonitorPlus para transmitir e não está indo, retorna a mensagem:
"Data de referência informada nos parâmetros está com ano inferior a 2016"

Acho que é algum problema como os parâmetros de envio que mudou e ainda não foi atualizado no ACBrMonitorPlus

 

Link para o comentário
Compartilhar em outros sites

não, aqui o homologador não vai exigir o envio, apenas a validação do arquivo, como estou no TO, aqui não tem (e nem vai ter) webservice para receber o arquivo, pois a nfc-e ja foi aprovada e ja estamos implantando, ou seja o paf aqui tambem morreu!. espero que seja a ultima homologacao de paf da minha vida!

outra coisa que vi em outros post, e em relacao ao arquivo de estoque, que podera ficar enorme em ambiente de produção, e será impossivel enviar um arquivo tão grande mesmo compactado para o webservice.  

eles tinham que fazer igual a nfe, se criam a obrigatoriedade do sistema gerar tal informação, eles e que deveriam criar a tecnologia para o envio, e não ficar a cargo de nos desenvolvedores fazer isso.

 

e sim, tive que alterar varios campos para gerar o arquivo e validar.. veja o anexo da funcao, e muito provavel que o acbrmonitor, use a mesma unit, ai e so recompilar ele.

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

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