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

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

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

You are not logged in.

Announcement

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


#1 2019-09-04 17:33:15

nkmnkm
Member

年度ごとに自動採番するフィールド

こんにちは。
自動採番するフィールドでつまづいてしまい、ご教授願います。

年度(4月)で切り替わり、新たに0から採番する計算式を作りたいのです。
西暦で切り替わるパターンはうまくいったのですが、4月からスタートする方法がわかりません。
また、現在の計算式だとレコード総数でやっているため、切り替わった際に0から採番することができません。
Right ( Left ( Get ( 日付 ) ; 4 ); 2 ) & Right ( "00000" & Get ( レコード総数 ) ; 5 )

よろしくお願いいたします。

Offline

#2 2019-09-04 17:56:06

Shin
Member

Re: 年度ごとに自動採番するフィールド

Year ( Get ( 日付 )  + 275 ) -  1
で4月年度が求められます。
年度ごとのシリアル番号は、とりあえず、全体にシリアル番号を打っておきます。
年度 = 年度
シリアル > シリアル
という自己リレーションをはり、
年度 & Right ( "00000" & Count ( リレーション::シリアル ) )

ただし、レコード削除すると、それより新しいレコードに影響を与えます。

Offline

#3 2019-09-04 18:54:22

koeda
Member

Re: 年度ごとに自動採番するフィールド

1)Shinさんの示された式で年度を求め、
2)1)の年度で自己リレーション
3)Max(テーブル2::年度別シリアル)+1
で年度別シリアルを採番して格納、ではいかがでしょうか?

具体的には
計算値自動入力、既存値を置き換え、常に評価する
If ( IsEmpty ( テーブル2::年度別シリアル ) ; 0 ; Max ( テーブル2::年度別シリアル )+1 )

Last edited by koeda (2019-09-05 05:22:20)

Offline

#4 2019-09-05 06:20:52

koeda
Member

Re: 年度ごとに自動採番するフィールド

別解として、自己リレーションを使わずExecuteSQLを使う方法でも良いかもしれません。

1)Shinさんの示された式で年度を求め
2)ExecuteSQLで年度別シリアルの最大値を求め、+1の番号を自動入力

計算値自動入力、既存値を置き換える、常に評価する
Let (
  [
    ~count = ExecuteSQL ( "SELECT COUNT(\"年度別シリアル\") FROM \"テーブル\" WHERE \"年度\"=?"; "" ; ""  ; 年度 );
    ~max = ExecuteSQL ( "SELECT MAX(\"年度別シリアル\") FROM \"テーブル\" WHERE \"年度\"=?"; "" ; ""  ; 年度 )
  ];
  If( ~count=1; 0 ; ~max+1 )
)

Last edited by koeda (2019-09-05 12:46:08)

Offline

#5 2019-09-05 13:45:33

koeda
Member

Re: 年度ごとに自動採番するフィールド

すみません。#4はバグってました。0から始めたい時は以下のようにしないとダメですね。

Let (
  [
    ~count = ExecuteSQL ( "SELECT COUNT(\"年度別シリアル\") FROM \"テーブル\" WHERE \"年度\"=?"; "" ; ""  ; 年度 );
    ~max = ExecuteSQL ( "SELECT MAX(\"年度別シリアル\") FROM \"テーブル\" WHERE \"年度\"=?"; "" ; ""  ; 年度 )
  ];
  Case ( ~Count=1 ; 0 ;
  ~Count=2 ; 1 ;
  ~Max+1 )
)

Offline

#6 2019-09-09 14:22:30

nkmnkm
Member

Re: 年度ごとに自動採番するフィールド

Shin様

ご回答ありがとうございます。
いただいた方法で理想の値が取れました。
Year ( Get ( 日付 )  + 275 ) -  1
↑この計算式の+275の意味はどのような意味があるのでしょうか。


koeda様

ご回答ありがとうございます。
ExecuteSQLを利用したことがないため、完全に理解することができませんでした。
お忙しい中ご回答いただいたにも関わらず、申し訳ございません。
勉強のためにいただいた計算式を参考に試してみます。

Offline

#7 2019-09-09 15:05:26

Hiro
Member

Re: 年度ごとに自動採番するフィールド

Year ( Get ( 日付 )  + 275 ) -  1
↑この計算式の+275の意味はどのような意味があるのでしょうか。

「275」は4月1日から12月31日までの日数で、
通年不変の固定数であることに着目したソリューションです。
275日を加算した計算年が1年繰り上がれば、本年度と判断します。

Offline

#8 2019-09-09 16:54:56

Shin
Member

Re: 年度ごとに自動採番するフィールド

私の会社は6月年度ですので、184 を使っています。10月年度でしたら、92 です。
2月年度の場合(こんな会社聞いた事無いですが)のみ、31を引きます。

Offline

#9 2019-09-09 18:30:37

nkmnkm
Member

Re: 年度ごとに自動採番するフィールド

Hiro様、Shin様

ご回答ありがとうございます。
実際に組み込んで試すことで足し引きする数字の意味が理解できました。
とても参考になりました。ありがとうございました。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 519.86 KiB (Peak: 524.4 KiB) ]