#INCLUDE 'TOTVS.ch' //--------------------------------------------------------------------- /*/{Protheus.doc} NGRETCPEMP Retorna conteudo de algum arquivo do dicionario @param cArquivo, Caracter, Arquivo do dicionario a pesquisar @param nOrdem , Numérico, Ordem para pesquisa no dicionario @param cCampo , Caracter, Campo para retorno @param cChave , Caracter, Chave a pesquisar no dicionario @param cEmp , Caracter, Empresa a pesquisar @param lLang , Lógico , Valida o Campo conforme linguagem (default = .T.) @return cRetorno, Caracter, Retorna o arquivo do dicionário. /*/ //--------------------------------------------------------------------- User Function NGSX1ORDEM(cParDe,nCnt,cGrupo,lInc) //+-----------------------------------------------------------------------+ //| não deve ser alterado dicionário via aplicação, apos garantir que tal | //| prática não ocorre mais, deverá ser removida esta função | //+-----------------------------------------------------------------------+ Local nX , nPos //Controle de For###Controle do Valid Local cCH , cOrdem, cNewPar, cValid //Novo MV_CH###Nova Ordem###Novo MV_PAR###Antigo Valid Local cTemp, cVar , cOldOrdem, cPar//Temporário para alteração de valid###Número tempo apra alteração do MV_PAR no valid###Antiga Ordem###Novo parâmetro Local nDe := 0 //Variável que indica de quando começa o For Local nAte := Val(cParDe) //Variável que indica até onde vai o For Local cNewValid := "" //Novo valid Local cOpe := "+" //Indica o operador de incremento/decrescer Local aGRUPO := {"1","2","3","4","5","6","7","8","9","A","B","C","D","E","F",; "G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U",; "V","W","Y","Z"} //Posições utilizadas na criação do MV_CH Default lInc := .T. //Caso lInc seja null irá sempre incrementar cGrupo := PADR(cGrupo,Len(SX1->X1_GRUPO))//Caso venha sem espaços //Por padrão o sentido do FOR será do último do grupo de SX1 até o estipulado no parâmetro cParDe If !lInc //Quando for decrescer o sentido do FOR irá mudar, fazendo com que ele comece pelo parâmetro informando, indo até o último do grupo cOpe := "-" nDe := Val(cParDe) nAte := 0 If Val(cParDe) == 1 //Caso for a ordem '01' não decresce Return .F. Else dbSelectArea("SX1") dbSetOrder(1) If dbSeek(cGrupo + StrZero(cValToChar(Val(cParDe) - 1))) //Caso a pergunta com ordem logo acima da seleciona existir, não decresce Return .F. Endif Endif Endif dbSelectArea("SX1") dbSetOrder(1) If dbSeek(cGrupo) //Localiza última variável do grupo While !Eof() .and. AllTrim(SX1->X1_GRUPO) = AllTrim(cGrupo) cDe := SubStr(SX1->X1_VAR01,7,2) dbSkip() End If lInc //Caso for incremento, começa da última varia´vel do grupo nDe := Val(cDe) Else //Caso for decrescer, termina na última varia´vel do grupo nAte := Val(cDe) Endif nX := nDe While .T. cNewValid := "" If lInc .and. nX < nAte//Caso seja incremento, verifica se o contador atual é menor que o até Exit Elseif !lInc .and. nX > nAte//Caso seja decrescente, verifica se o contador atual é maior que o até Exit Endif cCH := "MV_CH" + aGRUPO[&(cValToChar(nX) + cOpe + cValToChar(nCnt))] //Localiza no array aGrupo a string correspondente a posição cOldOrdem := StrZero(nX,2) //Salva a ordem conforme nX cOrdem := StrZero(&(cValToChar(nX) + cOpe + cValToChar(nCnt)),2) //Gera a nova ordem de acordo com o operador cNewPar := "MV_PAR" + PADL(cValToChar(&(cValToChar(nX) + cOpe + cValToChar(nCnt))),2,"0") //Gera o novo parâmetro de acordo com o operador (MV_PAR) dbSelectArea("SX1") dbSetOrder(1) dbSeek(cGrupo + cOldOrdem) cValid := SX1->X1_VALID //Salva o Valid no SX1 correspondente If "MV_PAR" $ Upper(cValid) //Caso tenha algum MV_PAR na string do valid, faz o tratamento para alterar também While !Empty(cValid) nPos := At("MV_PAR",Upper(cValid)) //Localiza primeira posição na string onde apareça 'MV_PAR' cTemp := SubStr(cValid,1,nPos - 1) //Salva a string anterior a posição do 'MV_PAR' cVar := SubStr(cValid,nPos + 6,2) //Localiza o valor da variável logo apos o 'MV_PAR' cPar := "MV_PAR" + StrZero(&(cVar + cOpe + cValToChar(nCnt)),2)//Concatena a string 'MV_PAR' com o novo valor de variável cNewValid += cTemp + cPar //Concatena a string salva com a variável, juntamento com o valor de valid já existente cValid := SubStr(cValid,nPos + 8) //Deixa na variável cValid apenas o resto após o 'MV_PAR'+variável If !("MV_PAR" $ Upper(cValid)) //Caso não exista mais a string 'MV_PAR' no restante do valid salvo, zera a variável cValid e contatena com o novo valid cNewValid += cValid cValid := "" Endif End Else //Caso não possua 'MV_PAR' em sua estrutura, apenas salva o valid cNewValid := cValid Endif dbSelectArea("SX1") dbSetOrder(1) If dbSeek(cGrupo + cOldOrdem) //Apenas realiza as alterações necessárias na pergunta RecLock("SX1",.F.) SX1->X1_ORDEM := cOrdem SX1->X1_VAR01 := cNewPar SX1->X1_VARIAVL := cCH SX1->X1_VALID := cNewValid MsUnLock() Else If dbSeek(cGrupo + cOrdem) RecLock("SX1",.F.) dbDelete() MsUnLock() Endif Endif If lInc//Caso seja incremento, retorna 1 no contador nX-- Else//Caso seja decrescente, adiciona 1 no contador nX++ Endif End Endif Return .T.