วันอาทิตย์ที่ 23 ธันวาคม พ.ศ. 2555

SubQuery

PRINCIPLES
1.(SELECT...)
2.can use with SELECT,FROM,WHERE,HAVING

EX1
SELECT CustTable.CustID, CustTable.balance, (
SELECT SUM( CustTable.balance )
FROM CustTable
), CustTable.balance / ( 
SELECT SUM( CustTable.balance ) 
FROM CustTable ) *100

FROM `custtable`

EX2
SELECT * FROM CustTable WHERE CustTable.Balance >= ( SELECT avg(CustTable.Balance) FROM CustTable );
EX3 SELECT iCityID, sCityName FROM citymaster c where iCityID in(SELECT iStateID FROM statemaster s)

วันเสาร์ที่ 22 ธันวาคม พ.ศ. 2555

Over Dues and Over balance Customer

SELECT CustTable.CustName,CustTable.Balance ,Sum(SalesLine.LineAmt),Salestable.DuesDate
FROM CustTable,Salestable,SalesLine
WHERE CustTable.CustID = Salestable.CustID
  And Salestable.SalesID = SalesLine.SalesID
  And Salestable.DuesDate > now()
  and CustTable.Balance > 1000
GROUP BY CustTable.CustName,CustTable.Balance,Salestable.DuesDate
Order By CustTable.Balance  Desc

Max Balance Customer


SELECT CustTable.CustName,Max(CustTable.Balance)
FROM CustTable
Group by CustTable.CustID
Order by Max(CustTable.Balance) Desc
Limit 0,1

Top 10 Item


Select InventTable.ItemID,sum(SalesLine.LineAmt)
FROM SalesLine,SalesTable,InventTable
WHERE SalesTable.SalesID = SalesLine.SalesID
  And InventTable.ItemID= SalesLine.ItemID
Group By InventTable.ItemID
Order By sum(SalesLine.LineAmt) DESC
Limit 0,10

Top 10 Customer


Select CustTable.CustName,sum(SalesLine.LineAmt)
FROM SalesLine,SalesTable,CustTable
WHERE SalesTable.SalesID = SalesLine.SalesID
  And SalesTable.CustID = CustTable.CustID
Group By CustTable.CustName
Order By sum(SalesLine.LineAmt) DESC
Limit 0,10

วันอาทิตย์ที่ 25 พฤศจิกายน พ.ศ. 2555

update reflesh master


real SumHoldHFP(ProdJournalRoute _ProdJournalRoute)
{
    real rSumQty;
    SWAN_ProdJournalRoute_Hold _SWAN_ProdJournalRoute_Hold;
    SWAN_Hold_Problem   _SWAN_Hold_Problem;
 
    ;


    select sum(Qty) from _SWAN_ProdJournalRoute_Hold
    where _SWAN_ProdJournalRoute_Hold.JobId == _ProdJournalRoute.JobId
    &&    _SWAN_ProdJournalRoute_Hold.JournalId == _ProdJournalRoute.JournalId
    &&    _SWAN_ProdJournalRoute_Hold.Sequence  == _ProdJournalRoute.Sequence
    join _SWAN_Hold_Problem
    where _SWAN_Hold_Problem.CodeHold == _SWAN_ProdJournalRoute_Hold.Code
    && _SWAN_Hold_Problem.IDHoldGroup == "HFP";


    rSumQty = _SWAN_ProdJournalRoute_Hold.Qty;

  /*
    callerForm         = element.args().caller();

   callerForm.dataSource().refresh();

   callerForm.dataSource().reread();

    callerForm.dataSource().research();
    */
    return rSumQty;
}


SWAN_ProdJournalRoute_Hold

public void refresh()
{
    ProdJournalTable _ProJournalTable;
    ;

    select _ProJournalTable
    where _ProJournalTable.JournalId == ProdJournalRoute.JournalId;

    if(_ProJournalTable.Posted == NoYes::No)
    {
        rSumHoldHFP = element.SumHoldHFP(ProdJournalRoute);
        ProdJournalRoute.HoldFP = rSumHoldHFP;
        rSumHoldMAT = element.SumHoldMAT(ProdJournalRoute);
        ProdJournalRoute.HoldMat = rSumHoldMAT;
        rSumHoldWIP = element.SumHoldWIP(ProdJournalRoute);
        ProdJournalRoute.HoldProd = rSumHoldWIP;
    }

    super();
}

public void delete()
{
    ProdJournalTable _ProJournalTable;
    ;

    select _ProJournalTable
    where _ProJournalTable.JournalId == ProdJournalRoute.JournalId;

    if(_ProJournalTable.Posted == NoYes::No)
    {
        rSumHoldHFP = element.SumHoldHFP(ProdJournalRoute);
        ProdJournalRoute.HoldFP = rSumHoldHFP;
        rSumHoldMAT = element.SumHoldMAT(ProdJournalRoute);
        ProdJournalRoute.HoldMat = rSumHoldMAT;
        rSumHoldWIP = element.SumHoldWIP(ProdJournalRoute);
        ProdJournalRoute.HoldProd = rSumHoldWIP;
    }

    super();
}

วันอังคารที่ 20 พฤศจิกายน พ.ศ. 2555

คืนค่า External Downtime,External Downtime,Production Time ในProdJournalRoute


 Datasource :: SWAN_ProdJournalRoute_Downtime
public void delete()
{
    ProdJournalTable _ProdJournalTable;
    SWAN_DownTime_Problem _SWAN_DownTime_Problem;
    ProdJournalRoute _ProdJournalRoute;
    ;

    select _ProdJournalTable
    where _ProdJournalTable.JournalId == ProdJournalRoute.JournalId;
    if(_ProdJournalTable.Posted == NoYes::No)
    {
        element.Downtime();
    }

  //  info(strfmt("%1",SWAN_ProdJournalRoute_Downtime.HoursUse));

     select _SWAN_DownTime_Problem
     where _SWAN_DownTime_Problem.Code == SWAN_ProdJournalRoute_Downtime.Code_Problem;

   //  info(strfmt("%1",_SWAN_DownTime_Problem.TimeStatus));

    select _ProdJournalRoute
    where _ProdJournalRoute.JournalId == SWAN_ProdJournalRoute_Downtime.JournalId
      &&  _ProdJournalRoute.JobId     == SWAN_ProdJournalRoute_Downtime.JobId;
    //  &&  _ProdJournalRoute.Sequence ==  SWAN_ProdJournalRoute_Downtime.Sequence;

   if(_SWAN_DownTime_Problem.TimeStatus == 1)
   {
   ProdJournalRoute.TimeInternal = ProdJournalRoute.TimeInternal - SWAN_ProdJournalRoute_Downtime.HoursUse;
   ProdJournalRoute.update();
   ProdJournalRoute.reread();
   }
   else if(_SWAN_DownTime_Problem.TimeStatus == 2)
    {
   ProdJournalRoute.TimeExternal = ProdJournalRoute.TimeExternal - SWAN_ProdJournalRoute_Downtime.HoursUse;
   ProdJournalRoute.ProTime      = ProdJournalRoute.ProTime + SWAN_ProdJournalRoute_Downtime.HoursUse;
   ProdJournalRoute.update();
   ProdJournalRoute.reread();
   }

  //  info(strfmt("%1",_ProdJournalRoute.ProTime));

    super();
}

วันศุกร์ที่ 9 พฤศจิกายน พ.ศ. 2555

Update inventTrans From InventJournalTrans(Transfer)


