Página 3 de 4

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 14 Mar 2024 10:24
por deividdjs
então zé .. eu uso tbm o ordsetfocus em vários pontos do sistema.. mais como essa função vem desde lá do clipper e quando migrei para xharbour não apresentou problemas ficou assim ..

fiz a mudança e compilei em 3.2 não surgiu efeito nenhum .. e todas as sugestões dos amigos acima tbm não ..

Código: Selecionar todos

cAlias := "PED"
nOrdem := "PEDCX_02"

db_PED :=  WIN(03,01,22,78, "* * PUNTO DE VENTA * *", WT_AZUL2BRANCO, WD_AZUL2BRANCO)

DB_PEDIDO_VENDA( aCab, aCamp, aPict, cAlias, nOrdem, Regra)
return nil

*---------------------------------------------------------------------*
 function DB_PEDIDO_VENDA( aCab, aCamp, aPict, cAlias, nOrdem, Regra )
*---------------------------------------------------------------------*
local oTAB, oCol, nKey, nRow, nCol, cTela, cArea
local OLDREC, OBROWSE, OCOLUNA, PESQUISA

select( cAlias )
ordsetfocus(nOrdem)

//set order to nOrdem

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 14 Mar 2024 10:28
por deividdjs
JoséQuintas escreveu:Pera aí.... devagar.

Vamos recomeçar:

Tem o primeiro fonte, é um browse.
Tem o segundo fonte, que contém uma rotina e um browse.
Qual a ligação entre eles ?
é uma rotina simples com vários cases para "i" incluir item no pedido "A" alterar "E" excluir e etc .. tudo bem simples ! e revisei tudo .. nada que possa mudar o ponteiro do cursor quando eu retorno pra função anterior .. será q não pode ser o RDDCDX ?? conflito nos indices?

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 14 Mar 2024 11:00
por JoséQuintas
E aquele select() ?
Se não muda área, vai bagunçar.

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 14 Mar 2024 11:24
por JoséQuintas
Esta é uma nova descoberta pra mim:
test.png
Dependendo da posição no fonte, é traduzido de um jeito.
Tanto no harbour quanto no xharbour

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 14 Mar 2024 11:43
por JoséQuintas
Depois dessa.... só o debug mesmo.
Pra que procurar, se ele pode procurar sozinho.

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 14 Mar 2024 12:10
por deividdjs
depois de décadas achei o problema ..

na rotina do <ESC> tinha essa função pra refrescar a tela ... e ela q era o problema !!

// oTab:Refreshall()


eliminei ela é solucionou o problema ... meu Jesuuuusssssss!!

o bizarro é q em xharbour funcionou a vida toda .. e ja em harbour dava esse problema .. vai entender !!

mesmo assim .. agradeço a todos q se dispuseram em ajudar ..

Abraço amigos ..

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 14 Mar 2024 13:36
por JoséQuintas
So aproveitando:

Justamente o bloco que comentei de modificar no fonte, pra ficar mais em evidência, foi o que deu problema no segundo fonte.
Por estar no meio do restante, passou tão desapercebido que nem sequer foi postado, e talvez tenha esquecido até de fazer testes nele.

É por isso que eu costumo chamar a atenção sobre os fontes.
Não parece, mas faz muita diferença.
Nesse caso, por exemplo, os testes acabariam ficando limitados ao bloco final.
E ele teria aparecido na postagem, acabou todo mundo procurando erro em fonte que não era causa do erro.

Aproveite e veja se tem outras situações parecidas.
De repente vai querer recuperar o tempo perdido, deixar assim, e não vai perceber que a alteração vai fazer ganhar tempo no futuro.
Nessas horas, só mesmo com alguém avisando, porque isso não consta em manual nenhum, e achamos que não é importante.
Pelo menos nesta situação está vendo que teria feito diferença, pode ser o melhor momento de avisar/convencer.

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 14 Mar 2024 14:30
por deividdjs
Tem razão... foi um problema tão tosco que nem postar eu postei ... mais fica o aprendizado! Hehhe

Vlw Zé..

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 14 Mar 2024 21:57
por rochinha
Amiguinhos,

deividdjs
Só pra deixar todos nós tranquilos, senão ninguém vai dormir hoje. Tira aquele select( alias ), desablita, etc. Ele é inóquo na sua aplicação como foi dito pelos forenses aqui.

@braços e com disse o Spock, Vida Longa ao Clipper.

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 14 Mar 2024 22:17
por JoséQuintas
rochinha escreveu:Só pra deixar todos nós tranquilos, senão ninguém vai dormir hoje. Tira aquele select( alias ), desablita, etc. Ele é inóquo na sua aplicação como foi dito pelos forenses aqui.
Não pode remover.
Se for o caso, apenas colocar espaço em branco depois de select.

Como mostrei no teste de gerar ppo, Select(x) no início da linha equivale ao comando SELECT (x)
já com atribuição, x := Select(x), aí ele vale por Select() mesmo.

