Dynamics AX Blog - Dynamics AX 2012 - finanzdimensionen - Seite 2

Momentan angezeigt werden nur Beiträge, bei denen das Schlagwort »finanzdimensionen« eingetragen wurde. Filter entfernen
Momentan angezeigt werden nur Beiträge, welche für die Dynamics AX-Version »Dynamics AX 2012« relevant sind. Filter entfernen

RSS-Feed dieser Version

AX 2012: Erstellen einer DefaultDimension/LedgerDimension

Nachstehend ein Code-Beispiel, wie man eine RecId vom Typ DefaultDimension für mehrere Dimensionen generieren kann.
Anschließend wird diese DefaultDimension mit einem Hauptkonto zu einer RecId vom Typ LedgerDimension kombiniert.

static void buildDefaultAndLedgerDimension(Args _args)
{
    DimensionAttributeValueSetStorage dimensionAttributeValueSetStorage;
    DimensionAttribute dimensionAttribute;
    DimensionAttributeValue dimensionAttributeValue;
    DimensionDefault dimensionDefault;
    LedgerDimensionAccount ledgerDimensionAccount;

    dimensionAttributeValueSetStorage = new DimensionAttributeValueSetStorage();

    // BusinessUnit
    dimensionAttribute = DimensionAttribute::findByName('BusinessUnit');
    if(dimensionAttribute)
    {
        dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, '069', false, true);
        dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);
    }

    // CostCenter
    dimensionAttribute = DimensionAttribute::findByName('CostCenter');
    if(dimensionAttribute)
    {
        dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, '010', false, true);
        dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);
    }

    // Department
    dimensionAttribute = DimensionAttribute::findByName('Department');
    if(dimensionAttribute)
    {
        dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, '024', false, true);
        dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);
    }
 
    dimensionDefault = dimensionAttributeValueSetStorage.save();

    // Merge main account and source dimension values and return RecId which can be used as ledgerDimension
    ledgerDimensionAccount = DimensionDefaultingService::serviceCreateLedgerDimension(DimensionStorage::getDefaultAccountForMainAccountNum("110110"),
                                                                                      dimensionDefault);

    info(strFmt("Default dimension recId: %1", dimensionDefault));
    info(strFmt("DefaultDimension (Source RecId): %1 LedgerDimension (Merged RecId): %2", dimensionDefault, ledgerDimensionAccount));
}

Notiz: Aufmerksamen Lesern ist sicherlich nicht entgangen, daß ich beides bereits in anderen Beiträgen geposted habe. Dieser Beitrag ist lediglich eine Kombination davon.


 
 

AX 2012: Anzeige-Wert einer LedgerDimension-RecId per Code ausgeben

Im Beispiel wird ein beliebiger Datensatz aus der LedgerJournalTrans selektiert und dessen Finanzdimensionen bzw. das Gegenkonto so ausgegeben, wie der Benutzer es im sog. Segmented Entry Control sieht.

static void GetLedgerDimensionDisplayValue(Args _args)
{
    DimensionStorage dimensionStorage;
    DimensionDisplayValue DimensionDisplayValue;
    ledgerJournalTrans ledgerJournalTrans = LedgerJournalTrans::findRecId(5637169330, false);
    
    // LedgerDimension
    dimensionStorage = DimensionStorage::findById(ledgerJournalTrans.LedgerDimension);
    DimensionDisplayValue = dimensionStorage.getComboDisplayValue();
    
    info(DimensionDisplayValue);   
     // OffsetLedgerDimension
    dimensionStorage = DimensionStorage::findById(ledgerJournalTrans.OffsetLedgerDimension);
    DimensionDisplayValue = dimensionStorage.getComboDisplayValue();
    
    info(DimensionDisplayValue);
}

Ergebnis beispielsweise:
5170-10-00AB03---1500-
 


 
 

AX 2012: LedgerDimension generieren III

