วันศุกร์ที่ 27 เมษายน พ.ศ. 2555

Filter Date Range in Report


Class declaration
public class ReportRun extends ObjectRun
{
TransDate    fromDate;
TransDate    toDate;
dialogField  dialogFromDate;
dialogField  dialogToDate;
}


fatch
public boolean fetch()
{
;
while select sharecapital where (sharecapital.DateofAdmn >= fromDate && sharecapital.DateofAdmn <= toDate)
return true;
}

dialog
public Object dialog(Object _dialog)
{
    DialogRunbase dialog = _dialog;
    ;
    dialog.addGroup("@SYS40");
    dialogFromDate  = dialog.addFieldValue(typeid(TransDate), fromDate, "@SYS939", "@SYS26930");
    dialogToDate    = dialog.addFieldValue(typeid(TransDate), toDate, "@SYS15867", "@SYS26929");
    return dialog;
}


getfromdialog
public boolean getFromDialog()
{
    ;
    fromDate  = dialogFromDate.value();
    toDate    = dialogToDate.value();
    return true;
}

การใช้ Query คลาส เพื่อ Group by+Sum+ Date Range


static void UsingQuery(Args _args)
{
   Query                    query;
   QueryBuildDatasource     queryBuildDatasource1,
                            queryBuildDatasource2;
   QueryBuildRange          queryBuildRange;
   QueryBuildLink           queryBuildLink;

   QueryRun                 queryRun;
   PurchTable               purchTable;
   PurchLine                purchLine;
   ;

   /*
   query = new Query();
   queryBuildDatasource1   = query.addDataSource(tablenum(purchTable));
   queryBuildRange         = queryBuildDatasource1.addRange(fieldnum(purchTable,PurchID));
   queryBuildRange.value("PO12-003295..PO12-003299");

   queryBuildDatasource2   = queryBuildDatasource1.addDataSource(tablenum(purchLine));
   queryBuildLink          = queryBuildDatasource2.addLink(fieldnum(purchTable,purchID),fieldnum(purchLine,PurchId));
   */
   query = new Query();
   queryBuildDatasource1   = query.addDataSource(tablenum(purchLine));
   queryBuildRange         = queryBuildDatasource1.addRange(fieldnum(purchLine,PurchID));
  // queryBuildRange.value("PO12-003295..PO12-003299");

   queryBuildDataSource1.orderMode(OrderMode::GROUPBY);
   queryBuildDataSource1.addSortField(fieldnum(purchLine,PurchID));

   queryBuildDataSource1.addSelectionField(FieldNum(purchLine,LineAmount), SelectionField::SUM);

   queryBuildDatasource2   = queryBuildDatasource1.addDataSource(tablenum(purchTable));
   queryBuildLink          = queryBuildDatasource2.addLink(fieldnum(purchLine,purchId),fieldnum(purchTable,PurchId));

   queryRun   =  new QueryRun(query);
   while(queryRun.next())
   {
  //   purchTable  =  queryRun.get(tablenum(purchTable));
     purchLine   =  queryRun.get(tablenum(PurchLine));
     pause;
     print purchLine.PurchId;
     print purchLine.LineAmount;
     print "--";
     print "--";
     print "--";
     print "--";
     print "--";
    // PurchLine.PurchId));


   }


}








/*
Query                             query;
QueryBuildDataSource     queryBuildDataSource;
query = new Query();  
queryBuildDataSource = query.addDataSource(TableNum(AssetTrans));
queryBuildDataSource.orderMode(OrderMode::GROUPBY);  
queryBuildDataSource.addSelectionField(FieldNum(AssetTrans,amountMST), SelectionField::SUM);  
queryBuildDataSource.addSelectionField(FieldNum(AssetTrans,revaluationAmount), SelectionField::SUM);  
queryBuildDataSource.addSortField(FieldNum(AssetTrans, transType));  
queryBuildDataSource.addRange(FieldNum(AssetTrans,assetId)).value(rangeAssetId);  
queryBuildDataSource.addRange(FieldNum(AssetTrans,bookId)).value(rangeBookId);  
queryBuildDataSource.addRange(FieldNum(AssetTrans, transDate)).value(queryRange(dateFrom, dateTo));
    return query;

//Result of the above Query:  SELECT SUM(AmountMST), SUM(RevaluationAmount) FROM AssetTrans //GROUP BY AssetTrans.TransType ASC WHERE ((AssetId = FA-000001)) AND ((BookId = COMPUTERS)) //AND ((TransDate<=12/31/2153))

*/

