過去の桐井戸端BBS (桐ver.9)
17881 現金収支フォームでグループ値追加で入力するときに前日の残金の値を入れたい NAX 2002/11/07-19:40
 現金収支フォームがあります。
フォームヘッダには、グループ項目の(日付)、テキスト項目の(前日繰越額)があります。
明細部には、(入金)(支出)(残金)の項目があり、
(残金)の項目には#直前値([残金],[前日繰越額])+[入金]-[支出]とした計算項目を立ててあります。
グループ値追加で入力する時に、(前日繰越額)に前日の残金の値を、入れたいのですが。
どうすればよいのでしょうか。よろしくお願いします。

17884 Re:1つ前のレコードの取得 たま 2002/11/08-07:56
記事番号17881へのコメント
NAXはじめまして
「たま」といいます。
[No]という項目を追加してください。
その[No]に#連番を指定するか又は一括orイベントで
計算するようにして番号を振ってください。
この[No]の&最大値を取得し、取得した値が最終番号です。
よって、位置指定で、最大値-1を指定すれば最終行より1行前のデータが取得できると思います。


17895 Re:1つ前のレコードの(値の)取得 宮城 2002/11/09-02:39
記事番号17881へのコメント
NAXさん、こんばんは。

関数「直前値」でいかがでしょうか?

17896 Re:1つ前のレコードの取得 今村 誠 2002/11/09-13:04
記事番号17881へのコメント
NAXさんこんにちは
>グループ値追加で入力する時に、(前日繰越額)に前日の残金の値を、入れたいのですが。

グループ項目をなくして、明細だけのフォームに変えてはいかがでしょうか
フォーム開始で日付順に並び替えてコマンドボタンで、最終レコードにジャンプして
手続き実行のイベントファイルに明細番号設定で中央に位置するように表示させて
終端レコードにジャンプすると1行上の最終レコードには前日の残高が計算式の通りに表示されると思いますが。

仕訳日記帳や現金出納帳もそのような形式のバインダー式のが多いように思います。

17902 Re:前日残高の表示 悲しげ 2002/11/09-19:41
記事番号17881へのコメント
NAXさんのやりたいことを想像するに、現金収支の入力を日付毎に行いたい。
そのために、日付(本日)をグループ項目とするフォームにおいて、
グループ追加として入力していきたいので、
前日の最終残高を(このグループ項目ありフォームの)ヘッダ部に表示させたい、
と云うことだと受け止めました。
とすれば、結論から云うとこれはかなりの力技(ちからわざ)
を駆使しないと難しいんじゃないでしょうか?
(つーか、私には簡単に実現できる方法を思いつかない)

一番簡単な方法は、(17896で今村さんが仰ったような)一覧表フォームを使うか、
または単なる表形式編集でもって、要するに前日の明細データを表示させて、
その後ろに本日入力データを行追加で入力していくことだと思います。
いえ、既にその方法でやっているのだが、もっとカッコよく
やりたいと云うことなのでしたら、ハードルは意外に高いような気がします。

この件に関する力技は、アックンと云う方が得意そうですが、
でもあの方は数ヶ月に一回くらいしか登場しないからなぁ。(^^;)

17917 Re:1つ前のレコードの取得 アックン 2002/11/10-23:58
記事番号17881へのコメント
長文なので分けます。

