Всё правильно, я также делаю - обычно для классов типа "Proposal", у которого задача заполнить таблицу дочерними запясими.
Давно уже писал, вроде работает.
Сделано так, потому что форма может быть открыта из разных форм, и допустим, если надо знать какой нибудь "параметр", то можно сделать поиск по возможным вариантам.
Например, "Invoice" может фильтроваться и от "Дебитора/Кредитора", и также от самой "заготовки" (Sales/PurchTable).
X++:
/*
Finds specific cursor on DS dynalinks
*/
public static Common findDynalinkTable(tableId _tableId, Common _common)
{
FormDatasource ds = _common.dataSource();
QueryBuildDatasource qbds;
QueryBuildDynalink qbd;
Common ret;
int i;
;
if (ds)
{
qbds = ds.query().dataSourceTable(_common.tableId);
if (qbds)
{
if (qbds.dynalinkCount())
{
for (i=1; i <= qbds.dynalinkCount(); i++)
{
qbd = qbds.dynalink(i);
if (qbd && qbd.cursor().TableId == _tableId)
{
ret = qbd.cursor();
break;
}
}
}
}
}
return ret;
}