初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-08-01 10:12:53

noriyutenji
Member

3つのフィールドのそれぞれの連番をリセット

よろしくお願いします。

銀行通帳の明細それぞれににユニークIDをつけて他のテーブルとリレーションさせて経理の入出金を管理してます。(ひとつの取引でひとつのレコードです。)

フィールド1 (通帳番号)
フィールド2 (ページ番号)
フィールド3 (行番号)
フィールド4 (ID (通帳番号 +ページ番号 + 行番号))

今は行番号に連番を設定して、通帳番号とページ番号は 前回の値を参照してページが変わる時や通帳が新しくなるときは、都度手入力で直してます。

今回の質問は、1ページ23行なので、行番号が23までいったら連番が1に戻り、ページ番号は1を足す、と言うことは出来ますか?
例えば、
通帳番号1、ページ番号1、行番号23の場合

(ID) 1.1.23の次のレコードは

(ID) 1.2.1

(ID) 1.2.2

(ID) 1.2.3、1.2.4,................1.2.23(最後の行)

次ページに行き

(ID) 1.3.1...

また、通帳は全部で9ページまでなので、9ページ目の21行目(最終ページは21行までなのです)の次のレコードは、通帳番号に1を足しページ番号&行番号の連番は1に戻るという。。。
例えば、
通帳番号1、ページ番号9、行番号21で通帳が繰越された時

(ID) 1.9.21(通帳繰り越し)

(ID) 2.1.1 (通帳番号2、ページ番号1、 行番号1)

(ID) 2.1.2

(ID) 2.1.3、2.1.4、2.1.5........2.1.23(最後の行)

(ID)2.2.1(次のページ)


説明が下手でスミマセン。まだまだ初心者で日々試行錯誤してますが、やればやるほど楽しくなってきてる今日この頃で、きっとやり方があるはずと思いながら、なかなか解決できず。。
次のシリアル値を設定等、トライはしてみましたがやり方が間違ってるのか。。。

バージョンはFM Pro 16(英語版...)です。。。
こんな未熟者に計算式やスクリプトのやり方アドバイス手取り足取り教えていただければと思います。

Offline

#2 2017-08-01 10:46:50

チポ
Member

Re: 3つのフィールドのそれぞれの連番をリセット

通帳は一つですか?
それとも複数口座が一つのテーブル?

Offline

#3 2017-08-01 10:54:45

noriyutenji
Member

Re: 3つのフィールドのそれぞれの連番をリセット

はい。通帳は一つです。

Offline

#4 2017-08-01 11:14:26

チポ
Member

Re: 3つのフィールドのそれぞれの連番をリセット

最初のレコードだけは手入力できますよね。

GetNthRecord ( フィールド ; Get (レコード番号) - 1 )
で直前のレコードの値が得られますから、
それから計算できるでしょう。

各フィールドは計算フィールドとしないで、
入力値の自動化で入力がいいでしょう。

Offline

#5 2017-08-01 11:49:04

noriyutenji
Member

Re: 3つのフィールドのそれぞれの連番をリセット

ごめんなさい。まだまだ初心者でおっしゃってる意味がよくわからなくて。。。
はい、最初のレコードは手入力で全然大丈夫ですが、

GetNthRecord ( フィールド ; Get (レコード番号) - 1 )を定義するのは、フィールド1とフィールド2ということですか?
シリアル番号の自動入力で、ページ(通帳)が変わった時に行番号(ページ番号)を1に戻すのはやはり無理でしょうか?

それぞれのフィールドに別々の定義が必要かと思ったのですが。。。
無知なものですみませんが、よろしくお願いします。

Offline

#6 2017-08-01 13:31:37

チポ
Member

Re: 3つのフィールドのそれぞれの連番をリセット

各フィールドごとに、計算式を設定して自動入力させるのです。

例えば、
行番号は
   Case ( GetNthRecord ( 行番号 ; Get ( レコード番号 ) - 1 ) = 21 and GetNthRecord ( ページ番号 ; Get ( レコード番号 ) - 1 ) = 9 ; 1 ;
             GetNthRecord ( 行番号 ; Get ( レコード番号 ) - 1 ) = 23 ; 1 ; GetNthRecord ( 行番号 ; Get ( レコード番号 ) - 1 ) + 1 )

最初の条件式は9ページ目の判定、2番目はそれ以外の判定です。
ページ最後の行なら1を、以外は次の番号を入力しています。

ページ番号も同様に考えて計算式を作ります。
通帳番号は、レコード番号が、
  23 * 8 + 21
ごとに1増えると考えた方が簡単でしょうかね。

Offline

#7 2017-08-01 13:55:57

Hiro
Member

Re: 3つのフィールドのそれぞれの連番をリセット

・行番号は、計算値の自動入力で、
Let([
   //#pr1=GetNthRecord(通帳番号; Get(レコード番号)-1);
   #pr2=GetNthRecord(ページ番号; Get(レコード番号)-1);
   #pr3=GetNthRecord(行番号; Get(レコード番号)-1)
];
   Case((#pr2=9 and #pr3=21)or(#pr3=23); 0; #pr3) + 1
)

・ページ番号は、計算値の自動入力で、
Let([
   //#pr1=GetNthRecord(通帳番号; Get(レコード番号)-1);
   #pr2=GetNthRecord(ページ番号; Get(レコード番号)-1);
   #pr3=GetNthRecord(行番号; Get(レコード番号)-1)
];
   Case((#pr2=9 and #pr3=21); 1; #pr2+(#pr3=23))
)

・通帳番号は、計算値の自動入力で、
Let([
   #pr1=GetNthRecord(通帳番号; Get(レコード番号)-1);
   #pr2=GetNthRecord(ページ番号; Get(レコード番号)-1);
   #pr3=GetNthRecord(行番号; Get(レコード番号)-1)
];
   #pr1 + (#pr2=9 and #pr3=21)
)

・IDは、計算フィールドで、
   通帳番号 & "." & ページ番号 & "." & 行番号

Offline

#8 2017-08-01 14:42:00

noriyutenji
Member

Re: 3つのフィールドのそれぞれの連番をリセット

すごい!!!
お二方ありがとうございました!思っていた通りのことができました!
意味もわからずコピペさせてもらいましたので、これからじっくりなぜ出来たのか学習させてもらいます。

本当にありがとうございました。また何かありましたら色々と教えてください。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 516.52 KiB (Peak: 521.05 KiB) ]