Dynamics AX Blog - Dynamics AX 2012 - Seite 15

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: Ändern einer Standardfinanzdimension (DefaultDimension) eines Datensatzes

Der nachstehende Job demonstriert, wie man den Wert einer Dimension (im Beispiel wird die Dimension Kostenstelle eines Debitors geändert) innerhalb der Standardfinanzdimensionen eines Datensatzes per Code austauschen kann. Auf diese Art & Weise können auch einzelne Dimensionswerte entfernt werden.

static void changeDimensionValue(Args _args)
{
    DimensionAttributeValueSetStorage dimensionAttributeValueSetStorage;
    DimensionAttribute dimensionAttribute;
    CustTable custTable = CustTable::find("US-014");
    DimensionValue oldDimensionValue;
    DimensionValue newDimensionValue = "011";
    DimensionDefault newDimensionDefault;

    #define.dimensionName("CostCenter")

    DimensionValue getDimensonValue(DimensionDefault _dimensionDefault)
    {
        DefaultDimensionView defaultDimensionView;
        select firstonly DisplayValue
        from defaultDimensionView
        where defaultDimensionView.Name == #dimensionName
            && defaultDimensionView.DefaultDimension == _dimensionDefault;

        return defaultDimensionView.DisplayValue;
    }

    // Get current value
    oldDimensionValue = getDimensonValue(custTable.DefaultDimension);

    // Build DimensionAttributeValueSetStorage
    dimensionAttributeValueSetStorage = DimensionAttributeValueSetStorage::find(custTable.DefaultDimension);
 
    // Remove old dimension value
    dimensionAttribute = DimensionAttribute::findByName(#dimensionName);
    dimensionAttributeValueSetStorage.removeDimensionAttributeValue(
        DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, oldDimensionValue).RecId);
 
    // Set new dimension value
    if(newDimensionValue != "")
    {
        dimensionAttribute = DimensionAttribute::findByName(#dimensionName);
        dimensionAttributeValueSetStorage.addItem(
            DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, newDimensionValue));
    }
 
    newDimensionDefault = dimensionAttributeValueSetStorage.save();

    ttsbegin;
    custTable.selectForUpdate(true);
    custTable.DefaultDimension = newDimensionDefault;
    custTable.update();
    ttscommit;
}

Screenshot vor der Änderung

Screenshot

Screenshot nach der Änderung

Screenshot


 
 

Erstellen einer Position einer Kommissionierliste für einen Produktionsauftrag

Der folgende Job erstellt eine Position für eine Kommissionierliste eines Produktionsauftrages.

static void createProdJournalBOM(Args _args)
{
    AxProdJournalBOM axProdJournalBOM;
    InventDim inventDim;

    axProdJournalBOM = AxProdJournalBOM::construct();
    axProdJournalBOM.validateInput(true);
    axProdJournalBOM.continueOnError(true);

    axProdJournalBOM.parmProdId("P000194");
    axProdJournalBOM.parmJournalId("00950");
    axProdJournalBOM.parmItemId("M0014");
    axProdJournalBOM.parmBOMConsump(30);
    axProdJournalBOM.prodJournalBOM().initFromInventTable(InventTable::find(axProdJournalBOM.parmItemId()));

    // Lagerungsdimensionen (optional)
    inventDim = axProdJournalBOM.prodJournalBOM().inventDim();
    inventDim.InventSizeId = "1000";
    inventDim = InventDim::findOrCreate(inventDim);
    axProdJournalBOM.parmInventDimId(inventDim.InventDimId);

    axProdJournalBOM.save();
}

 
 

Nummernkreis für einen EDT finden

Vor kurzem hatte ich ein Problem mit einem Nummernkreis in einem Formular. Allerdings wusste ich den Namen des Nummernkreises nicht, sodaß ich im Nummernkreisformular danach hätte suchen können.

Also habe ich den folgenden Job geschrieben, der mir auf Basis des EDTs des Feldes (in meinem Fall PurchReqTable.PurchReqId) aus meinem Formular den Nummernkreiscode ermittelt. Damit war der Nummernrkreis schnell gefunden und das Problem behoben.

info(strFmt("%1", NumberSequenceTable::find(
    NumberSeqReference::findReference(
         extendedTypeNum(PurchReqId)).NumberSequenceId).NumberSequence));

 
 

Reservieren/Unreservieren einer Auftragsposition

Beispiele wie man eine Auftragsposition reserviert oder unreserviert findet man im Internet des Öfteren. Allerdings habe ich kein Beispiel gefunden, wo anschließend geprüft wurde ob diese Reservierung auch gut gegangen ist.

Deshalb habe ich mir ein solches Stück Code selbst erarbeiten dürfen. Dabei vergleiche ich ganz einfach den vorher reservierten Wert mit dem danach reservierten Wert. Ist dieser ident, gehe ich davon aus, daß die Reservierung nicht gut gegangen ist.

