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 

Dúvida para montar Vendas no Caixa.....
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Sex Mai 07, 2010 11:49 am    Assunto: Dúvida para montar Vendas no Caixa..... Responder com Citação

Pessoal,
To desenvolvendo um módulo de caixa para meu sistema.... e to com a seguinte duvida...

Alguns considerações para q entendam a duvida:

1º Toda venda realizada tem um vendedor responsavel que gera uma comissão para este vendedor.

2º Na mesma venda pode ter dois vendedores só que com produtos separadados (Tipo o cliente leva dois itens e cada um pertence a um vendedor)

Bom tenha as seguintes tabelas:
Caixa
Vendas
Itens_Vendas

Na tabela Caixa verifico o status do caixa se o mesmo encontra se aberto ou não

Na tabela Vendas qnd realizo uma nova venda pego ID do ultimo caixa a berto onde a tabela esta relacionada FK

Na Tebela Itens_Vendas pego o ID da tabela Venda que o ID atual desta venda onde tbm estão relacionados FK

Agora que vem a Duvida.... tipo to inserindo uma nova venda no caixa, to iserindo os produtos comprados q no caso a cada venda naum passam de dois produtos por venda na maioria dos caso é sempre um, qnd executo uma nova venda já insiro o registro na Tabela Itens_Vendas mesmo antes de finalizar a venda para os Dados aparecerem no DbGrid para isso utilizo IBDataSet se caso o usário cancele a venda, dou um delete nos dados que estão no IBDateSet em memória, mas que já estão salvos no Banco.... qnd o usuário finaliza uma venda, eu mudo o status desse item na Tabela Itens_Vendas para concluido, o que dispara uma Trigger e inseri esses dados em outra tabela que utilizo pra consultas de valores de comissão... pois bem o problema é o seguinte supondo que o usuário esta no meio de uma venda apenas naum finalizou ainda e derrepente cai a energia, ele vai reiniciar td o processo e começar uma nova venda e finaliza-la o que vai disparar a Trigger e td mais... só que a venda em que ele estava antes da energia cair esta gravada no banco na Tabela Itens_Vendas ela naum gerara problemas pois naum tem Stuas Concluido ou seja ela nunca ira para a tabela comições, movimentações.... mas é um dado que esta na tabela que naum serve pra nada... como posso contornar isso... ou estou fazendo errado tipo o melhor seria trabalhar com dados em memoria e só mandar pra tabela qnd a venda fosse concluida mesmo... mas isso naum sei como fazer... se for assim e alguem puder dar uma mão ficarei grato... agora se do jeito que estou fazendo esta certo como eu poderia contornar esse problema....


Utilizo Delphi 7 + Firebird 2.1
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
carbox
Colaborador
Colaborador


Registrado: Quarta-Feira, 3 de Março de 2010
Mensagens: 1471

MensagemEnviada: Sex Mai 07, 2010 12:03 pm    Assunto: Re: Dúvida para montar Vendas no Caixa..... Responder com Citação

Deixa gravando logo no banco, se cancelar faz a rotina de exclusao...

So não entendi como vc ta fazendo pra colocar 2 vendedores ai

edsonalves escreveu:
Pessoal,
To desenvolvendo um módulo de caixa para meu sistema.... e to com a seguinte duvida...

Alguns considerações para q entendam a duvida:

1º Toda venda realizada tem um vendedor responsavel que gera uma comissão para este vendedor.

2º Na mesma venda pode ter dois vendedores só que com produtos separadados (Tipo o cliente leva dois itens e cada um pertence a um vendedor)

Bom tenha as seguintes tabelas:
Caixa
Vendas
Itens_Vendas

Na tabela Caixa verifico o status do caixa se o mesmo encontra se aberto ou não

Na tabela Vendas qnd realizo uma nova venda pego ID do ultimo caixa a berto onde a tabela esta relacionada FK

