2024年3月27日 星期三

V30102A - 子畫面按鈕 - 置中

目的: V30102A - 子畫面按鈕 - 置中

處理說明: 1: myfunc.js
                     function getMyWindow(par_title, par_FieldsAry, par_BtnAry,par_uni="") {
                                  var mySubForm = Ext.create('Ext.FormPanel', {
                                  autoScroll: false,
                                  fieldDefaults: { labelAlign: 'right', },
                                 layout: 'fit',
                                 id: "mySubForm"+par_uni,
                                 form_id: "mySubForm",
                                 items: par_FieldsAry,
                                 buttonAlign: 'center',
                                buttons: par_BtnAry,
}); // end of mySubForm





2024年3月13日 星期三

V30102C- 試車/飛(前中)登錄 - 時間元件設定 - timer

 目的: V30102C- 試車/(前中)登錄  - 時間元件設定

處理說明:  1> 設定如下時間元件 :   
                                                var cmp_LDTM = get_cmp_timer1('進場時間', 'V30102C_LDTM', 80);

                                      2>取得時間字串:
                       var Tmp_LDTMStr = get_HMS_Str(Ext.getCmp('V30102C_LDTM1').getValue(),
                                                                                   Ext.getCmp('V30102C_LDTM2').getValue(),
                                                                                   Ext.getCmp('V30102C_LDTM3').getValue());





1>*.js

      // panel12  - 填寫 Field  - 時間
    var cmp_OPTM = get_cmp_timer1('開車時間', 'V30102C_OPTM', 80);    
    var cmp_LDTM = get_cmp_timer1('進場時間', 'V30102C_LDTM', 80);

 //取得進場時間字串
  var Tmp_LDTMStr = get_HMS_Str(Ext.getCmp('V30102C_LDTM1').getValue(),                      
                                                              Ext.getCmp('V30102C_LDTM2').getValue(), 
                                                              Ext.getCmp('V30102C_LDTM3').getValue());
 console.log("進場時間:", Tmp_LDTMStr);


2>myfunc.js

    //par_caption: 欄位標題, par_id: 欄位id,  par_l_width : 欄位標題width  ,par_flex : 欄位flex
   function get_cmp_timer1(par_caption, par_id,par_l_width,par_flex) {
   if (checkisnull(par_flex)) {
        par_flex = 10;
    }    
    var par_id1 = par_id + "1";
    var par_id2 = par_id + "2";
    var par_id3 = par_id + "3";
    var rtn_cmp =
    {
        xtype: "fieldcontainer", fieldLabel: par_caption, labelWidth: par_l_width, layout: "hbox", flex: par_flex,
            items: [
            { id: par_id, name: par_id, xtype: "textfield", width: 100, padding: "0 4 0 0", hidden: true }, //upd grid
            { id: par_id1, name: par_id1, xtype: "numberfield", width: 60, padding: "0 4 0 0", maxValue: 23, minValue: 0,value:12, hideTrigger: false },
            { xtype: "label", text: ":", labelWidth: 20, margin: { right: 4 } },
            { id: par_id2, name: par_id2, xtype: "numberfield", width: 60, padding: "0 4 0 0", maxValue: 59, minValue: 0, step: 10,value:0, hideTrigger: false },
            { xtype: "label", text: "(hh:mm)", labelWidth: 20, margin: { right: 4 } },
            { id: par_id3, name: par_id3, xtype: "numberfield", width: 30, padding: "0 4 0 0", maxValue: 59, minValue: 0, value: 0, hidden: true }
        ], labelStyle: "font-size:10pt;"
    };            
    return rtn_cmp;
}

//傳回時間字串 --> " par_dt   h1:m1:s3 "
function get_HMS_Str(h1, m2, s3, par_dt) {
    var hh = setNull_num0(h1);
    var mm = setNull_num0(m2);
    var ss = setNull_num0(s3);

    hh = padlv(hh, 2, '0');
    mm = padlv(mm, 2, '0');
    ss = padlv(ss, 2, '0');

    if checkisnull(par_dt) 
        return hh + ':' + mm + ':' + ss;
    else 
       return DatetoStr(par_dt, "Y/m/d")+"  " + hh + ':' + mm + ':' + ss;
}


2024年3月5日 星期二

V30101 – 桌面子功能無法開啟 - V80405重複加入 ShortCut

 目的: V30101 – 桌面子功能無法開啟

處理說明:   1>[桌面捷徑]設定[V30101]
                    2>Desktop.js 又設定 [V30101] , 會有Error , 無法開啟子功能
                    3>[桌面捷徑]設定[V80405] ,有 Error -->  [V80405]有可能重複加入  Shortcut








2024年3月3日 星期日

EXCEL.Cell 加入 CheckBox 選項 , 使用者可直接勾選 [V]

 目的: Excel 加入 checkbox 說明

處理說明:
     1》上端功能選項加入[開發人員]選項
     2〉[開發人員]-->[插入]--》[checkbox]













 

2024年2月19日 星期一

SQL - [區間機號] - 判斷目前機號(Ex: A00042) 在[區間機號] 內(Ex: A00040-00045)

 目的: SQL - [區間機號] - 判斷[目前機號(Ex: A00042)] 在[區間機號] 內(Ex: A00040-00045)

處理方法: 1>找出 [區間機號(AC1-AC2)]的 AC1 & AC2
                  2>找出AC1 & AC2 的數字 - 將非數字(\D)字元改成''
AC1:    CAST(regexp_replace(SUBSTRING(B.SERNR_LO,1,INSTR(B.SERNR_LO,'-')-1),'\D+', '') as int ) as AC_1
AC2:   CAST(regexp_replace(SUBSTRING(B.SERNR_LO,INSTR(B.SERNR_LO,'-')+1,5), '\D+', '') as int) as AC_2
                  3>判斷   AC1<=目前機號<=AC2


SQL 如下:
SELECT  A.AUFNR,A.MATNR,B.SERNR_LO,
                CAST(regexp_replace(SUBSTRING(B.SERNR_LO,1,INSTR(B.SERNR_LO,'-')-1),
'\D+', '') as int ) as AC_1,
                CAST(regexp_replace(SUBSTRING(B.SERNR_LO,INSTR(B.SERNR_LO,'-')+1,5),
'\D+', '') as int) as AC_2
FROM     SAPR3.AFPO@SAP A,SAPR3.TECS@SAP B
WHERE A.TECHS=B.TECHS
AND       a.MANDT='999'
and          b.MANDT='999'
AND       B.SERNR_LO LIKE '%-%'
AND      42>=CAST(regexp_replace(SUBSTRING(B.SERNR_LO,1,INSTR(B.SERNR_LO,'-')-1),
'\D+', '') as int )
AND      42<=CAST(regexp_replace(SUBSTRING(B.SERNR_LO,INSTR(B.SERNR_LO,'-')+1,5),
'\D+', '') as int);

2024年1月10日 星期三

V30701A – 顯示[確認]訊息,使用者按確認後,才往下執行 -confirm - 確認訊息

 目的: V30701A – 顯示[確認]訊息,使用者按確認後,才往下執行 -confirm

處理說明: 1> 使用者按[確認]後, 才往下執行
                        --> Confirm(Tmp_msg);  
                        --> 同步式 , 會等使用者按確定鈕後,才繼續往下執行
                  2> myconfirmalert(Tmp_Str, callBackFunc);
                       --> 非同步式  , 不等使用者按確定鈕,繼續往下執行



1>*.js
//若工號(25155234) 承修工廠 不為7100,則顯示警示訊息
        //=> ’ 該工號非7100工單,是否確認 ?’,確認才繼續往下執行
        var Tmp_url = "../../api/V30701API/check_is_7100";
        var rtn = getUrlStr(Tmp_url, np, "檢核[輸入工單]承修工廠是否7100");
        if (!checkRtnOK(rtn)) {
            var Tmp_Str = "工號(" + Tmp_SAPNO + ")\n"
                                   + "承修工廠不為 7100\n"
                                   + "是否繼續執行?\n";
            var id = confirm(Tmp_Str);
            if (id) 
                return true;     
            else 
                return false;           
            //var Tmp_Str = "工號(" + Tmp_SAPNO + ")<br>"
            //                       +"承修工廠不為 7100<br>"
            //                       + "是否繼續執行?<br>";
            //非同步式,不等使用者按鈕,繼續往下執行, 所以資料庫不會新增
            //myconfirmalert(Tmp_Str, callBackFunc);  
            //function callBackFunc(id) {
            //    if (id == 'yes') 
            //        return true;
            //    else
            //        return false;
        }  // end of  if (!checkRtnOK(rtn)) {           

2024年1月4日 星期四

V30702F : 設定日期格式化: YYYY/MM/DD HH/MM & 欄位 readonly , renderer: 不可加 " "

目的: V30702F : 1>設定日期格式: YYYY/MM/DD HH/MM 

                             2>欄位 readonly

                            3> renderer:  不可加 "" , 否則Template[xls匯出]時, 會一直轉圈圈

{header:"數量",dataIndex:"QTY",width:30,align:"right",TMType:"float",renderer:Ext.util.Format.numberRenderer('000,000.00')}, 

處理說明: 1>設定日期格式: YYYY/MM/DD HH/MM -> 2024/01/05 11:05
{ header: "執行時間", dataIndex: "TATM", width: 150, sortable: false, TMType: "date", renderer: Ext.util.Format.dateRenderer('Y/m/d H:i') },
                  2>設定欄位 readOnly
                      setFieldsCls('mySubFormA',[], //required
['sub_TASKNO', 'sub_RQMAN', 'sub_RQDT', 'sub_RQDEP', 'sub_STLC', 'sub_EDLC', 'sub_TASKREMARK'], //readonly
[]);


1>*.js
var sub_Columns = [     
        { header: "", xtype: "rownumberer", width: 50, align: "center", sortable: false },
   // { header: "派遣申請單號", dataIndex: "TASKNO", width: 130, sortable: false, TMType: "string" },
      { header: "項次", dataIndex: "ITM", width: 30, sortable: false },
      { header: "執行人員", dataIndex: "TAMAN", width: 100, sortable: false, TMType: "string" },
      { header: "執行人員姓名", dataIndex: "TAMAN_", width: 100, sortable: false, TMType: "string" },
        { header: "執行時間", dataIndex: "TATM", width: 150, sortable: false, TMType: "date", renderer: Ext.util.Format.dateRenderer('Y/m/d H:i') },
        { header: "現況", dataIndex: "TP", width: 30, sortable: false, TMType: "string" },
        { header: "現況說明", dataIndex: "TP_" }    
    ];



 //欄位設為 ReadOnly 
    setFieldsCls('mySubFormA',
        [],                          //required
    ['sub_TASKNO', 'sub_RQMAN', 'sub_RQDT', 'sub_RQDEP', 'sub_STLC', 'sub_EDLC', 'sub_TASKREMARK'],  //readonly
        []);