Решал я такую задачу. Все можно сделать, и притом из самой формы. Как было правильно замечено, модифицировать дизайн надо перед super() в init(). Работа идет с классом Form form = formRun.form(). Чтобы Аксапта не вылетала, я заранее завел источник данных в форме, а потом подменяю ему таблицу:
PHP код:
FormBuildDatasource formBuildDatasource;
;
// Build the selectable grid
formBuildDatasource = form.dataSource(#DataSourceSelNo);
formBuildDatasource.table(subjTableLookup.subjTableId());
selDSId = formBuildDatasource.id();
....
Следующим шагом добавляем поля в грид (тоже заведен заранее, хотя это и не столь важно):
PHP код:
private FormControlId buildGrid(container _fields,
FieldId _selFieldId,
FormControlName _name,
FormBuildDatasource _datasource)
{
FormBuildControl control;
FormBuildGridControl gridControl;
FormControlId ret;
int i;
gridControl = form.design().control(_name);
gridControl.dataSource(_datasource.id());
for (i = 1; i <= conlen(_fields); i++)
{
control = gridControl.addDataField(_datasource.id(), conpeek(_fields, i));
if (conpeek(_fields, i) == _selFieldId)
{
ret = control.id();
}
}
return ret;
}
ВСЕ! В моем случае речь идет о lookup-форме, поэтому выполняются магические пассы с "главным" контролом sel[ected]Field.