ラベル

2017年5月2日火曜日

なでしこ(日本語プログラミング言語) で個人管理のツールを作成しました。

個人管理ツール

目的は日々の健康管理と買物メモ、集計です。

最新の体重計や血圧計などはスマホと連携で集計他ができるようですが、
このツールは手動の測定、入力し、データを蓄積するものです。(私はこれで十分なので)

機能は
1)健康管理 日別に歩数、体重、最高血圧、最低血圧、脈拍の記録と印刷(Excel出力)。
2)買物メモ 日付、店舗毎に商品名、単価、数量、小計の記録と印刷(Excel出力)、データリスト出力(Excel出力)。

※私が使うプリンターはCITIZENサーマルレシートプリンターで用紙幅は8cmです。
Excelファイルにデータを転記して手動で印刷しますので、ご自身の環境に合わせて変更してください。


元々はLibreOffice バージョン:5.1.6.2のBaseを使って同様のツールを作り始めましたが、私のPCと相性が悪く?
散発的にクラッシュやデータ保存が出来ない、数日分のデータが消滅する、突然Javaが居ないと言い出す。
更にOpenOfficeはインストール出来ても、Javaが居ないと言うのであきらめて、「なでしこ」で作りました。
きっと、私のPCの環境が駄目なんでしょう?

環境は OS:Windows 10 Home+なでし(Ver1.563)+SQLit3+KingSoft Office 2013

Excelを開くのがKingSoft Office Spreadsheetsですが、プログラムは「エクセル起動」で動作しています。

以下に各画面とExcel雛形のスクリーショット及びなでしこプログラムを掲載いたします。


1、スクリーンショト

a)データベースのテーブル内容


b)メニュー画面


c)健康管理
画面

Excel雛形



d)買物管理
画面

Excel雛形
買物メモ

データリスト




2、「なでしこ」プログラム

#日々の管理

※※※積み木デザイナ:ここから※
※ 以下はデザインデータです。
※ コメントを削除しないようにしてください。
※ ---
※母艦とはフォーム##生成
母艦は「メインフォーム」
その可視はオフ    #非表示にする
そのクライアントW=500#数値
そのクライアントH=300#数値
そのタイトル=「処理選択」#文字列
※ ---
ラベル1とはラベル##生成
そのX=180#数値
そのY=8#数値
そのW=224#数値
そのH=32#数値
そのテキスト=「処理選択メニュー」#文字列
※ ---
ボタン1とはボタン##生成
そのX=160#数値
そのY=96#数値
そのW=160#数値
そのH=32#数値
そのテキスト=「健康データ入力」#文字列
そのクリックした時は~ボタン1__クリックした時#イベント
※ ---
ボタン2とはボタン##生成
そのX=160#数値
そのY=160#数値
そのW=160#数値
そのH=32#数値
そのテキスト=「買物データ入力」#文字列
そのクリックした時は~ボタン2__クリックした時#イベント
※※※積み木デザイナ:ここまで※


#InsertGuiParts
健康データ入力画面とはフォーム
その可視はオフ    #非表示にする
#そのXは12
#そのYは302
その幅は680
その高さは520
健康データ入力画面の背景色はウィンドウ背景色
文字書体は「MS UI Gothic」
そのテキスト=「健康データ入力画面」#文字列

健康入力画面グリッドとはグリッド
健康入力画面グリッドについて
    X=20
    Y=59
    W=620
    H=401
    親部品は健康データ入力画面
    アイテムは、『』。
    背景色は、白色。
    編集はオン
    クリックした時は~健康入力画面グリッドクリック

健康日付1コンボとはコンボ
健康日付1コンボについて
    X=30
    Y=17
    W=100
    H=20
    親部品は健康データ入力画面
    背景色は、白色。
    リスト開いた時は~健康日付1選択

健康ラベル1とはラベル
健康ラベル1について
    X=140
    Y=22
    W=20
    H=20
    親部品は健康データ入力画面
    背景色は、白色。
    そのテキスト=「~」

健康日付2コンボとはコンボ
健康日付2コンボについて
    X=160
    Y=17
    W=100
    H=20
    親部品は健康データ入力画面
    背景色は、白色。
    リスト開いた時は~健康日付2選択

