Exemplos de uso da função NAVEGAR()

Foto de Anderson

Os exemplos a seguir são segmentos de programas reais e portanto são meramente ilustrativos (não é o programa completo, é só para exemplificar).

Consulta de dados. Utiliza uma função personalizada quando o usuário tecla [Enter] para mostrar os vencedores e participantes da licitação. Teclas [Insert] e [Delete] estão desabilitadas neste exemplo.

Possui colunas criadas por funções personalizadas.

aTITU := {"PROCESSO", "OBJETO", "SITUAÇÃO", "DATA", "SESSÃO", "HORA"}
aCAMP := {"LIC(MODALIDADE,NUMERO,COMPL,ANO)", "OBJETO", "SITUA(TRESULTADO)", "INICIO", "SESSAO", "SESSAOHORA"}
aMASK := {"@!","@!S62",,,,,,,,}
abROT := { {|| UNPLUGGED()}, {|| MOSTRALIC()}, {|| UNPLUGGED()}, {|| UNPLUGGED()}}

NAVEGAR(02,00,22,MAXCOL(), "TODOS OS PROCESSOS LICITATÓRIOS",,,;
               aTITU, aCAMP, aMASk,;
               abROT)

FUNCTION UNPLUGGED()
// ESSA FUNÇÃO NÃO FAZ NADA MESMO, SERVE PARA DESABILITAR A FUNÇÃO PADRÃO
RETURN

Esse exemplo usa VALIDAÇÃO. Só cadastra CPF se for válido.

ABREDBF("RESPONSA", "RSP")
aTITU := {"NOME", "CPF"              , "POSSE", "SAÍDA"}
aCAMP := {"NOME", "CPF"              , "POSSE", "SAIDA"}
aMASK := {"@!",   "@R 999.999.999-99",        ,        }
aVALID:= {".T.",  "CGC(CPF)"         , ".T."  , ".T."  }

NAVEGAR(02,00,22,79, "RESPONSÁVEL DO SETOR DE LICITAÇÃO PELAS CONTRATAÇÕES DIRETAS",,,;
        aTITU, aCAMP, aMASk, , aVALID)
// Essa função CGC() encontra-se no programa EXTRAS.PRG que acompanha NAVEGAR.PRG

Esse exemplo usa máscaras; VALID; WHEN e rotinas personalizadas:

aTITU := {"CNPJ", "RAZÃO SOCIAL","ITEM/LOTE","CONTRATADO R$", "EMPENHO","ODC/ODS/OS", "No.",;
				"ASSINATURA", "CONTRATO", "VENCIMENTO",  "PUB. EXTRATO"} 
aCAMP := {"CNPJ", "IIF ( EMPTY(CRC->RAZAO), 'NÃO CADASTRADA'+SPACE(26), CRC->RAZAO)",;
                                         "ITEMLOTE", "CONTRATADO", "EMPENHO","TIPO", "CONTRATO", "VIGEINI",  "CTR", "VIGEFIM",     "EXTRATOCTR"}
aMASK := {"@R 99.999.999/9999-99",;
                          "@!S45",                  ,"@E 999,999,999.99","@!",,"@R 999/99",,"@R 999/99",,}
aVALID:= {".T.", ".T."                , ".T.", ".T.", ".T."            ,"TIPOCTR(getactive():buffer)", "CTR(getactive():buffer)", "DATA1(getactive():buffer)", ".T.", "CTOD(getactive():buffer)>=EMP->VIGEINI .OR. EMPTY(CTOD(getactive():buffer)) .OR. EMPTY(EMP->VIGEINI)"              , ".T." }
aWHEN := {".T.", "EMPRESA(CRC->RAZAO)", ".T.", ".T.", EMP->CONTRATADO>0, "EMP->CONTRATADO>0"         , "EMP->CONTRATADO>0"      , "EMP->CONTRATADO>0"        , "EMP->CONTRATADO>0"                                                                                   , "EMP->CONTRATADO>0", "EMP->CONTRATADO>0" }         
abROT := { {|| EMP->(INSPARTS(oTBRX, aCAMP,,, aMASK, aVALID, aTITU, aWHEN, .T. ))} }
NAVEGAR(09,00,22,79, cTITULO,,,;
           aTITU, aCAMP, aMASk,;
           abROT, aVALID, aWHEN,,,.T., aMESSAGE)

Agora vai ficando quente!...

Esse exemplo usa função de inserção personalizada aproveitando a funções de NAVEGAR(). Também usa uma função especial para preencher o campo 'garantia'.

// [...]
aGARANTIAS 	:= {'CAUÇÃO',;
				'FIANÇA BANCÁRIA',;
				'SEGURO GARANTIA'} 
// [...]
// ÍNDICE QUE FILTRA REGISTROS DESSE CONTRATO
SELECT GRT
cRANDOM2  := ALLTRIM(STR(RAN(9999))) // RAN() É UMA FUNÇÃO QUE GERA NÚMEROS ALEATÓRIOS
fINDEX2   := xTEMP+"TEMP" + cRANDOM
INDEX ON RIGHT(CTR,2)+LEFT(CTR,3)+DTOS(EMISSAO) TAG TMP2 TO (fINDEX2);   
      FOR CTR=ALLTRIM(EMP->CTR) ; // FILTRA CONTRATO SELECIONADO (EMP->CTR)
      ADDITIVE TEMPORARY
