Orçamento e venda e baixa em estoque..

Delphi

09/12/2005

e aí ? alguém poderia me dar uma idéia de como resolver este problema...tenho um sistema que que vair gerar um orçamento a partir de um estoque cadastrado....e este orçamento tem uma tabela para isto...exemplo...o fulano me pede um orçamento de um Micro...aí coloco todos os ítens nescessários HD, placa e ETC...a primeira pergunta vem aí ,neste procedimento é nescessário dar baixa no estoque ? se a resposta for não, como faria para aproveitar este orçamento posteriormente..exemplo o cliente fez o orçamento hoje comigo ele vem no outro dia para fechar o negócio, aí busco o orçamento que fiz para ele eu clicaria em um botão Venda...aí os dados naquela orçamento teriam que dar baixa nos ítens no estoque...ou me indiquem um processo menos complicado....flw...t+


Gigatel

Gigatel

Curtidas 0

Respostas

Marlon Spiess

Marlon Spiess

09/12/2005

Bom, em primeiro lugar, vc deve verificar qual a necessidade do seu ´cliente´, pois dependendo da estrutura física, qtde de pessoas, modo operacional, etc.....

Mas seguindo uma linha geral:
- crie um field estoque reservado na table de produtos;
- ao gravar o orçamento atualize o estoque reservado;
- faça uma ´confirmação´ de orçamento, nesse momento se tranforma em pedido;
- no momento da emissão da nota fiscal le o pedido da baixa da qtde em estoque e no estoque reservado;
- no cancelamento / desistência do orçamento baixa o estoque reservado

Espero ter ajudado


GOSTEI 0
Gigatel

Gigatel

09/12/2005

[quote:afac43920e=´Marlon Henrique Spiess´]Bom, em primeiro lugar, vc deve verificar qual a necessidade do seu ´cliente´, pois dependendo da estrutura física, qtde de pessoas, modo operacional, etc.....

Mas seguindo uma linha geral:
- crie um field estoque reservado na table de produtos;
- ao gravar o orçamento atualize o estoque reservado;
- faça uma ´confirmação´ de orçamento, nesse momento se tranforma em pedido;
- no momento da emissão da nota fiscal le o pedido da baixa da qtde em estoque e no estoque reservado;
- no cancelamento / desistência do orçamento baixa o estoque reservado

Espero ter ajudado[/quote:afac43920e]


é um sistema para mono usuario.....




- crie um field estoque reservado na table de produtos;


O que seria este field ? e que valor ele receberia ?

- ao gravar o orçamento atualize o estoque reservado;


eu num entendí direito esta parte naum...pode explicar melhor ?

vlw...


GOSTEI 0
Marlon Spiess

Marlon Spiess

09/12/2005

é o seguinte, se vc faz o orçamento, não pode baixar o estoque pois o produto não saiu ainda, mas, vc deve deixar ele reservado para q não faça mais orçamentos q a qtde em estoque então: estoque disponivel pra venda é: saldo em estoque - estoque reservado

mas isso é uma informação, não deve impedir o orçamento.

Espero ter ajudado


GOSTEI 0
Gigatel

Gigatel

09/12/2005

[quote:3555678e3d=´Marlon Henrique Spiess´]é o seguinte, se vc faz o orçamento, não pode baixar o estoque pois o produto não saiu ainda, mas, vc deve deixar ele reservado para q não faça mais orçamentos q a qtde em estoque então: estoque disponivel pra venda é: saldo em estoque - estoque reservado

mas isso é uma informação, não deve impedir o orçamento.

Espero ter ajudado[/quote:3555678e3d]

Achei interessante a idéia..más tem como vc me exemplificar...o que eu prescisaria ter na minha tabela para proceder ? veja um exemplo de tabela o que eu prescisaria á mais...

* Itens
* Valor bruto
* Valor Total
* Desconto
* Unidade
* Valor Unidade
* Data de cadstro
* Data de validade
* Quantidade

na questão da reserva..eu prescisaria de algum campo na tabela de estoque ou prescisaria criar uma nova tabela só para isto ..e como eu faria isto.....sinceramente eu sou bem crú nesta parte, pois nunca fiz nada parecido nesta questão de vendas...vlw..pela ajuda...vc num teria um exemplo pronto para mandar para mim não ?... eu estudando a função acho que daria menos trabalho...más vlw mesmo o que vc achar melhor é o que vale... t+


GOSTEI 0
Gigatel

