2024年10月31日 星期四

V20304A – 拆檢結果登錄 - 按鈕呼叫函式的方式 ,最後才宣告 / 必需先宣告 - function

 目的: V20304A – 拆檢結果登錄  - 按鈕呼叫函式的方式 ,最後才宣告 / 必需先宣告 - function

處理說明: 1>Ext.getCmp("sub_TALHR_CAL").handler = function () {
                           CALL_TALHR_CAL();
                      }
                       --> CALL_TALHR_CAL 函式可以在最後才宣告,

                  2>Ext.getCmp("sub_TALHR_CAL").handler = CALL_TALHR_CAL;
                 -->  CALL_TALHR_CAL 函式必需先宣告,   
                        否則    CALL_TALHR_CAL= undefined


1>*.js
Ext.getCmp("sub_TALHR_CAL").handler = function () {
        CALL_TALHR_CAL();
    }
    
    win1.show();
    win1.maximize();

var sub_V20304A_Btns = [
            //sub_V20304A_TALHR,
            cmp_sub_RPNOAF_TALHR, cmp_sub_MRPNOAF_TALHR, cmp_sub_TALHR_CAL_btn, '-', cmp_sub_TMP1, cmp_sub_TMP2,
            {
                xtype: 'button', text: '確認', id: 'sub_V20304A_OkBtn', flex: 5,
                listeners: {
                    click: function () {
                        //mysuccessalert("mysub2_確定 ");
                        //檢核 AMM項次的需求工時正確, 若有問題,則 Tmp_isOk=false, 若沒問題, Tmp_isOk=true, 才執行[確認]的處理
                        V20304A_OK();
                    }
                }
            },



//工時合計函式
    var CALL_TALHR_CAL = function () {
        var Tmp_isOk = true;
        //myalert(" click 工時合計");
        //1>判斷主步序(1.xx) 的工時>0 時, 不可以有明細步序(1.xx.xx)        
        var mysubstore = Ext.getCmp('sub_Grid').store;
        var Tmp_cnt = mysubstore.data.length;
        console.log("mysubstore.count : ", Tmp_cnt);
        console.log("mysubstore.data.items : ", mysubstore.data.items);
        var i;
        var Tmp_Str;
        var Tmp_AMINO, Tmp_ITMNO, Tmp_RQHR, Tmp_ITMNO_NEXT;
        var Tmp_ITMNO_dot_cnt, Tmp_ITMNO_NEXT_dot_cnt;
        var Tmp_rec, Tmp_rec_NEXT;
        for (i = 0; i < Tmp_cnt; i++) {
            if (i == Tmp_cnt - 1)  //若為最後一筆資料,則離開 , 不需再檢查
                break;
            Tmp_rec = mysubstore.getAt(i);
            Tmp_AMINO = nulltoStr(Tmp_rec.data["AMINO"]);
            Tmp_ITMNO = nulltoStr(Tmp_rec.data["ITMNO"]);
            //Tmp_ITMNO = nulltoStr(mysubstore.data.items[i].data["ITMNO"]);
            console.log("i: ", i);
            console.log("Tmp_ITMNO: ", Tmp_ITMNO);
            Tmp_ITMNO_dot_cnt = Tmp_ITMNO.split(".").length - 1;
            console.log("Tmp_ITMNO_dot_cnt: ", Tmp_ITMNO_dot_cnt);
            if (checkisnull(Tmp_rec.data["RQHR"])) {
                Tmp_Str = "AMM項次(" + Tmp_AMINO + ")的需求工時不可為空白<br>"
                    + "敬請檢核 !!";
                mywarnalert(Tmp_Str);
                Tmp_isOk = false;
                return Tmp_isOk;
            }
            //1>>若為主步序(1.xx)且需求工時>0  ,且有子步序,則顯示訊息, 主步序工時>0 , 不可有子步序           
            if (Tmp_ITMNO_dot_cnt == 1) {  //為主步序
                Tmp_RQHR = Number(nulltoStr(Tmp_rec.data["RQHR"]));
                //Tmp_RQHR = Number(nulltoStr(mysubstore.data.items[i].data["RQHR"]));
                console.log("Tmp_RQHR : ", Tmp_RQHR);
                if (Tmp_RQHR > 0) {   //為主步序,且[需求時數]>0, 判斷是否有明細步序
                    Tmp_rec_NEXT = mysubstore.getAt(i + 1);
                    Tmp_ITMNO_NEXT = nulltoStr(Tmp_rec_NEXT.data["ITMNO"]);
                    //Tmp_ITMNO_NEXT = nulltoStr(mysubstore.data.items[i + 1].data["ITMNO"]);
                    console.log("Tmp_ITMNO_NEXT : ", Tmp_ITMNO_NEXT);
                    Tmp_ITMNO_NEXT_dot_cnt = Tmp_ITMNO_NEXT.split(".").length - 1;
                    console.log("Tmp_ITMNO_NEXT_dot_cnt: ", Tmp_ITMNO_NEXT_dot_cnt);
                    if (Tmp_ITMNO_NEXT_dot_cnt >= 2) { //有明細步序
                        Tmp_Str = "目前主步序(項次:" + Tmp_ITMNO + ")的需求工時(" + Tmp_RQHR.toString() + ")<br>"
                            + "因本主步序有子步序(項次:" + Tmp_ITMNO + ".xx)<br> "
                            + "則本主步序的需求工時必需為 0 或 空白 <br>"
                            + "敬請檢核 !!<br>";
                        mywarnalert(Tmp_Str);
                        Tmp_isOk = false;
                        return Tmp_isOk;
                    }
                }
            }
        }        // end of for (i=0)        
        //2>檢核 [需求工時] 不可大於 [標準工時] , 若大於,則[備註]欄位不可空白
        //var mysubstore = Ext.getCmp('sub_Grid').store;
        //var Tmp_cnt = mysubstore.data.length;
        var Tmp_REMARK;
        var Tmp_RQ_HR = 0, Tmp_STD_HR = 0;
        for (i = 0; i < Tmp_cnt; i++) {
            Tmp_rec = mysubstore.getAt(i);
            Tmp_ITMNO = nulltoStr(Tmp_rec.data["ITMNO"]);
            Tmp_RQ_HR = Number(nulltoStr(Tmp_rec.data["RQHR"]));
            Tmp_STD_HR = Number(nulltoStr(Tmp_rec.data["STDHR"]));
            Tmp_REMARK = nulltoStr(Tmp_rec.data["REMARK"]);
            if (Tmp_ITMNO == "1.04.04")
                mywarnalert("項次:1.04.04");
            if (Tmp_RQ_HR > Tmp_STD_HR) {
                if (checkisnull(Tmp_REMARK)) {
                    Tmp_Str = "步序(項次:" + Tmp_ITMNO + ")的[需求工時(" + Tmp_RQ_HR + ")]<br>"
                        + "大於[標準工時(" + Tmp_STD_HR + ")]<br>"
                        + "[備註]欄位必需說明原因<br>"
                        + "不可空白 !!";
                    mywarnalert(Tmp_Str);
                    Tmp_isOk = false;
                    return Tmp_isOk;
                }
            } // end of  if (Tmp_RQ_HR > Tmp_STD_HR) {
        }  // end of  for (i = 0; i < Tmp_cnt; i++) {


        //2>>累加拆解工時 & 維修工時(因尚未存入資料庫,所以必需在前端小計時數)
        var Tmp_ITMNO_14;
        var Tmp_TAL_RPNOAF_HR = 0, Tmp_TAL_MRPNOAF_HR = 0;
        for (i = 0; i < Tmp_cnt; i++) {
            Tmp_rec = mysubstore.getAt(i);
            Tmp_ITMNO = nulltoStr(Tmp_rec.data["ITMNO"]);
            Tmp_ITMNO_14 = Tmp_ITMNO.substr(0, 4);
            Tmp_RQHR = Number(nulltoStr(Tmp_rec.data["RQHR"]));
            switch (Tmp_ITMNO_14) {
                case '1.01': case '1.02': case '1.03': case '1.04': case '1.05':
                case '1.06': case '1.07': case '1.08': case '1.09': case '1.10':
                case '3.01':
                    Tmp_TAL_RPNOAF_HR = Tmp_TAL_RPNOAF_HR + Tmp_RQHR;
                    break;
                case '2.01': case '2.02': case '2.03': case '2.04': case '2.05':
                case '2.06': case '2.07': case '2.08': case '2.09': case '2.10':
                    Tmp_TAL_MRPNOAF_HR = Tmp_TAL_MRPNOAF_HR + Tmp_RQHR;
                    break;
                default:
                    Tmp_TAL_MRPNOAF_HR = Tmp_TAL_MRPNOAF_HR + Tmp_RQHR;
                    break;
            }
        }  // end of for (i=0,)
        Ext.getCmp("sub_RPNOAF_TALHR").setValue(Tmp_TAL_RPNOAF_HR);
        Ext.getCmp("sub_MRPNOAF_TALHR").setValue(Tmp_TAL_MRPNOAF_HR);
        mysuccessalert("工時合計完成 !!");
        return Tmp_isOk;  //return true
    };  // end of CALL_TALHR_CAL


        //[工時提列].[確認]鈕 
        function V20304A_OK() {
            //1>檢核欄位是否有輸入        
            var Tmp_sub_RPNOAF = Ext.getCmp("sub_RPNOAF").getValue();
            var Tmp_sub_RRNRAR = Ext.getCmp("sub_RRNRAR").getValue();
            var Tmp_sub_QDEP = Ext.getCmp("sub_QDEP").getValue();
            var Tmp_sub_IRESAK = Ext.getCmp("sub_IRESAK").getValue();
            var Tmp_sub_NOTEAR = Ext.getCmp("sub_NOTEAR").getValue();
            var Tmp_Str;
            if (checkisnull(Tmp_sub_RRNRAR)) {
                Tmp_Str = "TLS實際拆檢完工日不可空白<br>"
                    + "敬請檢核<br>";
                mywarnalert(Tmp_Str);
                return false;
            }
            if (checkisnull(Tmp_sub_QDEP)) {
                Tmp_Str = "品保單位不可空白<br>"
                    + "敬請檢核<br>";
                mywarnalert(Tmp_Str);
                return false;
            }
            if (checkisnull(Tmp_sub_NOTEAR)) {
                Tmp_Str = "檢測結果說明不可空白<br>"
                    + "敬請檢核<br>";
                mywarnalert(Tmp_Str);
                return false;
            }

            //直接呼叫[合計]鈕函式,  - 檢核 主步序&子步序是否有問題, 若有問題,則顯示訊息,不寫入 AMM_TLSAR & AMM_AR
            //[確認]時, 不重複寫檢核程式
            if (CALL_TALHR_CAL()==false) {
                return;
            }
            ////1>判斷主步序(1.xx) 的工時>0 時, 不可以有明細步序(1.xx.xx)        
            var mysubstore = Ext.getCmp('sub_Grid').store;
            var Tmp_cnt = mysubstore.data.length;            

            //3>> 寫入  AMM_AR(寫入明細步序所有工時)  &  AMM_TLSAR(只寫主步序 & 拆檢小計工時 &  維修小計工時)
            //將子畫面資料寫入 np , 以便新增 AMM_AR  &  AMM_TLSAR
            let Tmp_DataAry1 = [];
            for (var i = 0; i < Tmp_cnt; i++) {
                Tmp_rec = mysubstore.getAt(i);
                Tmp_DataAry1.push(Tmp_rec.data);
            }
            // 將目前子畫面的資料(Table)轉成 JSON字串
            let Tmp_DataString1 = JSON.stringify(Tmp_DataAry1);
            var np = {};
            np = {
                FMNO: Tmp_FMNO,
                RPNOAF: Tmp_sub_RPNOAF,
                IRESAK: Tmp_sub_IRESAK,
                RRNRAR: Tmp_sub_RRNRAR,
                QDEP: Tmp_sub_QDEP,
                NOTEAR: Tmp_sub_NOTEAR,
                DataString1: Tmp_DataString1,  //目前子畫面的資料
            };
            var Tmp_url = "../../api/V20304AAPI/UPDATE_AMM_AR_TLSAR";
            //取得挑選資料的 dt2JSON 字串 
            //getUrlStr : 必需傳回字串( dt.JSON字串) , 非 ds
            var rtn_Str = getUrlStr(Tmp_url, np, "工時提列");
            console.log("rtn_Str:", rtn_Str);
            if (checkRtnOK(rtn_Str)) {
                mysuccessalert(rtn_Str);                
                console.log("win1.closeAction:", win1.closeAction);
                win1.close();
                win1.destroy();   //必需寫 destroy() , 不然畫面會亂掉
            }
            else
                mywarnalert(rtn_Str);
        }  // end of  function V20304A_OK() {
    // }  // end of abc()

};  // end of function Call_V20304A() {

