Jump to content

click.png

click.png

click.png

click.png click.png click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

XML da Redução Z


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

Recommended Posts

Boa Tarde,

Alguém sabe o que está acontecendo?

Testando o componente, resolvi gerar o XML da redução Z apenas de um dia (30.11.2015) e nesse mesmo dia tive vendas apenas do totalizador "F1".

Ou seja, só tive um totalizador. Porem ao montar as informações dos produtos vendidos na minha consulta só tenho 23 linhas mas no XML sai varias TAGS

com as informações zeradas, ou seja, o XML é gerado varias vezes de forma errada como mostra o conteudo abaixo:

<TotalizadoresParciais><TotalizadorParcial><Identificacao>F1</Identificacao><Valor>0</Valor><ProdutosServicos/></TotalizadorParcial><TotalizadorParcial><Identificacao/><Valor>8474193</Valor><ProdutosServicos/></TotalizadorParcial><TotalizadorParcial><Identificacao/><Valor>0</Valor><ProdutosServicos><Produto><Descricao/><Codigo Tipo="Proprio"/><Quantidade>0</Quantidade><Unidade/><ValorUnitario>0</ValorUnitario></Produto></ProdutosServicos></TotalizadorParcial><TotalizadorParcial><Identificacao/><Valor>0</Valor><ProdutosServicos><Produto><Descricao/><Codigo Tipo="GTIN">0180035</Codigo><Quantidade>0</Quantidade><Unidade/><ValorUnitario>0</ValorUnitario></Produto></ProdutosServicos></TotalizadorParcial><TotalizadorParcial><Identificacao/><Valor>0</Valor><ProdutosServicos><Produto><Descricao>GASOLINA COMUM</Descricao><Codigo Tipo="GTIN"/><Quantidade>0</Quantidade><Unidade/><ValorUnitario>0</ValorUnitario></Produto></ProdutosServicos></TotalizadorParcial><TotalizadorParcial><Identificacao/><Valor>0</Valor><ProdutosServicos><Produto><Descricao/><Codigo Tipo="GTIN"/><Quantidade>17</Quantidade><Unidade/><ValorUnitario>0</ValorUnitario></Produto></ProdutosServicos></TotalizadorParcial><TotalizadorParcial><Identificacao/><Valor>0</Valor><ProdutosServicos><Produto><Descricao/><Codigo Tipo="GTIN"/><Quantidade>0</Quantidade><Unidade>L</Unidade><ValorUnitario>0</ValorUnitario></Produto></ProdutosServicos></TotalizadorParcial><TotalizadorParcial><Identificacao/><Valor>0</Valor><ProdutosServicos><Produto><Descricao/><Codigo Tipo="GTIN"/><Quantidade>0</Quantidade><Unidade/><ValorUnitario>349</ValorUnitario></Produto></ProdutosServicos></TotalizadorParcial>

Observe que coloquei em negrito algumas informações mas há muito mais erros. Uma das informações destacadas é o valor unitário de 349. Acontece que não tenho em minha base de dados nenhum produto com esse valor unitário.

Reducao_20151130.XML

Link to comment
Share on other sites

Sim, estudei o Demo.

Veja minha Rotina abaixo, acredito que eteja certa.

procedure TFormGeraXML.GeraReducaoZ;
Var
   NomeArq       : String;
   DataReducao   : TDate;
   CodImpressora : String;
   CodProduto    : String;
   DescProduto   : String;
   QtdeProduto   : Integer;
   CodUnidade    : String;
   PrecoProduto  : Currency;
