SIX e o DBSEEK

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

ALEX BORELLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 118
Registrado em: 24 Jan 2008 22:21
Localização: Concórdia - SC

SIX e o DBSEEK

Mensagem por ALEX BORELLI »

Ola amigos
Estou com um probleminha, o DBSEEK nao funciona no SIX (.NSX).

Deixa eu explicar o que quero fazer:

Quando cadastro um item no pedido do cliente, a rotina identifica pelo tamanho do codigo se é codigo do produto ou o codigo de barra. Considero acima de 7 casas como codigo de barra, e uso o dbseek para localizar o codigo do produto dentro do indice, mas no SIX nao esta funcionando.


Alguem pode me ajudar?
Alex Borelli
Arpa Sistemas
www.arpasistemascom.br
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 »

Sem ver o código, só dá pra dizer que esta função funciona perfeitamente.
[]'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!
Alcir
Usuário Nível 1
Usuário Nível 1
Mensagens: 34
Registrado em: 17 Abr 2008 10:57
Localização: sao paulo

Re: SIX e o DBSEEK

Mensagem por Alcir »

Cola a sua rotina aqui, que nós te ajudaremos, abraços
ALEX BORELLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 118
Registrado em: 24 Jan 2008 22:21
Localização: Concórdia - SC

Re: SIX e o DBSEEK

Mensagem por ALEX BORELLI »

Ola amigos

Agradeco a ajuda, segue abaixo o codigo fonte:

Abertura do arquivo:

Código: Selecionar todos

If AbreArquivo("Produtos", .T., 10) == .F.
   Exit
End If
Set index to IndCProd, IndDescr, IDeAuEdt, IProBarr