健康データ検索ボタンとはボタン
健康データ検索ボタンについて
    X=270
    Y=17
    W=40
    H=20
    親部品は健康データ入力画面
    テキストは、「検索」。
    クリックした時は~健康管理データ設定

健康全選択ボタンとはボタン
健康全選択ボタンについて
    X=330
    Y=17
    W=50
    H=20
    親部品は健康データ入力画面
    テキストは、「全選択」。
    クリックした時は~健康全選択設定

健康全解除ボタンとはボタン
健康全解除ボタンについて
    X=390
    Y=17
    W=50
    H=20
    親部品は健康データ入力画面
    テキストは、「全解除」。
    クリックした時は~健康全解除設定


健康データ更新ボタンとはボタン
健康データ更新ボタンについて
    X=460
    Y=17
    W=40
    H=20
    親部品は健康データ入力画面
    テキストは、「更新」。
    クリックした時は~健康管理データ更新

健康データ印刷ボタンとはボタン
健康データ印刷ボタンについて
    X=510
    Y=17
    W=40
    H=20
    親部品は健康データ入力画面
    テキストは、「印刷」。
    クリックした時は~健康管理データ印刷

健康データ削除ボタンとはボタン
健康データ削除ボタンについて
    X=580
    Y=17
    W=40
    H=20
    親部品は健康データ入力画面
    テキストは、「削除」。
    クリックした時は~健康管理データ削除
#/InsertGuiParts

#InsertGuiParts
買物データ入力画面とはフォーム
その可視はオフ    #非表示にする
#そのXは12
#そのYは302
その幅は867
その高さは552
買物データ入力画面の背景色はウィンドウ背景色
文字書体は「MS UI Gothic」
そのテキスト=「買物データ入力画面」#文字列

パネル1とはパネル##生成
そのX=16#数値
そのY=10#数値
そのW=320#数値
そのH=62#数値
その背景色はアクティブ色
その親部品は買物データ入力画面

店名フイルタラベルとはラベル
店名フイルタラベルについて
    X=10
    Y=40
    W=30
    H=20
    親部品はパネル1
    テキストは「店名:」

店名フイルタとはエディタ
店名フイルタについて
    X=42
    Y=34
    W=70
    H=20
    親部品はパネル1
    テキストは「」
    クリックした時は~店名フイルタ選択

品名フイルタラベルとはラベル
品名フイルタラベルについて
    X=120
    Y=40
    W=40
    H=20
    親部品はパネル1
    テキストは「品名:」

品名フイルタとはエディタ
品名フイルタについて
    X=154
    Y=34
    W=70
    H=20
    親部品はパネル1
    テキストは「」
    クリックした時は~品名フイルタ選択

フイルタ解除ボタンとはボタン
フイルタ解除ボタンについて
    X=236
    Y=34
    W=70
    H=20
    親部品はパネル1
    テキストは、「フィルタ解除」。
    クリックした時は~買物GDフィルタ解除

買物入力画面グリッドとはグリッド
買物入力画面グリッドについて
    X=20
    Y=80
    W=580
    H=380
    親部品は買物データ入力画面
    アイテムは、『』。
    背景色は、白色。
    行選択はオフ
    編集はオン
    クリックした時は~買物入力画面グリッドクリック

買物日付1コンボとはコンボ
買物日付1コンボについて
    X=16
    Y=7
    W=100
    H=20
    親部品はパネル1
    背景色は、白色。
    リスト開いた時は~買物日付1選択

買物ラベル1とはラベル
買物ラベル1について
    X=124
    Y=12
    W=20
    H=20
    親部品はパネル1
    背景色は、白色。
    そのテキスト=「~」

買物日付2コンボとはコンボ
買物日付2コンボについて
    X=146
    Y=7
    W=100
    H=20
    親部品はパネル1
    背景色は、白色。
    リスト開いた時は~買物日付2選択

買物データ検索ボタンとはボタン
買物データ検索ボタンについて
    X=256
    Y=7
    W=40
    H=20
    親部品はパネル1
    テキストは、「検索」。
    クリックした時は~買物管理データ設定
    
買物全選択ボタンとはボタン
買物全選択ボタンについて
    X=350
    Y=17
    W=50
    H=20
    親部品は買物データ入力画面
    テキストは、「全選択」。
    クリックした時は~買物全選択設定

