Skip to main content

Auto create job card journal in Production | AX 2012

Multiple journals are created in the production process. When the order is started route card journal and picking list journal are auto created. But system does not create job card journal automatically. It requires a small customization. Following method can be called when the production order is started with the production order id passed as the parameter.

/// <summary>
/// This method auto creates Job Card Journal and its lines against selected production order.
/// </summary>


private void autoCreateJobCardJournal(ProdId _prodId)
{
    ProdJournalTable    prodJournalTable;
    ProdRoute           prodRoute;
    ProdRouteJob        prodRouteJob;
    ProdJournalRoute    prodJournalRoute;
    ProdParametersDim   prodParametersDim;
    int                 jobLinesCount = 0;
   
    if (_prodId != "")
    {
        // select job card journal name as set on parameters form
        select firstOnly JobCardJournalNameId
            from ProdParametersDim;
   
        // create job card journal
        prodJournalTable.initWaitCreateLine(ProdParametersDim.JobCardJournalNameId,
                                            _prodId,
                                            ProdJournalType::JobCard,
                                            str2time(""),
                                            ProdRouteJob::findProdId

(_prodId).OprNum);
       
        prodJournalTable.SystemBlocked = NoYes::No;
        prodJournalTable.EndJob = NoYes::No;
        prodJournalTable.insert();  
       
        // create lines against job card journal
        while select prodRouteJob
            where prodRouteJob.ProdId == _prodId
                join prodRoute
                where prodRoute.ProdId == prodRouteJob.ProdId &&
                      prodRoute.OprNum == prodRouteJob.OprNum
        {
            prodJournalRoute.clear();
            prodJournalRoute.JournalId      = prodJournalTable.JournalId;
            prodJournalRoute.WrkCtrId       = prodRouteJob.WrkCtrId;
            prodJournalRoute.JobType        = prodRouteJob.JobType;
            prodJournalRoute.OprNum         = prodRouteJob.OprNum;
            prodJournalRoute.OprPriority    = prodRouteJob.OprPriority;
            prodJournalRoute.ProdId         = prodRouteJob.ProdId;
            prodJournalRoute.JobId          = prodRouteJob.JobId;
            prodJournalRoute.TransDate      = systemDateGet();
            prodJournalRoute.OprId          = prodRoute.OprId;
            prodJournalRoute.CategoryQtyId  = prodRoute.QtyCategoryId;
            prodJournalRoute.QtyGood        = prodRoute.CalcQty;
       
            prodJournalRoute.insert();
       
            jobLinesCount++;
        }
       
        // update number of lines against job card journal
        prodJournalTable.NumOfLines = jobLinesCount;
        prodJournalTable.update();
   
        info(int2str(jobLinesCount) + " job card lines created against Job Card

Journal " +
            prodJournalTable.JournalId + " and Production Order " +

prodJournalTable.ProdId);
    }
}


This is it! :)

Comments

Popular posts from this blog

Get Position and Department of an employee | AX 2012

A simple job to get position/designation and department of an employee using employee id: static void WorkerPositionDepartment(Args _args) {     HcmWorker                       hcmWorker;     HcmPositionWorkerAssignment     hcmPositionWorkerAssignment;     OMOperatingUnit                 oMOperatingUnit;     HcmPositionDetail               hcmPositionDetail;     HcmJob                          hcmJob;     HcmPosition             ...

Run SSRS report using x++ code | AX 2012

This post describes how to run an SSRS report through x++ code and passing report parameters as well. Its a simple code and comments are added for further ease in code understanding! public static void runSSRSReport() {     SrsReportRunController controller;             controller = new SrsReportRunController();     controller.parmLoadFromSysLastValue(false);      // write report name and its design in quotes that you want to run     controller.parmReportName("ReportName.DesignName");      // set additional, optional properties like setting landscape to true     controller.parmReportContract().parmPrintSettings().landscape(true);          // set print destination screen/printer/file etc.     controller.parmReportContract().parmPrintSettings().printMediumType (SRSPrintMediumType::S...

How to pass value from form to class, AX 2012

Courtesy : DUG Dynamics User Group It's very simple to pass value from a form to a class by defining a method on form and using args.caller() in the class. 1. Take a String control in the form design like  string Customer Name. 2. Go to String control properties and set "Auto declaration" property to "Yes". 3. Go to form methods -> new method -> write return type method like;           public str customerName()      {            return CustomerName.Text();      } 4. Go to main() method of the class and type following:     public static void main(Args args)     {            str custName;            ;                if(formHasMethod(a...