G3025_社内で使う伝票処理①

2025325

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);

}

 

 

 

追記 カラム定義で例外エラーが発生しました