みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になります。
例えばユーザが3名おり、それぞれ以下のようにシリアルナンバーを付けたいです。
A20001(Aさん)
B20001(Bさん)
C20001(Cさん)
A 20 001と分けて、Aがユーザ頭文字、20が西暦、001が連番となります。
AさんはスタートがA20001となり、A20002、A20003となります。
2021年の1月1日以降はA21001となり、A21002、A21003という風にしたいです。
ちなみに、各ユーザがログインする毎に該当するユーザのレコードのみ、ソートをかけるようにしております。
どのような方法が可能でしょうか?
Offline
レコードを削除した時、シリアルナンバーがどうなるのか、によって色々と変わりますが。
レコード削除がない、または、削除されたレコードは無視されシリアル番号は詰められる、という動きでしたら、
普通にシリアル番号をもたせるフィールド、作成日付より年を取り出したフィールド、作成アカウント名のフィールド、を作ります。次の自己リレーションを張ります。
作成年 = 作成年
作成者 = 作成者
シリアル ≧ シリアル
作成者 & 作成年 & Right ( "000" & Count ( リレーション::シリアル ) ; 3 )
という式で求められます。
Offline
Shinさん
返信ありがとうございます。
作成者 & 作成年 & Right ( "000" & Count ( リレーション::シリアル ) ; 3 )
こちらなんですが、A20000からスタートし、新規レコードをしてもA20000になります。
確認なんですが、「入力値の自動化」の計算式に入力するんですよね?!
後、( リレーション::シリアル ) を( シリアル )に変更したら、
A20001からスタートし、その後もA20001でした。
どこか問題があるんでしょうか?
Offline
それでもいいのですが。自動入力にするとタイミングで一つ前のシリアルになります。説明が面倒なので、サンプル見てください。対策してあります
https://www.dropbox.com/s/kdfjet8vpdxon … 2.zip?dl=0
Last edited by Shin (2020-07-01 11:13:23)
Offline
Shinさん
サンプルファイルありがとうございます。
実際にサンプルを見ながら、自身が作ったモノと比べております。
そこで気付いたのですが、Shinさんに作って頂いたファイル内にある「テーブル 2::serial」フィールドに該当するフィールドが、私のところでは何も値が入らない事に気付きました。
本来、「テーブル 2::serial」フィールドは「admin」と「adminb」で新規レコードをそれぞれ作った時、最初は何も値が入りませんがその後はそれぞれ「1」と「2」が入るようになっていますが、わたしの所では何も入って来ません。
何度も何度も見直しているのですが、どうもそこがおかしい感じです。
何が原因でしょうか?
Offline
Sinさん
追記です。
念の為に「テーブル 2::作成者」と「テーブル 2::作成年」フィールドに該当するフィールドも確認しましたが、二つとも値が入っておりません・・・。
これでは自己リレーションが成り立ちませんよね・・・。
「Count ( テーブル 2::シリアル )」に該当するフィールドも確認の為にレイアウト上に出してみたのですが、こちらがずっと「1」のままなのでおかしいとは思っていました。
Offline
Shinさん
別件で質問をさせて頂いた後、こちらを確認すると見事に出来ました!!
計算フィールドですと、どうしても過去のシリアルまで置き換わってしまうので、可能であれば自動入力が希望です。
となると、ルックアップの方が良いかもなんで、色々試してみます。
本当にありがとうございます!!
Offline
レコードの削除を行わない運用を考えると、計算フィールドでも支障無くなりますよ。
Offline
shinさん
計算フィールドですと、どうしても元々入っているレコードに対してまで影響されますよね?!
それですと正直困るので・・・。
Offline
社内の運用では、計算フィールドで顧客ごとシリアルをふっていますが、一切レコード削除を許していないので全く困っていませんが。
自動入力で設定するのでしたら、リレーションで最終レコードを探して、それから加工、という処理を行えばいいです。ただし、これも最終レコードが削除された際には、その削除されたレコードと同じシリアルを新規レコードに与えることになるので、厳密には影響されてしまいますよ。それも排除するには、レコード削除を許さないか、ユーザーごとに最終シリアルを管理するテーブルを作ることになります。
ルックアップを使うと、別の用件で再ルックアップをしてしまったりすると、再設定されてしまう可能性があります。
Offline
Shinさん
社内の運用では、計算フィールドで顧客ごとシリアルをふっていますが、一切レコード削除を許していないので全く困っていませんが。
実際にShinさんもこちらの方法で運用されているんですね。
それなら、なおさら安心です。
私自身もレコード削除は一切しないように考えておりますが、一部レコードはどうしても古いシリアルナンバーを活かしたかったので、計算フィールドにしてしまうとマズイなぁ~と思っています。
自動入力で設定するのでしたら、リレーションで最終レコードを探して、それから加工、という処理を行えばいいです。
なるほど、最終レコードを探してからの加工ですね。
それなら私でもなんとか出来そうです。
ただし、これも最終レコードが削除された際には、その削除されたレコードと同じシリアルを新規レコードに与えることになるので、厳密には影響されてしまいますよ。それも排除するには、レコード削除を許さないか、ユーザーごとに最終シリアルを管理するテーブルを作ることになります。
なるほど、どうしてもレコードを削除しなければならない場合、最終シリアルを管理するテーブルがわざわざいる訳ですね。
今のところ、レコード削除はする必要無いと考えておりますので、もしどうしても必要になった場合に考えてみます。
ルックアップを使うと、別の用件で再ルックアップをしてしまったりすると、再設定されてしまう可能性があります。
なるほど、それはそれで危険ですね・・・。
こちらは止めておきます。
本当にありがとうございます。
正直、今回はお手上げと思っていましたが、無事にやりたい事が出来そうです。
また、分からなくなったら質問させて頂きます。
Offline
Shinさん
またまた困った事がおこりました。
例えば、A20001というシリアルナンバーがついたレコードを複製した場合、やはり同じシリアルナンバーになってしまうんですね・・・。
前回のレコードと同じレコードの内容を一部変えて利用するのは度々ありますので、どうしたものかと思っています。
何か良いアイデアはありますか?
Offline
自己レスです。
スクリプトで出来ました!!
簡単に説明すると、複製した後対象フィールドに対して教えて頂いた計算式を「フィールド設定」で置き換えると出来ました。
お騒がせしました。
Offline
Pages: 1
[ Generated in 0.012 seconds, 7 queries executed - Memory usage: 552.68 KiB (Peak: 573.59 KiB) ]