DBEDIT AGUARDANDO LEITOR DE BARRAS

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Arnaldo
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 31 Ago 2003 00:16

DBEDIT AGUARDANDO LEITOR DE BARRAS

Mensagem 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
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
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)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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 :?)
Arnaldo
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 31 Ago 2003 00:16

Mensagem 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
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
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)
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
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)
Arnaldo
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 31 Ago 2003 00:16

Obrigado

Mensagem 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...
Responder