2023年8月14日 星期一

V120401 - DataTable 用法介紹 - 1

 目的:  V120401  - DataTable 的用法介紹

參考網址: http://www.aspphp.online/bianchen/dnet/cxiapu/cxprm/201701/188855.html


1>Create  Table
DataTable dt= new DataTable("T1");

2>Create Columns
int Tmp_Cnt = ds.Tables["T1"].Rows.Count;
ds.Tables["T1"].Columns.Add(new DataColumn("VNDTXY_", typeof(string)));
dt.Columns.Add(new DataColumn("VNTPXD_", typeof(string)));
dt.Columns.Add(new DataColumn("MKER_", typeof(string)));

3>Add row     DataRow dr = dt.NewRow();
dr["VNDTXY_"] = "AX";

4>SeletRows
    DataRow[] drs = dt.Select("column0 = 'AX'");

5>Copy DataTable include data
     DataTable dt1 = dt.Copy();

6>Copy DataTable only scheme
    DataTable dt2 = dt.Clone();  



V120401 - SqlOpen - 傳回 DataTable - C#

 目的: V120401  -   SqlOpen  - 傳回 DataTable   - C#

處理說明:  1>利用 myfunc.SqlOpen(par_dt1, par_Sql) , 傳回  DataTable

                   2> Tmp_dt1=SqlOpen(Tmp_dt1,Tmp_Sql);  //必需接收 DataTable


1>*.cs

DataTable Tmp_dt1= new DataTable();
Tmp_Cnt=Tmp_dt1.Rows.Count();

 for (int i = 0; i < Tmp_Cnt; i++)
            {
                DataRow dr = ds.Tables["T1"].Rows[i];
                //取得  發工人員/管制人員(SAPMAN/CREMPLYID).姓名
                Tmp_MKER_ = myfunc.getEmp_NM(dr["MKER"].ToString());                
                dr["MKER_"] = Tmp_MKER_;

                //取得  [最新版期(VNDTXY)] [最新版別(VNTPXD)] , 
                Tmp_TMNOXX = dr["TMNOXX"].ToString(); //技令編號
                Tmp_NATIXX = dr["NATIXX"].ToString();     //國別
                Tmp_LGTPXX = dr["LGTPXX"].ToString();   //中英文
                Tmp_Sql = " SELECT   VNTPXD,VNDTXY  "
                               + "  FROM    TM_XY@TLS_245  "
                               + "  WHERE  1 = 1  "
                               + "  AND        OWN_DEP = 'L'    "
                               + "  AND        TMNOXX = " + myfunc.AA(Tmp_TMNOXX)
                               + " AND         NATIXX = " + myfunc.AA(Tmp_NATIXX)
                               + "  AND         LGTPXX = " + myfunc.AA(Tmp_LGTPXX)
                               + "  ORDER    BY VNTPXD   ";  //依[版別]排序
                Tmp_dt1=myfunc.SqlOpen(Tmp_dt1, Tmp_Sql);
                Tmp_cnt1 = Tmp_dt1.Rows.Count;                
                for (int j = 0; j < Tmp_cnt1; j++)
                {
                    DataRow dr1 = Tmp_dt1.Rows[j];
                    Tmp_VNDTXY_ = Tmp_VNDTXY_ + DateTime.Parse(dr1["VNDTXY"].ToString()).ToString("yyyy/MM/dd")+";";
                    Tmp_VNTPXD_ = Tmp_VNTPXD_+ dr1["VNTPXD"].ToString() + ";";
                }
                dr["VNDTXY_"] = Tmp_VNDTXY_;
                dr["VNTPXD_"] = Tmp_VNTPXD_;
            }  // end of for (int i = 0; i < Tmp_Cnt; i++)            
           





V120401 - radio 文字折行, checkbox

 目的: V120401 - radio 文字折行, checkbox

處理說明: 1>將 radio.width ='100%' 即可



1>*.js
// panel13            
    var cmp_STAT = get_cmp_rdgrp1('現況', 's_STAT', 80);    
    var cmp_STAT1 = get_cmp_rd0('全部(不含刪除)', 's_STAT', 50, 'ALL');
    cmp_STAT1.checked = true;
    var cmp_STAT2 = get_cmp_rd0('可借閱', 's_STAT', 50, 'A');
    var cmp_STAT3 = get_cmp_rd0('已借出', 's_STAT', 50, 'B');
    var cmp_STAT4 = get_cmp_rd0('已刪除', 's_STAT', 50, 'Z');
    cmp_STAT.items.push(cmp_STAT1, cmp_STAT2, cmp_STAT3, cmp_STAT4);
    