Gigatel

09/12/2005

Em meu estoque tenho um campo QUANTIDADE onde coloco o quanto tenho em estoque, no Orçamento eu tenho que subtrair o estoque ? estou tendo dúvidas, se num for assim eu prescisaria tbm de uma tabela só paraesta operação ? e depois como faria para fazer subtrair no estoque ? to meio perdido nisto...vou ser sincero estava prescisando de algo assim...alguém falar pra mim...faz x tabelas a primeira é blabla a segunda faz isso ....é porque num tenho nem ídeia de como começar isto e tbm tem o lance do estorno que eu presciso botar funcionar...desculpe a insitencia más tá osso...t+ vlw


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

Para fazer orçamento não ´guardo´ parte do estoque como reserva, dou o orçamento para o cliente com o ´enquanto durar o estoque´, portanto se ele voltar depois e eu já tiver vendido, não vai ter mais o produto para ele.
Se vc quer guardar a mercadoria para o orçamento, existem diversas maneiras de fazer isto
1) Coloque um campo ´reserva´ para manter as quantidades do orçamento, porém no arquivo de orçamento, coloque uma ´datadevalidadedoorçamento´, cada vez que abrir o programa, quer para vender ou para fazer novo orçamento, o estoque será o campo ´estoque´ - o campo ´reserva´, e além disto tem que verificar no arquivo de reserva se existe algum item com data ´expirada´ para tirá-lo do campo reserva e passá-lo para o campo estoque, e apagar este orçamento.
2) Todo o processo pode ser feito no arquivo de orçamento, sendo que o estoque atual neste caso será a diferença entre o estoque constante nos produtos - o estoque constante no orçamento, não se esquecendo de que pode haver diversos orçamentos contendo o mesmo item, e de apagar o os orçamentos com data anterior a atual
3) Estes 2 processos podem sofrer diversos tipos de variações de forma a atender a necessidade específica de cada usuário, ficando mais os menos complexo


GOSTEI 0
Gigatel

Gigatel

09/12/2005

Aí galera.. estou fazendo assim....

o Orçamento eu faço sem dar baixa no estoque, fica mais ou menos assim...fiz uma tabela onde recebo dados do cliente...e outra onde recebe os dados das mercadorias ...vamos supor q o orçamento tenha o codigo ´100´ aí eu passo este mesmo código para um campo que eu chamo de GS_VENDA_CODACES ou seja se eu colocar 10 produtos ele terá 10 códigos ´100´ no campo GS_VENDA_CODACES, aí é só usar um filtro para lista-los corretamente...Agora que vem chumbo....tenho estes 10 ítens e naum foram dado saida no estoque... vamos supor que eu quero pegar este orçamento e tranformar em venda..como eu pegaria este montante ( 10 ítens ) e daria baixa no estoque com apenas um clicke no botão ?

vlw...


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

Coloque o código do produto, faça um locate na tabela produtos e dê baixa no estoque de acordo com o campo quantidade do orçamento


GOSTEI 0
Gigatel

Gigatel

09/12/2005

Eu tenho uma parte no programa que funiona parcialmente e tem que funcionar basicamente o que vou prescisar na vendas...o que vou prescisar neste módulo...Tento a tabela qye se chama BD_ORCA_ITENS nela tenho os seguintes campos....

GS_OOEI_QNT - recebe quantidade
GS_OOEI_UNIT - o tipo de unidade
GS_OOEI_CAD_SERIE - o n de série
GS_OOEI_CODIGO - código gerado pela tabela
GS_OOEI_DESCRICAO - recebe descrição
GS_OOEI_VALOR_UNIT - valor unitário
GS_OOEI_VALOR_TOTAL - valor total
GS_OOEI_CODACES - recebe o código da Ordem de serviço
GS_OOEI_CODPROD - recebe o código do produto que vem do estoque...

e tenho a tabela de estoque que se chama BD_ESTOQUE

e tenho este campos que julgo nescessarios para esta transação

GS_EST_CODIGO - código do produto ( gerado pelo sistema )
GS_EST_QNT - onde tem a quantidade atual no estoque ...

o que eu estava pensando é o seguinte na primeira tabela (BD_ORCA_ITENS) recebe os valores da segunta (DB_ESTOQUE) somente para fins de orçamento ou seja nada de baixa no estoque onde tem dez ficaria com 10....

