Да, я некорректно ответил. Нельзя после init-а изменять датасорсы на форме. Т.е. даже если что-то и заджойнить, то отобразить эти данные нельзя.
Это можно в принципе обойти - если открыть\закрыть форму.
Вот пример - код из класса, который вызван из init формы, но до вызова super().
Проверяется - есть ли в форме нужный датасорс - если нету - добавляется и форма переоткрывается.
Код:
// Метод вызывается из init формы до вызова super()
protected void addDataSources()
{
Args args;
Form formNew;
FormRun formRunNew;
FormBuildDataSource formBuildDataSource;
int i;
;
for (i = 1; i <= formRun.form().dataSourceCount(); i++)
{
formBuildDataSource = formRun.form().dataSource(i);
// Ищем датасорсы - добавлены ли они уже в форму (добавляются динамически)
if (formBuildDataSource.name() == #SetupGroupingDS)
buildSetupGroupingDS = formBuildDataSource;
}
if (useGrouping && !buildSetupGroupingDS)
restartForm = true;
if (restartForm) // Не добавлены - придётся перезагружать форму
{
formNew = new Form(formRun.name());
// Добавляем датасорсы
if (useGrouping)
{
formBuildDataSource = formNew.addDataSource(#SetupGroupingDS);
formBuildDataSource.table(tablenum(TmpSysQuery));
formBuildDataSource.index(indexnum(TmpSysQuery, SortOrderIdx));
formBuildDataSource.allowCreate(false);
formBuildDataSource.allowDelete(false);
}
// Теперь можно запустить новую форму - датасорсы добавлены
args = formRun.args();
args.object(formNew);
formRunNew = classFactory.formRunClass(args);
formRunNew.init();
formRunNew.run();
formRunNew.wait();
// Не забыть закрыть старую форму если параметр restartForm = true
// (это надо сделать после super() в init формы)
}
}