買物全解除ボタンとはボタン
買物全解除ボタンについて
    X=410
    Y=17
    W=50
    H=20
    親部品は買物データ入力画面
    テキストは、「全解除」。
    クリックした時は~買物全解除設定


買物データ更新ボタンとはボタン
買物データ更新ボタンについて
    X=480
    Y=17
    W=40
    H=20
    親部品は買物データ入力画面
    テキストは、「更新」。
    クリックした時は~買物管理データ更新

買物データ印刷ボタンとはボタン
買物データ印刷ボタンについて
    X=530
    Y=17
    W=40
    H=20
    親部品は買物データ入力画面
    テキストは、「印刷」。
    クリックした時は~買物データ印刷

買物データ削除ボタンとはボタン
買物データ削除ボタンについて
    X=600
    Y=17
    W=40
    H=20
    親部品は買物データ入力画面
    テキストは、「削除」。
    クリックした時は~買物管理データ削除

買物データリストボタンとはボタン
買物データリストボタンについて
    X=670
    Y=17
    W=80
    H=20
    親部品は買物データ入力画面
    テキストは、「リスト出力」。
    クリックした時は~買物管理データリスト


買物データ店名選択コンボとはコンボ
買物データ店名選択コンボについて
    X=690
    Y=62
    W=100
    H=20
    親部品は買物データ入力画面
    アイテムは、『』。
    背景色は、白色。
    リスト選択した時は~商品一覧設定

商品名選択グリッドとはグリッド
商品名選択グリッドについて
    X=620
    Y=98
    W=214
    H=299
    親部品は買物データ入力画面
    行選択はオフ
    アイテムは、『』。
    背景色は、白色。
    クリックした時は~商品名選択グリッドクリック

買物データ登録日付コンボとはコンボ
買物データ登録日付コンボについて
    X=690
    Y=410
    W=100
    H=20
    親部品は買物データ入力画面
    アイテムは、『』。
    背景色は、白色。
    リスト開いた時は~買物データ登録日付選択

選択商品登録ボタンとはボタン
選択商品登録ボタンについて
    X=690
    Y=443
    W=100
    H=20
    親部品は買物データ入力画面
    テキストは、「選択商品転記」。
    クリックした時は~選択商品一覧転記
#/InsertGuiParts

母艦の可視はオン
母艦の閉じた時は~フォーム閉じた時

日付設定


●ボタン1__クリックした時
    DB接続
    健康管理データ設定
    健康データ入力画面の可視はオン

●ボタン2__クリックした時
    DB接続
    買物管理データ設定
    店名一覧設定
    商品一覧設定
    買物データ入力画面の可視はオン

●日付設定
    健康日付1コンボのテキストは(今日に「-0/0/7」を日付加算)
    健康日付2コンボのテキストは今日
    買物日付1コンボのテキストは(今日に「-0/0/1」を日付加算)
    買物日付2コンボのテキストは(今日に「0/0/14」を日付加算)
    買物データ登録日付コンボのテキストは今日

●健康管理データ設定
    健康データ=「」
    健康入力画面グリッドのアイテムは健康データ
    0.1秒待つ
    「select * from kenkou where mydate>='」& (健康日付1コンボのテキストの「/」を「-」に置換) &「' and mydate<='」& (健康日付2コンボのテキストの「/」を「-」に置換) &「' order by mydate」をSQLITE3実行。
    健康データ=それ
    a=1
    健康データを反復
        もし健康データ【a,0】<>「」ならば
            健康データ【a,8】=健康データ【a,7】
            健康データ【a,7】=健康データ【a,6】
            健康データ【a,6】=健康データ【a,5】
            健康データ【a,5】=健康データ【a,4】
            健康データ【a,4】=健康データ【a,3】
            健康データ【a,3】=健康データ【a,2】
            健康データ【a,2】=健康データ【a,1】
            健康データ【a,1】=健康データ【a,0】
            健康データ【a,0】=「□」
        a=a+1
    健康データ【0,0】="選択"。健康データ【0,1】="id"。健康データ【0,2】="日付"。
    健康データ【0,3】="歩数"。健康データ【0,4】="体重"。健康データ【0,5】="最高血圧"。
    健康データ【0,6】="最低血圧"。健康データ【0,7】="脈拍"。健康データ【0,8】="備考"。
    健康入力画面グリッドのアイテムは健康データ

