G3025_社内で使う伝票処理①
2025年3月25日
16:48
G3025_pc_my_company_slip_report_1
Version:0.9 StartHTML:00000000 EndHTML:00000000 StartFragment:00000000 EndFragment:00000000 G3025_プロジェクト
公開データの問題が発覚しました
解説
残されている課題
使いにくい comboBox1 を削除して、リストボックスに変更します
Def_mode
Proj_title
Main_title
Sub_title
定義モードの変更
伝票処理のためのフォルダ管理やファイルパスの生成
下位フォルダ
連結子と年月日
日付指示は、カレンダーコントロールを使います
納品・請求の伝票連番の連絡方法
伝票処理の課題
デバックのためのフォームを追加します
「連番」の処理を追加します
表示のタイミングは悪いのですが、ここまでとします
前回の投稿から、11日経過しています、連番と和暦の作り直しをします
// 共通 グリッドセルクリック
private void Com_grid_cell_click(object sender, DataGridViewCellEventArgs e, int prm_grno)
{
int x, y;
string clip_dat;
int column_max;
string hiera_name = Prm_dat_get(Grid_para_name_get(prm_grno, "form", "階層名"));
string column_fil_path = Prm_dat_get("フォームフォルダ") + @"\" + hiera_name + ".columntxt";
string[] fld_tbl = new string[100];
int serial_no;
string cell_dat = "";
string pre_dat;
int pre_no;
int wareki_no;
int yy_all, mm, dd;
if (prm_grno < 0 || 2 < prm_grno) return;
y = e.RowIndex; // グリッド行取得
x = e.ColumnIndex; // グリッド列取得
// パラメータに現在行を保存します
Prm_dat_upd("グリッド" + prm_grno.ToString() + "_現在行", y.ToString());
// IME制御
switch (prm_grno)
{
case 0: Com_grid_column_ime(prm_grno, x); break;
case 1: Com_grid_column_ime(prm_grno, x); break;
case 2: Com_grid_column_ime(prm_grno, x); break;
}
// 新しい行を追加すると例外エラーが出たので最大判定します
if (y+1 < dataGridView1.Rows.Count)
{
if (Proj_title == "クリップ" && Def_mode == "メインタイトルデータ(入力)")
{
switch (Main_title)
{
case "クリップ①":
case "クリップ②":
case "クリップ③":
// クリップボードの専用処理
clip_dat = (string)dataGridView1.Rows[y].Cells[x].Value;
if (clip_dat == "") break;
Clipboard.SetText(clip_dat); // クリップボードに文字列を代入
// ワードなどにアクセスするため画面を最小にする
this.WindowState = FormWindowState.Minimized;
break;
}
}
}
// カラム名を判定します
wareki_no = -1;
yy_all = mm = dd = 0;
column_max = Com_txt_tbl_red(column_fil_path, 0, fld_tbl, "");
for(int i=0;i<column_max;i++)
{
cell_dat = ""; // カラム毎のデータ取得
switch (prm_grno)
{
case 0: cell_dat = (string)dataGridView1.Rows[y].Cells[i].Value; break;
case 1: cell_dat = (string)dataGridView2.Rows[y].Cells[i].Value; break;
case 2: cell_dat = (string)dataGridView3.Rows[y].Cells[i].Value; break;
}
switch (fld_tbl[i].Trim())
{
case "連番":
case "番号":
if (cell_dat != "") break; // 代入済みなので処理しません
pre_dat = "1";
if(0 < y)
{
switch (prm_grno)
{
case 0: pre_dat = (string)dataGridView1.Rows[y - 1].Cells[i].Value; break;
case 1: pre_dat = (string)dataGridView2.Rows[y - 1].Cells[i].Value; break;
case 2: pre_dat = (string)dataGridView3.Rows[y - 1].Cells[i].Value; break;
}
if (int.TryParse(pre_dat, out pre_no) == false) pre_no = 0;
++pre_no;
pre_dat = pre_no.ToString();
}
switch (prm_grno)
{
case 0: dataGridView1.Rows[y].Cells[i].Value = pre_dat; break;
case 1: dataGridView2.Rows[y].Cells[i].Value = pre_dat; break;
case 2: dataGridView3.Rows[y].Cells[i].Value = pre_dat; break;
}
Grid_data_upd_cnt_add(prm_grno); // 更新件数加算
break;
case "年":
case "西暦": if (int.TryParse(cell_dat, out yy_all) == false) yy_all = 0; break;
case "月": if (int.TryParse(cell_dat, out mm) == false) mm = 0; break;
case "日": if (int.TryParse(cell_dat, out dd) == false) dd = 0; break;
case "和暦": wareki_no = i; break;
}
}
// 和暦判定
if(0 <= wareki_no)
{
if(1980 <= yy_all && yy_all < 2099)
if(1 <= mm && mm <= 12)
if(1 <= dd && dd <= 31)
{
cell_dat = Com_wareki_get(yy_all, mm, dd);
switch (prm_grno)
{
case 0: dataGridView1.Rows[y].Cells[wareki_no].Value = cell_dat; break;
case 1: dataGridView2.Rows[y].Cells[wareki_no].Value = cell_dat; break;
case 2: dataGridView3.Rows[y].Cells[wareki_no].Value = cell_dat; break;
}
Grid_data_upd_cnt_add(prm_grno); // 更新件数加算
}
}
// カラムに「連番」「番号」があれば、パラメータにその数値を登録します
// 表題は必ず、グリッド0 に配置されるものとします
if (prm_grno == 0 && System.IO.File.Exists(column_fil_path) == true)
{
serial_no = -1;
for(int i=0;i<column_max;i++)
{
if (dataGridView1.ColumnCount < i) break;
if (fld_tbl[i].Trim() == "連番") { serial_no = i; break; }
if (fld_tbl[i].Trim() == "番号") { serial_no = i; break; }
}
if(0 <= serial_no)
{
if (serial_no < dataGridView1.ColumnCount)
{
cell_dat = (string)dataGridView1.Rows[y].Cells[serial_no].Value;
// 現在行の連番をパラメータに登録します
Prm_dat_upd("グリッド" + prm_grno.ToString() + "_" + "現在連番", cell_dat);
//msg2("現在連番=" + cell_dat, "", "");
}
}
}
}
和暦変換関数
// 和暦変換
private string Com_wareki_get(int prm_yy_all, int prm_mm, int prm_dd)
{
string fil_path = Prm_dat_get("システムフォルダ") + @"\000_和暦変換.txt";
string[] wa_name = new string[50 + 1];
string[] yy_lst = new string[50 + 1];
string[] mm_lst = new string[50 + 1];
string[] dd_lst = new string[50 + 1];
//int lst_max = 50;
int lst_kosu, y;
int gen_day, chk_day; // 日連番
string wareki = "不明 0";
int yy_all, mm, dd;
if (System.IO.File.Exists(fil_path) == false)
{
msg2("Com_wareki_get()", fil_path, "ファイルがありません");
return wareki;
}
lst_kosu = Com_txt_tbl_red(fil_path, 0, wa_name,"");
lst_kosu = Com_txt_tbl_red(fil_path, 1, yy_lst, "");
lst_kosu = Com_txt_tbl_red(fil_path, 2, mm_lst, "");
lst_kosu = Com_txt_tbl_red(fil_path, 3, dd_lst, "");
gen_day = (365 * prm_yy_all) + (31 * prm_mm) + prm_dd;
for (y = lst_kosu - 1; 0 <= y; y--)
{
yy_all = int.Parse(yy_lst[y]);
mm = int.Parse(mm_lst[y]);
dd = int.Parse(dd_lst[y]);
chk_day = (365 * yy_all) + (31 * mm) + dd;
if (chk_day <= gen_day)
{
wareki = wa_name[y] + " " + (prm_yy_all - yy_all + 1).ToString();
break;
}
}
return (wareki);
}
追記 カラム定義で例外エラーが発生しました