2>myfunc.js
//get_cmp_rd0 取得 check 元件 , 加入 rdgrp ,  name: par_name
function get_cmp_rd0(par_caption, par_name, par_l_width, par_value, par_margin) {
    if (checkisnull(par_margin))
        par_margin = '0  0  0 0 '
    var rtn_cmp =
    {
        xtype: 'radiofield', boxLabel: par_caption,
        name: par_name,
        labelWidth: par_l_width,
        inputValue: par_value,
        margin: par_margin,        
        //width: '100%',
        width: 120,
        flex: 20,
    }
    return rtn_cmp;
}





2023年8月6日 星期日

V80201 WebService 錯誤訊息: 找到多個該合約的端點組態。請以名稱指示偏好的端點組態區 - WS定義的網址 – 記錄在 Web.config 內

 目的: WebService定義的網址 記錄在 Web.config

處理說明: 1>由  web.config  查詢最新的   WebService   IP

                  2>[加入服務參考]設定後 , web.config 會有重覆的 WebService名稱

                      必需將重覆的 WebService名稱(PLM04) 刪除

                      否則會有錯誤訊息(xx 多個該合約的端點組態)


若呼叫 WebService 時,出現如下錯誤訊息: 
-->無法載入合約 'AMM_PLM04.ServiceSoap' 的端點組態區段,因為找到多個該合約的端點組態。請以名稱指示偏好的端點組態區
-->
  



2023年8月2日 星期三

V40AA – SAP工單狀態異動 – 傳回 TXT檔至前端 - dt2JSON - JSON2dt - Cookie - 勾選資料

 目的: V40A – [SAP工單狀態異動] 傳回 TXT檔至前端

處理說明: 1>將勾選的資料傳至後端  (JSON2dt)
                 2>後端開啟TXT檔案
                3>依每筆資料呼叫 WebService , 並將傳回訊息寫入檔案
                4>將TXT檔案   傳至前端
                5>將訊息加入 Cookie 




1>將勾選的資料傳至後端
   1>>*.js
                     var Tmp_DataAry = [];
                     var cur_rec;
                     for (let i = 0; i < CHK_PK_OBJ.PK_LIST.length; i++) {                        
                        cur_rec = CHK_PK_OBJ.ALL_LIST[i];
                        Tmp_DataAry.push(cur_rec);
                    }  // for i=0 to 
                    //將 DataAry轉成 JSON
                    var Tmp_DataString = JSON.stringify(Tmp_DataAry);
                    var np = {}; //TMFunction.js, 組合form上的查詢條件為json參數傳遞                                            np["sub_DataString"] = Tmp_DataString;  //存入目前勾選的資料

      -->後端處理 *.cs  ,  將 JSON 轉成 table
           string Tmp_DataString = nvc["sub_DataString"];   
           DataTable dt1 = myfunc.JSON2dt(Tmp_DataString);  //目前子畫面所勾選的資料

2>後端開啟TXT檔案
     1>>*.cs
          using System.Text;
          string Tmp_out_FName = "V40A_SAP工單單況異動_log.txt";      //處理_log.txt
            string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\";  // 取得實實的路徑            
            string Tmp_out_pFName = documentPath + Tmp_out_FName;    //含 path 的Filename
                                                                     //清除檔案內容
            if (File.Exists(Tmp_out_pFName))
            { File.Delete(Tmp_out_pFName); }
            File.WriteAllText(Tmp_out_pFName, String.Empty);
            Tmp_Str = " 工單號碼                     工單異動說明                         " +"\r\n";;
            File.AppendAllText(Tmp_out_pFName, Tmp_Str);


3>依每筆資料呼叫 WebService , 並將訊息寫入TXT檔案
    1>>*.cs
          //處理每筆工單
            for (var i = 0; i < dt1.Rows.Count; i++)
                {
                    Tmp_SAPNO = dt1.Rows[i]["SAPNO"].ToString();
                    //呼叫 WebService , 取得傳回 ds
                    Tmp_ds = myfunc.set_SAPSTAT(Tmp_SAPNO, Tmp_STAT, Tmp_EMPLYID);
                    var Tmp_dr = Tmp_ds.Tables[0].Rows[0];
                    Tmp_Str = Tmp_dr["AUFNR"].ToString() + "                " + Tmp_dr["MSG"].ToString()+ "\r\n";              
                     File.AppendAllText(Tmp_out_pFName, Tmp_Str);
                }//  end of  for (var i = 0; i < dt1.Rows.Count; i++)       
          
      2>>呼叫 WebService
