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

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

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

You are not logged in.

Announcement

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


#1 2015-12-07 11:14:22

弁当屋
Guest

計算結果の保存

いつも拝見させていただいて、大変勉強になっています。
早速ですが、当方の環境から。
やっていることはお弁当の受発注システムの開発です。
長文になりますがお付き合いいただければと思います。
当方の環境:
    OS:Win7
    FM:FM11Pro
です。現状は、
テーブル1:
   社員CD     開始日        日付[42]                弁当種[42]
   入ってるデータは
    001      2015/12/01   2015/12/01~2015/12/31   A弁当など
テーブル2:
   集計日     弁当種       注文数
というテーブルがメインで、他に社員マスタや弁当種マスタなどがあります。
社員は60名ほど、弁当の種類は6種類ほどあります。
この条件下で、弁当種ごとの集計を取るために以下のようなスクリプトを作成しました。
スクリプト:
1.変数を設定[$w_DATE;Get ( 日付 )]←注文実施日を取得しています。
2.スクリプト実行[インデックス検索処理;値:$w_DATE]←入力された注文実施日から繰り返しフィールドの繰り返し位置番号を取得します。
3.変数を設定[$Loop_IDX;値:Get ( スクリプトの結果 )]←取得したスクリプトの結果を変数へ設定します。
4.変数を設定[$w_BEN;値:ValueListItems ( Get ( ファイル名 ) ; "弁当種" )]←弁当種マスタから弁当の種類を取得します。
5.変数を設定[$IDX;値:1]←ループの初期値を設置します。
6.Loop
7.  レコード/検索条件/ページへ移動[最初の]
8.  変数を設定[$BEN_CNT;値:0]←カウンタの初期値を設定します。
9.  Loop
10.   If[テーブル1::弁当種[ $Loop_IDX ] = GetValue( $w_BEN; $IDX)]
11.    変数を設定[$BEN_CNT;値:$BEN_CNT + 1]←入力されている弁当種と弁当種マスタが同じならカウントアップする
12.   End If
13.     レコード/検索条件/ページへ移動[次の;最後まできたら終了]←ループの終了条件です。
14.  End Loop
15   スクリプト実行[「データの受取」,ファイル:「テーブル2」;引数:$w_DATE & ¶ & GetValue( $w_BEN; $IDX) & ¶ & $BEN_CNT]
16.  変数を設定[$IDX;値:$IDX + 1]
17.  Exit Loop If[IsEmpty (GetValue( $w_BEN; $IDX ))]
18.End Loop
というスクリプトです。このスクリプトが作成されているファイルはサーバ上にあってテーブル2をローカルに作成しています。
テーブル2のスクリプトでは、引数で受け取った値をキャリッジリターンごとに分けて格納していて、このスクリプトが実行されるたびに
新規レコードを作成しています。
ここで質問なんですが、テーブル2ローカルではなくテーブル1の別テーブルとして作成して行うことは可能でしょうか?
一度、テーブル1に集計用の別テーブルを作成して「フィールド設定」でテーブル1内に作成したテーブル2に対して行ったんですが
うまくいかず、苦肉の策でローカルに集計用テーブルを作成する今の方法になりました。
ですがこれだと、ローカルに集計用テーブルがないPCで実行した場合うまく動作しないのでそれの対応として
同じファイル内でできないかと思った次第です。
どなたかご教授いただけると幸いです。
当方の仕様上の制約のため、テーブル構造などの変更ができない現状がありますので
できれば、今の条件で可能な方法を探しています。
乱文・長文になってしまいましたがよろしくお願いします。

#2 2015-12-07 12:02:45

旅人
Member

Re: 計算結果の保存

初心者FMプログラマさんですよね。
長いので理解していませんけど
繰り返しをバラしてインポートして集計するのはダメだったのですか。

Offline

#3 2015-12-07 13:40:31

弁当屋
Guest

Re: 計算結果の保存

旅人様、返信ありがとうございます。
いつもお世話になります。
新しいスレを立てたので名前を変えてみました。

旅人 wrote:

初心者FMプログラマさんですよね。
長いので理解していませんけど
繰り返しをバラしてインポートして集計するのはダメだったのですか。

あのあと、概ねバラしてインポートという方法で行く方向になったんですが
日次処理の時に、弁当の注文を変更したいという要望が出ました。
そのため、確定内容でしたら私が考案した方法で大丈夫だったんですが
それを修正となると、分割したデータだけではなく元のカレンダーに収納されている
データの修正も行わなければいけなくなってしまうので処理が一層煩雑に
なってしまいました。
そこで各社員が入力する画面も管理者が修正・確定する画面も同じにして
集計だけVBライクに添え字のN番目までループを
回して集計という力技で行おうと思いまして書いたようなスクリプトになったわけです。
あのスクリプトで要望通りの機能は実現できたのですが。
ここからは、私のこだわりになってしまうのですが今の方法だと特定のPCからだけでしか
注文処理が行えないので、ローカルファイルを使わずに同じようなことが
できるんじゃないのかと思ってしまって、その方法を探している次第です。

#4 2015-12-07 13:42:59

scripter
Guest

Re: 計算結果の保存

テーブル1でなくファイル1の別テーブルとして作成し、ですよね。
ばらしてインポートでいいのでは。
日付をGet(日付)で制限しておけば、自動的に集計する日の分だけレコードができる。

#5 2015-12-07 13:45:56

弁当屋
Guest

Re: 計算結果の保存

続けて、投稿です。

