Работа с финансовыми аналитиками в MS DAX 2012

В MS DAX 2012 переработали полностью структуру финансовых аналитик. Финансовой аналитикой может быть практически любой справочник со своими значениями. Так же можно создать настраиваемую финансовую аналитику, значения которой нужно будет создавать самим. Путь в AX Главная книга->Настройка->Финансовые аналитики->Финансовые аналитики.

Создание новой финансовой аналитики для нового справочника

Для того чтобы создать финансовую аналитики для нового справочника нужно создать новое view. Наименование view обязательно должно начинаться с DimAttribute, это нужно для того чтобы система распознала его как справочник для финансовой аналитики, дальше следует название справочника. Источником данных для view будет сам справочник, его нужно переименовать в BackingEntity. Во view должны быть созданы три поля Key – RecId справочника, Value – ID справочника, Name – описание значения из справочника.

После создания view нужно почистить кеш

DimensionCache::clearAllScopes();

после чего создать аналитику на форме, указанной выше.

Создание набора финансовых аналитик

DimensionAttributeValueSetStorage   dimStorage;
DimensionAttribute                  dimAttribute;
DimensionAttributeValue             dimAttributeValue;
Map                                 attrValues;
MapEnumerator                       attrValuesEnum;
DimensionDefault                    defDim;
//Заполняем мапу значениями
attrValues = new Map(Types::String, Types::String);
attrValues.insert("BuisnessUnit", "BU00004");
attrValues.insert("Item", "I010011");
attrValues.insert("Customer", "C000056");
//создаем набор
dimStorage = new DimensionAttributeValueSetStorage();
//перебираем значения
attrValuesEnum = attrValues.getEnumerator();
while (attrValuesEnum.moveNext())
{
    //находим атрибут аналитики
    dimAttribute = DimensionAttribute::findByName(attrValuesEnum.currentKey());
    //находим значение аналитики
    dimAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimAttribute, attrValuesEnum.currentValue(), false, true);
    //добавляем значение в набор
    dimStorage.addItem(dimAttributeValue);
}
//сохраняем набор финансовых аналитик
defDim = dimStorage.save();

Добавление, удаление и просмотр значения аналитики из набора

Используем те же объекты, которые используются в коде выше.

Добавление значения в набор

//находим существующий набор
dimStorage = new DimensionAttributeValueSetStorage(this.DefaultDimension);
//добавляем значение в набор
dimAttribute = DimensionAttribute::findByName("Item");
dimAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimAttribute, "I010011", false, true);
dimStorage.addItem(dimAttributeValue);
//сохраняем набор
this.DefaultDimension = dimStorage.save();

Удаление значения из набора

//находим существующий набор
dimStorage = new DimensionAttributeValueSetStorage(this.DefaultDimension);
//удаляем значение из набора
dimAttribute = DimensionAttribute::findByName("Item");
dimStorage.removeDimensionAttribute(dimAttribute.RecId);
//сохраняем набор
this.DefaultDimension = dimStorage.save();

Просмотр значения из набора

//находим существующий набор
dimStorage = new DimensionAttributeValueSetStorage(this.DefaultDimension);
//находим значение в наборе
dimAttribute = DimensionAttribute::findByName("Item");
info(strFmt("%1", dimStorage.getValueByDimensionAttribute(dimAttribute.RecId));

Или если нужно просмотреть ID

//находим существующий набор
dimStorage = new DimensionAttributeValueSetStorage(this.DefaultDimension);
//находим значение в наборе
dimAttribute = DimensionAttribute::findByName("Item");
info(strFmt("%1", dimStorage.getDisplayValueByDimensionAttribute(dimAttribute.RecId));

Копирование значения из другого набора и объединение наборов

Копирование значения аналитики из одного набора в другой

//находим существующий набор
defDim = InventTable::find("I010011").DefaultDimension;
//находим значение в наборе
dimAttribute = DimensionAttribute::findByName("Item");
//копируем значение аналитики
this.DefaultDimension = DimensionDefaultingService::serviceReplaceAttributeValue(this.DefaultDimension, defDim, dimAttribute.RecId);

Объединение нескольких наборов финансовых аналитик

//находим существующий набор
defDim = InventTable::find("I010011").DefaultDimension;
//объединяем наборы
this.DefaultDimension = DimensionDefaultingService::serviceMergeDefaultDimensions(this.DefaultDimension, defDim);

Данным способом можно объединить до 4-ех наборов финансовых аналитик. Так же на таблицах, входящих в мапу DimensionDefaultMap, таких как SalesTable или PurchTable, есть метод mergeDimension, который так же предоставляет возможность объединения других наборов финансовых аналитик с набором данного объекта.

//находим существующий набор
defDim = InventTable::find("I010011").DefaultDimension;
//объединяем наборы
this.DefaultDimension = this.mergeDimension(defDim);

здесь this это любая таблица, входящая в мапу DimensionDefaultMap

Работа со структурами счетов

До этого момента работа велась исключительно с набором финансовых аналитик. Теперь к этому набору нужно добавить счет ГК. Для создания счета можно использовать методы getDefaultAccount и getDefaultAccountForMainAccountNum класса DimensionStorage. После создания счета его нужно объединить с набором финансовых аналитик при помощи метода serviceCreateLedgerDimension класса DimensionDefaultingService. В случае если нужно выполнить какие то манипуляции с набором аналитик, то вытащить его из счета можно методом getDefaultDimensionFromLedgerDimension класса DimensionStorage.

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar