Controle de estoque durante a venda
Olá pessoal,
Imaginemos a seguinte situação:
5 terminais realizando vendas simultaneamente, um vendedor durante a venda consulta o estoque do produto A, disponível 10 unidades, quando ele vai dar a saída nessas 10 unidades (na mesma tela de vendas) um outro vendedor em outro terminal (que digita mais rápido) vendeu 5 unidades desse mesmo produto, ficando apenas 5 unidades disponíveis...
então pergunto, como controlar isto de forma eficiente ?
[]´s
AASN
Imaginemos a seguinte situação:
5 terminais realizando vendas simultaneamente, um vendedor durante a venda consulta o estoque do produto A, disponível 10 unidades, quando ele vai dar a saída nessas 10 unidades (na mesma tela de vendas) um outro vendedor em outro terminal (que digita mais rápido) vendeu 5 unidades desse mesmo produto, ficando apenas 5 unidades disponíveis...
então pergunto, como controlar isto de forma eficiente ?
[]´s
AASN
Aasn
Curtidas 0
Respostas
Silviogs
13/09/2006
Olá amigo
vc precisa especificar alguns itens para poder ajudá-lo:
So, IDE, BD e etc.
Silvio Guedes
vc precisa especificar alguns itens para poder ajudá-lo:
So, IDE, BD e etc.
Silvio Guedes
GOSTEI 0
Aasn
13/09/2006
Ah tá... esqueci deste pequeno detalhe! rs
Delphi 5 + IBO + IB6
[]´s
AASN
Delphi 5 + IBO + IB6
[]´s
AASN
GOSTEI 0
Aasn
13/09/2006
sobe
GOSTEI 0
Macario
13/09/2006
Olá.
Um metodo seria implementar a Reserva de Itens. Que poderá ser desde a inclusao de um pedido de venda até a efetiva venda(faturamento da NF).
Um metodo seria implementar a Reserva de Itens. Que poderá ser desde a inclusao de um pedido de venda até a efetiva venda(faturamento da NF).
GOSTEI 0
Aasn
13/09/2006
E o controle de transação ?
para que os outros terminais vejam as reservas, tenho que comitar os lançamentos, daí caso o usuário cancele a operação teremos que deletar as reservas ´na mão´ ?!
[]´s
AASN
para que os outros terminais vejam as reservas, tenho que comitar os lançamentos, daí caso o usuário cancele a operação teremos que deletar as reservas ´na mão´ ?!
[]´s
AASN
GOSTEI 0
Macario
13/09/2006
É ´sinistro´ dessa maneira. Mas foi a solução que encontrei.
:roll:
Vamos ver se nos apresentam outras soluções.
:roll:
Vamos ver se nos apresentam outras soluções.
GOSTEI 0
Moura
13/09/2006
Eu criei uma VIEW que é controlada pelo proprio servidor FB.
E para funcionar de modo eficiente essa função deve ser carregada, checar estoque e ser encerrada imediatamente.
Deve-se rodar uma rotina de checagem antes de efetivar a venda. Normalmente no evento beforepost do componente que estiver utilizando.
[b:fa9c9b9707]A view ficou assim:[/b:fa9c9b9707]
[i:fa9c9b9707]CREATE VIEW VIEW_ESTOQUEVENDA(
FILIAL,
CODIGO,
DESCRICAO,
ICMS,
IPI,
UND,
QTD_ESTOQUE,
PRC_VENDA)
AS
select
FILIAL,
CODIGO,
DESCRICAO,
ICMS_ALIQ,
ALIQ_IPI,
UND,
QTD_TOTAL,
PRC_VENDA
from ESTOQUE ;
[/i:fa9c9b9707]
**************************
No ´Beforepost´ deve-se repassar item por item e checar a quantidade real. Exemplo:
[i:fa9c9b9707]// Checar estoque real
db_VendasItens.first;
while not db_VendasItens.eof do
begin
db_view_estoque.Close;
db_view_estoque.ParamByName(´PRODUTO´).AsString :=db_VendasItens.FieldByName(´PRODUTO´).AsString;
db_view_estoque.Open;
// checar quantidade
if db_VendasItens.FieldByName(´QTDE´).AsFloat>db_view_estoque.FieldByName(´QTD_ESTOQUE´).AsFloat then
begin
ShowMessage(´Quantidade insuficiente´+#13+10+
´Produto......: ´+ db_VendasItens.FieldByName(´PRODUTO´).AsString +13+10+
´Descrição....: ´+ db_VendasItens.FieldByName(´DESCRICAO´).AsString +13+10+13+10+
´Solicitados..: ´+ FormatFloat(´,0´,db_VendasItens.FieldByName(´QTDE´).AsFloat)+
´ mas há apenas ´+FormatFloat(´,0´,db_view_estoque.FieldByName(´QTD_ESTOQUE´).AsFloat )+
´ no estoque´+13+10+
´O PRODUTO FICARÁ COM QUANTIDADE ZERADA NA VENDA´
);
db_VendasItens.FieldByName(´QTDE´).AsFloat :=0;
db_view_estoque.Close; // fechar VIEW para que ao abrir na proxima vez, venha com dados atualizados pelo servidor.
end;
end;
db_VendasItens.first;
[/i:fa9c9b9707]
Espero ter ajudado!
.
E para funcionar de modo eficiente essa função deve ser carregada, checar estoque e ser encerrada imediatamente.
Deve-se rodar uma rotina de checagem antes de efetivar a venda. Normalmente no evento beforepost do componente que estiver utilizando.
[b:fa9c9b9707]A view ficou assim:[/b:fa9c9b9707]
[i:fa9c9b9707]CREATE VIEW VIEW_ESTOQUEVENDA(
FILIAL,
CODIGO,
DESCRICAO,
ICMS,
IPI,
UND,
QTD_ESTOQUE,
PRC_VENDA)
AS
select
FILIAL,
CODIGO,
DESCRICAO,
ICMS_ALIQ,
ALIQ_IPI,
UND,
QTD_TOTAL,
PRC_VENDA
from ESTOQUE ;
[/i:fa9c9b9707]
**************************
No ´Beforepost´ deve-se repassar item por item e checar a quantidade real. Exemplo:
[i:fa9c9b9707]// Checar estoque real
db_VendasItens.first;
while not db_VendasItens.eof do
begin
db_view_estoque.Close;
db_view_estoque.ParamByName(´PRODUTO´).AsString :=db_VendasItens.FieldByName(´PRODUTO´).AsString;
db_view_estoque.Open;
// checar quantidade
if db_VendasItens.FieldByName(´QTDE´).AsFloat>db_view_estoque.FieldByName(´QTD_ESTOQUE´).AsFloat then
begin
ShowMessage(´Quantidade insuficiente´+#13+10+
´Produto......: ´+ db_VendasItens.FieldByName(´PRODUTO´).AsString +13+10+
´Descrição....: ´+ db_VendasItens.FieldByName(´DESCRICAO´).AsString +13+10+13+10+
´Solicitados..: ´+ FormatFloat(´,0´,db_VendasItens.FieldByName(´QTDE´).AsFloat)+
´ mas há apenas ´+FormatFloat(´,0´,db_view_estoque.FieldByName(´QTD_ESTOQUE´).AsFloat )+
´ no estoque´+13+10+
´O PRODUTO FICARÁ COM QUANTIDADE ZERADA NA VENDA´
);
db_VendasItens.FieldByName(´QTDE´).AsFloat :=0;
db_view_estoque.Close; // fechar VIEW para que ao abrir na proxima vez, venha com dados atualizados pelo servidor.
end;
end;
db_VendasItens.first;
[/i:fa9c9b9707]
Espero ter ajudado!
.
GOSTEI 0
Moura
13/09/2006
outro detalhe, eu estava esquecendo, não esqueça de colocar um [i:f5156fdcb5][b:f5156fdcb5]NEXT[/b:f5156fdcb5][/i:f5156fdcb5].
(...)
end;
[i:f5156fdcb5][b:f5156fdcb5]db_VendasItens.Next;[/b:f5156fdcb5][/i:f5156fdcb5]
end;
db_VendasItens.first;
*** fim ***
valeu!
.
(...)
end;
[i:f5156fdcb5][b:f5156fdcb5]db_VendasItens.Next;[/b:f5156fdcb5][/i:f5156fdcb5]
end;
db_VendasItens.first;
*** fim ***
valeu!
.
GOSTEI 0