Na Tebela Itens_Vendas pego o ID da tabela Venda que o ID atual desta venda onde tbm estão relacionados FK

Agora que vem a Duvida.... tipo to inserindo uma nova venda no caixa, to iserindo os produtos comprados q no caso a cada venda naum passam de dois produtos por venda na maioria dos caso é sempre um, qnd executo uma nova venda já insiro o registro na Tabela Itens_Vendas mesmo antes de finalizar a venda para os Dados aparecerem no DbGrid para isso utilizo IBDataSet se caso o usário cancele a venda, dou um delete nos dados que estão no IBDateSet em memória, mas que já estão salvos no Banco.... qnd o usuário finaliza uma venda, eu mudo o status desse item na Tabela Itens_Vendas para concluido, o que dispara uma Trigger e inseri esses dados em outra tabela que utilizo pra consultas de valores de comissão... pois bem o problema é o seguinte supondo que o usuário esta no meio de uma venda apenas naum finalizou ainda e derrepente cai a energia, ele vai reiniciar td o processo e começar uma nova venda e finaliza-la o que vai disparar a Trigger e td mais... só que a venda em que ele estava antes da energia cair esta gravada no banco na Tabela Itens_Vendas ela naum gerara problemas pois naum tem Stuas Concluido ou seja ela nunca ira para a tabela comições, movimentações.... mas é um dado que esta na tabela que naum serve pra nada... como posso contornar isso... ou estou fazendo errado tipo o melhor seria trabalhar com dados em memoria e só mandar pra tabela qnd a venda fosse concluida mesmo... mas isso naum sei como fazer... se for assim e alguem puder dar uma mão ficarei grato... agora se do jeito que estou fazendo esta certo como eu poderia contornar esse problema....


Utilizo Delphi 7 + Firebird 2.1
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Fabianoluizdb
Membro Junior
Membro Junior


Registrado: Segunda-Feira, 17 de Agosto de 2009
Mensagens: 396

MensagemEnviada: Sex Mai 07, 2010 12:19 pm    Assunto: Responder com Citação

Minha Opinião

eu criaria ClientDataSet e somente quando finalizar ai sim jogava no banco, acho mais seguro.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Sex Mai 07, 2010 1:16 pm    Assunto: Re: Dúvida para montar Vendas no Caixa..... Responder com Citação

carbox escreveu:
Deixa gravando logo no banco, se cancelar faz a rotina de exclusao...


Sim... é o jeito que já estou fazendo.... o problema foi o que mencionei se no meio de uma venda cai a energia... a venda não foi finalizada mas os dados já estão no banco

carbox escreveu:
So não entendi como vc ta fazendo pra colocar 2 vendedores ai


Então... aqui faço o seguinte a cada inserção de item escolhe o vendedor, por q pra mesma venda pode ter mais de um vendedor
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/


Editado pela última vez por edsonalves em Sex Mai 07, 2010 1:37 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Sex Mai 07, 2010 1:17 pm    Assunto: Responder com Citação

Fabianoluizdb escreveu:
Minha Opinião

eu criaria ClientDataSet e somente quando finalizar ai sim jogava no banco, acho mais seguro.


Pensei nisso amigo.... mas não tenho idéia de como seria utilizando o ClientDataSet... se souber de agum tuto ai... pode me passar..hehehe
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Mai 07, 2010 1:33 pm    Assunto: Responder com Citação

edsonalves escreveu:
Fabianoluizdb escreveu:
Minha Opinião

eu criaria ClientDataSet e somente quando finalizar ai sim jogava no banco, acho mais seguro.


Pensei nisso amigo.... mas não tenho idéia de como seria utilizando o ClientDataSet... se souber de agum tuto ai... pode me passar..hehehe
Queria saber se desta forma gravando em cache e depois mandando tudo para o banco na hora de encerrar...Se deu um pico de energia? Tem a possibilidade de perder tudo? Digo isso pq nem todos tem nobreak...E ai me deixou em duvida
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
valdoedri
Profissional
Profissional


