2026年6月16日 星期二

V1060304A – sub_Grid 不分頁 && 不顯示Toolbar

 目的: V1060304A – sub_Grid 不分頁 && 不顯示Toolbar

處理說明: 1>資料不分頁:
                       DataSet ds = getDataTable(cmd, countSql, false);
                  2>Toolbar 不顯示
                       Ext.getCmp('sub_Grid1_ptb').hide();  //toolbar 名稱= Grid名稱+'_ptb';
                       Ext.getCmp('sub_Grid2_ptb').hide(); 
                       Ext.getCmp('sub_Grid3_ptb').hide();



1>*.cs

        DataSet ds = getDataTable(cmd, countSql, false);  //paging = false

2>*.js
    //隱藏 ToolBar  , //toolbar 名稱= Grid名稱+'_ptb';
    Ext.getCmp('sub_Grid1_ptb').hide();
    Ext.getCmp('sub_Grid2_ptb').hide();
    Ext.getCmp('sub_Grid3_ptb').hide();


V1060304A- 調整版面高度 – 若為 region ,則split: true 若為 hbox,vbox 則 { xtype: 'splitter',width: 2},

 目的: V1060304A- 調整版面高度  
                  若為 region ,split: true  
            若為 hbox,vbox { xtype: 'splitter',width: 2}, 

處理說明:  1> 若為 region ,split: true    , Ex: V1060304A                  


   2> 若為 hbox,vbox { xtype: 'splitter',width: 2},  Ex: V20302B

1>V1060304A.js
 {  //往上/往下按鈕 - 
                        xtype: 'panel',
                        id: 'sub_panel3',
                        height: 60,
                        split: true,
                        region: 'south',
                        layout: { type: 'hbox', align: 'stretch' },
                        border: 1,
                        //title: 'sub_panel3',
                        items: [
                            { xtype: 'panel', flex: 30, }, //space panel
                            cmp_sub_btn_DOWN1,
                            { xtype: 'panel', flex: 10, }, //space panel
                            cmp_sub_btn_UP1,
                            { xtype: 'panel', flex: 50, },//space panel
                            cmp_sub_btn_DOWN2,
                            { xtype: 'panel', flex: 10, }, //space panel
                            cmp_sub_btn_UP2,
                            { xtype: 'panel', flex: 20, }, //space panel
                            cmp_sub_btn_CLOSE,
                        ]
                    },


