2024年5月7日 星期二

V80204A – [工作中心報工匯出]鈕 - 匯出Excle欄位值-不套表 - [數值]非[文字] - NumberFormat -數值欄位 -不套表 - 直接匯出標題

 目的: V80204A – [工作中心報工匯出] - 匯出Excle欄位值 - [數值][文字]

處理說明: 1> c#
                       sheet1.Range[myfunc.GetExcelPos(8, i + 1)].Text = dt.Rows[i]["SROTP"].ToString();
                        //設定[QTY] : 數值欄位
                        sheet1.Range[myfunc.GetExcelPos(9, i + 1)].Value = dt.Rows[i]["QTY"].ToString();
                        sheet1.Range[myfunc.GetExcelPos(9, i + 1)].NumberFormat = "#,##0.00";





1> c#
  [HttpPost]
        public void WC_ALS_OutFile()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;

           sheet1.Range[myfunc.GetExcelPos(6, i + 1)].Text = dt.Rows[i]["MKDESCPT"].ToString();
           sheet1.Range[myfunc.GetExcelPos(7, i + 1)].Text = dt.Rows[i]["WBS"].ToString();
           sheet1.Range[myfunc.GetExcelPos(8, i + 1)].Text = dt.Rows[i]["SROTP"].ToString();
            //設定[QTY] : 數值欄位
            sheet1.Range[myfunc.GetExcelPos(9, i + 1)].Value = dt.Rows[i]["QTY"].ToString();
            sheet1.Range[myfunc.GetExcelPos(9, i + 1)].NumberFormat = "#,##0.00";
                    //range.Value = "1175575.40";

         //sheet1.Range[myfunc.GetExcelPos(16, i + 1)].Text = dt.Rows[i]["ALS_HR_"].ToString();
           sheet1.Range[myfunc.GetExcelPos(16, i + 1)].Value = dt.Rows[i]["ALS_HR_"].ToString();
            sheet1.Range[myfunc.GetExcelPos(16, i + 1)].NumberFormat = "#,##0.00";

2024年5月2日 星期四

javaScript 變數範圍 - var -let

 目的: javaScript 變數範圍

 處理說明:  1> var 

 ECMAScript 2015 以前的 JavaScript 版本裡,並沒有定義區塊描述 (block statement) 的變數有效範圍。更精確的說,之前版本所定義的變數,其特性相當於全域變數
 不只在宣告的區塊或函數裡面有效 ,
其變數值還會超出宣告區塊而影響到全部的描述碼。

                2>let
當使用了 let 這個區域變數宣告方式變數 y 的有效範圍只有在 if { } 的範圍內,因此輸出結果是 ReferenceError。



Ex1: var
        if (true) 
              { var x = 5; } 
        console.log(x);        // x is 5

Ex:2: let
         if (true) 
            { let y = 5; } 
           console.log(y); // ReferenceError: y is not defined (y沒有被定義)

Ex3:
var myvar = "my value"; 
(function () { 
       console.log(myvar); // undefined , 不會產生錯誤訊息,但是欄位值未定義
       var myvar = "local value"; 
})();

Ex4: ※區域變數會在執行之後自動銷毀,並同步釋放記憶
function fName(aName) {
var number = aName * 10; //區域變數
console.log(number); //驗證變數
}

fName(10); //帶入參數,執行函式
console.log(number) //--> 會Error

V20304 – 顯示資料後,自動勾選第1筆資料 - onload - Selection

目的: V20304 – 顯示資料後,自動勾選第1筆資料

處理說明: 1> onload
                              Ext.getCmp('grid_M').store.on("load", function (me, records, successful, eOpts) {
                                if (successful) {
                                    //console.log("Ext.getCmp('sub_Grid').store", Ext.getCmp('sub_Grid').store);
                                    //console.log("Ext.getCmp('sub_Grid').store.data", Ext.getCmp('sub_Grid').store.data);
                                    var Tmp_rec;
                                    if (Ext.getCmp('grid_M').store.data.length > 0) {
                                        Tmp_rec = records[0];
                                        //Tmp_rec = Ext.getCmp('grid_M').store.getAt(0);
                                        Tmp_rec.set('CHECK', true);

                                        //Ext.getCmp('grid_M').getSelectionModel().select(0);                
                                    }  // enf of if
                                }   // end of if success
                            });  // end of on load





