 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Sex Mai 07, 2010 11:49 am Assunto: Dúvida para montar Vendas no Caixa..... |
|
|
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 |
|
 |
carbox Colaborador

Registrado: Quarta-Feira, 3 de Março de 2010 Mensagens: 1471
|
Enviada: Sex Mai 07, 2010 12:03 pm Assunto: Re: Dúvida para montar Vendas no Caixa..... |
|
|
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 |
|
 |
Fabianoluizdb Membro Junior

Registrado: Segunda-Feira, 17 de Agosto de 2009 Mensagens: 396
|
Enviada: Sex Mai 07, 2010 12:19 pm Assunto: |
|
|
Minha Opinião
eu criaria ClientDataSet e somente quando finalizar ai sim jogava no banco, acho mais seguro. |
|
| Voltar ao Topo |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Sex Mai 07, 2010 1:16 pm Assunto: Re: Dúvida para montar Vendas no Caixa..... |
|
|
| 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 |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Sex Mai 07, 2010 1:17 pm Assunto: |
|
|
| 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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Sex Mai 07, 2010 1:33 pm Assunto: |
|
|
| 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 |
|
 |
valdoedri Profissional


Registrado: Segunda-Feira, 7 de Março de 2005 Mensagens: 523 Localização: Campo Grande MS
|
Enviada: Sex Mai 07, 2010 1:42 pm Assunto: |
|
|
| 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 |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Sex Mai 07, 2010 1:49 pm Assunto: |
|
|
| 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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
| Voltar ao Topo |
|
 |
valdoedri Profissional


Registrado: Segunda-Feira, 7 de Março de 2005 Mensagens: 523 Localização: Campo Grande MS
|
Enviada: Sex Mai 07, 2010 1:59 pm Assunto: |
|
|
Vou criar um simples exemplo aqui, se der envio ainda hoje.
T+ _________________ Tudo posso Naquele que me fortalece ! ! ! |
|
| Voltar ao Topo |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Sex Mai 07, 2010 2:01 pm Assunto: |
|
|
| 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 |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Sex Mai 07, 2010 2:02 pm Assunto: |
|
|
| 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 |
|
 |
pestana Colaborador

Registrado: Sábado, 25 de Junho de 2005 Mensagens: 3147 Localização: Araras-SP
|
Enviada: Sex Mai 07, 2010 2:48 pm Assunto: |
|
|
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 |
|
 |
valdoedri Profissional


Registrado: Segunda-Feira, 7 de Março de 2005 Mensagens: 523 Localização: Campo Grande MS
|
Enviada: Sex Mai 07, 2010 2:55 pm Assunto: |
|
|
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 |
|
 |
pestana Colaborador

Registrado: Sábado, 25 de Junho de 2005 Mensagens: 3147 Localização: Araras-SP
|
Enviada: Sex Mai 07, 2010 3:15 pm Assunto: |
|
|
| 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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|