static void UpdateTransactionFromInventJournalTrans(Args _args)
{
    InventTrans inventTrans;
    InventJournalTrans injts;
    InventJournalTable injt;
    ;

    ttsbegin;
    while select forupdate  inventTrans
    join injts
    where injts.InventTransId == inventTrans.InventTransId
    join injt
    where injt.JournalId == injts.JournalId
    //&& injt.JournalId == "IV12-32167"
    && injt.JournalNameId == "IRON-R12"
  //  && injt.JournalNameId == "IRON-W12"
    {

       print injts.InventTransId;
       print inventTrans.InventTransId;
       print injts.ItemId;
       print inventTrans.ItemId;
       print injts.VBS_2ndQty;
       print inventTrans.VBS_2ndQty;
      // pause;

       inventTrans.VBS_2ndQty = injts.VBS_2ndQty;
       inventTrans.update();

    }

     while select forupdate  inventTrans
    join injts
    where injts.ToInventTransId == inventTrans.InventTransId
    join injt
    where injt.JournalId == injts.JournalId
   // && injt.JournalId == "IV12-32167"
    && injt.JournalNameId == "IRON-R12"
  //  && injt.JournalNameId == "IRON-W12"
    {

       print injts.InventTransId;
       print inventTrans.InventTransId;
       print injts.ItemId;
       print inventTrans.ItemId;
       print -1*injts.VBS_2ndQty;
       print inventTrans.VBS_2ndQty;
       //pause;

       inventTrans.VBS_2ndQty = -1*injts.VBS_2ndQty;
       inventTrans.update();

    }
    ttscommit;
    info("Finished");
}

วันพฤหัสบดีที่ 8 พฤศจิกายน พ.ศ. 2555

Job Update2ndQty


static void Update2ndQty(Args _args)
{
   inventDim inventDim;
   inventSum inventSum;
   unitConvert unitConvert;
   inventSum inventSum2;
   ;

   while select inventDim
   where inventDim.InventLocationId == "omcan"
   // iron ,mfg1,2,5
   // iron24
   // paiboon
   // ks
   // apc
   // omcan

  //  ||   inventDim.InventLocationId == "MFG1"
 //  &&  inventDim.inventSerialId == "GB152957"
   {
      print inventDim.InventLocationId;
      print inventDim.inventDimId;
      print inventDim.inventBatchId;

      while select  inventSum
      where inventSum.ItemId Like "R*"
         && inventSum.InventDimId == inventDim.inventDimId
      {
  //    ttsbegin;
      select unitConvert
      where  unitConvert.FromUnit == "Sheet"
       && unitConvert.ToUnit == "Ton"
      &&  unitConvert.ItemId == inventSum.ItemId;


      print inventSum.InventDimId;
      print inventSum.ItemId;
      print "on order :";
      print inventSum.OnOrder;
      print "PostedQty :";
      print inventSum.PostedQty;
      print "Received :";
      print inventSum.Received;
      print "Deducted :";
      print inventSum.Deducted;
      print "Registered :";
      print inventSum.Registered;
      print "Picked :";
      print inventSum.Picked;



      print "VBS_2ndOnOrder :";
      print inventSum.VBS_2ndOnOrder;
      print "New VBS_2ndOnOrder: ";
      print inventSum.OnOrder * unitConvert.Factor;

      print   unitConvert.Factor;
      print unitConvert.Factor * inventSum.OnOrder;
      print unitConvert.Factor * inventSum.PostedQty;
      print unitConvert.Factor * inventSum.Received;
      print unitConvert.Factor * inventSum.Deducted;
      print unitConvert.Factor * inventSum.Registered;
      print unitConvert.Factor * inventSum.Picked;

      print inventSum.Arrived;
      print inventSum.VBS_2ndArrived;
      print inventSum.Ordered;
      print inventSum.VBS_2ndOrdered;
      print inventSum.ReservOrdered;
      print inventSum.VBS_2ndReservOrdered;

   //   pause;

              ttsbegin;
              while select forupdate  inventSum2
              where inventSum2.ItemId == inventSum.ItemId
                 && inventSum2.InventDimId == inventDim.inventDimId
               //  && inventSum2.
              {
             //decround (1.2 , 0)
             inventSum2.VBS_2ndArrived =  decround ((inventSum.Arrived * unitConvert.Factor),0);
             inventSum2.VBS_2ndOrdered =  decround ((inventSum.Ordered *  unitConvert.Factor),0);
             inventSum2.VBS_2ndReservOrdered =  decround ((inventSum.ReservOrdered * unitConvert.Factor),0);
             inventSum2.VBS_2ndOnOrder = decround ((inventSum.OnOrder * unitConvert.Factor),0);
             inventSum2.VBS_2ndPostedQty = decround ((unitConvert.Factor * inventSum.PostedQty),0);
             inventSum2.VBS_2ndReceived = decround ((unitConvert.Factor * inventSum.Received),0);
             inventSum2.VBS_2ndDeducted = decround ((unitConvert.Factor * inventSum.Deducted),0);
             inventSum2.VBS_2ndRegistered = decround ((unitConvert.Factor * inventSum.Registered),0);
             inventSum2.VBS_2ndPicked = decround ((unitConvert.Factor * inventSum.Picked),0);


             inventSum2.update();

      }
      ttscommit;

 //   ttscommit;
      }
   //  print "---";
   // return this.VBS_2ndPostedQty + this.VBS_2ndReceived - this.VBS_2ndDeducted + this.VBS_2ndRegistered - this.VBS_2ndPicked;


}
 info("Finish");
}

วันเสาร์ที่ 27 ตุลาคม พ.ศ. 2555

Group -> ( Sum && While Select +=Sum )


