Показать сообщение отдельно
Старый 03.09.2014, 22:25   #1  
kitty is offline
kitty
Участник
 
354 / 26 (1) +++
Регистрация: 24.05.2005
Как класс->запрос->форма. Как такое создать?
Задание:
1) Пользователь жмет на пункт меню, появляется форма запроса по таблице заказов
2) Пользователь забивает критерии , и открываетя форма с выбранными заказами (и их строками) + на форме несколько текстовых полей (для комметариев).
3) Пользователь жмет кнопку "ок" и по выбранным заказам производится определенная операция.

Создала класс, в котором в в методе prompt вызываю свою форму стандартно через
X++:
boolean prompt()
{
    Args formArgs;
    FormRun formRun;
    formArgs = new Args();
    formArgs.name(formStr(myForm));
    formArgs.caller(this);
    formRun = ClassFactory::formRunClassOnClient(formArgs);
    formRun.init();
    formRun.run();
    formRun.wait();
    return formRun.closedOk();
}
Так как форма запроса, показываемая пользователю, по сути - запрос , используемый на форме, я вызываю в init формы queryRun.promt(), а потом подставляю его в запрос формы.
X++:
public void  init()
{   .....
    super();
    .....
    xSysLastValue::getLast(this);

    if (!queryRun.prompt())
    {
        element.close();
    }
    salesTable_ds.query(queryRun.query());
}
Все работает, но , если пользователь нажимает Отмена на форме запроса, то вываливается ошибка , что метод detach() или wait() вызван до run().
Что верно, тк в методе init по сути форма закрыватеся и formRun.wait не имеет уже formRun .
Я могу, конечно, проверять formRun на существование после вызова formRun.init()в методе promt(). Но, мне кажется. я что-то идеологически неправильно делаю. Может, лучше создавать запрос в классе и там же делать queryRun.prompt , а потом передавать его в форму и подставлять в ds? Это тоже коряво, тк зачем отдельно в классе создавать запрос , если форма уже на нем основана и по сути надо дать пользователю именно его изменить...

Подскажите, где в системе есть примеры подобного интерфейса? Как правильно его реализовать?