Criar varios TRadMenu dinamicamente

Bom dia,
Preciso fazer um “Questionario” de perguntas, onde estou buscando as perguntas de um SX5, porem quero fazer com que caso precise adicionar uma nova pergunta, só adicionar no SX5.

Consegui fazer com que na FwDialogModal gere da forma que preciso usando um loop, o TSay vem com as perguntas da forma que preciso e o radios tbm é gerado

Mas a resposta do Radio não esta sendo salvo corretamente, só pega a resposta do ultimo

Esse é o codigo atual;

For nI := 1 To Len(aPergs)
    &(cObjTSay + cValToChar(nI)) := TSay():New(nLinha,005,{||}, oDlgModal:getPanelMain(),,,,,,.T.,,,80,10)
    &(cObjTSay + cValToChar(nI)):SetText(aPergs[nI][1])

    //RADIO
    &(cObjTRad + cValToChar(nI)) := TRadMenu():New( nLinha, 080, aItens,, oDlgModal:getPanelMain(),,,,,,,, 110, 15,,,, .T.,.T.)
    &(cObjTRad + cValToChar(nI)):bSetGet := {|u|Iif (PCount()==0,aPergs[nI][2],aPergs[nI][2]:=u)}
    nLinha+=nSoma
Next

A variavel aPergs é declarada da seguinte forma;

dbSelectArea('SX5');DbSeek(xFilial('SX5')+'XS', .F.)
While SX5->X5_TABELA$'XS'
	Aadd(aPergs, {alltrim(SX5->X5_DESCRI), 0})
	DbSelectArea('SX5')
	DbSkip()
EndDo

o 0 na segunda posição é para que o radios venha desmarcado, quando marco sim ele altera para 1, quando marco não, ele altera para 2,

como eu disse no inicio, na hora de verificar as resposta ele só altera o valor da primeira posição do array mantendo os outros como 0, mesmo marcado na caixa de dialogo

alguem ja precisou fazer algo parecido, ou sabe como contornar isso?

Boa tarde.

Tem que pegar o conteudo da variável que vc está colocando, não sei o que tem no apergs[nI][2], mas tem que ser uma variável e tem que ser o conteudo,

&(cObjTRad + cValToChar(nI)):bSetGet := {|u|Iif (PCount()>0,&(aPergs[nI][2]):=u,&(aPergs[nI][2]))}

Sim eu busco a variavel dessa forma;

for nI := 1 to len(aPergs)
	if aPergs[nI][2] == 2
		Aadd(aRespN, {nI})
	endif
    cObserv +=  aPergs[nI][1]+' ' + Iif(aPergs[nI][2] == 1,'1=SIM', '2=NAO') + '; '  
Next

Com esse trecho eu pego somente as respostas negativas na variavel aRespN[numero da resposta que foi negativa] para fazer o tratamento que preciso

vou dar um exemplo melhor

cria o dialogo
PERGUNTA 1 ( X ) Sim ( ) Não
PERGUNTA 2 ( ) Sim ( X ) Não

quando vou validar as respostas no trecho acima

aPergs chega nessa forma

aPergs[1][1] = PERGUNTA 1
aPergs[1][2] = 2 (ele pega a resposta da ultima pergunta)

aPergs[2][1] = PERGUNTA 2
aPergs[2][2] = 0(padrão do campo, para que o radio venha sem preencher)

Segue tbm meu fonte completo para verificar

Static Function dlgVld()
	Local oDlgModal

	Local aArea     :=  GetArea()
	Local aItens    :=  {'Sim','Não'}
	Local nSoma     :=  020
	Local nLinha    :=  015
	Local nI        :=  1
    Local cObjTSay  := "oSayObj"
    Local cObjTRad  :=  "oRadObj"


	Public aPergs   :=  {}
	dbSelectArea('SX5');DbSeek(xFilial('SX5')+'XS', .F.)
	While SX5->X5_TABELA$'XS'

		Aadd(aPergs, {alltrim(SX5->X5_DESCRI), 0})

		DbSelectArea('SX5')
		DbSkip()
	EndDo

	RestArea(aArea)

	oDlgModal := FwDialogModal():New()
	oDlgModal:SetEscClose(.T.)

	oDlgModal:SetSize(200, 220)

	oDlgModal:SetTitle("Responda a Pesquisa de validação")
	oDlgModal:SetSubTitle("Questionario de Validacao SS - "+TQB->TQB_SOLICI)
	oDlgModal:CreateDialog()
	oDlgModal:addCloseButton(Nil, "Sair")

	oDlgModal:AddButton("Validar", {|| FwMsgRun(Nil, {|| fimValid() , oDlgModal:oOwner:End() }, "Validar", "Processando...")}, "Validar SS", , .T., .F., .T., )
    For nI := 1 To Len(aPergs)
          &(cObjTSay + cValToChar(nI)) := TSay():New(nLinha,005,{||}, oDlgModal:getPanelMain(),,,,,,.T.,,,80,10)
          &(cObjTSay + cValToChar(nI)):SetText(aPergs[nI][1])

    //RADIO
          &(cObjTRad + cValToChar(nI)) := TRadMenu():New( nLinha, 080, aItens,, oDlgModal:getPanelMain(),,,,,,,, 110, 15,,,, .T.,.T.)
          &(cObjTRad + cValToChar(nI)):bSetGet := {|u|Iif (PCount()==0,aPergs[nI][2],aPergs[nI][2]:=u)}
          nLinha+=nSoma
   Next
   nI  := 1

	oDlgModal:Activate()

Return .T.

Static function fimValid()
	Local aArea     :=  GetArea()
	Local aRespN    :=  {}
Local cObserv   :=  ''
	Local cSolici   :=  ''
	Local cAtend    :=  ''
	Local nI        :=  1


	for nI := 1 to len(aPergs)
		if aPergs[nI][2] == 2
			Aadd(aRespN, {nI})
		endif
    cObserv +=  aPergs[nI][1]+' ' + Iif(aPergs[nI][2] == 1,'1=SIM', '2=NAO') + '; '  
	Next...

A continuação é somente as validações que faço