วันเสาร์ที่ 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;
}