E testei com xharbour e harbour, pra tirar dúvida, porque ele comentou que no xharbour funcionava.

É esquisito a mesma coisa ter dois funcionamentos diferentes, mas é assim.

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 15 Mar 2024 00:55
por rochinha
Amiguinhos,

Não pode remover.
Se for o caso, apenas colocar espaço em branco depois de select.

Como mostrei no teste de gerar ppo, Select(x) no início da linha equivale ao comando SELECT (x)
já com atribuição, x := Select(x), aí ele vale por Select() mesmo.

E testei com xharbour e harbour, pra tirar dúvida, porque ele comentou que no xharbour funcionava.

É esquisito a mesma coisa ter dois funcionamentos diferentes, mas é assim.
Este funcionamentos estranhos acabam confundindo mais que ajudando. Mas se funciona, então deixa.

Como diz a máxima do Tecnico de Hardware: A máquina empoeirada tá funcionando? Se sim, deixa com a poeira porque se tirar eela pára.

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 21 Mai 2024 15:07
por deividdjs
Galera .. estou com uma função aqui .. preciso saber como faço para mudar a linha de um tbrowser conforme a condição de uma outra tabela .... por exemplo estou no cadastro de cliente e quero pintar todos os cliente que tenham conta atrasadas .. até consegui fazer, porem fica muito lento em rede ...

Código: Selecionar todos


local Regra := "CLIENTES_EM_ATRASO() == 'S'"

calias := "cli"
nordem := "clicx_02"

DB_CLI :=  WIN(03,01,22,78, "* * REGISTRO DE CLIENTES * *", WT_VERM1BRANCO, WD_VERM1BRANCO)

DB_CLIENTE( aCab, aCamp, aPict, cAlias, nOrdem, Regra)	
return nil

*----------------------------------------------------------------*
 function DB_CLIENTE( aCab, aCamp, aPict, cAlias, nOrdem, Regra )
*----------------------------------------------------------------*
local oTAB, oCol, nKey, nRow, nCol, cTela, cArea
local OLDREC, OBROWSE, OCOLUNA, PESQUISA, v_atraso 

select( cAlias )
set order to nOrdem
go top

setcursor(0)
cArea := savescreen( 00, 00, 24, 79 )

X:=aCamp[2]
oTab           := TBrowseDB( 05, 02, 21, 77 ) // GERA UM TBROWSE
oTab:colsep    := CHR(179)
oTab:headsep   := CHR(194)+CHR(196)
oTab:footsep   := CHR(193)+CHR(196) 
oTab:ColorSpec := "N/W*, W+/B+, R+/W*, R+/N+, GR+/N, B+*/W, R+*/W, GR*/W*"
oTab:SkipBlock := {| nSkip | dbSkipBlock( nSkip, oTab ) }
	
for i = 1 TO len(aCamp)
   if valtype(aCamp[I]) == "B"
      oCol:=TBcolumnNew( aCab[I], ( aCamp[I] ) )
      oCol:Picture:=aPict[I]
   else   
      oCol:=TBcolumnNew( aCab[I], FIELDWBLOCK( aCamp[I], SELECT()))
      oCol:Picture:=aPict[I]
   endif  
   If Regra # Nil
      oCol:ColorBlock:={|X| If(&(Regra),{3,4},{1,2})}
   EndIf  
   oTab:addColumn( oCol )
          
next

nCol_Reg := (oTab:nRight-oTab:nLeft+2) / len(aCamp) // Para iluminar o TBrowser

oTab:Freeze := 2 // Definindo Coluna fixa
oTab:ColPos := 1

do while .T.

    oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{})

    do while !oTab:Stabilize() ; enddo
  
	 [b]IF CLIENTES_EM_ATRASO() == 'S'       [/b]                                                
      oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{4,5})                    
    else                                                                                 
       oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{2,5})                   
    endif                                                                                
    oTab:hilite()                                                                        
                                                                                       
     setpos( nRow, nCol )                                                                 
     //nKey := inkey(0)                                                                      
     nKey := Inkey( 0, HB_INKEY_ALL )
	  
     ........

 
// função q vasculha os contas a receber

Código: Selecionar todos

*-----------------------------*
 Function CLIENTES_EM_ATRASO() // BUSCA CLIENTES EM ATRASO
*-----------------------------*  
 LOCAL v_atraso := "N"
 
 IF RECEBER->(ORDSETFOCUS("RECCX_15"),DBSEEK(CLI->cc_codcli))
    IF RECEBER->cc_receb = ' ' .and. RECEBER->cd_dtvenc < date()
       v_atraso := "S"
    ENDIF
 ENDIF
    
 return(v_atraso)


se alguém puder me ajudar a dar uma enxugada nisso agradeço! sinceramente não sei se do jeito q fiz é a jeito certo ... localmente funciona bem .. porem em rede fica complicado !! rsrs

