A atribuição do Array está incorreta, possui um Pipe "|" onde não deveria existir.
Acredito que dessa forma funcionará corretamente:
aDate := {Val(cData[1, 2]), Val(cData[4, 2]), Val(cData[7, 4])}
Observação: Necessário avaliar o retorno da função Val nessa situação, pois será retornado um valor numérico e que pode ocasionar problemas em comparações com outras datas.
Para a sua necessidade, acredito que o uso da função ParamBox irá atender e facilitar o seu trabalho.
Ela cria uma tela de parâmetros de acordo com as perguntas passadas, e já possui alguns controles próprios como validação de datas, parâmetros obrigatórios, etc.
User Function XTESTE
If(fGetParams())
// se entrar, é porque os parâmetros digitados obedeceram as regras configuradas
Alert('Data inicial: ' + dToC(MV_PAR01))
Alert('Data final: ' + dToC(MV_PAR02))
Else
// se não, ou o usuário cancelou a tela ou informou parâmetros inválidos
EndIf
Return
Static Function fGetParams
Local aPergs as Array
Local lRet as Logical
aPergs := {}
lRet := .F.
MV_PAR01 := cToD(Space(8))
MV_PAR02 := cToD(Space(8))
aAdd(aPergs, { 1, 'Data inicial de cancelamento' , MV_PAR01, '' , 'NaoVazio()' , '' , '.T.' , 050, .T.})
aAdd(aPergs, { 1, 'Data final de cancelamento' , MV_PAR02, '' , 'NaoVazio()' , '' , '.T.' , 050, .T.})
If(ParamBox(aPergs, 'Parâmetros'))
lRet := .T.
EndIf
Return(lRet)
No exemplo a seguir, a função estática fGetParams possui um retorno lógico, e sempre irá retornar verdadeiro caso o usuário tenha preenchido os dados corretamente.
Usamos as variáveis públicas MV_PAR para preenchimento dos parâmetros que o usuário digitar, e através do array aPergs você consegue adicionar e configurar as perguntas, como nome, tipo, qual variável será preenchida por qual pergunta, validações e obrigatoriedade. Como eu iniciei minhas duas variáveis MV_PAR como Date e em branco, a função ParamBox irá criar dois campos do tipo data que já estarão avaliando se a data que o usuário digitou é válida (impedindo inclusive que ele digite datas que não existam, como 31/02/2023 por exemplo) além de criar um calendário ao lado do campo.
Para maiores informações sobre a função ParamBox: https://terminaldeinformacao.com/knowledgebase/parambox/