Работа с финансовыми аналитиками в MS DAX 2012
В MS DAX 2012 переработали полностью структуру финансовых аналитик. Финансовой аналитикой может быть практически любой справочник со своими значениями. Так же можно создать настраиваемую финансовую аналитику, значения которой нужно будет создавать самим. Путь в AX Главная книга->Настройка->Финансовые аналитики->Финансовые аналитики.
Contents
Создание новой финансовой аналитики для нового справочника
Для того чтобы создать финансовую аналитики для нового справочника нужно создать новое 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!