DBEDIT AGUARDANDO LEITOR DE BARRAS
Moderador: Moderadores
DBEDIT AGUARDANDO LEITOR DE BARRAS
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
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
Prezado Colega
Use uma função dentro do DBEDIT deste tipo :
Até logo.
Marcelo
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)
Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
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:
@braços :?)
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 DBEDITAgradeç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
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
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
Para sair da rotina basta teclar <ESC>
http://geocities.yahoo.com.br/mmendeso/dbteste.zip
Até logo.
Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
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.
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.
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
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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Obrigado
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...
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...