●健康日付1選択
    それは日付選択
    もしそれ<>「」ならば
        健康日付1コンボのテキストはそれ

●健康日付2選択
    それは日付選択
    もしそれ<>「」ならば
        健康日付2コンボのテキストはそれ

●健康入力画面グリッド変更セル取込
    s=健康入力画面グリッドのアイテムをCSV取得    #画面に入力されたデータを含む
    r=1
    c=2
    rr=健康データの表行数-1
    cc=健康データの表列数-2
    (rr)回
        (cc)回
            もし健康データ【r,c】<>s【r,c】ならば    #変更されたセルを取り込む
                健康データ【r,c】=s【r,c】
                健康データ【r,0】=「■」
            c=c+1
        r=r+1
        c=2
    r=健康データの表行数-1
    もし(健康データ【r,0】 & 健康データ【r,1】 & 健康データ【r,2】 & 健康データ【r,3】 & 健康データ【r,4】 & 健康データ【r,5】 & 健康データ【r,6】 & 健康データ【r,7】 & 健康データ【r,8】)=「」ならば
        健康データのrを配列削除        #余分な空白行を追加しない

●健康入力画面グリッドクリック
    K行は健康入力画面グリッドの行    #クリックした行
    K列は健康入力画面グリッドの列    #クリックした列
    健康入力画面グリッド変更セル取込
    s=健康入力画面グリッドのアイテムをCSV取得    #画面に入力されたデータを含む
    もしK列=0 AND (健康データ【K行,1】<>「」 OR ((s【K行,2】 & s【K行,3】 & s【K行,4】 & s【K行,5】 & s【K行,6】 & s【K行,7】 & s【K行,8】)<>「」))ならば
        もし健康データ【K行,0】=「■」ならば    #選択マーク判定
            健康データ【K行,0】=「□」
        違えば
            健康データ【K行,0】=「■」

    もしK列<2ならば
        健康入力画面グリッドの列=2    #カーソルを移動(0と1列目は入力禁止)

    もしK列=2かつ健康データ【K行,2】=「」ならば    #日付は入力必須としたい
        それは日付選択
        もしそれ<>「」ならば
            選択日はそれ
            もし(健康日付2コンボのテキスト)<選択日ならば
                健康日付2コンボのテキスト=選択日
            健康データ【K行,2】は(選択日の「/」を「-」に置換) 

    r=健康データの表行数-1
    もし(健康データ【r,0】 & 健康データ【r,1】 & 健康データ【r,2】 & 健康データ【r,3】 & 健康データ【r,4】 & 健康データ【r,5】 & 健康データ【r,6】 & 健康データ【r,7】 & 健康データ【r,8】)=「」ならば
        健康データのrを配列削除        #余分な空白行を追加しない
    健康入力画面グリッドのアイテムは健康データ
    
●健康全選択設定
    健康入力画面グリッド変更セル取込
    r=1
    (健康データの表行数-1)回
        健康データ【r,0】=「■」
        r=r+1
    健康入力画面グリッドのアイテムは健康データ    #画面に再表示
    
●健康全解除設定
    健康入力画面グリッド変更セル取込
    r=1
    (健康データの表行数-1)回
        もし健康データ【r,0】=「■」ならば
            健康データ【r,0】=「□」
        r=r+1
    健康入力画面グリッドのアイテムは健康データ    #画面に再表示

●健康管理データ更新
    健康入力画面グリッド変更セル取込
    r=1
    (健康データの表行数-1)回
        もし健康データ【r,0】=「■」ならば
            もし健康データ【r,1】=「」ならば
                健康データ登録(r)
            違えば
                健康データ更新(r)
        r=r+1
    健康管理データ設定

●健康データ登録(r)
    s=「INSERT INTO `kenkou`(`mydate`,`stepcount`,`bodyweight`,`bloodhigh`,`bloodlow`,pulse,`comment`) 
    VALUES (
    '{健康データ【r,2】}',
    '{健康データ【r,3】}',
    '{健康データ【r,4】}',
    '{健康データ【r,5】}',
    '{健康データ【r,6】}',
    '{健康データ【r,7】}',
    '{健康データ【r,8】}')」
    sをSQLITE3実行。

