Доброго времени суток. Подскажите такой момент.
Не получается программно добавить в SelectQuery Join.
Делаю вот так:
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 - тоже самое.
Что не так?
Нравится
Юрий, так делать не совсем правильно, поскольку свойство IsEnabled объекта IJoin - только для чтения (см. SDK). Изменять можно свойство CanDisable (в Terrasoft Administrator это галочка "Разрешить отключение").
В чём проявляется то, что не включается join? Возникает проблема при применении фильтра?
В скриптах системы есть много примеров динамического создания join'ов, но нигде нет работы с их свойством IsEnabled. При использовании колонок присоединённой таблицы оно должно изменять своё значение автоматически.
Попробуйте поискать в скриптах функцию CreateJoin и её использование.
Ага, по поводу IsEnabled понял, спасибо.
"Лабьяк Олег Игоревич" написал:В чём проявляется то, что не включается join? Возникает проблема при применении фильтра?
Сам запрос собирается неправильно (если не трогаю IsEnabled). То есть фильтр в SQL присутствует,
но в нем фигурируют псевдоним заджойненой таблицы, которой в самом sql на самом деле нет.
В целом уже решил задачу несколько иначе, но все же интересно. Может кто столкнется.
Я правильно понимаю, что фильтр изначально присутствует в запросе, а таблицу Вы присоединяете скриптом? Может, фильтр тоже создавать динамически, после создания join?
"Лабьяк Олег Игоревич" написал:Может, фильтр тоже создавать динамически, после создания join?
Все происходит именно так. Вначале join, потом фильтр.
Попробуйте добавлять в запрос одну из колонок присоединённой таблицы. При этом свойство IsEnabled Join'а должно измениться на true.