digamos que o orçamento seja aceito, agora eu tenho que dar saida neste materia cotado....agora que o bicho pega...a primeira tabela recebeu vários itens, entaum agora tenho que atualizar o estoque..e aí qeu está o problema.. eu tenho que pegar o campo da primeira tabela GS_OOEI_CODPROD associar a campo da segunda tabela GS_EST_CODIGO e atualizar este campo GS_EST_QNT ..um por um... estou encontrando muita dificuldade nisto...vlw...t+


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

pegue a tabela orçamento e faça um while not eof, pegue o código do produto e a quantidade, vá para a tabela estoque, procure o código do produto, atualize o estoque.


GOSTEI 0
Gigatel

Gigatel

09/12/2005

pegue a tabela orçamento e faça um while not eof, pegue o código do produto e a quantidade, vá para a tabela estoque, procure o código do produto, atualize o estoque.


tem como vc montar um código com base nestas inf que passei ? e tbm tem o lance do locate que num faço nem idéia de como colocar-lo aí...


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

usando ibquery, onde ibquery1 é o orçamento e ibquery2 são os produtos

with ibquery1 do
begin
first;
try
while not eof do
begin
codigoproduto := fieldbyname(´codigo´).value;
quantidade := fieldbyname(´qtd´).value;
with ib query2 do
begin
locate(´codigo´, codigoproduto,[lopartialkey]);
if fieldbyname(´codigo´).value = codigoproduto then
begin
edit;
fieldbyname(´estoque´).value = fieldbyname(estoque´).value - quantidade;
post;
end;
end;
next;
end;
end;
ibtransction2.commit;
except
showmessage(´problema com o banco de dados´);
ibtransaction2.rollback;
end;


GOSTEI 0
Gigatel

Gigatel

09/12/2005

Acho que me perdí neste LOCATE...dá uma olhada num to sabe em qual das tabelas colocar

begin
  with BD_VENDA_ITENS do
  begin
  First;
  try
  while not eof do
  begin
  BD_VENDA_ITENSGS_VEI_CODPROD.Value := Fieldbyname(´GS_VEI_CODPROD´).value;
  BD_VENDA_ITENSGS_VEI_QNT.Value := fieldbyname(´GS_VEI_QNT´).value;
  with BD_ESTOQUE do
  begin
  locate(´codigo´, codigoproduto,[lopartialkey]);
  if fieldbyname(´codigo´).value = codigoproduto then
  begin
  edit;
  fieldbyname(´estoque´).value = fieldbyname(estoque´).value - quantidade;
  post;
  end;
  end;
  next;
  end;
  end;
  DM1.IBTransaction1.CommitRetaining;
  except
  showmessage(´problema com o banco de dados´);
  DM1.IBTransaction1.rollback;
end;




dá uma confirida..


GOSTEI 0
Gigatel

Gigatel

09/12/2005

Modifiquei deste jeito....

begin
  with BD_VENDA_ITENS do
  begin
  First;
  try
  while not eof do
  begin
  BD_VENDA_ITENSGS_VEI_CODPROD.Value := Fieldbyname(´GS_VEI_CODPROD´).value;
  BD_VENDA_ITENSGS_VEI_QNT.Value := fieldbyname(´GS_VEI_QNT´).value;
  with BD_ESTOQUE do
  begin
  locate(´GS_VEI_CODPROD´, BD_VENDA_ITENSGS_VEI_CODPROD.Value,[lopartialkey]);
  if fieldbyname(´GS_VEI_CODPROD´).value = BD_VENDA_ITENSGS_VEI_CODPROD.Value then
  begin
  edit;
  fieldbyname(´GS_EST_QNT´).value := fieldbyname(´GS_EST_QNT´).value - BD_VENDA_ITENSGS_VEI_QNT.Value;
  post;
  end;
  end;
  next;
  end;

  DM1.IBTransaction1.CommitRetaining;
  except
  showmessage(´problema com o banco de dados´);
  DM1.IBTransaction1.rollback;
end;
end;
end;


e deu este erro



