Показать сообщение отдельно
Старый 28.08.2013, 12:42   #2  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
376 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Похоже в методе addAttributeRangeToQuery класса DimensionProvider в строке 58 используют не правильный тип соединения
X++:
public QueryBuildRange addAttributeRangeToQuery(Query _query, str _dataSourceName, str _dimensionFieldName, DimensionComponent _dimensionComponent, anytype _value, str _dimensionAttributeName='', boolean _isDefaultRange = false)
{
...
           // Change the join to an inner join since it is now restricting
            qbds.joinMode(JoinMode::InnerJoin);
...
}
При таком соединении из выборки уходят все строки, у которых не определено значение фин. аналитики, по которой накладываем условие.

Т.е. когда мы используем конструкцию вида
X++:
...
    SysQuery::addDimensionAttributeRange(
                query,
                qbds.name(),
                fieldStr(Example, DefaultDimension),
                DimensionComponent::DimensionAttribute,
                SysQuery::valueUnlimited(),
                dimensionName,
                true);
...
будут отобраны все записи из таблицы Example, у которых аналитика dimensionName не пустая, даже не смотря на то, что значение мы передаем любое.

И еще один момент, в соседнем методе addAttributeFilterToQuery(он почти повторяет данный метод за исключением методов к которым применяются значения условий) этого же класса, используется уже OuterJoin.

X++:
public QueryFilter addAttributeFilterToQuery(Query _query, str _dataSourceName, str _dimensionFieldName, DimensionComponent _dimensionComponent, anytype _value, str _dimensionAttributeName = '')
{
...
           // Change the join to an outer join since it is now restricting with a filter
            qbds.joinMode(JoinMode::OuterJoin);
...
}
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: Logger (1).