どうもです。んでは、オホーツクのトド改めゴマちゃんこと悲しげさん御指名の力技でいきます。(^^;

表とフォームの定義とイベントを最後に書いておきますが、
けっこうご自分で作るのは面倒でしょうから、
【多遊】さんのウェブサイトにアップしましょうか? >おる
って、どうやってアップすんだろ。(^^;

さて、たちまちムツカシイ処理が2点あります。
1.前グループの残高をどうやって求めるかにゃ。(必ずしも最新のグループとは限らないんだもんね。)
2.置換するタイミングをうまくとれるかにゃ。(残高は置換しなければ最新の値に更新されないんだもんね。)
(どうも緊張感がないな。)

1の処理方法A:グループ追加中に日付が入力されるので→多重化した表の方で前日の日付を検索する
     →そのレコードの残高を取得する

1の処理方法B:日付入力後に明細部のダミー項目(非表示)に値を入れてグループ追加モードを終了し、
     いったんレコードを確定する→自動的に並べ替える→前レコードの残高を取得する
     →行訂正なりで明細部をあらためて入力する

今回はAの方法でいってます。
(Bの方が易しそうだし、速度も有利そうなんだけど、もうAでいっちゃったんだもんね。)

2の処理方法C:たちまち思いつくところに置換を入れてみた。(^^;
レコード数が多くなるほどスピードが遅くなりそうです。
ただ最新の日付のときは置換の回数を減らすことができそうですから、若干軽くすることは可能かと。
(↑この置換を減らす処理は今回書いていません。すみません。)

さて、ぐだぐだ言うのはこれくらいにして、たちまちグループ追加だけ書いてあります。
実際にはグループの移動やらなにやらにも対応させることになるわけで、うーん、処理速度が追いつくんだろうか。(^^;

(定義の記述に続く)
17918 Re:1つ前のレコードの取得 アックン 2002/11/10-23:59
記事番号17881へのコメント
(続きです)

(1)"現金出納帳.tbl"の定義
表を編集モードで開く→メニューの「行操作」→「索引定義」
→「新規作成」(ボタン)→「索引」パネルが開くので、以下を登録。

「索引名」:日付昇順 と入力してください。
「登録時に並べ替え条件も作成する」:ON(チェックマーク入れる)
「整列項目」(主整列項目):日付
「整列順」:昇順

(2)一覧表フォームの定義
メニューの「書式」から「オブジェクトの属性」パネルを開き、以下を登録。

・フォーム
(「オブジェクトの属性」をフォームにするには、フォーム定義画面の白い余白部分をクリックします。)

「編集対象表」(タブ)の
「編集対象表」:現金出納帳.tbl

「表の操作」(ボタン)→「表の操作」パネルが開くので以下を登録。
「開始条件種別1」:「索引」
「条件名1」:日付昇順

「イベント」(タブ)の
「フォーム開始」、「フォーム終了」、「グループ追加終了」をON。
「イベント」(タブ):現金出納帳.kev

フォームヘッダ部
・u日付
「グループ項目」(タブ)→「ソース」:[日付]   (この項目のデータタイプは日時型)
「編集」→「日時型の表示範囲」:年月日

・t1
「テキスト」(タブ)→「ソース」:&秒    (&秒は組み込み変数名)
ここに前日残高(繰越金額)を表示します。

・bグループ追加
コマンドボタン
「オブジェクトの属性」パネルの「イベント」(タブ)の
「マウスイベントを使用する」をON(チェックマーク入れる)、
「マウス左クリック」をON。

このコマンドボタンをクリックしてグループ追加することにします。
グループ操作バー上のグループ追加アイコンは使いません。

フォーム明細部
・t入金   「テキスト」(タブ)→「ソース」:[入金]   (項目)
・t出金   「テキスト」(タブ)→「ソース」:[出金]   (項目)
・t残高   「テキスト」(タブ)→「ソース」:[残高]   (項目)
・t仮残高  「テキスト」(タブ)→「ソース」:[仮残高]   (項目)

(3)イベントファイル 現金出納帳.kev の定義

名札 メイン
  &秒 = 0 , \
  &STR = ""
  var 固有 , 日時 { &日付 }
  var 固有 , 整数 { &表[2] , &end }

手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
  &表[1] = #table
  多重化
  &表[2] = #table
  並べ替え 索引名 = "日付昇順"
  編集表 &表[1]
手続き定義終了

手続き定義開始 フォーム::フォーム終了()
  メソッド呼び出し @フォーム.更新モード設定( 0 )
  グループ選択解除
  &秒 = 0
  置換 [残高]
手続き定義終了

手続き定義開始 フォーム::グループ追加終了(長整数 &モード)
  call ( &モード=1 ) 前日残高取得()
手続き定義終了

手続き定義開始 bグループ追加::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
  メソッド呼び出し @フォーム.更新モード設定( 0 )
  グループ選択解除
  &秒 = 0
  置換 [残高]
  グループ選択
  メソッド呼び出し @フォーム.更新モード設定( 36 )
手続き定義終了

proc 前日残高取得()
  メソッド呼び出し @u日付.グループソース値取得( &日付 , 0 )
  編集表 &表[2]
  &STR = ">d"""+#日付( &日付 , 1 )+"""
  ジャンプ 行番号=先頭
  検索 ↓ , [日付]_&STR , 終了状態 = &end
  if( &end=1 )
    ジャンプ 行番号=前行
  else if( &end=-1 )
    ジャンプ 行番号=最終
  end
  &秒 = [残高]
  編集表 &表[1]
end
**---------------------- 以上でっす
             アックン
17920 Re:1つ前のレコードの取得 アックン 2002/11/11-07:49
記事番号17881へのコメント
さらに続きです。
表の定義を書き忘れてました。どうもすみません。

項目名:日付   データ型:日時   編集モード:計算(←[日付]にはなくてよかったかも)
項目名:入金   データ型:通貨または数値   編集モード:計算
項目名:出金   データ型:通貨または数値   編集モード:計算
項目名:残高   データ型:通貨または数値   項目計算式:#直前値([],0)+[入金]-[支出]
項目名:仮残高  データ型:通貨または数値   項目計算式:#直前値([],&秒)+[入金]-[支出]

アックン(=^・^=)

戻る