・・・・・、あの~私なんだか無駄なことしてますかね?
前の処理方法の1社員1日1レコードの作成のタイミングだけ変えれば大丈夫だったんじゃないかと
今、返信を書いていてやりたいことが整理されたのか
そう思ってしまったんですが・・・・?
ただ、それをローカルを使わずにできないかという要望はあるんですが。

#6 2015-12-07 14:01:21

旅人
Member

Re: 計算結果の保存

カレンダーで修正した場合は、関連レコード移動でバラしたテーブルの
〇日のXX社員CDのレコードに移動して変数で書き換えたらいいですよね。

Offline

#7 2015-12-07 14:06:48

弁当屋
Guest

Re: 計算結果の保存

scripter様、返信ありがとうございます。

scripter wrote:

テーブル1でなくファイル1の別テーブルとして作成し、ですよね。
ばらしてインポートでいいのでは。
日付をGet(日付)で制限しておけば、自動的に集計する日の分だけレコードができる。

あ、そうですね。ファイル1の別のテーブルへということですね。
やはり、ローカルを使わずには出来なさそうですね。

#8 2015-12-07 14:10:46

弁当屋
Guest

Re: 計算結果の保存

旅人様、返信ありがとうございます。

旅人 wrote:

カレンダーで修正した場合は、関連レコード移動でバラしたテーブルの
〇日のXX社員CDのレコードに移動して変数で書き換えたらいいですよね。

この『関連レコード移動』というのがいまいち理解できないのですが。

#9 2015-12-07 14:25:27

旅人
Member

Re: 計算結果の保存

訂正したら、その日付と社員CDがそれぞれグローバルフィールドに入るように
しておいて、それらをバラしたテーブルとリレーションして、スクリプトの
「関連レコードに移動」をすると、バラしたテーブルではその日のその社員の
レコードだけが抽出されます。そこで弁当を訂正後の物に書き換えます。

Offline

#10 2015-12-07 17:01:54

弁当屋
Guest

Re: 計算結果の保存

旅人様、ありがとうございました。

旅人 wrote:

訂正したら、その日付と社員CDがそれぞれグローバルフィールドに入るように
しておいて、それらをバラしたテーブルとリレーションして、スクリプトの
「関連レコードに移動」をすると、バラしたテーブルではその日のその社員の
レコードだけが抽出されます。そこで弁当を訂正後の物に書き換えます。

なるほど、そんな方法があったんですね。
参考にしてみます。

#11 2015-12-07 18:04:08

旅人
Member

Re: 計算結果の保存

試しに作ってみたサンプル。
どうせ1日ごとの入力でしょうし、インポートを使わずに
スクリプトで新規レコードを作る方法にしてみました。
超手抜きで検証も超不十分です。
http://pupld.net/28/151207/awqu9ox5tt/index.cgi
弁当集計.fp7

Offline

#12 2015-12-08 08:39:00

弁当屋
Guest

Re: 計算結果の保存

旅人様、返信ありがとうございます。

旅人 wrote:

試しに作ってみたサンプル。
どうせ1日ごとの入力でしょうし、インポートを使わずに
スクリプトで新規レコードを作る方法にしてみました。
超手抜きで検証も超不十分です。
http://pupld.net/28/151207/awqu9ox5tt/index.cgi
弁当集計.fp7

サンプルまで作っていただきありがとうございます。
ぜひ参考にさせていただきます。
ただ、プロトタイプのプレビューが迫っているので
画面の動きを見せるために、ローカルを使用する方法で
一旦、開発しておいてその間にサンプルの解析をしてから
本格開発に備えようと思います。
なので、サンプルについてまた質問することがあると
思いますのでその時には、またよろしくお願いします。

#13 2015-12-08 08:58:09

Shin
Member

Re: 計算結果の保存

前から提示している
https://dl.dropboxusercontent.com/u/926 … 39.fp7.zip
のファイルで、月毎、週毎、カレンダー表示で入力したデータを、普通に日毎に集計するだけで良いのでは。ほぼ1テーブルで処理が終わっているので、ローカルファイルを置く必要性も無いですよ。

Offline

#14 2015-12-09 11:07:52

弁当屋
Guest

Re: 計算結果の保存

Shin様、返信ありがとうございます。

Shin wrote:

前から提示している
https://dl.dropboxusercontent.com/u/926 … 39.fp7.zip
のファイルで、月毎、週毎、カレンダー表示で入力したデータを、普通に日毎に集計するだけで良いのでは。ほぼ1テーブルで処理が終わっているので、ローカルファイルを置く必要性も無いですよ。

こちらのリンクも参考にさせていただきます。
ありがとうございました。

#15 2015-12-09 11:22:00

弁当屋
Guest

Re: 計算結果の保存

返信をくださった皆様、ありがとうございました。
今現在、弁当受発注システムはユーザープレビューなども
近いため当初の予定通り、繰り返しフィールドで入力・修正を
行い集計時に、1件ごとのレコードに分割する方法で
ユーザープレビューは乗り切ることになりました。
ただ、今回お教えいただいた方法の方が断然効率がいいのは
いううまでもないので必ず活かしたいと思います。
ユーザープレビューは今回が初めてなので、帳票周りの仕様も
決まっていない状況です。ですのでおそらく修正画面、さらにその他の部分で
要望が上がってくると思うのでその時の代替案(本当はこちらが本命ですが)
として提案していこうと思います。
そうすれば、解析する時間も開発する時間も稼げますので。
今回は、たくさんの返信ありがとうございました。

追伸:
  別のことで、また質問がありますので別スレを立たせていただきます。
  また、いいアイディアをいただければと思います。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 10 queries executed - Memory usage: 557.32 KiB (Peak: 578.23 KiB) ]