begin

   // Esta primeira consulta me retorna minha(s) redução Z

   QConsulta.Close;
   QConsulta.SQL.Text := RetornaSQLReducao;
   QConsulta.Open;
   QConsulta.First;

  

   while not QConsulta.eof do
   begin

      v_InscEstadualEmp := QConsulta.FieldByName('CGF').AsString;
      v_CNPJEmp         := QConsulta.FieldByName('CNPJ').AsString;
      v_RazaoSocialEmp  := QConsulta.FieldByName('RAZAO_SOCIAL').AsString;
      v_VersaoPAF_ECF   := QConsulta.FieldByName('VERSAO_PAF').AsString;
      DataReducao       := QConsulta.FieldByName('DATA').AsDateTime;
      CodImpressora     := QConsulta.FieldByName('COD_IMPRESSORA').AsString;

      lbMensagens.Caption := 'Redução Z do Dia: ' + DateToStr(DataReducao);
      lbMensagens.Update;

      // Preenche o cabeçalho
      PreencherCabecalho(ACBrBlocoX);

      ACBrBlocoX.ECF.NumeroFabricacao := QConsulta.FieldByName('NUM_FAB_ECF').AsString;
      ACBrBlocoX.ECF.Tipo             := QConsulta.FieldByName('TIPO_ECF').AsString;
      ACBrBlocoX.ECF.Marca            := QConsulta.FieldByName('MARCA_ECF').AsString;
      ACBrBlocoX.ECF.Modelo           := QConsulta.FieldByName('MODELO_ECF').AsString;
      ACBrBlocoX.ECF.Versao           := QConsulta.FieldByName('VERSAO_SB_ECF').AsString;

      ACBrBlocoX.ReducoesZ.DataReferencia   := DataReducao;
      ACBrBlocoX.ReducoesZ.CRZ              := QConsulta.FieldByName('CNT_REDUCOES').AsInteger;
      ACBrBlocoX.ReducoesZ.COO              := QConsulta.FieldByName('COO').AsInteger;
      ACBrBlocoX.ReducoesZ.CRO              := QConsulta.FieldByName('CNT_REINICIOS').AsInteger;
      ACBrBlocoX.ReducoesZ.VendaBrutaDiaria := QConsulta.FieldByName('VENDA_BRUTA').AsCurrency;
      ACBrBlocoX.ReducoesZ.GT               := QConsulta.FieldByName('VALOR_GT').AsCurrency;

      // Define o nome do arquivo
      NomeArq := 'Reducao_' + IntToStr(YearOf(DataReducao)) + FormatFloat('00', MonthOf(DataReducao)) + FormatFloat('00', DayOf(DataReducao)) + '.XML';

      // Consulta os Totalizadores Parciais
      QConsultaTotalizadores.Close;
      QConsultaTotalizadores.SQL.Text := RetornaSQLTotallizadoresRZ(CodImpressora, DataReducao); // Esta consulta me retorna os totalizadores da redução
      //CopiaParaClipboard(QConsultaTotalizadores.SQL.Text);
      QConsultaTotalizadores.Open;

      ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Clear;

      QConsultaTotalizadores.First;
      while not QConsultaTotalizadores.Eof do    // Percorrendo os totalizadores
      begin

         lbMensagens.Caption := 'Redução Z do Dia: ' + DateToStr(DataReducao) + ' (T.:) ' + QConsultaTotalizadores.FieldByName('REGISTRADOR').AsString;
         lbMensagens.Update;

         ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add.Identificacao := QConsultaTotalizadores.FieldByName('REGISTRADOR').AsString;
         ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add.Valor := QConsultaTotalizadores.FieldByName('VALOR').AsCurrency;

         // Consulta os produtos vendidos
         QConsultaProdutos.Close;
         QConsultaProdutos.SQL.Text := RetornaSQLProdutosRZ(CodImpressora, QConsulta.FieldByName('CNT_REDUCOES').AsString, QConsultaTotalizadores.FieldByName('REGISTRADOR').AsString); // Consulta dos produtos
         QConsultaProdutos.Open;

         QConsultaProdutos.First;
         while not QConsultaProdutos.Eof do // Percorrendo os produtos da redução
         begin

            lbMensagens.Caption := 'Redução Z do Dia: ' +
                                   DateToStr(DataReducao) + ' (T.:) ' +
                                   QConsultaTotalizadores.FieldByName('REGISTRADOR').AsString +
                                   'Prod.:' + QConsultaProdutos.FieldByName('COD_PRODUTO').AsString;
            lbMensagens.Update;

            // Atribui os balores
            CodProduto   := QConsultaProdutos.FieldByName('COD_PRODUTO').AsString;
            DescProduto  := QConsultaProdutos.FieldByName('DESCRICAO').AsString;
            QtdeProduto  := QConsultaProdutos.FieldByName('QUANTIDADE').AsInteger;
            CodUnidade   := QConsultaProdutos.FieldByName('COD_UNIDADE').AsString;
            PrecoProduto := QConsultaProdutos.FieldByName('PRECO_CONTRATO').AsCurrency;

            if QConsultaProdutos.FieldByName('TIPO_PRODUTO').AsString = 'SERVIÇO' then
            begin
               ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add.Servicos.Add.Codigo.Tipo   := tpcProprio;
               ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add.Servicos.Add.Codigo.Numero := CodProduto;
               ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add.Servicos.Add.Descricao     := DescProduto;
               ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add.Servicos.Add.Quantidade    := QtdeProduto;
               ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add.Servicos.Add.Unidade       := RetornaUnidadeMedida(CodUnidade);
               ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add.Servicos.Add.ValorUnitario := PrecoProduto;
            end
            else
            begin
               ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add.Produtos.Add.Codigo.Tipo   := tpcProprio;
               ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add.Produtos.Add.Codigo.Numero := CodProduto;
               ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add.Produtos.Add.Descricao     := DescProduto;
               ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add.Produtos.Add.Quantidade    := QtdeProduto;
               ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add.Produtos.Add.Unidade       := RetornaUnidadeMedida(CodUnidade);
               ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add.Produtos.Add.ValorUnitario := PrecoProduto;
            end;

            QConsultaProdutos.Next;

         end;

         QConsultaTotalizadores.Next;

      end;

      ACBrBlocoX.ReducoesZ.SaveToFile(v_DiretorioArq + NomeArq);
      //ACBrBlocoX.SSL.Enviar

      QConsulta.Next;

   end;

   lbMensagens.Caption := 'Mensagens:...';
   lbMensagens.Update;

end;

 

Link to comment
Share on other sites

Régys,

Na minha rotina retirei os produtos e observe que para cada totalizador que eu tenho o XML é gerado com uma TAG <TotalizadorParcial> com a identificação  <Identificacao/>

