Busca Item pelo Codigo de Barras ou pela Descrição

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Busca Item pelo Codigo de Barras ou pela Descrição

Mensagem por gilsonpaulo »

Estou com um problema. Na tela de de vendas preciso que o sistema identifique automaticamente se a busca tem que ser por codigo de barras ou descricao.

Se comecar com numero ele procura pelo codigo de barras, mas se for letra, procura pela descrição do produto.

Desde ja agradeço a ajuda.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Seja bem-vindo ao fórum. :)

Se o código do produto começa sempre com números, acho que basta você, antes da pesquisa, analisar o primeiro dígito, direcionando a pesquisa para o código, se for número ou para a descrição, se não for.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Mensagem por gilsonpaulo »

É que sou novato em clipper e estou me batendo para criar esta rotina. se puder me dar um exemplo agradeceria.

a base de dados é cadmer e os campos são barras e desmer
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Existem n formas de se fazer isso. Depende muito de como você implementou o seu programas e os banco de dados. Mas, num exemplo bem simples:

Código: Selecionar todos

@ 1,2 say "Código:" get CODIGO valid Teste()
READ

function Teste()
local lRet := .F.
if !Empty(CODIGO)
   if Left(LTrim(CODIGO),1) $ "1234567890"
      // buscar pelo número
      lRet := // resultado da busca
   else
      // buscar pela descrição
      lRet := // resultado da busca
   end
end
return lRet
Havia um erro na posição de um parêntese no teste do dígito.
Agora está certo.
Editado pela última vez por Maligno em 04 Fev 2008 10:15, em um total de 2 vezes.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Mensagem por gilsonpaulo »

Valeu pela ajuda, fico devende essa.
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem por alaminojunior »

Código: Selecionar todos

    
.....
  case tempo == K_PGDN
	   Tb3:PageDown()
	   tb3:refreshall()
      case tempo == K_PGUP
	   Tb3:PageUp()
	   tb3:refreshall()
      case isalpha(Chr(lastkey())) .OR. lastkey() > 48 .AND. lastkey() < 58
           if (lastkey() > 48 .AND. lastkey() < 58)
	      OrdSetFocus("indpre01")
	      Ord:= 1
	   else
	      OrdSetFocus("indpre02")
	      Ord:= 2
	   endif
	   Keyboard Upper(Chr(lastkey()))
	   pesquisa(ord)
	   Destaca()
	   Tb3:RefreshAll()

Assumindo que vc trabalhe com tbrowse, eis aí o fragmento de código que uso.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Ei Junior !

Não complica não !

Tbrowse() !!! Vai dar um nó na cabeça do amigo, ele é novato...

Brincadeirinha...

:))

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
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem por alaminojunior »

Mamão com açucar então...

Código: Selecionar todos

Function Autor
Local fo1,fo2:=Select(),fo3:=OrdSetFocus(),fo4:=savenv(00,00,maxrow(),maxcol()),fo5:= str(clicod,7)
select cdcli002
ordsetfocus("indcli01")
if !dbseek(fo5)
   wvt_messagebox("Nenhum autorizado cadastrado !","ATENCAO",48)
   inkey(3)
   select(Fo2)
   ordsetfocus(Fo3)      
   RstEnv(Fo4)
   return
endif   
medsetscpe(0,fo5)
medsetscpe(1,fo5)
//ordscope(0,fo5)
//ordscope(1,fo5)
dbgotop()
fo1 = "Autorizado                     Identidade      Nasc.     Parentesco"
Win(05,05,17,75,cdcli000->clinom,"gr+/g","g/b")
aTb4:= tbcolumnnew(fo1, { || cliaut +space(1)+ cliide +space(1)+ dtoc(clidat) +space(1)+ clipar})
aTb3:= TbrowseDB(06,06,16,74)
aTb3:headsep:= chr(196)
aTb3:footsep:= chr(196)
aTb3:colorspec:= "w/b,gr+/b,w/b,gr+/n,g+/b"
aTb4:defcolor:= {5}
aTb4:colorblock:= {|aTb3| iif(clicod = " ", {3,4},{1,2})}
aTb3:addcolumn(aTb4)
do while .t.
   do while !aTb3:stabilize()
   enddo
   medrfsrecc()
   tempo:= inkey(60)
   do case
      case tempo = K_ESC
           medsetscpe(0,nil)
           medsetscpe(1,nil)
           //ordscope(0,nil)
           //ordscope(1,nil)
           select(Fo2)
           ordsetfocus(Fo3)      
           RstEnv(Fo4)
           exit
      case tempo = 0
           aTb3:refreshall()
           loop
      case tempo == K_DOWN
           aTb3:down()
           atb3:refreshcurrent()
      case tempo == K_UP
           aTb3:up()
           atb3:refreshcurrent()
      case tempo == K_PGDN
           aTb3:PageDown()
           aTb3:refreshall()
      case tempo == K_PGUP
           aTb3:PageUp()
           aTb3:refreshall()
      case tempo == K_ENTER .and. onde
           oraut:= cliaut
           medsetscpe(0,nil)
           medsetscpe(1,nil)
           //ordscope(0,nil)
           //ordscope(1,nil)
           select(Fo2)
           ordsetfocus(Fo3)      
           RstEnv(Fo4)
           return
   endcase
enddo
Mas, pelo amor de Deus, estude o tbrowse pelo menos o básico, senão não vai adiantar nada, e o Hitler vai te pegar.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Talvez o colega não queria fazer a pesquisa pelo TBrowse. Aliás, eu próprio só faço pesquisa pelo TBrowse em raras situações. A não ser a pesquisa incremental.

E, realmente, esparramar um monte de código pro colega, sem explicar os detalhes dele, não ajuda muito pra quem está se perdendo em algo simples como uma pesquisa.

Além do quê, seu exemplo não contém o código básico do Clipper, mas de algumas bibliotecas que possuem funções bem diferentes, o que também atrapalha o aprendizado.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Mensagem por gilsonpaulo »

O código do Maligno ja me resolveu o problema. Obrigado a todos pela ajuda.

Tenho mais uma duvida. Com relação a emissão de notas fiscais para industrias, tem alguma legislão especifica ou é só colocar o software la e sair para o abraço? Esta industria ta como super simples.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Uma boa pergunta para o seu contador. Ele é obrigado a saber. Se alguém disser que não precisa de nada, é sua obrigação não confiar na informação obtida num fórum de programação. Não é o lugar certo pra isso, entende? Se a pessoa estiver errada, não adianta dizer "ah, mas o fulano do fórum me disse que não precisava.". Você vai se ferrar do mesmo jeito.

A informação certa tem que vir da fonte certa, de forma que essa fonte pode ser responsabilizada amanhã ou depois pela informação errada que tenha dado.

Mas, a título de curiosidade apenas,... No Paraná, a empresa que emite nota fiscal pelo computador é obrigada a informar o SINTEGRA mensalmente. O programador tem que se cadastrar na Receita Estadual, senão a AIDF da empresa não será autorizada.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder