PERGUNTAS E RESPOSTAS
 
Bem Vindo, Visitante  Todos os Fórums
  ADVPL
Enviar para a impressoraImprimir  Enviar e-mail para um amigoEnviar Para um Amigo
Precisa estar Logado

Subject Assunto:
Erro no FOR
Versão:
12.1.27
Plataforma:
Microsoft
Complemento:
DB:
Oracle
Complemento:
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário GUDEFENDI GUDEFENDI em 10/05/2022, 08:46 h
Local: SP  Registro: 10/07/2018  Postagens: 52
Bom dia a todos!

Tenho o fonte abaixo e ele esta dando um erro na parte do FOR (Erro - Variable is not local), mas não consigo encontrar o que pode ser. Podem me ajudar?

***** PARTE COM ERRO DO FOR *****

//Percorre todos os registros encontrados na SX5
For nAtual:= 1 To Len(aDados)
IF ALLTRIM(aDados[nAtual][3]) == "01" //DESENVOLVIMENTO/ARTES
    LOOP
ENDIF
IF (ALLTRIM(aDados[nAtual][3]) == "08" .and. !lQualif) //QUALI DE FORNECEDOR
    LOOP
ENDIF
IF (!(ALLTRIM(aDados[nAtual][3]) $ "03|05") .and. lEspec) .and. !(ALLTRIM(aDados[nAtual][3]) == "08")
    LOOP
ENDIF

//Pega a chave e o conteúdo
_cAprov := aDados[nAtual][4]
RecLock("Z45", .T.)
    Z45->Z45_FILIAL := xFilial("Z44")
    Z45->Z45_IDSDD     := Z44->Z44_IDSDD
    Z45->Z45_STATUS     := ‘1‘ // 1 - AGUARDANDO / 2 - APROVADO / 3 - REPROVADO
    Z45->Z45_DEPTO := _cAprov
MsUnLock()
Next nAtual

*********************************


***** FONTE COMPLETO *****

#INCLUDE "RWMAKE.CH"
#INCLUDE "COLORS.CH"
#INCLUDE "FONT.CH"
#INCLUDE "TOPCONN.CH"
#INCLUDE "PROTHEUS.CH"
#include "TOTVS.CH"

/*/
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ APRTP.PRW - Jose Antonio Defendi - 09/05/2022             º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Rotina SDD TP                                              º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso       ³ Equipe de Comercial                                        º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
/*/

User Function APRTP()

     Local cIdSdd      := Z44->Z44_IDSDD
     Local cAlias      := "Z45"
     Local aCores      := {}
     Local aIndexZ45   := {}
     Local cFiltro     := "Z45_IDSDD==‘"+cValtoChar(cIdSdd)+"‘"

     Private cCadastro := "Analise de Riscos da SDD"

     PRIVATE aRotina   := {{"Pesquisar"    ,"AxPesqui" , 0, 1                },;
                               {"Visualizar" , "AxVisual"        , 0, 2                },;
                               {"Avaliar"    , "U_ALTZ45"        , 0, 4                },;
                               {"Legenda"    , "U_Legsdd"      , 0, 7, 0, .F.      }}       

/*-- CORES DISPONIVEIS PARA LEGENDA --BR_AMARELO BR_AZUL BR_BRANCO BR_CINZA BR_LARANJA BR_MARRON BR_VERDE BR_VERMELHO BR_PINK BR_PRETO*/
     Private bFiltraBrw:= { || FilBrowse(cAlias,@aIndexZ45,@cFiltro) }

     AADD(aCores,{"Z45_STATUS = ‘1‘ ","BR_AZUL"})
     AADD(aCores,{"Z45_STATUS = ‘2‘ ","BR_VERDE"})
     AADD(aCores,{"Z45_STATUS = ‘3‘ ","BR_VERMELHO"})

     Eval( bFiltraBrw ) //Efetiva o Filtro antes da Chamada a mBrowse

     mBrowse( ,,,,cAlias,,,,,,aCores,,,,,,,,)
     //mBrowse(6,1,22,75,cAlias,,,,,,aCores)