Registrado: Segunda-Feira, 7 de Março de 2005
Mensagens: 523
Localização: Campo Grande MS

MensagemEnviada: Sex Mai 07, 2010 1:42 pm    Assunto: Responder com Citação

adriano_servitec escreveu:
edsonalves escreveu:
Fabianoluizdb escreveu:
Minha Opinião

eu criaria ClientDataSet e somente quando finalizar ai sim jogava no banco, acho mais seguro.


Pensei nisso amigo.... mas não tenho idéia de como seria utilizando o ClientDataSet... se souber de agum tuto ai... pode me passar..hehehe
Queria saber se desta forma gravando em cache e depois mandando tudo para o banco na hora de encerrar...Se deu um pico de energia? Tem a possibilidade de perder tudo? Digo isso pq nem todos tem nobreak...E ai me deixou em duvida


Se ficar apenas gravado na memória, com certeza se o computador for desligado os dados serão perdidos, acho que uma opção seria ir gravando a venda em um arquivo xml através do ClientDataSet, quando for concluir a venda, envie os dados do xml para o banco.

T+
_________________
Tudo posso Naquele que me fortalece ! ! !
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Sex Mai 07, 2010 1:49 pm    Assunto: Responder com Citação

valdoedri escreveu:
adriano_servitec escreveu:
edsonalves escreveu:
Fabianoluizdb escreveu:
Minha Opinião

eu criaria ClientDataSet e somente quando finalizar ai sim jogava no banco, acho mais seguro.


Pensei nisso amigo.... mas não tenho idéia de como seria utilizando o ClientDataSet... se souber de agum tuto ai... pode me passar..hehehe
Queria saber se desta forma gravando em cache e depois mandando tudo para o banco na hora de encerrar...Se deu um pico de energia? Tem a possibilidade de perder tudo? Digo isso pq nem todos tem nobreak...E ai me deixou em duvida


Se ficar apenas gravado na memória, com certeza se o computador for desligado os dados serão perdidos, acho que uma opção seria ir gravando a venda em um arquivo xml através do ClientDataSet, quando for concluir a venda, envie os dados do xml para o banco.

T+


No meu caso se cair a energia e os dados forem perdidos, naum tem problema pois foi como eu disse, a cada venda são poucos itens inseridos no máximo 2 ou 3.... agora o problema é do jeito q estou fazendo gravando direto no banco sem ter concluido...

Agora se da pra fazer em XML e cair a energia e qnd o cliente voltar tiver td a li bem melhor né.... mais comodidade pro cliente....

Agora vc tem algum exemplo ai de como fazer isso....
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Mai 07, 2010 1:51 pm    Assunto: Responder com Citação

Ou quem sabe numa tabela temporaria e depois no encerramento passar tudo para a tabela de fechamento.

Bom não sei se estou falando besteiras, pq nunca fiz um sistemas deste, mais sempre tive a curiosidade em saber como é o processo.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
valdoedri
Profissional
Profissional


Registrado: Segunda-Feira, 7 de Março de 2005
Mensagens: 523
Localização: Campo Grande MS

MensagemEnviada: Sex Mai 07, 2010 1:59 pm    Assunto: Responder com Citação

Vou criar um simples exemplo aqui, se der envio ainda hoje.

T+
_________________
Tudo posso Naquele que me fortalece ! ! !
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Sex Mai 07, 2010 2:01 pm    Assunto: Responder com Citação

adriano_servitec escreveu:
Ou quem sabe numa tabela temporaria e depois no encerramento passar tudo para a tabela de fechamento.

Bom não sei se estou falando besteiras, pq nunca fiz um sistemas deste, mais sempre tive a curiosidade em saber como é o processo.