// [...]
// GARANTIAS
aMESSAGE2 := {"Data de emissão da garantia",;
			  "Modalidades de Garantia válidas: CAUÇÃO, FIANÇA BANCÁRIA ou SEGURO GARANTIA.",;
			  "Valor da garantia",;
			  "Data de início da cobertura da garantia",;
			  "Data do fim da cobertura da garantia";
			  }
aTITU2 := {"EMISSÃO", "MODALIDADE", "R$ VALOR", "INÍCIO", "FIM"}
aCAMP2 := {"EMISSAO", "MODALIDADE", "VALOR"   , "INICIO", "FIM"}
aMASK2 := {         , "@!"        , "@E 999,999,999.99",;
											 ,         ,      ,                                ,            ,              ,          }
aVALID2:= {".T."    ,"getactive():buffer $ aGARANTIAS";
								  , ".T."    ,   ".T." , ".T."}
aWHEN2 := {".T."    ,"GARANTIA(MODALIDADE)";
								  , ".T."    ,   ".T." , ".T."}
bF2PRN  := {|| PRNTA() } // TECLA F2 IMPRIME FICHA DO CONTRATO 

// FUNÇÃO ESPECIAL P/ INSERIR REGISTROS
abROT2  := { {|| INGRT(oTBRX,aCAMP2,aMASK2,aWHEN2,aTITU2,aMESSAGE2, aVALID2)} }  

// CHAMADA DA FUNÇÃO NAVEGAR()
SELECT GRT
NAVEGAR(29,00,39,79, "GARANTIAS DO CONTRATO Nº "+TRANSFORM(cCTR, "@R 999/99"),,,;
		aTITU2, aCAMP2, aMASk2,;
		abROT2, aVALID2, aWHEN2,,bF2PRN,.T., aMESSAGE2)

FUNCTION INGRT(oTBRX,aCAMP,aMASK,aWHEN, aTITU, aMESSAGE, aVALID)
// FUNÇÃO ESPECIAL P/ INSERIR REGISTROS
DBGOBOTTOM()        // MOVE P/ ULTIMA LINHA 
oTBRX:COLPOS := 1   // MOVE P/ PRIMEIRA COLUNA
IF !EMPTY(aMESSAGE)
	MSGM(aMESSAGE[oTBRX:COLPOS]) // FUNÇÃO PARA MOSTRAR MENSAGENS DE PREENCHIMENTO DOS CAMPOS
ENDIF   
oTBRX:ROWPOS := oTBRX:ROWCOUNT   // ULTIMA LINHA DA TABELA  
oTBRX:REFRESHALL()               // BANCO DE DADOS ESTÁ INDEXADO
oTBRX:FORCESTABLE()              // ATUALIZA TBROWSE
oTBRX:CONFIGURE()                // SOLICITA ATUALIZACAO TBROWSE

*** INSERE NOVO REGISTRO EM BRANCO
DBAPPEND() 

// INSERE NÚMERO DO CONTRATO E DATA ATUAL AUTOMATICAMENTE
// NESSE BROWSE SÓ QUEREMOS CADASTRAR GARANTIAS DESSE CONTRATO
// PRECISAMOS INSERÍ-LO PARA QUE ELE APAREÇA, POIS FILTRA O CONTRATO ATUAL NO ARQUIVO DE ÍNDICE (INDEX).
REPLACE CTR     WITH ALLTRIM(EMP->CTR),;
	    EMISSAO WITH DATE()

oTBRX:REFRESHALL()            // BANCO DE DADOS ESTÁ INDEXADO
oTBRX:FORCESTABLE()           // ATUALIZA TBROWSE
oTBRX:CONFIGURE()             // SOLICITA ATUALIZACAO TBROWSE	
		
// ROTINA DE INSERÇÃO DE REGISTROS DA FUNÇÃO NAVEGAR() 
INSERIR(oTBRX,aCAMP,,,aMASK,aVALID,aTITU,aWHEN,.T.,aMESSAGE) // FUNÇÃO DA FUNÇÃO NAVEGAR()

oTBRX:REFRESHCURRENT() // SOLICITA ATUALIZACAO TBROWSE
oTBRX:FORCESTABLE()    // ATUALIZA TBROWSE
RETURN

FUNCTION GARANTIA(cBUFFER)
nRR2 := ROW()+LEN(aGARANTIAS)+2
IF nRR2 > MAXROW()
	nRR2 := ROW()-LEN(aGARANTIAS)-2
ENDIF
SAVE SCREEN TO cTT5
MSGRODA("Tecle [Espaço] e/ou use o cursor ↓ ou ↑ e selecione com ◄┘[Enter]", "W+/BG")
// Observe que @ LISTBOX é um comando do [x]Harbour
@ ROW(),COL()-1,nRR2,COL()+LEN(GRT->MODALIDADE)+1 GET cBUFFER LISTBOX aGARANTIAS;
													COLOR "R/W, N/W, W+/W, W/N, W+/W, W+/W, GR+/W, N/W+";
													DROPDOWN SCROLLBAR
READ
RESTORE SCREEN FROM cTT5
IF UPDATED()
	GRT->(LOCKREG())   // BLOQUEIA O REGISTRO ANTES COMPARTILHADO
	GRT->MODALIDADE := cBUFFER
	GRT->(DBUNLOCK())  // DESBLOQUEIA O REGISTRO
	oTBRX:REFRESHALL() // ATUALIZA TBROWSE
ENDIF
RETURN .F.

Como você pode perceber, o céu é o limite!

Total votes: 0