ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Inclusão de produtos da tela de vendas no banco

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
will_pacini
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 5 de Janeiro de 2011
Mensagens: 214

MensagemEnviada: Sex Out 30, 2015 1:09 pm    Assunto: Inclusão de produtos da tela de vendas no banco Responder com Citação

Olá,

Estou com dificuldade em algo que deve ser bem simples mas não consigo entender.

Estou criando um sistema de PDV simples e estou com um problema para incluir todos os produtos da tela de vendas na minha tabela do banco.

Se eu jogar 10 produtos na tela, apenas o último fica salvo no banco.

Alguém poderia me ajudar?

Estou utilizando Firebird 2.5 e Xe3.

Segue meu código de finalizar a venda, aqui ele lança os produtos em um CDS e abre a tela de finalização onde o usuário daria desconto e escolheria a forma de pagamento e daria um applyupdates no CDS...

Código:
procedure TfrmVendas.BitBtn3Click(Sender: TObject);
begin
  dsPedido.DataSet.Open;
  dsPedido.DataSet.Insert;
 
 
 
  dmFechamento.cdsPedido.FieldByName('DATA').AsDateTime := now;
  dmFechamento.cdsPedido.FieldByName('HORA_FECHA').AsDateTime := TIME;
  dmFechamento.cdsPedidoVALOR_TOTAL.Value   := ClientDataSet1SomaTotal.Value;
  dmFechamento.cdsPedidoQTD_PRODUTO.Value   := ClientDataSet1Qtd.Value;
  dmFechamento.cdsPedidoCORTE.Value         := ClientDataSet1TipoCorte.Value;
  dmFechamento.cdsPedidoBORDA.Value         := ClientDataSet1Borda.Value;
  dmFechamento.cdsPedidoTAMANHO.Value       := ClientDataSet1Tamanho.Value;
  dmFechamento.cdsPedidoOBS_PRODUTO.Value   := ClientDataSet1Obs.Value;
  dmFechamento.cdsPedidoID_PRODUTO.Value    := ClientDataSet1Id_Produto.Value;
  dmFechamento.cdsPedidoID_SECAO.Value      := ClientDataSet1ID_SECAO.Value;
  dmFechamento.cdsPedidoID_FORNECEDOR.Value := ClientDataSet1ID_FORNECEDOR.Value;
 
 
  dsPedido.DataSet.Post;
  // dmFechamento.cdsPedido.ApplyUpdates(0);
 
  frmFechamento := TfrmFechamento.Create(Self);
  frmFechamento.ShowModal;
  FreeAndNil(frmFechamento);
 
end;


obs: o applyupdates "comentado" é proposital.

Obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Out 30, 2015 1:35 pm    Assunto: Responder com Citação

Boa tarde,

Os produtos a serem gravados no banco de dados estão no ClientDataSet1?
Se estão, acredito que esteja faltando um looping para ler todos os registros do ClientDataSet1 e inseri-los no outro ClientDataSet.

Espero que ajude.

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
will_pacini
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 5 de Janeiro de 2011
Mensagens: 214

MensagemEnviada: Sex Out 30, 2015 1:37 pm    Assunto: Responder com Citação

imex escreveu:
Boa tarde,

Os produtos a serem gravados no banco de dados estão no ClientDataSet1?
Se estão, acredito que esteja faltando um looping para ler todos os registros do ClientDataSet1 e inseri-los no outro ClientDataSet.

Espero que ajude.

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos-residencial-casa


Boa tarde Imex, sim estão

Puts pode ser mesmo, você poderia me dar uma luz?

Estou perdido rs

Obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Out 30, 2015 2:11 pm    Assunto: Responder com Citação

Experimente mais ou menos dessa forma:

Código:
ClientDataSet1.First;
while not ClientDataSet1.Eof do
  begin
    dmFechamento.cdsPedido.Insert;
    dmFechamento.cdsPedido.FieldByName('DATA').AsDateTime := now;
    dmFechamento.cdsPedido.FieldByName('HORA_FECHA').AsDateTime := TIME;
    dmFechamento.cdsPedidoVALOR_TOTAL.Value   := ClientDataSet1SomaTotal.Value;
    dmFechamento.cdsPedidoQTD_PRODUTO.Value   := ClientDataSet1Qtd.Value;
    dmFechamento.cdsPedidoCORTE.Value         := ClientDataSet1TipoCorte.Value;
    dmFechamento.cdsPedidoBORDA.Value         := ClientDataSet1Borda.Value;
    dmFechamento.cdsPedidoTAMANHO.Value       := ClientDataSet1Tamanho.Value;
    dmFechamento.cdsPedidoOBS_PRODUTO.Value   := ClientDataSet1Obs.Value;
    dmFechamento.cdsPedidoID_PRODUTO.Value    := ClientDataSet1Id_Produto.Value;
    dmFechamento.cdsPedidoID_SECAO.Value      := ClientDataSet1ID_SECAO.Value;
    dmFechamento.cdsPedidoID_FORNECEDOR.Value := ClientDataSet1ID_FORNECEDOR.Value;
    dmFechamento.cdsPedido.Post;
    ClientDataSet1.Next;
  end;