Adriano do jeito que estou fazendo é igual a esse que vc falou.... a cada item armazeno numa tabela chamada itens_vendas e quando concluo a venda disparo uma trigger que passa os dados para uma tabela Movimentos... mas é como eu falei se cair a energia o usuário vai ter que começar de novo e os dados da venda antes de cair ficaram nessa tabela não servindo pra nada....
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Sex Mai 07, 2010 2:02 pm    Assunto: Responder com Citação

valdoedri escreveu:
Vou criar um simples exemplo aqui, se der envio ainda hoje.

T+


Blz amigo... ficamos no aguardo

Vlw
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
pestana
Colaborador
Colaborador


Registrado: Sábado, 25 de Junho de 2005
Mensagens: 3147
Localização: Araras-SP

MensagemEnviada: Sex Mai 07, 2010 2:48 pm    Assunto: Responder com Citação

Edson, eu estou fazendo o seguinte:

Todos os dados são incluídos no banco ao clicar no botão gravar pedido.

No momento em que estou incluíndo item no pedido o registro fica armazenado em memória e quando clicar no botão gravar pedido todos os dados do pedido, itens do pedido...etc, são incluídos no banco e confirmado.

botão gravar pedido:
Código:
begin
   try
      incluirPedido();
      incluirItensPedido();
      ...
      transação.commit;
   except
      // ocorreu uma exceção...
   end;
end;


O problema disso é como você mesmo citou, se cair a energia perde tudo. Grava tudo ou não grava nada.

Agora do jeito que você fez eu não sei como deve proceder nestes casos, mas vamos ver o que os colegas tem a dizer.



Boa Sorte!
_________________
Ao invés de ficar desanimado no que deu de errado, olhe para frente, aprenda com os erros e veja o que ainda pode ser feito. A determinação e a persistência é uma das etapas para o sucesso.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
valdoedri
Profissional
Profissional


Registrado: Segunda-Feira, 7 de Março de 2005
Mensagens: 523
Localização: Campo Grande MS

MensagemEnviada: Sex Mai 07, 2010 2:55 pm    Assunto: Responder com Citação

Veja se isso ajuda:

No form coloque um ClienteDataSet, um DataSource, um DBGrid e um DBNavigator.

Na propriedade FIELDDEFS do ClientDataSet adicione os campo necessários, de preferência igual aos da sua tabela.

Nas propriedades NAME, DATATYPE e SIZE coloue o nome, tipo e tamanho do campo respectivamente.
Na propriedade ATTRIBUTES você terá mais opções para o campo.

Depois de criar os campos, clique com o botão direito no ClientDataSet e clique em CREATE DATASET

Na propriedade FILENAME coloque o caminho e o nome do arquivo a ser salvo (c:\Pasta\dados.xml)

Com os campos criados faça a ligação dos componentes.

Insira os registros normalmente, quando for fechar a venda, envie os dados do Arquivo XML como se fosse uma tabela temporária.

Antes de iniciar uma nova venda limpe o o arquivo XML com os comandos:
Código:
ClientDataSet.Open;
ClientDataSet.EmptyDataSet;
ClientDataSet.Close;
ClientDataSet.Open;

Espero que seja útil.

T+
_________________
Tudo posso Naquele que me fortalece ! ! !
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
pestana
Colaborador
Colaborador


Registrado: Sábado, 25 de Junho de 2005
Mensagens: 3147
Localização: Araras-SP

MensagemEnviada: Sex Mai 07, 2010 3:15 pm    Assunto: Responder com Citação

valdoedri escreveu:
...Insira os registros normalmente, quando for fechar a venda, envie os dados do Arquivo XML como se fosse uma tabela temporária...


valdoedri, aonde fica o arquivo XML, em cada máquina? como você trata a integridade dos dados?

Se um usuário abrir o arquivo XML e mexer nos dados do arquivo?
_________________
Ao invés de ficar desanimado no que deu de errado, olhe para frente, aprenda com os erros e veja o que ainda pode ser feito. A determinação e a persistência é uma das etapas para o sucesso.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
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