[img][URL=http://imageshack.us][img:0a8a673920]http://img216.imageshack.us/img216/4946/imagem9nn.jpg[/img:0a8a673920][/URL][/img]



com certeza deve ser alguma coisa entre as tabelas...


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

desculpe=me pelo locate, eu escrevi sobre ibquery como se fosse ibtable, em vez de locate coloque um select codigo, estoque from produtos where codigo =: codigoproduto


GOSTEI 0
Gigatel

Gigatel

09/12/2005

Veja o código: tem como vc comenta-lo para melhor comprenção ? modifiquei ve se funciona deste jeito e está dando um erro tbm...

  with BD_VENDA_ITENS do
    begin
    First;
  try
  while not eof do
  begin
  BD_VENDA_ITENS.Edit;
  BD_VENDA_ITENSGS_VEI_CODPROD.Value := Fieldbyname(´GS_VEI_CODPROD´).value;
  BD_VENDA_ITENSGS_VEI_QNT.Value := fieldbyname(´GS_VEI_QNT´).value;
  with BD_ESTOQUE do
  begin
  Close;
  SQL.Clear;
  SQL.Add(´select * from  ESTOQUE where GS_EST_CODIGO=´+inttostr(BD_VENDA_ITENSGS_VEI_CODPROD.Value));
  Open;
  if fieldbyname(´GS_VEI_CODPROD´).value = BD_VENDA_ITENSGS_VEI_CODPROD.Value then
  begin
  Edit;
  Fieldbyname(´GS_EST_QNT´).value := fieldbyname(´GS_EST_QNT´).value - BD_VENDA_ITENSGS_VEI_QNT.Value;
  post;
  end;
  end;
  next;
  end;

  DM1.IBTransaction1.CommitRetaining;
  except
  showmessage(´problema com o banco de dados´);
  DM1.IBTransaction1.rollback;
end;
end;
end;


[img][URL=http://imageshack.us][img:a7a27706e5]http://img236.imageshack.us/img236/9666/imagem5up.jpg[/img:a7a27706e5][/URL][/img]


Este é c erro que dá....


GOSTEI 0
Gigatel

Gigatel

09/12/2005

Dá uma olhada nesta linha...

  BD_VENDA_ITENS.Edit;
  BD_VENDA_ITENSGS_VEI_CODPROD.Value := Fieldbyname(´GS_VEI_CODPROD´).value;
  BD_VENDA_ITENSGS_VEI_QNT.Value := fieldbyname(´GS_VEI_QNT´).value;


a tabela tem que ter estar em modo de edição ? pois coloquei por minha conta no seu código naum tinha... num sei se vc notou no meu código, o primeiro campo recebe o mesmo campo novamnte ? pois no código esta assim...vlw..


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

BD_VENDA_ITENS.Edit;
este aqui não precisa de edit pois é o de orçamento, vc só precisa editar o de produtos para poder alterar o valor do estoque


GOSTEI 0
Gigatel

Gigatel

09/12/2005

agora dá este erro
[img][URL=http://imageshack.us][img:375435f20f]http://img209.imageshack.us/img209/3773/imagem3kf.jpg[/img:375435f20f][/URL][/img]


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

não dá para ver a imagem!


GOSTEI 0
Gigatel

Gigatel

09/12/2005

não dá para ver a imagem!


Ué ?

estranho...
más a mensagem é assim


project raised excpction class EIBClientError with message ´ não em modo de edição". Processs stopped..


Algo parecido com isto..


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

o arquivo de orçamento, não precisa estar no modo de edição, quem tem que estar é o arquivo de produtos pois é nele que vc vai alterar o estoque


GOSTEI 0
Romulocpd

Romulocpd

09/12/2005

Olá gente,

Bom, deixa eu deixar minha experiência aqui pois já discuti muito sobre este assunto. No sistema da empresa que trabalho (VB com SQL Server, Delphi é para MINHA EMPRESA!) existem:

ESTOQUE COMPRADO
ESTOQUE RESERVADO
ESTOQUE ATUAL
----------------------------
ESTOQUE DISPONIVEL = ATUAL + COMPRADO - RESERVADO

Aqui não guardamos campos ´estáticos´ com os valores calculados pois isso fica muito sujeito a falhas (apear que usando Triggers bem definidas dá pra brincar bastante!). Desta forma quando o usuário precisa saber quando deste produto está reservado (RESERVADO = Cliente fez o pedido porém o pedido ainda não foi faturado (emitido nota fiscal)) o sistema vai e roda a tabela ITENS_PEDIDO somando q quantidade somente de pedidos que não foram cancelados e que foram faturados.

Desta forma temos a posição do estoque on-line, sem problemas de cálculos errados. Com bons índices essa consulta demora menos que 1 segundo (e temos hoje no sistema 60 mil pedidos lançados, 156 mil itens de pedido de venda).

Acho que esta forma é a melhor, sendo que o PEDIDO ou ORÇAMENTo deve ter um campo STATUS pra saber se está aberto, impresso, faturado, cancelado, etc..

É isso ae gente, tá aí minha opinião!
Vlw!


GOSTEI 0
Gigatel

Gigatel

09/12/2005

o arquivo de orçamento, não precisa estar no modo de edição, quem tem que estar é o arquivo de produtos pois é nele que vc vai alterar o estoque


Me desculpe minha isnstencia... más não estou entendendo, o problema está nesta linha...se coloca o edit vc para não colocar se não coloca não funciona...sinceramente não estou entendendo...e tem no caso da linha abaixo se eu etou atribuindo valores a determinados campos eles tem sim que estar em modo de edição...se não é natural dar estes erros mesmo.. o código que inicialmente esta com erro é este..

  while not eof do
  begin
  BD_VENDA_ITENSGS_VEI_CODPROD.Value := Fieldbyname(´GS_VEI_CODPROD´).value;
  BD_VENDA_ITENSGS_VEI_QNT.Value := fieldbyname(´GS_VEI_QNT´).value;
  with BD_ESTOQUE do


Aki está sem o edit ( BD_VENDA_ITENS)..


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

Vamos por partes, o código que eu mandei é para pegar o arquivo de orçamento lê-lo e dar baixa no estoque, não é para incluir ou modificar nada no orçamento, é claro que se quiser alterar algo no arquivo de orçamento tem que usar um edit, mas inicialmente vc perguntou por pegar um arquivo de orçamento e transformá-lo em venda, e neste caso eu não tenho que editar nada no mesmo.


GOSTEI 0
Gigatel

Gigatel

09/12/2005

Vamos por partes, o código que eu mandei é para pegar o arquivo de orçamento lê-lo e dar baixa no estoque, não é para incluir ou modificar nada no orçamento, é claro que se quiser alterar algo no arquivo de orçamento tem que usar um edit, mas inicialmente vc perguntou por pegar um arquivo de orçamento e transformá-lo em venda, e neste caso eu não tenho que editar nada no mesmo.


Tudo bem , eu sei o que vc está dizendo eu tbm acho isto, más problema é que o código que vc me passou dá erro...e eu num estou sabendo sana-lo.. é só isso, a solução do problema...


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

o seu problema é
BD_VENDA_ITENSGS_VEI_CODPROD.Value := Fieldbyname(´GS_VEI_CODPROD´).value;
vc está pegando o vendas_itensgs (suponho que seja o arquivo de orçamento) e alterando o seu valor para o valor contido no vei_codprod


GOSTEI 0
Gigatel

Gigatel

09/12/2005

Olá gente, Bom, deixa eu deixar minha experiência aqui pois já discuti muito sobre este assunto. No sistema da empresa que trabalho (VB com SQL Server, Delphi é para MINHA EMPRESA!) existem: ESTOQUE COMPRADO ESTOQUE RESERVADO ESTOQUE ATUAL ---------------------------- ESTOQUE DISPONIVEL = ATUAL + COMPRADO - RESERVADO Aqui não guardamos campos ´estáticos´ com os valores calculados pois isso fica muito sujeito a falhas (apear que usando Triggers bem definidas dá pra brincar bastante!). Desta forma quando o usuário precisa saber quando deste produto está reservado (RESERVADO = Cliente fez o pedido porém o pedido ainda não foi faturado (emitido nota fiscal)) o sistema vai e roda a tabela ITENS_PEDIDO somando q quantidade somente de pedidos que não foram cancelados e que foram faturados. Desta forma temos a posição do estoque on-line, sem problemas de cálculos errados. Com bons índices essa consulta demora menos que 1 segundo (e temos hoje no sistema 60 mil pedidos lançados, 156 mil itens de pedido de venda). Acho que esta forma é a melhor, sendo que o PEDIDO ou ORÇAMENTo deve ter um campo STATUS pra saber se está aberto, impresso, faturado, cancelado, etc.. É isso ae gente, tá aí minha opinião! Vlw!


OI blz ? gosto dá idéia e tem um colega que apresentou uma idéia similar más o problema e que eu não sei os procedimento...quantas tabelas prescisaria qual os campos, e principalmente os códigos o edicilmar esta me ajudando no lance de atualizar o estoque, mesmo na sua idéia prescisaria tbm de fazer isto..o problema é só este..tenho pouca experiencia nesta área de vendas por isso a inssitencia de uma idéia concreta de funcionamento... comprei até um cdzinho com uns fontes sobre isto más adivinha ...um lixo total, nada que realmente interesse...
más vlw mesmo pela idéa...quando num estou aki no fórum estou pesquisando na internet más é díficil achar algo como isso que estou procurando...flw.


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

para fazer o controle com ou sem alocamento de estoque para orçamento, o procedimento básico é o mesmo, o que vai acontecer é que para alocar um produto, você vai ter mais trabalho, e os orçamento não transformados em venda terão de ser desalocados depois de um determinado período


GOSTEI 0
Gigatel

Gigatel

09/12/2005

o seu problema é BD_VENDA_ITENSGS_VEI_CODPROD.Value := Fieldbyname(´GS_VEI_CODPROD´).value; vc está pegando o vendas_itensgs (suponho que seja o arquivo de orçamento) e alterando o seu valor para o valor contido no vei_codprod


más a ideiá é esta ou não... eu tenho ou não alterar este valor, pois a função é sua, só coloquei as minhas tabelas, por isso num estou entendendo muita a pergunta... e aki estão a descrição de cada tabela..

que vou prescisar neste módulo...Tento a tabela qye se chama BD_ORCA_ITENS nela tenho os seguintes campos.... 

GS_OOEI_QNT - recebe quantidade 
GS_OOEI_UNIT - o tipo de unidade 
GS_OOEI_CAD_SERIE - o n de série 
GS_OOEI_CODIGO - código gerado pela tabela 
GS_OOEI_DESCRICAO - recebe descrição 
GS_OOEI_VALOR_UNIT - valor unitário 
GS_OOEI_VALOR_TOTAL - valor total 
GS_OOEI_CODACES - recebe o código da Ordem de serviço 
GS_OOEI_CODPROD - recebe o código do produto que vem do estoque... 

e tenho a tabela de estoque que se chama BD_ESTOQUE 

e tenho este campos que julgo nescessarios para esta transação 

GS_EST_CODIGO - código do produto ( gerado pelo sistema ) 
GS_EST_QNT - onde tem a quantidade atual no estoque ... 




acho que esclarece mais


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

Pelo que escrevi, vc LÊ a tabela de orçamento e depois dá baixa na tabela de estoque(esta tem que editar). Aqui estou supondo que o orçamento já está pronto, ou seja já foi dando append em todos os produtos que fariam parte do orçamento


GOSTEI 0
Romulocpd

Romulocpd

09/12/2005

Veja, depende da visão do seu sistemas. Hà sistemas que fazem:

ORÇAMENTO, PEDIDO DE VENDA, NOTA FISCAL

outras não tem orçamento, mas sim direto o PEDIDO DE VENDA -> NOTA FISCAL DE SAÍDA.

Para tudo vc terá no mínimo 2 tabelas ORÇAMENTO e ITENS_ORCAMENTO
PEDIDO e ITENS_PEDIDO NFSAIDA e ITENS_NFSAIDA.

Por que isso? Para a tabela ITENS armazenar os produtos do pedido de venda. Na tabela PEDIDO eu uso um campo STATUS, fica tipo:

0 - Pedido Incluíso e Nâo IMpresso
1 - Pedido Impresso
2 - Pedido Cancelado
3 - Pedido Separado Parcial
4 - Pedido Separado Total
5 - Pedido Faturado Parcial
6 - Pedido Faturado Total

A parte de Separado é que na empresa eu controlo a expedição e por isso tenho este controle.

Então para vc saber o seu ESTOQUE RESERVADO vc deve somar os campos QUANTIDADE da tabela ITENS_PEDIDO onde o STATUS DO PEDIDo seja 0. Desta forma o pedido nao foi faturado então seu setor de expedição tem que separar ele.

É basicamente este pedido, hámuitas informações auxiliares mas vc deve ver qual informação real vc deve guardar em seu pedido de venda.

Qualquer coisa é só falar.


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

Para o romulo
na sua empresa vc tem controle de lote?


GOSTEI 0
Romulocpd

Romulocpd

09/12/2005

Edilcilmar,

No sistema novo aqui na empresa vamos sim implementar o controle de lotes, veja o que vc acha:

a quantidade de estoque disponivel fica na movimentacao. A cada lançamento agente guarda o estoque anterior, valor movimentado e estoque atual.

é tipo assim:

MOV_PRODUTO
MOV_DATA
MOV_SALDOANTERIOR
MOV_QTD
MOV_QTDATUAL

o que pensamos é: já que nem todos os produtos tem lote e nao queremos controlar o estoque de lote de forma diferente vamos ter uma tabela LOTE com

LOT_NUMERO
LOT_IDENTIFICACAO
LOT_PRODUTO (references..)
tal tal tal

e na movimentação criar uma Foreign Key para LOT, tipo MOV_LOTE desta forma se o movimento for referente a um lote terá o codigo.

Desta forma podemos ter o estoque controlado certinho por lote.

Tipo, se tenho o lote CANETA001, no lançamento

SALDO ANTERIOR: 0
QTD: 1000
SALDO ATUAL: 1000
LOTE CANETA001

Po.. assim dá pra gente pegar a movimentacao do lote e do produto especificos e com isso ter tudo!

Detalhe, isso é na teoria, aindan ão implementamos e nao temos nada pronto. Pensa aí e ve se tem como melhorar, para nao ter duplicação de informaç]ao e nao ter campos estaticos acho que é a melhor forma.

Vlw!


GOSTEI 0
Gigatel

Gigatel

09/12/2005

Conseguí ajustar esta função, só que o estoque num para de dar loop... alguém se abilita a relver o problema,
begin
  with BD_VENDA_ITENS do
    begin
    First;
  Try
  while not BD_VENDA_ITENS.eof do
  begin
    BD_ESTOQUE.Close;
    BD_ESTOQUE.SQL.Clear;
    BD_ESTOQUE.SQL.Add(´select * from  ESTOQUE where GS_EST_CODIGO=´+inttostr(BD_VENDA_ITENSGS_VEI_CODPROD.Value));
    BD_ESTOQUE.Open;
    BD_ESTOQUE.Edit;
    BD_ESTOQUEGS_EST_QNT.Value := BD_ESTOQUEGS_EST_QNT.Value - BD_VENDA_ITENSGS_VEI_QNT.Value;
    BD_ESTOQUE.Post;
    end;
    next;
    DM1.IBTransaction1.CommitRetaining;
      except
      showmessage(´problema com o banco de dados´);
      DM1.IBTransaction1.rollback;
end;
end;



este código foi feito com base no do edilcimar...acho que se resolver o problema do loop da cert...vlw


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

Gigatel
vc está dando loop na tabela de estoque e não na tabela de orçamento

Romulo
Você tem que analisar os seguintes fatores:
a) cada lote tem um estoque definido
b) você tem mais de um lote em estoque
c) num único pedido o cliente poder zerar um lote e isto não ser o suficiente para atender a demanda, sendo necessário incluir produtos de um outro lote


