예제 #1
0
        // グリッドビュー上のボタン押下時、モジュールフォームを閲覧モードで開く、デレゲートあり
        private void dgvBoxId_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            int currentRow = int.Parse(e.RowIndex.ToString());

            if (dgvTray.Columns[e.ColumnIndex] == openTray && currentRow >= 0)
            {
                //既にfrmModuleInTray が開かれている場合は、それを閉じるよう促す
                if (TfGeneral.checkOpenFormExists("frmModuleInTray"))
                {
                    MessageBox.Show("Please close the currently open form.", "Notice",
                                    MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2);
                    return;
                }

                string   trayId   = dgvTray["tray_id", currentRow].Value.ToString();
                DateTime trayDate = (DateTime)dgvTray["register_date", currentRow].Value;
                string   shift    = VBS.Right(trayId, 3);
                bool     canceled = !String.IsNullOrEmpty(dgvTray["cl_dept", currentRow].Value.ToString());
                bool     packed   = !String.IsNullOrEmpty(dgvTray["pack_id", currentRow].Value.ToString());

                // モジュールテキストボックスが空でない、かつチェックボックスがオン、かつ検索結果が1行の場合のみ、再プリントモードを有効
                bool reprintMode = (txtModuleId.Text.Length != 0 && cbxModuleId.Checked && dtTray.Rows.Count == 1);

                frmModuleInTray fM = new frmModuleInTray();
                //子イベントをキャッチして、データグリッドを更新する
                fM.RefreshEvent += delegate(object sndr, EventArgs excp)
                {
                    updateDataGridViews(dtTray, ref dgvTray, false);
                    this.Focus();
                };

                fM.updateControls(trayId, trayDate, userId, txtLoginName.Text, txtLoginDept.Text, userRole, shift, false, false, canceled, packed, 1, false, reprintMode);
                fM.Show();
            }
        }
예제 #2
0
        // サブプロシージャ: テスター用WHERE句の作成
        private string makeSqlWhereClause(string criteria)
        {
            string sql = " where ";

            foreach (string c in criteria.Split(','))
            {
                sql += "c.process_cd like " + VBS.Left(c, c.Length - 1) + "%' or ";
            }
            ;
            sql = VBS.Left(sql, sql.Length - 3);
            System.Diagnostics.Debug.Print(sql);
            return(sql);
        }
예제 #3
0
        // サブプロシージャ: テスター用SELECTケース句の作成
        private string makeSqlCaseClause(string criteria)
        {
            string sql = " case ";

            foreach (string c in criteria.Split(','))
            {
                sql += "when c.process_cd like " + VBS.Left(c, c.Length - 1) + "%' then " + c + " ";
            }
            ;
            sql += "else c.process_cd end as tester_id ";
            System.Diagnostics.Debug.Print(sql);
            return(sql);
        }
예제 #4
0
        // サブプロシージャ:ロット集計グリッドビューを更新し、数量の最も多いロット番号を返す
        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);
        }
예제 #5
0
        // QAのスーパーユーザーは、トレーの一部モジュールのキャンセルができる
        private void btnPartiallyCancel_Click(object sender, EventArgs e)
        {
            if (dtTray.Rows.Count == 0)
            {
                return;
            }
            // セルの選択範囲が2列以上の場合は、メッセージの表示のみでプロシージャを抜ける
            if (dgvTray.Columns.GetColumnCount(DataGridViewElementStates.Selected) >= 2 ||
                dgvTray.Rows.GetRowCount(DataGridViewElementStates.Selected) >= 2 || dgvTray.CurrentCell.ColumnIndex != 0)
            {
                MessageBox.Show("Please select only one tray id.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
                return;
            }
            //既にfrmModuleInTray が開かれている場合は、それを閉じるよう促す
            if (TfGeneral.checkOpenFormExists("frmModuleInTray"))
            {
                MessageBox.Show("Please close the currently open form.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            int      currentRow = dgvTray.CurrentCell.RowIndex;
            string   trayId     = dgvTray["tray_id", currentRow].Value.ToString();
            DateTime trayDate   = (DateTime)dgvTray["register_date", currentRow].Value;
            string   shift      = VBS.Right(trayId, 3);
            bool     canceled   = !String.IsNullOrEmpty(dgvTray["cl_dept", currentRow].Value.ToString());
            bool     packed     = !String.IsNullOrEmpty(dgvTray["pack_id", currentRow].Value.ToString());

            if (canceled || packed)
            {
                MessageBox.Show("The tray id is already canceled or packed.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            frmModuleInTray fM = new frmModuleInTray();

            //子イベントをキャッチして、データグリッドを更新する
            fM.RefreshEvent += delegate(object sndr, EventArgs excp)
            {
                updateDataGridViews(dtTray, ref dgvTray, false);
                this.Focus();
            };

            fM.updateControls(trayId, trayDate, userId, txtLoginName.Text, txtLoginDept.Text, userRole, shift, false, false, canceled, packed, 1, true, false);
            fM.Show();
        }
예제 #6
0
        // ディープキャンセル対象のカートンを、デスクトップの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;
            }
        }
예제 #7
0
        //トレーグリッドビュー上のボタンのクリックで、formModuleInTrayを呼び出し、対応するモジュールを表示する(デレゲートなし)
        private void dgvTray_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            int currentRow = int.Parse(e.RowIndex.ToString());

            if (dgvTray.Columns[e.ColumnIndex] == openTray && currentRow >= 0)
            {
                //既にfrmModuleInTray が開かれている場合は、それを閉じるよう促す
                if (TfGeneral.checkOpenFormExists("frmModuleInTray"))
                {
                    MessageBox.Show("Please close the currently open form.", "Notice",
                                    MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2);
                    return;
                }

                string   trayId   = dgvTray["tray_id", currentRow].Value.ToString();
                string   line     = VBS.Right(trayId, 1);
                DateTime trayDate = (DateTime)dgvTray["register_date", currentRow].Value;

                //デレゲートなし。当トレーフォームのフォーム位置が2の場合は、モジュールフォームの位置は3。それ以外は2。
                frmModuleInTray fM = new frmModuleInTray();
                fM.updateControls(trayId, trayDate, "", txtLoginName.Text, txtLoginDept.Text, userRole, line, false, false, true, true, 4, false, false);
                fM.Show();
            }
        }
예제 #8
0
        // 一時テーブルの選択された複数レコードを、一括消去させる
        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);
                }
            }
        }
