Página 1 de 1

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

Enviado: 04 Fev 2008 09:24
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.

Enviado: 04 Fev 2008 09:39
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.

Enviado: 04 Fev 2008 09:47
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

Enviado: 04 Fev 2008 10:05
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.

Enviado: 04 Fev 2008 10:11
por gilsonpaulo
Valeu pela ajuda, fico devende essa.

Enviado: 04 Fev 2008 14:33
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.

Enviado: 05 Fev 2008 01:28
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

Enviado: 05 Fev 2008 11:13
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.

Enviado: 06 Fev 2008 15:50
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.

Enviado: 06 Fev 2008 23:19
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.

Enviado: 07 Fev 2008 00:08
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.