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

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

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

You are not logged in.

Announcement

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


#1 2016-01-13 09:00:11

弁当屋
Guest

会社独自の休みの設定の仕方

いつもお世話になります。弁当予約システムを開発しています弁当屋でございます。
今回の相談は、タイトルにもあるように会社独自の休みの設定の仕方について
アイディアをいただきたいと思い投稿しました。
まずは、当方の環境から
  OS:Win7 FM:ファイルメーカー11Pro
です。
入力は、7×6のカレンダー状に表示された画面で弁当の入力をするようにしています。
現在、土曜日と日曜日の入力ができないようにすることはできたのですが
会社独自の休みや祝日なども入力できないようにしたいと思っています。
一応、休日テーブルのようなものを持って休日の入力をすることまでは
思いつくのですが、それを入力画面に反映させる方法が皆目見当がつかない
状態です。
何か、良い方法があればご教授いただきたいと思います。

#2 2016-01-13 13:28:41

旅人
Member

Re: 会社独自の休みの設定の仕方

>土曜日と日曜日の入力ができないようにすることはできたのですが
これと同様に日付を条件にしたらいいのでは?

Offline

#3 2016-01-13 14:50:47

Hiro
Member

Re: 会社独自の休みの設定の仕方

ほぼ同じようなテーマがご近所スレで進行中ですが、サンプルを.fmp12にしてしまったので残念。
バージョンアップは難しいですか?
「予定・予約(主に予約)管理についてお願いいたします。」https://fm-aid.com/bbs2/viewtopic.php?id=3962

Offline

#4 2016-01-14 09:00:50

弁当屋
Guest

Re: 会社独自の休みの設定の仕方

旅人様、返信が遅くなりました。いつもお世話になります。

旅人 wrote:

>土曜日と日曜日の入力ができないようにすることはできたのですが
これと同様に日付を条件にしたらいいのでは?

なんとか、出来ました。
最初、カレンダー状に作成されている繰り返しフィールドに対して
どうすればいいのか、さらに休みが判定できたとしてそのフィールドの塗りつぶし色や
文字色を条件付き書式を使って変更するにはどうすればいいかかいもく見当も
つかなかったのですが、参考にしたサンプルなどを解析してなんとか完成させることができました。
入力できないようにするには、繰り返しフィールドの『OnObjectEnter』に
休日を判定するスクリプトを入れて、条件付き書式の変更については
判定用の繰り返しフィールドを作成して、それを見て変更するようにしたところ
こちらが意図したとおりの動きをしてくれました。
ありがとうございました。

#5 2016-01-14 09:15:30

弁当屋
Guest

Re: 会社独自の休みの設定の仕方

Hiro様、返信が遅くなりました。いつもお世話になります。
なにやら他のスレッドで大変そうですね。

Hiro wrote:

ほぼ同じようなテーマがご近所スレで進行中ですが、サンプルを.fmp12にしてしまったので残念。
バージョンアップは難しいですか?
「予定・予約(主に予約)管理についてお願いいたします。」https://fm-aid.com/bbs2/viewtopic.php?id=3962

バージョンアップは正直難しいですね。社内全体に影響を及ぼすことになりかねないので。
実は、こちらのそれも見ておりました。その中で休日の入力可・不可について書かれていたので
ぜひ、サンプルを拝見したかったんですが拡張子が『fmp12』だったので
『あ~、無理だ~』と残念に思っておりました。
実は、この弁当システムのベースはHiro様が公開してくださった『ToDoカレンダv2.fp7』だったり
するのでぜひ拝見したかったのですが。
ただ、いろいろと試行錯誤をして何とかこちらが意図している動きにすることが
出来ました。あとで詳しく書きたいと思いますが
出来てみると意外と簡単にできてしまって、悩んでいた時間はなんだったんだろうと
思っています。
いろいろとご助言ありがとうございました。

#6 2016-01-14 09:35:50

弁当屋
Guest

Re: 会社独自の休みの設定の仕方

いろいろとご助言いただきありがとうございました。
投稿した質問が何とか解決できましたので、同様のお悩みをお持ちの方の
一助になればと思い、結果を投稿したいと思います。

最初に当方の環境ですが、工場内のお弁当の予約システムを作成しています。
入力は、繰り返しフィールドを7×6のカレンダー状に配置して日々のお弁当の
注文を入力するシステムです。
その中で、工場が休日の時に入力ができないようにならないかという要望の元
タイトルのような質問を投稿させていただきました。
そして試行錯誤の末完成させることができました。
方法としては、これが正しいのかわかりませんが
当方の仕様として、前月に次月の注文の初期値を設定する仕様になっているんですが
そのタイミングで、休日判定用の繰り返しフィールドにフラグを立てるようにしました。
そして、入力フィールドの『OnObjectEnter』にフラグを判定するスクリプトを設定することで
完成させることができました。
これにより、休みの日と判定された日の条件付き書式の判定も簡単になり完成をさせることが
出来ました。
以上です。なかなかうまく説明ができませんでしたが
ご助力いただいた方々への解決報告として投稿させていただきました。
ありがとうございました。