예제 #9
0
        // サブプロシージャ:モジュールの登録、通常モード
        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);
            }
        }
예제 #10
0
        // サブプロシージャ:シリアルの構成要素のパターンが適正か、ユーザーデスクトップの設定ファイルを使用して確認する
        private string matchSerialNumberingPattern(string serial)
        {
            string result = string.Empty;

            // 設定ファイル LINE = XXX の場合は、検証しない
            // if (line == "XXX") return string.Empty;
            if (!plant.Equals("XXX") && VBS.Mid(serial, 1, 3) != plant)
            {
                return("Plant '" + VBS.Mid(serial, 1, 3) + "'");
            }
            else if (!year.Equals("XXX") && VBS.Mid(serial, 4, 1) != year)
            {
                return("Year '" + VBS.Mid(serial, 4, 1) + "'");
            }
            else if (!week.Equals("XXX") && VBS.Mid(serial, 5, 2) != week)
            {
                return("Week '" + VBS.Mid(serial, 5, 2) + "'");
            }
            else if (!day.Equals("XXX") && VBS.Mid(serial, 7, 1) != day)
            {
                return("Day '" + VBS.Mid(serial, 7, 1) + "'");
            }
            else if (!line.Equals("XXX") && VBS.Mid(serial, 8, 1) != line)
            {
                return("Line '" + VBS.Mid(serial, 8, 1) + "'");
            }
            else if (!eeee.Equals("XXX") && VBS.Mid(serial, 12, 4) != eeee)
            {
                return("4E '" + VBS.Mid(serial, 12, 4) + "'");
            }
            else if (!revision.Equals("XXX") && VBS.Mid(serial, 16, 1) != revision)
            {
                return("Revision '" + VBS.Mid(serial, 16, 1) + "'");
            }
            else if (!mass.Equals("XXX") && VBS.Mid(serial, 19, 1) != mass)
            {
                return("Mass '" + VBS.Mid(serial, 19, 1) + "'");
            }
            else if (!flexure.Equals("XXX") && VBS.Mid(serial, 20, 1) != flexure)
            {
                return("Flexure '" + VBS.Mid(serial, 20, 1) + "'");
            }
            else if (!cover_base.Equals("XXX") && VBS.Mid(serial, 21, 1) != cover_base)
            {
                return("Cover/base '" + VBS.Mid(serial, 21, 1) + "'");
            }
            else if (!dframe.Equals("XXX") && VBS.Mid(serial, 22, 1) != dframe)
            {
                return("D-Frame '" + VBS.Mid(serial, 22, 1) + "'");
            }
            else if (!fpc.Equals("XXX") && VBS.Mid(serial, 23, 1) != fpc)
            {
                return("FPC '" + VBS.Mid(serial, 23, 1) + "'");
            }
            else if (!shift.Equals("XXX") && VBS.Mid(serial, 24, 1) != shift)
            {
                return("Shift '" + VBS.Mid(serial, 24, 1) + "'");
            }
            else
            {
                return(string.Empty);
            }
        }
예제 #11
0
        // シリアルがスキャンされた時の処理
        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);
        }