2024年5月1日 星期三

V20304A- 取得 store欄位值, 取得字元(.) 發生的次數

 目的: V20304A- 取得 store 的欄位值, 取得字元(.) 發生的次數

處理說明: 1>取得 store 的欄位值
                      -->方法1: ds1.data.item[i].data["ITMNO"]
                      Tmp_ITMNO = nulltoStr(ds1.data.items[i].data["ITMNO"]);

                      --> 方法2:   rec=ds1.getAt(i)             => =ds1.data.items[i]
                                          rec.data["ITMNO"] ;
                        for (var i=0;i<ds1.getTotalCount(); i++){
                          var rec = ds1.getAt(i);
                          rec.data["NOTES_MAIL"].toString();
                         }

                                    2>取得字元(.) 發生的次數
                                          Tmp_ITMNO_dot_cnt = Tmp_ITMNO.split(".").length - 1;



1>*.js
var CALL_TALHR_CAL = function () {
        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_ITMNO,Tmp_RQHR,Tmp_ITMNO_NEXT;
        var Tmp_ITMNO_dot_cnt, Tmp_ITMNO_NEXT_dot_cnt;        
        for (i = 0; i < Tmp_cnt; i++) {
            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);
            //1>>若為主步序(1.xx)且需求工時>0
            if (Tmp_ITMNO_dot_cnt == 1) {  //為主步序
                Tmp_RQHR = Number(nulltoStr(mysubstore.data.items[i].data["RQHR"]));
                console.log("Tmp_RQHR : ", Tmp_RQHR);
                if (Tmp_RQHR > 0) {   //為主步序,且[需求時數]>0, 判斷是否有明細步序
                    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);
                    }
                }
            }
            }        // end of for (i=0)        
    };  // end of CALL_TALHR_CAL    
    Ext.getCmp("sub_TALHR_CAL").handler = CALL_TALHR_CAL;    


2024年4月10日 星期三

V20304A – 工時提列 – 子畫面.下方按鈕 – 加入顯示欄位

 目的: V20304A – 工時提列 子畫面.下方按鈕 加入顯示欄位

處理說明:  
                 1> 利用 Btn_Ary    
                  2>  Buttons : Btn_Ary     -- (ToolBar)
                   3> 直接將    欄位s    加入   Btn_Ary    即可
                   4>  若 [欄位s ]   包成  Panel , 加入  Btn_Ary , 則只顯示 Panel 框, 不會顯示 Panel 的欄位  



1>*.js
//按鈕 : [確認] [取消] 鈕
    var cmp_sub_RPNOAF_TALHR = get_cmp_txt1('拆檢工時', 'sub_RPNOAF_TALHR', 80, 130,15);        
    var cmp_sub_MRPNOAF_TALHR = get_cmp_txt1('維修工時', 'sub_MRPNOAF_TALHR', 80, 130,15);
    var cmp_sub_TALHR_CAL_btn = get_cmp_btn1('工時合計', 'sub_TALHR_CAL', 5);
    var cmp_sub_TMP1 = get_cmp_panel1(200);
    var cmp_sub_TMP2 = get_cmp_panel1(200);

    //如下以 panel 包 欄位,按鈕, 不會顯示欄位+按鈕
    /*
    var sub_V20304A_TALHR =
    {
        type: 'panel', border: 2,        
        flex: 25,
        layout: 'hbox',
        //items: [cmp_sub_RPNOAF_TALHR, cmp_sub_MRPNOAF_TALHR, cmp_sub_TALHR_CAL_btn],
        items: [{
            xtype: 'panel', id: 'sub_panel1',  layout: 'hbox', border:1,
            height: 20,
            items: [cmp_sub_RPNOAF_TALHR,'-'],
        },
            ]
    };
    */