static void reserveSalesLine(Args _args)
{
    InventTransIdSumSingleStatus inventTransIdSumSingleStatus;
    SalesLine salesLine;
    InventMovement inventMovement;
    InventDim inventDim;
    InventDimParm inventDimParmCriteria;
    InventQtyReservPhysical oldReservedQty;
    InventQtyReservPhysical newReservedQty;
    InventUpd_Reservation inventUpd_Reservation;
    InventQty reserveQty;

    // Inline method to get current reserved quantity for specific inventDim
    InventQtyReservPhysical getReservedQty()
    {
        inventDimParmCriteria.initFromInventDim(inventDim);        

        inventTransIdSumSingleStatus = InventTransIdSumSingleStatus::newTransOriginIdStatus(InventTransOriginSalesLine::findInventTransOriginId(salesLine.DataAreaId, salesLine.InventTransId),
                                                                                            StatusReceipt::None,
                                                                                            StatusIssue::ReservPhysical);
        inventTransIdSumSingleStatus.parmInventDimCriteria(inventDim);
        inventTransIdSumSingleStatus.parmInventDimParmCriteria(inventDimParmCriteria);

        return inventTransIdSumSingleStatus.reservPhysical();
    }

    // Sales order line
    salesLine = SalesLine::findInventTransId('012431');
    inventMovement = InventTrans::findTransId(salesLine.InventTransId).inventMovement(true);

    // Build inventDim-Record, where the quantity should be reserved
    inventDim.clear();
    inventDim.InventSiteId      = "1";
    inventDim.InventLocationId  = "12";
    inventDim.wmsLocationId     = "12";
    inventDim = InventDim::findOrCreate(inventDim);

    // Get current physical reserved Quantity
    oldReservedQty = getReservedQty();

    // Set quanity which should be reserved (negative values to reserve, postive value to unreserve)
    reserveQty = -2;

    inventUpd_Reservation = InventUpd_Reservation::newInventDim(inventMovement,
                                                                inventDim,
                                                                reserveQty,
                                                                true);
    inventUpd_Reservation.updateNow();

    // Get new reserved quantity
    newReservedQty = getReservedQty();

    // Compare old and new reserved quantity to identify if reservation failed
    if(oldReservedQty == newReservedQty)
    {
        error("Reservation failed.");
    }
}

 
 

Kommissionierliste eines Produktionsauftrags prüfen/buchen

Der nachstehende Job prüft (bzw. bucht) eine Kommissionierliste eines Produktionsauftrages. Über den Enum JournalCheckPostType kann festgelegt werden, ob geprüft oder gebucht werden soll.

static void checkPostProdJournalTablePickingList(Args _args)
{
    JournalCheckPost journalCheckPost;
    ProdJournalTable prodJournalTable = ProdJournalTable::find("00943", true);

    // Check/Post journal
    journalCheckPost = ProdJournalCheckPostBOM::newJournalCheckPost(false,
                                                                    true,
                                                                    JournalCheckPostType::Check,
                                                                    prodJournalTable.TableId,
                                                                    prodJournalTable.JournalId);
    journalCheckPost.run();
}

 
 

Arbeitsplanliste eines Produktionsauftrags prüfen/buchen

Der nachstehende Job prüft (bzw. bucht) eine Arbeitsplanliste eines Produktionsauftrages. Über den Enum JournalCheckPostType kann festgelegt werden, ob geprüft oder gebucht werden soll.

static void checkPostProdJournalTableRoute(Args _args)
{
    JournalCheckPost journalCheckPost;
    ProdJournalTable prodJournalTable = ProdJournalTable::find("00943", true);

    // Check/Post journal
    journalCheckPost = ProdJournalCheckPostRoute::newJournalCheckPost(false,
                                                                    true,
                                                                    JournalCheckPostType::Check,
                                                                    prodJournalTable.TableId,
                                                                    prodJournalTable.JournalId);
    journalCheckPost.run();
}

 
 

Einzelvorgangsliste eines Produktionsauftrags prüfen/buchen

Der nachstehende Job prüft (bzw. bucht) eine Einzelvorgangsliste eines Produktionsauftrages. Über den Enum JournalCheckPostType kann festgelegt werden, ob geprüft oder gebucht werden soll.

static void checkPostProdJournalTableRouteJob(Args _args)
{
    JournalCheckPost journalCheckPost;
    ProdJournalTable prodJournalTable = ProdJournalTable::find("00943", true);

    // Check/Post journal
    journalCheckPost = ProdJournalCheckPostRouteJob ::newJournalCheckPost(false,
                                                                    true,
                                                                    JournalCheckPostType::Check,
                                                                    prodJournalTable.TableId,
                                                                    prodJournalTable.JournalId);
    journalCheckPost.run();
}

 
 
Seiten « 1 ... 12 13 14 15 16 17 18 ... 38 » 

 

 
 
 
Beiträge des aktuellen Monats
Mai 2024
MoDiMiDoFrSaSo
 12345
6789101112
13141516171819
20212223242526
2728293031 
 
© 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