#packopt name "optoregi" #packopt version &qu […]
#packopt name "optoregi" #packopt version &qu […]
#packopt name "optoregi" #packopt version "versiondate.txt" #packopt lang "1041" #packopt icon "icon.ico" #packopt hide 1 #define version "1.3" ; バージョン定数 // タイトル定数(コンパイル制御) #ifdef _debug #define titl "OptOレジ! v" + version + " (デバッグモード)" #else #define titl "OptOレジ! v" + version #endif #include "wgini.as" #include "kernel32.as" #include "user32.as" #include "gdi32.as" #include "shell32.as" #uselib "imm32.dll" #func ImmAssociateContext "ImmAssociateContext" int, int #module #deffunc clr int mode, int x1, int y1, int x2, int y2 ; 画面クリア(0 = オブジェクトも, 1 = オブジェクト以外, 2 = 1を部分的に) if mode = 0 : cls color 128, 255, 255 ; 薄水色 if mode = 2 : boxf x1, y1, x2, y2 : else : boxf color 0, 0, 0 return mode #deffunc HideSubWindow int wID ; サブウィンドウ非表示 gsel wID, -1 EnableWindow hWnd_main@, 1 gsel 0, 1 return wID // CSV系関数 #deffunc SplitCSV int index, int column ; CSVデータの指定行をカラムごとに分割 if index < 0 or column < 0 : return -1 ; インデックスかカラムが負であれば-1 ; 変数初期化 if flag = 0 { sdim temp sdim spl, , 5 } flag = 1 noteget temp, index ; 指定行取得 split temp, ",", spl ; カラムごとに分割 return stat #defcfunc GetCSV int index, int column ; CSVデータの指定行指定カラムを返す SplitCSV index, column ; 指定行分割 if stat - 1 < column : return "" ; 指定カラムが無ければ-1 return spl(column) ; 指定カラムを返す #deffunc WriteCSV int index, int column, str word ; CSVデータの指定行指定カラムを書き換える SplitCSV index, column ; 指定行分割 if stat - 1 < column : return -1 ; 指定カラムが無ければ-1 ; 上書き用文字列作成 spl(column) = word temp = spl(0) repeat stat - 1, 1 temp += "," + spl(cnt) loop noteadd temp, index, 1 ; 指定行に上書き return #deffunc SearchCSV int index, int column, str word ; CSVデータを検索 ; 変数初期化 result = -1 if index < 0 or column < 0 or word = "" : return result ; インデックスかカラムが負、wordがnullなら-1を返す ; データ検索 repeat notemax - index, index if GetCSV(cnt, column) = word { ; 内容が一致するか result = cnt break } loop return result ; 何も見つからなかった場合-1を返す #deffunc deletef str _dir ; ディレクトリ削除 sdim pFrom, 260 pFrom = _dir dim SHFILEOPSTRUCT, 8 SHFILEOPSTRUCT.0 = hWnd SHFILEOPSTRUCT.1 = $3 ; FO_DELETE SHFILEOPSTRUCT.2 = varptr( pFrom ) SHFILEOPSTRUCT.3 = 0 SHFILEOPSTRUCT.4 = $4 | $10 | $100 | $400 ; FOF_SILENT | FOF_NOCONFIRMATION | FOF_SIMPLEPROGRESS | FOF_NOERRORUI SHFileOperation varptr( SHFILEOPSTRUCT ) return stat #global // レイアウト算出用マクロ #define lay_sx (lay_ex - lay_x - lay_ox * 2 - lay_ix * (lay_nx - 1)) / lay_nx ; オブジェクトサイズ算出 #define lay_sy (lay_ey - lay_y - lay_oy * 2 - lay_iy * (lay_ny - 1)) / lay_ny #define ctype lay_px(%1) lay_x + lay_ox + (lay_sx + lay_ix) * %1 ; 描画位置算出 #define ctype lay_py(%1) lay_y + lay_oy + (lay_sy + lay_iy) * %1 ///////////////// 二重起動防止 ///////////////// CreateMutex 0, 0, "OptO_register_!_Mutex" ; ミューテックス生成 GetLastError if stat = $B7 { ; ERROR_ALREADY_EXISTS dialog "OptOレジ!は既に起動しています。", 1, titl end } ////////////////// 事前処理 //////////////////// *s_start ; 開発時便宜ラベル // メインウィンドウ(コンパイル制御) #ifdef _debug ; デバッグ時 screen 0, , : title titl #else ; 通常時 bgscr 0, ginfo_dispx, ginfo_dispy, 0, 0, 0 : title titl #endif hWnd_main = hWnd title titl // 一時変数初期化 dim temp_i, ; 整数型一時変数 sdim temp_s, 260 ; 文字列型一時変数 // ディレクト・ファイルチェック・新規作成(最低限) exist "settings.ini" ; 設定ファイル if strsize = -1 { temp_s = "[system]\npass=0000\nopened=0\nlast=\npdcount=0\n" notesel temp_s notesave "settings.ini" noteunsel } ; 設定ファイル読み込み setini "settings.ini" ; 設定ファイルを指定 sdim s_password ; パスワード getini "system", "pass", s_password dim s_opened ; 開店フラグ getini "system", "opened", s_opened sdim s_last ; 前回の開店日 getini "system", "last", s_last exist "pd.csv" ; 商品データファイル temp_i = strsize exist "rpd.csv" ; 削除済み商品データファイル if strsize = -1 or temp_i = -1 { ; 一方でも欠けていれば再生成 p_buf = "商品ID,商品名,単価\n" notesel p_buf notesave "pd.csv" notesave "rpd.csv" noteunsel s_pdcount = 0 writeini "system", "pdcount", s_pdcount ; 商品IDカウンターリセット } gosub *load_pd ; 商品データ読み込み(p_numが確定) sdim d_buf_total, 4096 ; 累計販売実績用バッファ exist "total.csv" ; 累計販売実績データファイル if strsize = -1 { ; フォーマット作成 d_buf_total = "営業日数,0\n\n会計回数,0\n売上金額,0\n\n返金回数,0\n返金額,0\n\n現金誤差,0\n\n商品ID,売上数,返品数\n" repeat p_num d_buf_total += p_id(cnt) + ",0,0\n" loop ; 保存 notesel d_buf_total notesave "total.csv" noteunsel } else { ; 累計販売実績データ読み込み notesel d_buf_total noteload "total.csv" noteunsel } dirlist temp_s, "daily", 5 ; 販売実績ディレクトリ if stat = 0 : mkdir "daily" dirlist temp_s, "history", 5 ; 販売履歴ディレクトリ if stat = 0 : mkdir "history" dirlist temp_s, "refund", 5 ; 返金履歴ディレクトリ if stat = 0 : mkdir "refund" dirlist temp_s, "hourly", 5 ; 毎時売上ディレクトリ if stat = 0 : mkdir "hourly" // 変数初期化 ; システム用変数 dim tkey_arg, 11, 2 ; テンキーの配置配列 tkey_arg(0, 0) = 0, 0, 1, 2, 0, 1, 2, 0, 1, 2, 1 tkey_arg(0, 1) = 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 3 dim tkey_clr_ID ; テンキークリアキーのオブジェクトID dim LVCOLUMS, 6 ; LVCOLUMN構造体 dim SHFILEOPSTRUCT, 8 ; SHFILEOPSTRUCT構造体 sdim input_pw ; パスワード入力ボックス用 dim main_x : dim main_y ; メインウィンドウの座標 dim main_w : dim main_h ; メインウィンドウの幅高 ; システム用変数 dim s_pdcount ; 商品IDのカウンター s_week = "日", "月", "火", "水", "木", "金", "土" s_today = strf("%04d/%02d/%02d", gettime(0), gettime(1), gettime(3)) ; レイアウト用変数 unit_x = ginfo_winx / 128 ; サイズ、座標の単位ピクセル unit_y = ginfo_winy / 96 ; 480p -> 5:5, 1080p -> 15:11 dim lay_x : dim lay_y ; 原点 dim lay_ex : dim lay_ey ; 範囲 dim lay_ox : dim lay_oy ; 外側幅 dim lay_ix : dim lay_iy ; 内側幅 dim lay_nx : dim lay_ny ; 配置数 dim lay_mpx : dim lay_mpy ; 文字列描画位置 dim lay_msx : dim lay_msy ; 文字列描画サイズ ; 時計表示用変数 dim t_sx ; 時計描画Xサイズ dim t_sy ; 時計描画Yサイズ ; 開閉店処理用変数 o_amount = 10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1 dim o_num, 10 ; 釣銭枚数(1万円から始まる配列) dim o_sum ; 釣銭金額合計 dim o_error ; 現金誤差 dim o_focus ; フォーカスされている入力ボックス dim o_input ; 入力切替用フラグ ; 会計用変数 dim c_num, p_num ; 各商品個数 dim c_anum ; 全商品個数 dim c_total ; 合計価格 dim c_depoint ; 預り金 dim c_change ; 会計完了フラグ ; 商品データ用変数(一部) dim p_index ; 商品データ指定用インデックス ; 販売履歴用変数 sdim h_buf, 1024 ; 販売履歴ファイル用バッファ ; 販売実績用変数 sdim d_buf, 4096 ; 販売実績ファイル用バッファ(noteselのデフォルトのバッファ) sdim d_buf_date, 4096 ; 日付別販売実績用バッファ sdim d_list, 512 ; 販売実績データ列挙用 dim d_total ; 理論存高用 dim d_sel ; 販売データ指定インデックス dim d_path ; 販売データ指定パス ; 返金用変数 sdim r_list, 512 ; 販売履歴列挙用 sdim r_path, 260 ; 販売履歴ファイルパス用 dim r_total ; 販売履歴売上金額用 dim r_pnum ; 販売履歴商品数用 sdim r_ID, , p_num ; 販売履歴商品ID用 dim r_num, p_num ; 販売履歴売上数用 ; 毎時売上用変数 sdim u_buf, 256 ; 毎時売上用バッファ sdim u_buf_date, 256 ; 毎時売上参照用バッファ ; 商品登録用変数 sdim a_name ; 登録商品名 dim a_value ; 登録商品単価 ; 設定用変数 sdim e_newpass ; 新パスワード用 // フォントハンドル生成 ; 汎用(hFont.0) font msgothic, unit_y * 6 mref bmscr, 67 CreateFontIndirect varptr(bmscr.49) hFont.0 = stat ; リストビュー用(hFont.1) font msgothic, unit_y * 4, 1 mref bmscr, 67 CreateFontIndirect varptr(bmscr.49) hFont.1 = stat // サブウィンドウ作成 ; パスワード入力ウィンドウ(sub_1) screen 1, unit_x * 50, unit_y * 20, 6 hWnd_sub1 = hWnd title "パスワード入力" GetWindowLong hWnd_sub1, -16 ; GWL_STYLE SetWindowLong hWnd_sub1, -16, stat & ($10000 | $20000 | $40000) ^ stat ; GWL_STYLE SetWindowLong hWnd_sub1, -8, hWnd_main ; GWL_HWNDPARENT SetWindowPos hWnd_sub1, 0, 0, 0, 0, 0, $1 | $2 | $4 | $20 ; SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED clr 1 font msgothic, unit_y * 6 ; フォント選択 objmode 2 pos unit_x * 2, unit_y * 2 input input_pw, ginfo_winx - unit_x * 4, ginfo_winy / 2 - unit_y * 2, 4 hInput = objinfo_hwnd(stat) sendmsg hInput, $CC, '*' ; EM_SETPASSWORDCHAR SetWindowLong hInput, -16, $50010080 | $2000 ; 数字のみ ImmAssociateContext hInput, 0 ; IME無効 objsize ginfo_winx / 2 - unit_x * 2, ginfo_winy / 2 - unit_y * 2 button gosub "OK", *sub_1_OK pos ginfo_cx + ginfo_winx / 2 - unit_x * 2, ginfo_cy - (ginfo_winy / 2 - unit_y * 2) button gosub "キャンセル", *sub_1_cancel gsel 0 // 割り込み処理 onexit gosub *exit onerror gosub *exerror // その他の事前処理 ; 時計表示サイズ取得 SelectObject hdc, hFont.0 mes s_today + strf("[%s] %02d:%02d:%02d", s_week(gettime(2)), gettime(4), gettime(5), gettime(6)) t_sx = ginfo_mesx : t_sy = ginfo_mesy gosub *mode_0_i ///////////////// メインループ ///////////////// repeat if ginfo_act = 0 { ; 時計表示 redraw 0 clr 2, 0, 0, t_sx, t_sy pos 0, 0 SelectObject hdc, hFont.0 mes s_today + strf("[%s] %02d:%02d:%02d", s_week(gettime(2)), gettime(4), gettime(5), gettime(6)) redraw } wait 100 loop stop //////// 画面切替ルーチン(メイン直下以外) ////// *mode_open ; 開店処理 clr 0 ; 画面クリア(オブジェクト含む) ; 販売実績データファイル exist "daily\\" + f_date + ".csv" if strsize = -1 { ; 文字描画 SelectObject hdc, hFont.0 color 255 ; 赤 pos unit_x * 6, unit_y * 6 mes "開店処理" color , , 255 ; 青 mes"釣銭準備金額入力" color ; 黒 pos ginfo_cx + unit_y * 6, ginfo_cy + unit_y * 3 lay_x = ginfo_cx : lay_y = ginfo_cy mes "5000円× 枚\n2000円× 枚\n1000円× 枚\n 500円× 枚\n 100円× 枚\n 50円× 枚\n 10円× 枚\n 5円× 枚\n 1円× 枚" pos ginfo_cx - unit_y * 6, ginfo_cy + unit_y * 3 lay_mpx = ginfo_cx : lay_mpy = ginfo_cy mes "合計 円" ; 各種入力ボックス配置 font msgothic, unit_y * 5 objmode 2 pos lay_x + unit_y * 25, lay_y + 1 repeat length(o_num) - 1 ; 1万円分減 input o_num(cnt + 1), unit_y * 20, unit_y * 6 ; 各紙貨幣枚数用入力ボックス hInput.cnt = objinfo_hwnd(stat) SetWindowLong hInput.cnt, -16, $50010080 | $2002 ; 数字入力限定右揃え ImmAssociateContext hInput.cnt, 0 ; IME無効 loop pos lay_mpx + unit_y * 13, lay_mpy + 1 input o_sum, unit_y * 38, unit_y * 6 ; 釣銭合計用入力ボックス nInput = stat objskip nInput, 7 ; フォーカス移動スキップ hInput.nInput = objinfo_hwnd(nInput) SetWindowLong hInput.nInput, -16, $50010080 | $2002 ; 数字入力限定右揃え ImmAssociateContext hInput.nInput, 0 ; IME無効 sendmsg hInput.nInput, $CF, 1 ; 入力無効 // 切替ボタン ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 3 objsize lay_sx, lay_sy ; オブジェクトフォントサイズ font msgothic, unit_y * 9, 5 objmode 2 pos lay_px(0), lay_py(1) button gosub "開店", *o_open objskip stat, 3 ; オブジェクトフォントサイズ font msgothic, unit_y * 7 objmode 2 pos lay_px(0), lay_py(0) button gosub "戻る", *mode_4 objskip stat, 3 pos lay_px(0), lay_py(2) button gosub "入力切替", *o_change objskip stat, 3 // テンキー設置 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = ginfo_cy - unit_y * 5 lay_ex = ginfo_winx : lay_ey = ginfo_winy lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = 0 : lay_iy = 0 lay_nx = 3 : lay_ny = 4 ; オブジェクトフォントサイズ font msgothic, unit_y * 8, 1 objmode 2 ; クリアボタン objsize lay_sx * 2 + lay_ix, lay_sy pos lay_px(tkey_arg(10, 0)), lay_py(tkey_arg(10, 1)) button gosub "クリア", *o_tenkey tkey_clr_ID = stat objskip tkey_clr_ID, 3 ; 数字ボタン objsize lay_sx, lay_sy repeat length(tkey_arg) - 1 pos lay_px(tkey_arg(cnt, 0)), lay_py(tkey_arg(cnt, 1)) button gosub str(cnt), *o_tenkey objskip stat, 3 loop oncmd gosub *o_command, $111 ; 入力割り込み処理 } else { dialog "本日の閉店処理は完了しています。\n再び開店しますか。", 2, titl if stat = 6 { ; はい ; 開店フラグ書き込み s_opened = 1 writeini "system", "opened", s_opened notesel d_buf ; 販売実績データを対象バッファに指定(デフォルト) noteload "daily\\" + f_date + ".csv" ; 販売実績データ読み込み noteunsel gosub *mode_4 } else { ; いいえ gosub *mode_4 } } return *mode_close ; 閉店処理画面 ; 各変数再初期化 dim o_num, 10 ; 釣銭枚数(1万円から始まる配列) dim o_sum ; 釣銭金額合計 dim o_focus ; フォーカスされている入力ボックス dim o_input ; 入力切替用フラグ *mode_close_back ; 戻り処理 clr 0 ; 画面クリア(オブジェクト含む) ; 文字描画 SelectObject hdc, hFont.0 color 255 ; 赤 pos unit_x * 6, unit_y * 6 mes "閉店処理" color , , 255 ; 青 mes "現金誤差確認" color ; 黒 pos ginfo_cx + unit_y * 6, ginfo_cy + unit_y * 3 lay_x = ginfo_cx : lay_y = ginfo_cy mes "10000円× 枚\n 5000円× 枚\n 2000円× 枚\n 1000円× 枚\n 500円× 枚\n 100円× 枚\n 50円× 枚\n 10円× 枚\n 5円× 枚\n 1円× 枚" pos ginfo_cx - unit_y * 6, ginfo_cy + unit_y * 3 lay_mpx = ginfo_cx : lay_mpy = ginfo_cy mes "合計 円" ; 各種入力ボックス配置 font msgothic, unit_y * 5 objmode 2 pos lay_x + unit_y * 28, lay_y + 1 repeat length(o_num) input o_num(cnt), unit_y * 20, unit_y * 6 ; 各紙貨幣枚数用入力ボックス hInput.cnt = objinfo_hwnd(stat) SetWindowLong hInput.cnt, -16, $50010080 | $2002 ; 数字入力限定右揃え ImmAssociateContext hInput.cnt, 0 ; IME無効 loop pos lay_mpx + unit_y * 13, lay_mpy + 1 input o_sum, unit_y * 41, unit_y * 6 ; 釣銭合計用入力ボックス nInput = stat objskip nInput, 7 ; フォーカス移動スキップ hInput.nInput = objinfo_hwnd(nInput) SetWindowLong hInput.nInput, -16, $50010080 | $2002 ; 数字入力限定右揃え ImmAssociateContext hInput.nInput, 0 ; IME無効 sendmsg hInput.nInput, $CF, 1 ; 入力無効 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 3 objsize lay_sx, lay_sy ; オブジェクトフォントサイズ font msgothic, unit_y * 7, 5 objmode 2 pos lay_px(0), lay_py(1) button gosub "誤差確認", *mode_close2 objskip stat, 3 ; オブジェクトフォントサイズ font msgothic, unit_y * 7 objmode 2 pos lay_px(0), lay_py(0) button gosub "戻る", *mode_4 objenable stat, 1 + (s_last ! s_today) objskip stat, 3 pos lay_px(0), lay_py(2) button gosub "入力切替", *o_change objskip stat, 3 // テンキー設置 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = ginfo_cy - unit_y * 5 lay_ex = ginfo_winx : lay_ey = ginfo_winy lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = 0 : lay_iy = 0 lay_nx = 3 : lay_ny = 4 ; オブジェクトフォントサイズ font msgothic, unit_y * 8, 1 objmode 2 ; クリアボタン objsize lay_sx * 2 + lay_ix, lay_sy pos lay_px(tkey_arg(10, 0)), lay_py(tkey_arg(10, 1)) button gosub "クリア", *o_tenkey tkey_clr_ID = stat objskip tkey_clr_ID, 3 ; 数字ボタン objsize lay_sx, lay_sy repeat length(tkey_arg) - 1 pos lay_px(tkey_arg(cnt, 0)), lay_py(tkey_arg(cnt, 1)) button gosub str(cnt), *o_tenkey objskip stat, 3 loop oncmd gosub *o_command, $111 ; 入力割り込み処理 return *mode_close2 oncmd gosub *dummy, $111 ; 入力割り込み無効 clr 0 ; 画面クリア(オブジェクト含む) ; 理論存高取得 notesel d_buf d_total = int(GetCSV(9, 1)) noteunsel ; 文字描画 SelectObject hdc, hFont.0 color 255 ; 赤 pos unit_x * 6, unit_y * 6 mes "閉店処理" color , , 255 ; 青 mes "現金誤差確認" ; 合計表示下書き temp_i = ginfo_cx : lay_mpy = ginfo_cy + unit_y * 6 SelectObject hdc, hFont.0 ; フォントを選択 pos ginfo_winx, ginfo_winy mes strf(" 現金存高%8d円 ", 0) lay_msx = ginfo_mesx : lay_msy = ginfo_mesy lay_mpx = temp_i + unit_y * 75 - lay_msx ; 右揃えに ; 現金存高表示描画 color , , 255 ; 青 pos lay_mpx, lay_mpy mes strf(" 現金存高%10d円 ", o_sum) ; 理論存高表示下書き color 255 ; 赤 mes strf(" 理論存高%10d円 ", d_total) color 0, 0, 0 mes "────────────" ; 現金誤差表示 color , 128 ; 緑 mes strf(" 現金誤差%10d円 ", o_sum - d_total) ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 2 objsize lay_sx, lay_sy ; オブジェクトフォントサイズ font msgothic, unit_y * 9, 5 objmode 2 pos lay_px(0), lay_py(1) button gosub "閉店", *o_close objskip stat, 3 ; オブジェクトフォントサイズ font msgothic, unit_y * 9 objmode 2 pos lay_px(0), lay_py(0) button gosub "戻る", *mode_close_back return ///////// 画面切替ルーチン(メイン直下) ///////// *mode_0_i ; 起動時のジャンプ clr 0 ; 画面クリア(オブジェクト含む) f_date = strf("%04d-%02d-%02d", gettime(0), gettime(1), gettime(3)) ; 日付フォルダの名前(yyyy-mm-dd) ; 開店識別 if s_opened { ; 開店状態 if s_last ! s_today { ; 営業日が今日ではない if s_last = "" { ; 営業日が取得できない dialog "前回の営業日が取得できませんでした。\nこのエラーは自動で修復されます。", 1, titl exist "daily\\" + f_date + ".csv" if strsize = -1 { ; 閉店フラグ書き込み s_opened = 0 writeini "system", "opened", s_opened } else { ; 最終営業日書き込み writeini "system", "last", s_today } } else { ; 閉店忘れ dialog "前回(" + s_last + ")、閉店処理をせずに終了した可能性があります。\n前回の閉店処理を行いますか。", 3, titl if stat = 6 { ; はい f_date = s_last strrep f_date, "/", "-" ; 前回の販売データ読み込み exist "daily\\" + f_date + ".csv" if strsize = -1 { dialog "前回(" + s_last + ")の販売データが見つかりませんでした。", 1, titl } else { notesel d_buf noteload "daily\\" + f_date + ".csv" noteunsel gosub *mode_close ; 閉店処理実行 return } } else { ; 閉店フラグ書き込み s_opened = 0 writeini "system", "opened", s_opened } } } else { ; 営業日が今日 exist "daily\\" + f_date + ".csv" if strsize = -1 { ; 販売データがない dialog "本日分の販売データが見つかりません。\n再度開店処理を行って下さい。", 1, titl ; 閉店フラグ書き込み s_opened = 0 writeini "system", "opened", s_opened } else { ; 開店状態(エラーなし) notesel d_buf ; 販売実績データを対象バッファに指定(デフォルト) noteload "daily\\" + f_date + ".csv" ; 販売実績データ読み込み noteunsel notesel u_buf ; 毎時売上データ noteload "hourly\\" + f_date + ".csv" ; 販売実績データ読み込み noteunsel } } } else { ; 閉店状態 if s_last ! s_today { ; 営業日が今日ではない dialog "おはようございます。\n[管理] ⇒ [開店]から開店作業を行ってください。", 0, titl } ; 営業日が今日(閉店済み) } if p_num = 0 : dialog "商品が登録されていません。\n[管理] ⇒ [商品登録]から商品の登録を行ってください。", 1, titl *mode_0 ; メインメニュー clr 0 ; 画面クリア(オブジェクト含む) ; 画面レイアウト設定 lay_x = 0 : lay_y = 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy lay_ox = unit_x * 12 : lay_oy = unit_y * 12 lay_ix = unit_x * 4 : lay_iy = unit_y * 4 lay_nx = 3 : lay_ny = 1 objsize lay_sx, lay_sy ; オブジェクトフォントサイズ font msgothic, unit_y * 12, 5 objmode 2 pos lay_px(0), lay_py(0) button gosub "会計", *mode_1 objenable stat, p_num * s_opened ; オブジェクトフォントサイズ font msgothic, unit_y * 12 objmode 2 pos lay_px(1), lay_py(0) button gosub "販売\n実績", *mode_2 SetWindowLong objinfo_hwnd(stat), -16, $50000000 | $2000 ; 複数行表示 pos lay_px(2), lay_py(0) ; 返金ボタン描画位置 lay_ny = 2 ; 縦レイアウト変更 objsize lay_sx, lay_sy button gosub "返金", *mode_3 objenable stat, s_opened pos lay_px(2), lay_py(1) #ifdef _debug button gosub "管理", *mode_4 #else button gosub "管理", *sub_1 #endif objsel 0 onkey 0 return *mode_1 ; 受注画面 ; 受注用変数初期化 c_total = 0 : c_anum = 0 repeat p_num c_num(cnt) = 0 loop *mode_1_back clr 0 ; 画面クリア(オブジェクト含む) // 受注用リストビュー設置 pos unit_x * 6, unit_y * 6 winobj "SysListView32", "", $200, $50000001, unit_x * 75, ginfo_winy - unit_y * 18 hList = objinfo_hwnd(stat) sendmsg hList, $1036, , $1 | $20 ; 拡張スタイル(LVM_SETEXTENDEDLISTVIEWSTYLE) sendmsg hList, $30, hFont.1, 0 ; フォント変更(WM_SETFONT) syscolor 16 sendmsg hList, $1026, , (ginfo_r) + (ginfo_g << 8) + (ginfo_b << 16) sendmsg hList, $1001, , (ginfo_r) + (ginfo_g << 8) + (ginfo_b << 16) color 0, 0, 0 ImmAssociateContext hList, 0 ; IME無効 ; カラム追加 temp_s = "商品名" LVCOLUMS = $F, 0, unit_x * 46, varptr(temp_s), 0, 0 sendmsg hList, $101B, 0, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "単価" LVCOLUMS = $F, 1, unit_x * 13, varptr(temp_s), 0, 0 sendmsg hList, $101B, 1, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "個" LVCOLUMS = $F, 1, unit_x * 9, varptr(temp_s), 0, 0 sendmsg hList, $101B, 2, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN ; アイテム追加 repeat p_num ; 商品名 temp_s = p_name(cnt) LVCOLUMS = $1, cnt, 0, 0, 0, varptr(temp_s) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM ; 単価 temp_s = str(p_value(cnt)) LVCOLUMS = $1, cnt, 1, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM ; 個数 temp_s = str(c_num(cnt)) LVCOLUMS = $1, cnt, 2, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM loop ; 小計表示下書き lay_mpx = ginfo_cx : lay_mpy = ginfo_cy SelectObject hdc, hFont.0 pos ginfo_winx, ginfo_winy mes strf("小計%8d円", 0) lay_msx = ginfo_mesx : lay_msy = ginfo_mesy lay_mpx = lay_mpx + unit_x * 75 - lay_msx pos lay_mpx, lay_mpy mes strf("小計%8d円", c_total) // 会計&取り消しボタン ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 2 objsize lay_sx, lay_sy ; オブジェクトフォントサイズ font msgothic, unit_y * 10 objmode 2 pos lay_px(0), lay_py(0) button gosub "取消", *mode_1_cancel ; オブジェクトフォントサイズ font msgothic, unit_y * 10, 5 objmode 2 pos lay_px(0), lay_py(1) button gosub "会計", *mode_1_1 // テンキー設置 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = ginfo_cy - unit_y * 5 lay_ex = ginfo_winx : lay_ey = ginfo_winy lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = 0 : lay_iy = 0 lay_nx = 3 : lay_ny = 4 ; オブジェクトフォントサイズ font msgothic, unit_y * 8, 1 objmode 2 ; クリアボタン objsize lay_sx * 2 + lay_ix, lay_sy pos lay_px(tkey_arg(10, 0)), lay_py(tkey_arg(10, 1)) button gosub "クリア", *mode_1_tenkey tkey_clr_ID = stat ; 数字ボタン objsize lay_sx, lay_sy repeat length(tkey_arg) - 1 pos lay_px(tkey_arg(cnt, 0)), lay_py(tkey_arg(cnt, 1)) button gosub str(cnt), *mode_1_tenkey loop onkey gosub *mode_1_key_event ; mode_1でのキーイベントジャンプ先 return *mode_2 ; 販売実績表示画面 clr 0 ; 画面クリア(オブジェクト含む) ; 画面レイアウト設定 lay_x = 0 : lay_y = 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy lay_ox = unit_x * 12 : lay_oy = unit_y * 12 lay_ix = unit_x * 4 : lay_iy = unit_y * 4 lay_nx = 1 : lay_ny = 3 ; オブジェクトフォントサイズ font msgothic, unit_y * 12 objmode 2 objsize lay_sx, lay_sy pos lay_px(0), lay_py(0) button gosub "日付別販売実績", *mode_2_1 pos lay_px(0), lay_py(1) button gosub "累計販売実績", *mode_2_2 pos lay_px(0), lay_py(2) button gosub "戻る", *mode_0 return *mode_3 ; 返金選択画面 #ifndef _debug ; 通常時 dialog "返金は本日分の会計のみ行えます。", 0, titl #endif *mode_3_back clr 0 ; 画面クリア(オブジェクト含む) // 受注用リストビュー設置 pos unit_x * 6, unit_y * 6 winobj "SysListView32", "", $200, $50000001, unit_x * 75, ginfo_winy - unit_y * 18 hList = objinfo_hwnd(stat) sendmsg hList, $1036, , $1 | $20 ; 拡張スタイル(LVM_SETEXTENDEDLISTVIEWSTYLE) sendmsg hList, $30, hFont.1, 0 ; フォント変更(WM_SETFONT) syscolor 16 sendmsg hList, $1026, , (ginfo_r) + (ginfo_g << 8) + (ginfo_b << 16) sendmsg hList, $1001, , (ginfo_r) + (ginfo_g << 8) + (ginfo_b << 16) color 0, 0, 0 ImmAssociateContext hList, 0 ; IME無効 ; カラム追加 temp_s = "会計時間" LVCOLUMS = $F, 0, unit_x * 67, varptr(temp_s), 0, 0 sendmsg hList, $101B, 0, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN // 戻る&選択ボタン ; オブジェクトフォントサイズ font msgothic, unit_y * 9 objmode 2 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = unit_y * 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 2 objsize lay_sx, lay_sy pos lay_px(0), lay_py(0) button gosub "戻る", *mode_0 font msgothic, unit_y * 9, 5 objmode 2 pos lay_px(0), lay_py(1) button gosub "選択", *mode_3_1 dirlist r_list, "history\\" + f_date + "\\**-**-**.csv", 3 repeat stat temp_s = strmid(r_list, cnt * 14, 8) ; ファイル名取り出し(拡張子 + 改行コード抜き) strrep temp_s, "-", ":" ; アイテム追加 LVCOLUMS = $1, 0, 0, 0, 0, varptr(temp_s) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_SETITEM loop noteunsel return *mode_4 ; 管理画面 oncmd gosub *dummy, $111 ; 入力割り込み無効 clr 0 ; 画面クリア(オブジェクト含む) ; 画面レイアウト設定 lay_x = 0 : lay_y = 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy lay_ox = unit_x * 12 : lay_oy = unit_y * 12 lay_ix = unit_x * 4 : lay_iy = unit_y * 4 lay_nx = 3 : lay_ny = 2 objsize lay_sx, lay_sy ; オブジェクトフォント指定 font msgothic, unit_y * 10, 5 objmode 2 pos lay_px(0), lay_py(0) if s_opened { button gosub "閉店", *mode_close } else { if s_last = s_today { button gosub "再開店", *mode_open } else { button gosub "開店", *mode_open } } ; オブジェクトフォント指定 font msgothic, unit_y * 10 objmode 2 pos lay_px(1), lay_py(0) button gosub "レジ\n点検", *mode_4_2 nButton = stat SetWindowLong objinfo_hwnd(nButton), -16, $50000000 | $2000 ; 複数行表示 objenable nButton, s_opened pos lay_px(2), lay_py(0) button gosub "返金\n取消", *mode_4_3 nButton = stat SetWindowLong objinfo_hwnd(nButton), -16, $50000000 | $2000 ; 複数行表示 objenable nButton, s_opened pos lay_px(0), lay_py(1) button gosub "商品\n登録", *mode_4_4 SetWindowLong objinfo_hwnd(stat), -16, $50000000 | $2000 ; 複数行表示 pos lay_px(1), lay_py(1) button gosub "その他", *mode_4_5 pos lay_px(2), lay_py(1) button gosub "戻る", *mode_0 font msgothic, unit_y * 4, 1 objsize unit_x * 14, unit_y * 6 pos ginfo_winx - unit_x * 14, 0 button gosub "終了", *exit2 pos ginfo_winx - unit_x * 28, 0 button gosub "最小化", *s_mini return *sub_1 ; パスワード入力ウィンドウ表示 if s_password = "0000" { ; パスワード「0000」ならスキップ gosub *mode_4 return } main_x = ginfo_wx1 : main_y = ginfo_wy1 main_w = ginfo_winx : main_h = ginfo_winy EnableWindow hWnd_main, 0 gsel 1 width unit_x * 50, unit_y * 20, main_x + (main_w - ginfo_winx) / 2, main_y + (main_h - ginfo_winy) / 2 objprm 0, "" : objsel 0 gsel 1, 1 onkey gosub *sub_1_key_event return //////////// 画面切替ルーチン(従属) //////////// *mode_1_1 ; 会計画面 if c_anum <= 0 { ; 商品個数0の通知 dialog "商品個数が入力されていません。", 0, titl return } if c_total <= 0 { dialog "金額が異常です。\n入力内容を確認してください。", 1, titl return } ; 会計用変数初期化 c_depoint = 0 c_change = 1 clr 0 ; 画面クリア(オブジェクト含む) // 受注内容確認リストビュー配置 pos unit_x * 6, unit_y * 6 winobj "SysListView32", "", $200, $50000001, unit_x * 75, ginfo_winy / 2 - unit_y * 6 hList = objinfo_hwnd(stat) sendmsg hList, $1036, , $1 | $20 ; 拡張スタイル(LVM_SETEXTENDEDLISTVIEWSTYLE) sendmsg hList, $30, hFont.1, 0 ; フォント変更(WM_SETFONT) syscolor 16 sendmsg hList, $1001, , (ginfo_r) + (ginfo_g << 8) + (ginfo_b << 16) ; 背景色変更(LVM_SETBKCOLOR) sendmsg hList, $1026, , (ginfo_r) + (ginfo_g << 8) + (ginfo_b << 16) ; テキスト背景色変更(LVM_SETTEXTBKCOLOR) color 0, 0, 0 ImmAssociateContext hList, 0 ; IME無効 ; カラム追加 temp_s = "商品名" LVCOLUMS = $F, 0, unit_x * 46, varptr(temp_s), 0, 0 sendmsg hList, $101B, 0, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "単価" LVCOLUMS = $F, 1, unit_x * 13, varptr(temp_s), 0, 0 sendmsg hList, $101B, 1, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "個" LVCOLUMS = $F, 1, unit_x * 9, varptr(temp_s), 0, 0 sendmsg hList, $101B, 2, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN ; アイテム追加 repeat p_num if c_num(cnt) = 0 : continue ; 数量0はスキップ ; アイテム数取得 sendmsg hList, $1004 ; LVM_GETITEMCOUNT temp_i = stat ; 商品名 LVCOLUMS = $1, temp_i, 0, 0, 0, varptr(p_name(cnt)) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM ; 単価 temp_s = str(p_value(cnt)) LVCOLUMS = $1, temp_i, 1, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM ; 個数 temp_s = str(c_num(cnt)) LVCOLUMS = $1, temp_i, 2, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM loop ; 合計表示下書き temp_i = ginfo_cx : lay_mpy = ginfo_cy + unit_y * 4 SelectObject hdc, hFont.0 ; フォントを選択 pos ginfo_winx, ginfo_winy mes strf(" 合計%8d円 ", 0) lay_msx = ginfo_mesx : lay_msy = ginfo_mesy lay_mpx = temp_i + unit_y * 75 - lay_msx ; 右揃えに ; 合計表示描画 pos lay_mpx, lay_mpy mes strf(" 合計%8d円 ", c_total) ; 預り金表示下書き color 255, 0, 0 lay_mpx = ginfo_cx : lay_mpy = ginfo_cy mes strf(" お預り%8d円 ", c_depoint) color 0, 0, 0 mes "────────────" // 変更&確定ボタン ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = unit_y * 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 2 objsize lay_sx, lay_sy ; オブジェクトフォントサイズ font msgothic, unit_y * 10 objmode 2 pos lay_px(0), lay_py(0) button gosub "変更", *mode_1_back ; オブジェクトフォントサイズ font msgothic, unit_y * 10, 5 objmode 2 pos lay_px(0), lay_py(1) button gosub "確定", *mode_1_1_confirm // テンキー設置 ; オブジェクトフォントサイズ font msgothic, unit_y * 8, 1 objmode 2 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = ginfo_cy - unit_y * 5 lay_ex = ginfo_winx : lay_ey = ginfo_winy lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = 0 : lay_iy = 0 lay_nx = 3 : lay_ny = 4 ; クリアボタン objsize lay_sx * 2 + lay_ix, lay_sy pos lay_px(tkey_arg(10, 0)), lay_py(tkey_arg(10, 1)) button gosub "クリア", *mode_1_tenkey tkey_clr_ID = stat ; 数字ボタン objsize lay_sx, lay_sy repeat length(tkey_arg) - 1 pos lay_px(tkey_arg(cnt, 0)), lay_py(tkey_arg(cnt, 1)) button gosub str(cnt), *mode_1_tenkey loop onkey gosub *mode_1_1_key_event return *mode_2_1 ; 日付別販売実績 clr 0 ; 画面クリア(オブジェクト含む) // 日付リストビュー配置 pos unit_x * 6, unit_y * 6 winobj "SysListView32", "", $200, $50000001, unit_x * 75, ginfo_winy - unit_y * 12 hList = objinfo_hwnd(stat) sendmsg hList, $1036, , $1 | $20 ; 拡張スタイル(LVM_SETEXTENDEDLISTVIEWSTYLE) sendmsg hList, $30, hFont.1, 0 ; フォント変更(WM_SETFONT) syscolor 16 sendmsg hList, $1001, , (ginfo_r) + (ginfo_g << 8) + (ginfo_b << 16) ; 背景色変更(LVM_SETBKCOLOR) sendmsg hList, $1026, , (ginfo_r) + (ginfo_g << 8) + (ginfo_b << 16) ; テキスト背景色変更(LVM_SETTEXTBKCOLOR) color 0, 0, 0 ImmAssociateContext hList, 0 ; IME無効 ; カラム追加 temp_s = "日付" LVCOLUMS = $F, 0, unit_x * 67, varptr(temp_s), 0, 0 sendmsg hList, $101B, 0, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN dirlist d_list, "daily\\****-**-**.csv", 3 ; 販売実績ファイル列挙 repeat stat temp_s = strmid(d_list, cnt * 16, 10) ; ファイル名取り出し(拡張子 + 改行コード抜き) strrep temp_s, "-", "/" ; アイテム追加 LVCOLUMS = $1, 0, 0, 0, 0, varptr(temp_s) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_SETITEM loop // 戻る&選択ボタン ; オブジェクトフォントサイズ font msgothic, unit_y * 9 objmode 2 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = unit_y * 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 2 objsize lay_sx, lay_sy pos lay_px(0), lay_py(0) button gosub "戻る", *mode_2 font msgothic, unit_y * 9, 5 objmode 2 pos lay_px(0), lay_py(1) button gosub "選択", *mode_2_1_1 return *mode_2_2 ; 累計販売実績 clr 0 ; 画面クリア(オブジェクト含む) // 累計販売実績リストビュー配置 pos unit_x * 6, unit_y * 6 winobj "SysListView32", "", $200, $50000001, unit_x * 75, ginfo_winy - unit_y * 12 hList = objinfo_hwnd(stat) sendmsg hList, $1036, , $1 | $20 ; 拡張スタイル(LVM_SETEXTENDEDLISTVIEWSTYLE) sendmsg hList, $30, hFont.1, 0 ; フォント変更(WM_SETFONT) syscolor 16 sendmsg hList, $1001, , (ginfo_r) + (ginfo_g << 8) + (ginfo_b << 16) ; 背景色変更(LVM_SETBKCOLOR) sendmsg hList, $1026, , (ginfo_r) + (ginfo_g << 8) + (ginfo_b << 16) ; テキスト背景色変更(LVM_SETTEXTBKCOLOR) color 0, 0, 0 ImmAssociateContext hList, 0 ; IME無効 ; カラム追加 temp_s = "商品名" LVCOLUMS = $F, 0, unit_x * 43, varptr(temp_s), 0, 0 sendmsg hList, $101B, 0, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "売上" LVCOLUMS = $F, 1, unit_x * 12, varptr(temp_s), 0, 0 sendmsg hList, $101B, 1, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "返品" LVCOLUMS = $F, 1, unit_x * 12, varptr(temp_s), 0, 0 sendmsg hList, $101B, 2, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN // 戻るボタン ; オブジェクトフォントサイズ font msgothic, unit_y * 9, 1 objmode 2 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = unit_y * 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 2 objsize lay_sx, lay_sy pos lay_px(0), lay_py(0) button gosub "戻る", *mode_2 notesel d_buf_total ; 対象バッファを累計販売実績データに ; 商品一覧表示 repeat notemax - 11, 11 temp_s = GetCSV(cnt, 0) ; 商品ID取得 p_index = -1 repeat p_num ; 商品データから検索 if temp_s = p_id(cnt) : p_index = cnt : break loop sendmsg hList, $1004 ; LVM_GETITEMCOUNT temp_i = stat if p_index >= 0 { ; 商品データから見つかった ; 商品名項目追加 LVCOLUMS = $1, temp_i, 0, 0, 0, varptr(p_name(p_index)) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM } else { repeat rp_num ; 削除済み商品データから検索 if temp_s = rp_id(cnt) : p_index = cnt : break loop if p_index >= 0 { ; 削除済み商品データから見つかった ; 商品名項目追加 LVCOLUMS = $1, temp_i, 0, 0, 0, varptr(rp_name(p_index)) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM } else { ; 商品名項目追加 temp_s = "不明な商品(ID:" + temp_s + ")" LVCOLUMS = $1, temp_i, 0, 0, 0, varptr(temp_s) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM } } ; 売上数項目追加 temp_s = GetCSV(cnt, 1) LVCOLUMS = $1, temp_i, 1, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM ; 返品数項目追加 temp_s = GetCSV(cnt, 2) LVCOLUMS = $1, temp_i, 2, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM loop ; 合計表示 SelectObject hdc, hFont.0 ; フォントを選択 color 128, , 255 ; 紫 mes strf("営業日数\n%11d日", int(GetCSV(0, 1))) color 255, 128 ; 橙 mes strf("客数\n%11d人", int(GetCSV(2, 1))) color 255 ; 赤 mes strf("売上金額\n%11d円", int(GetCSV(3, 1))) color , 128 ; 緑 mes strf("返金額\n%11d円", int(GetCSV(6, 1))) color , , 255 ; 青 mes strf("現金誤差\n%11d円", int(GetCSV(8, 1))) noteunsel ; バッファ復帰 return *mode_2_1_1 ; 日付別販売実績表示 ; 選択アイテム取得 sendmsg hList, $100C, -1, $2 ; LVM_GETNEXTITEM LVNI_SELECTED if stat = -1 : return d_sel = stat *mode_2_1_1_back clrobj 1, 2 ; ボタンだけ削除 sendmsg hList, $1009 ; LVM_DELETEALLITEMS ; カラム追加 temp_s = "商品名" LVCOLUMS = $F, 0, unit_x * 43, varptr(temp_s), 0, 0 sendmsg hList, $101B, 0, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "売上" LVCOLUMS = $F, 1, unit_x * 12, varptr(temp_s), 0, 0 sendmsg hList, $101B, 1, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "返品" LVCOLUMS = $F, 1, unit_x * 12, varptr(temp_s), 0, 0 sendmsg hList, $101B, 2, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN sendmsg hList, $101C, 3 ; カラムを削除(LVM_DELETECOLUMN) sendmsg hList, $101C, 3 ; カラムを削除(LVM_DELETECOLUMN) sendmsg hList, $101C, 3 ; カラムを削除(LVM_DELETECOLUMN) sendmsg hList, $101C, 3 ; カラムを削除(LVM_DELETECOLUMN) ; オブジェクトフォントサイズ font msgothic, unit_y * 9, 1 objmode 2 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = unit_y * 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 2 objsize lay_sx, lay_sy pos lay_px(0), lay_py(0) button gosub "戻る", *mode_2_1 font msgothic, unit_y * 9, 5 objmode 2 pos lay_px(0), lay_py(1) button gosub "毎時売上", *mode_2_1_2 ; 販売実績データ一覧から選択されたファイルを取得 notesel d_list noteget d_path, notemax - d_sel - 1 noteunsel ; 選択された販売実績データをバッファにロード notesel d_buf_date noteload "daily\\" + d_path if notemax = 0 { dialog "選択された日付の販売実績データは読み込めません。", 1, titl noteunsel ; バッファ復帰 gosub *mode_2_1 return } ; 商品一覧表示 repeat notemax - 14, 14 temp_s = GetCSV(cnt, 0) ; 商品ID取得 p_index = -1 repeat p_num ; 商品データから検索 if temp_s = p_id(cnt) : p_index = cnt : break loop sendmsg hList, $1004 ; LVM_GETITEMCOUNT temp_i = stat if p_index >= 0 { ; 商品データから見つかった ; 商品名項目追加 LVCOLUMS = $1, temp_i, 0, 0, 0, varptr(p_name(p_index)) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM } else { repeat rp_num ; 削除済み商品データから検索 if temp_s = rp_id(cnt) : p_index = cnt : break loop if p_index >= 0 { ; 削除済み商品データから見つかった ; 商品名項目追加 LVCOLUMS = $1, temp_i, 0, 0, 0, varptr(rp_name(p_index)) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM } else { ; 商品名項目追加 temp_s = "不明な商品(ID:" + temp_s + ")" LVCOLUMS = $1, temp_i, 0, 0, 0, varptr(temp_s) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM } } ; 売上数項目追加 temp_s = GetCSV(cnt, 1) LVCOLUMS = $1, temp_i, 1, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM ; 返品数項目追加 temp_s = GetCSV(cnt, 2) LVCOLUMS = $1, temp_i, 2, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM loop ; 合計表示 SelectObject hdc, hFont.0 ; フォントを選択 color 255, 128 ; 橙 mes strf("客数\n%11d人", int(GetCSV(3, 1))) color 255 ; 赤 mes strf("売上金額\n%11d円", int(GetCSV(4, 1))) color , 128 ; 緑 mes strf("返金額\n%11d円", int(GetCSV(7, 1))) color , , 255 ; 青 mes strf("現金誤差\n%11d円", int(GetCSV(11, 1))) noteunsel ; バッファ復帰 return *mode_2_1_2 ; 時間別販売実績表示 clrobj 1, 2 ; ボタンだけ削除 sendmsg hList, $1009 ; LVM_DELETEALLITEMS ; カラム追加 temp_s = "時間" LVCOLUMS = $F, 0, unit_x * 13, varptr(temp_s), 0, 0 sendmsg hList, $101B, 0, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "客数" LVCOLUMS = $F, 1, unit_x * 16, varptr(temp_s), 0, 0 sendmsg hList, $101B, 1, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "売上" LVCOLUMS = $F, 1, unit_x * 21, varptr(temp_s), 0, 0 sendmsg hList, $101B, 2, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "客単価" LVCOLUMS = $F, 1, unit_x * 17, varptr(temp_s), 0, 0 sendmsg hList, $101B, 3, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN sendmsg hList, $101C, 4 ; カラムを削除(LVM_DELETECOLUMN) sendmsg hList, $101C, 4 ; カラムを削除(LVM_DELETECOLUMN) sendmsg hList, $101C, 4 ; カラムを削除(LVM_DELETECOLUMN) ; オブジェクトフォントサイズ font msgothic, unit_y * 9, 1 objmode 2 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = unit_y * 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 2 objsize lay_sx, lay_sy pos lay_px(0), lay_py(0) button gosub "戻る", *mode_2_1 font msgothic, unit_y * 9, 5 objmode 2 pos lay_px(0), lay_py(1) button gosub "売上一覧", *mode_2_1_1_back notesel u_buf_date noteload "hourly\\" + d_path repeat 24 ; 時間項目追加 temp_s = strf("%02d:00", cnt) LVCOLUMS = $1, cnt, 0, 0, 0, varptr(temp_s) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM ; 会計数項目追加 temp_s = GetCSV(cnt + 1, 1) temp_i = int(temp_s) LVCOLUMS = $1, cnt, 1, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM ; 売上額項目追加 temp_s = GetCSV(cnt + 1, 2) LVCOLUMS = $1, cnt, 2, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM ; 客単価項目追加 if temp_i { temp_s = str(int(temp_s) / temp_i) } else : temp_s = "0" LVCOLUMS = $1, cnt, 3, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM loop noteunsel return *mode_3_1 ; 返金画面 ; 選択アイテム取得 sendmsg hList, $100C, -1, $2 ; LVM_GETNEXTITEM LVNI_SELECTED if stat = -1 : return temp_i = stat clrobj 1, 2 ; ボタンだけ削除 sendmsg hList, $1009 ; LVM_DELETEALLITEMS ; カラム追加 temp_s = "商品名" LVCOLUMS = $F, 0, unit_x * 55, varptr(temp_s), 0, 0 sendmsg hList, $101B, 0, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "個" LVCOLUMS = $F, 1, unit_x * 12, varptr(temp_s), 0, 0 sendmsg hList, $101B, 1, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN sendmsg hList, $101C, 2 ; 時間カラムを削除(LVM_DELETECOLUMN) ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = unit_y * 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 2 objsize lay_sx, lay_sy font msgothic, unit_y * 9 objmode 2 pos lay_px(0), lay_py(0) button gosub "戻る", *mode_3_back font msgothic, unit_y * 9, 5 objmode 2 pos lay_px(0), lay_py(1) button gosub "返金", *mode_3_1_refund ; 販売実績データ一覧から選択されたファイルを取得 notesel r_list noteget temp_s, notemax - temp_i - 1 noteunsel r_path = f_date + "\\" + temp_s ; 販売実績ファイルパス代入 ; 選択された販売実績データをバッファにロード notesel h_buf noteload "history\\" + r_path if notemax = 0 { dialog "選択された販売履歴データは読み込めません。", 1, titl noteunsel ; バッファ復帰 gosub *mode_3_back return } ; 商品一覧表示 repeat notemax - 2, 2 temp_s = GetCSV(cnt, 0) ; 商品ID取得 p_index = -1 repeat p_num ; 商品データから検索 if temp_s = p_id(cnt) : p_index = cnt : break loop sendmsg hList, $1004 ; LVM_GETITEMCOUNT temp_i = stat if p_index >= 0 { ; 商品データから見つかった ; 商品名項目追加 LVCOLUMS = $1, temp_i, 0, 0, 0, varptr(p_name(p_index)) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM } else { repeat rp_num ; 削除済み商品データから検索 if temp_s = rp_id(cnt) : p_index = cnt : break loop if p_index >= 0 { ; 削除済み商品データから見つかった ; 商品名項目追加 LVCOLUMS = $1, temp_i, 0, 0, 0, varptr(rp_name(p_index)) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM } else { ; 商品名項目追加 temp_s = "不明な商品(ID:" + temp_s + ")" LVCOLUMS = $1, temp_i, 0, 0, 0, varptr(temp_s) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM } } ; 売上数項目追加 temp_s = GetCSV(cnt, 1) LVCOLUMS = $1, temp_i, 1, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM loop ; 売上金額表示 SelectObject hdc, hFont.0 ; フォントを選択 color 255 ; 赤 mes strf("\n売上金額\n%11d円", int(GetCSV(0, 1))) noteunsel ; バッファ復帰 return *mode_4_2 ; レジ点検 ; 各変数再初期化 dim o_num, 10 ; 釣銭枚数(1万円から始まる配列) dim o_sum ; 釣銭金額合計 dim o_focus ; フォーカスされている入力ボックス dim o_input ; 入力切替用フラグ *mode_4_2_back ; 戻り処理 clr 0 ; 画面クリア(オブジェクト含む) ; 文字描画 SelectObject hdc, hFont.0 color 255 ; 赤 pos unit_x * 6, unit_y * 6 mes "レジ点検" + strf("(%04d/%02d/%02d[%s])", gettime(0), gettime(1), gettime(3), s_week(gettime(2))) color , , 255 ; 青 mes "現金誤差確認" color ; 黒 pos ginfo_cx + unit_y * 6, ginfo_cy + unit_y * 3 lay_x = ginfo_cx : lay_y = ginfo_cy mes "10000円× 枚\n 5000円× 枚\n 2000円× 枚\n 1000円× 枚\n 500円× 枚\n 100円× 枚\n 50円× 枚\n 10円× 枚\n 5円× 枚\n 1円× 枚" pos ginfo_cx - unit_y * 6, ginfo_cy + unit_y * 3 lay_mpx = ginfo_cx : lay_mpy = ginfo_cy mes "合計 円" ; 各種入力ボックス配置 font msgothic, unit_y * 5 objmode 2 pos lay_x + unit_y * 28, lay_y + 1 repeat length(o_num) input o_num(cnt), unit_y * 20, unit_y * 6 ; 各紙貨幣枚数用入力ボックス hInput.cnt = objinfo_hwnd(stat) SetWindowLong hInput.cnt, -16, $50010080 | $2002 ; 数字入力限定右揃え ImmAssociateContext hInput.cnt, 0 ; IME無効 loop pos lay_mpx + unit_y * 13, lay_mpy + 1 input o_sum, unit_y * 41, unit_y * 6 ; 釣銭合計用入力ボックス nInput = stat objskip nInput, 7 ; フォーカス移動スキップ hInput.nInput = objinfo_hwnd(nInput) SetWindowLong hInput.nInput, -16, $50010080 | $2002 ; 数字入力限定右揃え ImmAssociateContext hInput.nInput, 0 ; IME無効 sendmsg hInput.nInput, $CF, 1 ; 入力無効 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 3 objsize lay_sx, lay_sy ; オブジェクトフォントサイズ font msgothic, unit_y * 7, 5 objmode 2 pos lay_px(0), lay_py(1) button gosub "誤差確認", *mode_4_2_1 objskip stat, 3 ; オブジェクトフォントサイズ font msgothic, unit_y * 7 objmode 2 pos lay_px(0), lay_py(0) button gosub "戻る", *mode_4 objskip stat, 3 pos lay_px(0), lay_py(2) button gosub "入力切替", *o_change objskip stat, 3 // テンキー設置 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = ginfo_cy - unit_y * 5 lay_ex = ginfo_winx : lay_ey = ginfo_winy lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = 0 : lay_iy = 0 lay_nx = 3 : lay_ny = 4 ; オブジェクトフォントサイズ font msgothic, unit_y * 8, 1 objmode 2 ; クリアボタン objsize lay_sx * 2 + lay_ix, lay_sy pos lay_px(tkey_arg(10, 0)), lay_py(tkey_arg(10, 1)) button gosub "クリア", *o_tenkey tkey_clr_ID = stat objskip tkey_clr_ID, 3 ; 数字ボタン objsize lay_sx, lay_sy repeat length(tkey_arg) - 1 pos lay_px(tkey_arg(cnt, 0)), lay_py(tkey_arg(cnt, 1)) button gosub str(cnt), *o_tenkey objskip stat, 3 loop oncmd gosub *o_command, $111 ; 入力割り込み処理 return *mode_4_2_1 oncmd gosub *dummy, $111 ; 入力割り込み無効 clr 0 ; 画面クリア(オブジェクト含む) ; 理論存高取得 notesel d_buf d_total = int(GetCSV(9, 1)) noteunsel ; 文字描画 SelectObject hdc, hFont.0 color 255 ; 赤 pos unit_x * 6, unit_y * 6 mes "レジ点検" + strf("(%04d/%02d/%02d[%s])", gettime(0), gettime(1), gettime(3), s_week(gettime(2))) color , , 255 ; 青 mes "現金誤差確認" ; 合計表示下書き temp_i = ginfo_cx : lay_mpy = ginfo_cy + unit_y * 6 SelectObject hdc, hFont.0 ; フォントを選択 pos ginfo_winx, ginfo_winy mes strf(" 現金存高%8d円 ", 0) lay_msx = ginfo_mesx : lay_msy = ginfo_mesy lay_mpx = temp_i + unit_y * 75 - lay_msx ; 右揃えに ; 現金存高表示描画 color , , 255 ; 青 pos lay_mpx, lay_mpy mes strf(" 現金存高%10d円 ", o_sum) ; 理論存高表示下書き color 255 ; 赤 mes strf(" 理論存高%10d円 ", d_total) color 0, 0, 0 mes "────────────" ; 現金誤差表示 color , 128 ; 緑 mes strf(" 現金誤差%10d円 ", o_sum - d_total) ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 2 objsize lay_sx, lay_sy ; オブジェクトフォントサイズ font msgothic, unit_y * 9, 5 objmode 2 pos lay_px(0), lay_py(1) button gosub "完了", *mode_4_2_1_error objskip stat, 3 ; オブジェクトフォントサイズ font msgothic, unit_y * 9 objmode 2 pos lay_px(0), lay_py(0) button gosub "戻る", *mode_4_2_back return *mode_4_3 ; 返金取消選択画面 clr 0 ; 画面クリア(オブジェクト含む) // 受注用リストビュー設置 pos unit_x * 6, unit_y * 6 winobj "SysListView32", "", $200, $50000001, unit_x * 75, ginfo_winy - unit_y * 18 hList = objinfo_hwnd(stat) sendmsg hList, $1036, , $1 | $20 ; 拡張スタイル(LVM_SETEXTENDEDLISTVIEWSTYLE) sendmsg hList, $30, hFont.1, 0 ; フォント変更(WM_SETFONT) syscolor 16 sendmsg hList, $1026, , (ginfo_r) + (ginfo_g << 8) + (ginfo_b << 16) sendmsg hList, $1001, , (ginfo_r) + (ginfo_g << 8) + (ginfo_b << 16) color 0, 0, 0 ImmAssociateContext hList, 0 ; IME無効 ; カラム追加 temp_s = "会計時間" LVCOLUMS = $F, 0, unit_x * 67, varptr(temp_s), 0, 0 sendmsg hList, $101B, 0, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN // 戻る&選択ボタン ; オブジェクトフォントサイズ font msgothic, unit_y * 9 objmode 2 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = unit_y * 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 2 objsize lay_sx, lay_sy pos lay_px(0), lay_py(0) button gosub "戻る", *mode_4 font msgothic, unit_y * 9, 5 objmode 2 pos lay_px(0), lay_py(1) button gosub "選択", *mode_4_3_2 dirlist r_list, "refund\\" + f_date + "\\**-**-**.csv", 3 repeat stat temp_s = strmid(r_list, cnt * 14, 8) ; ファイル名取り出し(拡張子 + 改行コード抜き) strrep temp_s, "-", ":" ; アイテム追加 LVCOLUMS = $1, 0, 0, 0, 0, varptr(temp_s) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_SETITEM loop noteunsel return *mode_4_3_2 ; 取消返金データ表示画面 ; 選択アイテム取得 sendmsg hList, $100C, -1, $2 ; LVM_GETNEXTITEM LVNI_SELECTED if stat = -1 : return temp_i = stat clrobj 1, 2 ; ボタンだけ削除 sendmsg hList, $1009 ; LVM_DELETEALLITEMS ; カラム追加 temp_s = "商品名" LVCOLUMS = $F, 0, unit_x * 55, varptr(temp_s), 0, 0 sendmsg hList, $101B, 0, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "個" LVCOLUMS = $F, 1, unit_x * 12, varptr(temp_s), 0, 0 sendmsg hList, $101B, 1, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN sendmsg hList, $101C, 2 ; 時間カラムを削除(LVM_DELETECOLUMN) ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = unit_y * 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 2 objsize lay_sx, lay_sy font msgothic, unit_y * 9 objmode 2 pos lay_px(0), lay_py(0) button gosub "戻る", *mode_4_3 font msgothic, unit_y * 9, 5 objmode 2 pos lay_px(0), lay_py(1) button gosub "返金取消", *mode_4_3_2_cancel ; 販売実績データ一覧から選択されたファイルを取得 notesel r_list noteget temp_s, notemax - temp_i - 1 noteunsel r_path = f_date + "\\" + temp_s ; 販売実績ファイルパス代入 ; 選択された販売実績データをバッファにロード notesel h_buf noteload "refund\\" + r_path if notemax = 0 { dialog "選択された返金履歴データは読み込めません。", 1, titl noteunsel ; バッファ復帰 gosub *mode_4_3 return } ; 商品一覧表示 repeat notemax - 2, 2 temp_s = GetCSV(cnt, 0) ; 商品ID取得 p_index = -1 repeat p_num ; 商品データから検索 if temp_s = p_id(cnt) : p_index = cnt : break loop sendmsg hList, $1004 ; LVM_GETITEMCOUNT temp_i = stat if p_index >= 0 { ; 商品データから見つかった ; 商品名項目追加 LVCOLUMS = $1, temp_i, 0, 0, 0, varptr(p_name(p_index)) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM } else { repeat rp_num ; 削除済み商品データから検索 if temp_s = rp_id(cnt) : p_index = cnt : break loop if p_index >= 0 { ; 削除済み商品データから見つかった ; 商品名項目追加 LVCOLUMS = $1, temp_i, 0, 0, 0, varptr(rp_name(p_index)) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM } else { ; 商品名項目追加 temp_s = "不明な商品(ID:" + temp_s + ")" LVCOLUMS = $1, temp_i, 0, 0, 0, varptr(temp_s) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM } } ; 売上数項目追加 temp_s = GetCSV(cnt, 1) LVCOLUMS = $1, temp_i, 1, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM loop ; 売上金額表示 SelectObject hdc, hFont.0 ; フォントを選択 color 255 ; 赤 mes strf("\n返金額\n%11d円", int(GetCSV(0, 1))) noteunsel ; バッファ復帰 return *mode_4_4 ; 商品登録画面 clr 0 ; 画面クリア(オブジェクト含む) getini "system", "pdcount", s_pdcount ; 商品追加入力ボックス font msgothic, unit_y * 5, 1 objmode 2 pos unit_x * 6, unit_y * 6 mes "商品名" input a_name, unit_x * 72, unit_y * 6 pos ginfo_cx + unit_x * 72, unit_y * 6 mes "単価" input a_value, unit_x * 24, unit_y * 6 hInput = objinfo_hwnd(stat) SetWindowLong hInput, -16, $50010080 | $2 ; 右揃え ImmAssociateContext hInput, 0 ; IME無効 pos ginfo_cx + unit_x * 24, unit_y * 11 objsize unit_x * 20, unit_y * 6 button gosub "追加", *mode_4_4_add ; 商品データ一覧リストビュー pos unit_x * 6, unit_y * 18 winobj "SysListView32", "", $200, $50000001, ginfo_winx - unit_x * 12, ginfo_winy - unit_y * 30 hList = objinfo_hwnd(stat) sendmsg hList, $1036, , $1 | $20 ; 拡張スタイル(LVM_SETEXTENDEDLISTVIEWSTYLE) sendmsg hList, $30, hFont.1, 0 ; フォント変更(WM_SETFONT) syscolor 16 sendmsg hList, $1001, , (ginfo_r) + (ginfo_g << 8) + (ginfo_b << 16) ; 背景色変更(LVM_SETBKCOLOR) sendmsg hList, $1026, , (ginfo_r) + (ginfo_g << 8) + (ginfo_b << 16) ; テキスト背景色変更(LVM_SETTEXTBKCOLOR) color 0, 0, 0 ImmAssociateContext hList, 0 ; IME無効 objsize (ginfo_winx - unit_x * 12) / 4, unit_y * 6 lay_x = (ginfo_winx - unit_x * 12) / 4 lay_y = ginfo_cy ; 商品データ一覧操作ボタン button gosub "削除", *mode_4_4_delete pos unit_x * 6 + lay_x, lay_y button gosub "上へ", *mode_4_4_up pos unit_x * 6 + lay_x * 2, lay_y button gosub "下へ", *mode_4_4_down font msgothic, unit_y * 5, 5 objmode 2 pos unit_x * 6 + lay_x * 3, lay_y button gosub "完了", *mode_4_4_reflect ; カラム追加 temp_s = "商品ID" LVCOLUMS = $F, 1, unit_x * 24, varptr(temp_s), 0, 0 sendmsg hList, $101B, 0, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "商品名" LVCOLUMS = $F, 0, unit_x * 64, varptr(temp_s), 0, 0 sendmsg hList, $101B, 1, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN temp_s = "単価" LVCOLUMS = $F, 1, unit_x * 12, varptr(temp_s), 0, 0 sendmsg hList, $101B, 2, varptr(LVCOLUMS) ; LVM_INSERTCOLUMN ; アイテム追加 repeat p_num ; 商品ID temp_s = p_ID(cnt) LVCOLUMS = $1, cnt, 0, 0, 0, varptr(temp_s) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM ; 商品名 temp_s = p_name(cnt) LVCOLUMS = $1, cnt, 1, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM ; 単価 temp_s = str(p_value(cnt)) LVCOLUMS = $1, cnt, 2, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM loop return *mode_4_5 ; 管理その他 clr 0 ; 画面クリア(オブジェクト含む) ; 画面レイアウト設定 lay_x = 0 : lay_y = 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy lay_ox = unit_x * 12 : lay_oy = unit_y * 12 lay_ix = unit_x * 4 : lay_iy = unit_y * 4 lay_nx = 1 : lay_ny = 3 ; オブジェクトフォントサイズ font msgothic, unit_y * 12 objmode 2 objsize lay_sx, lay_sy pos lay_px(0), lay_py(0) button gosub "パスワード変更", *mode_4_5_1 pos lay_px(0), lay_py(1) button gosub "各種初期化", *mode_4_5_2 pos lay_px(0), lay_py(2) button gosub "戻る", *mode_4 return *mode_4_5_1 ; パスワード変更画面 clr 0 ; 画面クリア(オブジェクト含む) pos unit_x * 6, unit_y * 6 font msgothic, unit_y * 6 mes "パスワード変更" color 255 ; 赤 mes "\n現在のパスワード:" + s_password color , , 255 ; 青 mes "\n新しいパスワード:" objmode 2 pos ginfo_cx + ginfo_mesx, ginfo_cy - unit_y * 6 input e_newpass, unit_y * 14, unit_y * 7, 4 hInput = objinfo_hwnd(stat) sendmsg hInput, $CC, '*' ; EM_SETPASSWORDCHAR SetWindowLong hInput, -16, $50010080 | $2000 ; 数字のみ ImmAssociateContext hInput, 0 ; IME無効 font msgothic, unit_y * 3 color pos unit_x * 6 mes "\n※ 4桁の数字のみ使用できます。\n※ 0000はパスワード無しになります。" // 戻る&変更ボタン ; オブジェクトフォントサイズ font msgothic, unit_y * 9, 1 objmode 2 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = unit_y * 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 2 objsize lay_sx, lay_sy pos lay_px(0), lay_py(0) button gosub "戻る", *mode_4_5 pos lay_px(0), lay_py(1) button gosub "変更", *mode_4_5_1_change return *mode_4_5_2 ; 各種初期化画面 clr 0 ; 画面クリア(オブジェクト含む) ; 初期化フラグ初期化 dim i_today dim i_ex dim i_total dim i_pd font msgothic, unit_y * 4, 1 pos unit_x * 6, unit_y * 6 color 255 ; 赤 mes "初期化する項目を選択してください。\n" font msgothic, unit_y * 6 objmode 2 objsize unit_x * 75, unit_y * 6, unit_y * 8 chkbox "本日分の販売データ", i_today objenable stat, s_opened + (s_last = s_today) ; 本日開店していなければ無効 chkbox "本日分以外の販売データ", i_ex chkbox "累計販売データ", i_total chkbox "商品データ", i_pd button gosub "全てのデータ", *mode_4_5_2_all hButton = objinfo_hwnd(stat) sendmsg hButton, $F4, $3 // 戻る&初期化ボタン ; オブジェクトフォントサイズ font msgothic, unit_y * 9, 1 objmode 2 ; 画面レイアウト設定 lay_x = unit_x * (81 - 5) : lay_y = unit_y * 0 lay_ex = ginfo_winx : lay_ey = ginfo_winy / 2 lay_ox = unit_x * 6 : lay_oy = unit_y * 6 lay_ix = unit_x : lay_iy = unit_y lay_nx = 1 : lay_ny = 2 objsize lay_sx, lay_sy pos lay_px(0), lay_py(0) button gosub "戻る", *mode_4_5 pos lay_px(0), lay_py(1) button gosub "初期化", *mode_4_5_2_init return ///////////////// その他の処理 ///////////////// *o_open ; 開店処理 dialog "入力された釣銭準備金額は" + o_sum + "円です。\n開店しますか。", 2, titl if stat = 7 : return oncmd gosub *dummy, $111 ; 入力割り込み無効 ; 販売データ作成 d_buf = s_today + "\n釣銭準備金額," + o_sum + "\n\n会計回数,0\n売上金額,0\n\n返金回数,0\n返金額,0\n\n理論存高," + o_sum + "\n現金存高,0\n現金誤差,0\n\n商品ID,売上数,返品数\n" repeat p_num d_buf += p_id(cnt) + ",0,0\n" loop notesel d_buf ; 販売実績データを対象バッファに指定(デフォルト) notesave "daily\\" + f_date + ".csv" noteunsel ; 営業日数加算 notesel d_buf_total WriteCSV 0, 1, str(int(GetCSV(0, 1)) + 1) notesave "total.csv" ; 開店フラグ書き込み s_opened = 1 writeini "system", "opened", s_opened ; 開店日書き込み s_last = s_today writeini "system", "last", s_last ; 販売履歴ディレクトリ dirlist temp_s, "history\\" + f_date, 5 if stat = 0 : mkdir "history\\" + f_date ; 返金履歴ディレクトリ dirlist temp_s, "refund\\" + f_date, 5 if stat = 0 : mkdir "refund\\" + f_date ; 毎時売上ファイル作成 u_buf = "時間,会計数,売上金額\n" repeat 24 u_buf += strf("%02d,0,0\n", cnt) loop notesel u_buf notesave "hourly\\" + f_date + ".csv" noteunsel gosub *mode_4 ; メインメニューにジャンプ return *o_close ; 閉店処理 o_error = o_sum - d_total ; 現金誤差算出 if o_error { ; 現金誤差あり dialog "現金誤差が" + o_error + "円発生しています。\n閉店処理を確定しますか。", 3, titl } else { ; 現金誤差なし dialog "閉店処理を確定しますか。", 2, titl } if stat = 7 : return ; いいえ ; 現金誤差書き込み notesel d_buf WriteCSV 10, 1, str(o_sum) ; 現金在高 WriteCSV 11, 1, str(o_error) ; 現金誤差 notesave "daily\\" + f_date + ".csv" noteunsel notesel d_buf_total WriteCSV 8, 1, str(int(GetCSV(8, 1)) + o_error) notesave "total.csv" noteunsel ; 開店フラグ書き込み s_opened = 0 writeini "system", "opened", s_opened gosub *mode_4 return *o_change o_input ^ 1 ; 0,1反転 if o_input { ; o_input = 1のとき oncmd gosub *dummy, $111 ; WM_COMMAND無効化 repeat 9 + s_opened sendmsg hInput.cnt, $CF, 1 ; 枚数入力ボックス無効化 objprm cnt, 0 ; 枚数リセット objskip cnt, 7 ; フォーカススキップ loop sendmsg hInput(9 + s_opened), $CF, 0 ; 釣銭合計入力ボックス有効化 o_focus = 9 + s_opened objsel o_focus ; フォーカス指定 objskip o_focus, 5 ; フォーカススキップ無効 } else { ; o_input = 0のとき sendmsg hInput(9 + s_opened), $CF, 1 ; 釣銭合計入力ボックス無効化 objskip 9 + s_opened, 7 ; フォーカススキップ repeat 9 + s_opened sendmsg hInput.cnt, $CF, 0 ; 枚数入力ボックス有効化 objskip cnt, 5 ; フォーカススキップ無効 loop oncmd gosub *o_command, $111 ; WM_COMMAND有効化 o_focus = 0 objsel o_focus ; フォーカス指定 } return *o_command ; 開閉店処理の入力処理 repeat 9 + s_opened if lParam = hInput.cnt { o_focus = cnt ; フォーカスされたオブジェクトID代入 ; 釣銭合計反映 o_sum = 0 repeat 10 o_sum += o_amount(cnt) * o_num(cnt) loop objprm 9 + s_opened, o_sum ; オブジェクトに描画 } loop return *o_tenkey ; 開閉店処理のテンキー処理 temp_i = stat - tkey_clr_ID ; オブジェクトIDからテンキーのボタンを特定 objsel o_focus if temp_i { ; テンキー入力をキーコードに変換 if o_focus < 9 + s_opened { if o_num(o_focus + 1 - s_opened) > 0 : keybd_event 39, 0, 0, 0 ; →キー } else { if o_sum > 0 : keybd_event 39, 0, 0, 0 ; →キー } keybd_event temp_i + 47, 0, 0, 0 ; 0~9 } else { keybd_event 48, 0, 0, 0 ; 0 } return *load_pd ; 商品データ読み込み // 商品データ読み込み ; 変数確保(p_num非依存) sdim p_buf, 4096 ; 商品データファイル用バッファ dim p_num ; 商品登録数 ; 商品データをバッファに展開 notesel p_buf noteload "pd.csv" ; 無限ループ防止 if notemax = 0 { dialog "商品データファイル(pd.csv)が読み込めません。\nアプリケーションを終了してから、手動で修復するか、ファイルを削除してください。", 1, titl noteunsel ; バッファ復帰 return } ; CSVデータ読み込み p_num = notemax - 1 ; 変数確保(p_num依存) sdim p_id, p_num ; 商品ID sdim p_name, , p_num ; 商品名 dim p_value, p_num ; 商品価格 repeat p_num ; カラムを無視 noteget temp_s, cnt + 1 ; 行を取り出し split temp_s, ",", p_id(cnt), p_name(cnt), temp_s ; 分割(ID, 商品名, 単価) p_value(cnt) = int(temp_s) ; 単価をint型に変換 loop noteunsel ; バッファ復帰 // 削除済み商品データ読み込み ; 変数確保(p_num非依存) sdim rp_buf, 4096 ; 商品データファイル用バッファ dim rp_num ; 商品登録数 ; 商品データをバッファに展開 notesel rp_buf noteload "rpd.csv" ; 無限ループ防止 if notemax = 0 { dialog "削除済み商品データファイル(rpd.csv)が読み込めません。\nアプリケーションを終了してから、手動で修復するか、ファイルを削除してください。", 1, titl noteunsel ; バッファ復帰 return } ; CSVデータ読み込み rp_num = notemax - 1 ; 変数確保(p_num依存) sdim rp_id, rp_num ; 商品ID sdim rp_name, , rp_num ; 商品名 dim rp_value, rp_num ; 商品価格 repeat rp_num ; カラムを無視 noteget temp_s, cnt + 1 ; 行を取り出し split temp_s, ",", rp_id(cnt), rp_name(cnt), temp_s ; 分割(ID, 商品名, 単価) rp_value(cnt) = int(temp_s) ; 単価をint型に変換 loop noteunsel ; バッファ復帰 return *aggregate ; 販売実績集計 if s_last ! s_today : return ; 今日開店していない場合 clr 0 ; 画面クリア(オブジェクト含む) SelectObject hdc, hFont.0 pos 0, 0 mes "販売データ集計中..." return // sub_1 *sub_1_OK if input_pw ! s_password { dialog "パスワードが間違っています。", 0, titl objsel 0 return } onkey 0 HideSubWindow 1 gosub *mode_4 return *sub_1_cancel onkey 0 HideSubWindow 1 return // mode_1 *mode_1_cancel ; mode_1から会計取消 if c_anum { dialog "会計内容をすべて取り消しますか?", 2, titl if stat = 7 : return } gosub *mode_0 return *mode_1_tenkey ; mode_1 and mode_1_1テンキーのジャンプ先 temp_i = stat - tkey_clr_ID ; オブジェクトIDからテンキーのボタンを特定 objsel 0 ; フォーカスをリストビューに戻す if temp_i { ; テンキー入力をキーコードに変換 keybd_event temp_i + 47, 0, 0, 0 ; 0~9 } else { keybd_event 46, 0, 0, 0 ; Delete } return *mode_1_key_event ; mode_1でのキーイベント ; 選択アイテム取得 sendmsg hList, $100C, -1, $2 ; LVM_GETNEXTITEM LVNI_SELECTED if stat = -1 : return temp_i = stat ; 選択アイテムのINDEX ; キーコードを数字に変換 if wParam >= 48 & wParam <= 57 { ; 通常数字キー c_num(temp_i) = c_num(temp_i) * 10 + wParam - 48 } elseif wParam >= 96 and wParam <= 105 { ; テンキー c_num(temp_i) = c_num(temp_i) * 10 + wParam - 96 } elseif wParam = 8 | wParam = 46 { ; BSとDEL c_num(temp_i) = 0 } else { return } ; 選択商品の数量をリストビューに反映 temp_s = str(c_num(temp_i)) LVCOLUMS = $1, temp_i, 2, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM ; 小計を計算 c_total = 0 : c_anum = 0 repeat p_num c_anum += c_num(cnt) c_total += p_value(cnt) * c_num(cnt) loop ; 小計表示を更新 clr 2, lay_mpx, lay_mpy, lay_mpx + lay_msx, lay_mpy + lay_msy SelectObject hdc, hFont.0 pos lay_mpx, lay_mpy mes strf("小計%8d円", c_total) return *mode_1_1_key_event ; mode_1_1でのキーイベント ; キーコードを数字に変換 if wParam >= 48 & wParam <= 57 { ; 通常数字キー temp_i = wParam - 48 c_depoint = c_depoint * 10 + temp_i } elseif wParam >= 96 and wParam <= 105 { ; テンキー temp_i = wParam - 96 c_depoint = c_depoint * 10 + temp_i } elseif wParam = 8 | wParam = 46 { ; BSとDEL c_depoint = 0 } else { return } /*mode_1_1_exactly2 ; 丁度預かり*/ clr 2, lay_mpx, lay_mpy, lay_mpx + lay_msx, lay_mpy + lay_msy SelectObject hdc, hFont.0 color 255, 0, 0 pos lay_mpx, lay_mpy mes strf(" お預り%8d円 ", c_depoint) color 0, 0, 0 return *mode_1_1_confirm if c_depoint < c_total { dialog "預り金が不足しています。\nもう一度入力してください。", 0, titl return } if c_change {; 会計確定処理 ; テンキー&変更ボタン無効化 onkey 0 objenable 1, 0 ; 変更ボタン repeat 11 objenable tkey_clr_ID + cnt, 0 ; テンキー loop objprm 2, "終了" ; お釣り描画 SelectObject hdc, hFont.0 color 0, 0, 255 pos lay_mpx, lay_mpy + lay_msy * 2 mes strf(" お釣り%8d円 ", c_depoint - c_total) color 0, 0, 0 c_change = 0 return } // 会計終了処理 ; 累計販売実績データ更新 notesel d_buf_total WriteCSV 2, 1, str(int(GetCSV(2, 1)) + 1) ; 会計回数 WriteCSV 3, 1, str(int(GetCSV(3, 1)) + c_total) ; 売上金額 repeat p_num if c_num(cnt) = 0 : continue ; 数量0はスキップ SearchCSV 11, 0, p_id(cnt) ; 商品ID検索 if stat = -1 { d_buf_total += p_id(cnt) + "," + c_num(cnt) + ",0\n" ; 商品データを新たに追加 } else { WriteCSV stat, 1, str(int(GetCSV(stat, 1)) + c_num(cnt)) ; 売上数上書き } loop notesave "total.csv" noteunsel ; バッファ復帰 ; 毎時売上更新 notesel u_buf WriteCSV gettime(4) + 1, 1, str(int(GetCSV(gettime(4) + 1, 1)) + 1) ; 会計数 WriteCSV gettime(4) + 1, 2, str(int(GetCSV(gettime(4) + 1, 2)) + c_total) ; 売上 notesave "hourly\\" + f_date + ".csv" noteunsel ; 各販売データ更新 notesel d_buf WriteCSV 3, 1, str(int(GetCSV(3, 1)) + 1) ; 会計回数 WriteCSV 4, 1, str(int(GetCSV(4, 1)) + c_total) ; 売上金額 WriteCSV 9, 1, str(int(GetCSV(9, 1)) + c_total) ; 現金 ; 販売データ処理 h_buf = "売上金額," + c_total + "\n商品ID,売上数\n" ; 商品履歴データバッファ初期化(カラム) repeat p_num if c_num(cnt) = 0 : continue ; 数量0はスキップ ; 販売履歴データ作成 h_buf += p_id(cnt) + "," + c_num(cnt) + "\n" ; 販売データ書き込み SearchCSV 14, 0, p_id(cnt) ; 商品ID検索 if stat = -1 { d_buf += p_id(cnt) + "," + c_num(cnt) + ",0\n" ; 商品データを新たに追加 } else { WriteCSV stat, 1, str(int(GetCSV(stat, 1)) + c_num(cnt)) ; 売上数上書き } loop notesave "daily\\" + f_date + ".csv" ; 販売データ保存 noteunsel notesel h_buf ; 対象バッファを販売履歴データに変更 notesave "history\\" + f_date + "\\" + strf("%02d-%02d-%02d", gettime(4), gettime(5), gettime(6)) + ".csv" ; 販売履歴データ保存 noteunsel gosub *mode_0 ; メインメニュー return *mode_3_1_refund ; 返金処理 dialog "表示された内容の返金処理を行いますか。", 2, titl if stat = 7 : return ; いいえ notesel h_buf ; 販売履歴データ再指定 ; 販売履歴データ取得 r_total = int(GetCSV(0, 1)) r_pnum = notemax - 2 ; ループ回数 repeat r_pnum r_ID(cnt) = GetCSV(cnt + 2, 0) ; 商品ID取得 r_num(cnt) = int(GetCSV(cnt + 2, 1)) ; 売上数取得 loop noteunsel ; バッファ復帰 ; 販売データに反映 notesel d_buf WriteCSV 3, 1, str(int(GetCSV(3, 1)) - 1) ; 会計回数 WriteCSV 4, 1, str(int(GetCSV(4, 1)) - r_total) ; 売上金額 WriteCSV 6, 1, str(int(GetCSV(6, 1)) + 1) ; 返金回数 WriteCSV 7, 1, str(int(GetCSV(7, 1)) + r_total) ; 返金額 WriteCSV 9, 1, str(int(GetCSV(9, 1)) - r_total) ; 現金 repeat r_pnum SearchCSV 14, 0, r_ID(cnt) ; 商品ID検索 temp_i = stat WriteCSV temp_i, 1, str(int(GetCSV(temp_i, 1)) - r_num(cnt)) ; 売上数 WriteCSV temp_i, 2, str(int(GetCSV(temp_i, 2)) + r_num(cnt)) ; 返品数 loop notesave "daily\\" + f_date + ".csv" ; 販売データ保存 noteunsel ; 毎時売上データに反映 temp_i = int(getpath(r_path, 9)) + 1 notesel u_buf WriteCSV temp_i, 1, str(int(GetCSV(temp_i, 1)) - 1) ; 会計数 WriteCSV temp_i, 2, str(int(GetCSV(temp_i, 2)) - r_total) ; 売上 notesave "hourly\\" + f_date + ".csv" ; 保存 noteunsel ; 累計販売データに反映 notesel d_buf_total WriteCSV 2, 1, str(int(GetCSV(2, 1)) - 1) ; 会計回数 WriteCSV 3, 1, str(int(GetCSV(3, 1)) - r_total) ; 売上金額 WriteCSV 5, 1, str(int(GetCSV(5, 1)) + 1) ; 返金回数 WriteCSV 6, 1, str(int(GetCSV(6, 1)) + r_total) ; 返金額 repeat r_pnum SearchCSV 9, 0, r_ID(cnt) ; 商品ID検索 temp_i = stat WriteCSV temp_i, 1, str(int(GetCSV(temp_i, 1)) - r_num(cnt)) ; 売上数 WriteCSV temp_i, 2, str(int(GetCSV(temp_i, 2)) + r_num(cnt)) ; 返品数 loop notesave "total.csv" ; 累計販売データ保存 noteunsel ; 返金データ保存(ファイル移動) bcopy "history\\" + r_path, "refund\\" + r_path ; ファイルをコピー delete "history\\" + r_path ; 元のファイルを削除 gosub *mode_3_back return *mode_4_2_1_error o_error = o_sum - d_total ; 現金誤差算出 if o_error { dialog "現金誤差が" + o_error + "円発生しています。", 1, titl } ; 現金誤差書き込み notesel d_buf WriteCSV 11, 1, str(o_sum - d_total) notesave "daily\\" + f_date + ".csv" noteunsel notesel d_buf_total WriteCSV 8, 1, str(int(GetCSV(8, 1)) + o_sum - d_total) notesave "total.csv" noteunsel gosub *mode_4 return *mode_4_3_2_cancel dialog "表示された内容の返金取消を行いますか。", 2, titl if stat = 7 : return ; いいえ notesel h_buf ; 販売履歴データ再指定 ; 販売履歴データ取得 r_total = int(GetCSV(0, 1)) r_pnum = notemax - 2 ; ループ回数 repeat r_pnum r_ID(cnt) = GetCSV(cnt + 2, 0) ; 商品ID取得 r_num(cnt) = int(GetCSV(cnt + 2, 1)) ; 売上数取得 loop noteunsel ; バッファ復帰 ; 販売データに反映 notesel d_buf WriteCSV 3, 1, str(int(GetCSV(3, 1)) + 1) ; 会計回数 WriteCSV 4, 1, str(int(GetCSV(4, 1)) + r_total) ; 売上金額 WriteCSV 6, 1, str(int(GetCSV(6, 1)) - 1) ; 返金回数 WriteCSV 7, 1, str(int(GetCSV(7, 1)) - r_total) ; 返金額 WriteCSV 9, 1, str(int(GetCSV(9, 1)) + r_total) ; 現金 repeat r_pnum SearchCSV 14, 0, r_ID(cnt) ; 商品ID検索 temp_i = stat WriteCSV temp_i, 1, str(int(GetCSV(temp_i, 1)) + r_num(cnt)) ; 売上数 WriteCSV temp_i, 2, str(int(GetCSV(temp_i, 2)) - r_num(cnt)) ; 返品数 loop notesave "daily\\" + f_date + ".csv" ; 販売データ保存 noteunsel ; 毎時売上データに反映 temp_i = int(getpath(r_path, 9)) + 1 notesel u_buf WriteCSV temp_i, 1, str(int(GetCSV(temp_i, 1)) + 1) ; 会計数 WriteCSV temp_i, 2, str(int(GetCSV(temp_i, 2)) + r_total) ; 売上 notesave "hourly\\" + f_date + ".csv" ; 保存 noteunsel ; 累計販売データに反映 notesel d_buf_total WriteCSV 2, 1, str(int(GetCSV(2, 1)) + 1) ; 会計回数 WriteCSV 3, 1, str(int(GetCSV(3, 1)) + r_total) ; 売上金額 WriteCSV 5, 1, str(int(GetCSV(5, 1)) - 1) ; 返金回数 WriteCSV 6, 1, str(int(GetCSV(6, 1)) - r_total) ; 返金額 repeat r_pnum SearchCSV 9, 0, r_ID(cnt) ; 商品ID検索 temp_i = stat WriteCSV temp_i, 1, str(int(GetCSV(temp_i, 1)) + r_num(cnt)) ; 売上数 WriteCSV temp_i, 2, str(int(GetCSV(temp_i, 2)) - r_num(cnt)) ; 返品数 loop notesave "total.csv" ; 累計販売データ保存 noteunsel ; 返金データ保存(ファイル移動) bcopy "refund\\" + r_path, "history\\" + r_path ; ファイルをコピー delete "refund\\" + r_path ; 元のファイルを削除 gosub *mode_4_3 return *mode_4_4_add ; mode_4_4の追加 if a_name = "" or a_value = 0 { dialog "商品名か単価に問題があります。", 1, titl return } notesel p_buf repeat ; 商品IDが被らないように SearchCSV 1, 0, strf("%08X", s_pdcount) if stat ! -1 : s_pdcount++ : else : break loop noteadd strf("%08X", s_pdcount) + "," + a_name + "," + a_value, -1, 0 ; 商品データ書き込み noteunsel s_pdcount++ ; リストビューに反映 ; アイテム数取得 sendmsg hList, $1004 ; LVM_GETITEMCOUNT temp_i = stat ; 商品ID temp_s = strf("%08X", s_pdcount) LVCOLUMS = $1, temp_i, 0, 2, 2, varptr(temp_s) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM ; 商品名 LVCOLUMS = $1, temp_i, 1, 0, 0, varptr(a_name) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM ; 単価 temp_s = str(a_value) LVCOLUMS = $1, temp_i, 2, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM objprm 0, "" objprm 1, 0 return *mode_4_4_delete ; mode_4_4の削除 ; 選択アイテム取得 sendmsg hList, $100C, -1, $2 ; LVM_GETNEXTITEM LVNI_SELECTED if stat = -1 : return temp_i = stat ; 選択アイテムのINDEX ; 商品データ削除 notesel p_buf noteget temp_s, temp_i + 1 ; 商品データ取得 notedel temp_i + 1 ; 商品データ削除 noteunsel ; 削除済み商品データ登録 notesel rp_buf noteadd temp_s, -1, 0 noteunsel ; リストビューに反映 sendmsg hList, $1008, temp_i ; LVM_DELETEITEM return *mode_4_4_up ; mode_4_4の上へ objsel 3 ; フォーカスを戻す ; 選択アイテム取得 sendmsg hList, $100C, -1, $2 ; LVM_GETNEXTITEM LVNI_SELECTED if stat <= 0 : return ; 最上部 temp_i = stat ; 選択アイテムのINDEX ; 商品データ上へ移動 notesel p_buf noteget temp_s, temp_i + 1 notedel temp_i + 1 noteadd temp_s, temp_i, 0 ; リストビューに反映 sendmsg hList, $1008, temp_i ; LVM_DELETEITEM ; 商品ID temp_s = GetCSV(temp_i, 0) LVCOLUMS = $1 | $8, temp_i - 1, 0, 2, 2, varptr(temp_s) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM ; 商品名 temp_s = GetCSV(temp_i, 1) LVCOLUMS = $1, temp_i - 1, 1, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM ; 単価 temp_s = GetCSV(temp_i, 2) LVCOLUMS = $1, temp_i - 1, 2, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM noteunsel return *mode_4_4_down ; mode_4_4の下へ objsel 3 ; フォーカスを戻す ; 選択アイテム取得 sendmsg hList, $100C, -1, $2 ; LVM_GETNEXTITEM LVNI_SELECTED if stat = -1 : return temp_i = stat ; 選択アイテムのINDEX ; アイテム数取得 sendmsg hList, $1004 ; LVM_GETITEMCOUNT if stat <= temp_i + 1 : return ; 最下部 ; 商品データ下へ移動 notesel p_buf noteget temp_s, temp_i + 1 notedel temp_i + 1 noteadd temp_s, temp_i + 2, 0 ; リストビューに反映 sendmsg hList, $1008, temp_i ; LVM_DELETEITEM ; 商品ID temp_s = GetCSV(temp_i + 2, 0) LVCOLUMS = $1 | $8, temp_i + 1, 0, 2, 2, varptr(temp_s) sendmsg hList, $1007, 0, varptr(LVCOLUMS) ; LVM_INSERTITEM ; 商品名 temp_s = GetCSV(temp_i + 2, 1) LVCOLUMS = $1, temp_i + 1, 1, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM ; 単価 temp_s = GetCSV(temp_i + 2, 2) LVCOLUMS = $1, temp_i + 1, 2, 0, 0, varptr(temp_s) sendmsg hList, $1006, 0, varptr(LVCOLUMS) ; LVM_SETITEM return *mode_4_4_reflect ; mode_4_4の完了 writeini "system", "pdcount", s_pdcount ; 商品IDカウンター読み込み ; 商品データ反映 notesel p_buf notesave "pd.csv" noteunsel notesel rp_buf notesave "rpd.csv" noteunsel gosub *load_pd gosub *mode_4 return *mode_4_5_1_change ; パスワード変更 dialog "パスワードを変更しますか。", 2, titl if stat = 7 : return ; いいえ ; 変更を書き込み s_password = e_newpass writeini "system", "pass", s_password e_newpass = "" gosub *mode_4_5 return *mode_4_5_2_all ; 全て初期化を選択 sendmsg hButton, $F0 ; チェック確認 if stat { repeat 4 - (1 - ( s_last = s_today)), 1 - (s_last = s_today) objenable cnt, 0 ; 無効化 objprm cnt, 1 ; すべてチェック loop } else { repeat 4 - (1 - (s_last = s_today)), 1 - (s_last = s_today) objenable cnt, 1 ; 有効化 loop } return *mode_4_5_2_init ; 初期化処理 if i_today + i_ex + i_total + i_pd = 0 { dialog "初期化する項目が選択されていません。", 1, titl return } dialog "初期化したデータは元に戻せません。\n選択項目の初期化を実行しますか。\n(初期化後はソフトが再起動します。)", 3, titl if stat = 7 : return ; いいえ if i_today and s_last = s_today { ; 本日分 delete "daily\\" + f_date + ".csv" delete "hourly\\" + f_date + ".csv" deletef dir_cur + "\\history\\" + f_date deletef dir_cur + "\\refund\\" + f_date ; 開店フラグ書き込み s_opened = 0 writeini "system", "opened", s_opened ; 最終営業日書き換え temp_s = "" writeini "system", "last", temp_s } if i_ex { ; 本日分以外 notesel r_list ; 販売データ削除 dirlist r_list, "daily\\****-**-**.csv", 1 repeat stat noteget temp_s, cnt if temp_s = f_date + ".csv" : continue delete "daily\\" + temp_s loop ; 毎時売上データ削除 dirlist r_list, "hourly\\****-**-**.csv", 1 repeat stat noteget temp_s, cnt if temp_s = f_date + ".csv" : continue delete "hourly\\" + temp_s loop ; 販売履歴データ削除 dirlist r_list, "history\\****-**-**", 5 repeat stat noteget temp_s, cnt if temp_s = f_date : continue deletef dir_cur + "\\history\\" + temp_s loop ; 返金データ削除 dirlist r_list, "refund\\****-**-**", 5 repeat stat noteget temp_s, cnt if temp_s = f_date : continue deletef dir_cur + "\\refund\\" + temp_s loop noteunsel ; 最終営業日書き換え temp_s = "" writeini "system", "last", temp_s } if i_total { ; 累計販売データ delete "total.csv" } if i_pd { ; 商品データ delete "pd.csv" delete "rpd.csv" } sendmsg hButton, $F0 ; チェック確認 if stat { ; 全て delete "settings.ini" deletef dir_cur + "\\daily" deletef dir_cur + "\\history" deletef dir_cur + "\\hourly" deletef dir_cur + "\\refund" } ; 再起動 GetModuleFileName 0, varptr(temp_s), 260 ; 自分自身のファイルパスを取得 gosub *release exec "cmd /q /c \"timeout /t 2 /nobreak & start \"\" \"" + temp_s + "\"\"" ; コマンドプロンプトに実行させる end return *s_mini ; ウィンドウ最小化 sendmsg hwnd, $112, $F020 ; SC_MINIMIZE return *sub_1_key_event ; パスワード入力ボックスのキーイベントを処理 if wParam = 13 : gosub *sub_1_OK return *dummy ; ダミー(なにもおこらない) return /////////////// エラー・終了処理 /////////////// *release ; 解放処理 onerror 0 onexit 0 oncmd 0 onkey 0 ; ハンドル解放 DeleteObject hFont.0 ; 汎用フォント DeleteObject hFont.1 ; リストビューフォント return *exerror ; 予期せぬエラー ; エラーメッセージ(コンパイル制御) #ifdef _debug ; デバッグ時 dialog "" + lParam + "行目で、" + wParam + "のエラーです。", 1, titl #else ; 通常時 dialog "不明なエラーが発生しました。\nお問い合わせの際は、以下の番号をお伝えください。\nエラー番号 : " + wParam, 1, titl #endif gosub *release ; 解放処理 end end *exit if wParam ! 0 { HideSubWindow wParam ; サブウィンドウ非表示 return } *exit2 #ifndef _debug ; 通常時 if s_opened { dialog "閉店処理を行っていません。\nOptOレジ!を終了しますか。", 3, titl } else { dialog "OptOレジ!を終了しますか。", 3, titl } if stat = 7 : return #endif gosub *release ; 解放処理 end end