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

Veja também