static void Q_Eff_Report_Excel(Args _args)
{
  // SWAN_Machine_Capacity _SWAN_Machine_Capacity;
   ProdJournalTable  _ProdJournalTable;
   ProdJournalRoute  _ProdJournalRoute;
   counter counter;
   ProdJournalTable  _ProdJournalTable2;
   ProdJournalRoute  _ProdJournalRoute2;
   // sum(QtyGood)
   ProdJournalTable  _ProdJournalTable3;
   ProdJournalRoute  _ProdJournalRoute3;
   // sum(Target)
   ProdJournalTable  _ProdJournalTable4;
   ProdJournalRoute  _ProdJournalRoute4;
 
 //  SWAN_Machine_Capacity _SWAN_Machine_Capacity2;
   ;
  //  while
  //  select * from _SWAN_Machine_Capacity
  //  order by _SWAN_Machine_Capacity.MachineNo
  //  group by _SWAN_Machine_Capacity.MachineNo
  //  where _SWAN_Machine_Capacity.MachineNo Like "C*"
  //  {
    //    print "<---------------";
   //     print _SWAN_Machine_Capacity.MachineNo;
   //     pause;

        while select _ProdJournalTable
        order by _ProdJournalTable.MachineNo, _ProdJournalTable.Team, _ProdJournalRoute.ActualCap asc //, _ProdJournalRoute.WrkCtrId
        group by _ProdJournalTable.MachineNo, _ProdJournalTable.Team, _ProdJournalRoute.ActualCap//, _ProdJournalRoute.WrkCtrId
        where _ProdJournalTable.MachineNo Like "C*"
        join _ProdJournalRoute
        where _ProdJournalRoute.JournalId == _ProdJournalTable.JournalId
           && _ProdJournalRoute.JobStatus == "Working"
        //  &&  _ProdJournalRoute.TransDate   == mkDate(13,07,12)
        //   && _ProdJournalRoute.WrkCtrId  == _ProdJournalTable.WrkCtrId
        {
             print _ProdJournalTable.MachineNo;    // << Alert! Mandatory
             print _ProdJournalTable.Team;         // << Alert! Mandatory
             print _ProdJournalRoute.ActualCap;    // << Alert! Mandatory
         //  print _ProdJournalRoute.JobStatus;
         //  print _ProdJournalRoute.WrkCtrId;
             counter++;

           //  print "--------------->";
             print "---------";
             pause;

             while select _ProdJournalTable2
             join _ProdJournalRoute2
             where _ProdJournalRoute2.JournalId == _ProdJournalTable2.JournalId
                && _ProdJournalTable2.MachineNo == _ProdJournalTable.MachineNo
                && _ProdJournalTable2.Team == _ProdJournalTable.Team
                && _ProdJournalRoute2.ActualCap == _ProdJournalRoute.ActualCap
             {
                print "          ---------";
                print _ProdJournalTable2.MachineNo;    // << Alert! Mandatory
                print _ProdJournalTable2.Team;         // << Alert! Mandatory
                print _ProdJournalRoute2.ActualCap;    // << Alert! Mandatory
                print "QtyGood";
                print _ProdJournalRoute2.QtyGood;
                print "Target";
                print _ProdJournalRoute2.Target;
               
             }

             select sum(QtyGood) from _ProdJournalRoute3
             where _ProdJournalRoute3.ActualCap == _ProdJournalRoute.ActualCap
             join  _ProdJournalTable3
             where _ProdJournalRoute3.JournalId == _ProdJournalTable3.JournalId
                && _ProdJournalTable3.MachineNo == _ProdJournalTable.MachineNo
                && _ProdJournalTable3.Team == _ProdJournalTable.Team;
                print "SUM(QtyGood)";
                print _ProdJournalRoute3.QtyGood;
               
               
             select sum(Target) from _ProdJournalRoute4
             where _ProdJournalRoute4.ActualCap == _ProdJournalRoute.ActualCap
             join  _ProdJournalTable4
             where _ProdJournalRoute4.JournalId == _ProdJournalTable4.JournalId
                && _ProdJournalTable4.MachineNo == _ProdJournalTable.MachineNo
                && _ProdJournalTable4.Team == _ProdJournalTable.Team;
                print "SUM(Target)";
                print _ProdJournalRoute4.Target;
               
             print  SWAN_TimePlus::Plus(0.5,0.55);
             print  _ProdJournalRoute.JobStatus;
             pause;
           

             /*
            _JobStatusId          =  _ProdJournalRoute.JobStatus;
            rBuffsum              =  rSumWorkingTime; rSumWorkingTime = 0;
            rSumWorkingTime      +=  element.TimePlus(rBuffsum, _ProdJournalRoute.SWAN_HourUse);
            rSumQtyGood          +=  _ProdJournalRoute.QtyGood;
            rSumTarget           +=  _ProdJournalRoute.Target;
            rSumHoldProcess      +=  _ProdJournalRoute.HoldProd;
            rSumHoldMaterial     +=  _ProdJournalRoute.HoldMat;
            rSumWaste            +=  _ProdJournalRoute.QtyError;
            rBuffsum              =  rSumInternalDowntime; rSumInternalDowntime = 0;
            rSumInternalDowntime +=  element.TimePlus(rBuffsum, _ProdJournalRoute.TimeInternal);
            rBuffsum              =  rSumExternalDowntime; rSumExternalDowntime = 0;
            rSumExternalDowntime +=  element.TimePlus(rBuffsum, _ProdJournalRoute.TimeExternal);
             */

        }
      print counter;
      pause;
  //  }

   // << What!
   // How .MachineNo relation with .WrkCtrId ?
   // >>




}

วันศุกร์ที่ 12 ตุลาคม พ.ศ. 2555

Export to Excel


static void Q_Prod_Eff_All_DoubleDie_MFG3(Args _args)
{
   // Retreive data
   ProdJournalRoute _ProdJournalRoute;
   ProdJournalTable _ProdJournalTable;
   SWAN_Machine_Capacity _SWAN_Machine_Capacity;
   ProdTable _ProdTable;
   Date _fromDate;
   Date _toDate;
   // Export to Excel
   SysExcelApplication  xlsApplication;
   SysExcelWorkBooks    xlsWorkBookCollection;
   SysExcelWorkBook     xlsWorkBook;
   SysExcelWorkSheets   xlsWorkSheetCollection;
   SysExcelWorkSheet    xlsWorkSheet;
   SysExcelRange        xlsRange;
   CustTable            custTable;
   int                  row = 1;
   str                  fileName;
   ;


   // Export to Excel
   //Filename
   fileName = "C:\\Test.xlsx";


   //Initialize Excel instance
   xlsApplication           = SysExcelApplication::construct();

   //Open Excel document
   //xlsApplication.visible(true);


   //Create Excel WorkBook and WorkSheet
   xlsWorkBookCollection    = xlsApplication.workbooks();
   xlsWorkBook              = xlsWorkBookCollection.add();
   xlsWorkSheetCollection   = xlsWorkBook.worksheets();
   xlsWorkSheet             = xlsWorkSheetCollection.itemFromNum(1);


   //Excel columns captions
   xlsWorkSheet.cells().item(row,1).value("Machine No.");
   xlsWorkSheet.cells().item(row,2).value("ProdId");
   xlsWorkSheet.cells().item(row,3).value("JournalId");
   xlsWorkSheet.cells().item(row,4).value("Team");
   xlsWorkSheet.cells().item(row,5).value("Trandate");
   xlsWorkSheet.cells().item(row,6).value("ActualCap");
   xlsWorkSheet.cells().item(row,7).value("Fullcap");

   row++;


    while
    select * from _SWAN_Machine_Capacity
    group by MachineNo
    order by MachineNo
    where _SWAN_Machine_Capacity.MachineNo Like "DD*"
    {
       print "----------------------------";
       print  _SWAN_Machine_Capacity.MachineNo;
       print "----------------------------";
       //strMachineNO = _SWAN_Machine_Capacity.MachineNo;

     // Group by Team and Full,Acutualcap and ItemId and ProdId and JournalId
        while
        select * from _ProdJournalTable
        where _ProdJournalTable.MachineNo ==  _SWAN_Machine_Capacity.MachineNo
        join _ProdJournalRoute

        where _ProdJournalRoute.ProdId == _ProdJournalTable.ProdId
        && _ProdJournalRoute.JournalId == _ProdJournalTable.JournalId
        &&  _ProdJournalRoute.TransDate   == mkDate(10,08,12)  // dialog feild
        // _ProdJournalRoute.TransDate    <= DateTo    // dialog feild
        {
           // print _ProdJournalTable.MachineNo;
            print _ProdJournalTable.ProdId;
            print _ProdJournalTable.JournalId;
            print _ProdJournalTable.MachineNo;
            print _ProdJournalTable.Team;
            print _ProdJournalRoute.FullCap;
            print _ProdJournalRoute.ActualCap;
            print _ProdJournalRoute.TransDate;

            //Find ItemId
            select _ProdTable
            where _ProdTable.ProdId == _ProdJournalTable.ProdId;
            print _ProdTable.ItemId;
            print "++++++++++++++++++++++++++++++";
            pause;



            xlsWorkSheet.cells().item(row,1).value(_ProdJournalTable.MachineNo);
            xlsWorkSheet.cells().item(row,2).value(_ProdJournalTable.ProdId);
            xlsWorkSheet.cells().item(row,3).value(_ProdJournalTable.JournalId);
            xlsWorkSheet.cells().item(row,4).value(_ProdJournalTable.Team);
            xlsWorkSheet.cells().item(row,5).value(_ProdJournalRoute.TransDate);
            xlsWorkSheet.cells().item(row,6).value(_ProdJournalRoute.ActualCap);
            xlsWorkSheet.cells().item(row,7).value(_ProdJournalRoute.FullCap);
            row++;

        }

      //  break;


    }


   //Check whether the document already exists
    if(WinApi::fileExists(fileName))
      WinApi::deleteFile(fileName);


   //Save Excel document
   xlsWorkbook.saveAs(fileName);

   //Open Excel document
   xlsApplication.visible(true);


   //Close Excel
   //xlsApplication.quit();
   //xlsApplication.finalize();

}

วันจันทร์ที่ 8 ตุลาคม พ.ศ. 2555

X++ : Dialog