資料庫備份機制 - 排程是否執行完成

 

1》資訊處只做硬碟備份:
--〉若資料庫掛掉,則資訊處 SAN硬碟備份的資料
     也會是錯的,
     所以無法用資訊處的備份資料來還原

2》資料庫備份還原:
      將資料庫存成檔案,
      利用該檔案還原資料庫

--〉判斷排程是否執行完成
SP_LOG: 記錄排程執行時間/結束時間
                若無結束時間,表示排程執行異常

--》321備份原則:
1〉至少備份3份
2》至少2種不同備份方式(硬碟,磁帶,..)
3〉至少1份異地備份

V20304A – [工時提列]鈕 – 關閉子視窗, win1.close(); win1.destroy(); - window

 目的:V20304A – [工時提列]鈕 – 關閉子視窗, win1.close(); win1.destroy(); - window

處理說明: 1>關閉子視窗:
                       win1.close();
                       win1.destroy();
                         --> 兩行均需寫,
                                不然下次執行,子畫面會亂掉


1>*.js
          var Tmp_url = "../../api/V20304AAPI/UPDATE_AMM_AR_TLSAR";
            //取得挑選資料的 dt2JSON 字串 
            //getUrlStr : 必需傳回字串( dt.JSON字串) , 非 ds
            var rtn_Str = getUrlStr(Tmp_url, np, "工時提列");
            console.log("rtn_Str:", rtn_Str);
            if (checkRtnOK(rtn_Str)) {
                mysuccessalert(rtn_Str);                
                console.log("win1.closeAction:", win1.closeAction);
                win1.close();
                win1.destroy();   //必需寫 destroy() , 不然畫面會亂掉
            }
            else
                mywarnalert(rtn_Str);