●健康データ更新(r)
    s=「UPDATE `kenkou` SET 
    `mydate`='{健康データ【r,2】}',
    `stepcount`='{健康データ【r,3】}',
    `bodyweight`='{健康データ【r,4】}',
    `bloodhigh`='{健康データ【r,5】}',
    `bloodlow`='{健康データ【r,6】}',
    `pulse`='{健康データ【r,7】}',
    `comment`='{健康データ【r,8】}' 
    WHERE `id`='{健康データ【r,1】}'」
    sをSQLITE3実行。

#直下のSetWindowPosの記述は、なでしこ質問掲示板の
#■5517Re[1]: 起動したエクセルを最前面表示できますか? □投稿者/ Lis -(2007/10/12(Fri) 18:58:54) を
#使わせて頂きました。 Lisさん、有難うございます。
●SetWindowPos(hW,hWIA,X,Y,cx,cy,uf) =DLL("user32.dll",
"BOOL SetWindowPos(
HWND hWnd, 
HWND hWndInsertAfter, 
int X, 
int Y, 
int cx, 
int cy, 
UINT uFlags 
)")
!HWND_TOPMOST=-1 #最前面表示を指定するための定数
!SWP_NOSIZE_NOMOVE=$3 #変更後のウインドウを移動・リサイズしないようにするオリジナル定数

●健康管理データ印刷
    オンでエクセル起動
    母艦パス&「健康管理印刷.xls」をエクセル開く
    1秒待つ
    もし「*健康管理印刷.xls*」を窓ハンドル検索=0ならば
      "タイトルに「健康管理印刷.xls」を持つプログラムが起動していません"と言う
    違えば
      1秒待つ
        SetWindowPos(「*健康管理印刷.xls*」を窓ハンドル検索,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE_NOMOVE)
    1のエクセルシート注目
    r=2
    健康データを反復
        「A{r}」へ「'{健康データ【r-1,2】}」をエクセルセル設定
        「B{r}」へ健康データ【r-1,3】をエクセルセル設定
        「C{r}」へ健康データ【r-1,4】をエクセルセル設定
        「D{r}」へ健康データ【r-1,5】をエクセルセル設定
        「E{r}」へ健康データ【r-1,6】をエクセルセル設定
        「F{r}」へ健康データ【r-1,7】をエクセルセル設定
        「G{r}」へ健康データ【r-1,8】をエクセルセル設定
        r=r+1

●健康管理データ削除
    r=1
    (健康データの表行数-1)回
        もし健康データ【r,0】=「■」かつ健康データ【r,1】<>「」ならば
            「{r}行目(id:{健康データ【r,1】})を削除しますか?」と二択。
            もし、それがはいならば
              「DELETE FROM `kenkou` WHERE `id`='{健康データ【r,1】}'」をSQLITE3実行。
              「{r}行目( id:{健康データ【r,1】})を削除しました。」と言う。
        r=r+1
    健康管理データ設定
    

●買物管理データ設定
    買物データ=「」
    買物入力画面グリッドのアイテムは買物データ
    0.1秒待つ
    s = 「select * from kaimono where」
    s = s & 「 mydate>='」& (買物日付1コンボのテキストの「/」を「-」に置換) &「'」
    s = s & 「 and mydate<='」& (買物日付2コンボのテキストの「/」を「-」に置換) &「'」
    s = s & 「 and storename like '%{店名フイルタのテキスト}%'」
    s = s & 「 and itemname like '%{品名フイルタのテキスト}%'」
    s = s & 「 order by mydate,storename,itemname」
    sをSQLITE3実行。
    買物データ=それ
    a=1
    買物データを反復
        もし買物データ【a,0】<>「」ならば
            買物データ【a,8】=買物データ【a,7】
            買物データ【a,7】=買物データ【a,6】
            買物データ【a,6】=買物データ【a,5】
            買物データ【a,5】=買物データ【a,4】
            買物データ【a,4】=買物データ【a,3】
            買物データ【a,3】=買物データ【a,2】
            買物データ【a,2】=買物データ【a,1】
            買物データ【a,1】=買物データ【a,0】
            買物データ【a,0】=「□」
        a=a+1
    買物データ【0,0】="選択"。買物データ【0,1】="id"。買物データ【0,2】="日付"。
    買物データ【0,3】="店名"。買物データ【0,4】="商品名"。買物データ【0,5】="単価"。
    買物データ【0,6】="数"。買物データ【0,7】="計"。買物データ【0,8】="備考"。
    買物入力画面グリッドのアイテムは買物データ