<TotalizadorParcial>
    <Identificacao>01</Identificacao>
    <Valor>0</Valor>
    <ProdutosServicos/>
</TotalizadorParcial>

<TotalizadorParcial>
    <Identificacao/>
    <Valor>0</Valor>
    <ProdutosServicos/>
</TotalizadorParcial>

<TotalizadorParcial>
    <Identificacao>04</Identificacao>
    <Valor>0</Valor>
    <ProdutosServicos/>
</TotalizadorParcial>

<TotalizadorParcial>
    <Identificacao/>
    <Valor>0</Valor>
    <ProdutosServicos/>
</TotalizadorParcial>

Link to comment
Share on other sites

  • Moderadores

Veja no teu código, você faz um add para cada propriedade, isso é errado.

Por isso lhe perguntei se estudou o demo, veja no demo que o Add, adiciona um novo item a lista, depois você preenche as propriedades deste item.

Por exemplo:

with ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add do
begin
  ... 
  ...

  with Servicos.Add do
  begin
    Codigo.Tipo   := tpcProprio;
    Codigo.Numero := CodProduto;
    Descricao     := DescProduto;
    Quantidade    := QtdeProduto;
    Unidade       := RetornaUnidadeMedida(CodUnidade);
    ValorUnitario := PrecoProduto;
  end;
  ...
end;

 

  • Like 1

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link to comment
Share on other sites

  • Moderadores

Cada vez que você chama o Add ele cria um objeto novo então você tem que usar o with ou passar o retorno do Add para uma variável, exemplo:

 

var
  (...)
  t: TACBrBlocoX_Totalizador;
  ts: TACBrBlocoX_Servico;
  tp: TACBrBlocoX_Produto;
begin

  (...)

  t := ACBrBlocoX.ReducoesZ.TotalizadoresParciais.Add;
  t.Identificacao := QConsultaTotalizadores.FieldByName('REGISTRADOR').AsString;
  t.Valor := QConsultaTotalizadores.FieldByName('VALOR').AsCurrency;

  (...)

  if QConsultaProdutos.FieldByName('TIPO_PRODUTO').AsString = 'SERVIÇO' then
  begin
    ts := t.Servicos.Add;
    ts.Codigo.Tipo   := tpcProprio;
    ts.Codigo.Numero := CodProduto;
    ts.Descricao     := DescProduto;
    ts.Quantidade    := QtdeProduto;
    ts.Unidade       := RetornaUnidadeMedida(CodUnidade);
    ts.ValorUnitario := PrecoProduto;
  end
  else
  begin
    tp := t.Produtos.Add;
    tp.Codigo.Tipo   := tpcProprio;
    tp.Codigo.Numero := CodProduto;
    tp.Descricao     := DescProduto;
    tp.Quantidade    := QtdeProduto;
    tp.Unidade       := RetornaUnidadeMedida(CodUnidade);
    tp.ValorUnitario := PrecoProduto;
  end;
  

 

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link to comment
Share on other sites

  • Moderadores
3 horas atrás, Romulo Cordeiro disse:

mas voce usa o comando with e eu não usei o mesmo e por isso tenho que atribuir todas as propriedades.

Por favor estude o demo e a linguagem Object Pascal, isso é imprescindível para que você avance no seu desenvolvimento.

  • Like 1

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link to comment
Share on other sites

Boa Tarde,

Mais uma dúvida:

<Produto>

    <Descricao>GASOLINA COMUM</Descricao>

    <Codigo Tipo="Proprio">0180035</Codigo>

    <Quantidade>17</Quantidade> // Esta quantidade aqui deveria ser 16,69 mas foi arredondada para 17

    <Unidade>L</Unidade>

    <ValorUnitario>349</ValorUnitario> // Este valor aqui deveria ser 3,49 mas foi colocado 349

</Produto>

Porque isso acontece? é correto mesmo o componente gerar dessa forma?

 

Após a geração do arquivo, como faço a transmissão e como testo o retorno dessa transmissão?

Link to comment
Share on other sites

  • Consultores

2.2 - Permaneça no assunto - Quando tiver uma dúvida diferente do assunto no tópico, poste em novo tópico. Não use algo equivalente a "aproveitando o gancho... [dúvida não relacionada com o tópico aqui]". Favor leia as regras do fórum.

[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

  • Consultores
1 hora atrás, Romulo Cordeiro disse:

Bom dia EMBarbosa.

Mas a dúvida se trata do mesmo tópico (Redução Z). Apenas outra tag.

Ou seja, toda minha duvida é sobre o XML da Redução Z.

 

Não. Você tem várias dúvidas sobre o XML da Redução Z. O que não é o mesmo que ter uma dúvida sobre um assunto.

Leia novamente as regras e o segundo post do tópico Como fazer perguntas inteligentes e receber respostas satisfatórias.

Daí se atente ao seguinte ponto:

  • Ao criar um tópico, use um título específico como "Devo criar um registro R7 para cada R4 e para cada R6?". Não algo genérico como "Dúvida sobre R6 e R7";

[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.