掲示板

BBS
アイコン設定
投稿者さん使い方
掲示板の主旨に反する投稿は掲載されません。掲載の是非は管理者が判断いたします。予めご了承願います。
K
KoYamaさん (8o4hkr6m)2024/2/25 03:41 (No.96267)削除
0180.収支関連(5)。
 実は、もう1つ、「E:\Data\生活\収支\収支2023\収支明細」というところにも、年間の分類集計方法を、別定義「減額グループ.ini、収支検算.ini、分類グループ化.ini」と、加えて、「分類集計中計.ini」。その対象にする、全て手動で登録した、トランザクションとして「トラン_2023年01月01日00時00分00秒~2023年12月31日23時59分59秒.csv」が有ります。
 この「減額グループ.ini」は、「021.クレジット、引落」「022.クレジット、購入」を、「クレジット残高」に集計する際に、加算と減算を逆にしないと、収支残高が、本来の収支残高にならないので、これに対応する定義ファイルです。
 これは、確定申告するに当たり、とある収支を、通常の「収支トラン」とは、別の視点から、その明細が解るように、別分類定義で、用意したもので、これを、その最下位の上位フォルダ名「収支明細」で判定して、独自のファイル名で、出力出来るようにしました。
 「1:"分類集計設定一覧_"、2:"年間分類集計一覧_"、3:"通年元帳_"、4:"月別年間明細_"」のように、命名しました。
返信
K
KoYamaさん (8o4hkr6m)2024/2/24 03:28 (No.96169)削除
0179.収支関連(4)。
 結局、収支の「年間元帳」は、右クリックPopUpメニューが、列項目の絞込みメニューに、使われているので、メッセージ・ハンドラ「CTranDlg::OnKeydown」から、「VK_F12」対応として、新設関数「CTranDlg::OnSaveToNewCsv」を呼出し、「CEdCommon::ComDir」を呼び出す事で、対応しました。
 実際「E:\Work\臨時\元帳_2024年02月20日14時55分34秒.csv」が、作成出来ました。
返信
K
KoYamaさん (8o4hkr6m)2024/2/23 03:41 (No.96096)削除
0178.収支関連(3)。
 収支の「年間分類集計一覧」を表示し、右クリックPopUpメニューから、汎用csvファイルへ新規保存し「E:\Work\臨時\年間分類集計一覧_2024年02月19日10時02分55秒.csv」が、出来上がりました。
 これは、新設「CEdCommon::ComDir( int nCmd, void* pArg2, void* pArg3 )」を利用して、実装しました。
 さらに、それは新設「CEdCommon::SaveCsvToPth( int nCmd, CListCtrl* pCtl )」利用で実装してあり、既存の「CEdCommon::SaveCListToTextFile」利用で実装してあり、このインターフェースが「( CListCtrl* pCtl, char* pTop, char* pCap, char* pExt )」でして、それぞれ、「nCmd」がコマンド番号、「pCtl」が「MFC」標準の「CListCtrl」クラス、「pTop」が出力ファイルの格納先フォルダのフル・パス、「pCap」がファイル名先頭文字列、「pExt」は拡張子を、指定します。
 で、それぞれ「case 1: pCap = "分類集計設定一覧_";」「case 2: pCap = "年間分類集計一覧_";」「case 3: pCap = "元帳_";」としてあります。
 元々、収支フォルダの直下、フォルダ「収支3」直下に「分類グループ化.ini」が置いて有り中の[分類定義]セクションに「001.仕事収入」から「900.その他」迄を定義してあって、当然日々作成している「収支トラン」には、提要列先頭4バイトに「nnn.」として、分類コードが指定してあって、もう1つの「分類集計中計.ini」には、例えば[015.年金合計]セクションとして、「011.年金支給 = +、012.年金払込 = +、013.年金シンコクミンネンキン = +」などが有り、この指定に従って、分類集計しています。
