SX1 — Perguntas e Pergunte()
Como criar e usar Perguntas (SX1) em rotinas e relatorios. PutSx1, Pergunte, MV_PAR01, ParamBox e alternativas modernas.
"Perguntas" sao grupos de parametros que aparecem antes de relatorios e batches. Sao armazenadas na tabela SX1. Voce define uma vez (PutSx1) e usa nas suas rotinas via Pergunte() que carrega em variaveis MV_PAR01..MV_PARxx.
Criar perguntas — PutSx1
Static Function _CriaSx1()
Local cGrupo := "MEUPAR"
PutSx1(cGrupo, "01", "Cliente de", "Cliente de", "Cliente de", "mv_ch1", ;
"C", 6, 0, 0, "G", "", "SA1", "", "", "MV_PAR01", ;
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
PutSx1(cGrupo, "02", "Cliente ate", "Cliente ate", "Cliente ate", "mv_ch2", ;
"C", 6, 0, 0, "G", "", "SA1", "", "", "MV_PAR02", ;
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
PutSx1(cGrupo, "03", "Data ref", "Data ref", "Data ref", "mv_ch3", ;
"D", 8, 0, 0, "G", "", "", "", "", "MV_PAR03", ;
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
Return
Usar em rotina
User Function RelMeuPar()
Local lOk := .F.
_CriaSx1() // garante que perguntas existem (idempotente)
Pergunte("MEUPAR", .T.) // .T. = mostra dialog; .F. = so carrega
// Agora MV_PAR01..MV_PAR03 estao preenchidos
ConOut("Cliente de: " + MV_PAR01)
ConOut("Cliente ate: " + MV_PAR02)
ConOut("Data ref: " + DToC(MV_PAR03))
Return
Alternativa moderna — ParamBox
ParamBox faz parecido sem precisar de SX1 — bom pra rotina pontual que voce nao quer poluir o cadastro.
Local aParam := {}
aAdd(aParam, {1, "Cliente de", Space(6), "", "", "SA1", "", 50, .F.})
aAdd(aParam, {1, "Cliente ate", Space(6), "", "", "SA1", "", 50, .F.})
aAdd(aParam, {1, "Data ref", dDataBase, "", "", "", "", 50, .F.})
If ParamBox(aParam, "Parametros")
cCliDe := MV_PAR01
cCliAte := MV_PAR02
dRef := MV_PAR03
EndIf
Pegadinhas
- PutSx1 e idempotente — chame antes de Pergunte pra garantir existencia.
- MV_PARxx sao Private — declare Private antes de Pergunte se for usar em sub-funcoes.
- Grupo unico por rotina — varias rotinas com mesmo grupo compartilham MV_PAR.
- Idioma — campo "PerSpa", "PerEng" pra base multi-idioma.