[RESOLVIDO] DUVIDA DE INICIANTE - BAIXA DE PRODUTO NO ESTOQUE

Boa noite,

Estou fazendo um cadastro de produtos, suas quantidades e seus códigos de barra. Minha duvida é. Como eu faço pra criar uma grid ou um form com um único campo recebendo a captura do leitor de código de barra. E ele, ao reconhecer o código da etiqueta, me informe qual é o nome do produto, quantidade em estoque e dê a baixa de uma unidade no estoque.

Obrigado,

Jansen Gusmão

Use Ajax no campo de código de barra no evento onFocus! No ajax crie um Lookup chamando o produto de acordo com o código de barras.

Para ver o produto, após passar pelo código:

Ai nos evento onAfterInsert tem que usar a macro: sc_exec_sql para executar o sql, que vai procura o código do produto na tabela e tirar -1.

E no evento onBeforeDelete tem que usar a macro: sc_exec_sql para executar o sql, que vai procura o código do produto na tabela e tirar +1.

Isso se você bloquer a opção de ATUALIZAR (UPDATE) se não tem que fazer as formula direta sc_exec_sql (-1) e inversa (+1) nos eventos:
onBeforeUpdate e onAfterUpdate

Bom isso você for fazer diretamente pelo SCRIPTCASE usando o PHP, mas você pode fazer gatilhos na BASE (SGDB) pra fazer isso também.

Pessoal,

Obrigado por me responderem. Eu estou engatinhando no SC ainda. Tá muito avançado pra mim. Vamos facilitar. Eu devo criar uma grid ou um form para coletar o valor da etiqueta através do código de barra? Quando ela capturar… como faço pra que ela pegue a informação e apenas dê baixa? Não preciso neste momento saber qual é o produto… posso consulta-lo depois numa grid em separado. O mais importante é ele leia o código e automaticamente baixe uma unidade. Aproveito pra mandar a modelagem do banco para opinião. Sou bem fraco, tou no método de tentativas e erros.

Acho que assim https://www.youtube.com/watch?v=cUSCL2fkLlc

Jean, obrigado por responder… deu certo em parte. Ele leu e atualizou o campo que determinei no evento on blur. Mas tou com outra dúvida. Qualquer coisa que estou digitando lá ou lendo (código de barra tá atualizando o campo). Como faço pra ele comparar o código lido com o cadastrado no sistema e atualizar aquele código com -1 unidade? Eu fiz um teste fixando os valores no evento ajax on blur e deu certo. Mas o que eu quero é algo abaixo da linha -----------------------------------

/**

  • Update a record on another table
    */

// SQL statement parameters
$update_table = ‘game’; // Table name
$update_where = “id_game = ‘2’”; // Where clause
$update_fields = array( // Field list, add as many as needed
“quantidade = ‘150’”,

);

// Update record
$update_sql = ‘UPDATE ’ . $update_table
. ’ SET ’ . implode(’, ', $update_fields)
. ’ WHERE ’ . $update_where;
sc_exec_sql($update_sql);


Minha idéia é a seguinte:

/**

  • Update a record on another table
    */

// SQL statement parameters
$update_table = ‘game’; // Table name
$update_where = “baixa = ‘cod_barra’”; // Where clause
$update_fields = array( // Field list, add as many as needed
“quantidade = ‘quantidade-1’”,

);

// Update record
$update_sql = ‘UPDATE ’ . $update_table
. ’ SET ’ . implode(’, ', $update_fields)
. ’ WHERE ’ . $update_where;
sc_exec_sql($update_sql);

Eu não sei fazer essas construções!!! :(((

Pessoal, consegui dimunir 1 apenas uma vez… usando:

/**

  • Update a record on another table
    */

// SQL statement parameters
$update_table = ‘game’; // Table name
$update_where = “cod_barra = ‘{baixa}’”; // Where clause
$update_fields = array( // Field list, add as many as needed
“quantidade = quantidade - 1”,

);

// Update record
$update_sql = ‘UPDATE ’ . $update_table
. ’ SET ’ . implode(’, ', $update_fields)
. ’ WHERE ’ . $update_where;
sc_exec_sql($update_sql);

Agora vem outro problema… no campo de leitura, o valor lido não apaga e não fica esperando a captura do leitor de código de barra. Como faço pra zerar o campo e deixá-lo pronto pra receber um nova captura e diminuir mais uma vez? Veja figura:

Aproveitando, nesse evento que digitei acima. Tem como eu incluir uma mensagem de texto informando que a operação foi relizada com sucesso?

Mas voce quer dar baixa no estoque?

O certo seria usar um SUM com JOIN entre as tabelas entradas <-> saídas

vc sempre terá uma entrada e saida que ao somar acha-se o estoque atual.

se seu relacionamento ou tabelas não estiverem bem estruturadas voce nao conseguirá nem saber por onde começar.

se entendi sua tabela game é seu estoque?
game não seria um produto?

voce aluga games?
vende?

não estou entendendo seu objetivo…

Jean,

Na verdade é um catalálogo de games… Tenho muitos repetidos. Aí quando eu vendesse pra alguem, eu só queria diminuir 1. Pois, não tenho interesses em controlar as vendas, clientes, etc… só quero diminuir uma unidade apenas para controle interno e eu não ficar contando com ele entendeu? Tou sem controle nenhum… aí vou pegar esses códigos de barra e colocar nos cartuchos. é Complicado saber quem é quem pois são quase todos japoneses. :stuck_out_tongue:

ok…entendi…

vc nao precisa dar esse update para diminuir…

apenas faça uma View que soma o que vc tem de entrada menos oq ue vc tem de saída.

isso envolve 3 tabelas.

No formulário - Escolha GRID EDITAVEL MULTIPLOS registros, como o Jean falou você pode também dar SUM (ENTRADA x SAIDAS) para
fazer o UPDATE da QTDE na tabela estoque, chegar ao resultado final do estoque, ficaria mais prático por não ter que controlar tantos eventos com formulas diretas e invertidas.

Jean/Jailton,

O update na quantidade tem que ser automático, ao ser lido e comparado o código de barras. Não irei fazer nada através de formulários para exclusão de dados. Eu queria rodar a aplicação apenas com o campo baixa (coletando o código de barra através do leitor). E internamente ele faria a diminuição dentro do banco de dados. Se eu quisesse ver como tava o saldo, rodaria outra app (de consulta) apenas para checar. Com esse código que postei, ele tá fazendo isso. Mas, tem alguns problemas. O campo de coleta (baixa) não tá sendo limpo… eu preciso que ele receba o código, atualize e suma e espere o novo código entrar.

Limpe o input (campo) com java script. Procure no google sobre limpar o input text.

Obrigado ao FredKeyster que pacientemente me ajudou a resolver a questão de limpar o campo. Incluindo a sintaxe {NomedoCampo}=""; No final do evento ajax, onBlur.