返信
K
KoYamaさん (8o4hkr6m)2024/2/22 03:41 (No.96004)削除
0177.収支関連(2)。
 「収支」について、第2弾です。第1弾は「0005.お堅いところでは」です。
 実は、確定申告期限迄、あと1ヶ月を切ったので、そろそやろうとしているところで、「e-Tax」を使って確定申告をするに当たり、とても不都合な事があります。
 それは、Myアプリでの「収支処理」は皆、「WindowXp版HPノートPC」で行っており、当然の事ながら、「e-Tax」を行うには、インターネットと接続する「Widnows10版NecノートPC」側で行うので、いちいち「WindowXp版HPノートPC」で維持管理している情報を、USBメモリー経由で、移動しなければなりません。
 その為に、既に「収支残高一覧」だけは、右クリックPopUpメニューから、一般のcsvファイルとして例えば、先ほどだと「E:\Work\臨時\収支残高一覧_2024年02月17日15時59分35秒.csv」に保存してあるのです。
 で、この保存機能、「CEdCommon::SaveCListToTextFile」で実装してあり、インターフェースが「( CListCtrl* pCtl, char* pTop, char* pPre, char* pExt )」なので、任意のcsvビューを、csvファイルとして、「pTop(格納先フォルダのフル・パス)」「pPre(ファイル名先頭名)」を指定すれば、それに日時名を追加して、新規保存してくれます。
 中々、使えます。
返信
K
KoYamaさん (8o4hkr6m)2024/2/21 03:34 (No.95913)削除
0176.コンピュータの科学(3)。
 で、「ComXls.cpp」「ConvCsv.cpp」「ConvCv2.cpp」に分割出来ました。
 「最終リリース」も出来て、問題なく動作しています。
 それぞれ、523行、165行、409行、になりました。余裕で「/Cmd(nnn)」が増やせます。
返信
K
KoYamaさん (8o4hkr6m)2024/2/20 03:50 (No.95798)削除
0175.コンピュータの科学(2)。
 この関数「CEdUtl::ConvCsv」は、引数が最大で、5個持てまして、つまりは、インターフェースが「( int nCmd, char* pPth1, char* pPth2, char* pPth3, char* pPth4 )」でして、後ろの4個は、抽象化してあって、つまり、デフォルトで「= NULL」と定義してあり、起動オプションの「/Cmd(nnn)」の「int nCmd」以外は、任意指定で良く、かなり汎用的に作ってあるので、お蔭様で、今では、Edコマンドが178個に迄なっています。
 そして、今後とも、増やして行きます。
 それで、何故こんなインターフェースにしたかというと、「EdUtil.dll」は、必要な場合だけ、メモリーにLoadして使う外部dllでは無く、常に「Ed.exe」とリンクして動作する内部dllで、その場合、新しく追加して、他から呼び出せるようリンク情報が必要で、このリンク情報は、全てビルドが終わった段回で、リンクしてみて、初めて、「リンクエラー情報」として、出力されるからです。
 つまり、全自動で「最終リリース」するのが、1日1回なら、完成迄2日かかる事になるからです。
 開発効率が、悪いですねぇ。
