![]() |
#3 |
Участник
|
На сколько я понял, автор попытался с помощью макросов сделать своеобразный конструктор диалогов для запроса у пользователя параметров, которые потом можно использовать в условии 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)); } |
|
|
![]() |
||||
Тема | Ответов | |||
axaptapedia: RunBaseBatch | 0 | |||
axaptapedia: RunBaseBatch | 0 | |||
axaptapedia: Macro | 1 | |||
axaptapedia: Adding only one Dimension in Dialog | 1 | |||
Kashperuk Ivan: 3 Dialog extensions | 4 |
|