2>V20304B.js - 系統件除帳
{
  xtype:'panel',bodyStyle: "background-color:transparent;", border: false, 
layout: {  type: "vbox",  align: 'stretch' }, padding: "5",
            id: 'sub1_myForm', items: [
 {
                    xtype: "fieldcontainer", fieldLabel: "內容", labelWidth: 60, layout: "fit", flex: 3, items: [
                        {
                            id: "sub1_content", name: "sub1_content", xtype: "textareafield",  padding: "0 4 0 0", 
                            //value: "AJT",
                        },
                    ]
                }, // end of 內容
  {
                    xtype: 'splitter',
                    width: 2,
                },
                {  //下方 TreeView, 左右移,正本/副本
                    xtype: "panel", flex: 5,
                    layout: {
                        type: 'hbox',
                        align: 'stretch'
                    },

2026年6月15日 星期一

V1060304A – [定更/定檢拆挪管制]鈕- 版面設計 - layout: 'border', - region: 'north'

 目的: V1060304A – [定更/定檢拆挪管制]- 版面設計

處理說明: 1>
                  2>



1>*.js

var sub_V1060304A_Flds = [
            {
                type: 'panel', bodyStyle: "background-color:transparent;", border: 5, padding: "1",
                layout: 'border',
                items: [
                    {  //專案別
                        xtype: 'panel', id: 'sub_panel1', region: 'north', layout: 'hbox',
                        height: 60,
                        border: 2,
                        title: 'sub_panel1',
                        items: [                            
                                cmp_sub_PROJID, cmp_sub_rd1, cmp_sub_rd2,                            
                        ]  //end of sub_panel1.items,
                    },  // end of sub_panel1                        
                    {  //機號1 --> 機號2
                        xtype: 'panel',
                        id: 'sub_panel2',
                        region: 'center',
                        layout: 'hbox',                        
                        border: 1,
                        title: 'sub_panel2',
                        items: [                            
                                    {  //sub_panel21,,實體定更定檢清單1
                                                xtype: 'panel',
                                                id: 'sub_panel21',                                                
                                                flex: 45,
                                                layout: 'vbox',
                                                border: 1,
                                                title: 'sub_panel21',
                                                items: [
                                                ]
                                            },
                                            {  //sub_panel22,左/右移
                                                xtype: 'panel',
                                                id: 'sub_panel22',
                                                flex: 10,
                                                layout: 'vbox',
                                                border: 1,
                                                title: 'sub_panel22',
                                                items: [
                                                ]
                                            },
                                            {  //sub_panel23,實體定更定檢清單2
                                                xtype: 'panel',
                                                id: 'sub_panel23',
                                                flex: 45,
                                                layout: 'vbox',
                                                border: 1,
                                                title: 'sub_panel23',
                                                items: [
                                                ]
                                            },                                        
                                ], // end of sub_panel2.items                            
                    },
                    {  //往上/往下按鈕 - 
                        xtype: 'panel',
                        id: 'sub_panel3',
                        height: 60,
                        region: 'south',
                        layout: 'hbox',
                        border: 1,
                        title: 'sub_panel3',
                        items: [
                        ]
                    },
                    {  //備份件清單 - Grid
                        xtype: 'panel',
                        id: 'sub_panel4',
                        region: 'south',
                        layout: 'fit',
                        height: 120,                        
                        border: 1,
                        title: 'sub_panel4',
                        items: [
                        ]
                    },
                ] // end of   layout: "vbox", padding: "5", items: [
            }  //end of  sub_ShowPN_Flds , items[{
        ]      //end of  var sub_ShowPN_Flds    

2026年6月14日 星期日

V1060301 – 如何以 ITEM 排序 1,2,3,..10,10-1,..117,117-1,117-1A,117-A,118(依數字順序) - 字母排序 - 數字排序

目的: V1060301 – 如何以 ITEM 排序  1,2,3,..10,10-1,..117,117-1,117-1A,117-A,118(依數字順序)

      不可 1,10,100,117,..,2,3, (依字母順序)

處理說明:






1>SQL:  --> (若有 - ,則ITEM去除 - 以後文字, , 若無 -, 則用 ITEM) 轉成數字 ,排序

select  PROJID,TYPE,
(case when instr(ITEM,'-')>0 then substring(ITEM,1,instr(ITEM,'-')-1) else ITEM end) as ITEM_,
CAST((case when instr(ITEM,'-')>0 then substring(ITEM,1,instr(ITEM,'-')-1) else ITEM end) as INTEGER) as ITEM__,   
                   ITEM ,WUC ,CHKCHG_NM ,CHKCHG_TM ,   
                   SITEM ,CHKCHG_TEXT ,PN ,IS_MULTI ,TMBASE1 ,   
                   TMFEQ1 ,TMUNIT1 ,TMBASE2 ,TMFEQ2 ,TMUNIT2 ,   
                   PTMVAL1 ,PTMUNIT1 ,PTMVAL2 ,PTMUNIT2 ,REMARK ,   
                   MKID ,MKDT ,ENG_LR ,HAS_FCHK ,FCHK_VAL ,   
                   IS_SER ,IS_CANCEL ,CANCEL_REASON   
           FROM  AMM_CHKCHG  A   
           WHERE  1=1   
           AND   PROJID  LIKE '%AJT%'
)
ORDER  BY PROJID,TYPE,ITEM__


c# SQL:

select  dense_rank()  over(order by  PROJID,TYPE,
CAST((case when instr(ITEM,'-')>0 then substring(ITEM,1,instr(ITEM,'-')-1) else ITEM end) as INTEGER)) as RNK,"
                                                  + "   PROJID ,TYPE ,ITEM ,WUC ,CHKCHG_NM ,CHKCHG_TM ,"
                                                     + "   SITEM ,CHKCHG_TEXT ,PN ,IS_MULTI ,TMBASE1 ,"
                                                     + "   TMFEQ1 ,TMUNIT1 ,TMBASE2 ,TMFEQ2 ,TMUNIT2 ,"
                                                     + "   PTMVAL1 ,PTMUNIT1 ,PTMVAL2 ,PTMUNIT2 ,REMARK ,"
                                                     + "   MKID ,MKDT ,ENG_LR ,HAS_FCHK ,FCHK_VAL ,"
                                                     + "   IS_SER ,IS_CANCEL ,CANCEL_REASON "
                                      + "  FROM  AMM_CHKCHG  A "
                                      + "  WHERE  1=1  ";

V1060301 – 專案別 – 必填欄位 , 不可空白 -background: #FFDBE4;

 目的: V1060301 – 專案別 必填欄位 , 不可空白 -background:  #FFDBE4; 

處理說明: 1>底色: background:  #FFDBE4; 


1>*.js
     Ext.getCmp("s_PROJID").fieldStyle = "background:  #FFDBE4;";
 
--> 為什麼如下 statment  沒有反應,底色未顯示 粉紅色
       Ext.getCmp("s_PROJID").InuptEI.addCls("required") ;  
       Ext.getCmp("s_PROJID").addCls("required") ;  


2026年6月9日 星期二

V1060302A - DATE_ADD - 搜尋字串 StrExtract , 且只在 *.js 中搜尋

目的: 搜尋字串 StrExtract , 且只在 *.js 中搜尋
          --> 按 Ctrl+Shift+F 或 [編輯]à[尋找和取代] à[在檔案中搜尋]
          --> 設定檔案類型(*.js)

處理說明: 1>按 Ctrl+Shift+F  --> 檔案類型 *.js



1>*.js
function DATE_ADD(par_DT, par_UNIT,par_VAL) {
    var Tmp_YYYY, Tmp_MM, Tmp_DD;
    var Tmp_YYYY1, Tmp_MM1, Tmp_DD1;
    var Tmp_ADD_YY1, Tmp_ADD_MM1;
    var Tmp_DT = DatetoStr(par_DT, "Y/m/d");    
    Tmp_YYYY = Number(StrExtract1(Tmp_DT, 1, "/"));
    Tmp_MM = Number(StrExtract1(Tmp_DT, 2, "/"));
    Tmp_DD = Number(StrExtract1(Tmp_DT, 3, "/"));
    Tmp_YYYY1 = Tmp_YYYY; Tmp_MM1 = Tmp_MM; Tmp_DD1 = Tmp_DD;



V1060305A – 結案 *.js – StrExtract函式在myfunc.js 及 V_UTIL.js 均有宣告 - 函式名稱重複宣告

 目的: V1060305A – 結案 *.js – StrExtract函式在myfunc.js V_UTIL.js 均有宣告
                       *.js  會呼叫最後載入的 StrExtract 函式

處理說明:  1>將myfunc.js 的 StrExtract  改名為 StrExtract1 , 避免呼叫到  V_UTIL.js 的函式
                                            導致錯誤
                                     2>myfunc.js    StrExtract  傳回字串
                                     3>V_UTIL.js     StrExtract  傳回Array
                   2>一般畫面(V30702A.js)  開頭程式時,都會先載入  myfunc.js(最後載入)
                       --> 所以會呼叫到  myfunc.js 的  StrExtract 函式 ,  非  V_UTIL.js 函式
                       --> 所以不會 Error 
                   3>myfunc.js  的 DATE_ADD 函式,呼叫  StrExtract 函式
                       --> 則可能會呼叫到  V_UTIL.js 的 StrExtract 函式
                       --> 因為 myfunc.js 載入時, 
                             不可再 Ext.Loader.loadScript({    url: '../Scripts/myfunc.js'});


1>*.js
var Tmp_L_CHKCHG_DT = nulltoStr(par_rec.data['L_CHKCHG_DT']).toString();
var Tmp_L_CHKCHG_DT2 = DATE_ADD(Tmp_L_CHKCHG_DT, Tmp_TMUNIT, Tmp_TMFEQ);

function DATE_ADD(par_DT, par_UNIT,par_VAL) {
    var Tmp_YYYY, Tmp_MM, Tmp_DD;
    var Tmp_YYYY1, Tmp_MM1, Tmp_DD1;
    var Tmp_ADD_YY1, Tmp_ADD_MM1;
    var Tmp_DT = DatetoStr(par_DT, "Y/m/d");    
    Tmp_YYYY = Number(StrExtract1(Tmp_DT, 1, "/"));
    Tmp_MM = Number(StrExtract1(Tmp_DT, 2, "/"));
    Tmp_DD = Number(StrExtract1(Tmp_DT, 3, "/"));
    Tmp_YYYY1 = Tmp_YYYY; Tmp_MM1 = Tmp_MM; Tmp_DD1 = Tmp_DD;
    switch (par_UNIT) {
        case "A":  //年
        {
            Tmp_YYYY1 = Tmp_YYYY + parseInt(par_VAL);
            break;
        }
        case "B":  //月
            {
                Tmp_MM1 = Tmp_MM + parseInt(par_VAL);
                Tmp_ADD_YY1 = Math.trunc((Tmp_MM1) / 12);  //取商數
                Tmp_YYYY1 = Tmp_YYYY + Tmp_ADD_YY1;
                Tmp_MM1 = Math.trunc((Tmp_MM1) % 12);  //取餘數
                break;
            }
        case "C":  //天
            {
                //日期函式 Tmp_DT.setDate( )  ; 日期不對  
                //Tmp_DD1 = Tmp_DD1 + par_VAL;                
                var Tmp_DT = new Date(par_DT);
                var Tmp_DD = Tmp_DT.getDate();
                //console.log("2 Tmp_DT:", Tmp_DT);
                //Tmp_DD 及 par_VAL 必需先轉成數值,才可以累加
                Tmp_DT.setDate(parseInt(Tmp_DD) + parseInt(par_VAL));   
                //console.log("3 Tmp_DT.setDate():", Tmp_DT);
                Tmp_YYYY1 = Tmp_DT.getFullYear();   // 年份 (例如 2026)
                Tmp_MM1 = Tmp_DT.getMonth() + 1; // 月份 (0~11,要 +1 才是正常月份)
                Tmp_DD1 = Tmp_DT.getDate();        // 日期 (1~31)                
                break;
            }
    }// end of switch (par_UNIT)    
    return Tmp_YYYY1.toString().padStart(4, "0") + "/" + Tmp_MM1.toString().padStart(2, "0") + "/" + Tmp_DD1.toString().padStart(2, "0");
}  // end of  function DATE_ADD(par_DT, par_UNIT,par_VAL) {