static void Pan_AxDialog(Args _args)
{
    Dialog d1;
    DialogGroup dg1;
    DialogField df1,df2;
    ;
   
    d1 = new Dialog("Jet");
    d1.addGroup("Group");
    d1.addField(TypeID(CustAccount),"Account Number");
   
    if(d1.run())
    {
    //  print df1.value();
    print " run";
    }
    else
    {
      print "not run";
    }
    pause;
}

X++ : Map

วันจันทร์ที่ 1 ตุลาคม พ.ศ. 2555

วันอังคารที่ 11 กันยายน พ.ศ. 2555

ดึงราคาจากPO ก่อน Movement/Transfer จากรายงาน inventTranlist


display real PricePerUnit()
{
  real realRet;
  PurchIdBase ret;
  InventTrans  inventTrans_PONO;

  PurchLine  purchline;
  ;

     while select inventTrans_PONO
     where inventTrans_PONO.TransType == InventTransType::Purch
     && inventTrans_PONO.ItemId    == InventTrans.ItemId
     && inventTrans_PONO.InventTransId <= InventTrans.InventTransId
     {
        ret = inventTrans_PONO.TransRefId;
     }
  if(inventTrans.TransType == InventTransType::Purch)
   {
      ret = "";
   }

 if(ret != "")
{
      select purchline
      where purchline.PurchId == ret
         && purchline.ItemId == InventTrans.ItemId;

     realRet = purchline.PurchPrice;
      }
  else
 {
    realRet = 0;
  }

  return  realRet;
}

วันอาทิตย์ที่ 2 กันยายน พ.ศ. 2555

Create JournalMovement


Boolean CreateJournalMovement()
{

InventJournalTable journalTable;
InventJournalTrans journalTrans;
JournalTableData journalTableData;

InventJournalId journalId;
InventJournalName journalName;

;
ttsbegin;
//journalName = InventJournalName::find([MyJournalName]);
journalName = InventJournalName::find("M-FG");

journalTable.clear();

journalTable.JournalNameId=journalName.JournalNameId;
//rint journalTable.JournalNameId;
//ause;


journalTableData = JournalTableData::newTable(journalTable);
journalTableData.initFromJournalName(journalTableData.JournalStatic().findJournalName(journalTable.journalNameId));

journalTable.JournalId = journalTableData.nextJournalId();
   print journalTable.JournalId;
journalTable.Reservation = ItemReservation::Automatic;
journalTable.insert();


//=== Journal Trans ===//
journalTrans.clear();
journalTrans.JournalId = journalTable.JournalId;
journalTrans.JournalType = journalName.JournalType;
journalTrans.LedgerAccountIdOffset = journalName.LedgerAccountIdOffset;

   print journalTrans.JournalId;
   print journalTrans.JournalType;
   print journalTrans.LedgerAccountIdOffset;
   pause;
 
 //  BBCN0001

//journalTrans.ItemId = [MyItemId];
journalTrans.ItemId = "BBCN0001";

//journalTrans.initFromInventTable(InventTable::find([MyItemId]),False,False);
journalTrans.initFromInventTable(InventTable::find("BBCN0001"),False,False);



//ournalTrans.InventDimId = [MyInventDimId];
journalTrans.InventDimId = "DM-0000001";

journalTrans.TransDate = SystemDateGet();
//journalTrans.Qty = [MyQty];
journalTrans.Qty = 1000;
//journalTrans.PriceUnit = [MyPriceUnit];
journalTrans.PriceUnit = 1000;
//journalTrans.CostPrice = [MyCostPrice];
journalTrans.CostPrice = 999;
journalTrans.CostAmount = journalTrans.calcCostAmount();

print journalTrans.CostAmount;
pause;


journalTrans.insert();
ttscommit;

 info("Create journal movement is done.");

return true;

}

Reference http://oromux.wordpress.com/2008/07/02/ax-create-journal-movement-via-x/
Thanks....

SysGlobalCache ไว้เก็บค่า Global


static void SysGlobalCache(Args _args)
{
   SysGlobalCache globalCache;
   ;
   globalCache = ClassFactory.globalCache();
   globalCache.set(curuserid(), 1, "One");
   globalCache.set(curuserid(), 2, "two");
 
   print globalCache.get(curuserid(), 1);
   print globalCache.get(curuserid(), 2);
   globalcache.remove(curuserid(), 1);
   pause;
   print globalCache.get(curuserid(), 1);
   print globalCache.get(curuserid(), 2);
   pause;
}

อ้างอิง http://learnax.blogspot.com/2010/01/globalcache-alternative-to.html
Thanks.... Nagaraj Jadhav | India 

