Prezados, tenho um sistema desenvolvido em Clipper com ajuda do Sculptor da empresa Squadr.com.br.
Acontece que a úlitma versão desenvolvida do sculptor foi em 2000.
De lá pra cá meu aplicativo não tenho alterado nada. Agora em 2011, estava numa oficina mecânica e o mecânico insistiu que eu fizesse uma versão do aplicativo q atendesse a sua necessidade.
Então, acrescentei algumas variáveis e uma delas foi uma para a margem de lucro individual no cadastro de cada produto mVP_MARLUC (o arquivo é o DCI10010.DBF) o PRG desse módulo é o PCI10008.PRG. No aplicativo também tem 3 arquivos q o Sculptor gera onde ficam as rotinas básicas (GCI10000.CH, RCI10000.PRG e ROTINAS5.PRG).
Bom, agora toda vez compilo o programa e faço uma consulta no código do produto pra ver se o produto está cadastrado (a tecla q chama o BROWSE é a F4).
* Error base/1132 argument error: array access.
Gostaria q alguém me ajudasse, se pudereem.
lembrando q o arquivo q chama o ROTINAS5.PRG é o PCI10008.PRG.
a função q está com o erro base/1068 ou 1132 é a "function CRIABROWSE..." dentro do ROTINAS5.PRG q é chamada de dentro do PCI10008.PRG
Dentro do ROTINAS5.PRG mudei a cor e negritei exatamente onde está acontecendo o erro.
já os aruivos ROTINAS5 e RCI10000 (PRGs) são mto grandes e ñ cabem aqui... vou apenas colocar a função CRIABROWSE onde acontece o erro em ROTINAS5.PRG, logo abaixo:
Código: Selecionar todos
* ---------------------------- TRATAMENTO DE BROWSE ---------------------------- *
/************************
* Executa browse em um arquivo refente a um campo de um formulario.
*
*************************/
*function CRIABROWSE (VARIAVEL,NOME_ARQUIVO,CABEC_CAMPOS)
* local I := 0,;
* TAM := 0,;
* LINHA1 := 2,;
* COLUNA1 := 1,;
* LINHA2 := 21,;
* COLUNA2 := 76,;
* N_REGISTROS := 18,;
* TECLA := nil,;
* VALOR := nil,;
* SALVA_TELA := nil,;
* SALVA_FILT := dbfilter (),;
* SALVA_IND := len (&(alias ()) [1]) - 1,;
* SALVA_CORR := indexord (),;
* ESTRUTURA := {},;
* S_TEL := '',;
* ARQUIVO := '',;
* oTBCOLUMN := nil
*
* private CABEC := {},;
* iCAMPO := {},;
* fCAMPO := {},;
* cCAMPO := {},;
* COLUNA := {},;
* COL_ATIVA := {},;
* POS_REAL := {},;
* ORDEM_ELIM := {},;
* VET_LIN := {},; // Vetor com posicao das linhas.
* COL_VAL := {},; // Vetor com colunas de valor.
* COL_LEG := 0,; // Coluna da legenda.
* FIM_LOOP := .f.,;
* FIM_BROW := .f.,;
* POS_COL := 1,;
* POS_LIN := 1,;
* N_CONGEL := 0,;
* C_VARIAVEL := 0,;
* EXP_ORDEN := '',;
* CONT := len (&(alias ()) [1]) - 1,;
* TITULO := space (65),;
* SUB_TITULO := space (65),;
* TITULO_Y := space (50)
*
* CABEC := CABEC_CAMPOS
* ESTRUTURA := dbstruct ()
* TAM := 3 * (fcount () - 1) + 3
* for I := 1 to fcount ()
* TAM := TAM + max (len (CABEC_CAMPOS [I]),ESTRUTURA [I,3])
* aadd (COL_ATIVA,1)
* aadd (POS_REAL,I)
* if ESTRUTURA[I,1] == substr(VARIAVEL,2)
* C_VARIAVEL := I
* endif
* next I
* if TAM < (COLUNA2 - COLUNA1 + 1)
* if TAM < len (NOME_ARQUIVO) + 3
* TAM := len (NOME_ARQUIVO) + 3
* endif
* COLUNA1 := COLUNA2 - TAM
* endif
* go top
* LINHA1 := 2
* LINHA2 := 21
* N_REGISTROS := AVANCA_REGISTROS (18)
* if N_REGISTROS < (LINHA2 - LINHA1 - 2)
* LINHA1 := LINHA2 - N_REGISTROS - 3
* endif
* SALVA_TELA := savescreen (LINHA1 - 1,COLUNA1 - 1,LINHA2 + 1,COLUNA2 + 2)
* MOLDURA (LINHA1,COLUNA1,LINHA2,COLUNA2,.f.,NOME_ARQUIVO)
* do while .not. (FIM_LOOP)
* oTBROWSE := tbrowsedb (LINHA1 + 1,COLUNA1 + 1,LINHA2 - 1,COLUNA2 - 1)
* oTBROWSE:colorspec += ',' + COR_FUNDO (N_COR (2)) + '+/' + COR_FUNDO (N_COR (1)) +;
* ',' + COR_FUNDO (N_COR (2)) + '+/' + COR_FUNDO (N_COR (2))
* oTBROWSE:headsep := chr (196) + chr (194) + chr (196)
* oTBROWSE:colsep := chr (32) + chr (179) + chr (32)
* FIM_BROW := .f.
* for I := 1 to fcount ()
* if COL_ATIVA [I] = 1
* if ESTRUTURA [I,2] <> 'M'
* oTBROWSE:addcolumn (tbcolumnnew (CABEC_CAMPOS [I],fieldblock (fieldname (I),select ())))
* else
* oTBROWSE:addcolumn (tbcolumnnew (CABEC_CAMPOS [I],{|| '<MEMO>'}))
* endif
* oTBCOLUMN := oTBROWSE:getcolumn (oTBROWSE:colcount)
* if (POS_REAL [oTBROWSE:colcount] = COL_LEG) .or. (ascan (COL_VAL,POS_REAL [oTBROWSE:colcount]) <> 0)
* oTBCOLUMN:colorblock := {|x| if (ascan (VET_LIN,recno ()) <> 0,{6,7},{1,2})}
* endif
* endif
* next I
* oTBROWSE:gotop ()
* oTBROWSE:freeze := N_CONGEL
* oTBROWSE:colpos := POS_COL
* oTBROWSE:rowpos := POS_LIN
* do while .not. (FIM_BROW)
* do while .not. oTBROWSE:stabilize () // O Objeto deve ser Estabilizado
* enddo
* TECLA := inkey (0)
* POS_COL := oTBROWSE:colpos
* POS_LIN := oTBROWSE:rowpos
* do case
* case TECLA = K_ESC
* FIM_BROW := .t.
* FIM_LOOP := .t.
* case TECLA = K_ENTER
* if ESTRUTURA [POS_REAL [oTBROWSE:colpos],2] <> 'M'
* if C_VARIAVEL = 0
* C_VARIAVEL = POS_REAL [oTBROWSE:colpos]
* endif
* VALOR := eval (fieldblock (fieldname (C_VARIAVEL)))
* FIM_BROW := .t.
* FIM_LOOP := .t.
* do case
* case valtype (VALOR) = 'D'
* VALOR := dtos (VALOR)
* if len (dtoc(date())) = 10
* VALOR := substr (VALOR,7) + substr (VALOR,5,2) + substr (VALOR,1,4)
* else
* VALOR := substr (VALOR,7) + substr (VALOR,5,2) + substr (VALOR,3,2)
* endif
* if set (_SET_CONFIRM)
* keyboard VALOR + chr (K_ENTER)
* else
* keyboard VALOR
* endif
* case valtype (VALOR) = 'N'
* if set (_SET_CONFIRM)
* keyboard strtran (str (VALOR),' ','0') + chr (K_ENTER)
* else
* keyboard strtran (str (VALOR),' ','0')
* endif
* case valtype (VALOR) = 'C'
* for I := 1 to len(ESTRUTURA)
* if (indexord() > 1) .and.;
* (substr(indexkey(indexord()),1,len(ESTRUTURA)) = ESTRUTURA[I,1])
* if ESTRUTURA[I,2] == 'C'
* VALOR := space(01) + VALOR
* endif
* endif
* next I
* if set (_SET_CONFIRM)
* keyboard VALOR + chr (K_ENTER)
* else
* keyboard padr (VALOR,ESTRUTURA [fieldpos (fieldname (C_VARIAVEL)),3])
* endif
* endcase
* else
* VALOR := eval (fieldblock (fieldname (POS_REAL [oTBROWSE:colpos])))
* S_TEL := savescreen (02,01,23,79)
* MOLDURA (02,01,22,77,.f.,'')
* VALOR := memoedit (VALOR,03,02,21,76,.f.)
* restscreen (02,01,23,79,S_TEL)
* endif
* otherwise
* TESTATECLA (oTBROWSE,TECLA)
* endcase
* enddo
* enddo
* set filter to &(SALVA_FILT)
* close index
* for I := SALVA_IND + 1 to CONT
* ARQUIVO := '$$$$$0' + alltrim (str (I,2,0)) + '.NTX'
* delete file (ARQUIVO)
* next I
* asize (&(alias ()) [1],SALVA_IND + 1)
* ATIVA_INDICE (SALVA_IND)
* set order to SALVA_CORR
* restscreen (LINHA1 - 1,COLUNA1 - 1,LINHA2 + 1,COLUNA2 + 2,SALVA_TELA)
*return nil
function CRIABROWSE (VARIAVEL,NOME_PROGRAMA,NOME_ARQUIVO,CAB_CAMPOS,TAM_CAMPOS,MASC_CAMPOS)
memvar COD_ACESSO,;
TEM_SENHA,;
LIN_MENSAGEM
local I := 0,;
N_REGISTROS := 16,;
TECLA := nil,;
VALOR := nil,;
SALVA_FILT := dbfilter (),;
SALVA_IND := len (&(alias ()) [1]) - 1,;
SALVA_ORD := indexord (),;
TEL_AUX := '',;
ARQ_AUX := '',;
oTBCOLUMN := nil,;
TENTATIVAS := 5,;
COMPARTILHADO := .t.,;
EXISTE_ARQ := .t.,;
TENTAT,;
TELA_AUX,;
NOME_CAMPO,;
BLOCO
private iCAMPO := {},;
fCAMPO := {},;
cCAMPO := {},;
COLUNA := {},;
ESTRUTURA := {},;
CABEC_CAMPOS:= CAB_CAMPOS,; // Cabecalho da colunas do browse
POS_REAL := {},; // indica a posicao real do coluna do browse no arquivo de dados
; // mapeamento: Posicao Coluna --> Posicao Estrutura Fisca
ORDEM_ELIM := {{},{}},; // indica a ordem das colunas eliminadas
FILT_AUX := dbfilter (),;
FIM_LOOP := .f.,;
FIM_BROW := .f.,;
POS_COL := 1,; // posicao da coluna corrente no browse ativo
POS_LIN := 1,; // posicao da linha corrente no browse ativo
N_CONGEL := 0,;
C_VARIAVEL := 0,; // posicao da varivel a ser retornada
CONT := len (&(alias ()) [1]) - 1,;
AREA_ARQ := alias(),;
TAM := 0,;
CONTROLE := .F.,;
TITULO_BROW := alltrim(substr(NOME_ARQUIVO,1,30)),; // titulo do browse corrente,;
SALVA_TELA := nil,;
LINHA1 := 2,; // linha superior do browse
COLUNA1 := 1,; // coluna mais a esquerada do browse
LINHA2 := 21,; // linha inferior do browse
COLUNA2 := 76,; // coluna mais a direita do browse
oTBROWSE,;
; // variaveis utilizadas pelo modulo de grafico:
VET_LIN := {},; // Vetor com posicao das linhas.
COL_VAL := {},; // Vetor com colunas de valor.
COL_LEG := 0,; // Coluna da legenda.
TITULO := space (65),;
SUB_TITULO := space (65),;
TITULO_Y := space (50)
Private ARQ_BROW := {{{'BROWSE',;
'Arquivo de Browse do Sistema',;
'BROWSE.DBF'},;
{'BROWSE',;
'BROWARQ+BROWTITULO',;
'BROW001.NTX'},;
{'BROWSE',;
'BROWARQ+BROWTIPO+STR(BROWCODACE,5)',;
'BROW002.NTX'}},;
{'BROWARQ', 'C', 8,0},;
{'BROWTITULO', 'C', 30,0},;
{'BROWFILCOL', 'C', 60,0},;
{'BROWFILINI', 'C', 256,0},;
{'BROWFILFIN', 'C', 256,0},;
{'BROWFILCON', 'C', 256,0},;
{'BROWSETORD', 'N', 2,0},;
{'BROWCOLATV', 'C', 200,0},;
{'BROWCOLELM', 'C', 200,0},;
{'BROWCOLCOR', 'N', 2,0},;
{'BROWFIXA', 'N', 2,0},;
{'BROWTIPO', 'C', 1,0},;
{'BROWL1', 'N', 2,0},;
{'BROWC1', 'N', 2,0},;
{'BROWL2', 'N', 2,0},;
{'BROWC2', 'N', 2,0},;
{'BROWREGCOR', 'N', 9,0},;
{'BROWCODACE', 'N', 5,0}}
*?VARIAVEL,NOME_PROGRAMA,NOME_ARQUIVO,CAB_CAMPOS,TAM_CAMPOS,MASC_CAMPOS // linhas provisórias pra descobrir error base/1132 array access
*INKEY(0) // linhas provisórias pra descobrir error base/1132 array access
ESTRUTURA := dbstruct ()
POS_REAL := array(fcount())
TAM := 3 * fcount ()
? "ESTRUTURA",ESTRUTURA, "POS_REAL",POS_REAL,"TAM",TAM
inkey(0)
//criando arquivo BROWSE.DBF
if !file(ARQ_BROW[1,1,3])
EXISTE_ARQ:=.f.
ARQ_AUX:=aclone(ARQ_BROW)
ARQ_AUX := adel (ARQ_AUX,1)
ARQ_AUX := asize (ARQ_AUX,len (ARQ_AUX) - 1)
dbcreate (ARQ_BROW[1,1,3],ARQ_AUX)
endif
//criando indices do arquivo BROWSE.DBF
for I:=2 to len(ARQ_BROW[1])
if !file(ARQ_BROW[1,I,3]) .or. !EXISTE_ARQ
use (ARQ_BROW[1,1,3]) alias (ARQ_BROW[1,1,1]) new
if neterr ()
TELA_AUX := savescreen(LIN_MENSAGEM,0,LIN_MENSAGEM,79)
MENSAGEM('Sobrecarga na rede. N„o foi poss¡vel acessar a consulta.')
inkey(0)
restscreen(LIN_MENSAGEM,0,LIN_MENSAGEM,79,TELA_AUX)
return nil
endif
index on &(ARQ_BROW[1,I,2]) to (ARQ_BROW[1,I,3])
close
endif
next
ABRE_ARQUIVO (ARQ_BROW,'TODOS',COMPARTILHADO,TENTATIVAS)
//>> Restaurando configuracao do browse
select(ARQ_BROW[1,1,1])
set order to 1
if TEM_SENHA
set filter to BROWSE->BROWTIPO == "F" .AND. BROWSE->BROWCODACE == COD_ACESSO
else
set filter to BROWSE->BROWTIPO == "F"
endif
seek(MASC(AREA_ARQ,8)+NOME_PROGRAMA+VARIAVEL)
if !(alltrim(BROWSE->BROWTITULO) == alltrim(NOME_PROGRAMA+VARIAVEL))
if INCLUI (TENTATIVAS) .AND. TRAVADO (TENTATIVAS)
select(AREA_ARQ)
BROWSE->BROWARQ := AREA_ARQ
BROWSE->BROWTIPO := "F"
BROWSE->BROWTITULO := NOME_PROGRAMA+VARIAVEL
BROWSE->BROWSETORD := indexord()
BROWSE->BROWCOLCOR := 1
BROWSE->BROWFIXA := 0
BROWSE->BROWREGCOR := 1
for I := 1 to fcount ()
TAM := TAM + max (len (CABEC_CAMPOS [I]),ESTRUTURA [I,3])
BROWSE->BROWCOLATV := alltrim(BROWSE->BROWCOLATV)+;
alltrim(str(I)) +";"
next I
//>> Faz o calculo de onde sera posicionado o browse
if TAM < (COLUNA2 - COLUNA1 + 1)
if TAM < len (TITULO_BROW) + 3
TAM := len (TITULO_BROW) + 3
endif
COLUNA1 := COLUNA2 - TAM
endif
go top
N_REGISTROS := AVANCA_REGISTROS (16)
if N_REGISTROS < (LINHA2 - LINHA1 - 4)
LINHA1 := LINHA2 - N_REGISTROS - 5
endif
BROWSE->BROWL1 := LINHA1
BROWSE->BROWC1 := COLUNA1
BROWSE->BROWL2 := LINHA2
BROWSE->BROWC2 := COLUNA2
if TEM_SENHA
BROWSE->BROWCODACE := COD_ACESSO
else
BROWSE->BROWCODACE := 0
endif
select(ARQ_BROW[1,1,1])
unlock
select(AREA_ARQ)
go top
else
TELA_AUX := savescreen(LIN_MENSAGEM,0,LIN_MENSAGEM,79)
MENSAGEM('Sobrecarga na rede. N„o foi poss¡vel acessar a consulta.')
inkey(0)
restscreen(LIN_MENSAGEM,0,LIN_MENSAGEM,79,TELA_AUX)
return nil
endif
endif
//<<
TITULO_BROW := alltrim(substr(NOME_ARQUIVO,1,30))
CARREGA_BROWSE()
//>>calculando altura da janela do browse
SELECT(AREA_ARQ)
go top
N_REGISTROS := AVANCA_REGISTROS (16)
if N_REGISTROS < (LINHA2 - LINHA1 - 4)
LINHA1 := LINHA2 - N_REGISTROS - 5
endif
//<<
select(ARQ_BROW[1,1,1])
COLUNA1 := BROWSE->BROWC1
COLUNA2 := BROWSE->BROWC2
select(AREA_ARQ)
go top
for I := 1 to fcount ()
if ESTRUTURA[I,1] == substr(VARIAVEL,2)
C_VARIAVEL := I
endif
next
do while .not. (FIM_LOOP)
SALVA_TELA := savescreen (LINHA1 - 1,COLUNA1 - 1,LINHA2 + 1,COLUNA2 + 2)
MOLDURA (LINHA1,COLUNA1,LINHA2,COLUNA2,.f.,TITULO_BROW)
// Monta o objeto TBrowse
oTBROWSE := tbrowsedb (LINHA1 + 1,COLUNA1 + 1,LINHA2 - 1,COLUNA2 - 1)
oTBROWSE:colorspec += ',' + COR_FUNDO (N_COR (2)) + '+/' + COR_FUNDO (N_COR (1)) +;
',' + COR_FUNDO (N_COR (2)) + '+/' + COR_FUNDO (N_COR (2))
oTBROWSE:headsep := chr (196) + chr (194) + chr (196)
oTBROWSE:colsep := chr (32) + chr (179) + chr (32)
oTBROWSE:footsep := chr (196) + chr (193) + chr (196)
FIM_BROW := .f.
// adiciona colunas a browse
for I := 1 to LEN(POS_REAL)-LEN(ORDEM_ELIM[1])
if ESTRUTURA [I,2] <> 'M'
? "I",I,"LEN(POS_REAL)",LEN(POS_REAL),"LEN(ORDEM_ELIM[1])",LEN(ORDEM_ELIM[1]) // linhas provisórias pra descobrir error base/1132 array access
? "ESTRUTURA [I,2]",ESTRUTURA [I,2] // linhas provisórias pra descobrir error base/1132 array access
? "MASC_CAMPOS[POS_REAL[I]]",MASC_CAMPOS[POS_REAL[I]] // linhas provisórias pra descobrir error base/1132 array access
INKEY(0) // linhas provisórias pra descobrir error base/1132 array access
if empty(MASC_CAMPOS[POS_REAL[I]])
oTBROWSE:addcolumn (tbcolumnnew (CABEC_CAMPOS [POS_REAL[I]],fieldblock (fieldname (POS_REAL[I]) )))
else
NOME_CAMPO := fieldname (POS_REAL[I])
BLOCO := "{|XX|transform(if(XX==NIL,"+NOME_CAMPO+","+NOME_CAMPO+":= XX),'"+MASC_CAMPOS[POS_REAL[I]]+"')}"
oTBROWSE:addcolumn (tbcolumnnew (CABEC_CAMPOS [POS_REAL[I]],&(BLOCO) ))
endif
else
oTBROWSE:addcolumn (tbcolumnnew (CABEC_CAMPOS [POS_REAL[I]],{|| '<MEMO>'}))
endif
oTBCOLUMN := oTBROWSE:getcolumn (oTBROWSE:colcount)
oTBCOLUMN:cargo := array (3)
oTBCOLUMN:Cargo[COL_TAMREL] := TAM_CAMPOS[POS_REAL[I]]
oTBCOLUMN:Cargo[COL_MASC ] := MASC_CAMPOS[POS_REAL[I]]
oTBCOLUMN:Cargo[COL_EXP ] := fieldname (POS_REAL[I])
next I
for I := 1 to len(ORDEM_ELIM[1])
if ESTRUTURA [ORDEM_ELIM[1,I],2] <> 'M'
if empty(MASC_CAMPOS[ORDEM_ELIM[1,I]])
oTBCOLUMN := tbcolumnnew (CABEC_CAMPOS [ORDEM_ELIM[1,I]],fieldblock (fieldname (ORDEM_ELIM[1,I]) ))
else
NOME_CAMPO := fieldname (ORDEM_ELIM[1,I])
BLOCO := "{|XX|transform(if(XX==NIL,"+NOME_CAMPO+","+NOME_CAMPO+":= XX),'"+MASC_CAMPOS[ORDEM_ELIM[1,I]]+"')}"
oTBCOLUMN := tbcolumnnew (CABEC_CAMPOS [ORDEM_ELIM[1,I]],&(BLOCO) )
endif
else
oTBCOLUMN := tbcolumnnew (CABEC_CAMPOS [ORDEM_ELIM[1,I]],{|| '<MEMO>'})
endif
aadd(ORDEM_ELIM[2],oTBCOLUMN)
oTBCOLUMN:cargo := array (3)
oTBCOLUMN:footsep := chr (196) + chr (193) + chr (196)
oTBCOLUMN:Cargo[COL_TAMREL] := TAM_CAMPOS[ORDEM_ELIM[1,I]]
oTBCOLUMN:Cargo[COL_MASC ] := MASC_CAMPOS[ORDEM_ELIM[1,I]]
oTBCOLUMN:Cargo[COL_EXP ] := fieldname (ORDEM_ELIM[1,I])
next I
oTBROWSE:freeze := N_CONGEL
oTBROWSE:colpos := POS_COL
oTBROWSE:rowpos := POS_LIN
STATUS_RODAPE()
//>> Exibicao e ativacao do browse
do while .not. (FIM_BROW)
do while .not. oTBROWSE:stabilize () // O Objeto deve ser Estabilizado
enddo
TECLA := inkey (0)
POS_COL := oTBROWSE:colpos
POS_LIN := oTBROWSE:rowpos
do case
case TECLA = K_ESC
FIM_BROW := .t.
FIM_LOOP := .t.
case TECLA = K_ENTER
if ESTRUTURA [POS_REAL [oTBROWSE:colpos],2] <> 'M'
if C_VARIAVEL = 0
C_VARIAVEL = POS_REAL [oTBROWSE:colpos]
endif
VALOR := eval (fieldblock (fieldname (C_VARIAVEL)))
FIM_BROW := .t.
FIM_LOOP := .t.
do case
case valtype (VALOR) = 'D'
VALOR := dtos (VALOR)
if len (dtoc(date())) = 10
VALOR := substr (VALOR,7) + substr (VALOR,5,2) + substr (VALOR,1,4)
else
VALOR := substr (VALOR,7) + substr (VALOR,5,2) + substr (VALOR,3,2)
endif
if set (_SET_CONFIRM)
keyboard VALOR + chr (K_ENTER)
else
keyboard VALOR
endif
case valtype (VALOR) = 'N'
if set (_SET_CONFIRM)
keyboard strtran (str (VALOR),' ','0') + chr (K_ENTER)
else
keyboard strtran (str (VALOR),' ','0')
endif
case valtype (VALOR) = 'C'
if set (_SET_CONFIRM)
if alias()='DCI10024' // Linhas acrescentadas por
mEDTIPO :=DCI10024->EDTIPO // Walcledson em 09/07/2001
mEDLOGRADO:=DCI10024->EDLOGRADO // para que o BROWSE pudes-
mEDBAIRRO :=DCI10024->EDBAIRRO // atualizar o Endere‡o do
mNUCEP :=DCI10024->NUCEP // Cliente, se a rua/ave de
mEDCIDADE :=DCI10024->EDCIDADE // sua residˆncia tiver +
mEDUF :=DCI10024->EDUF // de um CEP/BAIRRO/etc.,
endif // sem essas linhas nÆo funciona corretamente o cadastro de endere‡os.
keyboard VALOR + chr (K_ENTER)
else
if alias()='DCI10024' // Linhas acrescentadas por
mEDTIPO :=DCI10024->EDTIPO // Walcledson em 09/07/2001
mEDLOGRADO:=DCI10024->EDLOGRADO // para que o BROWSE pudes-
mEDBAIRRO :=DCI10024->EDBAIRRO // atualizar o Endere‡o do
mNUCEP :=DCI10024->NUCEP // Cliente, se a rua/ave de
mEDCIDADE :=DCI10024->EDCIDADE // sua residˆncia tiver +
mEDUF :=DCI10024->EDUF // de um CEP/BAIRRO/etc.,
endif // sem essas linhas nÆo funciona corretamente o cadastro de endere‡os.
keyboard padr (VALOR,ESTRUTURA [fieldpos (fieldname (C_VARIAVEL)),3])
endif
endcase
else
VALOR := eval (fieldblock (fieldname (POS_REAL [oTBROWSE:colpos])))
TEL_AUX := savescreen (02,01,23,79)
MOLDURA (02,01,22,77,.f.,'')
VALOR := memoedit (VALOR,03,02,21,76,.f.)
restscreen (02,01,23,79,TEL_AUX)
endif
otherwise
TESTATECLA (TECLA)
endcase
enddo
enddo
//>>Salvar Browse
select(ARQ_BROW[1,1,1])
set order to 1
if TEM_SENHA
set filter to BROWSE->BROWTIPO == "F" .AND. BROWSE->BROWCODACE == COD_ACESSO
else
set filter to BROWSE->BROWTIPO == "F"
endif
if TRAVADO(TENTATIVAS)
SALVA_BROWSE()
unlock
else
TELA_AUX := savescreen(LIN_MENSAGEM,0,LIN_MENSAGEM,79)
MENSAGEM('Sobrecarga na rede. N„o foi poss¡vel salvar a consulta.')
inkey(0)
restscreen(LIN_MENSAGEM,0,LIN_MENSAGEM,79,TELA_AUX)
endif
select(ARQ_BROW[1,1,1])
CLOSE
//<<
select(AREA_ARQ)
set filter to &(SALVA_FILT)
close index
for I := SALVA_IND + 1 to CONT
ARQ_AUX := '$$$$$0' + alltrim (str (I,2,0)) + '.NTX'
delete file (ARQ_AUX)
next I
asize (&(alias ()) [1],SALVA_IND + 1)
ATIVA_INDICE (SALVA_IND)
set order to SALVA_ORD
restscreen (LINHA1 - 1,COLUNA1 - 1,LINHA2 + 1,COLUNA2 + 2,SALVA_TELA)
return nil
/*************************
* Ativa um menu de browses disponiveis, relativo ao usuario ativo
* (caso haja controle de acesso atraves de senha), para um determinado
* arquivo da area corrente.
*
*************************/
function BROWSE_ARQ (CAB_CAMPOS,TAM_CAMPOS,MASC_CAMPOS)
memvar COD_ACESSO,TEM_SENHA
local OPCOES := {},;
SALVA_FILT := dbfilter (),;
SALVA_IND := len (&(alias ()) [1]) - 1,;
SALVA_ORD := indexord (),;
I,;
L1:=2,;
C1:=1,;
L2:=21,;
C2:=76,;
TITULO_MENU,;
LARG_MENU := 0,;
OP_ESCOLHIDA:=1,;
N_REG,;
TELA_AUX,;
TELA_SALVA,;
SALVA_INTENSIDADE:=set(_SET_INTENSITY,.t.),;
TAM,;
ARQ_AUX,;
EXISTE_ARQ:=.t.,;
COMPARTILHADO:=.t.,;
TENTATIVAS:=5,;
AREA_ARQ:=alias(),;
ESTRUTURA,;
N_REGISTROS:=16
Private CONT := len (&(alias ()) [1]) - 1
Private ARQ_BROW := {{{'BROWSE',;
'Arquivo de Browse do Sistema',;
'BROWSE.DBF'},;
{'BROWSE',;
'BROWARQ+BROWTITULO',;
'BROWSE.NTX'}},;
{'BROWARQ', 'C', 8,0},;
{'BROWTITULO', 'C', 30,0},;
{'BROWFILCOL', 'C', 60,0},;
{'BROWFILINI', 'C', 256,0},;
{'BROWFILFIN', 'C', 256,0},;
{'BROWFILCON', 'C', 256,0},;
{'BROWSETORD', 'N', 2,0},;
{'BROWCOLATV', 'C', 200,0},;
{'BROWCOLELM', 'C', 200,0},;
{'BROWCOLCOR', 'N', 2,0},;
{'BROWFIXA', 'N', 2,0},;
{'BROWTIPO', 'C', 1,0},;
{'BROWL1', 'N', 2,0},;
{'BROWC1', 'N', 2,0},;
{'BROWL2', 'N', 2,0},;
{'BROWC2', 'N', 2,0},;
{'BROWREGCOR', 'N', 9,0},;
{'BROWCODACE', 'N', 5,0}}
ESTRUTURA := dbstruct ()
TAM := 3 * fcount()
//criando arquivo BROWSE.DBF
if !file(ARQ_BROW[1,1,3])
EXISTE_ARQ:=.f.
ARQ_AUX:=aclone(ARQ_BROW)
ARQ_AUX := adel (ARQ_AUX,1)
ARQ_AUX := asize (ARQ_AUX,len (ARQ_AUX) - 1)
dbcreate (ARQ_BROW[1,1,3],ARQ_AUX)
endif
//criando indices do arquivo BROWSE.DBF
for I:=2 to len(ARQ_BROW[1])
if !file(ARQ_BROW[1,I,3]) .or. !EXISTE_ARQ
use (ARQ_BROW[1,1,3]) alias (ARQ_BROW[1,1,1]) shared new
if neterr ()
CANCELA_EXECUCAO ('Erro de Abertura ' + ARQ_BROW[1,1,3] + ' - Arquivo nao compartilhado')
endif
index on &(ARQ_BROW[1,I,2]) to (ARQ_BROW[1,I,3])
close
endif
next
ABRE_ARQUIVO (ARQ_BROW,'TODOS',COMPARTILHADO,TENTATIVAS)
//>> Restaurando configuracao do ultimo browse de arquivo chamado
select(ARQ_BROW[1,1,1])
set order to 1
if TEM_SENHA
set filter to BROWSE->BROWTIPO == "A" .and.;
(BROWSE->BROWCODACE == COD_ACESSO .or. BROWSE->BROWCODACE == 0)
else
set filter to BROWSE->BROWTIPO == "A"
endif
seek(AREA_ARQ)
if !(alltrim(BROWSE->BROWARQ) == alltrim(AREA_ARQ))
if INCLUI (TENTATIVAS) .AND. TRAVADO (TENTATIVAS)
select(AREA_ARQ)
BROWSE->BROWARQ := AREA_ARQ
BROWSE->BROWTIPO := "A"
BROWSE->BROWTITULO := alltrim(&(AREA_ARQ)[1,1,2])
BROWSE->BROWSETORD := indexord()
BROWSE->BROWCOLCOR := 1
BROWSE->BROWFIXA := 0
BROWSE->BROWREGCOR := 1
for I := 1 to fcount ()
TAM := TAM + max (len (CAB_CAMPOS [I]),ESTRUTURA [I,3])
BROWSE->BROWCOLATV := alltrim(BROWSE->BROWCOLATV)+;
alltrim(str(I)) +";"
next I
//>> Faz o calculo de onde sera posicionado o browse
if TAM < (C2 - C1 + 1)
if TAM < len (BROWSE->BROWTITULO) + 3
TAM := len (BROWSE->BROWTITULO) + 3
endif
C1 := C2 - TAM
endif
L1 := 2
L2 := 21
N_REGISTROS := AVANCA_REGISTROS (16)
if N_REGISTROS < (L2 - L1 - 4)
L1 := L2 - N_REGISTROS - 5
endif
BROWSE->BROWL1 := L1
BROWSE->BROWC1 := C1
BROWSE->BROWL2 := L2
BROWSE->BROWC2 := C2
go top
else
TELA_AUX := savescreen(22,0,22,79)
MENSAGEM('Sobrecarga na rede. N„o foi poss¡vel acessar a consulta.')
inkey(0)
restscreen(22,0,22,79,TELA_AUX)
return nil
endif
//<<
endif
while OP_ESCOLHIDA != 0
select(ARQ_BROW[1,1,1])
N_REG:=recno()
go top
set order to 1
seek(AREA_ARQ)
TITULO_MENU := "Consultas Dispon¡veis"
LARG_MENU := len(TITULO_MENU)
OPCOES:={}
while BROWSE->BROWARQ == AREA_ARQ .and. !eof()
aadd(OPCOES,ALLTRIM(BROWSE->BROWTITULO))
LARG_MENU := max (LARG_MENU,len (BROWSE->BROWTITULO))
skip
enddo
// exibir browses disponiveis
if len(OPCOES) != 0
L1 := 5
C1 := 6
L2 := L1 + iif(len(OPCOES)<= 19-L1,len(OPCOES),19-L1) - 1
C2 := C1 + LARG_MENU
TELA_SALVA := savescreen(L1-1,C1-1,L2+2,C2+3)
MOLDURA (L1-1,C1-1,L2+1,C2+1,.f.,ALLTRIM(TITULO_MENU))
OP_ESCOLHIDA := achoice(L1,C1,L2,C2,OPCOES,,OP_ESCOLHIDA)
go N_REG
if OP_ESCOLHIDA <> 0
seek(MASC(AREA_ARQ,8)+MASC(OPCOES[OP_ESCOLHIDA],30))
select(AREA_ARQ)
CRIABROWARQ(CAB_CAMPOS,TAM_CAMPOS,MASC_CAMPOS)
endif
restscreen(L1-1,C1-1,L2+2,C2+3,TELA_SALVA)
else
go N_REG
TELA_AUX := savescreen(22,0,22,79)
MENSAGEM('N„o h consultas dispon¡veis.')
inkey(0)
restscreen(22,0,22,79,TELA_AUX)
OP_ESCOLHIDA:=0
endif
enddo
set(_SET_INTENSITY,SALVA_INTENSIDADE)
select(ARQ_BROW[1,1,1])
set filter to
CLOSE
select(AREA_ARQ)
set filter to &(SALVA_FILT)
close index
for I := SALVA_IND + 1 to CONT
ARQ_AUX := '$$$$$0' + alltrim (str (I,2,0)) + '.NTX'
delete file (ARQ_AUX)
next I
asize (&(alias ()) [1],SALVA_IND + 1)
ATIVA_INDICE (SALVA_IND)
set order to SALVA_ORD
return nil
========= fim de parte do arquivo ROTINAS5.PRG