예제 #12
0
        // サブプロシージャ:データグリットビューの更新
        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;
            }
        }
예제 #13
0
        // 変更後モジュールがスキャンされたときの処理
        private void txtAfter_KeyDown(object sender, KeyEventArgs e)
        {
            // エンターキーの場合、テキストボックスの桁数が17桁または24桁の場合のみ、処理を行う
            if (e.KeyCode != Keys.Enter)
            {
                return;
            }
            if (txtAfter.Text.Length != 17 && txtAfter.Text.Length != 24)
            {
                return;
            }

            // データテーブルのクリア
            dtModule.Rows.Clear();

            // BASEシリアルからHOOPシリアルを取得し(ステップ1)、両方のシリアルに該当する、テスト結果・プロセス名・テスト日時を取得する(ステップ2、ステップ3)
            TfSQL     tf               = new TfSQL();
            DataTable dt               = new DataTable();
            string    log              = string.Empty;
            string    module           = txtAfter.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; // ログ用
            string textResult    = "PASS";
            string mdlSerialBin  = string.Empty;
            string textSelectBin = string.Empty;



            // メモリ上のテーブルにレコードを追加
            DataRow dr = dtModule.NewRow();

            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;

            // 同日日付のファイルが存在する場合は追記し、存在しない場合はファイルを作成追記する(AppendAllText がやってくれる)
            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);
            }

            // 現在の一時登録件数を変数へ保持する
            int okCount = getOkCount(dtModule);

            txtRow.Text = okCount.ToString();

            // データグリットビューの更新
            updateDataGridViews(dtModule, ref dgvModule);
        }
예제 #14
0
        // サブプロシージャ:ロット集計グリッドビューを更新し、数量の最も多いロット番号を返す
        public string updateLotSummary(DataTable dt)
        {
            if (dt.Rows.Count <= 0)
            {
                dtLot = new DataTable();
                dgvLotSummary.DataSource = dtLot;
                return(string.Empty);
            }

            // 各カートンに含まれる、バックIDリストを取得する
            TfSQL  tf     = new TfSQL();
            string sql1   = "select pack_id from t_pack where carton_id in (";
            string sql2   = string.Empty;
            var    query1 = dt.AsEnumerable().Select(row => new { carton_id = row.Field <string>("carton_id") });

            foreach (var q in query1)
            {
                sql2 += "'" + q.carton_id + "', ";
            }
            string sql3 = sql1 + VBS.Left(sql2, sql2.Length - 2) + ")";

            System.Diagnostics.Debug.Print(sql3);
            DataTable dtTemp1 = new DataTable();

            tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql3, ref dtTemp1);

            // 各パックに含まれる、トレーIDリストを取得する
            sql1 = "select tray_id from t_tray where pack_id in (";
            sql2 = string.Empty;
            var query2 = dtTemp1.AsEnumerable().Select(row => new { pack_id = row.Field <string>("pack_id") });

            foreach (var q in query2)
            {
                sql2 += "'" + q.pack_id + "', ";
            }
            sql3 = sql1 + VBS.Left(sql2, sql2.Length - 2) + ")";
            System.Diagnostics.Debug.Print(sql3);
            DataTable dtTemp2 = new DataTable();

            tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql3, ref dtTemp1);

            // 上記で取得したトレーIDが持つモジュールから、ロット集計を作成する
            sql1 = "select lot, count(lot) as qty from t_module where tray_id in (";
            sql2 = string.Empty;
            var query3 = dtTemp1.AsEnumerable().Select(row => new { tray_id = row.Field <string>("tray_id") });

            foreach (var q in query3)
            {
                sql2 += "'" + q.tray_id + "', ";
            }
            sql3 = sql1 + VBS.Left(sql2, sql2.Length - 2) + ") group by lot order by qty desc, lot";
            System.Diagnostics.Debug.Print(sql3);
            DataTable dtTemp3 = new DataTable();

            tf.sqlDataAdapterFillDatatableFromTrayGuardDb(sql3, ref dtTemp3);

            // ロット集計表示テーブルに、一時テーブルの情報を移す
            dgvLotSummary.DataSource = null;
            dgvLotSummary.Refresh();
            dtLot = new DataTable();
            var query4 = dtTemp3.AsEnumerable().Select(r => new { lot = r.Field <string>("lot"), qty = r.Field <Int64>("qty") });

            // 列の追加
            foreach (var q in query4)
            {
                dtLot.Columns.Add(q.lot, typeof(int));
            }
            dtLot.Columns.Add("total", typeof(int));
            // 行の追加
            dtLot.Rows.Add();
            foreach (var q in query4)
            {
                dtLot.Rows[0][q.lot] = q.qty;
            }
            dtLot.Rows[0]["total"] = query4.Sum(a => a.qty);

            // dgvLotSummary_ControlAdded が発生する、655より多い列を取り扱うため、WEIGHT設定を100から1へ変更
            dgvLotSummary.DataSource = dtLot;
            return(query4.First().lot);
        }