返信
K
KoYamaさん (8o4hkr6m)2024/2/18 03:40 (No.95558)削除
0174.コンピュータの科学(1)。
 Myアプリ「Ed.exe」中の、「Edコマンド」と名付けた、起動オプション「/Cmd(nnn)」付きで、機能するコードの、インプリメント・ファイルが、大きくなり過ぎで、分割しようとしています。
 実は、ソース・コードの理論の中に「スコープ」と言うのがありまして、それも、モジュールやコンポーネントのスコープ、つまり、ソース・コード・リストを眺めた時の、「見渡し加減」なのですが、どうも、堅苦し過ぎて、解りずらくて、恐縮ですが、要は、1個のインプリメント・ファイル中のソース・コード行数が、私は、経験値的に、開発言語規模にもよるのですが、解りやすいのは、800行前後迄と、認識しており、これを、超えそうになったら、または、越えたら、「スコープ」を崩さない範囲で、分割するように、心がけて来ました。
 それで、「Edコマンド」のインプリメント・ファイル「ConvCsv.cpp」を分割するに当たり、その中の中心的関数「CEdUtl::ConvCsv」の、前半では必要な時だけLoadしてリンクして使用する、外部dllの、「EdStart.dll、EdSave.dll、EdCsv.dll、EdCmd.dll」を、必要に応じてLoadしていて、中間では、それぞれの機能に合ったサブ関数を呼出し実行し、後半では、Loadしたdllを開放しているので、内部変数の扱いの都合も有り、それぞれの機能に合ったサブ関数を呼出し実行する部分だけを、切出し、新たに「ConvCv2.cpp」にしたいのです。
 関数名は「CEdUtl::DisPatchFnc」で。
 また、関数「CEdUtl::ConvCsv」以外の「ConvCsv.cpp」中関数を、コードをざっと眺める限り、結構共通性が高いので、インプリメント・ファイル名のアルベット昇順で、「ConvCsv.cpp」近くに来る共通関数郡としてやはり新設「ComXls.cpp」に、全て移動しようと思っています。
返信
K
KoYamaさん (8o4hkr6m)2024/2/17 03:33 (No.95407)削除
0173.MyPause(2)。
 機能追加した「/Cmd(178)」「CEdCommon::MyPause」では、メッセージ「少しお待ちください。3秒間待ってから先に進みます。」を表示します。
返信
K
KoYamaさん (8o4hkr6m)2024/2/16 03:38 (No.95291)削除
0172.MyPause(1)。
 一時停止機能のバッチコマンド「pause」が有ります。
 色々な使い方がありますが、良く、例えば「エクスプローラ」を起動し、続けて、他のバッチを起動したりすると、「エクスプローラ」はモードレスモードと言うか、スレッドと言うか、起動直後に、起動元へ、間を置かずに、制御が戻って来ます。それで、その後に起動した、バッチの実行機能と、「競合」を起こしてしまいます。
 それで、その「競合」を避ける為に、「一時停止コマンド(pause)」を使用します。
 ただ、これだと、バッチを使うメリットである「自動化」が、途絶えてしまいます。
 それで、3秒間ったら、一時停止が解除される、「CEdCommon::MyPause」を、外部から利用出来る「/Cmd(178)」として、組込みました。「CEdCommon::MyMessageBox」を呼び出し、利用しています。
返信
K
KoYamaさん (8o4hkr6m)2024/2/15 03:39 (No.95192)削除
0171.郵便番号簿(4)。
 実は、Text中「郵便番号」を選択したり、「都道府県、市区町村」を選択して、コマンド「Alt+Z」で、何も変化が無い場合が有り、調べたら、1つには、ドライブ[E][F]用USBメモリーが接続していなかったり、有っても、範囲指定した文字列が正しく無かったりでした。
 それで、例の「CEdCommon::CheckDriveEF」追加し、メッセージも追加して、一番長ったらしい「ドライブ[E][F]専用のUSBメモリーが、正しく接続されていません。中断します。」や、もう1つ「検索キーの指定が有りません。中断します。」。それに、さらに、もう1つとして「検索結果が、有りませんでした。終わります。」などが、出るようにしました。
 当たり前ですね。
 が、今まで、「郵便番号簿」を開いた時「on」になる、「CEdD2M::m_bOpenedZipMode」が「off」の場合に、「CEdCommon::GetZipNoOrAddr」で、処理していたコードの、中身の全てのコードを、新設の「CEdCommon::GetZipCore」に移して、「CEdCommon::CheckDriveEF」呼び出しを追加し、もう少しコードを追加するだけで、出来ました。
 良ござんした。
返信