Задача: есть некая таблица
Table1. У нее есть поле
VendAccount - ссылка на поставщика (
AccountNum из
VendAccount).
В форме
Form1, которая "имеет дело" с данными
Table1, есть, разумеется, датасурс
Table1.
Пользователь хочет видеть в форме
Form1 не только код, но и наименование и другие атрибуты поставщика - поля из
VendTable. Это не должны быть дисплей-методы: наименование поставщика - должно меняться пользователем непосредственно в форме
Form1.
Вешаем на форму
Form1 подчиненный к
Table1 датасурс
VendTable; LinkType = OuterJoin.
В методе
init() датасурса
VendTable формы пишем код, который актуализует именно нужный нам релейшен между таблицами
VendTable и
Table1:
X++:
qbds = qbds.addDataSource(tableNum(VendTable));
qbds.addLink(fieldNum(Table1, VendAccount), fieldNum(VendTable, AccountNum));
qbds.joinMode(joinMode::OuterJoin);
this.query(q);
Теперь добавляем на форму контролы, ссылающиеся на датасурс
VendTable - например, наименование поставщика.
Все работает замечательно - датасурсы связываются, мы можем менять в форме наименование поставщика, соответствующего текущей записи в датасурсе
Table1.
Но: когда мы меняем
Table1.VendAccount - то есть собственно поставщика - связанная запись в датасурсе
VendTable не меняется. То есть, изменили код ПОСТ-1 на ПОСТ-2 - а наименование осталось "Поставщик 1".
Проблема была решена так: перекрыт метод
modified() на поле
Table1.VendAccount (в датасурсе
VendTable формы), следующим образом:
X++:
public void modified()
{
;
super();
element.lock();
buffer.data(Table1);
Table1.doUpdate();
Table1_ds.research();
if (Table1)
{
Table1_ds.findRecord(buffer);
}
element.unlock();
}
После этого, запись на подчиненном датасурсе
VendTable стала позиционироваться на новом поставщике сразу после изменения
Table1.VendAccount.
Но что-то мне подсказывает, что данное решение является безграмотным и можно достичь этой цели - перепозиционирования записи в подчиненном датасурсе при изменении поля записи родительского датасурса - БЕЗ
research() или
executeQuery().
Вопрос к уважаемым гуру: я прав или неправ?