//直接將[欄位s]加入  Btn_Ary 
//    '-'   :  出現垂直的分隔線
    var sub_V20304A_Btns = [     
        //sub_V20304A_TALHR,  //以 panel 包 欄位,按鈕, 不會顯示欄位+按鈕
        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_確定 ");
                    V20304A_OK();
                }
            }
        },        
        {
            xtype: 'button', text: '取消', id: 'sub_V20304A_CancelBtn', flex: 5,
            listeners: {
                click: function () {
                    //mysuccessalert("mysub2_取消");
                    var Tmp_win = this.up("window");
                    if (Tmp_win == undefined) {
                        Ext.Msg.alert("取消時未取到Window Object");
                    }
                    this.up("window").close();
                    this.up("window").destroy();
                }
            }
        },        
    ];


var win1 = getMyWindow("工時提列", sub_V20304A_Flds, sub_V20304A_Btns, "A");    

var mySubForm = Ext.create('Ext.FormPanel', {
        autoScroll: false,
        fieldDefaults: { labelAlign: 'right', },
        layout: 'fit',        
        //layout: { xtype: 'vbox', align: 'stretch' },
        id: "mySubForm"+par_uni,
        form_id: "mySubForm",
        items: par_FieldsAry,
        buttonAlign: 'center',
        buttons: par_BtnAry,
    });  // end of mySubForm



2024年4月9日 星期二

V20301 -[複製]鈕 - null 的問題 - null.length - null.toString() 都會有問題

 目的: null.length  會出現 Error 

處理說明 : 1> 寫 par_date.length 時, 先判斷  if (checkisnull(par_date)) {return  ""};



1>myfunc.js
//par_date 必需傳入字串,不可傳入日期格式  --> 因  checkisnull(日期) 會傳回 true
//若 par_date == null ,則 null.length 會 Error 
function DatetoStr(par_date, par_format) {
    if (checkisnull(par_date)) {
        return "";
    }

    if (par_date.length == 0) {  //若 par_date==null ,則 null.length 會 Error
        return "";
    }

    var Tmp_DateStr;
    if (checkisnull(par_format))
        par_format = 'Y/m/d';
    Tmp_DateStr = Ext.Date.format(new Date(par_date), par_format);
    return Tmp_DateStr;
}


V20304A – Grid – 編輯欄位 –[需求工時]欄位 , 不可空白 - editor - Ext.grid.plugin.CellEditing

 目的: V20304A – Grid – 編輯欄位 –[需求工時]欄位

處理說明: 1> sub_Grid 設為可編輯 : 
                       sub_Grid.plugins : 'Ext.grid.plugin.CellEditing'
                  2> Columns editor : 欄位設為可編輯  
                         editor: 'textfield',
                         另一方式: 
                         editor: { xtype: 'textfield', allowBlank: false}, //不允許空白

                   

1>*.js
1>>sub_Grid
var sub_Grid = Ext.create('TMGrid', {
        grid_id: 'sub_Grid',
        columns: sub_Columns,
        //autoScroll: true,
        flex: 1,
        store: Ext.create('gridstore', { model: sub_model }),
        plugins: [
            //Ext.create('Ext.grid.plugin.RowEditing', {   // 會出現[Update][Cancel]鈕
            Ext.create('Ext.grid.plugin.CellEditing',// 不會出現[Update][Cancel]鈕, 直接編輯
                clicksToEdit: 1                           // 按一下進行編輯,預設為按兩下
            })],
    });


2>> columns:
var sub_Columns = [
    { header: "", xtype: "rownumberer", width: 40, align: "center", sortable: false },
      
  {
        header: "需求工時", dataIndex: "RQHR", width: 70, sortable: false, align: "right", 
        TMType: "float", renderer: Ext.util.Format.numberRenderer('0,000.00'),
        editor: { xtype: 'textfield', allowBlank: false}, //不允許空白
        //editor: 'textfield',
    },