GKK Compressor Industry – Part 3: Goods Receipt to SAP

A three months Tentative Production Plan helps procurement division to plan what material to acquire to support the production of compressor at the production site. There are two types of materials to be shipped to a production plant,

  1. Movement of material from one plant to the destination production plant/storage
  2. Delivery Order directly from its supplier to the plant/storage

Nintex Mobile application is being used at the plant supporting Goods Receipt at the point where materials are being received. This minimized the need for personnel at the plant to receive goods by noting it on paper, and the need to go back to the office desktop to update the good receipts using a desktop computer with SAP console installed. Updates of good movement is now instantly done over at the point of good receipts using Nintex Mobile, and data are being updated immediately to the SAP system powered by Nintex Workflow with Workflow Connectors provided by Theobald Software.

For the purpose, a “Goods Receipt” form was created using Nintex Form as shown in the diagram below, Nintex Form features bar code or QR code scanning, eliminates the potential human mistakes of typing in long serial number of goods received. Nintex Form could easily be prepared to surface on different devices without much efforts. In this article, as our focus is to look at the integration of Nintex and SAP, we going to keep the form explanation simple here.

Once the data is captured and submitted to the Goods Receipt list, the associated workflow will be triggered to process the data by posting the data to a remote SAP system. This was done with simply using the ERPConnect Services connectors provided by Theobald Software. ERPConnect by Theobald comes with a set of ready to use connectors as shown in the diagram below.  

In this requirement, I have made use of the “Call SAP function” action, it provides full capability to integrate with SAP by simply calling all the available SAP functions, plus the “Z” functions. One thing I find it easy is Theobald Software has a complete documentation and tutorials available on-line (i.e. OnlineHelp – Theobald Software GmbH ) that helps me to do what I need to do for the intergration project. Diagram below shows the “Call SAP Function” action configuration, followed by a table with values I have supplied to the action. 

Table below shows the values i have passed to the required parameters of the “Call SAP function” action. Take note that in my scenario i have fixed some of the values to simplify for the demo purpose. In an actual scenario, we will need to substitute the values reflecting what we have in our form/list design.

GOODSMVT_CODE
GM_CODE05
GOODSMVT_HEADER
PSTNG_DATEfn-FormatDate(Current Date, yyyyMMdd)
DOC_DATE
Tables: GOODSMVT_ITEM
MATERIALR-B209
PLANT1100
STGE_LOC0001
MOVE_TYPE501
ENTRY_QNT
Output
output.GOODSMVT_HEADRET.MAT_DOCMAT_DOC

This is working great so far if we only update one material a time through the “Call SAP Function” action. In our form we have a repeating section where we allow to input more than one material model at any time. Luckily, the action has taken this into consideration as well, this is where we will need to use the “Additional XML table input” parameter of the table section in the “Call SAP Function” action. Theobald-software’s help scenario has provided a very good example on how this could be configured  OnlineHelp – Theobald Software GmbH

Following the example provided in OnlineHelp – Theobald Software GmbH, I have added another Query XML action to wrap the required format of the XML table as below

The final XML content to be passed to the “Additional XML table input” should look similar to the below (i.e. substitute the variables or Item properties with what reflects your design). 

 <?xml version="1.0" encoding="utf-8" standalone="yes" ?><TABLES><TABLE name="GOODSMVT_ITEM"> <GOODSMVT_ITEM>     <MATERIAL>{WorkflowVariable:Material}</MATERIAL>     <PLANT>{ItemProperty:Plant}</PLANT>     <STGE_LOC>{ItemProperty:Storage_x0020_location}</STGE_LOC>     <MOVE_TYPE>{ItemProperty:Movement_x0020_type}</MOVE_TYPE>     <ENTRY_QNT>{WorkflowVariable:Qty}</ENTRY_QNT>  </GOODSMVT_ITEM>  <GOODSMVT_ITEM>     <MATERIAL>{WorkflowVariable:Material}</MATERIAL>     <PLANT>{ItemProperty:Plant}</PLANT>     <STGE_LOC>{ItemProperty:Storage_x0020_location}</STGE_LOC>     <MOVE_TYPE>{ItemProperty:Movement_x0020_type}</MOVE_TYPE>     <ENTRY_QNT>{WorkflowVariable:Qty}</ENTRY_QNT>  </GOODSMVT_ITEM></TABLE></TABLES>‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

Here is how the final “Call SAP function” action look like. The formatted XML content is set to valrible “XMLInputGoodsmvt_Item” which is assigned to the “Additional XML table input” field of the action.

GKK Compressor Industry – Part 2: Production Planning powered by Nintex Workflow

