Наткнулся на баг в функционале ГФО:
Класс: LedgerRRGOperationParm_RU
X++:
private void loadDimensionList(Common _record)
{
LedgerRRGDimensionInterval_RU dimensionInterval;
str dimensionFilter;
int dimensionIdx;
;
select dimensionInterval
where dimensionInterval.DimTableID == _record.TableId &&
dimensionInterval.DimRecID == _record.RecId;
//if (dimensionInterval) // исправление ошибки фильтра по аналитикам
{
dimensionFilterMap = new Map(Types::Integer, Types::String);
}
while (dimensionInterval)
{
dimensionIdx = Dimensions::code2ArrayIdx(dimensionInterval.DimensionCode);
dimensionFilter = this.filterValue(dimensionInterval.FromDimNum, dimensionInterval.ToDimNum);
if (dimensionFilterMap.exists(dimensionIdx))
{
dimensionFilter = dimensionFilterMap.lookup(dimensionIdx) + #comma + dimensionFilter;
}
dimensionFilterMap.insert(dimensionIdx, dimensionFilter);
next dimensionInterval;
}
}
Если у нас есть две строки в настройке отчета, первая строка имеет фильтр по аналитикам, а вторая нет. То при формировании отчета фильтр из первой строки настройки будет действовать и на вторую.
Так как есть ещё следующий код:
X++:
if (!dimensionFilterMap)
{
dimensionFilterMap = _parm.dimensionFilterMap();
}
Если у нас не инициализирован map, то мы берем предыдущий, что не верно.
Если же строки поменять местами, то результат получается верным.
Для себя решил просто убрать if. Теперь все корректно формируется.
DAX 2009 RU5