●買物日付1選択
    それは日付選択
    もしそれ<>「」ならば
        買物日付1コンボのテキストはそれ

●買物日付2選択
    それは日付選択
    もしそれ<>「」ならば
        買物日付2コンボのテキストはそれ

●買物データ登録日付選択
    それは日付選択
    もしそれ<>「」ならば
        買物データ登録日付コンボのテキストはそれ

●買物入力画面グリッド変更セル取込
    s=買物入力画面グリッドのアイテムをCSV取得    #画面に入力されたデータを含む
    r=1
    c=2
    rr=買物データの表行数-1
    cc=買物データの表列数-2
    (rr)回
        (cc)回
            もし買物データ【r,c】<>s【r,c】ならば    #変更されたセルを取り込む
                買物データ【r,c】=s【r,c】
                買物データ【r,0】=「■」
            c=c+1
        #単価×数量で小計を表示する
        もし買物データ【r,5】>0かつ買物データ【r,6】>0ならば
            買物データ【r,7】=買物データ【r,5】に買物データ【r,6】を掛ける
        r=r+1
        c=2
    r=買物データの表行数-1
    もし(買物データ【r,0】 & 買物データ【r,1】 & 買物データ【r,2】 & 買物データ【r,3】 & 買物データ【r,4】 & 買物データ【r,5】 & 買物データ【r,6】 & 買物データ【r,7】 & 買物データ【r,8】)=「」ならば
        買物データのrを配列削除        #余分な空白行を追加しない

●買物入力画面グリッドクリック
    K行は買物入力画面グリッドの行
    K列は買物入力画面グリッドの列
    買物入力画面グリッド変更セル取込
    s=買物入力画面グリッドのアイテムをCSV取得    #画面に入力されたデータを含む
    もしK列=0 AND (買物データ【K行,1】<>「」 OR ((s【K行,2】 & s【K行,3】 & s【K行,4】 & s【K行,5】 & s【K行,6】 & s【K行,7】 & s【K行,8】)<>「」))ならば
        もし買物データ【K行,0】=「■」ならば    #選択マーク判定
            買物データ【K行,0】=「□」
        違えば
            買物データ【K行,0】=「■」

    もしK列<2ならば
        買物入力画面グリッドの列=2    #カーソルを移動(0と1列目は入力禁止)

    もしK列=2かつ買物データ【K行,2】=「」ならば    #日付は入力必須としたい
        それは日付選択
        もしそれ<>「」ならば
            選択日はそれ
            もし(買物日付2コンボのテキスト)<選択日ならば
                買物日付2コンボのテキスト=選択日
            買物データ【K行,2】は(選択日の「/」を「-」に置換) 

    もしK列=3ならば
        店名一覧設定
        店名一覧からリスト絞込み選択。
        もしそれ<>「」ならば
            買物データ【K行,3】はそれ

    もしK列=4ならば
        商品一覧選択
        それの0を配列削除
        それからリスト絞込み選択。
        もしそれ<>「」ならば
            買物データ【K行,4】はそれ

    r=買物データの表行数-1
    もし(買物データ【r,0】 & 買物データ【r,1】 & 買物データ【r,2】 & 買物データ【r,3】 & 買物データ【r,4】 & 買物データ【r,5】 & 買物データ【r,6】 & 買物データ【r,7】 & 買物データ【r,8】)=「」ならば
        買物データのrを配列削除        #余分な空白行を追加しない
    買物入力画面グリッドのアイテムは買物データ

●買物全選択設定
    買物入力画面グリッド変更セル取込
    r=1
    (買物データの表行数-1)回
        買物データ【r,0】=「■」
        r=r+1
    買物入力画面グリッドのアイテムは買物データ    #画面に再表示
    
●買物全解除設定
    買物入力画面グリッド変更セル取込
    r=1
    (買物データの表行数-1)回
        もし買物データ【r,0】=「■」ならば
            買物データ【r,0】=「□」
        r=r+1
    買物入力画面グリッドのアイテムは買物データ    #画面に再表示
    
