Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

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

Postado

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;

 

Postado

Bom dia,

Régys.

Só mais uma pergunta: eu olhei o componente e não entendi como e quando ocorre a transmissão do arquivo? e a resposta do retorno como eu analiso?

Grato pela atenção.

Postado

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>

  • Moderadores
Postado

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;

 

  • Curtir 1

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
  • Moderadores
Postado

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

 

 

  • Moderadores
Postado
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.

  • Curtir 1

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Postado

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?

  • Consultores
Postado

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
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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.
  • Consultores
Postado
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
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

The popup will be closed in 10 segundos...