2025年8月4日 星期一

v20305D - str2int("1.00") - 會產生錯誤 - 輸入字串格式錯誤 - str2float - throw new Exception(Tmp_ErrMsg);

 目的: str2int("1.00") - 錯誤訊息

處理說明:1>錯誤訊息,"輸入字串格式不正確" , 使用者不清楚錯誤原因                  
                 2>提供更明確的錯誤訊息 "str2int('1.00') , 輸入字串格式不正確" --> str2int('1.00')錯誤
                      throw new Exception(Tmp_ErrMsg);                


1>*.cs
//Tmp_QPA="1.00", myfunc.str2int(Tmp_QPA) --> 產生錯誤訊息, "輸入字串格式不正確"  
//-->  改成 str2float
if (!((Tmp_RSTHAH == "I") || (myfunc.str2float(Tmp_QPA) == 0) || (Tmp_QPA == "AR")))\
{

2>myfunc.cs - 錯誤訊息更明確  - str2int(string par_str)
 public static int str2int(string par_str)
        {
            try
            {
                int Tmp_int = 0;
                if ((par_str == null) || (par_str.Equals("")))
                    Tmp_int = 0;
                else
                    Tmp_int = int.Parse(par_str);
                return Tmp_int;
            }
            catch (Exception e)
            {
                //Console.WriteLine(e);
                string Tmp_ErrMsg = "str2int(" + myfunc.AA(par_str) + ")<br>"
                                                   + e.Message;
                throw new Exception(Tmp_ErrMsg);                
            }
        }

V20305D – [批次匯入]- tooltip – Hint – 按鈕顯示輔助說明 - 訊息

目的: V20305D – [批次匯入]- tooltip – Hint – 顯示輔助說明

 處理說明: 1> Ext.getCmp("btn_V20305D").tooltipType = "title";
                   2> Ext.getCmp("btn_V20305D").tooltip ="資料來源(DTSOR):T,"
                                                                      + "且可提料(REQMAF)=Y,"
                                                                      +"才可執行[批次匯入]";



1>*.js
 //設定tooltips
   //Ext.QuickTips.init();
    Ext.getCmp("btn_V20305D").tooltipType = "title";
    Ext.getCmp("btn_V20305D").tooltip ="資料來源(DTSOR):T,"
                                                                      + "且可提料(REQMAF)=Y,"
                                                                      +"才可執行[批次匯入]";
-->
var Tmp_Str = "資料來源(DTSOR):T,<br>"
                     + "且可提料(REQMAF)=Y,<br>"
                     + "才可執行[批次匯入]<br>";
    Tmp_Str = Tmp_Str.replaceAll("<br>", "");
    Ext.getCmp("btn_V20305D").tooltipType = "title";
    Ext.getCmp("btn_V20305D").tooltip = Tmp_Str;




2025年7月29日 星期二

使用者介面考量重點: UI

 目的:  UI 使用者介面考量重點: UI




2025年7月24日 星期四

V30102 - 日期格式只取時間 - Oracle SQL - 日期格式轉成 yyyy/mm/dd

目的: V30102 - 日期格式只取時間  - Oracle SQL - 日期格式轉成 yyyy/mm/dd

處理說明: 1>日期格式只取時間
                             to_char(TFTM, 'HH24:mi')
                  2>日期格式 : yyyy/mm/dd
                         TO_CHAR(EXC_INSDATE,'yyyy/mm/dd')




1>SQL如下:
     SELECT    TFTM, to_char(TFTM, 'HH24:mi'),CLTM ,to_char(CLTM, 'HH24:mi'),FYTM,FLTOTM,NARPNUM
      FROM       AMM_AFD
      WHERE     ASSNO='A20240320001'
       AND rownum=1
      ORDER BY AFDNO DESC;


2>將日期欄位格式轉成 yyyy/mm/dd
SELECT  CTRLNO,WBS,MTER,BATCH,
                TO_CHAR(EXC_INSDATE,'yyyy/mm/dd') as EXC_INSDT,
                EXC_INSDATE,EXC_UPDDATE
FROM      AMM_MTRM
WHERE   BATCH IS NOT NULL
AND         TO_CHAR(EXC_INSDATE,'yyyy/mm/dd')='2025/07/24'
ORDER   BY EXC_INSDATE DESC;


V20305 – grid_M加入 ToolBar 且放在分頁的下方 - AddDocked

 目的: V20305零件需求登錄 – grid_M加入 ToolBar 且放在分頁的下方 - AddDocked

處理程序: 1> Ext.getCmp('grid_M').addDocked({:Toolbar元件},index);
                        Ext.getCmp('grid_M').addDocked({
                                       xtype: 'toolbar',
                                       dock: 'bottom',
                                       items: [cmp_myToolBar]
                                       },1);




1>*.js
    Ext.getCmp('grid_M').addDocked({
        xtype: 'toolbar',
        dock: 'bottom',
        items: [cmp_myToolBar]
    },1);

2025年7月23日 星期三

V20305F – 單筆提料 – [搜尋]鈕 – 顯示SBOM節點(N_EI_UOC).件號=需求件號(Tmp_dt1.Select(PN=’xx’)) -ds2T1C

 目的: V20305F – 單筆提料 – [搜尋] 
            – 顯示SBOM節點(N_EI_UOC).件號=需求件號(Tmp_dt1.Select(PN=’xx’))

處理程序:  1>取得 SBOM所有節點(N_EI_UOC)
                     2>過濾 SBOM所有節點中,件號=需求件號的節點
                          Tmp_Dr_Ary=Tmp_dt1.Select(PN=’xx’);


1>*.cs
      DataRow[] Tmp_dr_Ary;
      DataTable Tmp_F_dt1 = new DataTable();
      string Tmp_F_Str = "PN = " + myfunc.AA(Tmp_sub_RQPN);
      Tmp_dr_Ary = Tmp_dt1.Select(Tmp_F_Str);
      if ( !(Tmp_dr_Ary.Length == 0) )                
             Tmp_F_dt1= Tmp_dr_Ary.CopyToDataTable();   //若  null.CopyToDataTable() 會 Error
     DataSet ds = new DataSet();            
     try
        {
           ds.Tables.Add(Tmp_F_dt1);
           ds = myfunc.ds2T1C(ds);

2025年7月20日 星期日

V20305F – [單筆提料]鈕 - 挑選按鈕 – get_pick_btn

 目的: V20305F – [單筆提料]  - 挑選按鈕 – get_pick_btn 

處理說明: 1> *.js     
    var cmp_sub_RQPN = get_cmp_txt1('需求件號', 'sub_RQPN', 80, 130);
    var cmp_pick_sub_RQPN = get_pick_btn0('挑選需求件號', 'btn_sub_RQPN',
        '../api/V20305FAPI/get_sub_RQPNPick?isComplete=0&par_PN=' + Tmp_PN + '&par_OGONOAF='+ Tmp_OGONOAF,
        ['RQPN'], ['sub_RQPN'], J_pickstore_sub_RQPN, J_pickcolumns_sub_RQPN);
    cmp_sub_RQPN.items.push(cmp_pick_sub_RQPN);
--> 傳回欄位名稱,當成挑選子畫面.過濾欄位

               2>*.cs
//過濾條件 [需求件號(RQPN)]挑選
        [HttpPost]
        public dynamic get_sub_RQPNPick(string par_PN, string par_OGONOAF, string RQPN = "", int isComplete = 0)
        {
            string Tmp_Sql = "  SELECT  DISTINCT A.RQPN  "
                                        +"   FROM    AMM_UOC A, CSM_AF @TLS_245 B   "
                                        +"  WHERE   A.RPNOAF = B.RPNOAF  "
                                        +"   AND        B.PN ="+myfunc.AA(par_PN)
                                        +"   AND         B.GONOAF ="+myfunc.AA(par_OGONOAF)
                                         +"  AND         A.RQPN IS NOT NULL   "
                                         +"  ORDER    BY RQPN   ";
            string n = funId + "sub_PN";
            DataSet ds = setupPickDs(n, Tmp_Sql, new string[] { "AMM_UOC" });
            if (RQPN != null && !RQPN.Equals(""))
            {
                if (isComplete == 1)
                {
                    ds = getPickDsbyCondi(n, "RQPN='" + RQPN + "'");
                }
                else
                {
                    ds = getPickDsbyCondi(n, "RQPN  LIKE '%" + RQPN + "%'");
                }
            }
            return ds;
        }  // end of  get_sub_PNPick





1>*.js
  //panel11 需求件號               
    var cmp_sub_RQPN = get_cmp_txt1('需求件號', 'sub_RQPN', 80, 130);
    var cmp_pick_sub_RQPN = get_pick_btn0('挑選需求件號', 'btn_sub_RQPN',
        '../api/V20305FAPI/get_sub_RQPNPick?isComplete=0&par_PN=' + Tmp_PN + '&par_OGONOAF='+          
 Tmp_OGONOAF,
        ['RQPN'], ['sub_RQPN'], J_pickstore_sub_RQPN, J_pickcolumns_sub_RQPN);
cmp_sub_RQPN.items.push(cmp_pick_sub_RQPN);

--> 過濾欄位名稱 = 傳回欄位名稱




2>*.cs

//過濾條件 [需求件號(RQPN)]挑選
        [HttpPost]
        public dynamic get_sub_RQPNPick(string par_PN, string par_OGONOAF, string RQPN = "", int isComplete = 0)
        {
            string Tmp_Sql = "  SELECT  DISTINCT A.RQPN  "
                                        +"   FROM    AMM_UOC A, CSM_AF @TLS_245 B   "
                                        +"  WHERE   A.RPNOAF = B.RPNOAF  "
                                        +"   AND        B.PN ="+myfunc.AA(par_PN)
                                        +"   AND         B.GONOAF ="+myfunc.AA(par_OGONOAF)
                                         +"  AND         A.RQPN IS NOT NULL   "
                                         +"  ORDER    BY RQPN   ";
            string n = funId + "sub_PN";
            DataSet ds = setupPickDs(n, Tmp_Sql, new string[] { "AMM_UOC" });
            if (RQPN != null && !RQPN.Equals(""))
            {
                if (isComplete == 1)
                {
                    ds = getPickDsbyCondi(n, "RQPN='" + RQPN + "'");
                }
                else
                {
                    ds = getPickDsbyCondi(n, "RQPN  LIKE '%" + RQPN + "%'");
                }
            }
            return ds;
        }  // end of  get_sub_PNPick