みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
毎月の請求リストを作製しています。
簡単に例としては
テーブル(A)は顧客の基本情報
テーブル(B)は商品名、契約日、解約日、金額
になっており、AとBはともにIDのフィールドを作りリレーションしております。
今のところ、クライアント名から契約日以上解約日未満の物で月額金額の合計を月別に一覧できるようにしておりますが、
入金確認後、未入金の物があった場合の処理に困っています。
何か良い方法がありましたら、教えてもらいたいのですが、
今のところ、請求一覧でソートしたレコードを別のテーブルに全てコピーして、入金確認をしながら、
レコードを1つずつ削除していけば良いか?など考えていますが、
この2つの表をボタンで別のテーブルにコピーすることなど出来ますでしょうか?
ソートされているレコードを全て、別のテーブルにコピーして溜めておくことなどできるのかも不明です。
助けて頂けると大変助かります。
顧客ごとの提供サービスはポータルの一覧で表示しています。
検索用のフィールド→(00年)(0月)(0日)
-----------------------------------
商品名 契約日 解約日 金額
~
商品名 契約日 解約日 金額
※ここはポータルで表示しています。
-----------------------------------
合計
これとは別に
検索用のフィールド→(00年)(0月)(0日)
-----------------------------------
顧客名 商品名 契約日 解約日 合計金額(上の顧客毎のポータルの合計を表示)
~
顧客名 商品名 契約日 解約日 合計金額(上の顧客毎のポータルの合計を表示)
※ここは集計のソートで表示しています。
-----------------------------------
月総合計
を出しています。
宜しくお願いします。
環境はウインドウズ7とファイルメーカ13PROになります。
テーブルBの情報から、解約日までの毎月の請求額を出しておく計算を行っておきます。これは、割賦販売の場合と、会費の様な毎月新たに発生する場合では、全く異なる処理が必要かもしれません。
そのデータを、1顧客1商品1月を1レコードとするテーブルを作ります。その中に、べつに1顧客1入金を1レコードとするようなレコードを作れる様にしておきます。そのテーブルで、締日より過去のレコードを抽出し、それぞれの合計の差分を出せば、現在の未払い額が算出できます。
Offline
商品ごとの入金ではなく、月ごとの請求に対する入金
と考えていいのなら。。
1顧客 & ひと月
を1レコードとする別テーブルで処理すればいいのでは。
そのテーブルで、
月ごとの請求金額を集計し、
入金を引いて、未払いが有れば次月に繰り越す。
という処理が簡単に出来ますよ。
入金処理は、
入金が1〜2回程度でしたらこのテーブルでいいでしょう。
不定数の複数回ならば、別途入金テーブルを作り、その集計をすればいいですね。
Offline
Shin様、チポ様、ご教授有難うございます。
チポ様に頂きました、アドバイスのように処理を出来るようにしたいのですが、
現在、検索用フィールドに入力した、月のみ集計やポータルの集計で月の合計が出るようになっています。
これを、チポさんがおっしゃっている
※--------------------------------------※
1顧客 & ひと月
を1レコードとする別テーブルで処理
※--------------------------------------※
するためには、どのようにしたら良いのでしょうか。
現在、一月の合計を出すための、計算式を他でご教授頂きながら、設定したものになり
大変初心者の為、申し訳ございませんが、
計算式で出た値の合計を月別に保存するという考え方がわからなくなっております。
何卒、力をお貸しいただけないでしょうか。
商品ごとの入金ではなく、月ごとの請求に対する入金
と考えていいのなら。。1顧客 & ひと月
を1レコードとする別テーブルで処理すればいいのでは。そのテーブルで、
月ごとの請求金額を集計し、
入金を引いて、未払いが有れば次月に繰り越す。という処理が簡単に出来ますよ。
入金処理は、
入金が1〜2回程度でしたらこのテーブルでいいでしょう。
不定数の複数回ならば、別途入金テーブルを作り、その集計をすればいいですね。
書いた通りのテーブルを作ります。
元のテーブルとリレーション
月ごとのテーブル 元のテーブル
顧客 = 顧客
and
その月の1日の日付 >= 契約日
and
その月の末日 <= 解約日 (空白なら遠い未来の日を入力したフィールド)
(この照合は契約日、解約日の月を含みます)
これで、このテーブルでその月の集計が出来ます。
現在のテーブルの検索用のグローバルフィールド、
そのテーブルでの集計は不要になりますね。
Offline
チポさん、ありがとうございます。
この場合、現在2つテーブルがあるのですが、
解約日のフィールドがあるテーブルとid=idになるのでしょうか。
その月の1日の日付と その月の末日のフィールドを作成して、検索用のフィールドになるのでしょうか。
新しいテーブルに、配置作成するフィールドが分からず。
ご教授頂いただけますでしょうか。
無知すぎで申し訳ありません。何卒よろしくお願い致します。
書いた通りのテーブルを作ります。
元のテーブルとリレーション
月ごとのテーブル 元のテーブル
顧客 = 顧客
and
その月の1日の日付 >= 契約日
and
その月の末日 <= 解約日 (空白なら遠い未来の日を入力したフィールド)(この照合は契約日、解約日の月を含みます)
これで、このテーブルでその月の集計が出来ます。
現在のテーブルの検索用のグローバルフィールド、
そのテーブルでの集計は不要になりますね。
分かりやすいように、テーブルに名前をつけましょう。
テーブルAはここでは省きますね。
テーブルBを 契約テーブル
新たなテーブルを 請求テーブル
とします。
契約テーブルで計算フィールド・日付タイプを作り 解約日_照合 とします。
その計算式
Case ( IsEmpty ( 解約日 ) ; Date ( 12 ; 31 ; 3000 ) )
などとすると、
契約中で解約日が空白の場合には 3000/12/31 の日付が入ります。
請求テーブルのフィールドは
顧客ID
請求月初 2015/12/01 のような日付を入力
請求月末 請求月初からその月末の日付を計算入力 2015/12/31 のようになりますね。
契約テーブルとのリレーションのために、最低このフィールドが必要です。
って、
見直したら、前レスのリレーション間違えていました。
請求テーブル 契約テーブル
顧客ID = 顧客ID
and
契約月初 <= 解約日_照合
and
契約月末 >= 契約日
このように変更してください -_-
これで、
請求テーブルのレイアウトに契約テーブルのポータルを置いてみて
照合できているか確認してみてください。
とりあえずここまで。。
Offline
チポさん、ありがとうございます!感謝いたします!
照合は出来ているようですが、ポータルに照合されているサービス名が、
契約日に日付を入れると消えてしまう状態です。
リレーションが違っているのでしょうか。
宜しくお願い致します。
分かりやすいように、テーブルに名前をつけましょう。
テーブルAはここでは省きますね。テーブルBを 契約テーブル
新たなテーブルを 請求テーブル
とします。契約テーブルで計算フィールド・日付タイプを作り 解約日_照合 とします。
その計算式
Case ( IsEmpty ( 解約日 ) ; Date ( 12 ; 31 ; 3000 ) )
などとすると、
契約中で解約日が空白の場合には 3000/12/31 の日付が入ります。請求テーブルのフィールドは
顧客ID
請求月初 2015/12/01 のような日付を入力
請求月末 請求月初からその月末の日付を計算入力 2015/12/31 のようになりますね。契約テーブルとのリレーションのために、最低このフィールドが必要です。
って、
見直したら、前レスのリレーション間違えていました。請求テーブル 契約テーブル
顧客ID = 顧客ID
and
契約月初 <= 解約日_照合
and
契約月末 >= 契約日このように変更してください -_-
これで、
請求テーブルのレイアウトに契約テーブルのポータルを置いてみて
照合できているか確認してみてください。とりあえずここまで。。
質問が理解できません。
もっと詳しい状況の説明が必要ですよ。
Offline
チポさん、すみませんでした。
再度確認したところ、リレーションの指定のフィールドが間違っていました。
お手数をおかけいたします。
ポータルでの照合できました。
こちらをどのように、請求テーブルで1レコードにするには、どのようにすればよろしいでしょうか。
何度も申し訳ございません。
質問が理解できません。
もっと詳しい状況の説明が必要ですよ。
また間違いが有りました、
その訂正です。
解約日_照合の計算式
Case ( IsEmpty ( 解約日 ) ; Date ( 12 ; 31 ; 3000 ) )
これでは、解約当月の照合が出来ません。
Case ( IsEmpty ( 解約日 ) ; Date ( 12 ; 31 ; 3000 ) ; 解約日 )
と訂正してください、お詫びしてお願いいたします -_-
請求テーブルで計算フィールド・合計金額を作り、計算式
Sum ( 契約テーブル::金額 )
とします。
これでそのレコードの顧客の当月の請求額が出ます。
入金に関しては前レスで書いた通りですが、
どうしますか?
Offline
チポさん ありがとうございます。
請求は毎月1回で未払いの場合翌月にどんどん繰り越していますので、
このテーブルの処理の方法でご教授いただけますでしょうか。
宜しくお願い致します。
また間違いが有りました、
その訂正です。解約日_照合の計算式
Case ( IsEmpty ( 解約日 ) ; Date ( 12 ; 31 ; 3000 ) )
これでは、解約当月の照合が出来ません。Case ( IsEmpty ( 解約日 ) ; Date ( 12 ; 31 ; 3000 ) ; 解約日 )
と訂正してください、お詫びしてお願いいたします -_-請求テーブルで計算フィールド・合計金額を作り、計算式
Sum ( 契約テーブル::金額 )
とします。これでそのレコードの顧客の当月の請求額が出ます。
入金に関しては前レスで書いた通りですが、
どうしますか?
どこまで出来たのか書いていただかないと不安ですヨ ^^
請求テーブルで自己リレーション、
顧客ID = 顧客ID
and
請求月初 > 請求月初
請求月初の降順でソート指定
これで前回のレコードを参照できますから、
その未払いをルックアップ等で持ってこられます。
Offline
すみません。現在は
下のレイアウトのように、ポータルの合計金額が出ており、請求初月、請求月末以前の日付の解約日の物は
表示から消えるようになっております。(希望どおりの集計になっておりました。ありがとうございます。)
さらに、質問をお願いしたいのですが、
請求テーブルには、レコードが1となっているのですが、請求テーブルのレコードが増えていくものになりますでしょうか。
そもそも、認識や解釈が違っておりましたら、申し訳ございません。
初心者で理解が乏しくお手数をお掛け致しますが、宜しくお願い致します。
請求テーブル
ID[ 002 ]
請求初月[ 2015/12/1 ]
請求月末[ 2015/12/31]
ポータル内(契約テーブル)-------------------------------------------------
ID[ 002 ] 契約日[ 2014/08/1 ] 解約日[ ] 金額[ 100 ]
ID[ 002 ] 契約日[ 2014/08/1 ] 解約日[ ] 金額[ 100 ]
ID[ 002 ] 契約日[ 2014/08/1 ] 解約日[ ] 金額[ 100 ]
ID[ 002 ] 契約日[ 2014/08/1 ] 解約日[ 2016/08/01 ] 金額[ 200 ]
-----------------------------------------------------------
合計[ 500 ](契約テーブル::金額)
どこまで出来たのか書いていただかないと不安ですヨ ^^
請求テーブルで自己リレーション、
顧客ID = 顧客ID
and
請求月初 > 請求月初
請求月初の降順でソート指定これで前回のレコードを参照できますから、
その未払いをルックアップ等で持ってこられます。
そうです
請求テーブルでは、
顧客ごと月ごとの請求が有るごとにレコードを増やして行きます。
そうしないと未入金の繰越処理が出来なくなります。
請求テーブルでは、
スクリプトで月ごとのレコードをいっぺんに作成できますよ。
Offline
チポさん、ありがとうございます。何度もすみません。
こちらの方法を教えていただくことはできますでしょうか。
----------------------------------------
請求テーブルでは、
スクリプトで月ごとのレコードをいっぺんに作成できますよ
----------------------------------------
そうです
請求テーブルでは、
顧客ごと月ごとの請求が有るごとにレコードを増やして行きます。そうしないと未入金の繰越処理が出来なくなります。
請求テーブルでは、
スクリプトで月ごとのレコードをいっぺんに作成できますよ。
契約テーブルで、契約中のレコードを検索して、
そのなかから、
顧客ごとに1レコードずつ請求テーブルでレコードを作ればいいのですが。
その方法はいろいろ考えられますが、
その方法で、レコード数によっては時間がかかるかもですね。
現状で、
契約中のレコードはいくつ位有りますか?
また、その顧客数の数は?
数十とか、数万とか、大雑把でかまいませんが。。
Offline
チポさん、ありがとうございます。
顧客数のレコードは500
契約数のレコードは1000
ぐらいになります。
ご教授お願い致します。
契約テーブルで、契約中のレコードを検索して、
そのなかから、
顧客ごとに1レコードずつ請求テーブルでレコードを作ればいいのですが。その方法はいろいろ考えられますが、
その方法で、レコード数によっては時間がかかるかもですね。現状で、
契約中のレコードはいくつ位有りますか?
また、その顧客数の数は?
数十とか、数万とか、大雑把でかまいませんが。。
その位の数でしたらこんなのでいいかな。
契約テーブルで
契約中のレコードを検索
顧客IDでソート
最初のレコードから順に
前のレコードと同じ顧客IDなら、レコードを対象外に
異なれば次のレコードへ
//これで顧客の重複がなくなります
請求テーブルで
契約テーブルをインポート
全置換で請求月初に入力
これをスクリプトにします。
試されるときは、必ずバックアップを取ってからですね。
Offline
チポさん
こんなにまで、毎日親切にご教授いただき、感謝しております。
さらに申し訳ないのですが、
教えて頂いたように、スクリプト編集の項目から、スクリプトを指定しようとしていたのですが、
私には理解できず。苦戦しておりました。さらに詳しくご教授いただくことは可能でしょうか。
本当にお手数ばかりで申し訳ございません。
その位の数でしたらこんなのでいいかな。
契約テーブルで
契約中のレコードを検索
顧客IDでソート
最初のレコードから順に
前のレコードと同じ顧客IDなら、レコードを対象外に
異なれば次のレコードへ
//これで顧客の重複がなくなります
請求テーブルで
契約テーブルをインポート
全置換で請求月初に入力これをスクリプトにします。
試されるときは、必ずバックアップを取ってからですね。
ステップをざっと
レイアウト切り替え[契約テーブルのレイアウト]
検索実行[契約中を検索]
レコードのソート[顧客ID]
レコード/検索条件/ページへ移動[最初の]
レコード/検索条件/ページへ移動[次の]
Loop
If [ 顧客ID = GetNthRecord ( ID ; Get ( レコード番号 ) - 1 ) ]
レコードを対象外に
Else
レコード/検索条件/ページへ移動[次の]
End If
End Loop
レイアウト切り替え[請求テーブルのレイアウト]
レコードのインポート
全置換で請求月初を入力
これでいいかな、、
これを参考に完全なものにしてください。
スクリプトステップのヘルプをリンクしておきますね
http://www.filemaker.com/help/14/fmp/ja … tml#352660
全てのスクリプトステップの解説が有ります。
完全なものを書いて丸写しでもいいのでしょうが、
それでは後々メンテ等で困ることになると思いますので、
ラフにしました。
頑張って自分のものにしてくださいね。
分らないところはまた聞いてください。
Offline
チポさん、ありがとうございます。
毎度毎度すみません。m(_ _)m
なんとかやってみましたが、いかがでしょうか。
請求テーブルにフィールドをインポートする為に追加で契約日、解約日、金額を作製し
教えていた下記のスクリプトをボタンにしまして作成してみました。
-------------------------------------------
レイアウト切り替え[契約テーブル]
検索実行[記憶する] 処理:契約テーブル::契約日:[=]
レコードのソート[記憶する;ダイアログなし]処理:契約テーブル昇順
レコード/検索条件/ページへ移動[最初の]
レコード/検索条件/ページへ移動[次の]
Loop
If[契約テーブル::ID=GetNthRecord(契約テーブル::ID;Get(レコード番号)-1)]
レコードを対象外に
Else
レコード/検索条件/ページへ移動[次の;最後まできたら終了]
End If
End Loop
レイアウト切り替え[請求テーブル]
レコードのインポート[[現在のFM名.fmp12];追加;シフトJIS]
フィールド内容の全置換[請求テーブル::請求初月;Date(Month(Get(日付);1;Year(Get(日付))))]
--------------------------------------------
と入力しまして、
先日、教えて頂き作成した、ポータルに
インポートされた対象のレコードが表示されております。
※ポータルは自己リレーションでインポートしたレコードを表示するようになりますでしょうか?
↓
請求テーブル
ID[ 002 ]
請求初月[ 2015/12/1 ]※自動入力
請求月末[ 2015/12/31]※自動入力
ポータル内(契約テーブル)-------------------------------------------------
ID[ 002 ] 契約日[ 2014/08/1 ] 解約日[ ] 金額[ 100 ]
ID[ 002 ] 契約日[ 2014/08/1 ] 解約日[ ] 金額[ 100 ]
ID[ 002 ] 契約日[ 2014/08/1 ] 解約日[ ] 金額[ 100 ]
ID[ 002 ] 契約日[ 2014/08/1 ] 解約日[ 2016/08/01 ] 金額[ 200 ]
-----------------------------------------------------------
合計[ 500 ](契約テーブル::金額)
これで正しいでしょうか。
ご教授いただけますと助かります。
お手数をお掛け致しますが宜しくお願い致します。
所々気になる部分が・・
スクリプトステップ
スクリプト一時停止
を所々に入れて、
その時点で正しい結果になっているか確認したらいかがでしょうか。
Offline
チポさん、すみません。
おそらく、スクリプトでレコードのインポートまでは、正しくソート
出来ているとおもうのですが、インポート前までにソートされたものと
実際にインポートされたものが違うようですが、原因がわかりません。
すみませんが、ご指摘いただけますでしょうか。
宜しくお願いいたします。
所々気になる部分が・・
スクリプトステップ
スクリプト一時停止
を所々に入れて、
その時点で正しい結果になっているか確認したらいかがでしょうか。
おそらく、スクリプトでレコードのインポートまでは、
正しくソート出来ているとおもうのですが
ソートではなくて検索ですよね。
検索直後でスクリプトを止めると分かると思いますが、、
検索実行[記憶する] 処理:契約テーブル::契約日:[=]
おそらくこの検索条件が間違っているのかと。。
条件としては、
解約日が空白か、請求月以前
とすればいいのでは。
コンピ相手に「おそらく」は通用しませんよ ^^;;
Offline
[ Generated in 0.009 seconds, 7 queries executed - Memory usage: 619.27 KiB (Peak: 656.18 KiB) ]