/*
Query                             query = new Query();  
QueryBuildDataSource     queryBuildDataSource;
QueryBuildRange             queryBuildRange;
 
queryBuildDataSource = query.addDataSource(tablenum(PurchParmTable));
queryBuildRange = queryBuildDataSource.addRange(fieldNum(PurchParmTable, Ordering));
querybuildrange.value(queryvalue(documentstatus::PackingSlip));

queryBuildRange = queryBuildDataSource.addRange(fieldNum(PurchParmTable, PurchId));
querybuildrange.value(queryvalue(purchparmtable.PurchId));  

queryBuildRange = queryBuildDataSource.addRange(fieldNum(PurchParmTable, ParmJobStatus));
querybuildrange.value(queryvalue(‘Executed’));

queryBuildRange = queryBuildDataSource.addRange(fieldNum(PurchParmTable, Invoiced));  
querybuildrange.value(queryvalue(‘No’));

  this.query(query);

*/

วันอังคารที่ 24 เมษายน พ.ศ. 2555

วิธีการเซต Workflow ในระบบ Purchase Requisition (PR)


วิธีการเซต Workflow ในระบบ Purchase Requisition (PR)
1.ตรวจสอบ Service ที่เกี่ยวข้อง
1.1 ตรวจสอบ Service ของ Dynamics AX Server 5.0$02-AX09_SIM (กรณีเป็นก้อนSIM)
1.2 ไปที่ เครื่อง Server SWAN8 (192.168.0.26) เมนู Start >Administrative Tool > Services >ไปที่ก้อนข้อมูลคลิกขวา Start(กรณีที่ Stop) , Restart (Start)

1.3 ตรวจสอบ Internet Information Services (IIS)
1.4 ไปที่เมนู Start>Administrative Tool > Internet Information Services > กดปุ่ม Start





1.5 ตรวจสอบ Configuration เพื่อชี้ข้อมูลก้อน SWAN_AX09_SIM
1.6 ไปที่ เมนู Start >Administrative Tool > Microsoft Dynamic AX Configuration Utility
1.7 ไปที่หัวข้อ Configuration Target เลือก Score bar เพื่อเซต Business Connector
1.8 ไปที่หัวข้อ Configuration เลือก Score bar เพื่อเซตก้อน SIM

1.9 กดปุ่ม Edit เพื่อเข้าไปแก้ไขค่า Configuration ดังภาพ



1.10 ตรวจสอบ Workflow Processor
1.11 ไปที่ Microsoft Dynamic AX > AOT >Viewer > Tutorial_WorkflowProcessor

1.12 กดปุ่ม Start เพื่อให้ Workflow Processor ทำงาน









2.ตรวจสอบ Workflow เก่าที่ run ไว้ก่อนหน้า ให้ ลบ ออกจาก Batch Job
2.1 ไปที่ [Tab] Overview เลือก Workflow ที่คงค้างในระบบ และลบออก



3.การเซต Workflow Configuration เพื่อให้สิทธิ user ที่เป็นผู้เปิด PR และผู้มีสิทธิ์อนุมัติ PR
3.1 ไปที่ SWAN > Account Payable > Setup > Workflow configuration
3.2 ไปที่ [Tab] General เลือก Version กดที่ปุ่ม Modify (กรณีสร้าง Workflow ไว้แล้ว)










3.3 การให้สิทธิเปิด PR ไปที่ [Tab] Details




3.4 การให้สิทธิผู้เปิด PR ไปที่ [Tab] Assignment > เลือกหัวข้อ Assign to : > กดปุ่ม Choose
3.5 ที่หน้าจอ Assignment เลือก User based : > ผู้ที่มีสิทธิเปิด PR
3.6 ที่หัวข้อ Set time allowed คือ การ เลือกเวลาที่ยอมรับได้ในการ Completeของระบบ Workflow
3.7 กดปุ่ม OK เพื่อบันทึก


3.8 การให้สิทธิผู้ตรวจสอบ PR ไปที่ [Tab] Notifications > เลือกหัวข้อ  Complete > กดปุ่ม Choose เพื่อเลือก user ผู้ตรวจสอบ PR สามารถเลือกเหตุการณ์ได้
                - Complete                   = ให้ PR สมบรูณ์ถูกต้อง
                - Delegate                    = ลบ PR
            - Reject                        = ส่ง PR กลับไป
                - Request Change        = ส่งไปเปลี่ยนแปลง
               