Im folgenden ein kurzes Code-Snippet, welches zeigt wie man beispielsweise die Standard-Finanzdimensionen eines Debitoren mit einem Haupt-/Sachkonto zu einer RecId verbindet, welche beispielsweise als LedgerDimension in einer Sachkontenjournal-Zeile (Allgemeine Erfassung; LedgerJournalTrans.LedgerDimension) verwendet werden kann.

static void mergeDimensions_I(Args _args)
{
    LedgerDimensionAccount ledgerDimensionAccount;
    CustTable custTable;
 
    custTable = CustTable::find('‪‪‪2000');
   
    // Merge main account and source dimension values and return RecId which can be used as ledgerDimension
    ledgerDimensionAccount = DimensionDefaultingService::serviceCreateLedgerDimension(DimensionStorage::getDefaultAccountForMainAccountNum("4100"),
                                                                                      custTable.DefaultDimension);
 
    info(strFmt("DefaultDimension (Source RecId): %1 LedgerDimension (Merged RecId): %2", custTable.DefaultDimension, ledgerDimensionAccount));
}
 

 
 

AX 2012: Finanzdimension als Display-Methode anzeigen

Folgende Display-Methode in der Datasource einer Form zeigt beispielsweise die Finanzdimension Costcenter eines Debitoren an.

public display DimensionValue showCostCenter(CustTable _custTable)
{
    DimensionAttributeValueSet dimensionAttributeValueSet;
    DimensionAttributeValueSetItem dimensionAttributeValueSetItem;
    DimensionAttributeValue dimensionAttributeValue;
    DimensionAttribute dimensionAttribute;

    #define.CostCenterDimensionName("CostCenter");
 
    if( !_custTable || !_custTable.DefaultDimension)
    {
        return '';
    } 

    dimensionAttributeValueSet = DimensionAttributeValueSet::find(_custTable.DefaultDimension); 

    select firstOnly RecId
    from dimensionAttributeValueSetItem
        where dimensionAttributeValueSetItem.DimensionAttributeValueSet == dimensionAttributeValueSet.RecId
    join DimensionAttributeValue
        where DimensionAttributeValue.RecId == dimensionAttributeValueSetItem.DimensionAttributeValue
    join RecId from dimensionAttribute
    where dimensionAttribute.RecId == DimensionAttributeValue.DimensionAttribute
       && dimensionAttribute.Name  == #CostCenterDimensionName
    

    if(dimensionAttributeValue && dimensionAttribute)
    {
        return dimensionAttributeValue.getValue();
    }

    return '';
}

Einfachere Variante (siehe Kommentare)

public display DimensionValue showCostCenter(CustTable _custTable)
{
    #define.CostCenterDimensionName("CostCenter");
 
    return ((select firstOnly DisplayValue from DefaultDimensionView
             where DefaultDimensionView.Name == #CostCenterDimensionName
                && DefaultDimensionView.DefaultDimension == _custTable.DefaultDimension).DisplayValue);
}

 
 

AX 2012: Finanzdimension auf Basis einer Formulareingabe eintragen

Oftmals hat man die Anforderung, daß auf Basis einer Eingabe in einem Formular auch eine bestimmte Finanzdimension eingetragen werden soll.

Mit folgendem Code-Beispiel ist so etwas relativ einfach zu realisieren. Im Beispiel wird, wann immer ein bestimmtes Feld geändert wird - abgefragt über die Methode modified() des Feldes einer Datasource, die Finanzdimension Kostenstelle mit dem Wert 25 befüllt. Ist der einzutragende Wert ein ungültiger, passiert nichts (Fehlermeldung oder ähnliches).

public void modified()
{
    DimensionAttribute DimensionAttribute = DimensionAttribute::findByName("Kostenstelle");
    DimensionValue newValue = '25';    // New dimension value
    
    super();
    
    dimensionDefaultingController.setDimensionAttributeValue(
        DimensionAttribute, 
        DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute, newValue).RecId, 
        newValue);
}

