Цитата:
Сообщение от
lev
что то я не понял в чем тут прелесть использования макроса?
На сколько я понял, автор попытался с помощью макросов сделать своеобразный конструктор диалогов для запроса у пользователя параметров, которые потом можно использовать в условии where запроса.
Также согласен с вами, что использование QueryRun предпочтительнее.
В свою очередь могу поделиться собстенным инструментом для запроса у пользователя каких-либо параметров. Использую его, когда нужно создать "на лету" простейший диалог, который не может быть связан с каким-либо источником данных.
X++:
static container InputBox(container _conFields, caption _caption = '')
{
Dialog dlg = new Dialog();
container ret = conNull();
int n = conlen(_conFields);
int i;
List listFields = new list(Types::Class);
ListEnumerator enumerator;
;
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;
}
Пример использования статической функции InputBox
X++:
static void JobTestInputBox(Args _args)
{
ItemId ItemId;
fromDate fromDate;
toDate toDate;
container con;
;
// Тройки параметров аналогичны параметрам метода DialogRunbase.addFieldValue(...)
con = InputBox(
[typeid(ItemId), ItemId, '',
typeid(fromDate), fromDate, '',
typeid(toDate), toDate, ''],
'ТЕСТ');
if (con == conNull()) // Пользователь нажал кнопку "Отмена"
{
info('Операция прервана пользователем');
return;
}
[ItemId, fromDate, toDate] = con;
info(strfmt('ItemId: %1', ItemId));
info(strfmt('fromDate: %1', fromDate));
info(strfmt('toDate: %1', toDate));
}