2024年9月12日 星期四

SQL Server - connection String - 存取資料工具 - DATABASE.NET - database4.exe

  目的: 1>SQL Server  - connection String 

            2>存取資料工具 - DATABASE.NET


處理說明: 1>web.config - connectionString
   <add name="QDR_IDF" connectionString="Data Source=194.1.5.222;
             Initial Catalog=qdr_idf;User ID=ammuser;Password=useramm; " />    
   <add name="QDR_TP" connectionString="Data Source=192.30.15.129;
           Initial Catalog=task_planning;User ID=ammuser;Password=useramm; " />









2024年9月9日 星期一

EXCEL - 函式 : VLOOKUP(搜尋key,Table範圍,傳回Column index,false:完全符合) 函式用法 - 找出Table.欄位對應的中文名稱

 目的: EXCEL  - VLOOKUP(搜尋key,Table範圍,傳回Column index,false:完全符合) 函式用法

處理說明: 1>VLOOKUP 函式使用說明:
                        Param1:搜尋key,
                        Param2:Table範圍,
                        Param3:傳回Column index,
                        Param4:false:完全符合
                       Ex: cell公式如下
                             =VLOOKUP(A2,工作表2!A:B,2,FALSE)



SCHEMA_COLS對應檔:

V80202F - 複製 xls - Sheet - 行 -SPIRE.xls

目的: V80202F - 複製 xls  - Sheet  - 行
          - 參考網址: https://www.796t.com/content/1541665517.html
          - C# 複製Excel工作表


處理說明: 1>複製Sheet
                 //建立一個Workbook類物件,並載入Excel檔案 
                   Workbook workbook = new Workbook(); 
                   workbook.LoadFromFile("Sample.xlsx"); 
                    //獲取第一個工作表sheet1 
                  Worksheet sheet1 = workbook.Worksheets[0]; 
                   //新增一個新的工作表sheet2,並命名該工作表 
                   Worksheet sheet2 = workbook.Worksheets.Add("Copy"); 
                   sheet2.Name = "Copy";
                  //將第一個工作表複製到新新增的工作表
                   sheet2.CopyFrom(sheet1);

                   2>複製行  
                      //將第一行資料複製到第三行
                      worksheet.Copy(worksheet.Range["A1:H1"], worksheet.Range["A3:H3"], true);

V80202F- 取得套表檔案 – get_SS_FILES – 機號分頁列印 – SPIRE.XLS 複製(.COPY)標題列

 目的:   V80202F- 列印套表 – get_SS_FILES 

              – 依機號分頁列印 – SPIRE.XLS 複製(.COPY)