#7 2016-01-14 21:46:35

Shin
Member

Re: 会社独自の休みの設定の仕方

まだご覧になっていますか。
前回のサンプルに、個人毎の注文画面を追加してみました。非常にシンプルなファイルになっています。Hiroさんとは全く異なる手法です。
休日の判断には、カスタム関数を使っています。ここを別テーブルを参照して、という方法への変更も簡単です。
一部、FM12以前の制限で、汎用でない部分が有りますが、こんな事も出来る、という事で参考になさってください。
https://www.dropbox.com/s/ra94kmjurv1hq … 7.zip?dl=0

Last edited by Shin (2016-01-14 21:48:19)

Offline

#8 2016-01-15 14:59:56

弁当屋
Guest

Re: 会社独自の休みの設定の仕方

Shin様、いつもお世話になります。
わざわざ、サンプルまでヴァージョンアップしていただきありがとうございます。

Shin wrote:

まだご覧になっていますか。
前回のサンプルに、個人毎の注文画面を追加してみました。非常にシンプルなファイルになっています。Hiroさんとは全く異なる手法です。
休日の判断には、カスタム関数を使っています。ここを別テーブルを参照して、という方法への変更も簡単です。
一部、FM12以前の制限で、汎用でない部分が有りますが、こんな事も出来る、という事で参考になさってください。
https://www.dropbox.com/s/ra94kmjurv1hq … 7.zip?dl=0

サンプル拝見させていただきました。
なるほど。こういった方法もあるんですね。1社員1日1レコードのテーブルを用意しなくても
『弁当注文台帳』というテーブル1つでカレンダー表示も集計もできているのはすごいですね。
当方には、ファイルメーカーアドバンスがないのでカスタム関数の『workday』が
いまいち理解ができませんがテーブルを使わずに元日や成人の日が休日扱いになり
入力制限もかけられているのもすごいですね。
これをテーブル参照型に変えるには、休日マスタのようなテーブルを作って
『カレンダー』と『休日日付』をリレーションして条件付き書式で塗りつぶし色や文字色を変更したり
スクリプト『注文』の『Else If』の判定を『workday』から休日マスタとの比較に
変更する感じでしょうか?
あと、『弁当種一覧_name』や『gs_弁当種_ordername』のところで『Choose 』関数を使って
弁当種の名称を設定しているようですが、これをマスタからの参照にすることも
可能ですよね。
例えば、『弁当種一覧_name』のところで
『GetValue ( ValueListItems ( Get ( ファイル名 ) ;"弁当種一覧" ) ; 弁当種一覧 )』とすれば
弁当マスタから名称が参照できますか?
さらに今回、より理解できたのは毎日の弁当の注文をどうやって保存しているのかがいまいち理解できて
いなかったんです。
どのサンプルを見ても、毎日の注文を入力するフィールドは『計算[42] 非保存]となっていて
「なぜ?これで毎日の注文が記録されるんだ?」と思っていたんですが
これは、『弁当種_order』の計算式にもあるように『Case ( 注文日付[1] = カレンダー ; 弁当種[1] )』と
することで、月が前後に送られるたびに『弁当種_order』に『弁当種[1]』を書き込んでいたんですね。
そうすることで、Hiro様のサンプルのように毎日の注文データを別テーブルに持つ場合は、
カレンダーをコントロールするテーブルに社員数分のデータだけ作って毎日の注文データは
別テーブルに持てばいいという方法になるわけですね。なるほど。
ただ今回のサンプルのように、1つのテーブルで毎日の注文データを管理してカレンダーのコントロールも
同時に同じテーブルでやってしまう方法もあるということなんですね。すごいな~。
両者の特徴としては、前者のやり方だとカレンダーをコントロールするテーブルと日々の注文データを
管理するテーブルを分けるのでデータの管理がしやすいですが、入力の際にスクリプトでいろいろと
仕込んであげないといけなくて、後者の方はテーブルが一つなので入力や集計などへの利用が
簡単になりますが同じ社員コードのデータが1か月分、それが社員数分存在してそのすべてのレコードに
カレンダーをコントロールするためのデータが入るので、データの管理が若干大変になってしまう。
そんな感じでしょうか。ただ今回の件でカレンダーのコントロールの仕方を理解できたのは大大収穫です。
というのも、当方の組み方では最大で2か月分のデータを持つ必要があるんですが『弁当種_order』に
あたる部分は『計算』ではなく『テキスト[42]』にしているため2か月のデータを持つためには
倍のデータを持たないといけない組み方をしています。
なので『なんだか、効率が悪いな~』と思っていました。
今後は、今回理解できたことを踏まえてシステムのブラッシュアップをしていこうと思います。
今回は、多数のご助言ありがとうございました。また何かありましたらよろしくお願いします。
実は、本日は第2回目のレビューでした。再度現場から要望が上がってきました。
中には『これ、出来るのかな?』というものまでありまして。そのことも改めて質問をさせて
いただけたらと思っていますので、そのときはよろしくお願いします。
乱文・長文になってしまって申し訳ありませんでした。