EndFilBrw( "Z45" , @aIndexZ45 ) //Finaliza o Filtro

Return NIL

//-----| Funcao: BLegenda - Rotina de Legenda |-----------------------------------------
User Function LEGSDD()

     Local aLegenda := {}

     AADD(aLegenda,{"BR_AZUL"    ,"Pendente" })
     AADD(aLegenda,{"BR_VERDE"   ,"Aprovado" })
     AADD(aLegenda,{"BR_VERMELHO","Reprovado"})

     BrwLegenda(cCadastro, "Legenda", aLegenda)

Return Nil
//************************************************************************************

User Function ALTZ45(cAlias,nReg,nOpc)

     AxAltera( cAlias , nReg , nOpc , , , , , "U_VLDSDD()" , , , , , , , .T. )

Return .T.

//************************************************************************************

User Function dadSdd()

     Local cStat := M->Z45_STATUS
     Local lRet   := .T.

     IF cStat > "1"
          M->Z45_APROV := UPPER(ALLTRIM(USRFULLNAME(RETCODUSR())))
          M->Z45_DTAPRV := dDatabase
     ENDIF


Return lRet
//************************************************************************************
User Function VldSdd()

     Local aArea    := GetArea()
     Local cQuery   := " "
     Local cQuery1 := " "
     Local cQry        := ""
     // Local cStatus := " "
     Local cStatus1 := " "
     Local lQualif := .F.
     Local lEspec   := .F.
     // Local For
     //início inclusão em 18/01 Alessandra Costa CRM
     
     //IF Z45->Z45_STATUS <> "1"
     //IF M->Z45_STATUS == "1" .AND. Z45->Z45_STATUS <> "1" //alterado a linha, pois estava permitindo alterar
     //     ALERT("ESSA ANALISE DE RISCO JÁ FOI APROVADA/REPROVADA!")
     //     Return .F.
     //ENDIF
     
     //Verifica se o campo Observação foi preenchido.
     IF M->Z45_STATUS <> "1"
          IF EMPTY(M->Z45_OBSERV)
               ALERT("OBSERVACAO NAO INFORMADA!")
               Return .F.
          ENDIF

          //Verifica se é depto de Desenvolvimento / Artes
          IF Z45->Z45_DEPTO == ‘DESENVOLVIMENTO / ARTES       ‘

               //verifica qtide de registros na Z45, se for maior que 1, já existe outros itens alem de desenvol/artes
               cQry := "SELECT count(Z45_IDSDD) as qtdreg                      "
               cQry += "FROM "+RetSQLName( "Z45" )+"                          "
               cQry += "WHERE                                                  "
               cQry += "          Z45_IDSDD = ‘"+Z44->Z44_IDSDD+"‘        "
               cQry += "          AND D_E_L_E_T_ = ‘ ‘                             "

               DbUseArea(.T.,"TOPCONN",TcGenQRY(,,cQry),"ctnZ45",.T.,.F.)

               IF !(ctnZ45->(EOF()))
                    IF ctnZ45->qtdreg > 1
                         ctnZ45->(DbCloseArea())
                         RETURN .T.
                    ENDIF
               ENDIF

               ctnZ45->(DbCloseArea())

               //Se for desenvolvimento/artes precisa gerar outros registros da analise de risco
               IF MsgYesNo("Deseja incluir qualificação de fornecedor na aprovação?", "Qualificação fornecedor")
                    lQualif:= .T.
               ENDIF

               IF Z44->Z44_NECEOP == "2" .and. Z44->Z44_AMOSTR == "2"
                    //Se campos acima igual a não, incluir somente QUALIDADE 05, INDUSTRIAL 03 e COMERCIAL 07
                    lEspec:= .T.
               ENDIF

               //Pega todos os registros da tabela ZX
               aDados := FWGetSX5("ZX") //--> XX codigo da tabela criada na SX5

               //Percorre todos os registros encontrados na SX5
               For nAtual:= 1 To Len(aDados)

                    IF ALLTRIM(aDados[nAtual][3]) == "01" //DESENVOLVIMENTO/ARTES
                         LOOP
                    ENDIF

                    IF (ALLTRIM(aDados[nAtual][3]) == "08" .and. !lQualif) //QUALIFICAÇÃO DE FORNECEDOR
                         LOOP
                    ENDIF

                    IF (!(ALLTRIM(aDados[nAtual][3]) $ "03|05") .and. lEspec) .and. !(ALLTRIM(aDados[nAtual][3]) == "08")
                         LOOP
                    ENDIF

                    //Pega a chave e o conteúdo
                    _cAprov := aDados[nAtual][4]

                    //Alert(‘_cAprov: ‘+_cAprov , cTitle)

                    RecLock("Z45", .T.)
                         Z45->Z45_FILIAL := xFilial("Z44")
                         Z45->Z45_IDSDD     := Z44->Z44_IDSDD
                         Z45->Z45_STATUS     := ‘1‘ // 1 - AGUARDANDO / 2 - APROVADO / 3 - REPROVADO
                         Z45->Z45_DEPTO := _cAprov

                    MsUnLock()
               Next nAtual
          ELSE
               cQuery := "SELECT Z45_STATUS                                      "
               cQuery += "FROM "+RetSQLName( "Z45" )+"                          "
               cQuery += "WHERE                                                  "
               cQuery += "          Z45_IDSDD = ‘"+cValtoChar(M->Z45_IDSDD)+"‘        "
               cQuery += "          AND Z45_DEPTO <> ‘"+M->Z45_DEPTO+"‘               "
               cQuery += "          AND Z45_STATUS = ‘1‘                             "
               // cQuery += "          AND ( Z45_STATUS <> ‘2‘ OR Z45_STATUS <> ‘3‘ ) "
               cQuery += "          AND D_E_L_E_T_ = ‘ ‘                             "

               DbUseArea(.T.,"TOPCONN",TcGenQRY(,,cQuery),"TMP",.T.,.F.)

               if TMP->(EOF())
                    RecLock("Z44",.F.)
                         Z44->Z44_STATUS := ‘2‘
                    Z44->(MsUnlock())
               EndIf

               TMP->(DbCloseArea())

          ENDIF

     ENDIF

     RestArea(aArea)

   Return .T.


