Sistema para Lanchonetes
Pois então, eu estou com um sistema de lanchonetes em faze de termino , unica coisa que precisa ser fenalizado é : Controle de mesas , minha parte de vendas esta toda completa ,a unica peça do quebra cabeça é este de movimento de mesas. Bom espero que você leia este email e veja com carinho se poderia me ajudar , se caso tiver algum projeto feito pra eu ter uma base , comparar com o meu, pra que eu tenha pelo menos uma base necessária.
Abraço
Att Junior Rezende

Clovis Junior
Respostas

Joel Rodrigues
01/01/2013
Amigo, qual é exatamente sua dificuldade? Tente deixar o mais claro possível para que possamos tentar te ajudar.
Abraço.

Clovis Junior
01/01/2013

Clovis Junior
01/01/2013
Agora minha lógica é , ao clicar no botao da "mesa 1" vai abrir a tela de vendas ,nesta tela de vendas vai ter uma label mostrando o numero da mesa e uma editOcupantes pra mostrar quantos ocupantes estão na "mesa 1", bom ao realizar a abertura desta mesa , o funcionario do caixa incluirá os produtos realizados daquela mesa , mais enquanto isso esta mesa poderá ser aberta quanto puder ate a realização do pagamento da mesma, inquanto isso o funcionario poderá abrir outras mesas assim por diante. Ao abrir a mesa 1, no botão da mesa 1 , apresentará o status da mesa ou seja " ocupado,reservado,livre, fechada" .Pois ao realizar outra venda para outras mesas , será realizado o mesmo processo. caso queira voltar pra mesa 1 , mais os dados não serão habilitados para edição ou seja terá um botão para edição da determinada mesa.Por fim a mesa que for efetuar o pagamento dos teus determinados pedidos , será realizado uma emissão de um cupom nela com os detalhes dos determinados produtos e suas caracteristicas,ao fechar a conta desta mesa , automaticamente ela será realizada a liberação da mesma. Bom este é meu projeto no qual falta pouco pra terminar que é a inclusao de mesas dos pedidos de vendas. Espero que alguem do forun pode me auxiliar e fico muito grato com isso , muito obrigado !!!

Joel Rodrigues
01/01/2013
Você já gerou os vários botões representando as mesas, ou essa é uma das coisas que está faltando?
Há cerca de dois anos fiz um sisteminha assim em C# para um bar, só que ocorreu uma desgraça no PC e acabei perdendo todos os fontes.

Renato
01/01/2013
Não sei como por imagem aqui, se souber me explica que eu coloco a tela do meu soft de lanchonete/pizzaria.
Feliz Ano Novo
Renato

Clovis Junior
01/01/2013

Clovis Junior
01/01/2013
http://imageshack.us/
ai vc acessa com teu usuario do facebook caso tiver , ai escolhe a imagem este link eh bom
quando carregar a imagem
vc pega e cola no forun aki :D
ai de boa amigo

Clovis Junior
01/01/2013

Laelson Fagundes
01/01/2013

Joel Rodrigues
01/01/2013
Depois você faz um loop criando TButtons e inserindo nesse painel. Para cada TButton, defina a Tag ou Caption com o número da mesa, isso será usado posteriormente para saber qual mesa está sendo aberta.

Renato
01/01/2013
http://imageshack.us/photo/my-images/37/telamesas.jpg/

Clovis Junior
01/01/2013
deixa eu te falar , no botao "MESA 1 " eu coloco o mesmo codigo na hora de adicionar uma nova venda ?la no formualario de vendas ?

