≡ Menu




Every organization sold product or services to Customer. These Customer are main source of income to these organization. In Dynamics 365 for finance and operations we can create customer in Account receivable and sales and marketing modules.  Customer basic information is saved per legal entity but his Name, address and contact save in global address book. That can be reusable in different legal entity with new customer account.

We can define customer from Account Receivable => Customer => All Customer

Sales and Marketing => Customers => All customers

 

 

If we open the customer list page, similar page will be appear. This page can be used as inquiry too. The customer created here will be used for sales, payment, Invoices and ledger accounts. Customer information can be changed any time.

 

 

Every Customer is created with unique id in Customer Account.  Default size of Customer Account is 20.

 

By clicking on new button from top menu , on list page a dialog opens where we can enter basic information. boxes with red boundaries are mandatory. Customer can be organization or individual entry. As I already mentioned that Customer Name, address  and even contacts are global across  application.

 

 

 

There are multiple options  available on save . Default option is save and go in detail page.

Other options are as follow

 

-Sales Quotations : Where we create Sales Quotations and start to enter the Sales quotations send to Customer in response to its RFQ.

-Project Order: Where customer saved and Project Quotations detail form opens.

-Sales Order: Customer Record saved and new sale order created against Customer and it goes directly Sales order detail page.

 

On click at Edit button to leads customer detail page in edit mode. We can modify information and save. This edit mode can available on detail page also.

Out of the box Customer detail will be something similar

 

Customer Information and Contact:

 

Contact and Address can be added from Addresses and Contact information.

 

 

Invoice and delivery Information of Customer:

 

Some cases, we invoice the customer other then customer It self. Some times Same customer purchase things with different customer Account. In that case we invoiced shipment to another customer Id. For this purpose Dynamics 365 for finance provide Invoice Account in “Invoice and delivery” fast tab.

In the case of Invoice account not set in Invoice and Delivery fast tab then Invoice will be created against Customer Account as default.

The delivery terms, mode of delivery, receipt calendar can be specified in the Delivery area. This information will default to the sales order header.

If you want to calculate Sales tax against customer Invoice, you have to set Sales tax in Invoice and Delivery fat tab.

 

Customer Payment Information:

 

Payment management options can set in customer Payment fast tab

 

You can set

  • Terms of payment
  • Method of payment
  • Payment specification
  • Payment schedule.
  • Payment day
  • Cash discount. A cash discount is used as an incentive for customers that pay
  • before due date.
  • Bank account
  • Bank account number

 

 

 

Customer Financial Dimension:

Customer financial dimension can be set from  financial Dimension fast tab. These financial dimension automatically copied in sale order and customer invoices if they are set at customer level. These financial dimension can be modify and over right.

Sales order related default settings:

 

From Sale Order Defaults fast tab, you can set Preferred shipped from ware house and site and also Bill to customer. Bill to customer can be set in account number. This account number will be copied to Sale order header instead of customer own Account number. It means, we can set different Account for bill to customer .

 

 

Ware house management Fast tab.

 

Here we can set Ware house management level information. Fast tab related to Advance ware house management module.

Following options are here.

ASN : Means, Advance shipment notification generate for customer.

Fulfillment rate.  The threshold required before releasing to Warehouse.

Value Type:  Fulfillment rate apply to Price, Quantity or to None.

Fill entire shipment- shipment processing parameter to control fully shipment allocation during work creation.

Default status id – default status for inventory transaction.

{ 0 comments }




Procurement and sourcing

{ 0 comments }




Hi All I found very interesting video about Project Management and accounting module of Dynamics 2012 R3 by Santosh kumar Singh. Video is worth to share.

 

 

{ 0 comments }




 

 

Today I have to record very small tip. During development of on SSRS report for Dynamics Ax 2012 R3, End user wants a row at the report footer for  analysis. he wants some kind of percentage  calculation with ‘%’.  A For this I have to use CStr ssrs expression function  like

 

Ctr(((sum(DataSet!field.Value) / sum(DataSet!field.Value)))*100)+”%”.

 

Now it is string and shows number of decimal as it result from division. For example  5.4356333. But end user wants formatting like 5.43 .

It is string or text value and SSRS textbox formatting is not apply on it.

 

Following SSRS expression works for me.

 

 

 

Left(CStr(5.4356333),instr(CStr(5.4356333),”.”)+2)

 

 

My Updated expression is something like this

 

Left(CStr(IIF(Parameters!ProductionReportBM2DS_ItemName.Value = “ITEM-00000420”,((sum(Fields!Scrap.Value)/sum(Fields!TotalConsumption.Value))*100),((sum(Fields!CutLength.Value)/sum(Fields!TotalConsumption.Value))*100))),instr(CStr(IIF(Parameters!ProductionReportBM2DS_ItemName.Value = “ITEM-00000420″,((sum(Fields!Scrap.Value)/sum(Fields!TotalConsumption.Value))*100),((sum(Fields!CutLength.Value)/sum(Fields!TotalConsumption.Value))*100))),”.”)+2) +”%”

