Página 1 de 1
DBEDIT AGUARDANDO LEITOR DE BARRAS
Enviado: 25 Out 2005 08:35
por Arnaldo
Ola pessoal salvadores de clipper.
Tenho alguns programinhas em clipper (modestos), sendo que as linhas de codigo estao baseadas em summer87 (baseado Vidal). Estou precisando de ajuda, o seguinte:
Tenho um dbf temporario, aberto e manipulado com a DbEdit (excluir, alterar, etc), este temporario destina-se a montagem de uma venda com leitor de cod barras(ean13). Como fazer uma opcao dentro desta DbEdit que fica aguardando a leitura de um produto?, ao passar o leitor, criar uma variavel com o codigo lido?.
Com isso na memoria fica tranquilo, posso efetuar o seek no cadastro de produtos e depois gravar no dbf.
Por gentileza, se algum colega puder ajudar, esclarecer, ou postar um exemplo; ficarei muito grato.
email:
aegentil@netsite.com.br
Enviado: 25 Out 2005 09:37
por Clipper
Prezado Colega
Use uma função dentro do DBEDIT deste tipo :
Código: Selecionar todos
*---------------*
FUNCTION FUNC02
*---------------*
PARAM A,COL
ULTTECLA=LASTKEY()
IF ULTTECLA>48 .AND. ULTTECLA<58
PROCURA=""
PROCURA=UPPER(CHR(B))
DO WHIL .T.
Z=CHR(LASTKEY())
PROCURA=PROCURA+UPPER(Z)
ENDDO
// na parte de cima ele pega o código
// na debaixo ele faz a busca do produto
IF LASTKEY()=13
DBSEEK(PROCURA,.F.)
IF EOF()
@ 24,00 SAY "Nao encontrado..."
RETURN(1)
ENDIF
RETURN(1)
ENDIF
ENDIF
IF LASTKEY()=13
CLEAR TYPEAHEAD
ENDIF
IF B=27
RETURN(0)
ENDIF
RETURN(1)
Até logo.
Marcelo
Enviado: 26 Out 2005 22:37
por rochinha
Amiguinho
Eu havia colocado uma mensagem bem detalhada mas agora devido ao meu tempo escasso vou resumir
A função apresentada pelo nosso amigo Clipper pode receber mais funções, exemplo:
Código: Selecionar todos
...
keyboard chr(13) // simula um ENTER
dbedit(,,,"FUNC02",,)
...
*---------------*
FUNCTION FUNC02
*---------------*
PARAM A,COL
ULTTECLA=LASTKEY()
IF ULTTECLA= 27 // ESC
...
// sua rotina de SAIDA
...
return 0
elseif ULTTECLA= 46 // INSert
nCodigo := 0
@ 10,10 say "Codigo do Produto:"
@ 11,10 get nCodigo picture "999999999999999" valid ProcuraOProduto()
read
if lastkey() <> 27
...
// sua rotina de INCLUSAO de dados da venda
...
endif
elseif ULTTECLA = 45 // Coloque o codigo para tecla DEL
...
// sua rotina de DELECAO de dados da venda
...
elseif ULTTECLA = 13 // Coloque o codigo para tecla ENTER
...
// sua rotina de ALTERACAO de dados da venda
...
endif
RETURN(2) // Sai da funcao mas continua controlado pelo DBEDIT
@braços :?)
Enviado: 27 Out 2005 19:22
por Arnaldo
Agradeço muito a presteza e preocupação em ajudar dos amigos Marcelo e Rochinha mas, ainda estou com problemas, como já mencionei minhas rotinas são modestas perto do conhecimento dos colegas; desculpem por tudo, provávelmente os exemplos estão certos eu é que não consegui adapta-la por falta de conhecimento;, é o seguinte:
Quanto ao exemplo do Marcelo, tentei ajusta-lo dentro da minha DbEdit sem solução, 2 erros ocorreram: O parâmetro B não reconhecido e também não entendi onde iria atuar, e depois o While/Enddo não tem saída dele? fica travado alí.
Quanto ao exemplo do rochinha, este exemplo de usar uma variável com um get e um read, tudo bem funciona direitinho mas, pelo que entendi, sempre terei de apertar um Enter para ir neste get e aguardar a leitura do codigo de barras.
Tentarei explicar de novo e ser mais objetivo. Toda vez que o usuário vai fazer uma venda ele entra na opção "Venda", neste momento monto um DBF temporário vazio, abro e manipulo com uma DbEdit, dentro desta tenho opção de excluir, alterar, etc. Porém é aí que pega, o cliente aparece com 1,2,3... ou mais itens e o caixa passa o leitor, este código será convertido em uma variável e procura do cadastro de produtos, encontrando tudo é gravado automaticamente e, se não encontrar aí sim aparece a variável com um get e um read para ser digitado manualmente (ou porque não encontrou ou porque leu o código de barras errado, embalagem amassada, etc.)
Grato novamente,
Se puderem ajudar um pouco mais e terem paciência comigo
Enviado: 27 Out 2005 21:53
por Clipper
Pegue abaixo uma rotina que fiz para que você possa entender como funciona.
Para sair da rotina basta teclar <ESC>
http://geocities.yahoo.com.br/mmendeso/dbteste.zip
Até logo.
Marcelo
Enviado: 28 Out 2005 09:25
por gvc
Dentro da função que controla o seu DBEDIT, quando terminar de fazer a rotina de entrada e atualizar os dados do temporário, coloque um KEYBOARD com o código da tecla que abre a função para inserir dados, para forçar novamente uma entrada.
Ex.
- O INS do teclado chama a rotina de entrada;
- É feita a leitura com um GET;
- O GET tem a função para verificar se o produto existe;
- Se o produto existe, faz a atualização do temporário;
- Após a atualização, coloque um KEYBOARD K_INS para simular nova entrada de material;
- O DBEDIT chama novamente a rotina de entrada automáticamente e o seu sistema fica esperando nova entrada de dados;
- Quando não for entrar com mais produtos, basta colocar a verificação do ESC após o READ do GET de código do produto.
(Não esqueça de colocar SET CONFIRME OFF para que o final da leitura do código já chame a função de verificação, se o código for do mesmo tamanho da variável utilizada)
- Se os códigos de produtos tiverem tamanhos diferentes, vc terá que trabalhar com outra opção que não o GET normal.
Enviado: 28 Out 2005 09:50
por Clipper
Só um porém...
Na função que eu passei não há uso do comando GET, ele terá que ou mudar para o uso com o GET ou fazer as modificações para uso sem GET.
Até logo.
Marcelo
Obrigado
Enviado: 30 Out 2005 15:54
por Arnaldo
Olá, valeu pessoal, agradeço a todos os usuários do forum, principalmente ao Marcelo, Rochinha e gvc;
Depois dos exemplos e dicas de vocês, consegui adaptar em meu prg e fazer funcionar.
Se algum dia eu puder ajudar aos amigos ou qualquer outro usuário do fórum, será com grande satisfação. Ficarei sempre atento ao fórum tentando aprender mais; aproveito a oportunidade de parabenizar o Toledo por manter viva esta linguagem.
Abraços e até mais...