Im Beispiel wird eine existierende Instanz von DimensionDefaultingController verwendet.
 


 
 

AX 2012: Erstellen einer DefaultDimension mit mehreren Dimensionen

Nachstehend ein Code-Beispiel, wie man eine RecId vom Typ DefaultDimension für mehrere Dimensionen generieren kann.

Im Beispiel werden die Dimension Kostenstelle mit dem Wert "10", die Dimension Abteilung mit dem Wert "IT" und die Dimension Kategorie mit dem Wert "02" zu einer DefaultDimension kombiniert.

Durch den letzten Parameter von findByDimensionAttributeAndValue() wird sichergestellt, daß fehlende Dimensionen angelegt werden (soferne möglich).

static void buildDefaultDimension(Args _args)
{
    dimensionAttributeValueSetStorage dimensionAttributeValueSetStorage;
    dimensionAttribute dimensionAttribute;
    dimensionAttributeValue dimensionAttributeValue;
    dimensionDefault dimensionDefault; 
 
    dimensionAttributeValueSetStorage = new DimensionAttributeValueSetStorage();

    // Kostenstelle
    dimensionAttribute = dimensionAttribute::findByName('Kostenstelle');
    if(dimensionAttribute)
    {
        dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, '10', false, true);
        dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);
    }

    // Abteilung
    dimensionAttribute = dimensionAttribute::findByName('Abteilung');
    if(dimensionAttribute)
    {
        dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, 'IT', false, true);
        dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);
    }

    // Kategorie
    dimensionAttribute = dimensionAttribute::findByName('Kategorie');
    if(dimensionAttribute)
    {
        dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, '02', false, true);
        dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);
    }

    dimensionDefault = dimensionAttributeValueSetStorage.save();

    info(strFmt("Default dimension recId: %1", dimensionDefault));

 

 
 

AX 2012: LedgerDimension generieren II

Update 11.05.2014: Da die unten stehende Code-Beispiele nicht in allen Applikationen zu funktionieren scheinen, habe ich unter folgendem Beitrag ein weiteres Code-Beispiel veröffentlicht.

Im folgenden ein kurzes Code-Snippet, welches zeigt wie man beispielsweise Finanzdimensionen mit einem Haupt-/Sachkonto zu einer RecId verbindet, welche beispielsweise als LedgerDimension in einer Sachkontenjournal-Zeile (Allgemeine Erfassung; LedgerJournalTrans.LedgerDimension) verwendet werden kann.

static void mergeDimensions(Args _args)
{
    SalesLine salesLine;
    MainAccount mainAccount;
    LedgerDimensionAccount ledgerDimensionAccount;

    // Get source dimension values (for example from SalesLine-Record)
    select firstonly salesLine
    where salesLine.SalesId == "20001"
       && salesLine.DefaultDimension;

    // Get main account
    mainAccount = MainAccount::findByMainAccountId('0500');

    // Merge main account and source dimension values and return RecId which can be used as ledgerDimension
    ledgerDimensionAccount = DimensionDefaultingService::serviceCreateLedgerDimension(mainAccount.RecId, salesLine.DefaultDimension);

    info(strFmt("DefaultDimension (Source RecId): %1 LedgerDimension (Merged RecId): %2", salesLine.DefaultDimension, ledgerDimensionAccount));
}

Das zweite Snippet macht prinzipiell das selbe wie oben, allerdings wird hier statt einem Haupt-/Sachkonto ein Debitorenkonto verwendet.


 
 
Seiten « 1 2 3 4 » 

 

 
 
 
Beiträge des aktuellen Monats
März 2024
MoDiMiDoFrSaSo
 123
45678910
11121314151617
18192021222324
25262728293031
 
© 2006-2024 Heinz Schweda | Impressum | Kontakt | English version | Mobile Version
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.  Mehr dazu