@ 10, 16 Say [C¢digo..] + Seta Get vCodPro Pict[9999999999999]  Valid( ConfPro( vCodPro, 09, 52 ) # .F. )
READ
If Lastkey() == K_ESC

   M_botao( 22, 64, Chr(16) + [ RETORNA ] + Chr(17), "bg/b" )
   Exit

End If 
Funcao:

Código: Selecionar todos

Function ConfPro( nCodPro, p2, p3  )
PUBLIC nQuaMov, nQuaCgi

IF LASTKEY() = K_UP
   Return( .T. )
END IF
  
Select Produtos
cEncontra := .F.
IF LEN( ALLTRIM( STR( nCodPro ) ) ) > 7
  
   Produtos->( DBSETORDER( 4 ) )                        && QUANDO ENTRA AQUI  USANDO O NSX
   Produtos->( DBGOTOP() )                              && NAO LOCALIZA O REGISTRO
   cEncontra := Produtos->( DbSeek( nCodPro ) )        

ELSE    

   Produtos->( DBSETORDER(1) )                          
   Produtos->( DBGOTOP() )                              
   cEncontra := Produtos->( DbSeek( nCodPro ) )         

END IF

If cEncontra == .F.

   Mensagem( 24, Mesg[23] )
   Return( .F. )

Else

   Public cDescri  := Produtos->DESCRICAO,;
          nPreUnit := Produtos->PREVENDA,;
          vPreUnit := Produtos->PREVENDA,;
          nnnReg   := Produtos->( Recno() ),;
          nPreCust := Produtos->PRECUSTO,;
          cProduz  := Produtos->PRODUZIDO,;
          cMarca   := "",;
          cSitTrib := Produtos->SIT_TRIB,;
          cUnidade := Produtos->UNIDADE,;
          nIcms    := Produtos->ICMS,;
          nAutor   := Produtos->AUTOR,;
          nEditora := Produtos->EDITORA

   IF PCOUNT() > 1

      @ P2 ++, P3 SAY [Estoque.:] + STR( Produtos->QUANTIDADE, 6 )

      SELECT PROFORA
      nQuaMov := nQuaCgi := 0
      IF PROFORA->( DBSEEK( nCodPro ) ) = .T.
         WHILE PROFORA->CODIGO = nCodPro

            IF PROFORA->VENDEDOR = nCodVend

               nQuaMov += ( PROFORA->QUANTI     - PROFORA->MOVIMENTO  )
               nQuaCgi += ( PROFORA->CONSIGNADO - PROFORA->BX_CONSIGN )

            END IF

            PROFORA->( DBSKIP() )

         END DO
      END IF

      SELECT PRODUTOS
      @ P2 ++, P3 SAY [Vendedor:] + STR( nQuaMov, 6 )
      @ P2 ++, P3 SAY [Consign.:] + STR( nQuaCgi, 6 )

   END IF

   Produtos->( DBSETORDER(1) )

   Return( .T. )
End If
Alex Borelli
Arpa Sistemas
www.arpasistemascom.br
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

DBSEEK

Mensagem por Pablo César »

É dificil limitar-se a um único e possivel erro, pois todo temos formas diferentes de programar. Apenas leia o que indicaria e tente corrigir seu código:

1. Eu iria tratar diferente uma validação. Pois pelo que eu vejo, você está precisando navegar e liberar daquele GET quando o usuário digitar seta pra cima ou pra baixo.
2. Na função ConfPro, de primeira eu iria atribuir a duas variáveis (aera e order) para quando finalizar a função sejam restabelecida a área e a ordem em que inicialmente estava
3. Eu não usaria as variáveis que foram criadas do tipo PUBLIC ao menos que sejam SUMAMENTE necessárias, pois elas consomem mais memória
4. Utilizaria a variável cEncontra como retorno da função, mas antes iria re-estabelecer a possição da aera e order em que se encontrava.

Não executei seu exemplo, mas acho que o posicionamento e seleção das áreas é que basicamente poderia estar o seu erro.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
ALEX BORELLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 118
Registrado em: 24 Jan 2008 22:21
Localização: Concórdia - SC

Re: SIX e o DBSEEK

Mensagem por ALEX BORELLI »

Vou fazer essas alteracoes. No .NTX ele funciona certinho, no .NSX (SIX) nao. Talvez pela necessidade de ter de fazer essas alteracoes que voce me sugeriu.
Alex Borelli
Arpa Sistemas
www.arpasistemascom.br
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

DBSEEK

Mensagem por Pablo César »

Experimente fazer essa implementações, que nada mais são sempre bem vindas pois são necessárias (ao re-posicionamento da área) me refiro.

Você debugou ?. E percebeu que o código mesmo existente no BD dá como not found ?. Se for isso confirmado, verfiique a sintaxe para posicionar-se a ordem certa, pois eu não tenho como lhe dizer se a sua sintaxe está correta, pois não uso outro RDD que a original do Clipper.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
ALEX BORELLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 118
Registrado em: 24 Jan 2008 22:21
Localização: Concórdia - SC

Re: SIX e o DBSEEK

Mensagem por ALEX BORELLI »

Pablo, o objetivo da rotina e verificar se o que esta digitado e o codigo de produto ou o codigo de barra do mesmo. Depois dele identificar o tipo (acima de 7 numeros e codigo de barra).

So que no .NSX nao esta funcionando, no .NTX sim.
Alex Borelli
Arpa Sistemas
www.arpasistemascom.br
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

DBSEEK

Mensagem por Pablo César »

A minha perguntou foi se você DEBUGOU o seu código para ver como se comporta. Talvez você não tenha entendido, pois estava com erro a minha msg (agora corrigida).
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
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 »

Onde está a parte do programa onde são criados os índices?
No que pese o fato dos conselhos do Pablo terem razão de ser, o código de busca aparentemente está correto. Mas não dá pra analisar corretamente sem ver como o índice 4 está sendo criado. O problema pode estar aí.
[]'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!
ALEX BORELLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 118
Registrado em: 24 Jan 2008 22:21
Localização: Concórdia - SC

Re: INDICES

Mensagem por ALEX BORELLI »

IN
Maligno escreveu:Onde está a parte do programa onde são criados os índices?
Desculpe, realmente faltou, segue codigo:

Código: Selecionar todos

   aProdutos := { { "CODPRO",     "N", 06, 0 },;
                  { "CODPROFORN", "C", 12, 0 },;
                  { "MARCA",      "N", 05, 0 },;
                  { "COD_DEPART", "N", 04, 0 },;
                  { "DESCRICAO",  "C", 80, 0 },;
                  { "FORNECEDOR", "N", 05, 0 },;
                  { "UNIDADE",    "C", 05, 0 },;
                  { "QUANTIDADE", "N", 10, 3 },;
                  { "EST_MINI",   "N", 10, 3 },;
                  { "EMBALAGEM",  "N", 05, 0 },;
                  { "PREVENDA",   "N", 15, 2 },;
                  { "PRECUSTO",   "N", 15, 2 },;
                  { "CUST_CONTB", "N", 15, 2 },;
                  { "ULT_CUSTO",  "N", 15, 2 },;
                  { "QTD_ULTCOM", "N", 10, 3 },;
                  { "DT_ULT_VEN", "D", 08, 0 },;
                  { "DT_ULT_COM", "D", 08, 0 },;
                  { "MARKUP",     "N", 10, 3 },;
                  { "PRODUZIDO",  "C", 01, 0 },;
                  { "AUMENTO",    "C", 01, 0 },;
                  { "ICMS",       "N", 08, 2 },;
                  { "INATIVOS",   "N", 15, 0 },;
                  { "DIAS_S_MOV", "N", 15, 0 },;
                  { "SIT_TRIB",   "C", 03, 0 },;
                  { "EDITORA",    "N", 04, 0 },;
                  { "AUTOR",      "N", 05, 0 },;
                  { "DESCRICAO2", "C", 80, 0 },;
                  { "COLECAO",    "N", 06, 0 },;
                  { "AREA",       "N", 04, 0 },;
                  { "EDICAO",     "N", 04, 0 },;
                  { "ANO",        "N", 04, 0 },;
                  { "PAGINAS",    "N", 04, 0 },;
                  { "ISBN",       "C", 10, 0 },;
                  { "PESO",       "N", 10, 3 },;
                  { "TAMANHO",    "C", 15, 0 },;
                  { "TIPOMATER",  "C", 10, 0 },;
                  { "OBSERVACAO", "C", 30, 0 },;
                  { "TEM_ESTOQ",  "C", 30, 0 },;
                  { "BARRA",      "C", 13, 0 },;
                  { "CONSIGNADO", "N", 15, 0 },;
                  { "DESC_MAX",   "N", 8,  2 },;
                  { "E_KIT",      "C", 1,  0 } }



   If ! File( "produtos.dbf" )
      dbcreate( "produtos.dbf", aProdutos )
   End If

      CLOSE ALL

      If AbreArquivo("PRODUTOS", .F., 10) == .T.
         Pack
                  
         Index on CODPRO    to IndCProd
         Index on DESCRICAO to IndDescr
         Index on DESCRICAO + STRZERO( AUTOR, 5 ) + STRZERO( EDITORA, 4 ) to IDeAuEdt
         Index on BARRA     to IProBarr
         Close All

      END IF
Alex Borelli
Arpa Sistemas
www.arpasistemascom.br
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 »

Pelo código exposto parece que o índice 4 tem como chave apenas o valor BARRA. Esse valor é do tipo CHAR, mas a pesquisa é feita com um valor do tipo NUM. Está aí o erro, não?
[]'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!
ALEX BORELLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 118
Registrado em: 24 Jan 2008 22:21
Localização: Concórdia - SC

Re:

Mensagem por ALEX BORELLI »

Maligno escreveu:Esse valor é do tipo CHAR, mas a pesquisa é feita com um valor do tipo NUM. Está aí o erro, não?
Vou fazer a alteracao e ver se funciona. O codigo como esta, com o .NTX funciona perfeitamente.
Alex Borelli
Arpa Sistemas
www.arpasistemascom.br
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 »

Ok. Faça o teste. Mas se a chave do índice é CHAR e a pesquisa é feita com um valor NUM, realmente não deve encontrar o registro.
[]'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!
ALEX BORELLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 118
Registrado em: 24 Jan 2008 22:21
Localização: Concórdia - SC

Re: FUNCIONOU

Mensagem por ALEX BORELLI »

Funcionou. Obrigado Pablo, e Maligno. Como sempre, me ajudaram muito.
Obrigado mesmo.
Alex Borelli
Arpa Sistemas
www.arpasistemascom.br
Responder