#9 2016-01-15 22:10:37

Shin
Member

Re: 会社独自の休みの設定の仕方

カスタム関数の workday() の出所は、http://www.fmpro.jp/fmi/xsl/plugin/cf.xsl?ID=0037 です。
テーブル参照型への変更は、カレンダーの日付から休日マスターテーブルの日付へリレーションを張り、休日、という繰り返しフィールドへルックアップしておくと良いでしょう。この際、休日マスターには休日だけでなく、全日付を持たせて、休日、稼働日のフラグを持たせた方が良いでしょう。
私の方法は、日毎のオーダーを集計する機能を拡張させた物ですので、Hiroさんの考え方とは全く異なる物です。繰り返しフィールドにしておくと、計算式を書く手間が大きく減るので使っているのは、同じ効率化の方策でしょうね。
集計を拡張しているので、1テーブル内で処理が完了している、ということです。その中で処理を済ませてしまうので、少しトリッキーですが、シンプルなスクリプトで、集計結果を表示させたレイアウトから直接データの更新が出来ています。

2ヶ月分の表示は、単に繰り返しを77へ拡張し、レイアウトを7×11へすれば良いだけでしょう。1ヶ月毎に別々に表示させるなら、7×6を2こ作れば良いです。
ちなみに、カレンダーのコントロールは、テーブル内のフィールドではなく、グローバル変数で行っています。

Offline

#10 2016-01-15 23:19:30

Hiro
Member

Re: 会社独自の休みの設定の仕方

> 集計結果を表示させたレイアウトから直接データの更新が出来ています。
・この巧みな使い技、面白いですネ。^^;;
・それと集計フィールドに文字列集計機能が追加されたので、Shinさんのその新作料理がたのしみ!

Offline

#11 2016-01-16 19:50:24

Shin
Member

Re: 会社独自の休みの設定の仕方

弁当種をコードで扱い、Choose() でテキストに置き換えているのは、FM11の制限のためだけです。fm13以降では、リスト集計が出来るので、値を弁当種そのものにして文字列で集計してしまうと、色々と手間が省けます。(別スレッドのサンプルで実装済みです)

普通は編集がありえない集計フィールドが、編修できてしまう様に見えて面白いでしょ。最初は隣席のプログラマーを騙そうとして冗談で作ったのですが、意外と実用になりました。このテクニックを使うと、計算フィールドなども編集できる様に見えますので、レイアウトの自由度が上がります。

Offline

#12 2016-01-18 11:05:51

弁当屋
Guest

Re: 会社独自の休みの設定の仕方

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

Shin wrote:

テーブル参照型への変更は、カレンダーの日付から休日マスターテーブルの日付へリレーションを張り、休日、という繰り返しフィールドへルックアップしておくと良いでしょう。この際、休日マスターには休日だけでなく、全日付を持たせて、休日、稼働日のフラグを持たせた方が良いでしょう。

なるほど。一つわからないのは休日マスターに休みだけではなく全日付を持たせるのはなぜなんでしょうか?

Shin wrote:

2ヶ月分の表示は、単に繰り返しを77へ拡張し、レイアウトを7×11へすれば良いだけでしょう。1ヶ月毎に別々に表示させるなら、7×6を2こ作れば良いです。
ちなみに、カレンダーのコントロールは、テーブル内のフィールドではなく、グローバル変数で行っています。

2か月分持つといっても、前月に次月の注文の初期値を設定するという仕様になっていて、その際に一時的に2か月持つことになるというだけですので
入力画面のイメージはサンプルの通りで問題ないと思っています。

#13 2016-01-18 19:05:57

Shin
Member

Re: 会社独自の休みの設定の仕方

ルックアップさせる事を考えているのですが、繰り返しフィールドでは、ルックアップで値を上書きは出来るのですが、消去する事が出来ないためです。

Offline

#14 2016-01-19 11:36:33

弁当屋
Guest

Re: 会社独自の休みの設定の仕方

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

Shin wrote:

ルックアップさせる事を考えているのですが、繰り返しフィールドでは、ルックアップで値を上書きは出来るのですが、消去する事が出来ないためです。

なるほど。そのような理由があったんですね。
参考になります。

#15 2016-01-20 15:47:33

Shin
Member

Re: 会社独自の休みの設定の仕方

Hiroさんのご期待に沿って
https://www.dropbox.com/s/sfunezmyq406h … 2.zip?dl=0
をみてください。FM13以降専用です。
前サンプルは弁当種に制限があった[コードに欠番がでると面倒とか、弁当種の変更ごとにフィールド定義を変更しないと行けない(これは、Evaluate() 案数を使うと自動化は出来るのですが)など、]のですが、こちらは特に制限はありません。
スクリプトトリガーのスクリプト引数を見直したので、動きがわかりやすくなったかも。

Last edited by Shin (2016-01-20 15:48:04)

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.009 seconds, 8 queries executed - Memory usage: 570.16 KiB (Peak: 591.07 KiB) ]