Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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();
        }