Agora voltemos ao tbrowse.
lembrando do início do aplicativo:
Teclou F9, chama rotina de pesquisa, se vale pro aplicativo, vale pra esta nova tela.
Código: Selecionar todos
cVarName := Lower( ReadVar() )
...
CASE cVarName $ "mcliente" // .AND. m_Prog == "PTESFORUM"
JPCADAS1Class():GridSelection()
...
A rotina de pesquisa verifica o nome da variável do GET e desvia pra rotina correspondente, nesse caso de clientes.
Chamei de GridSelection(), só porque dá pra considerar sendo uma grid, e é pra seleção.
Esta tem algo mais, mas tudo bem, já foi, vai ela mesmo.
Código: Selecionar todos
METHOD GridSelection() CLASS JPCADAS1Class
LOCAL nCont, nSelect := Select(), cOrdSetFocus, oTBrowse
IF Select( "jpclista" ) == 0
SELECT 0
AbreArquivos( "jpclista" )
WriteErrorLog( "Faltou abrir jpclista", 2 )
ENDIF
SELECT jpcadas
oTBrowse := { ;
{ "Nome", {|| jpcadas->cdNome } }, ;
{ "Apelido", {|| jpcadas->cdApelido } }, ;
{ "Código", {|| jpcadas->cdCodigo } }, ;
{ "UF", {|| jpcadas->cdUf } }, ;
{ "Cidade", {|| jpcadas->cdCidade } }, ;
{ "Ref.Mapa", {|| jpcadas->cdMapa } }, ;
{ "Endereço", {|| jpcadas->cdEndereco } }, ;
{ "Número", {|| jpcadas->cdNumero } }, ;
{ "Complemento", {|| jpcadas->cdCompl } }, ;
{ "Cnpj", {|| jpcadas->cdCnpj } } }
FOR nCont = 1 TO Len( oTBrowse )
AAdd( oTBrowse[ nCont ], {|| iif( ! Encontra( jpcadas->cdStatus, "jpclista", "numlan" ) .OR. Val( jpcadas->cdStatus ) < 2, { 1, 2 }, ;
iif( Trim( jpclista->csBloqueio ) == "0", { 3, 2 }, ;
iif( Trim( jpclista->csBloqueio ) == "1", { 4, 2 }, { 7, 2 } ) ) ) } )
NEXT
cOrdSetFocus := ordSetFocus()
ordSetFocus( "jpcadas2" )
FazBrowse( oTBrowse,, "1" )
IF LastKey() != K_ESC .AND. ! Eof()
KEYBOARD jpcadas->cdCodigo + Chr( K_ENTER )
ENDIF
ordSetFocus( cOrdSetFocus )
SELECT ( nSelect )
RETURN NIL
Achei interessante acrescentar esta parte:
Código: Selecionar todos
IF Select( "jpclista" ) == 0
SELECT 0
AbreArquivos( "jpclista" )
WriteErrorLog( "Faltou abrir jpclista", 2 )
ENDIF
Se esse arquivo não estiver aberto, já abre automático (esqueci dele).
Além de resolver o problema, o sistema ainda registra como erro, e me manda um email avisando que eu esqueci de colocar no fonte pra abrir esse arquivo.
A rotina não sabe qual arquivo está posicionado, então salva a área atual, muda pra área de clientes e depois volta para o que estava antes.
Código: Selecionar todos
cOrdSetFocus := ordSetFocus()
ordSetFocus( "jpcadas2" )
...
ordSetFocus( cOrdSetFocus )
A rotina não sabe em qual índice está posicionado, então altera pra ordem alfabética e depois volta o que estava antes.
Código: Selecionar todos
IF LastKey() != K_ESC .AND. ! Eof()
KEYBOARD jpcadas->cdCodigo + Chr( K_ENTER )
ENDIF
Se foi escolhido um cliente, a rotina faz o KEYBOARD do código + ENTER. Isso vai entrar no GET.
Os campos que aparecerão no tbrowse
Código: Selecionar todos
oTBrowse := { ;
{ "Nome", {|| jpcadas->cdNome } }, ;
{ "Apelido", {|| jpcadas->cdApelido } }, ;
{ "Código", {|| jpcadas->cdCodigo } }, ;
{ "UF", {|| jpcadas->cdUf } }, ;
{ "Cidade", {|| jpcadas->cdCidade } }, ;
{ "Ref.Mapa", {|| jpcadas->cdMapa } }, ;
{ "Endereço", {|| jpcadas->cdEndereco } }, ;
{ "Número", {|| jpcadas->cdNumero } }, ;
{ "Complemento", {|| jpcadas->cdCompl } }, ;
{ "Cnpj", {|| jpcadas->cdCnpj } } }
De acordo com certas condições, as cores de cada cliente serão diferentes.
Código: Selecionar todos
FOR nCont = 1 TO Len( oTBrowse )
AAdd( oTBrowse[ nCont ], {|| iif( ! Encontra( jpcadas->cdStatus, "jpclista", "numlan" ) .OR. Val( jpcadas->cdStatus ) < 2, { 1, 2 }, ;
iif( Trim( jpclista->csBloqueio ) == "0", { 3, 2 }, ;
iif( Trim( jpclista->csBloqueio ) == "1", { 4, 2 }, { 7, 2 } ) ) ) } )
NEXT
E a chamada à rotina de tbrowse propriamente dita.
Esse detalhe a mais é porque misturo vários cadastros em um. O de clientes, usa tipo="1", é o que esse parâmetro indica
Resumindo: a rotina nova usou tudo que já estava disponível. Bastou seguir o padrão do aplicativo.
(E o sistema me avisou que esqueci de abrir o jpclista, preciso acrescentar no AbreArquivos(), é aonde tem a descrição de status de clientes, usada pra complemento nesse browse)