// frmPallet インボイス番号を登録 private void btnOK_Click(object sender, EventArgs e) { string invoice = txtInvoiceNo.Text; if (invoice == string.Empty) { DialogResult result = MessageBox.Show("Selected cells' invoice no is to be updated." + Environment.NewLine + "Is it OK?", "Notice", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); if (result == DialogResult.No) { return; } } TfSQL tf = new TfSQL(); bool res = tf.sqlMultipleUpdateInvoiceOnPallet(cartonlist, invoice); if (res) { //本フォームのデータグリットビュー更新 MessageBox.Show("The following carton IDs' invoice number were updated: " + Environment.NewLine + message, "Process Result", MessageBoxButtons.OK, MessageBoxIcon.Information); //親フォームfrmTrayのデータグリットビューを更新するため、デレゲートイベントを発生させる this.RefreshEvent(this, new EventArgs()); } else { MessageBox.Show("Invoice number registration was not successful.", "Process Result", MessageBoxButtons.OK, MessageBoxIcon.Warning); } Close(); }
private void btnOK_Click(object sender, EventArgs e) { TfSQL tf = new TfSQL(); // string mess = string.Empty; if (string.IsNullOrEmpty(txtNewPass.Text) || string.IsNullOrEmpty(txtConfirmPass.Text)) { MessageBox.Show("Please fill password and confirm password!!", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { if (txtConfirmPass.Text != txtNewPass.Text) { MessageBox.Show("Confirm password does not match!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); txtConfirmPass.Clear(); txtNewPass.Clear(); } else { tf.sqlExecuteScalarString("update iqc_user set user_pass = '******' where user_name = '" + lbCode.Text + "' and full_name = '" + lbUsername.Text + "'"); DialogResult result = MessageBox.Show("Your password has been changed!", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Information); if (result == DialogResult.OK) { this.Close(); } } } }
// 印刷ボタン押下時処理 public void printStart(string labelType1, string id, DataTable dtLot, string batch, DateTime pdate, string labelType2, string labelType3, short copies, string bin) { ltype2 = labelType2; ltype3 = labelType3; trayPackCartonId = id; dtLotSumary = dtLot; qty = dtLotSumary.Rows.Count >= 0 ? dtLotSumary.Rows[0]["total"].ToString() : string.Empty; trayIdQtyCombo = id + " " + qty.ToString(); // ロットサマリーテーブルの格納、および、DB上ラベルコンテンツ情報の取得 if (labelType1 != "tray") { rev = batch; packdate = pdate.ToString("yyyy/M/d"); dtLblContent = new DataTable(); string sql = "select model, header, content from t_label_content"; TfSQL tf = new TfSQL(); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql, ref dtLblContent); vendor = pickUpFromDataTable(dtLblContent, "VENDOR"); config = pickUpFromDataTable(dtLblContent, "CONFIG"); desc = pickUpFromDataTable(dtLblContent, "DESC"); footnote = pickUpFromDataTable(dtLblContent, "FOOTNOTE"); model = pickUpFromDataTable(dtLblContent, "MODEL"); string pnFox = pickUpFromDataTable(dtLblContent, "P/N_FOX"); string pnPega = pickUpFromDataTable(dtLblContent, "P/N_PEGA"); apn = pnFox; pn = (ltype3 == "Fox") ? apn : (ltype3 == "Pega") ? pnPega : (ltype3 == "Non") ? "Non" : "Error!"; } // PrintDocumentコンポーネントオブジェクトを生成 System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument(); pd.PrinterSettings.PrinterName = printerName; // 出力先プリンタ名を指定 pd.PrinterSettings.Copies = copies; // 印字枚数を指定 // PrintPageイベントハンドラに追加 if (labelType1 == "tray") { pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printTray); } else if (labelType1 == "packCartonInternal") { // 2016.07.28 PEC FUJIKI (印刷部分の仕様変更対応で追加) FROM page_counter = 0; data_counter = 0; // 2016.07.28 PEC FUJIKI (印刷部分の仕様変更対応で追加) TO pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printPackCartonPalletInternal); } else if (labelType1 == "packCartonPega") { pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printPackCartonPalletPega); } pd.Print(); // 印刷の選択ダイアログを表示 }
// 登録済みのシリアルおよびその付帯情報を、UPDATE文で置き換える private void btnReplace_Click(object sender, EventArgs e) { if (dtModule.Rows.Count <= 0) { return; //if (testerNg || dtModule.Rows.Count <= 0) } if (!txtRow.Text.Equals("1")) { MessageBox.Show("Please check module-id status.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); return; } string mdlBefore = txtBefore.Text; string mdlAfter = dtModule.Rows[0]["module_id"].ToString(); // 重複確認処理を行う TfSQL tf = new TfSQL(); string dbDuplicate = tf.sqlModuleDuplicateCheck(dtModule); if (dbDuplicate != string.Empty) { for (int i = 0; i < dgvModule.Rows.Count; ++i) { if (dgvModule["module_id", i].Value.ToString() == dbDuplicate) { dgvModule["module_id", i].Style.BackColor = Color.Red; } } // soundAlarm(); btnReplace.Enabled = false; return; } // 更新処理 string sql = "update t_module set " + "module_id ='" + (string)dtModule.Rows[0]["module_id"].ToString() + "', " + "lot ='" + dtModule.Rows[0]["lot"].ToString() + "', " + "tester_id ='" + dtModule.Rows[0]["tester_id"].ToString() + "', " + "test_result ='" + dtModule.Rows[0]["test_result"].ToString() + "', " + "test_date ='" + dtModule.Rows[0]["test_date"].ToString() + "', " + "r_mode ='" + dtModule.Rows[0]["r_mode"].ToString() + "' " + "where module_id = '" + mdlBefore + "' and tray_id ='" + trayId + "'"; System.Diagnostics.Debug.Print(sql); bool res = tf.sqlExecuteNonQuery(sql, false); if (res) { //親フォームfrmTrayのデータグリットビューを更新するため、デレゲートイベントを発生させる this.RefreshEvent(this, new EventArgs()); btnReplace.Enabled = false; txtAfter.Enabled = false; txtRow.Text = string.Empty; this.Focus(); MessageBox.Show("The replacement was successful.", "Process Result", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); } }
// ユーザーIDコンボボックス選択時、ユーザー名を表示し、パスワードテキストボックス・ログインボタンを有効にする private void cmbUserId_SelectedIndexChanged(object sender, EventArgs e) { TfSQL tf = new TfSQL(); string sql = "select user_name from t_user where user_id = '" + cmbUserId.Text + "'"; txtUserName.Text = tf.sqlExecuteScalarString(sql); txtPassword.Enabled = true; }
// サブプロシージャ:DBからデータテーブルへの読み込み private void readTrayInfo(ref DataTable dt) { dt.Rows.Clear(); string sql = "select tray_id, lot, qty, register_date, rg_dept, multi_lot, " + "'OK' as check from t_tray where pack_id='" + txtPackId.Text + "'"; TfSQL tf = new TfSQL(); System.Diagnostics.Debug.Print(sql); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql, ref dt); }
// サブプロシージャ:DBからデータテーブルへの読み込み private void readModuleInfo(ref DataTable dt) { dt.Rows.Clear(); string sql = "select module_id, lot, bin, tester_id, test_result, test_date, r_mode " + "from t_module where tray_id='" + txtTrayId.Text + "'"; TfSQL tf = new TfSQL(); System.Diagnostics.Debug.Print(sql); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql, ref dt); }
// サブプロシージャ:DBからデータテーブルへの読み込み private void readCartonInfo(ref DataTable dt) { dt.Rows.Clear(); string sql = "select carton_id, lot, m_qty, batch, register_date, rg_user, " + "case when l_cnt >= 2 then 'T' else 'F' end as multi_lot, " + "'OK' as check from t_carton where pallet_id='" + txtPallet.Text + "'"; TfSQL tf = new TfSQL(); System.Diagnostics.Debug.Print(sql); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql, ref dt); }
// サブプロシージャ:ロット集計グリッドビューを更新し、数量の最も多いロット番号を返す public string updateLotSummary(DataTable dt) { if (dt.Rows.Count <= 0) { dtLot = new DataTable(); dgvLotSummary.DataSource = dtLot; return(string.Empty); } // 一時テーブルに、ロット集計を格納する string sql1 = "select lot, count(lot) as qty from t_module where tray_id in ("; string sql2 = string.Empty; var query1 = dt.AsEnumerable() .Select(row => new { tray_id = row.Field <string>("tray_id") }); foreach (var q in query1) { sql2 += "'" + q.tray_id + "', "; } string sql3 = sql1 + VBS.Left(sql2, sql2.Length - 2) + ") group by lot order by qty desc, lot"; System.Diagnostics.Debug.Print(sql3); DataTable dtTemp = new DataTable(); TfSQL tf = new TfSQL(); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql3, ref dtTemp); // ロット集計表示テーブルに、一時テーブルの情報を移す dgvLotSummary.DataSource = null; dgvLotSummary.Refresh(); dtLot = new DataTable(); var query2 = dtTemp.AsEnumerable().Select(r => new { lot = r.Field <string>("lot"), qty = r.Field <Int64>("qty") }); // 列の追加 foreach (var q in query2) { dtLot.Columns.Add(q.lot, typeof(int)); } dtLot.Columns.Add("total", typeof(int)); // 行の追加 dtLot.Rows.Add(); foreach (var q in query2) { dtLot.Rows[0][q.lot] = q.qty; } dtLot.Rows[0]["total"] = query2.Sum(a => a.qty); dgvLotSummary.DataSource = dtLot; return(query2.First().lot); }
public void getComboListFromDB(ref ComboBox cmb) { string sql_model = "select model from tbl_model_dbplace order by model"; System.Diagnostics.Debug.Print(sql_model); TfSQL tf = new TfSQL(); tf.getComboBoxData(sql_model, ref cmb); if (cmbModel.Items.Count > 0) { cmbModel.SelectedIndex = 0; } }
private void btnOK_Click(object sender, EventArgs e) { if ((txtUserName.Text != "") && txtPassword.Text != "") { TfSQL con = new TfSQL(); string sqladd = "insert into iqc_user (user_name, user_pass, full_name) values ( '" + txtUserName.Text + "','" + txtPassword.Text + "', '" + txtFullName.Text + "')"; con.sqlExecuteScalarString(sqladd); MessageBox.Show("You have add account successfully ", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Information); Close(); } else { MessageBox.Show("Please fill user code and password ", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
// LOT集計グリッドビュー左のボタンを押下時、対象のモジュールをエクセルファイルへ出力する private void btnExportModule_Click(object sender, EventArgs e) { // 2016.08.29 FUJII 別スレッドで処理(処理スピード対策) var task = Task.Factory.StartNew(() => { DataTable dt = new DataTable(); string sql = "select *, '" + txtPackId.Text + "' as pack_id from t_module where tray_id in (" + "select tray_id from t_tray where pack_id = '" + txtPackId.Text + "')"; TfSQL tf = new TfSQL(); System.Diagnostics.Debug.Print(sql); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql, ref dt); ExcelClass xl = new ExcelClass(); // 2016.08.29 FUJII エクセルへの出力から、デスクトップCSVへの出力へ変更 xl.ExportToCsv(dt, System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\pack.csv"); }); }
// 部署コンボボックス選択時、ユーザーIDコンボボックスにDBリストを追加し、メニューコンボボックスにもリストを追加 private void cmbDept_SelectedIndexChanged(object sender, EventArgs e) { cmbUserId.Text = string.Empty; txtUserName.Text = string.Empty; // 2016.08.03 FUJIKI MFG にも PACK を許可させる // 2017.07.21 MFGはTrayしかできないにさせる(呉) string[] aryTray = new string[] { "MFG", "QA", "PC" }; string[] aryPack = new string[] { "MFG", "PC" }; string[] aryCart = new string[] { "PC" }; string[] aryPalt = new string[] { "PC" }; cmbMenu.Items.Clear(); if (0 <= Array.IndexOf(aryTray, cmbDept.Text)) { cmbMenu.Items.Add("1. Tray"); } if (0 <= Array.IndexOf(aryPack, cmbDept.Text)) { cmbMenu.Items.Add("2. Pack"); } if (0 <= Array.IndexOf(aryCart, cmbDept.Text)) { cmbMenu.Items.Add("3. Carton"); } if (0 <= Array.IndexOf(aryPalt, cmbDept.Text)) { cmbMenu.Items.Add("4. Pallet"); } cmbMenu.Enabled = true; cmbMenu.SelectedIndex = 0; // 2016.08.03 FUJIKI MFG にも PACK を許可させる TfSQL tf = new TfSQL(); string sql = "select distinct user_id from t_user where dept ='" + cmbDept.Text + "' order by user_id"; System.Diagnostics.Debug.Print(sql); tf.getComboBoxData(sql, ref cmbUserId); cmbUserId.Enabled = true; // 2016.08.03 FUJIKI MFG にも PACK を許可させる cmbMenu.SelectedIndex = (cmbMenu.Enabled ? cmbMenu.SelectedIndex : 1); cmbMenu.Enabled = (cmbMenu.Items.Count > 1); // if (cmbDept.Text == "PC") cmbMenu.Enabled = true; // else { cmbMenu.Enabled = false; cmbMenu.SelectedIndex = 0; } // 2016.08.03 FUJIKI MFG にも PACK を許可させる }
// 変更後モジュールがスキャンされたときの処理 private void txtAfter_KeyDown(object sender, KeyEventArgs e) { // エンターキーの場合、テキストボックスの桁数が15桁の場合のみ、処理を行う if (e.KeyCode != Keys.Enter || txtAfter.Text.Length != 15) { return; } // 置換モード、または、追加モードの場合のみ、処理を行う if (mode == "replace" || mode == "add") { string carton = txtAfter.Text; string sql = "select carton_id, lot, m_qty, batch, register_date, rg_user, " + "case when l_cnt >= 2 then 'T' else 'F' end as multi_lot, " + "case when cancel_date is not null then to_char(cancel_date,'YYYY/MM/DD') " + "when pallet_id is not null then pallet_id else 'OK' end as check " + "from t_carton where carton_id='" + carton + "'"; System.Diagnostics.Debug.Print(sql); DataTable dt = new DataTable(); TfSQL tf = new TfSQL(); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql, ref dt); // テスターデータに該当がない場合でも、ユーザー認識用に表示するための処理 dtCarton.Rows.Clear(); DataRow dr = dtCarton.NewRow(); dr["carton_id"] = carton; // テスターデータに該当がある場合の処理 if (dt.Rows.Count != 0) { dr["lot"] = (string)dt.Rows[0]["lot"]; dr["m_qty"] = (int)dt.Rows[0]["m_qty"]; dr["batch"] = (string)dt.Rows[0]["batch"]; dr["register_date"] = (DateTime)dt.Rows[0]["register_date"]; dr["rg_user"] = (string)dt.Rows[0]["rg_user"]; dr["multi_lot"] = (string)dt.Rows[0]["multi_lot"]; dr["check"] = (string)dt.Rows[0]["check"]; } // メモリ上のテーブルにレコードを追加 dtCarton.Rows.Add(dr); // データグリットビューの更新 updateDataGridViews(dtCarton, ref dgvCarton); } }
// サブプロシージャ:トレー情報の更新 private bool updateTrayId(string trayId, string udept, string uname) { // モジュール数量、複数ロット区分、更新日、更新部署、更新ユーザーについて更新する int qty = (int)dtLot.Rows[0]["total"]; string multiLot = dtLot.Columns.Count >= 3 ? "T" : "F"; string sql = "update t_tray set " + "qty ='" + qty + "', " + "update_date ='" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "', " + "up_dept ='" + udept + "', " + "up_user ='******', " + "multi_lot ='" + multiLot + "' " + "where tray_id ='" + trayId + "'"; System.Diagnostics.Debug.Print(sql); TfSQL tf = new TfSQL(); bool res = tf.sqlExecuteNonQuery(sql, false); return(res); }
// ディープキャンセル対象のカートンを、デスクトップのCSVをインポートして選択する private void btnImportForDeepCancel_Click(object sender, EventArgs e) { string sql1 = "select carton_id, lot, l_cnt, m_qty, batch, register_date, rg_user, cancel_date, cl_user, pallet_id from t_carton where carton_id in ( "; string sql2 = string.Empty; //クラスTfImportを使用し、SQL文を作成する List <TfImport> cartonList = TfImport.loadCartonListFromDesktopCsv( System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\CartonList.csv"); foreach (var carton in cartonList) { sql2 += "'" + carton.CartonNumber + "', "; } string sql3 = sql1 + VBS.Left(sql2, sql2.Length - 2) + ") order by carton_id"; System.Diagnostics.Debug.Print(sql3); // SQL結果を、DTAATABLEへ格納 dtCarton.Clear(); TfSQL tf = new TfSQL(); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql3, ref dtCarton); // データグリットビューへDTAATABLEを格納 dgvCarton.DataSource = dtCarton; //行ヘッダーに行番号を表示する for (int i = 0; i < dgvCarton.Rows.Count; i++) { dgvCarton.Rows[i].HeaderCell.Value = (i + 1).ToString(); } //行ヘッダーの幅を自動調節する dgvCarton.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders); // 一番下の行を表示する if (dgvCarton.Rows.Count != 0) { dgvCarton.FirstDisplayedScrollingRowIndex = dgvCarton.Rows.Count - 1; } }
// サブプロシージャ:モジュールの登録、充填モード private void registerModuleRefillMode() { string trayCurrent = txtTrayId.Text; //モジュールテーブルの補充前レコードを一旦削除し、トレーテーブルの更新履歴を追加する bool res1 = updateTrayIdAndDeleteModule(trayCurrent, txtLoginDept.Text, txtLoginName.Text); if (!res1) { MessageBox.Show("An error happened in the tray id updating process.", "Process Result", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //モジュールテーブルへ、データテーブルのレコードを一括登録する TfSQL tf = new TfSQL(); bool res2 = tf.sqlMultipleInsertModule(dtModule, trayCurrent); if (res2) { //ラベルのプリントアウト TfSato tfs = new TfSato(); tfs.printStart("tray", txtTrayId.Text, dtLot, string.Empty, dtpRegisterDate.Value, string.Empty, string.Empty, 1, string.Empty); //親フォームfrmTrayのデータグリットビューを更新するため、デレゲートイベントを発生させる this.RefreshEvent(this, new EventArgs()); this.Focus(); MessageBox.Show("Tray ID: " + trayCurrent + Environment.NewLine + "and its modules were updated.", "Process Result", MessageBoxButtons.OK, MessageBoxIcon.Information); //ユーザーによるメッセージボックス確認後の処理 formAddMode = false; formRefillMode = false; updateDataGridViews(dtModule, ref dgvModule); //閉じるボタンみ有効として、閉じることを促す cmbBinShift.Enabled = false; txtModuleId.Enabled = false; btnRegisterTray.Enabled = false; btnDeleteSelection.Enabled = false; btnChangeCapacity.Enabled = false; } }
// サブプロシージャ:トレー情報の更新(モジュール情報削除処理付き) private bool updateTrayIdAndDeleteModule(string trayId, string udept, string uname) { // モジュール数量、複数ロット区分、更新日、更新部署、更新ユーザーについて更新する int qty = (int)dtLot.Rows[0]["total"]; string multiLot = dtLot.Columns.Count >= 3 ? "T" : "F"; string sql = "update t_tray set " + "qty ='" + qty + "', " + "update_date ='" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "', " + "up_dept ='" + udept + "', " + "up_user ='******', " + "multi_lot ='" + multiLot + "' " + "where tray_id ='" + trayId + "'"; // モジュールレコードは、下記サブプロシージャ内で一旦キャンセルし、別プロシージャで一括登録) System.Diagnostics.Debug.Print(sql); TfSQL tf = new TfSQL(); bool res = tf.sqlUpdateModuleInPack(trayId, sql); return(res); }
// サブプロシージャ:モジュールの登録、通常モード private void registerModuleNormalMode() { // 2016.08.10 FUJII トレーIDの新規採番プロシージャ「GetNewTrayId」を、トランザクション処理バージョンへ変更 //トレーIDの新規採番 //string trayNew = getNewTrayId(txtLoginDept.Text, txtLoginName.Text, VBS.Mid(maxLot, 8, 1), cmbBinShift.Text); TfSQL tf = new TfSQL(); string trayNew = tf.sqlGetNewTrayId(txtLoginDept.Text, txtLoginName.Text, VBS.Mid(maxLot, 8, 1), cmbBinShift.Text, maxLot, dtLot, ref registerDate); if (trayNew == string.Empty) { MessageBox.Show("An error happened in the tray id issuing process.", "Process Result", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //モジュールテーブルへ、データテーブルのレコードを一括登録する bool res = tf.sqlMultipleInsertModule(dtModule, trayNew); if (res) { //ラベルのプリントアウト TfSato tfs = new TfSato(); tfs.printStart("tray", trayNew, dtLot, string.Empty, dtpRegisterDate.Value, string.Empty, string.Empty, 1, string.Empty); //登録済みの状態を表示 txtTrayId.Text = trayNew; dtpRegisterDate.Value = registerDate; //親フォームfrmTrayのデータグリットビューを更新するため、デレゲートイベントを発生させる this.RefreshEvent(this, new EventArgs()); this.Focus(); MessageBox.Show("Tray ID: " + trayNew + Environment.NewLine + "and its modules were registered.", "Process Result", MessageBoxButtons.OK, MessageBoxIcon.Information); //ユーザーによるメッセージボックス確認後の処理 txtTrayId.Text = String.Empty; txtModuleId.Text = String.Empty; dtModule.Clear(); capacity = 24; updateDataGridViews(dtModule, ref dgvModule); } }
// スーパーユーザーに限り、登録済みトレーをキャンセルできる(パック後は不可) private void btnCancelTray_Click(object sender, EventArgs e) { // 本当に削除してよいか、2重で確認する。 DialogResult result1 = MessageBox.Show("Do you really want to cancel this tray?", "Notice", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); if (result1 == DialogResult.No) { return; } DialogResult result2 = MessageBox.Show("Are you really sure? Please select NO if you are not sure.", "Notice", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); if (result2 == DialogResult.No) { return; } // キャンセルの実行 string trayId = txtTrayId.Text; TfSQL tf = new TfSQL(); bool res = tf.sqlCancelModuleInTray(trayId, txtLoginDept.Text, txtLoginName.Text); if (res) { //本フォームのデータグリットビュー更新 dtModule.Clear(); updateDataGridViews(dtModule, ref dgvModule); //親フォームfrmTrayのデータグリットビューを更新するため、デレゲートイベントを発生させる this.RefreshEvent(this, new EventArgs()); this.Focus(); MessageBox.Show("Tray ID " + trayId + " and its modules were canceled.", "Process Result", MessageBoxButtons.OK, MessageBoxIcon.Information); // メッセージボックスの確認後、閉じる Close(); } else { MessageBox.Show("Cancel process was not successful.", "Process Result", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
// サブプロシージャ:パレット情報の更新 private bool updatePalletId(string PalletId, string uname) { // ロット数量、更新日、更新ユーザーについて更新する string lot = dtLot.Columns[0].ColumnName; int count = dtLot.Columns.Count - 1; int m_qty = (int)dtLot.Rows[0]["total"]; string sql = "update t_pallet set " + "lot ='" + lot + "', " + "l_cnt = " + count + ", " + "m_qty = " + m_qty + ", " + "batch = '" + txtBatch.Text + "', " + "register_date ='" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "', " + "rg_user ='******' " + "where pallet_id ='" + PalletId + "'"; System.Diagnostics.Debug.Print(sql); TfSQL tf = new TfSQL(); bool res = tf.sqlExecuteNonQuery(sql, false); return(res); }
// コンボボックス項目選択時の処理(モデルNO) private void cmbModelNo_SelectedIndexChanged(object sender, EventArgs e) { string sql; TfSQL tf = new TfSQL(); string model = cmbModelNo.Text; sql = "select model_name FROM t_model_sub_assy where model_no ='" + model + "'"; System.Diagnostics.Debug.Print(sql); txtModelName.Text = tf.sqlExecuteScalarString(sql); // コンボボックスへ候補をセットする(サブ組NO) sql = "select sub_assy_no FROM t_model_sub_assy where model_no ='" + model + "'"; System.Diagnostics.Debug.Print(sql); tf.getComboBoxData(sql, ref cmbSubAssy); cmbSubAssy.Enabled = true; // コンボボックスへ候補をセットする(ライン) sql = "select line FROM t_model_line where model_no ='" + model + "'"; System.Diagnostics.Debug.Print(sql); tf.getComboBoxData(sql, ref cmbLine); cmbLine.Enabled = true; }
// 登録ボタン押下時、各種確認、ボックスIDの発行、シリアルの登録、バーコードラベルのプリントを行う private void btnRegisterTray_Click(object sender, EventArgs e) { if (getOkCount(dtTray) != dtTray.Rows.Count) { MessageBox.Show("Tray is not 13.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } if (txtLoginDept.Text != "MFG") { //閲覧モードの場合は、プリントアウト if (!formAddMode) { string pack = txtPackId.Text; TfSato tfs = new TfSato(); // ビンAか、ビンBか、ユーザーに選択させる //DialogResult binResult = MessageBox.Show("Please click YES for Bin A, NO for Bin B.", "Print Option", // MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); //string userBin = (binResult == DialogResult.Yes) ? "A" : "B"; string userBin = cmbBatch.Text; // ペガトロン用か否か、ユーザーに選択させる DialogResult result = MessageBox.Show("Do you print Pegatoron label also?", "Print Option", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); if (result == DialogResult.Yes) { //tfs.printStart("packCartonInternal", pack, dtLot, cmbBatch.Text, dtpRegisterDate.Value, "Pack", "Fox", 1, userBin); tfs.printStart("packCartonPega", pack, dtLot, cmbBatch.Text, dtpRegisterDate.Value, "Pack", "Pega", 1, userBin); } else { tfs.printStart("packCartonInternal", pack, dtLot, cmbBatch.Text, dtpRegisterDate.Value, "Pack", "Fox", 1, userBin); } return; } } //以下追加モードの場合の処理 // 2016.08.22 FUJII パックIDの新規採番プロシージャ「getNewPackId」を、トランザクション処理バージョンへ変更 //if (cmbBatch.Text == string.Empty) //{ // MessageBox.Show("Please select Batch.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); // return; //} // 登録処理中は、閉じるボタンを除き、すべてのコントロールを無効にする cmbBatch.Enabled = false; txtTrayId.Enabled = false; btnRegisterPack.Enabled = false; btnDeleteSelection.Enabled = false; //パックIDの新規採番 string packNew = txtPackId.Text; // パック内容変更の処理も同ボタンで行うため、テキストボックスの既存IDを保持する if (formAddMode) { TfSQL tf0 = new TfSQL(); packNew = tf0.sqlGetNewPackId(maxLot, cmbBatch.Text, txtLoginName.Text, dtLot, ref registerDate); if (packNew == string.Empty) { MessageBox.Show("An error happened in the pack id issuing process.", "Process Result", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } txtPackId.Text = packNew; } if (txtLoginDept.Text == "MFG") { // ビンAか、ビンBか、ユーザーに選択させる string pack = txtPackId.Text; TfSato tfs = new TfSato(); //DialogResult binResult = MessageBox.Show("Please click YES for Bin A, NO for Bin B.", "Print Option", // MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); //string userBin = (binResult == DialogResult.Yes) ? "A" : "B"; string userBin = cmbBatch.Text; tfs.printStart("packCartonInternal", pack, dtLot, cmbBatch.Text, dtpRegisterDate.Value, "Pack", "Non", 1, userBin); if (!formAddMode) { return; } } //トレーテーブルのフィールドPACKID、その他を更新する TfSQL tf1 = new TfSQL(); bool res = tf1.sqlMultipleUpdateTrayInPack(dtTray, packNew); if (res) { //登録済みの状態を表示 txtPackId.Text = packNew; dtpRegisterDate.Value = registerDate; //親フォームfrmTrayのデータグリットビューを更新するため、デレゲートイベントを発生させる this.RefreshEvent(this, new EventArgs()); this.Focus(); MessageBox.Show("Pack ID: " + packNew + Environment.NewLine + "and its trays were registered.", "Process Result", MessageBoxButtons.OK, MessageBoxIcon.Information); //ユーザーによるメッセージボックス確認後の処理 txtPackId.Text = String.Empty; txtTrayId.Text = String.Empty; dtTray.Clear(); capacity = 13; updateDataGridViews(dtTray, ref dgvTray, false); } }
// 一時テーブルの選択された複数レコードを、一括消去させる private void btnDeleteSelection_Click(object sender, EventArgs e) { if (dtModule.Rows.Count <= 0) { return; } // セルの選択範囲が2列以上の場合は、メッセージの表示のみでプロシージャを抜ける if (dgvModule.Columns.GetColumnCount(DataGridViewElementStates.Selected) >= 2) { MessageBox.Show("Please select range with only one column.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); return; } // 部分キャンセルモードでない時は、通常処理(モジュールデータテーブルの選択行削除) if (!formPartialCancelMode) { DialogResult result = MessageBox.Show("Do you really want to delete the selected rows?", "Notice", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2); if (result == DialogResult.No) { return; } foreach (DataGridViewCell cell in dgvModule.SelectedCells) { dtModule.Rows[cell.RowIndex].Delete(); } dtModule.AcceptChanges(); updateDataGridViews(dtModule, ref dgvModule); txtModuleId.Focus(); txtModuleId.SelectAll(); } // 部分キャンセルモードの時は、DBモジュールテーブルの行削除 else if (formPartialCancelMode) { if (dgvModule.SelectedCells.Count == dtModule.Rows.Count) { MessageBox.Show("If you wish to delete all modules, please cancel the tray.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); return; } DialogResult result = MessageBox.Show("Do you really want to delete the selected rows?", "Notice", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2); if (result == DialogResult.No) { return; } btnDeleteSelection.Enabled = false; string sql1 = "delete from t_module where module_id in ('"; string sql2 = string.Empty; foreach (DataGridViewCell cell in dgvModule.SelectedCells) { sql2 += dtModule.Rows[cell.RowIndex]["module_id"].ToString() + "','"; dtModule.Rows[cell.RowIndex].Delete(); } string sql3 = sql1 + VBS.Left(sql2, sql2.Length - 2) + ")"; TfSQL tf = new TfSQL(); bool res = tf.sqlExecuteNonQuery(sql3, false); if (res) { dtModule.AcceptChanges(); updateDataGridViews(dtModule, ref dgvModule); string updateTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); string sql4 = "update t_tray set update_date = '" + updateTime + "', up_dept = '" + txtLoginDept.Text + "', " + "up_user = '******', lot = '" + dtLot.Columns[0].ColumnName + "', " + "qty = '" + dtLot.Rows[0]["total"].ToString() + "', multi_lot = '" + (dtLot.Columns.Count >= 3 ? "T" : "F") + "' " + "where tray_id = '" + txtTrayId.Text + "'"; System.Diagnostics.Debug.Print(sql4); tf.sqlExecuteNonQuery(sql4, false); //親フォームfrmTrayのデータグリットビューを更新するため、デレゲートイベントを発生させる this.RefreshEvent(this, new EventArgs()); this.Focus(); MessageBox.Show("Partial cancel was successful.", "Result", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); } else { MessageBox.Show("Partial cancel failed.", "Result", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); } } }
// 登録ボタン押下時、各種確認、ボックスIDの発行、シリアルの登録、バーコードラベルのプリントを行う private void btnRegisterTray_Click(object sender, EventArgs e) { if (cmbBinShift.Text == string.Empty) { MessageBox.Show("Please select Shift.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); return; } if (getOkCount(dtModule) != dtModule.Rows.Count) { MessageBox.Show("Module is not 24.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } // 登録処理中は、閉じるボタンを除き、すべてのコントロールを無効にする cmbBinShift.Enabled = false; txtModuleId.Enabled = false; btnRegisterTray.Enabled = false; btnDeleteSelection.Enabled = false; btnChangeCapacity.Enabled = false; if (formRefillMode && countBeforeRefill >= dtModule.Rows.Count) { MessageBox.Show("Refill is not correct. Please close this window.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); return; } //一時テーブルのシリアル全てについて、DBテーブルに既に登録がないか、確認する //(REFILLモードの場合は、追加分のモジュールのみ確認する) DataTable dtTarget = new DataTable(); if (formRefillMode) { dtTarget = subtractTable(dtModule, dtModuleBeforeRefill); } else { dtTarget = dtModule; } TfSQL tf = new TfSQL(); string dbDuplicate = tf.sqlModuleDuplicateCheck(dtTarget); if (dbDuplicate != string.Empty) { for (int i = 0; i < dgvModule.Rows.Count; ++i) { if (dgvModule["module_id", i].Value.ToString() == dbDuplicate) { dgvModule["module_id", i].Style.BackColor = Color.Red; } } soundAlarm(); // REFILLモードの場合は、閉じる以外の選択肢を与えない if (!formRefillMode) { btnDeleteSelection.Enabled = true; } return; } // 充填モードか否かで、呼び出すプロシージャを選択して実行する if (!formRefillMode) { registerModuleNormalMode(); } else { registerModuleRefillMode(); } }
// シリアルがスキャンされた時の処理 private void txtModuleId_KeyDown(object sender, KeyEventArgs e) { // エンターキーの場合、テキストボックスの桁数が17桁または24桁の場合のみ、処理を行う if (e.KeyCode != Keys.Enter) { return; } if (txtModuleId.Text.Length != 17 && txtModuleId.Text.Length != 24) { return; } // BASEシリアルからHOOPシリアルを取得し(ステップ1)、両方のシリアルに該当する、テスト結果・プロセス名・テスト日時を取得する(ステップ2、ステップ3) TfSQL tf = new TfSQL(); DataTable dt = new DataTable(); string log = string.Empty; string module = txtModuleId.Text; string mdlShort = VBS.Left(module, 17); string mdlNtrs = string.Empty; string mdlOK2ShipResult = string.Empty; // 2016.08.18 FUJIKI FORCED NG CHECK を追加 string mdlForcedNGResult = string.Empty; // 2016.08.18 FUJIKI FORCED NG CHECK を追加 string scanTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); string displayAll = string.Empty; // ログ用 DataRow dr = dtModule.NewRow(); string textResult = "PASS"; string mdlSerialBin = string.Empty; string textSelectBin = string.Empty; // 2016.08.18 FUJIKI FORCED NG CHECK を追加 if (forcedNGSwitch == "ON" && OK2ShipCheckSwitch == "ON") { string sql0 = "select serial from forceddata where serial = '" + mdlShort + "' and result = 1"; mdlForcedNGResult = tf.sqlExecuteScalarStringOK2Ship(sql0); if (!string.IsNullOrEmpty(mdlForcedNGResult)) { textResult = "NG"; displayAll = "NG SERIAL"; } else { // Short Factory Serial No の検索 string sql1 = "select received_result from data where serial = '" + mdlShort + "' and received_result = '0'"; mdlOK2ShipResult = tf.sqlExecuteScalarStringOK2Ship(sql1); // ビン情報を検索 if (string.IsNullOrEmpty(mdlOK2ShipResult)) { mdlOK2ShipResult = "NG"; textResult = "NG"; } else { mdlOK2ShipResult = "OK"; } displayAll = displayAll + "OK2:" + mdlOK2ShipResult; } } else { mdlOK2ShipResult = string.Empty; textResult = "n/a"; displayAll = "test function off"; } // 2017.03.08 FUJII シリアル構成要素のチェックをオフ //トレーIDの新規採番 // 先ずは、シリアルの構成要素のパターンが適正か、ユーザーデスクトップの設定ファイルを使用して確認する string matchResult = string.Empty; //string matchResult = matchSerialNumberingPattern(module); if (matchResult != string.Empty) { MessageBox.Show(matchResult + " does not match with desktop file's setting.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // メモリ上のテーブルにレコードを追加 dr["module_id"] = module; dr["lot"] = VBS.Left(module, 8); dr["bin"] = mdlSerialBin; dr["tester_id"] = displayAll; dr["test_result"] = textResult; dr["test_date"] = DateTime.ParseExact(scanTime, "yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture);; dr["r_mode"] = formReturnMode ? "T" : "F"; dtModule.Rows.Add(dr); // アプリケーションフォルダに、日付とテスト結果のログを付ける log = Environment.NewLine + scanTime + "," + module + "," + displayAll + ":" + textResult; // log = Environment.NewLine + earlyTime + "," + module + "," + displayAll; // 同日日付のファイルが存在する場合は追記し、存在しない場合はファイルを作成追記する try { string outFile = outPath + DateTime.Today.ToString("yyyyMMdd") + ".txt"; System.IO.File.AppendAllText(outFile, log, System.Text.Encoding.GetEncoding("UTF-8")); } catch (Exception ex) { MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } // データグリットビューの更新 updateDataGridViews(dtModule, ref dgvModule); }
// サブプロシージャ:データグリットビューの更新 public void updateDataGridViews(ref DataTable dt, ref DataGridView dgv) { string batchNo = txtBatchNo.Text; string modelNo = cmbModelNo.Text; string modelName = txtModelName.Text; string subAssyName = cmbSubAssy.Text; DateTime batchDate = dtpBatchDate.Value.Date; DateTime batchNextDate = dtpBatchDate.Value.Date.AddDays(1); string shift = cmbShift.Text; string line = cmbLine.Text; string leader = txtLeaderId.Text; string leaderName = txtLeaderName.Text; bool b_batch = chkBatch.Checked; bool b_model = chkModel.Checked; bool b_subAssy = chkSubAssy.Checked; bool b_batchDate = chkBatchDate.Checked; bool b_shift = chkShift.Checked; bool b_line = chkLine.Checked; bool b_leader = chkLeader.Checked; string sql1 = "select approve_by, check_by, batch_no, model_no, model_name, sub_assy_no, sub_assy_name, batch_date, " + "shift, line, leader_id, leader_name, in_qty, out_qty, in_time, out_time, remark from t_batch_no where "; bool[] cr = { batchNo == String.Empty ? false : true, modelNo == String.Empty ? false : true, subAssyNo == String.Empty ? false : true, true, shift == String.Empty ? false : true, line == String.Empty ? false : true, leader == String.Empty ? false : true }; bool[] ck = { b_batch, b_model, b_subAssy, b_batchDate, b_shift, b_line, b_leader }; string sql2 = (!(cr[0] && ck[0]) ? String.Empty : "batch_no like '" + batchNo + "%' AND ") + (!(cr[1] && ck[1]) ? String.Empty : "model_no = '" + modelNo + "' AND ") + (!(cr[2] && ck[2]) ? String.Empty : "sub_assy_no = '" + subAssyNo + "' AND ") + (!(cr[3] && ck[3]) ? String.Empty : "batch_date >= '" + batchDate + "' AND batch_date < '" + batchNextDate + "' AND ") + (!(cr[4] && ck[4]) ? String.Empty : "shift = '" + shift + "' AND ") + (!(cr[5] && ck[5]) ? String.Empty : "line = '" + line + "' AND ") + (!(cr[6] && ck[6]) ? String.Empty : "leader_id = '" + leader + "' AND "); bool b_all = (cr[0] && ck[0]) || (cr[1] && ck[1]) || (cr[2] && ck[2]) || (cr[3] && ck[3]) || (cr[4] && ck[4]) || (cr[5] && ck[5]) || (cr[6] && ck[6]); System.Diagnostics.Debug.Print(b_all.ToString()); System.Diagnostics.Debug.Print(cr[0].ToString() + " " + ck[0].ToString() + " " + cr[1].ToString() + " " + ck[1].ToString() + " " + cr[2].ToString() + " " + ck[2].ToString() + " " + cr[3].ToString() + " " + ck[3].ToString() + " " + cr[4].ToString() + " " + ck[4].ToString() + cr[5].ToString() + " " + ck[5].ToString() + " " + cr[6].ToString() + " " + ck[6].ToString()); if (!b_all) { MessageBox.Show("Please select at least one check box and fill the criteria.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); return; } string sql3 = sql1 + VBStrings.Left(sql2, sql2.Length - 5); System.Diagnostics.Debug.Print(sql3); dt.Clear(); TfSQL tf = new TfSQL(); tf.sqlDataAdapterFillDatatable(sql3, ref dt); // データグリットビューへDTAATABLEを格納 dgv.DataSource = dt; dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; //行ヘッダーに行番号を表示する for (int i = 0; i < dgv.Rows.Count; i++) { dgv.Rows[i].HeaderCell.Value = (i + 1).ToString(); if (dgv.Rows[i].Cells[1].Value.ToString() != "") { dgv.Rows[i].Cells[0].Value = true; dgv.Rows[i].Cells[0].ReadOnly = true; } else { dgv.Rows[i].Cells[0].Value = false; } if (dgv.Rows[i].Cells[2].Value.ToString() == "") { dgv.Rows[i].Cells[0].ReadOnly = true; } } //行ヘッダーの幅を自動調節する dgv.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders); // 一番下の行を表示する if (dgv.Rows.Count != 0) { dgv.FirstDisplayedScrollingRowIndex = dgv.Rows.Count - 1; } }
// サブプロシージャ:データグリットビューの更新 public void updateDataGridViews(DataTable dt, ref DataGridView dgv, bool load) { DateTime registerDateFrom = dtpRegsterDateFrom.Value; DateTime registerDateTo = dtpRegisterDateTo.Value.AddDays(1); string invoiceNo = txtInvoiceNo.Text; string palletId = txtPalletId.Text; string lot = txtLot.Text; string cartonId = txtCartonId.Text; string batch = txtBatch.Text; bool b_registerDateFrom = cbxRegisterDateFrom.Checked; bool b_registerDateTo = cbxRegisterDateTo.Checked; bool b_invoiceNo = cbxInvoiceNo.Checked; bool b_palletId = cbxPalletId.Checked; bool b_lot = cbxLot.Checked; bool b_cartonId = cbxCartonId.Checked; bool b_batch = cbxBatch.Checked; bool b_multi_lot = cbxMultiLot.Checked; bool b_hideCancel = cbxHideCancel.Checked; // ユーザーがパックIDを検索条件として指定した場合は、個別のSQL文を使用する string sqlX = "select pallet_id, lot, l_cnt, m_qty, batch, register_date, rg_user, cancel_date, cl_user, invoice_no from t_pallet " + "where pallet_id in (select pallet_id from t_carton where carton_id like '" + cartonId + "%')"; // ユーザーが選択した検索条件を、SQL文に反映する string sql1 = "select pallet_id, lot, l_cnt, m_qty, batch, register_date, rg_user, cancel_date, cl_user, invoice_no from t_pallet where "; bool[] cr = { true, true, invoiceNo == string.Empty ? false : true, palletId == string.Empty ? false : true, lot == string.Empty ? false : true, cartonId == string.Empty ? false : true, batch == string.Empty ? false : true, true, true }; bool[] ck = { b_registerDateFrom, b_registerDateTo, b_invoiceNo, b_palletId, b_lot, b_cartonId, b_batch, b_multi_lot, b_hideCancel }; string sql2 = (!(cr[0] && ck[0]) ? string.Empty : "register_date >= '" + registerDateFrom + "' AND ") + (!(cr[1] && ck[1]) ? string.Empty : "register_date < '" + registerDateTo + "' AND ") + (!(cr[2] && ck[2]) ? string.Empty : "invoice_no like '%" + invoiceNo + "%' AND ") + (!(cr[3] && ck[3]) ? string.Empty : "pallet_id like '%" + palletId + "%' AND ") + (!(cr[4] && ck[4]) ? string.Empty : "lot like '%" + lot + "%' AND ") + (!(cr[5] && ck[5]) ? string.Empty : "carton_id like '%" + cartonId + "%' AND ") + (!(cr[6] && ck[6]) ? string.Empty : "batch = '" + batch + "' AND ") + (!(cr[7] && ck[7]) ? string.Empty : "l_cnt >= 2 AND ") + (!(cr[8] && ck[8]) ? string.Empty : "cancel_date is null AND "); bool b_all = (cr[0] && ck[0]) || (cr[1] && ck[1]) || (cr[2] && ck[2]) || (cr[3] && ck[3]) || (cr[4] && ck[4]) || (cr[5] && ck[5]) || (cr[6] && ck[6]); if (!b_all) { MessageBox.Show("Please select at least one check box and fill the criteria.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); return; } string sql3 = sql1 + VBS.Left(sql2, sql2.Length - 5) + " order by pallet_id"; string sql4 = string.Empty; if (cartonId != string.Empty && b_cartonId) { sql4 = sqlX; } else { sql4 = sql3; } System.Diagnostics.Debug.Print(sql4); // SQL結果を、DTAATABLEへ格納 dt.Clear(); TfSQL tf = new TfSQL(); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql4, ref dt); // データグリットビューへDTAATABLEを格納 dgv.DataSource = dt; dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; // グリットビュー右端にボタンを追加(初回のみ) if (load) { addButtonsToDataGridView(dgv); } //行ヘッダーに行番号を表示する for (int i = 0; i < dgv.Rows.Count; i++) { dgv.Rows[i].HeaderCell.Value = (i + 1).ToString(); } //行ヘッダーの幅を自動調節する dgv.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders); // 一番下の行を表示する if (dgv.Rows.Count != 0) { dgv.FirstDisplayedScrollingRowIndex = dgv.Rows.Count - 1; } }
// シリアルがスキャンされた時の処理 private void txtModuleId_KeyDown(object sender, KeyEventArgs e) { // エンターキーの場合、テキストボックスの桁数が15桁の場合のみ、処理を行う if (e.KeyCode != Keys.Enter || txtTrayId.Text.Length != 21) { return; } string tray = txtTrayId.Text; string sql = "select tray_id, lot, qty, register_date, rg_dept, multi_lot, " + "case when cancel_date is not null then to_char(cancel_date,'YYYY/MM/DD') " + "when pack_id is not null then pack_id else 'OK' end as check " + "from t_tray where tray_id='" + tray + "'"; System.Diagnostics.Debug.Print(sql); DataTable dt = new DataTable(); TfSQL tf = new TfSQL(); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql, ref dt); if (dt.Rows.Count != 0) { bool warnedAlready = false; string sql2 = " select sum(case when tm1.test_result in ('n/a', 'PASS') then 1 else 0 end) as okcount" + " , count(tm1.test_result) as totalcount" + " from t_tray " + " left join t_module tm1 on tm1.tray_id = t_tray.tray_id " + " where t_tray.tray_id = '" + tray + "'"; DataTable dt2 = new DataTable(); TfSQL tf2 = new TfSQL(); tf2.sqlDataAdapterFillDatatableFromTrayGuardDb(sql2, ref dt2); if ((long)dt2.Rows[0]["okcount"] != 24) { MessageBox.Show("OK module is not 24", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Stop); warnedAlready = true; //if (txtLoginDept.Text != "PC") return; } if ((long)dt2.Rows[0]["totalcount"] != 24 && !warnedAlready) { MessageBox.Show("Module data is not 24", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Stop); warnedAlready = true; //if (txtLoginDept.Text != "PC") return; } if ((int)dt.Rows[0]["qty"] != 24 && !warnedAlready) { MessageBox.Show("Module in tray is not 24.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Stop); warnedAlready = true; //if (txtLoginDept.Text != "PC") return; } } // 先ずは、シリアルの構成要素のパターンが適正か、ユーザーデスクトップの設定ファイルを使用して確認する // 2017/03/07 Fujii 構成要素チェックのオフ //string matchResult = matchSerialNumberingPattern(tray); string matchResult = string.Empty; if (matchResult != string.Empty) { MessageBox.Show(matchResult + " does not match with desktop file's setting.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // テスターデータに該当がない場合でも、ユーザー認識用に表示するための処理 DataRow dr = dtTray.NewRow(); dr["tray_id"] = tray; // テスターデータに該当がある場合の処理 if (dt.Rows.Count != 0) { dr["lot"] = (string)dt.Rows[0]["lot"]; dr["qty"] = (int)dt.Rows[0]["qty"]; dr["register_date"] = (DateTime)dt.Rows[0]["register_date"]; dr["rg_dept"] = (string)dt.Rows[0]["rg_dept"]; dr["multi_lot"] = (string)dt.Rows[0]["multi_lot"]; dr["check"] = (string)dt.Rows[0]["check"]; } // メモリ上のテーブルにレコードを追加 dtTray.Rows.Add(dr); // データグリットビューの更新 updateDataGridViews(dtTray, ref dgvTray, false); }
// サブプロシージャ:シリアルの構成要素のパターンが適正か、ユーザーデスクトップの設定ファイルを使用して確認する private string matchSerialNumberingPattern(string tray) { string result = string.Empty; string sql = "select module_id, substr(module_id, 1, 3) as plant, substr(module_id, 4, 1) as year, substr(module_id, 5, 2) as week, " + "substr(module_id, 7, 1) as day, substr(module_id, 8, 1) as line, substr(module_id, 12, 4) as eeee, " + "substr(module_id, 16, 1) as revision, substr(module_id, 19, 1) as mass, substr(module_id, 20, 1) as flexure, " + "substr(module_id, 21, 1) as cover_base, substr(module_id, 22, 2) as dframe, substr(module_id, 23, 1) as fpc, " + "substr(module_id, 24, 1) as shift from t_module where tray_id = '" + tray + "'"; System.Diagnostics.Debug.Print(sql); DataTable dt = new DataTable(); TfSQL tf = new TfSQL(); tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql, ref dt); // DBから取得したモジュール構成要素のリストを、デスクトップで指定されたリストでフィルターを掛け、該当文字列を警告メッセージに追加する if (!plant1.Any(s => s == "XXX")) { List <string> plant2 = dt.AsEnumerable().Select(r => r.Field <string>("plant")).Except(plant1).ToList(); foreach (var e in plant2) { result += "Plant '" + e + "'" + Environment.NewLine; } } if (!year1.Any(s => s == "XXX")) { List <string> year2 = dt.AsEnumerable().Select(r => r.Field <string>("year")).Except(year1).ToList(); foreach (var e in year2) { result += "Year '" + e + "'" + Environment.NewLine; } } if (!week1.Any(s => s == "XXX")) { List <string> week2 = dt.AsEnumerable().Select(r => r.Field <string>("week")).Except(week1).ToList(); foreach (var e in week2) { result += "Week '" + e + "'" + Environment.NewLine; } } if (!day1.Any(s => s == "XXX")) { List <string> day2 = dt.AsEnumerable().Select(r => r.Field <string>("day")).Except(day1).ToList(); foreach (var e in day2) { result += "Day '" + e + "'" + Environment.NewLine; } } if (!line1.Any(s => s == "XXX")) { List <string> line2 = dt.AsEnumerable().Select(r => r.Field <string>("line")).Except(line1).ToList(); foreach (var e in line2) { result += "Line '" + e + "'" + Environment.NewLine; } } if (!eeee1.Any(s => s == "XXX")) { List <string> eeee2 = dt.AsEnumerable().Select(r => r.Field <string>("eeee")).Except(eeee1).ToList(); foreach (var e in eeee2) { result += "4E '" + e + "'" + Environment.NewLine; } } if (!revision1.Any(s => s == "XXX")) { List <string> revision2 = dt.AsEnumerable().Select(r => r.Field <string>("revision")).Except(revision1).ToList(); foreach (var e in revision2) { result += "Revision '" + e + "'" + Environment.NewLine; } } if (!mass1.Any(s => s == "XXX")) { List <string> mass2 = dt.AsEnumerable().Select(r => r.Field <string>("mass")).Except(mass1).ToList(); foreach (var e in mass2) { result += "Mass '" + e + "'" + Environment.NewLine; } } if (!flexure1.Any(s => s == "XXX")) { List <string> flexure2 = dt.AsEnumerable().Select(r => r.Field <string>("flexure")).Except(flexure1).ToList(); foreach (var e in flexure2) { result += "Flexure '" + e + "'" + Environment.NewLine; } } if (!cover_base1.Any(s => s == "XXX")) { List <string> cover_base2 = dt.AsEnumerable().Select(r => r.Field <string>("cover_base")).Except(cover_base1).ToList(); foreach (var e in cover_base2) { result += "Cover/base '" + e + "'" + Environment.NewLine; } } if (!dframe1.Any(s => s == "XXX")) { List <string> dframe2 = dt.AsEnumerable().Select(r => r.Field <string>("dframe")).Except(dframe1).ToList(); foreach (var e in dframe2) { result += "Dframe '" + e + "'" + Environment.NewLine; } } if (!fpc1.Any(s => s == "XXX")) { List <string> fpc2 = dt.AsEnumerable().Select(r => r.Field <string>("fpc")).Except(fpc1).ToList(); foreach (var e in fpc2) { result += "Fpc '" + e + "'" + Environment.NewLine; } } if (!shift1.Any(s => s == "XXX")) { List <string> shift2 = dt.AsEnumerable().Select(r => r.Field <string>("shift")).Except(shift1).ToList(); foreach (var e in shift2) { result += "Shift '" + e + "'" + Environment.NewLine; } } return(result); //for (int i = 0; i < dt.Rows.Count; i++) //{ // if (!plant1.Any(s=> s=="XXX") && dt.Rows[i]["plant"].ToString() != plant) result += module + " Plant '" + dt.Rows[i]["plant"].ToString() + "'" + Environment.NewLine; // else if (!year1.Any(s=> s=="XXX") && dt.Rows[i]["year"].ToString() != year) result += module + " Year '" + dt.Rows[i]["year"].ToString() + "'" + Environment.NewLine; // else if (!week1.Any(s=> s=="XXX") && dt.Rows[i]["week"].ToString() != week) result += module + " Week '" + dt.Rows[i]["week"].ToString() + "'" + Environment.NewLine; // else if (!day1.Any(s=> s=="XXX") && dt.Rows[i]["day"].ToString() != day) result += module + " Day '" + dt.Rows[i]["day"].ToString() + "'" + Environment.NewLine; // else if (!line1.Any(s=> s=="XXX") && dt.Rows[i]["line"].ToString() != line) result += module + " Line '" + dt.Rows[i]["line"].ToString() + "'" + Environment.NewLine; // else if (!eeee1.Any(s=> s=="XXX") && dt.Rows[i]["eeee"].ToString() != eeee) result += module + " 4E '" + dt.Rows[i]["eeee"].ToString() + "'" + Environment.NewLine; // else if (!revision1.Any(s=> s=="XXX") && dt.Rows[i]["revision"].ToString() != revision) result += module + " Revision '" + dt.Rows[i]["revision"].ToString() + "'" + Environment.NewLine; // else if (!mass1.Any(s=> s=="XXX") && dt.Rows[i]["mass"].ToString() != mass) result += module + " Mass '" + dt.Rows[i]["mass"].ToString() + "'" + Environment.NewLine; // else if (!flexure1.Any(s=> s=="XXX") && dt.Rows[i]["flexure"].ToString() != flexure) result += module + " Flexure '" + dt.Rows[i]["flexure"].ToString() + "'" + Environment.NewLine; // else if (!cover_base1.Any(s=> s=="XXX") && dt.Rows[i]["cover_base"].ToString() != cover_base) result += module + " Cover/base '" + dt.Rows[i]["cover_base"].ToString() + "'" + Environment.NewLine; // else if (!dframe1.Any(s=> s=="XXX") && dt.Rows[i]["dframe"].ToString() != dframe) result += module + " D-Frame '" + dt.Rows[i]["dframe"].ToString() + "'" + Environment.NewLine; // else if (!fpc1.Any(s=> s=="XXX") && dt.Rows[i]["fpc"].ToString() != fpc) result += module + " FPC '" + dt.Rows[i]["fpc"].ToString() + "'" + Environment.NewLine; // else if (!shift1.Any(s=> s=="XXX") && dt.Rows[i]["shift"].ToString() != shift) result += module + " Shift '" + dt.Rows[i]["shift"].ToString() + "'" + Environment.NewLine; //} }