public static dynamic set_SAPSTAT(string par_SAPNO, string par_STAT,string par_EMPLYID)
        {            
            string Tmp_Str = "";
            DataSet ds=new DataSet(); 

            if ((!checkisnull(par_SAPNO))  && (!checkisnull(par_STAT)))
            {
                ZCO02.ZRFC_ZCO02SoapClient ZCO02_cls = new ZCO02.ZRFC_ZCO02SoapClient();
                try
                {
                    ds = ZCO02_cls.PROCESS_TRANS_WEB_CO02(par_SAPNO, par_STAT, par_EMPLYID);                    
                }
                catch (Exception ex)
                { }  //throw ex;  可能回傳 null
                finally
                { };
            }
            return ds;
        }  


4>將TXT檔案   傳至前端
      HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode((string)Tmp_out_FName, System.Text.Encoding.UTF8) + "\"");
      HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
      HttpContext.Current.Response.ContentType = "text/plain";
      HttpContext.Current.Response.WriteFile(Tmp_out_pFName);
      HttpContext.Current.Response.End();



5>訊息加入 Cookie
     //記錄 " 已執行完成 Cookie "
    var Tmp_finished_str = "已執行完成!!";
    MyCookie = new HttpCookie("UPDATE_SAPSTAT_finished", HttpUtility.UrlEncode(Tmp_finished_str));
    HttpContext.Current.Response.Cookies.Add(MyCookie);


2023年7月31日 星期一

V40A – [過濾資料]鈕 – 不分頁, 顯示在同一頁 -T1C– 取得 SQL全部資料後, 過濾資料, 再顯示在同一頁 - 重設總筆數

目的: V40A – [過濾資料]顯示在同一頁 取得 SQL全部資料後, 過濾資料, 再顯示在同一頁

處理說明: 1> getGridData_M 取全部資料 , 不分頁(par_paging=false)
                 2> 取得 CaluField  - SAP單況(I0001/I0002/..)         
                 3> 過濾  SAP單況 , 符合條件的保留, 不符合的 dr.delete()
                 4> 傳回符合條件的 ds , 必需修改 ["T1C"]  欄位值(總筆數)
                      ds.Tables["T1C"].Rows[0]["TOTAL"] = ds.Tables["T1"].Rows.Count;
                  5> 不分頁, 全部顯示在同一頁,設定每頁筆數=9999(store.pageSize)
                        Ext.getCmp('grid_Single').store.pageSize = 9999;   
              6>[過濾SAP單況]鈕, 必需將過濾欄位值記錄為[過濾條件欄位(s_Filter_Str)]-隱藏欄位,
                     以便顯示時,依該過濾條件過濾
                     --> [資料顯示]時,再清除該欄位值(s_Filter_Str)    


    1>*.js
//[過濾 SAP單況]鈕
 {
            xtype: 'button', text: '確定', id: 'OkBtn_V40AB',
            listeners: {
                click: function (me, e, eOpts) {
                    //1>更新資料庫資料(AMM_COMPQTY)
                    var Tmp_Str = "";
                    if (!(Ext.getCmp("s_SAPSTAT1").getValue()) && !(Ext.getCmp("s_SAPSTAT2").getValue()) && !(Ext.getCmp("s_SAPSTAT3").getValue())) {
                        Tmp_Str = "SAP單況不可均不勾選<br>"
                            + " 敬請檢核 !!";
                        mywarnalert(Tmp_Str);
                        return;
                    }
                    var Tmp_Filter_Str = "";
                    if (Ext.getCmp("s_SAPSTAT1").getValue()) {
                        Tmp_Filter_Str = Tmp_Filter_Str + "I0001" + ",";
                    }
                    if (Ext.getCmp("s_SAPSTAT2").getValue()) {
                        Tmp_Filter_Str = Tmp_Filter_Str + "E0014" + "," + "E0015" + ",";
                    }
                    if (Ext.getCmp("s_SAPSTAT3").getValue()) {
                        Tmp_Filter_Str = Tmp_Filter_Str + "I0002" + ",";
                    }
                    if (checkisnull(Tmp_Filter_Str)) {
                        Tmp_Filter_Str = Tmp_Filter_Str.substr(0, Tmp_Filter_Str.length - 1);
                    }
                    // 重新顯示 - 全部顯示在同一頁
                    var np = s_JSON('s_form'); //TMFunction.js, 組合form上的查詢條件為json參數傳遞      
                    np["s_isSAPSTAT"] = Ext.getCmp('s_isSAPSTAT').getValue();
                    np["s_TYPEAF"] = Ext.getCmp('s_TYPEAF').getValue();
                    np["s_Filter_Str"] = Tmp_Filter_Str;
                    //console.log('1 gridstore: ', gridstore);
                    var gridstore = Ext.getCmp('grid_Single').store;                            
                    gridstore.getProxy().url = '../api/V40AAPI/getGridData_M?par_paging=false';
                    gridstore.getProxy().extraParams = np; //分頁OK,篩選條件OK                            
                    Ext.getCmp('grid_Single').store.pageSize = 9999;                        
                    Ext.getCmp('grid_Single').reloadGridData();      
                    this.up("window").close();
                    this.up("window").destroy();
                }
            },
        },