●買物管理データ更新
    買物入力画面グリッド変更セル取込
    r=1
    (買物データの表行数-1)回
        もし買物データ【r,0】=「■」ならば
            もし買物データ【r,1】=「」ならば
                買物データ登録(r)
            違えば
                買物データ更新(r)
        r=r+1
    買物管理データ設定
    店名一覧設定
    商品一覧設定

●買物データ登録(r)
    s=「INSERT INTO `kaimono`(`mydate`,`Storename`,`Itemname`,`unitprice`,`quantity`,`Valence`,`comment`) 
    VALUES (
    '{買物データ【r,2】}',
    '{買物データ【r,3】}',
    '{買物データ【r,4】}',
    '{買物データ【r,5】}',
    '{買物データ【r,6】}',
    '{買物データ【r,7】}',
    '{買物データ【r,8】}')」
    sをSQLITE3実行。

●買物データ更新(r)
    s=「UPDATE `kaimono` SET 
    `mydate`='{買物データ【r,2】}',
    `Storename`='{買物データ【r,3】}',
    `Itemname`='{買物データ【r,4】}',
    `unitprice`='{買物データ【r,5】}',
    `quantity`='{買物データ【r,6】}',
    `Valence`='{買物データ【r,7】}',
    `comment`='{買物データ【r,8】}' 
    WHERE `id`='{買物データ【r,1】}'」
    sをSQLITE3実行。

●買物データ印刷
    オンでエクセル起動
    母艦パス&「買物リスト印刷.xls」をエクセル開く
    1秒待つ
    もし「*買物リスト印刷.xls*」を窓ハンドル検索=0ならば
      "タイトルに「買物リスト印刷.xls」を持つプログラムが起動していません"と言う
    違えば
      1秒待つ
        SetWindowPos(「*買物リスト印刷.xls*」を窓ハンドル検索,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE_NOMOVE)
    1のエクセルシート注目
    転記日付は「」
    転記店名は「」
    転記開始行は2
    転記行は2
    r=1
    買物データを反復
        もし転記日付<>買物データ【r,2】ならば
            「A{転記行}」へ「'{買物データ【r,2】}」をエクセルセル設定
            転記行は転記行+1
            転記日付=買物データ【r,2】
        もし転記店名<>買物データ【r,3】ならば
            「A{転記行}」へ「◆{買物データ【r,3】}」をエクセルセル設定
            転記行は転記行+1
            転記店名=買物データ【r,3】
        「A{転記行}」へ買物データ【r,4】をエクセルセル設定
        「B{転記行}」へ買物データ【r,5】をエクセルセル設定
        「C{転記行}」へ買物データ【r,6】をエクセルセル設定
        「D{転記行}」へ買物データ【r,7】をエクセルセル設定
        「E{転記行}」へ買物データ【r,8】をエクセルセル設定
        r=r+1
        転記行は転記行+1
        もし転記日付<>買物データ【r,2】ならば
            「B{転記行}」へ「小計」をエクセルセル設定
            「D{転記行}」へ「=SUM(D{転記開始行}:D{転記行-1})」をエクセルセル設定
            転記行は転記行+2
            転記開始行は転記行

●買物管理データリスト
    オンでエクセル起動
    母艦パス&「買物データリスト.xls」をエクセル開く
    1秒待つ
    もし「*買物データリスト.xls*」を窓ハンドル検索=0ならば
      "タイトルに「買物データリスト.xls」を持つプログラムが起動していません"と言う
    違えば
      1秒待つ
        SetWindowPos(「*買物データリスト.xls*」を窓ハンドル検索,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE_NOMOVE)
    1のエクセルシート注目
    転記行は2
    r=1
    買物データを反復
        「A{転記行}」へ買物データ【r,1】をエクセルセル設定
        「B{転記行}」へ買物データ【r,2】をエクセルセル設定
        「C{転記行}」へ買物データ【r,3】をエクセルセル設定
        「D{転記行}」へ買物データ【r,4】をエクセルセル設定
        「E{転記行}」へ買物データ【r,5】をエクセルセル設定
        「F{転記行}」へ買物データ【r,6】をエクセルセル設定
        「G{転記行}」へ買物データ【r,7】をエクセルセル設定
        「H{転記行}」へ買物データ【r,8】をエクセルセル設定
        r=r+1
        転記行は転記行+1