Espero que ajude.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
will_pacini
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 5 de Janeiro de 2011
Mensagens: 214

MensagemEnviada: Sex Out 30, 2015 2:22 pm    Assunto: Responder com Citação

imex escreveu:
Experimente mais ou menos dessa forma:

Código:
ClientDataSet1.First;
while not ClientDataSet1.Eof do
  begin
    dmFechamento.cdsPedido.Insert;
    dmFechamento.cdsPedido.FieldByName('DATA').AsDateTime := now;
    dmFechamento.cdsPedido.FieldByName('HORA_FECHA').AsDateTime := TIME;
    dmFechamento.cdsPedidoVALOR_TOTAL.Value   := ClientDataSet1SomaTotal.Value;
    dmFechamento.cdsPedidoQTD_PRODUTO.Value   := ClientDataSet1Qtd.Value;
    dmFechamento.cdsPedidoCORTE.Value         := ClientDataSet1TipoCorte.Value;
    dmFechamento.cdsPedidoBORDA.Value         := ClientDataSet1Borda.Value;
    dmFechamento.cdsPedidoTAMANHO.Value       := ClientDataSet1Tamanho.Value;
    dmFechamento.cdsPedidoOBS_PRODUTO.Value   := ClientDataSet1Obs.Value;
    dmFechamento.cdsPedidoID_PRODUTO.Value    := ClientDataSet1Id_Produto.Value;
    dmFechamento.cdsPedidoID_SECAO.Value      := ClientDataSet1ID_SECAO.Value;
    dmFechamento.cdsPedidoID_FORNECEDOR.Value := ClientDataSet1ID_FORNECEDOR.Value;
    dmFechamento.cdsPedido.Post;
    ClientDataSet1.Next;
  end;


Espero que ajude.



Maravilha

só tive um problema onde cada produto criou um novo Id de pedido, mas o caminho é esse...

Vou dar uma olhada o pq houve isso.

Mas obrigado!

Foi de grande ajuda!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
will_pacini
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 5 de Janeiro de 2011
Mensagens: 214

MensagemEnviada: Qui Nov 05, 2015 8:01 am    Assunto: Responder com Citação

Pessoal, quebrei a cabeça a semana inteira mas não consigo resolver.

a cada produto da minha tela de vendas ele cria uma nova ID de pedido,

O correto seria a venda conter um ID para todos os produtos, não?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Nov 05, 2015 9:28 am    Assunto: Responder com Citação

Onde você está preenchendo o ID do pedido? No banco de dados ou na sua aplicação?
Se é na sua aplicação, em que evento ou local exato está sendo feito o preenchimento do campo?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
will_pacini
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 5 de Janeiro de 2011
Mensagens: 214

MensagemEnviada: Sex Nov 06, 2015 7:19 am    Assunto: Responder com Citação

imex escreveu:
Onde você está preenchendo o ID do pedido? No banco de dados ou na sua aplicação?
Se é na sua aplicação, em que evento ou local exato está sendo feito o preenchimento do campo?


Bom dia, o Id é gerado pelo Firebird.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Nov 06, 2015 8:20 am    Assunto: Responder com Citação

Bom dia,

Você pode utilizar um generator (ou sequence) no banco de dados Firebird para gerar os Ids, mas acredito que você vai ter que utilizar código na sua aplicação para obter um novo Id do BD e utiliza-lo para preencher o campo do Id do pedido da tabela de itens (produtos).
Lembrando que o BD não deverá preencher esse campo nesse caso porque o mesmo já está sendo preenchido na aplicação.

Espero que ajude.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
will_pacini
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 5 de Janeiro de 2011
Mensagens: 214

MensagemEnviada: Sex Nov 06, 2015 8:28 am    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Você pode utilizar um generator (ou sequence) no banco de dados Firebird para gerar os Ids, mas acredito que você vai ter que utilizar código na sua aplicação para obter um novo Id do BD e utiliza-lo para preencher o campo do Id do pedido da tabela de itens (produtos).
Lembrando que o BD não deverá preencher esse campo nesse caso porque o mesmo já está sendo preenchido na aplicação.

Espero que ajude.


Certo, então só para esclarecer, o que está acontecendo está errado certo?

Se a venda conter 10 produtos, os 10 produtos precisam ter um único ID de "pedido" no caso. Certo?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Nov 06, 2015 8:47 am    Assunto: Responder com Citação

Nesse caso é necessário ter em algum campo da tabela um mesmo Id para que seja possível identificar que os 10 produtos (ou quantos forem) são da mesma venda/pedido.

Espero que ajude.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
will_pacini
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 5 de Janeiro de 2011
Mensagens: 214

MensagemEnviada: Sex Nov 06, 2015 8:52 am    Assunto: Responder com Citação

imex escreveu:
Nesse caso é necessário ter em algum campo da tabela um mesmo Id para que seja possível identificar que os 10 produtos (ou quantos forem) são da mesma venda/pedido.

Espero que ajude.


Maravilha!

Ajudou muito, obrigado mesmo!

Abraços
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB