Bem Vindo Visitante Lista de Usuários

 Todos os Fórums
  ADVPL

Enviar para a impressoraImprimir   

Subject Resultado da query vazia
Mensagem do Enviar e-mail Abrir o Perfil do usuário PPATRIOTA PPATRIOTA em 12/26/2018 as 12:47 hs
Local: ce   Registrada: 12/26/2018  Postagem: 2
Bom dia.

Como se pode ver abaixo, é gerada uma QUERY e atribuído a uma MATRIZ "aPag" o resultado da query(Mês, ano, Total).
Na linha do "FOR" subtraio o valor (aPag[3] com o valor do recebimento, só que como o valor do "aPag" está vazio, apresenta o erro: array out of bounds (2 of 1). COMO FAÇO PARA ATRIBUIR AO ARRAY UM VALOR IGUAL A ZERO(0)?

dbUseArea(.T., "TOPCONN", TCGenQry(,,cQueryPag), cQryPag, .T., .T.)
(cQryPag)->(DbGoTop())

While !(cQryPag)->(EOF())
     AADD(aPag,{(cQryPag)->MES,(cQryPag)->Ano,(cQryPag)->TotPag})

(cQryPag)->(dbSkip())
ENDDO     

(cQryPag)->(DbCloseArea())

For i:=1 To Len(aRec)
     nResFin := aRec[3] - aPag[3]

Mensagem do Enviar e-mail Abrir o Perfil do usuário READLESS READLESS em 12/26/2018 as 13:11 hs
Local: SP   Registrada: 11/5/2006  Postagem: 72
PPatriota,

O que você precisa fazer é verificar se existe valor antes de fazer a atribuição, porém ainda tem um erro na sintaxe do seu programa.

Você está usando dados de um array, mas você está passando somente o número da linha, mas é preciso passar também o número da coluna.

Dentro do laço "for" use o aScan para pesquisar o elemento que deseja do array aRec, e caso a posição seja maior que zero você utiliza essa informação para obter o valor. E o mesmo você também pode fazer com o "aPag" porque o uso dele também está errado no seu exemplo.

Exemplo, supondo que você esteja procurando o dado "xxx" dentro de "aRec", e "yyy" dentro de "aPag" seria mais ou menos assim:

For i:=1 To Len(aRec)
   nPos1:= aScan(aRec, { |x| x[1] == "xxx" })
   nPos2:= aScan(aPag, { |x| x[1] == "yyy" })
   If nPos1 > 0 .And. nPos2 > 0
      nResFin := aRec[nPos1,3] - aPag[nPos2,3]
   EndIf
   ....
   ....
Next i

Entendeu?

Abs.

Mensagem do Enviar e-mail Abrir o Perfil do usuário READLESS READLESS em 12/26/2018 as 13:14 hs
Local: SP   Registrada: 11/5/2006  Postagem: 72
Só corrigindo o exemplo da mensagem anterior...

For i:=1 To Len(aRec)
   nPos:= aScan(aPag, { |x| x[1] == "yyy" })
   If nPos > 0
      nResFin := aRec[i,3] - aPag[nPos,3]
   EndIf
   ....
   ....
Next i

Mensagem do Enviar e-mail Abrir o Perfil do usuário PPATRIOTA PPATRIOTA em 12/26/2018 as 16:17 hs
Local: ce   Registrada: 12/26/2018  Postagem: 2
Meu amigo READLESS, muitíssimo obrigado. deu certo!!

Para participar do Fórum você precisa efetuar login primeiro
Caso você não esteja registrado registre-se para participar do fórum

 Mudar para Fórum