Clovis Junior
01/01/2013
[URL=http://imageshack.us/photo/my-images/855/semttuloqq.png/][IMG]http://img855.imageshack.us/img855/5641/semttuloqq.png[/IMG][/URL]
Uploaded with [URL=http://imageshack.us]ImageShack.us[/URL]

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013
procedure TForm2.AbrirMesa(Sender: TObject); begin ShowMessage((Sender as TButton).Caption); end; procedure TForm2.FormCreate(Sender: TObject); var i : Integer; b : TButton; begin for i := 1 to 15 do begin b := TButton.Create(Self); b.Caption := 'Mesa ' + IntToStr(i); b.Align := alClient; b.Click := AbrirMesa; GridPanel1.InsertControl(b); end; end;
Nesse caso eu tenho um GridPanel com 15 células, quando adiciono os botões, eles são organizados automaticamente em forma de tabela.
Veja só como fica: https://dl.dropbox.com/u/78226427/TelaMesas_01.jpg.
No método AbrirMesa, que nada mais é que um Event Handler para o evento OnClick dos botões, eu coloquei apenas um ShowMessage com o caption do botão que está sendo clicado, mas você poderia implementar ali a abertura da tela de vendas para aquela mesa.
Eu usei o Caption dos TButtons, mas para armazenar apenas o valor inteiro referente ao número da mesa, você poderia usar a Tag.
Abraço.

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013
Por que não usa o GridPanel, como eu sugeri?

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013
AbrirMesa(Sender: TObject);

Clovis Junior
01/01/2013
procedure TfrmMovMesa.abrirmesa;
begin
ShowMessage((Sender as TButton).Caption);
end;
só que esta dando erro grifando de vermelho em cima do SENDER

Joel Rodrigues
01/01/2013
Por exemplo:
TFormMesas = class(TForm) private procedure AbrirMesa(Sender : TObject);
Então você pode pressionar CTRL+SHIFT+C com o cursor sobre o procedure para implementar o corpo do método.

Clovis Junior
01/01/2013
erro nesta linha quando copila - > b.click := abrirmesa;

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013
agora de deu certo mais agora deu erro na mesma linha de baixo
procedure TfrmMovMesa.abrirmesa;
begin
ShowMessage((Sender as TSpeedButton.Caption)); aqui //[DCC Error] UMesa1.pas(54): E2233 Property 'Caption' inaccessible here
end;

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013
Veja:
ShowMessage((Sender as TSpeedButton).Caption);

Clovis Junior
01/01/2013

Clovis Junior
01/01/2013

Clovis Junior
01/01/2013
http://img189.imageshack.us/img189/9929/semttuloery.png

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013
agora falta implementação do codigo, deixa eu te pergunta amigo , vc nao tem um exemplo pratico pra mim só eu ter uma ideia ?

Clovis Junior
01/01/2013
http://imageshack.us/photo/my-images/189/semttuloery.png/

Joel Rodrigues
01/01/2013
Você já tem o código da mesa ao clicar no botão (pegar pelo caption ou pela tag), agora você passa esse código pra tela de vendas e faz o pedido normalmente.

Clovis Junior
01/01/2013

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013
Você só vai abrir/editar uma mesa por vez, não várias ao mesmo tempo. Para abrir outra mesa, você sai da atual e abre a outra.

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013
Como está seu banco de dados?

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013
É basicamente oque precisamos.

Clovis Junior
01/01/2013

Clovis Junior
01/01/2013
Cod_venda
cod_cliente
cod_mesa
data_venda
total_venda
desconto
venda
tabela de produtos (estoque)
cod_produto
nome_produto
estoque
marca
preco_uni
cod_fornecedor
cod_tipo
cod_unidade
descricao
tabela de itensdavenda
codigo_itens
cod_venda
cod_produto
quantidade
preco_unitario
tabela de mesa
cod_mesa
numero_mesa
status_mesa
situação
obs
data_mesa
hora_entrada
hora_saida
ocupantes

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013
http://img145.imageshack.us/img145/7876/semttulousw.png

Clovis Junior
01/01/2013
vai ser esta jogada , esta tela de pedido vai ser como uma tabela temporaria ,vai servir só pra isso!

Joel Rodrigues
01/01/2013
Declare na seção PUBLIC do formulário uma variável para receber o número da mesa, por exemplo:
NumeroMesa : Integer;
Lá no evento OnClick dos botões gerados dinamicamente, você vai instanciar esse form (de vendas) e atribuir um valor a essa variável, por exemplo::
FormVenda := TFormVenda.Create(Application); FormVenda.NumeroMesa := (Sender as TSpeedButton).Tag; //Considerando que você atribuiu o número da mesa à tag do botão FormVenda.ShowModal();
Para testar, coloque um label para exibir essa propriedade na tela de vendas.

Joel Rodrigues
01/01/2013
Declare na seção PUBLIC do formulário uma variável para receber o número da mesa, por exemplo:
NumeroMesa : Integer;
Lá no evento OnClick dos botões gerados dinamicamente, você vai instanciar esse form (de vendas) e atribuir um valor a essa variável, por exemplo::
FormVenda := TFormVenda.Create(Application); FormVenda.NumeroMesa := (Sender as TSpeedButton).Tag; //Considerando que você atribuiu o número da mesa à tag do botão FormVenda.ShowModal();
Para testar, coloque um label para exibir essa propriedade na tela de vendas.

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013
NumeroMesa : Integer;

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013
este codigo de aplicação

Joel Rodrigues
01/01/2013
Então no botão que vai abrir a tela de vendas (aqueles botões gerados automaticamente), você vai chamar o form de vendas passando para ele o código da mesa seleionada. Para isso você vai precisar de algo do tipo:
FormVenda := TFormVenda.Create(Application); FormVenda.NumeroMesa := (Sender as TSpeedButton).Tag; //Considerando que você atribuiu o número da mesa à tag do botão FormVenda.ShowModal();

Clovis Junior
01/01/2013

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013
frmnovavenda := TfrmNovaVenda.Create(Application);
frmnovavenda.NumeroMesa := (Sender as TSpeedButton).Tag; //Considerando que você atribuiu o número da mesa à tag do botão
frmnovavenda.ShowModal();

Clovis Junior
01/01/2013
: Connot make a visible windows modal'.

Clovis Junior
01/01/2013
procedure TfrmMovMesa.abrirmesa;
begin
frmnovavenda := TfrmNovaVenda.Create(Application);
frmnovavenda.NumeroMesa := (Sender as TSpeedButton).Tag;
//Considerando que você atribuiu o número da mesa à tag do botão
frmnovavenda.Show;
ShowMessage((Sender as TSpeedButton).Caption);
end;
end.

Joel Rodrigues
01/01/2013

Joel Rodrigues
01/01/2013
1) pode tirar o show message;
2) lá onde você cria os botões, eu passe "Mesa + IntToStr(i)" pro caption do botão, no caso você precisaria atribuir a variável "i" à Tag do botão. Caso contrário, vai ser sempre 0.