{ 0 comments }




Small tip, with reference at the end of post. I got small task, User want Last approval Name in grid at the result.

I wrote following code snippet as method in a required table and bind it to grid field.

 

display Name LastApprovalName()

{

WorkflowTrackingStatusTable workflowTrackingStatus;

WorkflowTrackingTable workflowTrackingTable;

WorkflowTrackingCommentTable workflowTrackingCommentTable;

UserInfo userInfo;

RecId _recId;

Name _name;

_recId=5637145391;

select firstFast RecId, User from workflowTrackingTable

order by RecId desc

join workflowTrackingCommentTable

where workflowTrackingCommentTable.WorkflowTrackingTable == workflowTrackingTable.RecId

join UserInfo

where UserInfo.id == WorkflowTrackingTable.User

exists join workflowTrackingStatus

where workflowTrackingTable.WorkflowTrackingStatusTable == workflowTrackingStatus.RecId

&& workflowTrackingStatus.ContextRecId == this.RecId

&& workflowTrackingStatus.ContextTableId == tableNum(MyTablelRequestTable) //PurchTable

&& workflowTrackingTable.TrackingType == WorkflowTrackingType::Approval;

if (workflowTrackingTable.RecId > 0)

{

_name=userInfo.name;

 

}

else

{

_name='';

}

return _name;

}

 

 

 

Original Code snippet is https://community.dynamics.com/ax/b/amazingax1/archive/2016/04/28/microsoft-dynamics-ax-2012-get-workflow-last-approver-name-and-approved-date

{ 0 comments }




We can set credit limit for customer. Customer can purchase product or services up to certain limit. Even D365 for finance and operations provide us option to generate error message and stop processing of Sale order or just show error message and let the transaction happened.

 

For this you have to enable customer credit limit option from Account Receivable => step up => Account Receivable parameters.

 

 

 

 

 

In Account receivable parameter form, you  can found Credit limit option in Credit Rating  menu

 

 

If you explore Credit limit type you find following options

 

On selecting None, which is default means, credit limit functionality is disabled. Balance means, credit limit check against

Customer current balance, Next option is balance plus amount generated against packing slip and Product Receipt.

Third option is Balance + all include Packing slip, sale order and transaction activities.

 

 

 

Next option is when message exceeding the limit

 

We find one more option is on this page. This option is either apply credit limit on free text Invoice on .

 

Now we can set credit limit on Customer page, For this open required Customer and form detail page you can update credit limit. You can find Credit limit in Credit and collections fast tab

 

 

For more detail explore following link:

https://docs.microsoft.com/en-us/dynamics365/unified-operations/supply-chain/sales-marketing/credit-limits-customers

{ 0 comments }




 

 

Book is excellent. It is handy and cover the almost all technical scenarios with very simple and precise examples. It is scenario based book, Instead a lot of story and unnecessary details, It focus to the point. As compare to previous cook books, which were more abstract, this feel book wrote in mind of fresh graduates or new developers in Dynamics Ax / Dynamics 365 for finance and operations.  After reading book, I feel it is like jigsaw puzzle, you can create a full customization by arrange piece by piece if you have this book. It contains everything which I come across in my 5 years’ experience for Dynamics.

 

Followings are chapters and my review.

 

Processing Data:

 

This chapter covers from creating new model, project in visual studio to complex Sql query execution.  Here you can find, creating a new sequence number, rename primary key, use regular table as temporary table. How to create query object at run time. And how to execute SQL Query directly in X++ code.

My favorite recipe here is ” How to use regular table as temporary table”.

 

Working with Forms

This chapter gives us very basics of Dynamics 365 for finance and operations forms. Very precise examples for day to day  scenarios.  These recipes contains how to make dialog, tips on catching dialog events, building dynamic form, creating a model form, storing the last values in form. Tree view control, Adding a view detail link. Also good detail of Dynamics form Patterns in Dynamics 365 for finance and operations.

 

My favorite recipe here is ” Storing Last values in form “.

 

 

Working with Data in Forms

This chapter covers the recipes for data manipulations in forms.  It covers sequence number handling, creating custom filter controls. Building a selected  or available list. Processing multiple record, Coloring the records, adding images to different record.

My favorite recipe is ” coloring the records “;

 

 

Building Lookups

 

This chapter covers the lookups based on different scenario, I found all are practical example for building Lookups

 

Processing Business Tasks.

This chapter is amazing. Containing everything you need to customize. You will find here, segment entry control, creating and posting general entry posting with X++ code, processing of Project ledger,  creating and posting of ledger voucher, creating Sales order, purchase order and electronic payment format.

 

 

Data Management

This chapter provide recipes of data migration for example,  data entities, data entities with multiple sources, Data packages, import export and trouble shooting.

 

 

Integration with Microsoft Office.

 

This chapter covers the integration with Excel and word using add-in, workbook designer, custom ax lookup in excel. And creating word document with repeated elements.

 

 

Integration with Power BI.

