Показать сообщение отдельно
Старый 07.11.2018, 01:13   #1  
Blog bot is offline
Blog bot
Участник
 
25,475 / 846 (79) +++++++
Регистрация: 28.10.2006
sashanazarov: Create LedgerDimension from main account and financial dimensions
Источник: http://sashanazarov.blogspot.com/201...from-main.html
==============

The following code will (hopefully) keep generating valid LedgerDimension values, even after account structures or advanced rule structures are modified.

In the example below, there is an account structure with MainAccount-BusinessUnit-Department segments and an advanced rule with Project segment.

class TestLedgerDim
{
public static DimensionDynamicAccount generateLedgerDimension(
MainAccountNum _mainAccountId,
str _departmentId,
str _businessUnit,
str _projectId)
{
DimensionAttributeValueSetStorage dimensionAttributeValueSetStorage
= new DimensionAttributeValueSetStorage();

void addDimensionAttributeValue(
DimensionAttribute _dimensionAttribute,
str _dimValueStr)
{
DimensionAttributeValue dimensionAttributeValue;

if (_dimValueStr != '')
{
dimensionAttributeValue =
DimensionAttributeValue::findByDimensionAttributeAndValueNoError(
_dimensionAttribute,
_dimValueStr);
}

if (dimensionAttributeValue.RecId != 0)
{
dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);
}
}

DimensionAttribute dimensionAttribute;

while select dimensionAttribute
where dimensionAttribute.ViewName == tableStr(DimAttributeOMDepartment)
|| dimensionAttribute.ViewName == tableStr(DimAttributeOMBusinessUnit)
|| dimensionAttribute.ViewName == tableStr(DimAttributeProjTable)
{
switch (dimensionAttribute.ViewName)
{
case tableStr(DimAttributeOMDepartment):
addDimensionAttributeValue(dimensionAttribute, _departmentId);
break;

case tableStr(DimAttributeOMBusinessUnit):
addDimensionAttributeValue(dimensionAttribute, _businessUnit);
break;

case tableStr(DimAttributeProjTable):
addDimensionAttributeValue(dimensionAttribute, _projectId);
break;
}
}

RecId defaultDimensionRecId = dimensionAttributeValueSetStorage.save();

return LedgerDimensionFacade::serviceCreateLedgerDimension(
LedgerDefaultAccountHelper::getDefaultAccountFromMainAccountRecId(
MainAccount::findByMainAccountId(_mainAccountId).RecId),
defaultDimensionRecId);
}

///
/// Runs the class with the specified arguments.
///
/// The specified arguments.
public static void main(Args _args)
{
// Prints 110110-001-022-000002
info(
DimensionAttributeValueCombination::find(
TestLedgerDim::generateLedgerDimension(
'110110',
'022',
'001',
'000002')).DisplayValue);
}

}


Источник: http://sashanazarov.blogspot.com/201...from-main.html
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
За это сообщение автора поблагодарили: trud (1).