Эх, а вот не сделать же в администраторе left join T1 on T1.A=T2.B and T1.C = 'Value'...
И в блок where это условие не перетащить - пресловутая "галочка" для фильтра сравнения должна быть проставлена и в запросах глобально используемых типа sq_Document уже нельзя такие вольности допускать.
Снова делаем вьюху на сервере с выборкой по нужному условию, цепляем ее как сервис таблицы и используем в join... громоздко![]()
Александр, можно при создании экземпляра запроса динамически создавать дополнительные условия и даже менять логический оператор между ними.
Пока решил через view - динамически лень-матушка не позволила, хотя идея хорошая. Если б экземпляр нужен был единожды - для определенного типа документа надо хитро подтянуть значения нескольких полей...
Пока писал вспомнил про вычисляемое поле в датасете - может быть потом переделаю, заодно посмотрю что быстрее функционирует:smile:
Если надумаете переделывать :) вот как у меня было:
[javascript]
function AddCompareFilterToJoin(Filters, Code, Field1, Field2, CompareOperatorType) {
var CompareFilter = Filters.CreateCompareFilter();
Filters.Add(CompareFilter);
CompareFilter.Code = Code;
if (!IsEmptyValue(CompareOperatorType)) {
CompareFilter.CompareOperator = CompareOperatorType;
}
var TestExpression = CompareFilter.CreateFieldFilterExpression();
var ValueExpression = CompareFilter.CreateFieldFilterExpression();
TestExpression.Field = Field1;
ValueExpression.Field = Field2;
CompareFilter.TestExpression = TestExpression;
CompareFilter.ValueExpression = ValueExpression;
return CompareFilter;
}
[/javascript]
Вызов:
[javascript]
var RelationMembersSQ = RelationDiagram.RelationMembersSQ;
var RelationTable = RelationMembersSQ.Items(0).Joins.ItemsByLeftTableAlias('tbl_Relation');
if (RelationTable.Filters.Count == 0) {
ContactAIDField = RelationTable.LeftField.ParentFields.ItemsByName('ContactAID');
ContactBIDField = RelationTable.LeftField.ParentFields.ItemsByName('ContactBID');
AccountBIDField = RelationTable.LeftField.ParentFields.ItemsByName('AccountBID');
RelationTable.LogicalOperator = lotOr;
RelationTable.Filters.LogicalOperator = lotOr;
var RelationMembersTable = RelationMembersSQ.Items(0).FromTable;
AccountIDField = RelationMembersTable.Fields.ItemsByName('AccountID');
ContactIDField = RelationMembersTable.Fields.ItemsByName('ContactID');
AddCompareFilterToJoin(RelationTable.Filters, 'ContactAID', ContactAIDField, ContactIDField);
AddCompareFilterToJoin(RelationTable.Filters, 'ContactBID', ContactBIDField, ContactIDField);
AddCompareFilterToJoin(RelationTable.Filters, 'AccountBID', AccountBIDField, AccountIDField);
}
[/javascript]