*********************************

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário ACG1574 ACG1574 em 10/05/2022, 09:24 h
Local: MG  Registro: 28/03/2014  Postagens: 61
voce nao criou a variavel nAtual

Alexandre
Analista de Sistemas

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário CRISTIAM CRISTIAM em 10/05/2022, 09:26 h
Local: SP  Registro: 10/05/2012  Postagens: 157
Bom dia!

Você precisa declarar a variável de controle do seu For...next

No seu caso, nAtual

recomento que você declare-a como local no início da rotina, seu problema estará resolvido.

Para você ter mais informações recomendo que você instale no seu VS Code a Extensão:

--> ProtheusDoc for VsCode (AdvPL)

Assim vc receberá mensagens de alerta e correções mais claras.


Boa sorte :-)

atenciosamente

Cristiam Rossi
ATRIA SOLUÇÕES

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário GUDEFENDI GUDEFENDI em 10/05/2022, 09:45 h
Local: SP  Registro: 10/07/2018  Postagens: 52
Muito obrigado pela ajuda.

Para postar no Fórum você precisa efetuar o seu login ou se registrar

 Mudar para Fórum

 

 

 
 
   
Pagina Principal Shopping PROTHEUS Tire suas duvidas Vagas Microsiga em todo Brasil Aprofunde seus conhecimentos Noticias Online Fale Conosco Pagina Principal