●買物管理データ削除
    r=1
    (買物データの表行数-1)回
        もし買物データ【r,0】=「■」かつ買物データ【r,1】<>「」ならば
            「{r}行目(id:{買物データ【r,1】})を削除しますか?」と二択。
            もし、それがはいならば
              「DELETE FROM `kaimono` WHERE `id`='{買物データ【r,1】}'」をSQLITE3実行。
              「{r}行目( id:{買物データ【r,1】})を削除しました。」と言う。
        r=r+1
    買物管理データ設定

●店名フイルタ選択
    店名一覧設定
    店名一覧からリスト絞込み選択。
    もしそれ<>「」ならば
        店名フイルタのテキストはそれ

●品名フイルタ選択
    商品一覧フイルタ選択
    それの0を配列削除
    それからリスト絞込み選択。
    もしそれ<>「」ならば
        品名フイルタのテキストはそれ

●買物GDフィルタ解除
    店名フイルタのテキストは「」
    品名フイルタのテキストは「」
    買物管理データ設定

●商品一覧フイルタ選択
    s=「select itemname from kaimono where storename ='」 & (店名フイルタのテキスト) &「' group by itemname order by count(id) desc」
    sをSQLITE3実行。


●店名一覧設定
    「select storename from kaimono group by storename order by count(id) desc」をSQLITE3実行。
    それの0を配列削除
    店名一覧=それ
    買物データ店名選択コンボのアイテムは店名一覧

●商品一覧設定
    s=「select itemname from kaimono where storename ='」 & (買物データ店名選択コンボのテキスト) &「' group by itemname order by count(id) desc」
    sをSQLITE3実行。
    商品一覧=それ
    a=1
    商品一覧を反復
        商品一覧【a,1】=商品一覧【a,0】
        商品一覧【a,0】=「□」
        a=a+1
    商品一覧【0,0】="選択"
    商品一覧【0,1】="品名"
    商品名選択グリッドのアイテムは商品一覧

●商品一覧選択
    s=「select itemname from kaimono where storename ='」 & (買物データ【K行,3】) &「' group by itemname order by count(id) desc」
    sをSQLITE3実行。

●商品名選択グリッドクリック
    SS選択行は商品名選択グリッドの行
    もし商品一覧【SS選択行,0】<>「」ならば
        もし商品一覧【SS選択行,0】=「■」ならば
            商品一覧【SS選択行,0】=「□」
        違えば
            商品一覧【SS選択行,0】=「■」
        商品名選択グリッドのアイテムは商品一覧

●選択商品一覧転記
    sd=(買物データ登録日付コンボのテキスト)の「/」を「-」に置換 
    st=買物データ店名選択コンボのテキスト
    sr=1
    kr=買物データの表行数-1
    もし(買物データ【kr,0】 & 買物データ【kr,1】 & 買物データ【kr,2】 & 買物データ【kr,3】 & 買物データ【kr,4】 & 買物データ【kr,5】 & 買物データ【kr,6】 & 買物データ【kr,7】 & 買物データ【kr,7】)<>「」ならば
        kr=kr+1
    追加有無=0
    a=1
    商品一覧を反復
        もし商品一覧【a,0】=「■」ならば
            買物データ【kr,0】=「■」
            買物データ【kr,2】= sd
            買物データ【kr,3】= st
            買物データ【kr,4】= 商品一覧【a,1】
            買物データ【kr,6】= 1
            kr=kr+1
            追加有無=追加有無+1
            商品一覧【a,0】=「□」
        a=a+1
    もし追加有無>0ならば
        もし(買物日付2コンボのテキスト)<(買物データ登録日付コンボのテキスト)ならば
            買物日付2コンボのテキスト=買物データ登録日付コンボのテキスト
        商品名選択グリッドのアイテムは商品一覧
        買物入力画面グリッドのアイテムは買物データ    #画面に再表示
    
●DB接続
    SQLITE3自動変換=オン
    「Mydb.sqlite3」をSQLITE3開く

●DB切断
    SQLITE3閉じる

●フォーム閉じた時
    DB切断

#以上です。





0 件のコメント:

コメントを投稿