GOSTEI 0
Gigatel

Gigatel

09/12/2005

Gigatel vc está dando loop na tabela de estoque e não na tabela de orçamento Romulo Você tem que analisar os seguintes fatores: a) cada lote tem um estoque definido b) você tem mais de um lote em estoque c) num único pedido o cliente poder zerar um lote e isto não ser o suficiente para atender a demanda, sendo necessário incluir produtos de um outro lote
.

Vlw.. más a função é deste jeito mesmo....só estava errando no NEXT... más foi consertado... veja como ficou a função toda operacional...flw até mais

  with BD_VENDA_ITENS do
    begin
    First;
    Try
    while not BD_VENDA_ITENS.eof do
    begin
    BD_ESTOQUE.Close;
    BD_ESTOQUE.SQL.Clear;
    BD_ESTOQUE.SQL.Add(´select * from  ESTOQUE where GS_EST_CODIGO=´+inttostr(BD_VENDA_ITENSGS_VEI_CODPROD.Value));
    BD_ESTOQUE.Open;
    BD_ESTOQUE.Edit;
    BD_ESTOQUEGS_EST_QNT.Value := BD_ESTOQUEGS_EST_QNT.Value - BD_VENDA_ITENSGS_VEI_QNT.Value;
    BD_ESTOQUE.Post;
    BD_VENDA_ITENS.next;
    end;
    DM1.IBTransaction1.CommitRetaining;
      except
      showmessage(´problema com o banco de dados´);
      DM1.IBTransaction1.rollback;
end;
end;


vlw...


GOSTEI 0
Edilcimar

Edilcimar

09/12/2005

qualquer coisa estamos aí


GOSTEI 0
POSTAR