Abraço!

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 06 Jun 2024 11:11
por deividdjs
Bom dia Amigos ..

Alguém tem ideia de como eu fazer uma rotina que marque no TBROWSER em vermelho os clientes que estejam com contas atrasadas no contas a receber ?? eu até fiz uma porem em rede ela ficou lenta .. preciso de algo q seja mais rapido ... o exemplo está no post acima .. alguma luz ???

Saludos ...

DJS

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 06 Jun 2024 14:19
por JoséQuintas
Crie uma coluna com isso.
Coloque no codeblock das colunas pra alterar a cor.
Não lembro como pegar o valor da coluna do browse
Não sei se vai ficar mais rápido.

Se o arquivo pesquisado não estiver indexado pra em atraso primeiro, só um SEEK não vai resolver.

Ou crie um temporário só com devedores, teoricamente arquivo pequeno.
SEEK, if eof() ok, senão devedor.

POSIÇÃO DO REGISTRO AO RETORNAR PRA TELA ANTERIOR TBROWSER

Enviado: 06 Jun 2024 15:39
por deividdjs
JoséQuintas escreveu:Coloque no codeblock das colunas pra alterar a cor.
eu fiz isso Zé .. porem cada toque q dou no cursor dentro do browser ele checa e fica super lento em rede ...

essa é a função :

Código: Selecionar todos

local Regra := "CLIENTES_EM_ATRASO() == 'S'"
TBROWSE:

Código: Selecionar todos

*----------------------------------------------------------------*
 function DB_CLIENTE( aCab, aCamp, aPict, cAlias, nOrdem, Regra )
*----------------------------------------------------------------*
local oTAB, oCol, nKey, nRow, nCol, cTela, cArea
local OLDREC, OBROWSE, OCOLUNA, PESQUISA, v_atraso 

select( cAlias )
set order to nOrdem
go top

setcursor(0)
cArea := savescreen( 00, 00, 24, 79 )

X:=aCamp[2]
oTab           := TBrowseDB( 05, 02, 21, 77 ) // GERA UM TBROWSE
oTab:colsep    := CHR(179)
oTab:headsep   := CHR(194)+CHR(196)
oTab:footsep   := CHR(193)+CHR(196) 
oTab:ColorSpec := "N/W*, W+/B+, R+/W*, R+/N+, GR+/N, B+*/W, R+*/W, GR*/W*"
oTab:SkipBlock := {| nSkip | dbSkipBlock( nSkip, oTab ) }

for i = 1 TO len(aCamp)
   if valtype(aCamp[I]) == "B"
      oCol:=TBcolumnNew( aCab[I], ( aCamp[I] ) )
      oCol:Picture:=aPict[I]
   else   
      oCol:=TBcolumnNew( aCab[I], FIELDWBLOCK( aCamp[I], SELECT()))
      oCol:Picture:=aPict[I]
   endif  
   If Regra # Nil
      oCol:ColorBlock:={|X| If(&(Regra),{3,4},{1,2})}
   EndIf  
	oTab:addColumn( oCol )
          
 // muda de cor somente a coluna conforme a situa‡Æo
   if i = 4
	    oCol:COLORBLOCK :={|X| IIF ( CC_FJ = "F" , {6,2} ,;
                              IIF ( CC_FJ = "J" , {8,2},{1,2} ))} 
   endif                               

next
  
nCol_Reg := (oTab:nRight-oTab:nLeft+2) / len(aCamp) // Para iluminar o TBrowser

oTab:Freeze := 2 // Definindo Coluna fixa
oTab:ColPos := 1
 
do while .T.

 //   oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{})

    do while !oTab:Stabilize() ; enddo
  
	 IF CLIENTES_EM_ATRASO() == 'S'                                                       
      oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{4,5})                    
    else                                                                                 
       oTab:colorRect({oTab:RowPos,1,oTab:RowPos,oTab:ColCount},{2,5})                   
    endif                                                                                

    oTab:hilite()                                                                        
                                                                                       
     setpos( nRow, nCol )                                                                 
     nKey := Inkey( 0, HB_INKEY_ALL )
	  

Código: Selecionar todos

*-----------------------------*
 Function CLIENTES_EM_ATRASO() // BUSCA CLIENTES EM ATRASO
*-----------------------------*  
 LOCAL v_atraso := "N"
 
 IF RECEBER->(ORDSETFOCUS("RECCX_15"),DBSEEK(CLI->cc_codcli))
    IF RECEBER->cc_receb = ' ' .and. RECEBER->cd_dtvenc < date()
       v_atraso := "S"
    ENDIF
 ENDIF
    
o que vc acha q posso mudar aí pra melhorar o desempenho ?? local fica excelente mais em rede vira uma tartaruga ...  mesmo problema eu enfrente no cadastro de produtos .. 

Sds,

 return(v_atraso