Microsoft Dynamics AX development

When I start the invent recalculation (Inventory and warehouse management > Periodic > Closing and adjustment), I receive the following error:

You can’t have unallocated cost on a planning formula.


    1. Create a production order and started it
      In this moment the system creates the transaction on the production order header
      untitledand the corresponding records in the InventTransOriginAssemplyComponent table.
    2. Create the Picking List and the Route Card and posted them with positive quantity and the flag “End”, on the lines, set to true.
    3. Create the Report as Finished with quantity 0 and the flag “Report as finished” on the line set to true (set to true the field “Accepr error” on the journal header) and post the journal
      In this moment the system deletes the transaction on the production order header and the corresponding records in the InventTransOriginAssemplyComponent table.
    4. Recreate a new Report as Finished with positive quantity and the flag “Report as finished” on the line set to true – save the journal
      In this moment the system recreates the transaction on the production order header WITHOUT the corresponding records in the InventTransOriginAssemplyComponent table.

Solution: Resolved with hotfix KB 2935085.


To add a new datasource to the form InventOnHandItem, you have to follow these steps.

In my case I’ve added the (InventTable).GTIN to the form.

Add the table (in the example I’ve used the InventTable) to the form’s datasource


Modify the method modifyQuery in the class InventDimCtrl_Frm_OnHand:

  • add the new datasource to the method declaration and add a new variable for the new QueryBuildDataSource:


  • add the following code at the end of the method



  • it is important that the field you want to add to the InventOnHandItem is the “group by field”.

This is the result:


PurchFormLetter  purchFormLetter
ProductReceiptId productReceiptId;
PurchLine        purchLine;
PurchTable       purchTable = PurchTable::find('123456');
PurchQty         purchQty = 20;

while select purchLine
where purchLine.PurchId == purchTable.PurchId
&& purchLine.IsDeleted == NoYes::No
purchLine.PurchReceiveNow = purchQty;

purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip);
purchFormLetter.update(purchTable, productReceiptId, purchFormLetter.transDate(), PurchUpdate::ReceiveNow);

PurchFormLetter purchFormLetter
PurchTable purchTable = PurchTable::find('123456');
PackingSlipId packingSlipId = 'PS_01';

purchFormLetter = PurchFormLetter::construct(DocumentStatus::PurchaseOrder);
purchFormLetter.update(purchTable, packingSlipId);

To keep table groups on the same page, the table group should look like this:


Then, select the group row and set the properties “KeepTogheter” to True.


Deploy the report.


Align image logo to the right

1) In the DP class find the width of the image:

Image img = new Image();
CompanyInfo companyInfo = CompanyInfo::find();
CompnayImage companyImage = CompnayImage::findByRecord(comapnyInfo);


salesPackingSlipHeaderTmp.LogoWidth = img.Width();

2) Add the image to the report:


3) Set the parameters to take the image from the dataset:


4) In Visual Studio set the Size property (of the image) to “Original size” (Right click on the image > Properies > Size)

5) Add the following expression in the “padding left” expression:

=CSTR(211-First(Fields!LogoWidth.value, “DataSetName”)) + “pt”

Where 211 is the maximum size (in pixel) of the image.

6) Deploy the report

To export data to an excel file, we can use the SysExcelWorksheetHelper.
Here an example:

static void exportExcelFile(Args _args)
    SysExcelApplication     xlsApplication;
    SysExcelWorkBooks       xlsWorkBookCollection;
    SysExcelWorkBook        xlsWorkBook;
    SysExcelWorkSheets      xlsWorkSheetCollection;
    SysExcelWorkSheet       xlsWorkSheet;
    SysExcelWorksheetHelper worksheetHelper;
    SysExcelHelper          sysExcelHelper;
    VendRFQJour             vendRFQJour;
    int                     row = 1;
    str                     fileName;
    str                     worksheetName;
    Date                    deliveryDate;

    fileName    = "Path\\Test.xlsx";

    vendRFQJour = VendRFQJour::find("000103");

    worksheetName = "Worksheet name";
    sysExcelHelper = SysExcelHelper::construct();
    xlsWorkSheet = sysExcelHelper.addWorksheet(worksheetName);

    worksheetHelper = SysExcelWorksheetHelper::construct(xlsWorkSheet);

    worksheetHelper.addColumn(1, 'RFQ Id', Types::String);
    worksheetHelper.addColumn(2, 'Delivery date', Types::Date);

    worksheetHelper.setCellValue(1, row, 'RFQId');
    worksheetHelper.setCellValue(2, row, 'DeliveryDate');

    worksheetHelper.setCellValue(1, row, vendRFQJour.RFQId);
    worksheetHelper.setCellValue(2, row, vendRFQJour.DeliveryDate);


    info(strFmt("Creato file: %1", fileName));

Tag Cloud