На основе класса диалог когда-то делал для себя такой метод
X++:
static container InputBox(container _conFields, caption _caption = "")
{
container ret = conNull();
Dialog dlg = new Dialog();
List listFields = new list(Types::Class);
ListEnumerator enumerator;
int n = conlen(_conFields);
int i;
;
for (i = 1; i <= n; i += 3)
{
listFields.addEnd(
dlg.addFieldValue(
conpeek(_conFields, i),
conpeek(_conFields, i + 1),
conpeek(_conFields, i + 2)));
}
dlg.caption(_caption);
if (dlg.run())
{
enumerator = listFields.getEnumerator();
while (enumerator.moveNext())
{
ret += enumerator.current().value();
}
}
return ret;
}
в переменную _conFields нужно передать сплошным списком тройки параметров такие же как в dialog.addFieldValue: тип, значение по умолчанию, подпись
Пример использования:
X++:
static void Job_TestInputBox(Args _args)
{
FromDate FromDate;
ToDate ToDate;
container con;
;
con = ksm::InputBox([
typeId(FromDate), FromDate, "",
typeId(ToDate), ToDate, ""
], "Caption");
if (con == conNull())
{
// на диалоге пользователь нажал кнопку Отмена
return;
}
[FromDate, ToDate] = con;
info(strfmt("FromDate = %1", FromDate));
info(strfmt("ToDate = %1", ToDate));
//...
}