I am going to demonstrate a Production Planning process that is powered by Nintex Workflow in this blog post. Before we get further into the production planning process, let us recap what we have gone through together in my previous sharing in Part 1 of GKK Compressor Industry (i.e. RFQ to Quotation process). In the Sales and Marketing division, Product Catalog is being used to create RFQ, which in turn generates quotations issued to customers. Every quotation issued to customer updates the Sales Forecast with the increased number of compressor model to be delivered.

Being a Lean Manufacturing, Production Planning is crucial to GKK Compressor Industry, the critical success factor is produced only what is needed to be delivered on time. It keeps no unnecessary inventory to minimize the waste of inventory space. Tentative Production Plan is always three months ahead of current month, helps the Procurement to keep the Material Management efficient, knowing what material and quantity of material to order with advance knowledge of the requirement from the production.

Key techniques in the production planning to be shared:

  1. Nintex Form Web Part embedded to the “Draft Production Plan” list/page
  2. “Loop” action alternative for immediate execution
  3. Formatting a monthly calendar with CSR

The Production Plan

The Production Plan is a plan used in the production division with details on what models and quantity of compressor to be produced for a particular month. A production line has its daily production capacity that is dependent on machine and human resource capacity. If a production line can go up to 60 pieces of compressor per calendar day with full capacity running three work shifts, two work shifts will give capacity of 40 pieces.

To get the Actual Production Plan, we draft a production plan from monthly sales forecast with details on what models and quantities to be delivered. The diagram below demonstrates how it’s being created powered by Nintex Workflow. The sample plan shows how the quantity of each model to be produced spread over different days with daily capacity of 30 pieces per day for October 2017. 

To produce a total of 71 pieces of compressor for the first model (i.e. SVT125-35), the work has to be spread into three days, with the third day producing the remaining 11 pieces required to make it 71, since on the third day we produced only 11 pieces for the model, it has the remaining capacity of 19 to produce the next model in line (i.e. SHT277NA in the example).

1. Nintex Form Web Part embedded to the “Draft Production Plan” list/page

I find Nintex Form Web Part very useful especially when I need to make Sharepoint page interactive, but it wasn’t discussed a lot. The Draft Production Plan is just one of the solutions I make use of Nintex Form Web Part to get user to specify or collect Production Plan parameters (i.e. Month, Year, Capacity, and to or not to include week ends as working days for the production plan we are drafting). To include that, I simple embed the “Create Production Plan” workflow’s start form to the “Draft Production Plan” view/page as shown below. Once the form is submitted (i.e. with the Start button in the example), the “Create Production Plan” site workflow will be triggered, and the Draft Production Plan list will be refreshed with the production plan that was drafted by the site workflow.

2. “Loop” action alternative for immediate execution

The algorithm I used for drafting a production plan is summarized as below. I have then realized, it took hours for the workflow to complete a “Production Plan”, reason being the “Loop” action will be executed every 5 minutes by default as it is executed by the Sharepoint Timer Job, even If I configured the Timer Job to run every 1 minute (i.e. minimum interval by Sharepoint), it still take a long time for the workflow to be completed.

  Prepare an empty "Draft Production Plan" view (delete all the existing list items)  Query the "Sales Forecast" for models to be produced for the specified month  For-each models in the list     Create a list item for the model to be produced     Split the total quantity for the model into the number of days required     Loop through each calendar day of the production month            Update the daily quantity for the model to the list item (i.e. exclude/include week end)      End Loop   End For-each‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

We have no choice but to consider to use the “For Each” iteration. Even if you use the State Machine, it is still depending on the Timer Job interval constraint. In order to do that, we will need to calculate the number of loop required, and create a collection of the required number to use the For-each iteration. So, if the quantity to be produced is 71, 71 divide by daily capacity of 30 equals to 2.3667. We get the whole number of 2 leaving behind the fraction, as 2 will be used as collection index of 2 for three iteration (i.e. index starts at 0). This is true if we always start a day with the new daily capacity (e.g. 30), but we will need to consider what if capacity for the day is not always starts from the beginning. In the sample production plan above, the quantity of 22 for model SNT207V is taking 2 days to produce, because the capacity of the day it starts the production was 1 (i.e. 30-29=1) as 29 was used to produce the model prior to it. To get the right count of iteration required, we will need to add the remaining quantity of the last model before we divide the quantity with the capacity, the two calculation actions shown below give the right formula to get the required number of iteration.

3. Formatting a monthly calendar with CSR

From the above Draft Production Plan example, I have customized the “Draft Production Plan” custom list into a calendar look and feel, by coloring the columns representing “week end” into grey. The Custom Side Rendering (i.e. CSR) is a feature by Sharepoint is being used to get the calendar view.