Clovis Junior
01/01/2013

Clovis Junior
01/01/2013
procedure TfrmMovMesa.FormCreate(Sender: TObject); var i : Integer; b : TSpeedButton; begin for i := 1 to 4 do begin b := TSpeedButton.Create(Self); b.Caption := 'Mesa' + IntToStr(i); b.Align := alClient; b.OnClick := abrirmesa; GridPanel1.InsertControl(b); end; end; procedure TfrmMovMesa.abrirmesa; begin frmnovavenda := TfrmNovaVenda.Create(Application); frmnovavenda.NumeroMesa := (Sender as TSpeedButton).Tag; //Considerando que você atribuiu o número da mesa à tag do botão frmnovavenda.Show; ShowMessage((Sender as TSpeedButton).Caption); end; end.

Clovis Junior
01/01/2013
vou apresentar la em vendas o numero da mesa que eu cliquei
ficaria assim
frmNovavenda.lblmesa.text;
??

Joel Rodrigues
01/01/2013
b.Tag := i; //isso atribui 1, 2, 3... à tag, senão todos seriam zero
Com relação a mostrar no label, você vai fazer isso direto no form da venda, então não precisa usar o nome do form para referenciar o label, apenas o nome do label. Por exemplo, no evento OnShow do form de vendas você faria:[
lblmesa.Caption := IntToStr(NumeroMesa);

Clovis Junior
01/01/2013
b.Tag := i; b.Caption := 'Mesa' + IntToStr(i);

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013

Clovis Junior
01/01/2013
LBLSTATUSMESA.Caption := IntToStr(NumeroMesa);
quando clico no botao da mesa 1 , ele aparece a tela de vendas la na label ele apresenta um numero "0"

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013
frmnovavenda.NumeroMesa := (Sender as TSpeedButton).Tag;

Clovis Junior
01/01/2013

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013
Abraço.

Clovis Junior
01/01/2013
mais eu sei que eu posso contar com você (Y

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013
Baixe o exemplo nesse link: https://dl.dropbox.com/u/78226427/Mesas.rar.
Até amanhã e boa sorte.

Clovis Junior
01/01/2013
porque sera ?

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013
//inicializa a venda para um cliente dm.ib_venda.Append; //importa o código do cliente para a tabela venda dm.ib_vendaCOD_CLIENTE.Value := dm.ib_clienteCOD_CLIENTE.Value; //inicializa o total da venda com o valor zero dm.ib_vendaTOTAL_VENDA.Value := 0; //atribui ao campo datavenda a data atual do sistema dm.ib_vendaDATA_VENDA.value := Date; //salva as informações na tabela venda dm.ib_venda.Post; dm.IBTransaction1.CommitRetaining; botaoCancelar.Visible:=true;

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013
Ao criar os botões lá no outro form, você não está usando essa tabela, está criando as mesas sequencialmente e atribuindo a cada uma um número. Por isso eu estou chamando de NÚMERO. Como você não está usando a tabela de mesas, esse COD_MESA por enquanto é aquela variável NumeroMesa.

Joel Rodrigues
01/01/2013
Até mais.

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013

Clovis Junior
01/01/2013
e chamava chamava o botão
b:=tspeedbutton; colocava um procedimento no qual irá pegar os dados da mesa com os dados da venda colocaria dentro de um form

Joel Rodrigues
01/01/2013
Eu não entendi o porquê da tabela de mesas. Ao meu ver, a estrutura básica seria a seguinte:
TABELA DE VENDAS/PEDIDO
- COD_VENDA
- COD_MESA / NUMERO_MESA
- DATA_HORA
- STATUS (EM ANDAMENTO, FINALIZADO, CANCELADO)
Explicando:
- COD_VENDA: o código único da venda, pode ser um campo auto incremento;
- COD_MESA: o código/número da mesa selecionada, apenas isso importa, pois não haverá duas mesas com o mesmo número;
- DATA_HORA: importante para identificar o momento da venda/atendimento;
- STATUS: indica a situação do atendimento/mesa/venda. A mesma mesa poderá ser usada várias vezes, mas só após encerrar uma comanda é que se pode abrir outra com a mesma mesa. Por isso, é preciso saber se a mesa está em uso.
Veja se concorda comigo.

Clovis Junior
01/01/2013
- Cod_mesa - numero_mesa - Ocupantes -Status - Total_Mesa

Joel Rodrigues
01/01/2013
Para a venda direta você poderia, por exemplo, usar uma mesa padrão (tipo aquele CLIENTE BALCÃO que é usado em alguns estabelecimentos).
*** Observação: os campos que eu citei foram apenas aqueles relevantes para essa questão, claro que ainda precisa de outros como TOTAL da venda.

Clovis Junior
01/01/2013

Joel Rodrigues
01/01/2013
O que eu posso fazer agora é um exemplo com Access pra tentar esclarecer as ideias, isso te ajudaria? Pelo menos pra ter uma ideia?
Um abraço e não desista! Nós vamos desenrolar isso.

Clovis Junior
01/01/2013

Clovis Junior
01/01/2013
deixa um horario especifico que você esta no forun pra gente trocar sempre ideia !
abraço

Joel Rodrigues
01/01/2013
Um abraço.

Clovis Junior
01/01/2013

Clovis Junior
01/01/2013
Josenildo Rosa
01/01/2013
Abraços e aguardo retorno.

Rafael Oliveira
01/01/2013