2023年9月11日 星期一

WPM全機維修模組 – 視窗的Title會亂碼

目的: WPM全機維修模組 – 視窗的Title會亂碼

處理說明:  1>登入畫面的 Title  及  Showmessage 時, 視窗的標題均抓  Application.Title 
                   2>Application.Title 設定位置如下:
                      Delphi IDE選項>Project>Options>Application Settings>Title  








2023年9月8日 星期五

V120401 -日期時間 –在Local電腦執行OK, 但在測試區執行卻出現錯誤訊息, - 在應為數值的位置發現非數值的 -日期時間

 目的: V120401 – 在Local電腦執行OK, 但在測試區執行卻出現錯誤訊息, 

            -在應為數值的位置發現非數值的

處理說明: 1> 在後端下 SQL 時, 出現錯誤 ,顯示 Tmp_Sql 欄位值
                  2>  因為 SQL 取[日期]欄位值 , 在 Local電腦不含時間
                                                                        但在測試區主機含時間, 
                         -->以致 insert SQL  日期欄位錯誤
                  3> 將日期時間字串,轉換成 日期字串
                       Tmp_rtnDT= DateTime.Parse(par_DateTMStr).ToString("yyyy/MM/dd");
                        Tmp_VNDTXY =  DateTime.Parse(dr1["VNDTXY"].ToString()).ToString("yyyy/MM/dd");


