Создание Join'a

Доброго времени суток. Подскажите такой момент.
Не получается программно добавить в SelectQuery Join.
Делаю вот так:

var Select = Dataset.SelectQuery.Items(0);
var Joins = Select.Joins;
var cJoin = Joins.CreateItem();
cJoin.RightField = Select.FromTable.Fields.ItemsByName('ID');
cJoin.LeftField = JoinTable.Fields.ItemsByName('ParentTableID');
cJoin.LeftTableAlias = JoinTable.SQLName;
cJoin.JoinType = 2; // тип right join'a
Joins.Add(cJoin);

cJoin.IsEnabled = true; // тут ошибка

Ошибка говорит мол не все свойства выставлены или выставлены неправильных типов.
Если убираю строчку и добавляю фильтр по полю связанной таблицы - то join в запросе не включается.
IsEnabled = true; ставил и перед Add - тоже самое.
Что не так?

Нравится

5 комментариев

Юрий, так делать не совсем правильно, поскольку свойство IsEnabled объекта IJoin - только для чтения (см. SDK). Изменять можно свойство CanDisable (в Terrasoft Administrator это галочка "Разрешить отключение").

В чём проявляется то, что не включается join? Возникает проблема при применении фильтра?

В скриптах системы есть много примеров динамического создания join'ов, но нигде нет работы с их свойством IsEnabled. При использовании колонок присоединённой таблицы оно должно изменять своё значение автоматически.

Попробуйте поискать в скриптах функцию CreateJoin и её использование.

Ага, по поводу IsEnabled понял, спасибо.

"Лабьяк Олег Игоревич" написал:В чём проявляется то, что не включается join? Возникает проблема при применении фильтра?

Сам запрос собирается неправильно (если не трогаю IsEnabled). То есть фильтр в SQL присутствует,
но в нем фигурируют псевдоним заджойненой таблицы, которой в самом sql на самом деле нет.

В целом уже решил задачу несколько иначе, но все же интересно. Может кто столкнется.

Я правильно понимаю, что фильтр изначально присутствует в запросе, а таблицу Вы присоединяете скриптом? Может, фильтр тоже создавать динамически, после создания join?

"Лабьяк Олег Игоревич" написал:Может, фильтр тоже создавать динамически, после создания join?

Все происходит именно так. Вначале join, потом фильтр.

Попробуйте добавлять в запрос одну из колонок присоединённой таблицы. При этом свойство IsEnabled Join'а должно измениться на true.

Показать все комментарии