Wednesday 25 October 2017

Sales line Picking list using X++;

Sales line Picking list using X++;

public static void RetailCWItemSalesLinePick(SalesLine salesLine)
        {
            TmpInventTransWMS       tmpinventTransWMS;
            InventTrans             inventTrans;
            InventTransWMS_Pick     inventTransWMS_Pick;
            Query                   inventTransQuery;
            QueryBuildDataSource    qbdsInventTrans;
            QueryBuildRange         qbRange;
            InventTransChildType    inventTransChildType;
            InventTransChildRefId   inventTransChildRefId;
            ItemFreeTxt             rangeStr;
            counter                 inventTransChildTypeInt;
            InventMovement          inventMovement;
            InventTransOriginId     inventTransOriginId;
   
            inventTransQuery = new Query();
   
            qbdsInventTrans = inventTransQuery.addDataSource(tableNum(inventTrans));
            qbdsInventTrans.addRange(fieldNum(InventTrans,StatusReceipt)).value(SysQuery::value(StatusReceipt::None));
            qbdsInventTrans.addRange(fieldNum(InventTrans,StatusIssue)).value(SysQuery::range(StatusIssue::Picked,StatusIssue::OnOrder));
   
            inventMovement      = InventTransWMS_Pick::inventMovement(salesLine);
            inventTransOriginId = inventMovement.inventTransOriginId();
   
            if (inventMovement)
            {
                if (inventMovement.transChildType())
                {
                    inventTransChildType  = inventMovement.transChildType();
                    inventTransChildRefId = inventMovement.transChildRefId();
                }
                else
                {
                    inventTransChildType  = InventTransChildType::None;
                    inventTransChildRefId = '';
                }
            }
            inventTransChildTypeInt = inventTransChildType; // Avoid query problems with special characters in enum label.
            //range over all loaded movements
            qbRange = qbdsInventTrans.addRange(fieldNum(InventTrans,InventTransOrigin));
            rangeStr = strFmt('((%1.%2 == %3) && (%4.%5 == %6)',
                            qbdsInventTrans.name(),
                            fieldStr(InventTrans,InventTransOrigin),
                            queryValue(inventTransOriginId),
                            qbdsInventTrans.name(),
                            fieldStr(InventTrans,TransChildType),
                            inventTransChildTypeInt);

            if (inventTransChildRefId)
            {
                rangeStr = rangeStr + strFmt(' && (%1.%2 == \"%3\"))',
                            qbdsInventTrans.name(),
                            fieldStr(InventTrans,TransChildRefId),
                            queryValue(inventTransChildRefId));
            }
            else
            {
                // To avoid 2 times double quotes for the childRefId.
                rangeStr = rangeStr + strFmt(' && (%1.%2 == \"\"))',
                            qbdsInventTrans.name(),
                            fieldStr(InventTrans,TransChildRefId));
            }
            qbRange.value(rangeStr);
   
            ttsBegin;
            inventTransWMS_Pick = InventTransWMS_Pick::newStandard(tmpinventTransWMS,inventTransQuery);
            inventTrans         = InventTrans::findTransId(salesLine.InventTransId);
   
            inventTransWMS_Pick.createFromInventTrans(inventTrans);
            tmpinventTransWMS   = inventTransWMS_Pick.parmTmpInventTransWMS();
   
            select firstOnly forUpdate tmpinventTransWMS where tmpinventTransWMS.InventTrans == inventTrans.RecId;
            tmpinventTransWMS.InventQty = salesLine.RemainInventPhysical;
            tmpinventTransWMS.update();
            inventTransWMS_Pick.writeTmpInventTransWMS(tmpinventTransWMS);
   
            inventTransWMS_Pick.updateInvent();
   
            ttsCommit;


        }

Thursday 2 March 2017

Database Maintenance Plan (scheduling data base backup)


Below document shows how to create an automatic backup plan


Step 1 : Open the SQL management Studio and connect to the database server and as per the below screen create an Maintenance Plan



Step 2: SQL Maintenance plan Wizard is opened and give next



 Step 3: Specify the name for the job, and make sure after the completion of giving proper name, no white spaces allowed 


Step 5: On above screenshot there is a column named as Schedule in that click on the change button
                In which you can Schedule timing when backup need to be occurred




Step 6: After Creating the Schedule, as mention in the below screen give Next




Step 7: Next check the Backup check box and give Next


Step 8: Whatever Checkbox you have selected will be mentioned, as you can see in the below Screen and then give Next




Step 9: After choosing the full database backup, select the required database and click ok





Step 10: In Destination column, choose the path in where the backup need to be stored as you can see in below screen




 Step 11: After creating the path give next, in this step you can choose where the Log file need to be stored.
Note: Log files will show the statement of the backup plan job




Step 12: Finish the job plan 







Monday 6 February 2017

Code to retrieve financial dimension values from fin dimid


Code to retrieve financial dimension values from fin dimid : 


DimensionValue getDimensionValue(RefRecID dimensionSetRecID,Name attributeName)
{
 
    DimensionAttributeValueSet      dimAttrValueSet;
    DimensionAttributeValueSetItem  dimAttrValueSetItem;
    DimensionAttributeValue         dimAttrValue;
    DimensionAttribute              dimAttribute;
 
    dimAttrValueSet = DimensionAttributeValueSet::find(dimensionSetRecID);
 
    select dimAttrValueSetItem
        where   dimAttrValueSetItem.DimensionAttributeValueSet      == dimAttrValueSet.RecId
    join dimAttrValue  
        where   dimAttrValue.RecId                                  == dimAttrValueSetItem.DimensionAttributeValue
    join dimAttribute      
        where   dimAttribute.RecId                                  == dimAttrValue.DimensionAttribute
        &&      dimAttribute.Name                                   == attributeName;
 
    return dimAttrValue.getValue();      
}