예제 #15
0
        // サブプロシージャ:データグリットビューの更新
        public void updateDataGridViews(DataTable dt, ref DataGridView dgv, bool load)
        {
            DateTime registerDateFrom = dtpRegsterDateFrom.Value;
            DateTime registerDateTo   = dtpRegisterDateTo.Value.AddDays(1);
            string   registerDept     = cmbRegisterDept.Text;
            DateTime updateDateFrom   = dtpUpdateDateFrom.Value;
            DateTime updateDateTo     = dtpUpdateDateTo.Value.AddDays(1);
            string   updateDept       = cmbUpdateDept.Text;
            string   trayId           = txtTrayId.Text;
            string   line             = cmbLine.Text;
            string   shift            = txtShift.Text;
            string   moduleId         = txtModuleId.Text;
            string   lot = txtLot.Text;

            bool b_registerDateFrom = cbxRegisterDateFrom.Checked;
            bool b_registerDateTo   = cbxRegisterDateTo.Checked;
            bool b_registerDept     = cbxRegisterDept.Checked;
            bool b_updateDateFrom   = cbxUpdateDateFrom.Checked;
            bool b_updateDateTo     = cbxUpdateDateTo.Checked;
            bool b_updateDept       = cbxUpdateDept.Checked;
            bool b_trayId           = cbxTrayId.Checked;
            bool b_line             = cbxLine.Checked;
            bool b_shift            = cbxShift.Checked;
            bool b_multiLot         = cbxMultiLot.Checked;
            bool b_hideCancel       = cbxHideCancel.Checked;
            bool b_moduleId         = cbxModuleId.Checked;
            bool b_lot = cbxLot.Checked;

            // ユーザーがモジュールIDを検索条件として指定した場合は、個別のSQL文を使用する
            string sqlX = "select tray_id, lot, qty, register_date, rg_dept, update_date, up_dept, cancel_date, cl_dept, multi_lot, pack_id from t_tray " +
                          "where tray_id in (select tray_id from t_module where module_id like '" + moduleId + "%')";

            // ユーザーがロットDを検索条件として指定した場合は、個別のSQL文を使用する
            string sqlY = "select tray_id, lot, qty, register_date, rg_dept, update_date, up_dept, cancel_date, cl_dept, multi_lot, pack_id from t_tray " +
                          "where tray_id in (select tray_id from t_module where lot like '" + lot + "%')";

            // モジュールID・ロットIDが選択されなかった場合は、その他全ての選択条件を、SQL文に盛り込む
            string sql1 = "select tray_id, lot, qty, register_date, rg_dept, update_date, up_dept, cancel_date, cl_dept, multi_lot, pack_id from t_tray where ";

            bool[] cr = { true,
                          true,
                          registerDept == string.Empty ? false : true,
                          true,
                          true,
                          updateDept == string.Empty ? false : true,
                          trayId == string.Empty ? false : true,
                          line == string.Empty ? false : true,
                          shift == string.Empty ? false : true,
                          true,
                          true };

            bool[] ck = { b_registerDateFrom,
                          b_registerDateTo,
                          b_registerDept,
                          b_updateDateFrom,
                          b_updateDateTo,
                          b_updateDept,
                          b_trayId,
                          b_line,
                          b_shift,
                          b_multiLot,
                          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 : "rg_dept = '" + registerDept + "' AND ") +
                          (!(cr[3] && ck[3]) ? string.Empty : "update_date >= '" + updateDateFrom + "' AND ") +
                          (!(cr[4] && ck[4]) ? string.Empty : "update_date < '" + updateDateTo + "' AND ") +
                          (!(cr[5] && ck[5]) ? string.Empty : "up_dept = '" + updateDept + "' AND ") +
                          (!(cr[6] && ck[6]) ? string.Empty : "tray_id like '%" + trayId + "%' AND ") +
                          (!(cr[7] && ck[7]) ? string.Empty : "line = '" + line + "' AND ") +
                          (!(cr[8] && ck[8]) ? string.Empty : "shift like '%" + shift + "%' AND ") +
                          (!(cr[9] && ck[9]) ? string.Empty : "multi_lot = 'T' AND ") +
                          (!(cr[10] && ck[10]) ? 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]) || (cr[7] && ck[7]) || (cr[8] && ck[8]) ||
                         (moduleId != string.Empty && b_moduleId) || (lot != string.Empty && b_lot);

            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 tray_id";
            string sql4 = string.Empty;

            if (moduleId != string.Empty && b_moduleId)
            {
                sql4 = sqlX;
            }
            else if (lot != string.Empty && b_lot)
            {
                sql4 = sqlY;
            }
            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;
            }
        }