This chapter is also good, recipe for Dynamics 365 for finance and operations starts with Configuring Power BI, consuming data in Excel, Integration with excel, developing interactive Dashboards, embedding Power BI visuals.

 

Integration with services.

 

Couple of years back, I was integration expert, I did a lot of integration. This chapter is favorite for me. I was never be good designer, So services attract me more. Just write, consume, map fields schedule and run. I still do integrations of dynamics with. Even with devices like thumb recognition and attendance machines available locally with HR and Payroll.

 

This chapter contains the recipes

Custom service development, authentication with native client also with Azure. Consuming services in Json and soap. You can also find about Odata services. And also consuming external web services in Dynamics 365 for finance and operations.

 

 

Improving development efficiency and performance.

 

This chapter name seems not right, noting about performance here. It feels what left is placed here, Still recipes are valid and from practical day to day development / customization scenarios. Like extensions, display methods, calculate code execution time, enhance insert, delete and update time. Writing efficient SQL Queries. Event handler and delegate handlers.

 

 

I recommend you to read this book.

{ 0 comments }




 

 

I found very interesting video regarding UI tips for Dynamics 365 for finance and operations. Its worth to share so it is here

 

{ 0 comments }




Today I face the very strange behavior of X++ code.

We develop customization. We generate transfer and issuance through X++.

Logic was very simple,If stock is available then transfer  / Issuance or Adjustment journal create otherwise generate error message, We took this decision  based of query on Inventsum. It works fine in most of cases but In one case when stock is zero it fails. We create Movement Journal to generate stock in that Item variant.  The select query always return Zero stock in posted quantity. Even I get the recid in debug mode and placed in table explorer, Quantity is available in table explore.

This case occurs when got Zero stock in Inventsum table and we try to increase stock by movement journal, other wise select on InventSum works fine.

 

The query will be very similar

 

Select * from InventSum where Inventsum.ItemId == line.ItemId && inventSum.invetdimId == line.fromInventiDimId;

 

This will not work. Even Db synch, Inc Cil, Cache clear done, even Restart the Test server AOS.

 

I have to switch code from select query to Class InventOnhand. Very similar to following.

 

InventOnHand inventOnhand

InventDim       InventDim;

InventDimParm inventDimParm;

 

 

inventDimParm.initFormInventDim(_Line.FromInventDimId);

inventOnHand = InventOnhand::newParameters(_line.Itemid,_line.FromInventDimId,inventDimParm);

 

If (inventOnHand.availPhysical() > _line.RequestedQty)

{

Info( ” Quantity Avalible “);

}

Else

{

Info (” Not available “);

}

 

Its works perfectly fine. I think  InventonHand class is better the do direct query on Inventsum table.

 

{ 0 comments }




I one of last post, I added the custom financial dimension in D365 for finance and operations.
You can find this post here
https://www.tech.alirazazaidi.com/custom-financial-dimension-in-dynamics-365-for-finance-and-operations-ax-7/

In next post I load financial dimension in custom lookup.

Custom lookup for Financial Dimension D365 for Finance and Operations (Dynamics Ax 7)

But above link shows only out of the box financial dimensions. But what about custom financial dimension,

I tested the following code snippet works custom dimension. It load custom dimension mentioned in

Custom Financial Dimension in Dynamics 365 for Finance and Operations (AX 7)


[FormControlEventHandler(formControlStr(FrmTestDetail, FormStringControl1), FormControlEventType::Lookup)]
public static void FormStringControl1_OnLookup(FormControl sender, FormControlEventArgs e)
{

SysTableLookup sysTableLookup;
Query query;
QueryBuildDataSource qbdsDimensionFinancialTag;
QueryBuildRange qbrFinancialTagCategory;
String20 LC;
RecId _recid;
DimensionAttribute _attribute;
Name _name=’jaggah_tax’;

;
// super();

//#define.MyCustomFinancialDimension(‘LC’)
// select * from attribute where attribute.Name ==_name;
// recid = attribute.financialTagCategory();

query = new Query();
qbdsDimensionFinancialTag = query.addDataSource(tableNum(DimensionFinancialTag));
qbrFinancialTagCategory = qbdsDimensionFinancialTag.addRange(fieldNum(DimensionFinancialTag, FinancialTagCategory));
qbrFinancialTagCategory.value(strFmt(‘%1’, DimensionAttribute::findByName(_name, false).financialTagCategory()));

sysTableLookup = sysTableLookup::newParameters(tableNum(DimensionFinancialTag), sender,true);
sysTableLookup.addLookupfield(fieldNum(DimensionFinancialTag, Value), true);
sysTableLookup.addLookupfield(fieldNum(DimensionFinancialTag, Description));
sysTableLookup.addSelectionField(fieldNum(DimensionFinancialTag, FinancialTagCategory));
sysTableLookup.parmQuery(query);

sysTableLookup.performFormLookup();

FormControlCancelableSuperEventArgs ce = e as FormControlCancelableSuperEventArgs;
//cancel super() to prevent error.
ce.CancelSuperCall();

}

Output is here

{ 0 comments }