Obrigado amigos pela ajuda de sempre .. consegui fazer desta maneira e ficou muito rápido em ambiente de rede ... criei um array com os clientes em atrasado assim a leitura fica somente na memoria ... o que vocês acham ?? dá pra melhorar algo mais ?? posso usar um array sem problema para essa finalidade??
Pra quem achar útil .. segue a ajuda ai tbm ...
exemplo de como mudar a cor de um cadastro de cliente de acordo com uma condição de outra tabela usando array ....
Código: Selecionar todos
*-------------------*
procedure DB_CADCLI && TABELA DE CLIENTES
*-------------------*
local Regra := "ClienteAtrasado(CLI->cc_codcli,aContas)", aContas := {} /// meu TBROWSER tem uma REGRA com um codeblock para mudar a cor .. //DB_CLIENTE
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 )
aContas := CarregarContas() // carrego as contas atrasadas no array
X:=aCamp[2]
oTab := TBrowseNew( 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"
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})} // AQUI ESTA A REGRA
EndIf
oTab:addColumn( oCol )
next
do while .T.
do while !oTab:Stabilize() ; enddo
// EU FAÇO ISSO PRA MUDAR A COR DE FUNDO QUANDO A LINHA ESTA VERMELHA ... OU BRANCA
IF ClienteAtrasado(CLI->cc_codcli,aContas)
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)
........... aqui segue o baile rsrsrs...
Código: Selecionar todos
*********************************************************************************************
//----------------------------------------------//
FUNCTION ClienteAtrasado(nCodCliente, aContas)
//----------------------------------------------//
LOCAL lAtrasado, dHoje, i, nLen
lAtrasado := .F.
dHoje := DATE()
nLen := LEN(aContas)
FOR i := 1 TO nLen
IF aContas[i][1] == nCodCliente
lAtrasado := .T.
EXIT
ENDIF
NEXT
RETURN lAtrasado
//------------------------//
FUNCTION CarregarContas()
//------------------------//
LOCAL aContas, dHoje, cliant, oElement
aContas := {}
dHoje := DATE()
RECEBER->(ORDSETFOCUS("RECCX_18"))
RECEBER->(DBGOTOP())
do while RECEBER->cd_dtvenc < date() .and. RECEBER->cc_receb == ' ' .and. RECEBER->(!EOF())
if RECEBER->cc_codcli <> cliant
AADD(aContas, { receber->cc_codcli})
endif
cliant := RECEBER->cc_codcli
RECEBER->(DBSKIP())
enddo
ClienteAtrasado(CLI->cc_codcli,aContas)
RETURN aContas
//------------------------------------------------------------------------------------------------------------------
se alguém tiver alguma ideia para otimizar estamos aí
Abraço a todos!!