目的: UI 使用者介面考量重點: UI
2025年7月29日 星期二
2025年7月24日 星期四
V30102 - 日期格式只取時間 - Oracle SQL - 日期格式轉成 yyyy/mm/dd
目的: V30102 - 日期格式只取時間 - Oracle SQL - 日期格式轉成 yyyy/mm/dd
處理說明: 1>日期格式只取時間
to_char(TFTM, 'HH24:mi')
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);
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’))
– 顯示SBOM節點(N_EI_UOC).件號=需求件號(Tmp_dt1.Select(PN=’xx’))
處理程序: 1>取得 SBOM所有節點(N_EI_UOC)
2>過濾 SBOM所有節點中,件號=需求件號的節點
Tmp_Dr_Ary=Tmp_dt1.Select(PN=’xx’);
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);
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='+
//panel11 需求件號
Tmp_OGONOAF,
['RQPN'], ['sub_RQPN'], J_pickstore_sub_RQPN, J_pickcolumns_sub_RQPN);
cmp_sub_RQPN.items.push(cmp_pick_sub_RQPN);
--> 過濾欄位名稱 = 傳回欄位名稱
['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
2025年7月11日 星期五
V20305C – 匯出(SBOM) – 簡單子畫面 - 使用者確認後, 才開啟子畫面 - get_cmp_xxxx - New
目的: V20305C – 匯出(SBOM) – 簡單子畫面 - 確認後,執行
處理說明: 1>使用者確認後,才開啟子畫面
var Tmp_AMMNO = "", Tmp_PN = "", Tmp_Str = "";
var cur_recs = Ext.getCmp('grid_M').getSelectionModel().getSelection();
var cur_rec = null;
if (cur_recs.length > 0) {
cur_rec = cur_recs[0];
Tmp_AMMNO = nulltoStr(cur_rec.data['AMMNO']).toString();
Tmp_PN = nulltoStr(cur_rec.data['PN']).toString();
Tmp_Str = "確定將AMM單號(" + Tmp_AMMNO + ")\r\n"
+"件號(" + Tmp_PN + ") \r\n"
+ "的SBOM資料匯出成*.xls嗎?\r\n";
var id = confirm(Tmp_Str);
if (id) {
Call_V20305C()
};
var Tmp_AMMNO = "", Tmp_PN = "", Tmp_Str = "";
var cur_recs = Ext.getCmp('grid_M').getSelectionModel().getSelection();
var cur_rec = null;
if (cur_recs.length > 0) {
cur_rec = cur_recs[0];
Tmp_AMMNO = nulltoStr(cur_rec.data['AMMNO']).toString();
Tmp_PN = nulltoStr(cur_rec.data['PN']).toString();
Tmp_Str = "確定將AMM單號(" + Tmp_AMMNO + ")\r\n"
+"件號(" + Tmp_PN + ") \r\n"
+ "的SBOM資料匯出成*.xls嗎?\r\n";
var id = confirm(Tmp_Str);
if (id) {
Call_V20305C()
};
2>開啟子畫面
var cmp_sub_SRU_PN = get_cmp_txt1('SRU件號', 'sub_SRU_PN', 100, 130);
var Tmp_urlStr = '../api/V20305CAPI/get_sub_SRU_PNPick?isComplete=0';
var cmp_sub_pick_SRU_PN = get_pick_btn0('挑選SRU件號', 'sub_btn_SRU_PN', Tmp_urlStr,
['SRU_PN'], ['sub_SRU_PN'],
J_models_V20305C_SRU_PN, J_columns_V20305C_SRU_PN);
cmp_sub_SRU_PN.items.push(cmp_sub_pick_SRU_PN);
function Call_V20305C() {
console.log(" 1 inside - Call_V20305C 編輯: ");
//panel11
//交修單號(RPNOAF)
var cmp_sub_ROOT_PN = get_cmp_txt1('展BOM件號', 'sub_ROOT_PN', 100, 130);
var cmp_sub_ROOT_PN_lbl = get_cmp_lbl0('(根件號)', 130);
cmp_sub_ROOT_PN.items.push(cmp_sub_ROOT_PN_lbl);
var cmp_sub_LRU_PN = get_cmp_txt1('LRU件號', 'sub_LRU_PN', 100, 130);
var cmp_sub_EIAC = get_cmp_txt1('機種', 'sub_EIAC', 100, 130);
var cmp_sub_RPNOAF = get_cmp_txt1('交修單號', 'sub_RPNOAF', 100, 130);
var cmp_sub_SRU_PN = get_cmp_txt1('SRU件號', 'sub_SRU_PN', 100, 130);
var Tmp_urlStr = '../api/V20305CAPI/get_sub_SRU_PNPick?isComplete=0';
var cmp_sub_pick_SRU_PN = get_pick_btn0('挑選SRU件號', 'sub_btn_SRU_PN',
Tmp_urlStr,
['SRU_PN'], ['sub_SRU_PN'],
J_models_V20305C_SRU_PN, J_columns_V20305C_SRU_PN);
cmp_sub_SRU_PN.items.push(cmp_sub_pick_SRU_PN);
var sub_V20305C_Flds = [
{
type: 'panel', bodyStyle: "background-color:transparent;", border: 5, padding: "1",
layout: 'border',
items: [
{
xtype: 'panel', id: 'sub_panel1', region: 'center',
height: 300, layout: { type: 'vbox', align: 'stretch' },
items: [
cmp_sub_ROOT_PN, cmp_sub_LRU_PN, cmp_sub_EIAC, cmp_sub_RPNOAF, cmp_sub_SRU_PN,
],
},
]
}
];
2025年7月9日 星期三
V20305 - 零件需求登錄 - [匯出] - 匯出交修件件號的上下層BOM結構 - SQL - START WITH ... CONNECT BY - 取得上下層結構的資料
目的: V20305 - 零件需求登錄 - [匯出] - 匯出交修件件號的BOM結構
- 利用SQL語法 - START WITH ... CONNECT BY - 取得上下層結構的資料
- 利用SQL語法 - START WITH ... CONNECT BY - 取得上下層結構的資料
處理說明:
1>SQL : START WITH .. CONNECT BY
在 Oracle SQL 中,
START WITH ... CONNECT BY
是用來進行階層式查詢的語法,特別適合處理像是員工上下屬、產品分類、組織架構等具有父子關係的資料結構。這種查詢方式可以遞迴地找出某個節點的所有子節點或父節點。START WITH:指定查詢的起始節點(根節點),例如某個員工或分類。
CONNECT BY:定義父子節點之間的關係。使用 PRIOR 關鍵字來表示上一層的欄位。
2>
Select PLA, LA, NHA_LCN,NHA_ALC, LCN,ALC
from ( Select ( Case When NHA_LCN||NHA_ALC=LCN||ALC then '' else NHA_LCN||NHA_ALC end ) as PLA,
LCN||ALC as LA,
NHA_LCN,NHA_ALC, LCN,ALC
from N_EI_UOC@TLS_245
Where EIAC='IDF'
and EI_LCN='A'
and EI_ALC='00'
and EFF='Y'
order by PLA, LA )
Start With PLA='A010L030600900'
Connect by Prior LA=PLA;
2025年7月3日 星期四
V20305 – 零件需求登錄 - 新增的ToolBar 如何放在最後 ????
目的: V20305 – 零件需求登錄 - 新增的ToolBar 如何放在最後 ??
處理說明:
1>*.js
//AddDocked , 不加入 index 參數, 即放在最後
//但是無作用, 仍在 分頁 Toolebar 之前 ???
Ext.getCmp('grid_M').addDocked({
xtype: 'toolbar',
dock: 'bottom',
items: [cmp_myToolBar]
});
xtype: 'toolbar',
dock: 'bottom',
items: [cmp_myToolBar]
});
//AddDocked , 加入 index 參數, 即放在 index 之後
const dockedItems = grid.getDockedItems();
let bbarIndex = dockedItems.findIndex(item =>
item.dock === 'bottom' &&
item.isXType('toolbar') 精準對照 bbar
);
console.log("bbarIndex : ", bbarIndex);
Ext.getCmp('grid_M').addDocked({
xtype: 'toolbar',
dock: 'bottom',
items: [cmp_myToolBar]
}, bbarIndex);
let bbarIndex = dockedItems.findIndex(item =>
item.dock === 'bottom' &&
item.isXType('toolbar') 精準對照 bbar
);
console.log("bbarIndex : ", bbarIndex);
Ext.getCmp('grid_M').addDocked({
xtype: 'toolbar',
dock: 'bottom',
items: [cmp_myToolBar]
}, bbarIndex);
訂閱:
文章 (Atom)