//[顯示資料]鈕, 一般正常分頁顯示
  {
                        xtype: 'button',
                        id: 'btn_Show',
                        flex: 2,
                        border: 1,
                        text: '資料顯示',
                        iconCls: 'icon-search',
                        handler: function () {
                            // 更新 STP欄位值                            
                       var np = s_JSON('s_form'); //TMFunction.js, 組合form上的查詢條件為json參數傳遞  
                            np["s_isSAPSTAT"] = Ext.getCmp('s_isSAPSTAT').getValue();
                            np["s_TYPEAF"] = Ext.getCmp('s_TYPEAF').getValue();
                            np["s_Filter_Str"] = "";   //[過濾SAP單況]鈕,才會有值過濾SAP單況條件空白
                            //console.log('1 gridstore: ', gridstore);
                            //var gridstore = Ext.getCmp('grid_Single').store;                            
                            gridstore.getProxy().url = '../api/V40AAPI/getGridData_M';
                            gridstore.getProxy().extraParams = np; //分頁OK,篩選條件OK                            
                            Ext.getCmp('grid_Single').store.pageSize = 30;
                            Ext.getCmp('grid_Single').reloadGridData();          
                            
                        }
                    },  // end of 顯示資料

2>V40A*.cs
  [HttpPost]
        public dynamic getGridData_M(bool par_paging = true)
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;

            //panel1
            string Tmp_AMMNO = nvc["s_AMMNO"];
            string Tmp_SAPNO = nvc["s_SAPNO"];
            string Tmp_WBSNO = nvc["s_WBSNO"];
            string Tmp_PN = nvc["s_PN"];
            //panel2
            string Tmp_OGONOAF = nvc["s_OGONOAF"];  //拆檢提領編號
            string Tmp_NGONOAF = nvc["s_NGONOAF"]; //維修提領編號
            string Tmp_MRPNOAF = nvc["s_MRPNOAF"];  //拆檢交修編號
            string Tmp_RPNOAF = nvc["s_RPNOAF"];  //維修交修編號
            //panel3
            string Tmp_SAPMAN = nvc["s_SAPMAN"];
            string Tmp_FIXSN = nvc["s_FIXSN"];
            string Tmp_CREMPLYID = nvc["s_CREMPLYID"];
            string Tmp_FACWC = nvc["s_FACWC"];
            //panel4
            string Tmp_isSAPSTAT = nvc["s_isSAPSTAT"];   //料號
            string Tmp_TYPEAF = nvc["s_TYPEAF"];   //'3'/'4' : 拆檢約/維條約
            string Tmp_Filter_Str = nvc["s_Filter_Str"];  //過濾 SAP單況
            string Tmp_SAPDT1 = "";   //發工日期  - 起迄
            string Tmp_SAPDT2 = "";   //發工日期  - 起迄
            if (!myfunc.checkisnull(nvc["s_SAPDT1"]))
            {
                Tmp_SAPDT1 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_SAPDT1"]));
            };
            if (!myfunc.checkisnull(nvc["s_SAPDT2"]))
            {
                Tmp_SAPDT2 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_SAPDT2"]));
            };
            OracleCommand cmd = new OracleCommand();
            string Tmp_Sql = " SELECT  RNK,     "
                                       + "   AMMNO,SAPNO,PN,FIXSN,PNNAME,SAPMAN,SAPDT,WBS,QTY,UNIT, "
                                       + "    FMNO,OGONOAF,NGONOAF,MRPNOAF,RPNOAF,TYPEAF,FACWC,"
                                       + "     CREMPLYID,NEMPID,MEMPID  "
                                       + "  FROM  ( "
                                      + "   SELECT    dense_rank()  over(order by  A.AMMNO,B.FMNO) as RNK,"
                       + "   A.AMMNO,A.SAPNO,A.PN,A.FIXSN,A.PNNAME,A.SAPMAN,A.SAPDT,A.WBS, A.QTY,A.UNIT, "
                       + "   B.FMNO,B.OGONOAF,B.NGONOAF,B.MRPNOAF,B.RPNOAF,B.TYPEAF,B.FACWC, "
                                                     + "   B.CREMPLYID,B.NEMPID,B.MEMPID "
                                      + "  FROM    AMM_SRO A, AMM_FM B "
                                      + "  WHERE  A.AMMNO=B.AMMNO   "
                                      + "   AND       A.AMMSTS  NOT  IN ('A','B','F','G','H','I','W','X','Y','Z')  "
                                      + "   AND      A.SAPNO   IS NOT NULL  "
                                      + "   AND     A.ISSYS='Y'   ";
            //AMM單號
            if (!myfunc.checkisnull(Tmp_AMMNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.AMMNO  = " + myfunc.AA(Tmp_AMMNO);
            };
            //工號
            if (!myfunc.checkisnull(Tmp_SAPNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.SAPNO=" + myfunc.AA(Tmp_SAPNO);
            };
            //WBS
            if (!myfunc.checkisnull(Tmp_WBSNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.WBS  LIKE  " + myfunc.AA("%"+Tmp_WBSNO+"%");
            };
            //件號
            if (!myfunc.checkisnull(Tmp_PN))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.PN   LIKE   " + myfunc.AA("%" + Tmp_PN+"%");
            };

            //拆檢提領編號
            if (!myfunc.checkisnull(Tmp_OGONOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND   B.OGONOAF  LIKE " + myfunc.AA('%' + Tmp_OGONOAF + '%');
            };
            //維修提領編號
            if (!myfunc.checkisnull(Tmp_NGONOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND   B.NGONOAF  LIKE " + myfunc.AA('%' + Tmp_NGONOAF + '%');
            };
            //拆檢交修單號
            if (!myfunc.checkisnull(Tmp_RPNOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND   B.RPNOAF  LIKE " + myfunc.AA('%' + Tmp_RPNOAF + '%');
            };
            //維修交修單號
            if (!myfunc.checkisnull(Tmp_MRPNOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND   B.MRPNOAF  LIKE " + myfunc.AA('%' + Tmp_MRPNOAF + '%');
            };

            //發工人員
            if (!myfunc.checkisnull(Tmp_SAPMAN))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.SAPMAN=" + myfunc.AA(Tmp_SAPMAN);
            };
            //維修件序號
            if (!myfunc.checkisnull(Tmp_FIXSN))
            {
                Tmp_Sql = Tmp_Sql + " AND   A.FIXSN  LIKE " + myfunc.AA("%"+Tmp_FIXSN+ "%");
            };
            //管制人員
            if (!myfunc.checkisnull(Tmp_CREMPLYID))
            {
                Tmp_Sql = Tmp_Sql + " AND   B.CREMPLYID=" + myfunc.AA(Tmp_CREMPLYID);
            };
            //承修工場
            if (!myfunc.checkisnull(Tmp_FACWC))
            {
                Tmp_Sql = Tmp_Sql + " AND   B.FACWC= " + myfunc.AA(Tmp_FACWC);
            };

            //約別
            if (!myfunc.checkisnull(Tmp_TYPEAF))
            {

                Tmp_Sql = Tmp_Sql + " AND   B.TYPEAF  IN  (" + myfunc.AddQuoteStr(Tmp_TYPEAF)+")";
            };
            string Tmp_Sql1 = "";
            //發工日期 - 起  - 迄
            if ((!myfunc.checkisnull(Tmp_SAPDT1)) || (!myfunc.checkisnull(Tmp_SAPDT2)))
            {
                if (!myfunc.checkisnull(Tmp_SAPDT1))
                {
                    Tmp_Sql1 = Tmp_Sql1 + "  AND        SAPDT>=" + myfunc.AA(Tmp_SAPDT1);
                };
                if (!myfunc.checkisnull(Tmp_SAPDT2))
                {
                    Tmp_Sql1 = Tmp_Sql1 + "  AND        SAPDT<=" + myfunc.AA(Tmp_SAPDT2);
                }
                Tmp_Sql = Tmp_Sql + Tmp_Sql1;
            };
            Tmp_Sql = Tmp_Sql + "   )   ";

            cmd.CommandText = Tmp_Sql;
            string countSql = " SELECT COUNT(*) as total FROM (" + Tmp_Sql + ")";
            //匯出時 ,取全部資料, par_paging =false
            DataSet ds = getDataTable(cmd, countSql, par_paging);

            //////新增  CaluField 欄位 
            //- [約別(TYPEAF) ]            
            Tmp_Sql = " select    KEY_CODE as  TYPEAF, DESCPT "
                           + " from      KEYCODE  "
                           + "  where   TBL_NAME = 'AMM_FM'  "
                           + "  and        KEY_NAME = 'TYPEAF'   ";
            getKeyCode("TYPEAF", ref ds, Tmp_Sql);

            ////新增  CaluField [SAP工單單況_(AMM_SRO.SAPSTAT_)]
            int Tmp_Cnt = ds.Tables["T1"].Rows.Count;
            ds.Tables["T1"].Columns.Add(new DataColumn("SAPMAN_", typeof(string)));
            ds.Tables["T1"].Columns.Add(new DataColumn("CREMPLYID_", typeof(string)));
            ds.Tables["T1"].Columns.Add(new DataColumn("SAPSTAT_", typeof(string)));
            ds.Tables["T1"].Columns.Add(new DataColumn("SAPSTAT__", typeof(string)));

            string Tmp_SAPMAN_ = "";
            string Tmp_CREMPLYID_ = "";
            string Tmp_SAPNO1 = "";
            string Tmp_SAPNO_ = "";
            string Tmp_SAPSTAT_ = "", Tmp_SAPSTAT__ = "";
            string Tmp_TYPEAF_ = "";
            string Tmp_Str;
            for (int i = 0; i < Tmp_Cnt; i++)
            {
                DataRow dr = ds.Tables["T1"].Rows[i];
                //取得  發工人員/管制人員(SAPMAN/CREMPLYID).姓名
                Tmp_SAPMAN_ = myfunc.getEmp_NM(dr["SAPMAN"].ToString());
                Tmp_CREMPLYID_ = myfunc.getEmp_NM(dr["CREMPLYID"].ToString());
                dr["SAPMAN_"] = Tmp_SAPMAN_;
                dr["CREMPLYID_"] = Tmp_CREMPLYID_;

                //取得 SAP工單狀態(SAPSTAT)
                Tmp_SAPNO1 = dr["SAPNO"].ToString();
                //轉換成 SAP系統的工號
                Tmp_SAPNO_ = myfunc.get_SAPNO(Tmp_SAPNO1, "OR");
                //取得 SAP工號的單況       
                if (Tmp_isSAPSTAT!="true") { //若!="true" , 則不顯示 [SAP工單狀態]
                    dr["SAPSTAT_"] = "";
                    continue;
                }
                Tmp_SAPSTAT_ = ""; Tmp_SAPSTAT__ = "";
                if (!myfunc.checkisnull(Tmp_SAPNO_))
                {
                    //Tmp_Sql = " SELECT  OBJNR,STAT,INACT,CHGNR,UDATE,UTIME "
                    Tmp_Sql = " SELECT    STAT "
                                    + "  FROM     SAPR3.JCDS@SAP  "
                                    + "  WHERE   1 = 1  "
                                    + " AND         MANDT = '999'    "
                                    + " AND         OBJNR = " + myfunc.AA(Tmp_SAPNO_)
                                    + "  AND        INACT = ' '    "
                                    + "  AND        STAT IN('I0001','I0002', 'E0015', 'I0076', 'E0022', 'E0012', 'I0045', 'I0013', 'I0012', 'I0046')  "
                                    + "  AND       (STAT, CHGNR) NOT IN   "
                                                    + "  ( SELECT   STAT, LPAD((to_number(CHGNR)-1),3,0) as CHGNR  "
                                                    + "    FROM     SAPR3.JCDS@SAP  "
                                                    + "   WHERE   1 = 1  "
                                                    + "   AND         MANDT = '999'   "
                                                    + "   AND         OBJNR = " + myfunc.AA(Tmp_SAPNO_)
                                                    + "   AND         INACT = 'X'   "
                                                    + "  AND          STAT IN('I0001','I0002', 'E0015', 'I0076', 'E0022', 'E0012', 'I0045', 'I0013', 'I0012', 'I0046')  "
                                                    + "  )  "
                                    + " ORDER BY UDATE DESC, UTIME DESC   ";
                    Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                    if (Tmp_Str.Length > 0)
                    {
                        Tmp_SAPSTAT_ = myfunc.StrExtract(Tmp_Str, 1, ";");
                        Tmp_SAPSTAT__ = get_SAPSTAT_NM(Tmp_SAPSTAT_);
                    }
                }  //  if (!myfunc.checkisnull(Tmp_SAPNO_))
                dr["SAPSTAT_"] = Tmp_SAPSTAT_;        //SAP單況碼 : I0001/I0002/E0014/E0015
                dr["SAPSTAT__"] = Tmp_SAPSTAT__;  //SAP單況碼說明 : CREATE/RELEASE/ROFF                                                              //[過濾 SAP單況]鈕 , 若欲過濾 SAP單況  --> 即符合的單況才保留,其他刪除
            }  // end of for (int i = 0; i < Tmp_Cnt; i++)
            //[過濾SAP單況]鈕, 處理
            if (Tmp_Filter_Str.Length > 0)
            {
                for (int i = 0; i < Tmp_Cnt; i++)
                {
                    DataRow dr = ds.Tables["T1"].Rows[i];
                    Tmp_SAPSTAT_ = dr["SAPSTAT_"].ToString();                   
                    //若i> 目前的資料數量,則離開
                    if (i >= ds.Tables["T1"].Rows.Count)
                    {
                        break;
                    }
                    if (myfunc.checkisnull(Tmp_SAPSTAT_))
                    {
                        dr.Delete();
                        continue;
                    }
                    if (Tmp_Filter_Str.IndexOf(Tmp_SAPSTAT_) == -1)
                    {
                        dr.Delete();
                    }
                }  // end of for (int i=0;
                //重新設定總筆數
                ds.Tables["T1"].AcceptChanges();
                ds.Tables["T1C"].Rows[0]["TOTAL"] = ds.Tables["T1"].Rows.Count;
            }// end of if (Tmp_Filter_Str.Length > 0)
            
            //var Tmp_Filter = "SAPSTAT__='RELEASE'";
            //ds.Tables["T1"].Select(Tmp_Filter);
                return ds;
        }

2023年7月30日 星期日

V120202C -[撿料完成]– 簡單子畫面 – 一般欄位(Form) - readonly

 目的: V120202C – 顯示子畫面 一般欄位(Text) – 撿料完成

處理說明:     1>顯示子視窗
                            var win = getMyWindow("撿料完成", J_formFields_V120202C, Btns_V120202C);
                                            win.width = 600;
                                            win.height = 450;
                                               win.show();
                                        2>子畫面欄位


1>*.js

// [Call_V120202C]鈕 - 子畫面欄位
var J_formFields_V120202C = [
{
bodyStyle: "background-color:transparent;", border: false, layout: "vbox", padding: "5", items: [
{
xtype: "fieldcontainer", fieldLabel: "申請單號", labelWidth: 100, layout: "hbox", items: [
{
id: "V120202C_APNO", name: "V120202C_APNO", xtype: "textfield", width: 150, padding: "0 4 0 0", fieldCls: "required",
listeners: {
change: function (me, newValue, oldValue, eOpts) {
if (!(newValue.length == 12))
return;
var np = {};
np["APNO"] = newValue;
var Tmp_url = "../../api/V120202CAPI/get_APNO1";
var rtn_Str = getUrlStr(Tmp_url, np, "取得申請單號.件號/名稱 /數量");
if (checkisnull(rtn_Str)) {
Ext.getCmp("V120202C_MATNR").setValue("");
Ext.getCmp("V120202C_MAKTX").setValue("");
Ext.getCmp("V120202C_QTY").setValue("0");
Tmp_Str = "申請單號(" + newValue + ")無相關資料<br>"
+ "請檢核!!";
mywarnalert(Tmp_Str);
return;
}
if (checkRtnOK(rtn_Str)) {
var Tmp_recs = Ext.decode(rtn_Str);
var Tmp_rec = Tmp_recs[0];
console.log("Tmp_rec:", Tmp_rec);
Ext.getCmp("V120202C_MATNR").setValue(Tmp_rec.MATNR);
Ext.getCmp("V120202C_MAKTX").setValue(Tmp_rec.MAKTX);
Ext.getCmp("V120202C_QTY").setValue(Tmp_rec.QTY);
Ext.getCmp("V120202C_STAT").setValue(Tmp_rec.STAT);
} // end of if (checkRtnOK(rtn_Str))
} // end of change
} // end of listeners
},
{
xtype: "button", id: "btn_V120202C_APNO", name: "btn_V120202C_APNO", text: "...",
hidden: true,
//員工編號挑選 , TreeView 挑選
handler: function () {
var win = EditPickx('申請單號', '../api/V120202CAPI/get_APNOPick', ['APNO', 'MATNR', 'MAKTX', 'QTY','STAT'], ['V120202C_APNO', 'V120202C_MATNR', 'V120202C_MAKTX', 'V120202C_QTY','V120202C_STAT'], J_pickstore_V120202C_APNO, J_pickcolumns_V120202C_APNO);
win.show();
}
},
]
}, //end of 申請單號
{
xtype: "fieldcontainer", fieldLabel: "撥料件號", labelWidth: 100, layout: "hbox", items: [
{ id: "V120202C_MATNR", name: "V120202C_MATNR", xtype: "textfield", width: 150, padding: "0 4 0 0", readOnly: true, fieldCls: "readonly", },
]
}, // end of 撥料件號
{
xtype: "fieldcontainer", fieldLabel: "名稱", labelWidth: 100, layout: "hbox", items: [
{ id: "V120202C_MAKTX", name: "V120202C_MAKTX", xtype: "textfield", width: 150, padding: "0 4 0 0", readOnly: true, fieldCls: "readonly", },
]
}, // end of 名稱
{
xtype: "fieldcontainer", fieldLabel: "數量", labelWidth: 100, layout: "hbox", items: [
{ id: "V120202C_QTY", name: "V120202C_QTY", xtype: "textfield", width: 150, padding: "0 4 0 0", readOnly: true, fieldCls: "readonly", },
]
}, // end of 數量
{
xtype: "fieldcontainer", fieldLabel: "單況", hidden: true, labelWidth: 100, layout: "hbox", items: [
{ id: "V120202C_STAT", name: "V120202C_STAT", xtype: "textfield", width: 150, padding: "0 4 0 0", hidden: true, readOnly: true, fieldCls: "readonly", },
]
}, // end of 單況
] // end of layout: "vbox", padding: "5", items: [
} //end of J_formFields_Sub1 , items[{
] //end of J_formFields_Sub1 , items[


//2>顯示子畫面 - 按鈕
var Btns_V120202C = [
{
xtype: 'button', text: '確定', id: 'OkBtn_V120202C',
listeners: {
click: function (me, e, eOpts ) {
//1>更新資料庫資料(AMM_COMPQTY)
var Tmp_Str = "";
if (checkisnull(Ext.getCmp("V120202C_APNO").getValue())) {
Tmp_Str = "申請單號不可空白<br>"
+ " 敬請檢核 !!";
mywarnalert(Tmp_Str);
return;
}

if (checkisnull(Ext.getCmp("V120202C_MATNR").getValue())) {
Tmp_Str = "申請單號(" + Ext.getCmp("V120202C_APNO").getValue() + ") <br> "
+"撥料件號(" + Ext.getCmp("V120202C_MATNR").getValue() + ") <br> "
+"不可空白 <br> "
+"敬請檢核 !!";
mywarnalert(Tmp_Str);
return;
}

var Tmp_STAT = Ext.getCmp("V120202C_STAT").getValue();
if (checkisnull(Tmp_STAT)) {
Tmp_Str = "申請單號(" + Ext.getCmp("V120202C_APNO").getValue() + ") <br> "
+ "單況(" + Ext.getCmp("V120202C_STAT").getValue() + ") <br> "
+ "不可空白 <br> "
+ "敬請檢核 !!";
mywarnalert(Tmp_Str);
return;
}

var Tmp_msg = "";
if (Tmp_STAT != "B") {
switch (Tmp_STAT) {
case "A": {
Tmp_msg = "尚未執行條碼列印!!";
break;
}
case "C": {
Tmp_msg = "撿料已完成勿重覆執行!!";
break;
}
case "D": {
Tmp_msg = "該筆物料已領用, 請確認 !!";
break;
}
case "Z": {
Tmp_msg = "該筆物料已撤銷, 請確認 !!";
break;
}
} //end of switch
mywarnalert(Tmp_msg);
return
} // if <>B

//更新單況
var Tmp_url = '../../api/V120202CAPI/UPDATE_STAT'
var np1 = {};
np1["APNO"] = Ext.getCmp("V120202C_APNO").getValue();
var Rtn_Str = getUrlStr(Tmp_url, np1, "撿料完成(V120202C)");
if (checkRtnOK(Rtn_Str)) {
Tmp_Str = "申請單號(" + Ext.getCmp("V120202C_APNO").getValue() + ") <br> "
+ "單況已變更為 C:撿料完成!!";
mysuccessalert(Tmp_Str);
//清空畫面的欄位值
var f = this.up("form");
console.log("f :", f);
console.log("f.form :", f.form);
f.form.reset();
}
else {
Tmp_Str = "申請單號(" + Ext.getCmp("V120202C_APNO").getValue() + ") <br> "
+ "單況已變更失敗!!";
mywarnalert(Tmp_Str);
}
// end of checkRtnOk

//2> close windows
//this.up("window").close();
//this.up("window").destroy();
//3>重新更新 MDBGrid
//Ext.getCmp("btn_Show").fireHandler();
}
}
},
{
xtype: 'button', text: '取消', id: 'CancelBtn_mySub1',
listeners: {
click: function () {
this.up("window").close();
this.up("window").destroy();
//3>重新更新 MDBGrid
Ext.getCmp("btn_Show").fireHandler();
}
}
},
];