SP.SOD.executeFunc("clienttemplates.js", "SPClientTemplates", function() { 
     SPClientTemplates.TemplateManager.RegisterTemplateOverrides({ 
          OnPostRender: function(ctx) {
               var rows = ctx.ListData.Row;
               var month = rows[0]["Month"];
               var year = rows[0]["Year"];
               var weekends = [];
               var date = new Date(year, month, 0);
               var lastDay = date.getDate();
               for (var d=1;d<=lastDay;d++)
               {
                    date.setDate(d);
                    if (date.getDay()==0 || date.getDay()==6){
                         weekends.push(d);
                    }
               };
               for (var i=0;i<rows.length;i++)
                    {
                         var rowElementId = GenerateIIDForListItem(ctx, rows[i]);
                         var tr = document.getElementById(rowElementId);
                         for (var j=0, len=weekends.length; j<len;j++){
                              var td=tr.cells[weekends[j]+2];
                              td.style.backgroundColor = "#eeeeee";
                         }
                    }
               }
     }); 
});

I have include the script as JSLink shown below

GKK Compressor Industry – Part 1: RFQ to Quotation with Nintex Workflow Cloud

RFQ to Quotation

We all know we are here because we work on something that is related to Nintex Workflow or Forms, and the reason we use Nintex Workflow or Forms is because it makes our life easier. Things have changed a lot these days, trending towards the cloud, hybrid environment becoming very common that most of us are working on both on premise platform and at the same time on the cloud. Regardless of which platform you use, you will find Nintex helps.

Part 1 of GKK Compressor Industry blog series, I am going to share exactly how I use my hybrid environment to save the efforts for my recent investment – GKK Compressor Industry. GKK Compressor Industry is “Lean Manufacturing” produces world class compressors. Moving towards a Six Sigma company, Simplifying Processes and Reduced Errors falls in its Lean Six Sigma project mission to turn the company into highly effective and efficient company.

RFQ (i.e. Request for Quotation) is one of the key Sales and Marketing processes involving its customers. The figure of RFQ to Quotation shown above, demonstrates how Nintex Forms is use allowing customers or internal sales to fill up an RFQ form powered by Nintex Forms. The output of RFQs are Sales Forecast (i.e. use for Production Planning) and Quotations (i.e. issued to customers). The process is simplified at GKK Compressor Industry, Nintex Workflows automates the RFQ process by getting the unit price for the requested compressor models to provide the prices, and it auto generates an Quotation in Excel Format, and finally it updates the Sales Forecast with the quoted Compressor models. The RFQ process not just simplifies the process with reduced steps, it also eliminates potential human errors by auto generating the required quotations.

The quotation generation is done by simply calling a Nintex Workflow Cloud workflow from its RFQ process powered in its Sharepoint environment. It’s worth taking a trip to Nintex Workflow Cloud for a quote generation, as we realized it supports OpenApi (i.e. Swagger) by its Xtensions framework. We make use of the Xtensions to include the Microsoft Graph API connectors in Nintex Workflow Cloud helping us to create quotation based on our pre-designed Excel Quotation template, as we only need some functions to create Excel quotation, we brought in only few Excel related end-points of the Microsoft Graph API.

Microsoft Graph API - Excel

Based on the connectors defined and shown under the Microsoft Graph API – Excel action group, you will notice there is no connector to create or copy excel file, this is because I have made use of Nintex Workflow Cloud’s default Sharepoint conector to copy a Excel Quotation Template to a new quotation with the name I provided. The Sharepoint “Copy a file” connector’s configuration is shown below.

Sharepoint connector - Copy a file

Once the new file is created/copied from a pre-designed template, what I will need is basically

  1. “Add table rows” for quotation items
  2. “Delete table rows” for unwanted rows in the excel table
  3. “Update a nameditem” for its value
  4. And so on…

I have attached my swagger file for the Microsoft Graph API – Excel connectors. Few notes to take if you want to implement the Graph API for Excel using the swagger file shared in this blog:

  • To enable the connector, you will need to create an Azure Active Directory application (i.e. here Is my previous blog on how to create one https://community.nintex.com/community/tech-blog/blog/2016/10/20/microsoft-graph-api-from-nwc)
  • Excel related operation of Microsoft Graph API seems to work only with its “beta” version (i.e. not the “1.0” version) for files resides on Sharepoint library (i.e. I am not sure why and if this is correct, but I only managed to get it work with the “beta” version).
  • There are two ways to create the Azure Active Directory app, one via the new Azure Portal, the other using the old portal (i.e. I only got it works with Active Directory app created by the old Azure portal)