3.9 การให้สิทธิผู้อนุมัติ PR ไปที่ [Tab] Assignment > เลือกหัวข้อ Assign to : > กดปุ่ม Choose
เพื่อเลือกผู้อนุมัติ


3.10 การให้สิทธิผู้อนุมัติ PR ไปที่ [Tab] Notifications > เลือกหัวข้อ  Approve  > กดปุ่ม Choose เพื่อเลือก user ผู้อนุมัติ PR สามารถเลือกเหตุการณ์ได้เช่นกัน

วันศุกร์ที่ 20 เมษายน พ.ศ. 2555

ถ้าจะย้าย Production จาก database ที่กำลังใช้ ไป database ก้อนหลัก ต้องทำอย่างไรบ้าง

...

Available Physical, MinInventOnhand, MaxInventOnhand WITH PR

display real dispBal()
{
    InventSum    _InventSum;
    PurchReqLine _PurchReqLine;
    ItemId       tmpItemId;
    InventDimId  tmpInventDimId;
    ;
    select _PurchReqLine
    where (_PurchReqLine.PurchReqId == VendReqTrans.PurchReqId
       &&  _PurchReqLine.LineNum    == VendReqTrans.LineNum);

    tmpInventDimId =  _PurchReqLine.InventDimId;
    tmpItemId      =  _PurchReqLine.ItemId;

    select SUM(AvailPhysical) FROM _InventSum
    where  _InventSum.ItemId       ==  tmpItemId
       &&  _InventSum.InventDimId  ==  tmpInventDimId;

    return  _InventSum.AvailPhysical;
}

------------------------

display real dispMin()
{
   real ret;
   PurchReqLine _PurchReqLine;
   InventDim    _InventDim;
   ReqItemTable _ReqItemTable;
   InventDimId  tmpInvendDimId;
   ItemId       tmpItemId;
   ;
   select  _PurchReqLine
   where  (_PurchReqLine.PurchReqId  == VendReqTRans.PurchReqId
      &&   _PurchReqLine.LineNum     == VendReqTRans.LineNum)
   join    _InventDim
   where   _InventDim.inventDimId    == _PurchReqLine.InventDimId;
   tmpInvendDimId = _InventDim.inventDimId;
   tmpItemId      = _PurchReqLine.ItemId;
   select _ReqItemTable
   where  _ReqItemTable.ItemId  ==  tmpItemId
      &&  _ReqItemTable.CovInventDimId  == tmpInvendDimId;
   ret  =  _ReqItemTable.MinInventOnhand;

  return ret;
}


--------------------

display real dispMax()
{
   real ret;
   PurchReqLine _PurchReqLine;
   InventDim    _InventDim;
   ReqItemTable _ReqItemTable;
   InventDimId  tmpInvendDimId;
   ItemId       tmpItemId;
   ;
   select  _PurchReqLine
   where  (_PurchReqLine.PurchReqId  == VendReqTRans.PurchReqId
      &&   _PurchReqLine.LineNum     == VendReqTRans.LineNum)
   join    _InventDim
   where   _InventDim.inventDimId    == _PurchReqLine.InventDimId;
   tmpInvendDimId = _InventDim.inventDimId;
   tmpItemId      = _PurchReqLine.ItemId;
   select _ReqItemTable
   where  _ReqItemTable.ItemId  ==  tmpItemId
      &&  _ReqItemTable.CovInventDimId  == tmpInvendDimId;
   ret  =  _ReqItemTable.MaxInventOnhand;

  return ret;
}

วันพฤหัสบดีที่ 19 เมษายน พ.ศ. 2555

Class ที่จัดการ Module ต่างๆ

...

ตารางของ Production


BOM
BOMTable
BOMVersion

WorkCalendarTable
WorkCalendarDate
WorkCalendarDateLine
WorkTimeTable
WorkTimeLine
WrkCtrTaskGroup
WrkCtrTaskGroupLine
WrkCtrProperty
WrkCtrTable

Route
RouteOpr
RouteOprTable
RouteTable
RouteVersion

CategoryTable
RouteCostCategory
RouteCostCategoryPrice
ProdGroup
ProdPool