1>*.cs
Tmp_Sql = "  SELECT   NATIXX,LGTPXX,TMNOXX, OWN_DEP, "
                                     + "    ITEMXY,VNTPXD,VNDTXY,VNPGXY,DOREXY,REMKXY,"
                                     +"    VNVFXY  "
                                     + "   FROM     TM_XY@TLS_245 "
                                     + "  WHERE   OWN_DEP='L'   "
                                     + "   AND       TMNOXX=" + myfunc.AA(Tmp_TMNOXX)
                                     + "   AND       NATIXX=" + myfunc.AA(Tmp_NATIXX)
                                     + "   AND       LGTPXX=" + myfunc.AA(Tmp_LGTPXX);
                        Tmp_dt1 = myfunc.SqlOpen(Tmp_dt1, Tmp_Sql);
                        foreach (DataRow dr1 in Tmp_dt1.Rows)
                        {
      
                            Tmp_ITEMXY = dr1["ITEMXY"].ToString();
                            //String.Format("{0:yyyy/MM/dd}", DateTime.Parse(dr1["VNDTXY"].ToString()))
                            //Tmp_VNDTXY = dr1["VNDTXY"].ToString();
                            //if (!myfunc.checkisnull(dr1["VNDTXY"].ToString()))
      Tmp_VNDTXY = String.Format("{0:yyyy/MM/dd}", DateTime.Parse(dr1["VNDTXY"].ToString()));
      Tmp_VNDTXY =  DateTime.Parse(dr1["VNDTXY"].ToString()).ToString("yyyy/MM/dd");
                            //else
                            //    Tmp_VNDTXY = "";
                            Tmp_VNDTXY = myfunc.getDateStr(dr1["VNDTXY"].ToString());
                            Tmp_VNTPXD = dr1["VNTPXD"].ToString();

2023年9月6日 星期三

V120602 – [新增]鈕–項次=MAX+1 –[存檔]鈕 – nvc1,nvc1[ITM]=get_NEXT_ITM();

 目的: V120602 –  [新增]項次=MAX+1 –[存檔] – nvc1,nvc1[ITM]=get_NEXT_ITM();

處理說明: 1>[新增]鈕 - 設定必填/唯讀/計算欄位 , setFieldsCls()
                  2>前端欄位預設值: Ext.getCmp("STAT").setValue("A"); 
                                                     Ext.getCmp("STAT_").setValue("未結案");
                  3>[存檔]鈕 - 項次=max(項次)+1



1>*.js
 //新增
    Ext.getCmp('btn_add').on("click", function () {
        setFieldsCls('myform', 
         ['ITM', 'ACNO', 'DEPID', 'QDRNO', 'CURP'], ['ITM', 'UPPER', 'UPDT', 'STAT'], 
['ITM', 'ACNO', 'DEPID', 'QDRNO', 'REVDT', 'CURDEP', 'CURP', 'REFNO', 'DIRNO', 'REL_DIR_NO', 'WKD', 'PCMPDT', 'STATDCPTN', 'DFDCPTN', 'STAT', 'UPPER', 'CAU']);
        Ext.getCmp("STAT").setValue("A");
        Ext.getCmp("STAT_").setValue("未結案");
        is_add = true;
    });

2>*.cs
[HttpPost]
        public void Insert()
        {
            var c = System.Web.HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            NameValueCollection nvc1 = new NameValueCollection();
            foreach (string k in nvc.Keys)
            {
                nvc1[k] = nvc[k];
            }            
            nvc1["ITM"] = GET_NEXT_ITMNO();
            nvc1["UPPER"] = LoginUserModel.LoginUserId;
            nvc1["UPDT"] = DateTime.Now.ToString("yyyy/MM/dd");
            excuteInsert(nvc1, DBTable);          
        }

 //取得  AMM_QDR.ITM  最大值
        [HttpPost]
        public string GET_NEXT_ITMNO()
        {
            string Tmp_Sql;         
            Int32 Tmp_MAX_ITMNO, Tmp_NEXT_ITMNO;
            string Tmp_NEXT_ITMNO_Str;
            Tmp_Sql = " SELECT  MAX(CAST(ITM as integer ))  "
                            +"  FROM   AMM_QDR   " ;
            Tmp_MAX_ITMNO = int.Parse(myfunc.SqlValue(Tmp_Sql));
            if (myfunc.checkisnull(Tmp_MAX_ITMNO.ToString()))
            {
                Tmp_NEXT_ITMNO = 1;
            }
            else
            {                
                Tmp_NEXT_ITMNO = Tmp_MAX_ITMNO+1;
            };
            Tmp_NEXT_ITMNO_Str = Tmp_NEXT_ITMNO.ToString();
            return Tmp_NEXT_ITMNO_Str;
        }



2023年9月5日 星期二

V120602 – 編輯模式 - fieldCls – 必填,唯讀,計算欄位 - fieldCls : required, readonly,calulate - 挑選按鈕

 目的: V120602 – 編輯模式 – 設定欄位必填,唯讀,CaluField  - fieldCls - required, readonly ,Calucate

處理說明:  1>設定欄位唯讀 : fieldCls: "readonly" - 灰色
                                                   readOnly: true         - 不可輸入資料
                   2>設定欄位必填 : fieldCls: "required"  - 粉紅色
                   3>設定欄位Calu  : fieldCls: "calculate" - 淺黃色
                   4>挑選欄位         :  EditPickx('挑選', url , 傳回欄位,設定欄位, model, columns)
                   5>畫面欄位統一設定 : setFieldsCls('form_id',[必填s],[唯讀],[一般]) 
 

1>*.js
-唯讀欄位 
{
  xtype: "fieldcontainer", fieldLabel: "更新日期", labelWidth: 128, layout: "hbox", items: [
{
   id: "UPDT", name: "UPDT", xtype: "textfield", width: 100, padding: "0 4 0 0", maxLength: 10,
   fieldCls: "readonly",readOnly: true, 
}
]
},

-必填欄位
{
  xtype:"fieldcontainer",fieldLabel:"ITEM",labelWidth:128,layout:"hbox",items:[
{
id: "ITM", name: "ITM", xtype: "textfield", width: 100, padding: "0 4 0 0", maxLength: 10,
fieldCls: "required",
}
]
},

-計算欄位
{ id: "DEPID", name: "DEPID", xtype: "textfield", width: 100, padding: "0 4 0 0", maxLength: 20},
{
   id: "DEPID_", name: "DEPID_", xtype: "textfield", width: 300, padding: "0 4 0 0", maxLength: 20,
   fieldCls: "calculate", readOnly: true,
},

-[..] 挑選按鈕
{
   xtype: "button", id: "btn_DEPID", name: "btn_DEPID", text: "...",
   handler: function () {
   var win = EditPickx('挑選單位', '../api/V120602API/get_f_DEPIDPick', 
                                    ['DEPID','DEPNM'], ['DEPID','DEPID_'],    
                                    J_pickstore_f_DEPID, J_pickcolumns_f_DEPID);
    win.show();
}
},

-畫面欄位統一設定屬性:
  //新增
 Ext.getCmp('btn_add').on("click", function () {
    setFieldsCls('myform', 
   ['ITM', 'ACNO', 'DEPID', 'QDRNO', 'CURP', 'STAT'],  //required
   ['ITM', 'UPPER', 'UPDT',],                          //readonly
  ['ITM','ACNO','DEPID','QDRNO','REVDT','CURDEP','CURP','REFNO','DIRNO','REL_DIR_NO','WKD','PCMPDT','STATDCPTN','DFDCPTN','STAT','UPPER','CAU']);
    });

1>Options1: 設定欄位readonly] - 改變欄位底色
 Ext.getCmp("s_chk_OTHR").items.items[5].on('change', function (me, newValue, oldValue, eOpts) {
        if (newValue) {  //設定欄位 readonly 
            Ext.getCmp("s_PROJID").setValue("F16V");            
            Ext.getCmp("s_PROJID").setReadOnly(true);
            Ext.getCmp("s_PROJID").inputEl.addCls('readonly');            
        }
        else {  //移除欄位 readonly 
            Ext.getCmp("s_PROJID").setValue("");
            Ext.getCmp("s_PROJID").setReadOnly(false);
            Ext.getCmp("s_PROJID").inputEl.removeCls('readonly');            
        }


2>Options2: 透過函式 : setFieldsCls  - 必需在 win.show() 之後,才可 setFieldCls
//設定必填欄位
    setFieldsCls('mySubFormI',
        ['sub_PROJID', 'sub_ACNO_'],  //required

2023年9月4日 星期一

V120602 – [備註說明]欄位(textArea) – 顯示在Template下方,獨立顯示,不在Template內 - selectionchange -設定[備註]欄位值

 目的: 1>V120602 – [備註說明]欄位(textArea) – 顯示在Template下方,獨立顯示,不在Template

                      2> 資料切換至下一筆資料時,顯示新的欄位值

處理說明:   1> 新增 Panel,region: ‘south’, layout: {type:’vbox’,align: ‘stretch’},items:[欄位1,欄位2],
                    2> TMGrid.selectionchange event , 設定欄位值


1>*.js
1>>新增下方備註欄位 Panel
 var viewport = Ext.create('Ext.container.Viewport', {
        layout: 'border',
        items: [{
            region: 'center',
            layout: 'fit',
            //autoScroll: true,
            flex: 2,
            border: false,
            items: [TMSingleViewEdit,]
        },
            Tmp_Descript_Panel,
        ]
    });

 var Tmp_Descript_Panel = Ext.create("Ext.Panel", {
        region: 'south',
        layout: { type: 'vbox', align: 'stretch' },
        title: "說明Panel",
        height: 150,
        items: [
            Tmp_DFDCPTN,
            Tmp_STATDCPTN,
        ]
    })

  var Tmp_DFDCPTN = get_cmp_txtarea1("缺失說明", "f_DFDCPTN", 80, 600,10);
  var Tmp_STATDCPTN = get_cmp_txtarea1("進度說明", "f_STATDCPTN", 80, 600, 10);

2>資料切換時,顯示欄位值 - selectionchange event
        Ext.getCmp('grid_Single').on('selectionchange', function (par_model, par_selected, par_opts) {
        if (par_selected.length > 0) {
            var cur_DFDCPTN = par_selected[0].data["DFDCPTN"];
            var cur_STATDCPTN = par_selected[0].data["STATDCPTN"];
            Ext.getCmp("f_DFDCPTN").setValue(cur_DFDCPTN);
            Ext.getCmp("f_STATDCPTN").setValue(cur_STATDCPTN);
        }
         else {  //若無資料,則 欄位值空白
            Ext.getCmp("f_DFDCPTN").setValue("");
            Ext.getCmp("f_STATDCPTN").setValue("");
        }

2023年8月30日 星期三

V120401 - 取得目前資料的欄位值 – [刪除] – 更新單況 - SelectionModel() -cur_rec - cur_recs

 目的: V120401 – [刪除] – 更新單況

處理說明: 1>


1>*.js
//刪除 - 資料庫刪除資料
    Ext.getCmp('btn_del').afterDel = function () {
        var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
        var cur_rec = cur_recs[0];
        var Tmp_TMNO = cur_rec.data['TMNO'].toString();
        var Tmp_result = S_DB.afterDel();  // 執行後端  Delete 程式
        if (Tmp_result) {
            var Tmp_Str = "條碼編號(" + Tmp_TMNO + ")的管制現況已改為 Z:已刪除";
            mysuccessalert(Tmp_Str);            
        }

        return Tmp_result;        
    };


2>*.cs
[HttpPost]
        public void Delete()
        {
            var c = System.Web.HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            //string[] arrCondition = new string[] { "" };
            //getPK(): 取得本Table 的 PK (AMM_TMDWG.TMNO)
            string[] arrCondition = getPK();
            //nvc : 傳入目前資料的欄位值
            //excuteDelete(nvc, DBTable, arrCondition);
            string Tmp_TMNO = nvc["TMNO"];
            string Tmp_Sql = "  UPDATE   AMM_TMDWG  "
                                       + "  SET           STAT='Z'   "
                                       + "  WHERE    TMNO=" + myfunc.AA(Tmp_TMNO);
            myfunc.SqlExec(Tmp_Sql);
        }



V120401 - 日期區間 – 過濾條件 – 2021/08/02 ~ 2021/08/02

 目的: V120401 - 日期區間 過濾條件 – 2021/08/02 ~ 2021/08/02

處理說明:  1>前端 : 日期區間 – 2021/08/02 ~ 2021/08/02
                          --> 應該要包含 日期: 2021/08/02
                     2>後端:  AND   MKDT>='2021/08/02'  
                                      AND   MKDT<'2021/08/03
                     3>後端: 日期+1
                               DateTime.Parse(nvc["s_MKDT2"]).AddDays(1));



1>*.js
 //建檔日期
    var cmp_MKDT = get_cmp_dt1('建檔日期', 's_MKDT1', 80, 100);
    var cmp_MKDT_lbl = get_cmp_lbl0(" ~ ", 20);
    var cmp_MKDT2 = get_cmp_dt0('s_MKDT2', 100);
    cmp_MKDT.items.push(cmp_MKDT_lbl, cmp_MKDT2);    
    var Query = new Ext.FormPanel({
        id: 's_form',
        height:120,
        layout: { type: 'hbox', align: 'stretch' },
        fieldDefaults: { labelAlign: 'right' },
        defaults: { margin: { top: 3 } },
        items: [
            {
                xtype: 'panel',  id: 'panel1',  layout: { type: 'hbox', align: 'stretch' },   flex: 14,  border: 0,
                items: [
                    {
                        xtype: 'panel',  id: 'panel11',  layout: { type: 'vbox', align: 'stretch' }, flex: 25,   border: 0,
                        items: [cmp_TMNOXX, cmp_DOCNO, cmp_TMNO],
                    },  // end of panel11
                    {
                        xtype: 'panel',  id: 'panel12', layout: { type: 'vbox', align: 'stretch' }, flex: 30, border: 0,
                        items: [cmp_VOL, cmp_STLCT,  cmp_MKDT],                        
                    },   // end of panel12 , flex:16                    
   

2>*.cs
//建檔日期  - 起  - 迄
            string Tmp_MKDT1 = "";   //建檔日期  - 起迄
            string Tmp_MKDT2 = "";   //建檔日期  - 起迄
            if (!myfunc.checkisnull(nvc["s_MKDT1"]))
            {
                Tmp_MKDT1 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_MKDT1"]));
            };
            if (!myfunc.checkisnull(nvc["s_MKDT2"]))
            {
                Tmp_MKDT2 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_MKDT2"]).AddDays(1));
            };
            string Tmp_Sql1 = "";
            
            if ((!myfunc.checkisnull(Tmp_MKDT1)) || (!myfunc.checkisnull(Tmp_MKDT2)))
            {
                if (!myfunc.checkisnull(Tmp_MKDT1))
                {
                    Tmp_Sql1 = Tmp_Sql1 + "  AND        MKDT>=" + myfunc.AA(Tmp_MKDT1);
                };
                if (!myfunc.checkisnull(Tmp_MKDT2))
                {
                    Tmp_Sql1 = Tmp_Sql1 + "  AND        MKDT<" + myfunc.AA(Tmp_MKDT2);
                }
                Tmp_Sql = Tmp_Sql + Tmp_Sql1;
            };