2024年10月29日 星期二

V80403B – [物料]頁 – getMyForm – 產生新TabSheet - Tab

目的: V80403B – [物料] – getMyForm – 產生新TabSheet - Tab

處理說明: 1> getMyForm()
                            var Tmp_FM_V80403B=getMyForm("物料","tab_PN1", sub_V80403B_Flds, sub_V80403B_Btns, "A");   
                       Tmp_FM_V80403B.setWidth(800);
                       Tmp_FM_V80403B.setHeight(400);

                  2>新增 [物料] Tab子畫面
                       //[工時]Tab - 子畫面                  
                      var Tmp_FM_V80403A = Ext.create("Ext.form.Panel", {
                            title: '工時', id: 'tab_HR', cls: 'edit_BC', layout: { type: 'vbox', align: 'stretch' },
                            items: [Query1, DataPanel],
                      });
                      Ext.getCmp('TMSingleViewEdit').add(Tmp_FM_V80403A);
                      //[物料]Tab - 子畫面
                      var Tmp_FM_V80403B = CALL_V80403B();
                       Ext.getCmp('TMSingleViewEdit').add(Tmp_FM_V80403B);

                  3>CALL_V80403B()
                      function CALL_V80403B() {
                             //按鈕 : 無
                            var sub_V80403B_Btns = [ ];

                            // [物料]頁  - Grid子畫面欄位
                            var sub_model = [   ];
                            var sub_Columns = [   ];
                            var sub_V80403B_Grid = Ext.create('TMGrid', {   });
                            var sub_V80403B_Flds = [
                            {
                                  xtype: 'panel',
                                  id: 'sub_V80403B_panel',
                                  region: 'center',
                                  layout: 'fit',
                                  flex: 5,
                                  border: 1,
                                  items: [sub_V80403B_Grid]
                              },
                           ]; // end 
 


0>V80403.js
    //[工時]畫面
    var Tmp_FM_V80403A = Ext.create("Ext.form.Panel", {
        title: '工時', id: 'tab_HR', cls: 'edit_BC', layout: { type: 'vbox', align: 'stretch' },
        items: [Query1, DataPanel],
    });
    Ext.getCmp('TMSingleViewEdit').add(Tmp_FM_V80403A);
    //[物料]畫面
    var Tmp_FM_V80403B = CALL_V80403B();
    Ext.getCmp('TMSingleViewEdit').add(Tmp_FM_V80403B);


1>V80403B.js
  function CALL_V80403B() {
    console.log(" Call_V80403B  step1");

    //按鈕 : 無
    var sub_V80403B_Btns = [ ];

    // [物料]頁  - Grid子畫面欄位
    var sub_model = [
        //AMM_MATNRD
        { name: "PN1" },
        { name: "PN1NAME" },
        { name: "NSN" },
        { name: "SAPPN" },
        {  name: "NDQTY", convert: function (value, record) { return Ext.util.Format.round(value, 3); }        },
        { name: "UNIT" },
        { name: "DNOTE" },
        //AMM_FM
        { name: "OGONOAF" },
        { name: "PN" },
        { name: "SEQOAF" },
        { name: "C_NM" },
        { name: "ES_NM" },
        //AMM_SRO
        { name: "SAPNO" },
    ];

    var sub_Columns = [
        //AMM_MATNRD
        { header: "", xtype: "rownumberer", width: 50, align: "center", sortable: false },
        { header: "需求件號", dataIndex: "PN1", width: 320, sortable: false, TMType: "string" },
        { header: "需求件號名稱", dataIndex: "PN1NAME", width: 1000, sortable: false, TMType: "string" },
        { header: "料號", dataIndex: "NSN", width: 130, sortable: false, TMType: "string" },
        { header: "SAP件號", dataIndex: "SAPPN", width: 180, sortable: false, TMType: "string" },
        { header: "需求數量", dataIndex: "NDQTY", width: 60, sortable: false, align: "right", TMType: "float", renderer: Ext.util.Format.numberRenderer('000,000.00') },
        { header: "需求單位", dataIndex: "UNIT", width: 40, sortable: false, TMType: "string" },
        { header: "專案刪料原因", dataIndex: "DNOTE", width: 1500, sortable: false, TMType: "string" },
        //AMM_FM        
        { header: "拆檢提領編號", dataIndex: "OGONOAF", width: 400, sortable: false, TMType: "string" },
        { header: "件號", dataIndex: "PN", width: 320, sortable: false, TMType: "string" },
        { header: "序號", dataIndex: "SEQOAF", width: 300, sortable: false, TMType: "string" },
        { header: "中文名稱", dataIndex: "C_NM", width: 600, sortable: false, TMType: "string" },
        { header: "英文簡稱", dataIndex: "ES_NM", width: 150, sortable: false, TMType: "string" },
        //AMM_SRO 
        { header: "工號", dataIndex: "SAPNO", width: 120, sortable: false, TMType: "string" }
    ];

    
    console.log(" V80403B  step2");
    //子件明細 Grid
    var sub_V80403B_Grid = Ext.create('TMGrid', {
        grid_id: 'sub_V80403B_Grid',
        columns: sub_Columns,
        //autoScroll: true,
        flex: 1,
        store: Ext.create('gridstore', { model: sub_model }),
    });

    var Tmp_gridstore = Ext.getCmp("sub_V80403B_Grid").store;
    console.log("sub_V80403B_Grid:", sub_V80403B_Grid);   
    

    //2>目前所選資料的欄位值 
    //子畫面上方無Query
    var sub_V80403B_Flds = [
        {
            xtype: 'panel',
            id: 'sub_V80403B_panel',
            region: 'center',
            layout: 'fit',
            flex: 5,
            border: 1,
            items: [sub_V80403B_Grid]
        },
    ]; // end 
        

Ext.getCmp('sub_V80403B_Grid').store.on("load", function (me, records, successful, eOpts) {
        console.log("records:", records);
        if (successful) {
            console.log("Ext.getCmp('sub_V80403B_Grid').store", Ext.getCmp('sub_V80403B_Grid').store);
            console.log("Ext.getCmp('sub_V80403B_Grid').store.data", Ext.getCmp('sub_V80403B_Grid').store.data);
        }
    }
    );    

    console.log(" V80403B  step3");
var Tmp_FM_V80403B=getMyForm("物料","tab_PN1",sub_V80403B_Flds,sub_V80403B_Btns, "A");    
    Tmp_FM_V80403B.setWidth(800);
    Tmp_FM_V80403B.setHeight(400);
    return Tmp_FM_V80403B
    
};  // end of function Call_V80403B() {










2024年10月27日 星期日

V20304A-工時提列- 子畫面放至最大  win1.show(); win1.maximize(); - max

 目的:V20304A-工時提列- 子畫面放至最大 , win1.show();    win1.maximize();

處理說明: 1>win1.show();    //執行後, 才可執行 win1.maximize();

                  2> win1.maximize();




1>*.js

    win1.show();
    win1.maximize();



2024年10月22日 星期二

V80403- 單檔 – 1>隱藏[編輯]頁 2>新增[工時]頁 – TabSheet - TabPanel

 目的: V80403- 單檔 – 1>隱藏[編輯]   2>新增[工時] – TabSheet - TabPanel

處理說明:  1>//隱藏[編輯]頁 - 按鈕
                         Ext.getCmp('TMSingleViewEdit').setTabVisible(0, false);
                         TMSingleViewEdit.setTemplateBtnVisible(false);
                          Ext.getCmp('btn_add').setVisible(false);
                          Ext.getCmp('btn_edit').setVisible(false);
                          Ext.getCmp('btn_del').setVisible(false);
                   2>新增[工時]頁
                        var Tmp_FormObj = Ext.create("Ext.form.Panel", {
                                title: '工時', id: 'tab_HR', cls: 'edit_BC', layout: { type: 'vbox', align: 'stretch' },
                                 items: [Query1, DataPanel],
                        });
                       Ext.getCmp('TMSingleViewEdit').add(Tmp_FormObj);



1>*.js
      //隱藏[編輯]頁 - 按鈕
       Ext.getCmp('TMSingleViewEdit').setTabVisible(0, false);
       TMSingleViewEdit.setTemplateBtnVisible(false);

    //新增 [工時]頁
    console.log("0 Query1");
     var Query1 = new Ext.FormPanel({
        id: 's1_form', flex: 1,
        layout: { type: 'hbox', align: 'stretch' },
        fieldDefaults: { labelAlign: 'right' },
        defaults: { margin: { top: 3 } },
        height: 20,
        items: [   ...]


  var Tmp_FormObj = Ext.create("Ext.form.Panel", {
        title: '工時', id: 'tab_HR', cls: 'edit_BC', layout: { type: 'vbox', align: 'stretch' },
        items: [Query1, DataPanel],
    });
    Ext.getCmp('TMSingleViewEdit').add(Tmp_FormObj);

2024年10月21日 星期一

V80403 -CaluField 當成過濾條件 – 1>顯示全部資料,不分頁 2>分頁Bar隱藏 - timeout - onload - T1C

 目的:V80403 -CaluField 當成過濾條件 – 1>顯示全部資料,不分頁      2>分頁Bar隱藏

處理說明: 1>若勾選[V](TLS工場xxxx,則資料全取,不分頁
          // 若勾選[V](TLS工場報價總工時-ALS工場已報工工時)低於xx小時,則資料全取,不分頁
            DataSet ds = null;
            if ((Tmp_chk_LESSHR1 == "true") && (!myfunc.checkisnull(Tmp_chk_LESSHR2)))  
                ds = getDataTable(cmd, countSql,false,true);  
            else                ////資料分頁 , 30筆/頁
                ds = getDataTable(cmd, countSql, true, true);
            int Tmp_Cnt = ds.Tables["T1"].Rows.Count;
  
                 2>隱藏分頁Bar
                      Ext.getCmp('grid_ptb').hide();            
                 3>重設總筆數
                ds.Tables["T1"].AcceptChanges();
     ds.Tables["T1C"].Rows[0]["TOTAL"] = int.Parse(ds.Tables["T1C"].Rows[0]["TOTAL"].ToString()) - Tmp_DelCnt;



1>*.js
var Tmp_chk_LESSHR1 = Ext.getCmp('s_chk_LESSHR1').getValue();
var Tmp_chk_LESSHR2 = Ext.getCmp('s_chk_LESSHR2').getValue();
np["s_rd_AMMSTS"] = Ext.getCmp('s_rd_AMMSTS').getValue();
np["s_rd_LQTY"] = Ext.getCmp('s_rd_LQTY').getValue();
try {
var Tmp_Proc_Msg = "";
if (Tmp_chk_LESSHR1 == false)
      Tmp_Proc_Msg = '資料顯示中, 請稍候...<br>';
else
    if (!checkisnull(Tmp_chk_LESSHR2)) {
         Tmp_Proc_Msg = "資料顯示中, 請稍候...<br><br>"
                                    + "因勾選[V]TLS工場報價總工時...<br>"
                                    + "會顯示全部資料且不分頁<br>"
                                    +"處理時間約需1x分鐘<br><br>"
                                    +"敬請稍候!!";

//不顯示ToolBar - 分頁Bar
console.log("Ext.getCmp('grid_ptb'):", Ext.getCmp('grid_ptb'));
Ext.getCmp('grid_ptb').hide();
}
var Proc_Msg = new Ext.LoadMask(Ext.getCmp("s_PROCMSG"),
        { msg: Tmp_Proc_Msg, }
);

gridstore.getProxy().timeout = 1200000;
gridstore.getProxy().url = '../api/V80403API/getGridData_M';
gridstore.getProxy().extraParams = np; //分頁OK,篩選條件OK
console.log("1 reloadGridData - before");
Ext.getCmp('grid_Single').reloadGridData();
console.log("2 reloadGridData - after");
Ext.getCmp('grid_Single').store.on("load", function (me, records, successful, eOpts) {
Proc_Msg.hide(); //若顯示完成,則不再顯示訊息

});


2>*.cs
           // 若勾選勾選[V](TLS工場xxxx,則資料全取,不分頁
            DataSet ds = null;
            if ((Tmp_chk_LESSHR1 == "true") && (!myfunc.checkisnull(Tmp_chk_LESSHR2)))  
                ds = getDataTable(cmd, countSql,false,true);  
            else                ////資料分頁 , 30筆/頁
                ds = getDataTable(cmd, countSql, true, true);
            int Tmp_Cnt = ds.Tables["T1"].Rows.Count;


        dr["LQTY_CNT_"] = Tmp_LQTY_CNT_;
                dr["PN_CNT_"] = Tmp_PN_CNT_;
                dr["MEET_PERCENT_"] = Tmp_MEET_PERCENT_;
            }  // end of for (int i = 0; i < Tmp_Cnt; i++)

            //若 [V](TLS工場報價工時 - ALS工場已報工工時)  高於 [XX]小時, 則刪除
            int Tmp_DelCnt = 0;
            if ((Tmp_chk_LESSHR1 == "true")  && (!myfunc.checkisnull(Tmp_chk_LESSHR2)))
            {
                for (int i = 0; i < Tmp_Cnt; i++)
                {
                    if (i >= ds.Tables["T1"].Rows.Count)
                    {
                        break;
                    }
                    DataRow dr = ds.Tables["T1"].Rows[i];
                    Tmp_TLS_ALS_MINUSHR_ = float.Parse(dr["TLS_ALS_MINUSHR_"].ToString());                    
                     if (Tmp_TLS_ALS_MINUSHR_ > float.Parse(Tmp_chk_LESSHR2))
                        {
                            dr.Delete();
                            Tmp_DelCnt = Tmp_DelCnt + 1;
                        }                                                
                } // for int i = 0; i < Tmp_Cnt; i++)
                  //重新設定總筆數
                ds.Tables["T1"].AcceptChanges();
                ds.Tables["T1C"].Rows[0]["TOTAL"] = int.Parse(ds.Tables["T1C"].Rows[0]["TOTAL"].ToString()) - Tmp_DelCnt;
            }//  if (Tmp_chk_LESSHR1 == "true")             

            return ds;