みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になっております。質問お願いします。
(環境:Filemaker19)
顧客のポイント管理を有効期限付きでしたいのですが、現在の構成が
[テーブル]
顧客テーブル
顧客ポイントテーブル
[フィールド]
・顧客テーブル
顧客番号
ポイント所持数 (後述)
g_有効 ("有効"の値でグローバル値が入ります。)
・顧客ポイントテーブル
顧客番号
ポイント増 (ポイントが増える場合はここに記入されます)
ポイント減 (ポイントが減る場合はここに記入されます)
有効期限 (日付が入ります)
判定 (テーブル作成時の値は「有効」 get(日付)>有効期限 の場合で空白になります)
という構成です。
別テーブルで会計があると顧客番号を元に顧客ポイントテーブルにレコードを作成し、
ポイント増や、ポイント使用した場合は合わせてポイント減も記録するようにしています。
[TO]
顧客番号同士を繋ぐ 「顧客番号」
顧客番号同士とg_有効と判定を繋ぐ 「有効期限」があり、
ポイント所持数の計算は「有効期限」を使ったポイント増の合計値(顧客番号ごとの判定が"有効"のものの合計)
引くことの「顧客番号」を使ったポイント減の合計値(顧客番号ごとの合計)
としています。
【問題点】
問題として、上記のものですと有効期限が切れると自動で判定の"有効"が外れてしまうため、ポイント増分は全期間の集計ではなくなります。
使用したポイント減分は全期間引かれるため、古いレコードの有効期限が切れるとポイント所持数がマイナスになったり、実際の所持ポイント数より少なくなってしまいます。
ポイント使用した分は有効期限内であれば反映をさせたいのですが、何か良い案はございませんでしょうか?
単に、
所持ポイントの合計から、使用ポイントを引くとそうなりますよね。
先入先出法の考えで、
使用ポイントを有効期限の近いレコードから引いてゆく
と考えないとだめでしょう。
単純な計算では無理でしょうから、
スクリプトで処理を考えればいいのでは。
Last edited by チポ (2023-09-07 13:38:15)
Offline
ポイントを加えるレコードに対して、複数のポイントを減らすレコードが必要になるのでしょうね。
また、ポイントのそれぞれについて、有効期限が過ぎれば残高を無効にするレコードを作ってしまうといいのでは。
Offline
顧客テーブルの g_有効 と繋げて絞り込むのではなく、ポイントテーブルで現在有効なポイントを算出してからそれを合計した方がいいかもしれません。
・顧客ポイントテーブル
ポイント消費 (ポイント消費時、「ポイント増」のレコードに対して有効期限の古い順に消費量を記録)
有効ポイント =if(判定 ; ポイント増 - ポイント消費 ; 0)
この状態で顧客テーブルとポイントテーブルを顧客番号で繋ぐと、ポイント増合計、ポイント減合計、ポイント消費合計、有効ポイント合計を全てsumで取得出来ます。
チポさんの言うようにポイント消費時に複数のポイント増レコードに対してポイント消費を記録しなければならない場合もありますが、有効期限に間に合わず無効になってしまったポイントも自動で弾けるので各ポイント数自体は扱いやすくなると思います。
Offline
なるほど。有効期限内の古いポイントを使用するという処理ですね。
有効なものを検索してループで判定しながらでいけそうです。
助かりました!みなさまご回答ありがとうございました!
こんな感じがいいかと。
https://www.dropbox.com/scl/fi/4zkk9y27 … 3w6y4&dl=0
loop処理は使っていません。
ポイント不足時の処理も行なっています。
Last edited by Shin (2023-09-09 12:22:07)
Offline
>>Shinさん
サンプルありがとうございます!
ループ無しで処理できたのでビックリしました。
全置換でも可能ということで参考にさせていただきます!
Pages: 1
[ Generated in 0.013 seconds, 9 queries executed - Memory usage: 517.2 KiB (Peak: 522.11 KiB) ]