private void btn_syuukei_Click(object sender, EventArgs e) { if (tss.User_Kengen_Check(2, 5) == false) { MessageBox.Show("権限がありません"); return; } tss.GetUser(); //集計 if (chk_seikyu_simebi() == false) { MessageBox.Show("請求締日に異常があります。"); return; } if (chk_torihikisaki_cd_hani() == false) { MessageBox.Show("取引先コードの範囲指定が正しくありません。"); return; } //売上マスタから、該当する締日のレコードを抽出し、取引先コードのリスト作成する DataTable w_dt_torihikisaki = new DataTable(); w_dt_torihikisaki = tss.OracleSelect("select torihikisaki_cd from tss_uriage_m where TO_CHAR(uriage_simebi,'YYYY/MM/DD') = '" + tb_seikyu_simebi.Text + "' and torihikisaki_cd >= '" + tb_torihikisaki_cd1.Text.ToString() + "' and torihikisaki_cd <= '" + tb_torihikisaki_cd2.Text.ToString() + "' group by torihikisaki_cd"); DataTable w_dt_torihikisaki2 = new DataTable(); //対象締日に売り上げがなかった場合 //画面の請求締日から1か月前の締日を求め、1カ月前の締めレコードがあったら対象にする DataTable w_dt = new DataTable(); DateTime w_datetime; DataTable w_dt_simebi = new DataTable(); string date; //締日 //入力された締日が、末日かどうかのチェック tss.try_string_to_date(tb_seikyu_simebi.Text.ToString()); w_datetime = tss.out_datetime; DateTime w_datetime2 = new DateTime(w_datetime.Year, w_datetime.Month, DateTime.DaysInMonth(w_datetime.Year, w_datetime.Month));; //末日を入れる変数 if (w_datetime == w_datetime2) { //末尾なら99 date = "99"; } else { //末尾でないなら、入力された日付の日 date = (tb_seikyu_simebi.Text.ToString()).Substring(8); } //当月の売り上げはないが、締日のdayを取出し、請求締日条件に一致する取引先で、売掛残高があるリストを抽出 //取引先マスタの入金未完了の金額を求めて繰越額にする w_dt_torihikisaki2 = tss.OracleSelect("select torihikisaki_cd from tss_torihikisaki_m where torihikisaki_cd >= '" + tb_torihikisaki_cd1.Text.ToString() + "' and torihikisaki_cd <= '" + tb_torihikisaki_cd2.Text.ToString() + "' and misyori_nyukingaku != 0 and seikyu_sime_date = '" + date + "'"); //tss.try_string_to_date(tb_seikyu_simebi.Text.ToString()); //w_datetime = tss.out_datetime.AddMonths(-1); //1か月前 //w_dt_simebi = tss.OracleSelect("select * from tss_torihikisaki_m where torihikisaki_cd >= '" + tb_torihikisaki_cd1.Text.ToString() + "' and torihikisaki_cd <= '" + tb_torihikisaki_cd2.Text.ToString() + "'"); //if (w_dt_simebi.Rows[0]["seikyu_sime_date"].ToString() == "99") //{ // w_datetime = new DateTime(w_datetime.Year, w_datetime.Month, DateTime.DaysInMonth(w_datetime.Year, w_datetime.Month)); //末日を求める //} //当月の売り上げはないが、1カ月前の締めレコードがあるリスト //w_dt_torihikisaki2 = tss.OracleSelect("select torihikisaki_cd from tss_urikake_m where torihikisaki_cd >= '" + tb_torihikisaki_cd1.Text.ToString() + "' and torihikisaki_cd <= '" + tb_torihikisaki_cd2.Text.ToString() + "' and uriage_simebi = '" + w_datetime.ToShortDateString() + "'"); //売上があった取引先リストと結合 w_dt_torihikisaki.Merge(w_dt_torihikisaki2); if (w_dt_torihikisaki.Rows.Count == 0) { MessageBox.Show("指定した条件に当てはまるデータがありません"); return; } //取引先コード毎に集計を行い、売掛レコードを作成する DataTable w_dt_urikake = new DataTable(); //売掛マスタの既存レコード確認用 string w_urikake_no; //売掛マスタの既存レコードの請求番号退避用 DataTable w_dt_uriage = new DataTable(); //顧客毎の売上マスタ用 foreach (DataRow dr in w_dt_torihikisaki.Rows) { //初期値リセット w_kurikosi = 0; w_uriage = 0; w_syouhizei = 0; w_nyukin = 0; w_zandaka = 0; w_seikyu = 0; //既に集計済みの場合は、その請求番号を退避させる(再利用する為) w_dt_urikake = tss.OracleSelect("select * from tss_urikake_m where torihikisaki_cd = '" + dr["torihikisaki_cd"].ToString() + "' and uriage_simebi = '" + tb_seikyu_simebi.Text + "'"); if (w_dt_urikake.Rows.Count > 0) { w_urikake_no = w_dt_urikake.Rows[0]["urikake_no"].ToString(); } else { w_urikake_no = ""; } //繰越金額 w_kurikosi = get_kurikosi(dr["torihikisaki_cd"].ToString()); //売上金額と消費税額 w_uriage = get_uriage(dr["torihikisaki_cd"].ToString()); //入金額 w_nyukin = get_nyukin(dr["torihikisaki_cd"].ToString()); //残高 w_zandaka = w_kurikosi + w_uriage + w_syouhizei - w_nyukin; //請求額 w_seikyu = w_uriage + w_syouhizei; //レコード書き込み if (w_urikake_no != "") { //既存のレコードを更新 //既存データの更新の場合、過去売上が訂正され売上額+消費税<>入金額になっている場合があるので、再度入金完了フラグを立て直す decimal w_chk_nyukingaku; //入金額 decimal w_chk_nyukingaku_sa; //入金額-売上-消費税 string w_nyukin_kanryou_flg; w_chk_nyukingaku = tss.try_string_to_decimal(w_dt_urikake.Rows[0]["nyukingaku"].ToString()); w_chk_nyukingaku_sa = w_chk_nyukingaku - w_uriage - w_syouhizei; if (w_chk_nyukingaku_sa == 0) { //入金完了 w_nyukin_kanryou_flg = "1"; } else { if (w_chk_nyukingaku_sa < 0) { //売上+消費税 > 入金額 w_nyukin_kanryou_flg = "0"; } else { //売上+消費税 < 入金額 //入金額を売上+消費税と同額にし、入金済みにして、残った入金額は取引先マスタへスプール w_nyukin_kanryou_flg = "1"; w_chk_nyukingaku = w_uriage + w_syouhizei; tss.OracleUpdate("update tss_torihikisaki_m set MISYORI_NYUKINGAKU = MISYORI_NYUKINGAKU + " + w_chk_nyukingaku.ToString() + " ,update_user_cd = '" + tss.user_cd + "',update_datetime = sysdate where torihikisaki_cd = '" + dr["torihikisaki_cd"].ToString() + "'"); } } tss.OracleUpdate("update tss_urikake_m set kurikosigaku = '" + w_kurikosi.ToString() + "',uriage_kingaku = '" + w_uriage.ToString() + "',syouhizeigaku = '" + w_syouhizei.ToString() + "',nyukingaku = '" + w_chk_nyukingaku.ToString() + "',nyukin_kanryou_flg = '" + w_nyukin_kanryou_flg + "',nyukingaku2 = '" + w_nyukin + "',urikake_zandaka = '" + w_zandaka.ToString() + "',update_user_cd = '" + tss.user_cd + "',update_datetime = sysdate where urikake_no = '" + w_urikake_no + "'"); } else { //新規 decimal w_no; w_no = tss.GetSeq("08"); w_urikake_no = w_no.ToString("0000000000"); tss.OracleInsert("insert into tss_urikake_m (torihikisaki_cd,uriage_simebi,kurikosigaku,uriage_kingaku,syouhizeigaku,nyukingaku,nyukin_kanryou_flg,nyukingaku2,urikake_zandaka,urikake_no,create_user_cd,create_datetime) values ('" + dr["torihikisaki_cd"].ToString() + "','" + tb_seikyu_simebi.Text + "','" + w_kurikosi.ToString() + "','" + w_uriage.ToString() + "','" + w_syouhizei.ToString() + "','0','0','" + w_nyukin.ToString() + "','" + w_zandaka.ToString() + "','" + w_urikake_no + "','" + tss.user_cd + "',sysdate)"); } //売上マスタの請求番号(urikake_no)を更新 tss.OracleUpdate("update tss_uriage_m set urikake_no = '" + w_urikake_no + "',update_user_cd = '" + tss.user_cd + "',update_datetime = sysdate where TO_CHAR(uriage_simebi,'YYYY/MM/DD') = '" + tb_seikyu_simebi.Text + "' and torihikisaki_cd = '" + dr["torihikisaki_cd"].ToString() + "'"); //最後に取引先マスタにスプールされた未処理入金額の消し込みを行う //入金処理の他に、なぜここでもやるのか? //この締め処理で、売上額の増減、新規レコードなどが作成される可能性があるので、全ての処理後に未処理入金額を処理する。 //そうしないと、未処理入金額を自動で処理するタイミングが他にない tss.urikake_kesikomi(dr["torihikisaki_cd"].ToString()); DialogResult result = MessageBox.Show("取引先:" + dr["torihikisaki_cd"].ToString() + " 請求番号:" + w_urikake_no.ToString() + " の請求書を発行しますか?", "確認", MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { //請求書印刷 frm_seikyu_preview frm_skm = new frm_seikyu_preview(); frm_skm.in_urikake_no = w_urikake_no.ToString(); //frm_skm.in_torihikisaki_cd1 = tb_torihikisaki_cd1.Text; //frm_skm.in_torihikisaki_cd2 = tb_torihikisaki_cd2.Text; //frm_skm.in_simebi = tb_seikyu_simebi.Text; frm_skm.ShowDialog(this); frm_skm.Dispose(); } } MessageBox.Show("請求締め処理が完了しました。"); gamen_clear(); }
private void btn_touroku_Click(object sender, EventArgs e) { DataTable dt_work = new DataTable(); //登録前に全ての項目をチェック //取引先コード if (chk_torihikisaki_cd() == false) { MessageBox.Show("取引先コードは6桁の数字で入力してください(空白不可)"); tb_torihikisaki_cd.Focus(); return; } //入金日 if (tb_nyukin_date == null || tb_nyukin_date.Text.ToString() == "") { MessageBox.Show("入金日を入力してください(空白不可)"); tb_nyukin_date.Focus(); return; } //データグリッドビューの中を1行ずつループしてチェック int dgvrc = dgv_m.Rows.Count; if (dgvrc == 1) { MessageBox.Show("表の中に何も入力されていません"); return; } tss.GetUser(); //ユーザー情報の取得 //データグリッドビューの入力内容チェック for (int i = 0; i < dgvrc - 1; i++) { if (dgv_m.Rows[i].Cells[0].Value.ToString() == null || dgv_m.Rows[i].Cells[0].Value.ToString() == "") { MessageBox.Show("入金区分に未入力があります"); dgv_m.Focus(); dgv_m.CurrentCell = dgv_m[0, i]; return; } if (dgv_m.Rows[i].Cells[2].Value.ToString() == null || dgv_m.Rows[i].Cells[2].Value.ToString() == "") { MessageBox.Show("入金額に未入力があります"); return; } //備考が空白の場合、""を代入 空欄だとnull扱いされ、SQLエラー回避 if (dgv_m.Rows[i].Cells[3].Value == null) { dgv_m.Rows[i].Cells[3].Value = ""; } } //入金番号の重複チェック dt_work = tss.OracleSelect("select * from tss_nyukin_m where nyukin_no = '" + tb_nyukin_no.Text.ToString() + "'"); //重複がない(新規)の場合 if (dt_work.Rows.Count == 0) { //レコードの行数分ループしてインサート int dgvrc2 = dgv_m.Rows.Count; for (int i = 0; i < dgvrc2 - 1; i++) { bool bl6 = tss.OracleInsert("INSERT INTO tss_nyukin_m (nyukin_no,seq,torihikisaki_cd,nyukin_kbn,nyukin_date,nyukingaku,bikou,create_user_cd,create_datetime) VALUES ('" + tb_nyukin_no.Text.ToString() + "','" + (i + 1) + "','" + tb_torihikisaki_cd.Text.ToString() + "','" + dgv_m.Rows[i].Cells[0].Value.ToString() + "','" + tb_nyukin_date.Text.ToString() + "','" + decimal.Parse(dgv_m.Rows[i].Cells[2].Value.ToString()) + "','" + dgv_m.Rows[i].Cells[3].Value.ToString() + "','" + tss.user_cd + "',SYSDATE)"); if (bl6 != true) { tss.ErrorLogWrite(tss.user_cd, "入金/登録", "登録ボタン押下時のOracleInsert"); MessageBox.Show("入金処理でエラーが発生しました。" + Environment.NewLine + "処理を中止します。"); this.Close(); } } tb_create_user_cd.Text = tss.user_cd; tb_create_datetime.Text = DateTime.Now.ToString(); MessageBox.Show("入金処理が完了しました"); //取引先マスタの未処理入金額の更新 decimal misyori_nyukingaku; DataTable dt_work_2 = tss.OracleSelect("select misyori_nyukingaku from tss_torihikisaki_m where torihikisaki_cd = '" + tb_torihikisaki_cd.Text + "'");//取引先マスタの未処理金額 if (dt_work_2.Rows[0][0] == null || dt_work_2.Rows[0][0].ToString() == "") { misyori_nyukingaku = 0; } else { misyori_nyukingaku = decimal.Parse(dt_work_2.Rows[0][0].ToString()) + decimal.Parse(tb_nyukin_goukei.Text.ToString()); } tss.OracleUpdate("UPDATE TSS_torihikisaki_m SET misyori_nyukingaku = '" + misyori_nyukingaku + "',UPDATE_USER_CD = '" + tss.user_cd + "',UPDATE_DATETIME = SYSDATE WHERE torihikisaki_cd = '" + tb_torihikisaki_cd.Text.ToString() + "'"); //tssシステムライブラリの売掛消込処理実行 tss.urikake_kesikomi(tb_torihikisaki_cd.Text.ToString()); } //重複がある(入金の修正処理) if (dt_work.Rows.Count != 0) { decimal nyukin_goukei_w2 = decimal.Parse(tb_nyukin_goukei.Text.ToString()); //入金合計額が変わった場合、取引先マスタの未処理入金額更新メソッドを動かす。 if (nyukin_goukei_w2 != nyukin_goukei_w) { decimal sagaku = nyukin_goukei_w2 - nyukin_goukei_w; decimal misyori_nyukingaku; DataTable dt_work_3 = tss.OracleSelect("select misyori_nyukingaku from tss_torihikisaki_m where torihikisaki_cd = '" + tb_torihikisaki_cd.Text + "'");//取引先マスタの未処理金額 if (dt_work_3.Rows[0][0] == null || dt_work_3.Rows[0][0].ToString() == "") { misyori_nyukingaku = 0; } else { misyori_nyukingaku = decimal.Parse(dt_work_3.Rows[0][0].ToString()) + sagaku; } tss.OracleUpdate("UPDATE TSS_torihikisaki_m SET misyori_nyukingaku = '" + misyori_nyukingaku + "',UPDATE_USER_CD = '" + tss.user_cd + "',UPDATE_DATETIME = SYSDATE WHERE torihikisaki_cd = '" + tb_torihikisaki_cd.Text.ToString() + "'"); tss.urikake_kesikomi(tb_torihikisaki_cd.Text.ToString()); } //入金合計額が変わらなかったら else { } tss.OracleDelete("delete from tss_nyukin_m WHERE nyukin_no = '" + tb_nyukin_no.Text.ToString() + "'"); int rc2 = dgv_m.Rows.Count; for (int i = 0; i < rc2 - 1; i++) { bool bl = tss.OracleInsert("insert into tss_nyukin_m (nyukin_no, seq,torihikisaki_cd,nyukin_kbn,nyukin_date,nyukingaku,bikou,create_user_cd,create_datetime,update_user_cd,update_datetime) values ('" + tb_nyukin_no.Text.ToString() + "','" + (i + 1) + "','" + tb_torihikisaki_cd.Text.ToString() + "','" + dgv_m.Rows[i].Cells[0].Value.ToString() + "'," + "to_date('" + tb_nyukin_date.Text.ToString() + "','YYYY/MM/DD HH24:MI:SS'),'" + dgv_m.Rows[i].Cells[2].Value.ToString() + "','" + dgv_m.Rows[i].Cells[3].Value.ToString() + "','" + tb_create_user_cd.Text.ToString() + "',"//←カンマがあると、日付をインサートする際にエラーになるので注意する + "to_date('" + tb_create_datetime.Text.ToString() + "','YYYY/MM/DD HH24:MI:SS'),'" + tss.user_cd + "',SYSDATE)"); if (bl != true) { tss.ErrorLogWrite(tss.user_cd, "入金登録", "登録ボタン押下時のOracleInsert"); MessageBox.Show("入金更新処理でエラーが発生しました。" + Environment.NewLine + "処理を中止します。"); this.Close(); } else { } } MessageBox.Show("入金更新処理完了"); //form_disp(); } form_disp(); }