How to use:
To Set a Value:
static void GlobalCacheSet(Args _args)
{
SysGlobalCache globalCache;
;
globalCache = ClassFactory.globalCache();
globalCache.set(curuserid(), 1, "One");

To Get the Value:
static void GlobalCacheGet(Args _args)
{
SysGlobalCache globalCache;
;
globalCache = ClassFactory.globalCache();
print globalCache.get(curuserid(), 1);
globalcache.remove(curuserid(), 1);
pause;
}

วันพุธที่ 22 สิงหาคม พ.ศ. 2555

Post Movement By Code


static void PostMovement(Args _args)
{
   InventJournalTable inventJournalTable;
   InventJournalName   xInventJournalName;
   InventJournaltrans inventJournaltrans;
  
   
   InventJournalCheckPost inventJournalCheckPost;
   ;
   xInventJournalName = InventJournalName::find(InventParameters::find().MovementJournalNameId);

   info(strfmt("%1", xInventJournalName.JournalType));
   inventJournalTable.initFromInventJournalName(xInventJournalName);

   inventJournalTable.JournalNameId = 'IMov';
   inventJournalTable.insert();

   inventJournaltrans.JournalId =  InventJournalTable.JournalId;
   info(strfmt("%1", inventJournaltrans.JournalId));
   inventJournaltrans.Voucher = '8000_999';
   inventJournaltrans.ItemId = '1005';
   inventJournaltrans.InventDimId = '00000465_069';
   inventJournaltrans.Qty = 1000;
   inventJournaltrans.TransDate = mkdate(1,10,2009);
   inventJournaltrans.insert();
  
 
   inventJournalCheckPost =     InventJournalCheckPost::newJournalCheckPost(JournalCheckPostType::Check,inventJournalTable);
   inventJournalCheckPost.run();
  
  
   //
}

วันพฤหัสบดีที่ 16 สิงหาคม พ.ศ. 2555

ดึงค่า Pool


/*
void create(boolean _append = false)
{
    ;
    inCreate = true;
    if (! journalFormTable.datasourceCreatePre())
    {
        inCreate = false;
        return;
    }

    super(_append);

    journalFormTable.datasourceCreatePost();
    inCreate = false;
}
*/

void create(boolean _append = false)
{
   // Pantep Cust1
    ProdTable     prodTable2setProdPoolId;
   // End Cust1
    ;
    inCreate = true;
    if (! journalFormTable.datasourceCreatePre())
    {
        inCreate = false;
        return;
    }

    super(_append);

   // Pantep Cust1
    select firstonly ProdPoolId from prodTable2setProdPoolId
    where prodTable2setProdPoolId.ProdId == ProdJournalTable.ProdId;

    ProdJournalTable.PoolId =  prodTable2setProdPoolId.ProdPoolId;
   // End Cust1


    journalFormTable.datasourceCreatePost();
    inCreate = false;
}

วันจันทร์ที่ 6 สิงหาคม พ.ศ. 2555

วันพุธที่ 1 สิงหาคม พ.ศ. 2555

All About Form

Link Type: มีหลายๆ datasource ใน Form เดียว

Link ปกติ
Inner Join : เอาเฉพาะมี link
Outer Join : เอาที่ไม่มี Link ด้วย -> ตัวที่ไม่มี Link จะแสดง Recordใน Mater ที่ไม่มี Link ด้วย
Exist  Join : เอาเฉพาะตารางหลัก ที่มี link
Not Exist  Join : เอาเฉพาะตารางหลัก ที่ไม่มี link
Link พิเศษDelayed : default
Passive : ไว้ตอนเขียนโค้ดเอง
Active : ..

Dynalink เช่นตอนดู Transaction ของ Item

ในตัวอย่างนี้เขียนที่ Datasource ของฟอร์ม CustTrans เพื่อทำ DynaLink ใหม่

void init()
{
    Query   query;
    ;

    super();
    //  Clear Dynalink
    /*
    this.query().dataSourceNo(1).clearDynalinks();
    criteriaOpen = this.query().dataSourceNo(1).addRange(fieldnum(CustTrans,Closed));
    custTransDetails = new CustTransDetails(custTrans);
    */
    //

    // Cutomize Dynalink

    this.query().dataSourceNo(1).clearDynalinks();
    this.query().dataSourceTable(tablenum(CustTrans)).addDynalink(
                     fieldnum(CustTrans,AccountNum),
                     element.args().record(),
                     fieldnum(SalesTable,CustAccount));
    criteriaOpen = this.query().dataSourceNo(1).addRange(fieldnum(CustTrans,Closed));

    custTransDetails = new CustTransDetails(custTrans);
  ..





วันเสาร์ที่ 28 กรกฎาคม พ.ศ. 2555

HourUse (no bug)

real HourUse(real rFromTime, real rToTime)
{
    real rTimeFrom, rTimeTo, rTimeRa, rTimeRb, rTimeRc, rTimeR;
    int  iTimea, iTimeb;
    real rTimeMinute;
    int  turn2minute;
    ;

    rTimeFrom  =  rFromTime;
    rTimeTo =  rToTime;

    if( rTimeFrom == rTimeTo)
    {
      rTimeR = 0;
    }
   
    else if(rTimeTo > rTimeFrom)
    {
      rTimeR =  (rTimeTo-  rTimeFrom)/3600;

      if((rTimeTo - rTimeFrom) mod 3600 != 0)
      {
        rTimeMinute = (((rTimeTo - rTimeFrom) mod 3600)/60)*0.01; // minute
        turn2minute = rTimeR; // hour (cut minute by interger variable)
      }
      rTimeR = turn2minute + rTimeMinute; // hour.minute
    }
    else if(rTimeTo < rTimeFrom)
    {
      rTimeR = 12 + (rTimeTo + 43200 - rTimeFrom)/3600;
      if((rTimeTo - rTimeFrom) mod 3600 != 0)
      {
        rTimeMinute = 0.60 + (((rTimeTo - rTimeFrom) mod 3600)/60)*0.01; // minute
        turn2minute = rTimeR; // hour (cut minute by interger variable)
        rTimeR = turn2minute + rTimeMinute; // hour.minute
      }
    }
   // info(strfmt("%1 - %2 = %3 = %4 Hrs %5 Minute",rTimeTo,rTimeFrom,(rTimeTo - rTimeFrom),rTimeR,rTimeMinute));
    return rTimeR;
}

วันศุกร์ที่ 27 กรกฎาคม พ.ศ. 2555

วันพุธที่ 18 กรกฎาคม พ.ศ. 2555

Args


static void CallJobByCoding(Args _args)
{
  Args                    args;
    ;
  args = new Args();
  args.name(identifierStr(Job10));
  new menuFunction(menuItemActionStr(Job10), MenuItemType::Action).run(args);
}

static void CallFormByCoding(Args _args)
{
  Args                    args;
    ;
  args = new Args();
  args.name(identifierStr(Material_SWAN));
   new menuFunction(menuItemDisplayStr(Material_SWAN), MenuItemType::Display).run(args);
}
static void CallReportByCoding(Args _args)
{
  Args                    args;
    ;

  args = new Args();
  args.name(identifierStr(SWAN_PurchHist));
  new menuFunction(menuItemOutputStr(SWAN_PurchHist), MenuItemType::Output).run(args);
}

วันพุธที่ 11 กรกฎาคม พ.ศ. 2555

Collection Class : List,Set,Map,Array


static void AList(Args _args)
{
   List enumList  =  new List(Types::Enum);
   ListEnumerator       enumerator;

   List integerList = new List(Types::Integer);
   ListEnumerator       integerEnumerator;

   ;
   enumList.addStart(ABC::A);
   enumList.addEnd(ItemType::Item);
   enumList.addEnd(ItemType::BOM);
   enumList.addEnd(NoYes::Yes);

   integerList.addStart(2);
   integerList.addStart(1);
   integerList.addEnd(3);

   enumerator = enumList.getEnumerator(); // set ListEnumerator to manage List
   enumerator.reset(); //go to begin of enumerator
   //ListEnumerator manage List !
   enumerator.moveNext();
   enumerator.moveNext();
   info(strfmt("%1",enumerator.current()));

}

วันจันทร์ที่ 9 กรกฎาคม พ.ศ. 2555

ส่ง parameter แบบ string, enum และ record


ที่ FormA
void clicked()
{
    // Args class is usually used in Axapta for passing parameters between forms
    Args            args;
    FormRun         formRun;
    EmplTable       emplTable;
    // Our custom made class for passing complex set of parameters
   // FormBParams     formBParams = new FormBParams();
    //Array           items = new Array( Types::String );
   // int         i;
    ;

    args = new args();

    // Our values which we want to pass to FormB
    // If we want pass just simple string we can use 'parm' method of 'Args' class

    //-------------------------ส่ง parameter แบบ String,Enumและ Record----------------------
    args.parm(CustTable.Name );
    // We also can pass enum value to FormB
    args.parmEnum( NoYes::Yes );
    args.parmEnumType( EnumNum( NoYes ) );
    // and also can pass a cursor pointing to some record (in our case it is EmplTable )
    args.record( CustTable );


    // Run FormB
    args.name( formstr( FormB ) );
    formRun = classFactory.formRunClass( Args );
    formRun.init();
    formrun.run();
    formrun.wait();
    /*
    if( formrun.closedOk() )
    {
        //answerFromFormB.text( args.parm() );
        info(strfmt("%1",args.parm()));
    }
    */
    super();
}



ที่ FormB
void clicked()
{
      CustTable       CustTableRecord;
    //FormBParams     formBParams;
    Array           items;
    int             i;
    ;
    super();

    // Check for passed arguments
    if( element.args() )
    {
        // get string parameter
       info(strfmt("%1",(element.args().parm())));

        if( element.args().parmEnumType() == EnumNum( NoYes ) )
        {
            info(strfmt("%1",( element.args().parmEnum())));
        }

           // get record parameter
        if( element.args().record() && element.args().record().TableId == TableNum( CustTable ) )
        {
            CustTableRecord =  element.args().record();
           // emplName.text( emplTableRecord.Name );
           info(strfmt("%1 : %2",CustTableRecord.AccountNum,CustTableRecord.Name));
        }

    }
}

วันศุกร์ที่ 6 กรกฎาคม พ.ศ. 2555

ทวน NAV

ฝั่งซื้อ
1. เปิด PR ที่ Req.WworkSheet แล้วติ๊กถูก ที่ Confirm
2. ข้อมูลจะวิ่งไปที่ Req.WorkSheet(Approve) ให้หัวหน้าแผนก ผู้จัดการ ติ๊ก Approved
                  ++ Requisitionline WHERE(Confirmed = Flilter(Yes))
3. แล้วไปที่ 
Req.WorkSheet(Make Order) เพื่อเลือกฟังก์ชัน Carry Out Action Message เพื่อสร้างเป็น PO ต่อไป
                  ++  
Requisitionline WHERE(Approved = Flilter(Yes))
4. แล้วจะได้ Purchase Order ที่สร้างมาจาก PR โดยผ่านการ 
Confirmed และ Approved
   ++ Purchase Header WHERE (Document Type = Filter(Order))



Order GRN    >=POST=>   ตาราง 120,121 โดยเก็บประวัติการรับแต่ละครั้ง
PO                 >=POST=>   ดูจาก Navigator,   Item Ledger, Value Entry
IINVOICE     >=POST=>  Posted Purchase Invoice,GL Entry,Vat Entry(ถ้ามี Vat),Detail Vendor Ledg. Entry, Value Entry

5. Credit Memo ก่อน Post จะอยู่ที่ Purchase Header กับ Purchase Line
    หลัง Post จะอยู่ที่ Credit Memo ตาราง 124,125


ฝั่งขา
1. เปิด Quote ใบเสนอราคา 
   ++ Sales Header WHERE (Document Type=Filter(Quote))
    ให้ไป Make Order  เพื่อสร้างเป็น Sale Order จริงๆ
2. แล้วข้อมูลจะวิ่งไปที่ Order
    ++ Sales Header WHERE (Document Type=Filter(Order))
    ให้ไป Functions >> Release เป็น ใบส่งของ
3.  แล้วมาที่หน้า Sale Order - Shipment
    ++ 
Sales Header WHERE (Document Type=Filter(Order),status=Filter(<>Open))

4. Invoice 
การสร้าง invoice นั้นจะไม่ได้ดึงจาก Sale Order แต่เป็นการสร้างใหม่ที่ฟอร์ม Invoice
   ++ ales Header WHERE (Document Type=Filter(Invoice))



Warehouse
1. Item Journal มี Positive กับ Negative ไม่มีต้นทุน
2. Item Reclass ย้ายของ
2. BOM Journal ผลิตitemตาม KitBOM




วันอังคารที่ 3 กรกฎาคม พ.ศ. 2555

รายงาน cost ของแต่ละแผนก เป็นรายเดือน


Display Real GetCostAmt32()
{
    real                   ret;
    InventTrans            _InventTrans;
    InventJournalTrans     _InventJournalTrans;
    InventDim              _InventDim;
    InventTable            _InventTable;
    Date    FromDate,ToDate;

    InventJournalTable     _InventJournalTable;
    ;

    FromDate = str2date("01/11/"+ int2str(_Year), 123);
    ToDate = endMth(FromDate);

    select SUM(CostAmountAdjustment) from _InventTrans
    where  (_InventTrans.DateFinancial >= FromDate
       &&  _InventTrans.DateFinancial <= Todate)

    join   _InventJournalTrans
    where  _InventJournalTrans.InventTransId == _InventTrans.InventTransId
       &&  _InventJournalTrans.Dimension[1] == SWAN_SumPostedMovement_CostAmt_1.Department // Department 

    join   _InventTable
    where  _InventTable.ItemId ==_InventJournalTrans.ItemId
    &&     _InventTable.ItemGroupId  == SWAN_SumPostedMovement_CostAmt_1.ItemGroupId

    join   _InventDim
    where (_Inventdim.inventDimId == _InventJournalTrans.InventDimId)
       && _InventDim.InventLocationId == P_InventLocationId ;   // P_InventLocationId

    ret = _InventTrans.CostAmountAdjustment;
    adjCostNov = ret;
    return ret;
}

วันเสาร์ที่ 30 มิถุนายน พ.ศ. 2555

Physical Qty VS Financial Qty


plus received physical qty purchase packing slip
plus received physical qty customer return packing slip
plus received physical qty production order
plus received physical qty
plus purchased financial qty purchase invoice
plus purchased financial qty customer return invoice
plus purchased financial qty end production
plus purchased financial qty + movement,transfer, profit loss,bill of material
minus deduct physical qty sale packing slip
minus deduct physical qty vendor return packing slip
minus deduct physical qty
minus deduct physical qty
minus sold financial qty sale invoice
minus sold financial qty vendor return invoice
minus sold financial qty
minus sold financial qty - movment,transfer,profit loss, bill of material

วันพฤหัสบดีที่ 28 มิถุนายน พ.ศ. 2555

"ชนะได้เพราะไม่คิดเอาชนะ" ก่อศักดิ์ ไชยรัศมีศักดิ์

ไม่ต้องการให้เอาชนะคนอื่น แต่ไม่ต้องการให้เป็นผู้แพ้ โดยการควบคุมจิตใจต่อการยั่วยุของฝ่ายตรงข้าม ชัยชนะจึงมาจากการรักษาตัวเองไม่ให้แพ้กิเลสของตน

วันพุธที่ 27 มิถุนายน พ.ศ. 2555

lastestPurInvPrice


Display real lastestPurInvPrice()
{
   VendInvoiceTrans    vendInvoiceTrans;
   InventTrans         inventTrans;
   real                ret;
  ;

  // while loop for last record to get last price of invoiced purchase
  WHILE SELECT PurchPrice FROM vendInvoiceTrans
  WHERE vendInvoiceTrans.ItemId == InventSumDateTrans.ItemId
  {
    ret = vendInvoiceTrans.PurchPrice;
  }
  // if item have not purched(invoiced) then get cost price
  if(!ret)
  {
    SELECT firstonly inventTrans
    WHERE inventTrans.ItemId == InventSumDateTrans.ItemId;
    ret = inventTrans.CostAmountPhysical;
  }

  return ret;
}

วันจันทร์ที่ 25 มิถุนายน พ.ศ. 2555

ตรวจสอบข้อมูลก่อน post


void clicked()
{
    dialogButton    dialogCheckMessage;
    ;
  
    dialogCheckMessage = Box::okCancel(SalesParmTable.SalesId,dialogButton::Cancel,"ตรวจสอบข้อมูล");
    if(dialogCheckMessage == dialogButton::Ok)
    {
      
       info("OK");
       super();
    }
    else
    {
       info("Cancle");
       return;
    }    
}


=================================================================


void clicked()
{

    //vbs begin
    SalesParmLine               _SalesParmLineforCancle;
    CustConfirmJour             CustConfirmJour;
    CustConfirmTrans            CustConfirmTrans;
    // Pantep Cus1
    dialogButton                dialogCheckBeforePost;
    // End Cus1
    ;
    // Pantep Cus1.2

    dialogCheckBeforePost = Box::okCancel(strfmt("%1 \n %2",SalesParmTable.VBS_ReservedInvoice,SalesParmTable.Transdate),DialogButton::No,"Check before Post");


    if(dialogCheckBeforePost == DialogButton::Ok)
    {
    // End Cus1.2

    if(updateNow.value())
    {
        if(element.vbs_checkMultipleAccount())
        {
            error("Can not post multiple customer account");
            return;
        }
        switch (documentStatus)
        {
            case documentStatus::Confirmation:
                 if(!SalesparmTable.VBS_ReservedInvoice)
                 {
                    while select _SalesParmLineforCancle where _SalesParmLineforCancle.ParmId == SalesparmTable.ParmId
                    {
                        //info(strfmt("%1",_SalesParmLineforCancle.DeliverNow));
                        if(_SalesParmLineforCancle.DeliverNow < 0)
                        {
                            error("Please select reserved invoice to cancle");
                            return;
                        }
                    }
                 }
                 else
                 {
                    while select _SalesParmLineforCancle where _SalesParmLineforCancle.ParmId == SalesparmTable.ParmId
                    {
                        //info(strfmt("%1",_SalesParmLineforCancle.DeliverNow));
                        if(_SalesParmLineforCancle.DeliverNow < 0)
                        {
                            select forupdate CustConfirmJour where CustConfirmJour.VBS_ReservedInvoice == SalesparmTable.VBS_ReservedInvoice
                                                && CustConfirmJour.VBS_Cancel == NoYes::No;
                            if(CustConfirmJour)
                            {
                                ttsbegin;
                                CustConfirmJour.VBS_Cancel = NoYes::Yes;
                                CustConfirmJour.update();
                                ttscommit;
                            }
                            element.close();
                            info(strfmt("Invoice %1 has been cancled",SalesparmTable.VBS_ReservedInvoice));
                        }
                        else
                        {
                            select forupdate CustConfirmJour where CustConfirmJour.VBS_ReservedInvoice == SalesparmTable.VBS_ReservedInvoice
                                                && CustConfirmJour.VBS_Cancel == NoYes::No;
                            if(CustConfirmJour)
                            {
                                ttsbegin;
                                CustConfirmJour.VBS_ReservedInvoice = "";
                                CustConfirmJour.update();
                                ttscommit;
                            }
                        }
                    }
                 }
                 break;
            case documentStatus::PickingList:
                 if(!SalesparmTable.VBS_ReservedInvoice)
                 {
                    if(!element.vbs_checkPickingList())
                     {
                        error("Please select reserved invoice");
                        return;
                     }
                 }
                 break;
            case documentStatus::PackingSlip:
                 if(!SalesparmTable.VBS_ReservedInvoice)
                 {
                     if(!element.vbs_checkPackingSlip() && _SalesParmLineforCancle.DeliverNow < 0)
                     {
                        error("Please select reserved invoice");
                        return;
                     }
                 }
                 break;

        }
    }
    //vbs end
    super();
    // Pantep Cus1.5
    }
    else
    {
        return;
    }
    //End Cus1.5

}



==================================================================

display real dispPrice()
{
    real rqty, rvalue;
    SysClientSessions scs;
    str strUserID, strCompName;
    ;

    //Get Client
    select * from scs where scs.clientComputer == WinAPI::getComputerName();
    strUserID = scs.userId;
    //

    rqty = this.quantitySum();
    rvalue = this.valueSum();


    if(rqty == 0)
    {
        rPrice = 0;
    }else
    {

        if(strUserID == "Audit"||strUserID == "Audi1"||strUserID == "Audi2"||strUserID == "Audi3"||
           strUserID == "Audi4"||strUserID == "Audi5"||strUserID == "Admin"||strUserID == "com_c"||
           strUserID == "Comp1"||strUserID == "compu")
           {
                rPrice = rvalue/rqty;
           }else
                rPrice = 0;


        //rPrice = rvalue/rqty;
    }






    return rPrice;
}


================================================


void clicked()
{

    //vbs begin
    SalesParmLine               _SalesParmLineforCancle;
    CustConfirmJour             CustConfirmJour;
    CustConfirmTrans            CustConfirmTrans;



    // Pantep Cus1
    dialogButton                dialogCheckBeforePost;
    // End Cus1
    SysClientSessions           scs;
    str                         strUserID;

    ;


    select * from scs where scs.clientComputer == WinAPI::getComputerName();
    strUserID = scs.userId;



    if(strUserID== "Trad4")


    {


    // INTERNAL BEGIN

    // Pantep Cus1.2

    dialogCheckBeforePost = Box::okCancel(strfmt("%1 \n %2",SalesParmTable.VBS_ReservedInvoice,SalesParmTable.Transdate),DialogButton::No,"Check before Post");


    if(dialogCheckBeforePost == DialogButton::Ok)
    {
    // End Cus1.2





    if(updateNow.value())
    {
        if(element.vbs_checkMultipleAccount())
        {
            error("Can not post multiple customer account");
            return;
        }
        switch (documentStatus)
        {
            case documentStatus::Confirmation:
                 if(!SalesparmTable.VBS_ReservedInvoice)
                 {
                    while select _SalesParmLineforCancle where _SalesParmLineforCancle.ParmId == SalesparmTable.ParmId
                    {
                        //info(strfmt("%1",_SalesParmLineforCancle.DeliverNow));
                        if(_SalesParmLineforCancle.DeliverNow < 0)
                        {
                            error("Please select reserved invoice to cancle");
                            return;
                        }
                    }
                 }
                 else
                 {
                    while select _SalesParmLineforCancle where _SalesParmLineforCancle.ParmId == SalesparmTable.ParmId
                    {
                        //info(strfmt("%1",_SalesParmLineforCancle.DeliverNow));
                        if(_SalesParmLineforCancle.DeliverNow < 0)
                        {
                            select forupdate CustConfirmJour where CustConfirmJour.VBS_ReservedInvoice == SalesparmTable.VBS_ReservedInvoice
                                                && CustConfirmJour.VBS_Cancel == NoYes::No;
                            if(CustConfirmJour)
                            {
                                ttsbegin;
                                CustConfirmJour.VBS_Cancel = NoYes::Yes;
                                CustConfirmJour.update();
                                ttscommit;
                            }
                            element.close();
                            info(strfmt("Invoice %1 has been cancled",SalesparmTable.VBS_ReservedInvoice));
                        }
                        else
                        {
                            select forupdate CustConfirmJour where CustConfirmJour.VBS_ReservedInvoice == SalesparmTable.VBS_ReservedInvoice
                                                && CustConfirmJour.VBS_Cancel == NoYes::No;
                            if(CustConfirmJour)
                            {
                                ttsbegin;
                                CustConfirmJour.VBS_ReservedInvoice = "";
                                CustConfirmJour.update();
                                ttscommit;
                            }
                        }
                    }
                 }
                 break;
            case documentStatus::PickingList:
                 if(!SalesparmTable.VBS_ReservedInvoice)
                 {
                    if(!element.vbs_checkPickingList())
                     {
                        error("Please select reserved invoice");
                        return;
                     }
                 }
                 break;
            case documentStatus::PackingSlip:
                 if(!SalesparmTable.VBS_ReservedInvoice)
                 {
                     if(!element.vbs_checkPackingSlip() && _SalesParmLineforCancle.DeliverNow < 0)
                     {
                        error("Please select reserved invoice");
                        return;
                     }
                 }
                 break;

        }
    }
    //vbs end
    super();



    // Pantep Cus1.5
    }
    else
    {
        return;
    }
    //End Cus1.5



    //INTERNAL END

     }
     else
     {
        info("external");

          if(updateNow.value())
    {
        if(element.vbs_checkMultipleAccount())
        {
            error("Can not post multiple customer account");
            return;
        }
        switch (documentStatus)
        {
            case documentStatus::Confirmation:
                 if(!SalesparmTable.VBS_ReservedInvoice)
                 {
                    while select _SalesParmLineforCancle where _SalesParmLineforCancle.ParmId == SalesparmTable.ParmId
                    {
                        //info(strfmt("%1",_SalesParmLineforCancle.DeliverNow));
                        if(_SalesParmLineforCancle.DeliverNow < 0)
                        {
                            error("Please select reserved invoice to cancle");
                            return;
                        }
                    }
                 }
                 else
                 {
                    while select _SalesParmLineforCancle where _SalesParmLineforCancle.ParmId == SalesparmTable.ParmId
                    {
                        //info(strfmt("%1",_SalesParmLineforCancle.DeliverNow));
                        if(_SalesParmLineforCancle.DeliverNow < 0)
                        {
                            select forupdate CustConfirmJour where CustConfirmJour.VBS_ReservedInvoice == SalesparmTable.VBS_ReservedInvoice
                                                && CustConfirmJour.VBS_Cancel == NoYes::No;
                            if(CustConfirmJour)
                            {
                                ttsbegin;
                                CustConfirmJour.VBS_Cancel = NoYes::Yes;
                                CustConfirmJour.update();
                                ttscommit;
                            }
                            element.close();
                            info(strfmt("Invoice %1 has been cancled",SalesparmTable.VBS_ReservedInvoice));
                        }
                        else
                        {
                            select forupdate CustConfirmJour where CustConfirmJour.VBS_ReservedInvoice == SalesparmTable.VBS_ReservedInvoice
                                                && CustConfirmJour.VBS_Cancel == NoYes::No;
                            if(CustConfirmJour)
                            {
                                ttsbegin;
                                CustConfirmJour.VBS_ReservedInvoice = "";
                                CustConfirmJour.update();
                                ttscommit;
                            }
                        }
                    }
                 }
                 break;
            case documentStatus::PickingList:
                 if(!SalesparmTable.VBS_ReservedInvoice)
                 {
                    if(!element.vbs_checkPickingList())
                     {
                        error("Please select reserved invoice");
                        return;
                     }
                 }
                 break;
            case documentStatus::PackingSlip:
                 if(!SalesparmTable.VBS_ReservedInvoice)
                 {
                     if(!element.vbs_checkPackingSlip() && _SalesParmLineforCancle.DeliverNow < 0)
                     {
                        error("Please select reserved invoice");
                        return;
                     }
                 }
                 break;

        }
    }
    //vbs end
    super();




     }

}


==============================================

void clicked()
{

    //vbs begin
    SalesParmLine               _SalesParmLineforCancle;
    CustConfirmJour             CustConfirmJour;
    CustConfirmTrans            CustConfirmTrans;



    // Pantep Cus1
    dialogButton                dialogCheckBeforePost;
    // End Cus1
    SysClientSessions           scs;
    str                         strUserID;

    ;


    select * from scs where scs.clientComputer == WinAPI::getComputerName();
    // strUserID = scs.userId;


    strUserID = curuserId();
   
    //print  strUserID;
    //pause;
    //info(strfmt("%1",strUserID));

    //Trad5
   // if(strUserID== "Admin")
    if(strUserID== "Trad4" || strUserID== "Trad5")


    {


    // INTERNAL BEGIN

    // Pantep Cus1.2

        dialogCheckBeforePost = Box::okCancel(strfmt("%1 \n %2",SalesParmTable.VBS_ReservedInvoice,SalesParmTable.Transdate),DialogButton::No,"Check before Post");


        if(dialogCheckBeforePost == DialogButton::Ok)
        {
    // End Cus1.2





               if(updateNow.value())
                {
                    if(element.vbs_checkMultipleAccount())
                    {
                        error("Can not post multiple customer account");
                        return;
                    }
                    switch (documentStatus)
                    {
                        case documentStatus::Confirmation:
                             if(!SalesparmTable.VBS_ReservedInvoice)
                             {
                                while select _SalesParmLineforCancle where _SalesParmLineforCancle.ParmId == SalesparmTable.ParmId
                                {
                                    //info(strfmt("%1",_SalesParmLineforCancle.DeliverNow));
                                    if(_SalesParmLineforCancle.DeliverNow < 0)
                                    {
                                        error("Please select reserved invoice to cancle");
                                        return;
                                    }
                                }
                             }
                             else
                             {
                                while select _SalesParmLineforCancle where _SalesParmLineforCancle.ParmId == SalesparmTable.ParmId
                                {
                                    //info(strfmt("%1",_SalesParmLineforCancle.DeliverNow));
                                    if(_SalesParmLineforCancle.DeliverNow < 0)
                                    {
                                        select forupdate CustConfirmJour where CustConfirmJour.VBS_ReservedInvoice == SalesparmTable.VBS_ReservedInvoice
                                                            && CustConfirmJour.VBS_Cancel == NoYes::No;
                                        if(CustConfirmJour)
                                        {
                                            ttsbegin;
                                            CustConfirmJour.VBS_Cancel = NoYes::Yes;
                                            CustConfirmJour.update();
                                            ttscommit;
                                        }
                                        element.close();
                                        info(strfmt("Invoice %1 has been cancled",SalesparmTable.VBS_ReservedInvoice));
                                    }
                                    else
                                    {
                                        select forupdate CustConfirmJour where CustConfirmJour.VBS_ReservedInvoice == SalesparmTable.VBS_ReservedInvoice
                                                            && CustConfirmJour.VBS_Cancel == NoYes::No;
                                        if(CustConfirmJour)
                                        {
                                            ttsbegin;
                                            CustConfirmJour.VBS_ReservedInvoice = "";
                                            CustConfirmJour.update();
                                            ttscommit;
                                        }
                                    }
                                }
                             }
                             break;
                        case documentStatus::PickingList:
                             if(!SalesparmTable.VBS_ReservedInvoice)
                             {
                                if(!element.vbs_checkPickingList())
                                 {
                                    error("Please select reserved invoice");
                                    return;
                                 }
                             }
                             break;
                        case documentStatus::PackingSlip:
                             if(!SalesparmTable.VBS_ReservedInvoice)
                             {
                                 if(!element.vbs_checkPackingSlip() && _SalesParmLineforCancle.DeliverNow < 0)
                                 {
                                    error("Please select reserved invoice");
                                    return;
                                 }
                             }
                             break;

                    }
                }
                //vbs end
                super();


                // Pantep Cus1.5
                }
                else
                {
                    return;
                }
                //End Cus1.5



    //INTERNAL END


     }
     else
     {
          //info("external");

                      if(updateNow.value())
                  {
                    if(element.vbs_checkMultipleAccount())
                    {
                        error("Can not post multiple customer account");
                        return;
                    }
                    switch (documentStatus)
                    {
                        case documentStatus::Confirmation:
                             if(!SalesparmTable.VBS_ReservedInvoice)
                             {
                                while select _SalesParmLineforCancle where _SalesParmLineforCancle.ParmId == SalesparmTable.ParmId
                                {
                                    //info(strfmt("%1",_SalesParmLineforCancle.DeliverNow));
                                    if(_SalesParmLineforCancle.DeliverNow < 0)
                                    {
                                        error("Please select reserved invoice to cancle");
                                        return;
                                    }
                                }
                             }
                             else
                             {
                                while select _SalesParmLineforCancle where _SalesParmLineforCancle.ParmId == SalesparmTable.ParmId
                                {
                                    //info(strfmt("%1",_SalesParmLineforCancle.DeliverNow));
                                    if(_SalesParmLineforCancle.DeliverNow < 0)
                                    {
                                        select forupdate CustConfirmJour where CustConfirmJour.VBS_ReservedInvoice == SalesparmTable.VBS_ReservedInvoice
                                                            && CustConfirmJour.VBS_Cancel == NoYes::No;
                                        if(CustConfirmJour)
                                        {
                                            ttsbegin;
                                            CustConfirmJour.VBS_Cancel = NoYes::Yes;
                                            CustConfirmJour.update();
                                            ttscommit;
                                        }
                                        element.close();
                                        info(strfmt("Invoice %1 has been cancled",SalesparmTable.VBS_ReservedInvoice));
                                    }
                                    else
                                    {
                                        select forupdate CustConfirmJour where CustConfirmJour.VBS_ReservedInvoice == SalesparmTable.VBS_ReservedInvoice
                                                            && CustConfirmJour.VBS_Cancel == NoYes::No;
                                        if(CustConfirmJour)
                                        {
                                            ttsbegin;
                                            CustConfirmJour.VBS_ReservedInvoice = "";
                                            CustConfirmJour.update();
                                            ttscommit;
                                        }
                                    }
                                }
                             }
                             break;
                        case documentStatus::PickingList:
                             if(!SalesparmTable.VBS_ReservedInvoice)
                             {
                                if(!element.vbs_checkPickingList())
                                 {
                                    error("Please select reserved invoice");
                                    return;
                                 }
                             }
                             break;
                        case documentStatus::PackingSlip:
                             if(!SalesparmTable.VBS_ReservedInvoice)
                             {
                                 if(!element.vbs_checkPackingSlip() && _SalesParmLineforCancle.DeliverNow < 0)
                                 {
                                    error("Please select reserved invoice");
                                    return;
                                 }
                             }
                             break;

                    }
                }
                //vbs end
                super();

     }

}