處理說明: 1>從 SS_FILES 下載套表檔案,傳入  fs
                       string Tmp_FName = "V80202_列印_匯出格式.xlsx";   //含 *.xlsx
   // 取得實實的路徑            
    string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\";  
    string pathFName = documentPath + Tmp_FName;
       
            FileStream fs =null;
            Workbook wk = null;
            Worksheet ws = null;
            try
            {
                fs = myfunc.get_SS_FILES(Tmp_FName);
                wk = new Workbook();
                wk.LoadFromStream(fs);

           2>複製  Sheet 標題列
              if (dt.Rows[i]["ACNO"].ToString() != Tmp_cur_ACNO)
                    {
                        //新增[機號]Sheet
                        ws = wk.Worksheets.Add(dt.Rows[i]["ACNO"].ToString());
                        ws.Name = dt.Rows[i]["ACNO"].ToString();
                        //將Sheet0.標題行(1:第一行),複製至新Sheet
         wk.Worksheets[0].Copy(wk.Worksheets[0].Range["A1:DL1"], ws.Range["A1:DL1"], true);
                        Tmp_cur_ACNO = dt.Rows[i]["ACNO"].ToString();
                        Tmp_row = 1;
                    }



2024年9月5日 星期四

V80202F: [列印]鈕 - 子畫面欄位設為必填

目的: V80202F: 子畫面欄位設為必填

處理說明: 1>  setFieldsCls('mySubFormF',
                                            ['sub_PROJID'],  //required
                            );
                   2>setFieldsCls , 必需在 win.show 之後才有作用, 
                       --> 即 field 已 render - .inputEI 已存在 -
                          -  inputEI:  The input Element for this Field. Only available after the field has been rendered.


1>*.js
    //子畫面.id: mySubFormF
    var win = getMyWindow("撿料完成", J_formFields_V80202F, Btns_V80202F,"F");
    //win.onshow = Sub1_onShow(np1);
    win.width = 600;
    win.height =300;    
    //Ext.getCmp("sub_ARPSTS").columns = 3;
    //Ext.getCmp("sub_ARPSTS").vertical = true;
    //Ext.getCmp("sub_AMMSTS").columns = 3;
    //Ext.getCmp("sub_AMMSTS").vertical = true;
    //console.log(" Ext.getCmp(sub_ARPSTS): ", Ext.getCmp("sub_ARPSTS"));    
    win.show();
    //設定必填欄位 , 必需在 win.show 之後, setFieldsCls 才會有作用
    setFieldsCls('mySubFormF',
        ['sub_PROJID'],  //required
    );

2024年9月3日 星期二

V80202 – 設定按鈕 icon

 目的: V80202 – 設定按鈕 icon

處理說明: 1>設定按鈕 icon:
         {
                xtype: 'button', text: '整機抽換紀錄匯出', id: 'Call_V80202I_Btn',
                iconCls: 'icon-excel',
                listeners: {
                    click: function () {
                        Call_V80202I();
                    }
                }
            },         
           {
                    iconCls: 'icon-edit',
                    text: '修改',
                    id: 'btn_edit' + unique,
                    disabled: false,
            }

            },       
          {
            xtype: 'button', text: '刪除', id: 'btn_del1', iconCls: 'icon-delete',
            listeners: {
                click: function () {                    
                    mysuccessalert("按  [刪除]鈕");
                }
            }  

      2> icon-excel 定義的檔案: ext-patch.css
C:\Users\611292\source\repos\TLSWEB_AMM\TLSWEB_AMM\Content\ext-patch.css       
C:\Users\611292\source\repos\TLSWEB_AMM\TLSWEB_AMM\images\icons\

1>>ext-patch.css - 定義 icon的實際對應檔案
.icon-excel {
    background-image: url('../images/icons/excel.png');
}

.icon-add {
    background-image: url('../images/icons/add.gif')
}

.icon-edit {
    background-image: url('../images/icons/cog_edit.png')
}

.icon-delete {
    background-image: url('../images/icons/delete.gif')
}

.icon-copy {
    background-image: url('../images/icons/copy.png')
}







V80202 – 工單查詢 - 畫面底部如何加一ToolBar -分成2行 - AddDocked - DockedItems

 目的:V80202 – 工單查詢   畫面底部如何加一ToolBar

處理說明:  1> Ext.Panel.AddDocked( {
                                  dock: ":元件位置, Ex:bottom",
                                  dockedItem:[{Items: [":元件,Ex: cmp_mytoolBar]}],
                                  },1);
                     2> Ext.getCmp("grid_Single").dockedItems : 列出目前Panel的DockedItems
                     3> 加入[過濾欄位]Toolbar, 
                          Ext.getCmp("grid_Single").AddDocked({
                                dock:"top",
                                dockedItem:[{items{Query,Query1}}]
                           });
                      4> 加入[額外按鈕]Toolbar
                         Ext.getCmp('grid_Single').addDocked({
                           dock: "bottom",
                           dockedItems: [{items: [cmp_mytoolBar]}],        
                             },3);
                      5>grid_ptb的 dockedItem.index 必需固定為 1
                          否則 .insertBtn(xxx); 會Error 




1>*.js  - 上方 -加入過濾欄位 Bar
      var cmp_filter1 = get_cmp_filter1("過濾條件1", "s_filter1", 80, 130, Tmp_Store);
      var cmp_filter2 = get_cmp_filter1("過濾條件2", "s_filter2", 80, 130, Tmp_Store);
      var cmp_filter3 = get_cmp_filter1("過濾條件3", "s_filter3", 80, 130, Tmp_Store);

      var Query1 = new Ext.FormPanel({
            id: 's_form1',
            layout: { type: 'hbox', align: 'stretch' },
            fieldDefaults: { labelAlign: 'right' },
            defaults: { margin: { top: 3 } },
             items: [{
           xtype: 'panel', id: 'panel21', layout: { type: 'hbox', align: 'stretch' }, flex: 14, border: 0, height: 25,            items: [ cmp_filter1, cmp_filter2, cmp_filter3,]
        }]
    });

 Ext.getCmp('grid_Single').addDocked({
        dock: "top",
        dockedItems: [{
            items: [Query, Query1]
        }]
    },0);


2>*.js  - 底部 -加入按鈕
var cmp_mytoolBar =
    {
        xtype: 'toolbar',
        dock: 'bottom',
        id: 'mytoolBar1',
        items: [
            {
                xtype: 'button', text: '整機抽換紀錄匯出', id: 'Call_V80202I_Btn',
                iconCls: 'icon-excel',
                listeners: {
                    click: function () {
                        Call_V80202I();
                    }
                }
            },                
            {
                xtype: 'button', text: 'F16V_CHECK', id: 'Call_V80202K_Btn',
                iconCls: 'icon-check',
                listeners: {
                    click: function () {
                        Call_V80202K();
                    }
                }
            },                
            {
                xtype: 'button', text: 'SAP單況比對', id: 'Call_V80202L_Btn',
                iconCls: 'icon-check',
                listeners: {
                    click: function () {
                        Call_V80202L();
                    }
                }
            },                
            {
                xtype: 'button', text: 'Finding處置匯入', id: 'Call_V80202M_Btn',
                iconCls: 'icon-add',
                border: '2',
                listeners: {
                    click: function () {
                        Call_V80202M();
                    }
                }
            },        
        ]
    };

 Ext.getCmp('grid_Single').addDocked({
        dock: "bottom",
        dockedItems: [{            
            items: [cmp_mytoolBar]
        }],        
    },1);

3>Ext.getCmp("grid_Single").dockedItems內容

.Items[0] : 上方,過濾條件
.Items[1]:  底部, ToolBar
.Items[2]:  grid , Grid 內容
.Items[3]: grid_ptb , 分頁按鈕

-->實際內容階層
Items[0]-dockedItems-Items[0].items.keys : [s_form,s_form1]
Items[1]-dockedItems-Items[0].items.keys : [mytoolBar1]


4>TMGrid.js
  insertBtn: function (i_btnJson) {
        //console.log('insertBtn_1');
   //如下因為在TMGrid Source, grid_ptb.index限定為1, 所以若 grid_ptb.index 改變時,Error
        var bar = Ext.getCmp(this.dockedItems.keys[1]);
        if (i_btnJson.length > 0) {
            for (var i = 0; i < i_btnJson.length; i++) {
                bar.insert(bar.items.length - 2, i_btnJson[i]);
            }
        } else {
            bar.insert(bar.items.length - 2, i_btnJson);
        }
    },
    reloadGridData: function (i_is_warnalert, i_idx) {



--> 所以改成 3
  Ext.getCmp('grid_Single').addDocked({
        dock: "bottom",
        dockedItems: [{            
            items: [cmp_mytoolBar]
        }],        
    },3);