第十四章PROC處理程序實作第十四章PROC處理程序實作\14-4 PROC與TRS的整合

14-4 PROCTRS的整合

 

PROC可以配合TRS的組件來進行批次的過帳,來取代以Server Method的執行,如下,為一個使用TRS來進行庫存結帳的實例,可以透過PROC [批量過帳]活動來處理,設計步驟如下:

Step1>新增一個PROC,命名為"庫存結帳",並在[開始] 中設定一個yyyymm變數,由前端傳入,用來設定庫存結帳的年月;另一個變數為ret,初值設定為'結帳成功',用來傳回結帳結果。

 

Step2>拖入一個[sql命令]活動,Title"設定yyyymm",用來在結帳前將[庫存進出明細表]的年月重新設定一遍,設定CommandText如下:

update 庫存進出明細表 set 年月=@yyyymm where LEFT(CONVERT(varchar,日期,112),6)=@yyyymm

 

SQL語句內有用到了'@yyyymm'變數,必須在Parameters中設定:

Name可以下拉選擇'@yyyymm'的參數,Var同樣可以開窗選擇[開始]傳入的yyyymm變數。

 

Step3>拖入一個[批量過帳]活動,如下:

ServerMoveID可開窗選擇Server端的ServerMove組件(用來處理批次TRS的組件),這裡選擇"庫存進出明細表.ServerMove1",如下:

ExecuteMode可選擇Execute/CarryOver/CarryTrial/DeletePeriod,這裡選擇CarryOver,其代表意義如下:

Execute: 針對對應的TRS(Transaction)進行批次過帳的動作。

CarryTrial: 除了Execute進行過帳外,尚會針對ServerMove組件所定義的結帳表進行結帳動作(如下的ServerMove屬性定義)

CarryTrial: 用來找出上期的餘額並試算出本期餘額再回寫到來源表中,可用來進行各種結帳關係的試算處理。

DeletePeriod: 用來刪除指定的某期間的結帳資料。

WhereItem: 設定ServerMove對象的資料條件,如下,設定 [年月]欄位 [=] yyyymm變數(var可以開窗選擇回來)

Direction: 設定過帳方向,insert代表正向過帳,delete代表逆向過帳。

Period: 過帳期數或年月,通常是設定為年月(月結),如果是年就代表年結。

 

Step4>最後設定[結束]傳回ret變數即可,因為如果[批量過帳] 發生錯誤的話,會直接傳回錯誤訊息,不會傳回ret變數。

 

Step5>為了可以在前端由使用者按下【庫存結帳】執行PROC,如下的JS程式:

function sureclose() {

    $.callMethod('庫存進出明細表','getym',{},function(result){ //取得上期結帳年月

        var nextym=new Date();

        if (result !=='') nextym=new Date(result.substring(0,4),result.substring(4,6),01);

        $.prompt( "確認結帳(格式:YYYYMM)?", nextym.Format("yyyyMM"), function(yymm) {

            $.callProc('庫存結帳',{yyyyymm: yymm},function(result){

               $.alert(result,'info');

             });

         });

    });

}

 

[庫存結帳],當然也可以設計[刪除結帳] 讓使用者可以逆向刪除結帳資料,重新再結帳。如下的PROC與設計步驟:

Step1>新增一個PROC,命名為"刪除庫存結帳",並在[開始] 中設定一個yyyymm變數,由前端傳入,用來設定刪除庫存結帳的年月;另一個變數為ret,初值設定為'刪除成功',用來傳回刪除結果。

 

Step2>拖入一個[批量過帳]活動,如下:

ServerMoveID開窗選擇"庫存進出明細表.ServerMove1"

ExecuteMode選擇DeletePeriod用來刪除指定的某期間的結帳資料。

Period設定為yyyymm變數內容。

 

Step3>設定[結束]傳回ret變數即可。

 

Step4>在前端由使用者按下【刪除庫存結帳】,如下的JS程式:

function suredele() {

    $.callMethod('庫存進出明細表','getym',{},function(result){ //取得本期的年月

        $.prompt( "確認刪除(格式:YYYYMM)?", result, function(yymm) {

            $.callProc('庫存結帳刪除',{yyyymm:yymm},function(result){

                 $.alert(result,'info');

             });

        });

    });

}


 

Top of Page