descobri uma outra causa pra esse problema, e assim, a soluçao tb...
eu trabalho com RDD SixNsx versao 2 com Tags.
vejam como eu faço a abertura dos arquivos de dados:
Código: Selecionar todos
CRIA_REL(INI+"REL")
aIndex:={"PE_TOSA",;
"PE_TOTA",;
"STRZERO(PE_CODI,7)+PE_GRAD+STRZERO(PE_CORA,2)",;
"PE_RDAT",;
"PE_RHIS",;
"PE_DIAS",;
"PE_CODI",;
"PE_NOPR",;
"PE_GRUP",;
"PE_SUBG",;
"PE_COLE",;
"PE_GRAD+STRZERO(PE_CORA,2)",;
"STRZERO(PE_GRUP,4)+STRZERO(PE_TOTA,10,2)",;
"STRZERO(PE_TOTA,10,2)+STRZERO(PE_GRUP,4)"}
"PE_FORN",;
"PE_RCUS+STRZERO(PE_TOTA,10,2)",;
"PE_RORI"}
IF ! Abre(INI+"REL",aIndex,"Relatorio")
RETURN(FALSE)
ENDIF
no codigo acima existem duas chamadas de funcao, uma eh o CRIA_REL() com a estrutura do arquivo de dados, que nao é necessaria no momento, e a segunda é a funçao ABRE(), cujo codigo segue abaixo:
Código: Selecionar todos
******************************
func Abre(cCom,aIndex,cAlias)
******************************
LOCAL cAux:="",temp,f,nEvery
FOR f=1 TO LEN(aIndex)
cAux +=".OR. ! FILE('"+cCom+NTX+"')"
NEXT f
IF EMPTY(cAux)
cAux=".F."
ELSE
cAux=SUBSTR(cAux ,5)
ENDIF
IF USED()
NEW_SELECT()
ENDIF
IF &cAux .OR. indexa .or. legal2=.T.
IF ! USEREDE(cCom+DBF)
mensagem("Arquivo n„o Acess¡vel !!!")
RETURN(.f.)
ENDIF
cAux=STRTRAN(cAux,".OR.",".AND.")
IF &cAux .or. indexa .or. legal2=.T.
PACK
ENDIF
IF ! FILE(cCom+NTX) .OR. indexa .or. LEGAL2=.T.
FOR f=1 TO LEN(aIndex)
aInd=ListAsArray(aIndex[f],";")
IF ! ISFISCAL()
INDEX ON &(aInd[1]) tag (ccom+strzero(F,2)) TO (cCom) eval indexbar() every ROUND(LASTREC()/10,0)
ELSE
INDEX ON &(aInd[1]) tag (ccom+strzero(F,2)) TO (cCom)
ENDIF
NEXT f
ENDIF
ENDIF
IF ! USEREDE(cCom+DBF,cAlias,.F.)
Mensagem(cAlias+" -> Aten‡„o: Arquivo n„o dispon¡vel !!!")
RETURN(.F.)
ENDIF
Set Index TO (cCom+NTX)
ordlistclear()
RETURN(.T.)
ai, o que acontecia para gerar o erro: no começo da funcao ABRE, eu gero um string com os indices do banco de dados para serem abertos, e na hora de jogar essa string no ¯o era quando gerava o erro.
como o rochinha falou agora a pouco, o nome do arquivo tem que ser no formato 8.3, e a linha de ateh 250 caracteres...
no exemplo que eu citei acima, o tamanho da string pra ser colocada no operador ¯o passava dos 250 caracteres, e gerava o erro que me levou a abrir esse topico: &OPERATIO TOO COMPLEX.
o que eu fiz para sanar esse problema foi dividir a funçao CRIA_REL() em partes menores, para nao estourar o tamanho dos 250 caracteres. agora esta tudo tranquilo. segue abaixo o novo formato da funçao:
Código: Selecionar todos
CRIA_REL(INI+"REL")
aIndex:={"PE_TOSA",;
"PE_TOTA",;
"STRZERO(PE_CODI,7)+PE_GRAD+STRZERO(PE_CORA,2)",;
"PE_RDAT",;
"PE_RHIS",;
"PE_DIAS",;
"PE_CODI",;
"PE_NOPR",;
"PE_GRUP",;
"PE_SUBG",;
"PE_COLE",;
"PE_GRAD+STRZERO(PE_CORA,2)",;
"STRZERO(PE_GRUP,4)+STRZERO(PE_TOTA,10,2)",;
"STRZERO(PE_TOTA,10,2)+STRZERO(PE_GRUP,4)"}
IF ! Abre(INI+"REL",aIndex,"Relatorio")
RETURN( FALSE )
ENDIF
CRIA_RE1(INI+"RE1")
aIndex:={"PE_FORN",;
"PE_RCUS+STRZERO(PE_TOTA,10,2)",;
"PE_RORI"}
IF ! Abre(INI+"RE1",aIndex,"Relatorio1")
RETURN( FALSE )
ENDIF
assim funcionou perfeitamente, pois na primeira chamada, nao vai passar o tamanho dos 250 caracteres na linha pra colocar no ¯o, e na segunda chamada, eu crio o restante dos indices...ai fica supimpa!
é isso ai, obrigado pela atençao de todos e ateh a proxima...