dinsdag 29 mei 2012

WMS in Microsoft Dynamics AX 2009. Outbound Process Setup

Picking over multiple warehouses can be setup in the shipment reservation sequence.

Shipment reservation sequence

The shipment reservation sequence defines how and where the shipment reservation process reserves. You set up shipment reservation processes under [Inventory management > Setup > Distribution > Shipment reservation sequence].

In this example, the reservation sequence at first tries to reserve inventory from Warehouse 23 and if this warehouse does not have enough physical inventory, Warehouse 22 is the next.

The shipment reservation process contains different layers: Reservation sequence -> Reservation combinations -> Reservation methods.

The reservation combination must be enabled for pallet transports and picking route logic.

Outbound rules

To control the process after picking, an outbound rule must be used and associated with the shipment. In this case, the picked inventory must be delivered to the shipment staging area and it must be loaded before the shipment can be sent.

Source: http://blogs.msdn.com/b/dynamicsaxscm/archive/2009/04/26/wms-in-microsoft-dynamics-ax-2009-outbound-process-setup.aspx

woensdag 16 mei 2012

List tables with changed data as of certain date


static void ADU_BMS_TableDataChanged(Args _args)
    TableId         tableId;
    Dictionary      dict = new Dictionary();
    SysDictTable    dictTable;
    Common          common;

    TimeZone        tz;
    TransDate       fromDate;
    UtcDateTime     fromDateTime;

    DataArea        dataArea;

    fromDate = str2date("16042012", 123);
    fromDateTime = datetobeginUtcDateTime(fromDate, tz);

    info(strfmt("Tables with changed data as of %1", fromDateTime));

    select  dataArea
    where   !dataArea.isVirtual
        changeCompany (dataArea.Id)
            // Clear used variables
            tableId     = 0;
            dictTable   = null;
            common      = null;

            // Actions for company
            tableId = dict.tableNext(0);

            while( tableId)
                dictTable = new DictTable(tableId);

                if (!dictTable.isTmp() && !dictTable.isMap() && !dictTable.isView())
                    common = dictTable.makeRecord();

                    select  count(RecId)
                    from    common
                    where   common.createdDateTime  >= fromDateTime
                        ||  common.modifiedDateTime >= fromDateTime;

                    if (common.RecId)
                        info(strfmt("%1:%2 - %3 changes", dataArea.Id, dictTable.name(), common.RecId ));

                tableId = dict.tableNext(tableId);