初心者のFileMaker pro Q&A

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

1.ファイルメーカーで解らない事があればここで質問して下さい。

何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

ログインしていません。

アナウンス

#1 2018-06-20 16:25:52

popo1
ゲストユーザー

休憩時間を加味した時間の表示について

いつもお世話になっております。
FMはバージョンは16 OSはwin になります。

品番  作業開始 終了予定 標準時間
A    9: 00     10:00   1:00
B  10: 10   11 : 10   1:00
C  11: 10   12 : 00   0:50
D  12: 50     13 : 30         0: 40

上のように以下の休憩時間を含めたスケジュールの表示をしたいです。
「10:00~10:10」「12:00~12:50」「15:00~15:15」

フィールドは 「品番」「作業開始」「作業終了予定」 「標準時間」
別ファイルより「休憩時間」  があります。

休憩時間を加味していない場合はこちらの関数で表示できました。
Case ( Get ( レコード番号 ) = 1 ; 加工者一覧 2::勤務時間 ; GetNthRecord( 作業終了時間 ; Get ( レコード番号 ) - 1 ))

加味する場合はどう記述すればよいのでしょうか?
どうかご教示のほどお願いいたします。

#2 2018-06-21 13:11:42

チポ
メンバー

Re: 休憩時間を加味した時間の表示について

元のテーブルを仮に「作業」テーブルとし、
フィールドを追加

  作業開始予定時刻
     計算フィールド 計算式を popo 1さんが提示された計算式とします。

  作業終了予定時刻 (ご説明の「作業終了予定」は「作業終了」としてください)
     計算フィールド  計算式   作業開始 + 標準時間


休憩テーブルのフィールドを
  休憩開始時刻
  休憩終了時刻
として、1休憩を1レコードで各時刻を入力。


リレーション
            作業                休憩
  作業開始予定時刻 > 休憩開始時刻
  and
  作業開始予定時刻 < 休憩終了時刻
として、
この関連レコードがあれば作業開始が休憩時間内にあるということですから、
関連レコードの休憩終了時刻を作業開始とします。


作業終了も同様に考えて設定します。

と書いて、、
もし作業終了が休憩時間内の場合、
  1. 休憩時間を加えて終了をのばす
  2. 二つのレコードに分ける
        (二つ以上の休憩にまたがるような作業もあるのか?・・とても面倒そう!)

と考えられましたが、いかがでしょう?

オフライン

#3 2018-06-21 18:46:43

popo1
ゲストユーザー

Re: 休憩時間を加味した時間の表示について

チポ様
リレーションまでは設定できたのですが
その先の作業終了が休憩時間内の場合、休憩時間を加えて終了をのばす
というのはどう関数を記述すればよいのでしょうか?

#4 2018-06-22 09:10:22

チポ
メンバー

Re: 休憩時間を加味した時間の表示について

私の前レスであげたリレーションは、
作業開始時刻のためのものですが、
それは出来たのでしょうか?

作業終了時刻のためには新たなリレーションが必要ですが、
それも出来ているのでしょうか?

また、
前レスの私の質問の解答がないとその先へ進めません。

オフライン

#5 2018-06-22 19:01:44

popo1
ゲストユーザー

Re: 休憩時間を加味した時間の表示について

チポ様

やりたいことは作業終了が休憩時間内の場合、その休憩時間を含めて表示させたい...ですので
1. 休憩時間を加えて終了をのばす。というのができればいいです。
また、2つ以上の休憩をまたぐような作業は今のところありません。

リレーションについてですが、作業開始はチポ様が書いてくださったように設定。終了時間も同じように
            作業                休憩
  作業終了 > 休憩開始時刻
  and
  作業終了 < 休憩終了時刻
で設定しました。

関連レコードの休憩終了時刻を作業開始とします。
の作業開始とは、「作業開始予定時刻」とは別のフィールドということでよろしいでしょうか?

#6 2018-06-25 09:11:02

チポ
メンバー

Re: 休憩時間を加味した時間の表示について

作業開始予定時刻
は休憩時間を加味しない時刻で、
この時刻から休憩を考慮して作業開始時刻に入力します。

終了も同様です。


前々レスのリレーションを使い、作業開始時刻は
  Case ( IsValid ( 休憩テーブル::休憩開始時刻 ) ; 休憩テーブル::休憩終了時刻 ; 作業テーブル::作業開始予定時刻 )
                              ↑                                         ↑
                 作業テーブルとリレーションした休憩テーブルのテーブル名

で求められます。


作業終了は、終了時刻が休憩をまたいだ先もあり得ると考慮して、
リレーションを
              作業               休憩 2(休憩テーブルのコピー、作業テーブルをコピーしては行けません)
        作業開始時刻 < 休憩終了時刻
  and
  作業終了予定時刻 > 休憩開始時刻
として、

作業終了時刻の計算式
  作業テーブル::作業終了予定時刻 + Case ( IsValid ( 休憩 2テーブル::休憩開始時刻 ) ; 休憩 2テーブル::休憩終了時刻 - 休憩 2テーブル::休憩開始時刻 )

で求められます。

オフライン

#7 2018-06-25 13:55:05

Shin
メンバー

Re: 休憩時間を加味した時間の表示について

スクリプトで1個ずつ計算していけば簡単なのですが、一挙に計算で行うとすると、相当ややこしい問題です。
9時作業開始、休息時間は #1 の条件ですと、休息を無視してタイムテーブルを作り(終了時刻は10:59分などで)、すべての時刻に対して
10:00以降は、10分遅らせる
11:50以降は、60分遅らせる
14:00以降は、75分遅らせる
という計算をすればいいです。これを汎用にするのが結構面倒で、特に開始時刻が変わると相当面倒です開始時刻が9:00以外の場合には、ダミーの作業を入れておく、という運用が簡単です。
とりあえず、開始時刻が9:00に固定されているサンプルです。
https://www.dropbox.com/s/66ctmdbbbycsl … 7.zip?dl=0

編集者 Shin (2018-06-26 13:53:07)

オフライン

#8 2018-06-26 19:10:17

popo1
ゲストユーザー

Re: 休憩時間を加味した時間の表示について

チポ様

#6のように入力をしてみましたが以下のようになってしまいます。

品番  作業開始 作業終了 標準時間
A    9: 15     10:00   0:45
B  10: 00     10 : 29   0:19
C  10: 19     10 : 49   0:30
D  10: 49     11 : 06   0 : 17 ...

F 11:42      13 : 06   0 : 34
G   12:50      13 : 10   0 : 20 ...

A→Bまでは休憩時間を含まれていますが、Cの「作業開始」が前レコードの「作業終了」を引き継いで表示されませんでした。
それ以降も休憩時間をまたいだ次のレコードから上記のようになってしまいます。
自分のやり方が間違っているのでしょうか...

それと休憩テーブルについての確認ですが、1休憩を1レコードで各時刻を入力。
       休憩開始時刻  休憩終了時刻
レコード1   10:00               10:10
レコード2      12:00               12:50
レコード3      15:00               15:15
という表記で間違いはないでしょうか。

#9 2018-06-26 19:15:16

popo1
ゲストユーザー

Re: 休憩時間を加味した時間の表示について

Shin様

サンプルありがとうございます。ダミーを使う方法もあるのですね、参考にさせていただきます。

#10 2018-06-27 09:22:57

チポ
メンバー

Re: 休憩時間を加味した時間の表示について

作業開始予定時刻の計算式はpopo1さんが書かれた
  Case ( Get ( レコード番号 ) = 1 ; 加工者一覧 2::勤務時間 ; GetNthRecord( 作業終了時間 ; Get ( レコード番号 ) - 1 ))
ですが、

ここで使っている
  作業終了時間
が、
  作業終了予定時刻
になっていませんか?

私が書いた
  作業終了時刻
が正しいですよ。

オフライン

#11 2018-06-27 09:57:06

チポ
メンバー

Re: 休憩時間を加味した時間の表示について

書き落とした!

休憩テーブルのレコードは、
popo1さんが書かれた通りでいいですね。

オフライン

#12 2018-07-02 19:18:55

popo1
ゲストユーザー

Re: 休憩時間を加味した時間の表示について

チポ様
ご指摘の通り「作業開始予定時刻」の式を直したらうまく表示されました。
このたびはありがとうございました。

#13 2018-07-31 19:18:09

popo1
ゲストユーザー

Re: 休憩時間を加味した時間の表示について

解決したといいましたが問題が発生してしまったので質問させてください。

以前、2つ以上の休憩時間またぐ作業はないといいましたが超える作業が出てきました。
それが原因なのか休憩時間が加味される時とされない時があります。

問題が発生した時の表示です。休憩時間が加味されているなら...
9:00開始として標準時間が195分だった場合 終了時間が13:15になります。
休憩時間 10分+50分込
しかし、終了時間が12:25と10時の分は足されていますが12時の分は足されませんでした。その時によりますが、10時、12時、15時の全ての休憩時間が足されない時もあります。

やはりまだこちらのリレーション等が間違っているところがあるのでしょうか...

#14 2018-08-01 08:54:48

Shin
メンバー

Re: 休憩時間を加味した時間の表示について

私お作例では、考慮していますよ。

オフライン

#15 2018-08-01 09:15:03

チポ
メンバー

Re: 休憩時間を加味した時間の表示について

私の提案は休憩1回に限ります。

2回以降もあるのなら、
まず1回を出して、その作業終了時刻を2回目の作業終了予定時刻として、同様に求めればいいでしょう。

オフライン

#16 2018-08-02 21:24:08

popo1
ゲストユーザー

Re: 休憩時間を加味した時間の表示について

shin様
確認しましたが2目の休憩をまたぐときもしっかりカウントされていますね。
それをもとにそっくりそのまま作成してみたのですが、自分の場合は2回をまたぐ場合、何故か足されませんでした。

チポ様
申し訳ありません、それを関数等で表してはもらえないでしょうか...

#17 2018-08-03 10:01:45

チポ
メンバー

Re: 休憩時間を加味した時間の表示について

休憩1回を前提とした、前回までの
「作業終了時刻」
を仮に
「作業終了時刻1」
と変更して、
これを前回の
「作業終了予定時刻」
と同じ扱いにして、
「作業終了時刻2」
を求めます。

休憩を3回までまたぐ可能性があるのなら同様に
「作業終了時刻3」
を求めて、それが最終的な作業終了時刻になりますね。

オフライン

#18 2018-08-03 12:35:05

Shin
メンバー

Re: 休憩時間を加味した時間の表示について

どこかに、設定の違いがあるのでしょう。
結構微妙な構造で動いていますので、違いをよく探してみてください。

オフライン

#19 2018-08-03 19:23:43

popo1
ゲストユーザー

Re: 休憩時間を加味した時間の表示について

チポ様
「作業終了時刻1」を「作業終了予定時刻」と同じ扱いにする。
というのは、式も「作業終了予定時刻」と同じものを使い、リレーションも新たに作るのでしょうか?

shin様
やはりどこか見落としがあるのでしょうね。
もう一度チェックしてみます。

#20 2018-08-06 14:50:04

チポ
メンバー

Re: 休憩時間を加味した時間の表示について

そうです。
リレーションから新たに、第一回と同様に設定します。

オフライン

#21 2018-08-07 11:49:37

popo1
ゲストユーザー

Re: 休憩時間を加味した時間の表示について

チポ様

リレーションは休憩時間を複製して作業テーブルにそれを同様に設定しました。
作業→休憩時間
  →休憩時間2
  →休憩時間3
フィールドは 「作業終了時刻」を「作業終了時刻1」へ変更、「作業終了時刻2」を作成
して以下のようにしました。
・作業終了時刻1
作業開始 + 標準作業時間
・作業終了時刻2
作業終了予定 + Case( IsValid ( 休憩時間 3::休憩開始 ) ; 休憩時間 3::休憩終了 - 休憩時間 3::休憩開始 )

まだ追加する点、間違っている点あると思うので教えていただきたいです。

#22 2018-08-07 15:16:17

チポ
メンバー

Re: 休憩時間を加味した時間の表示について

> ・作業終了時刻1
> 作業開始 + 標準作業時間

ではないですよ、

前の
  作業テーブル::作業終了予定時刻 + Case ( IsValid ( 休憩 2テーブル::休憩開始時刻 ) ; 休憩 2テーブル::休憩終了時刻 - 休憩 2テーブル::休憩開始時刻 )
この計算式は変わりません。

これで得られた作業終了時刻1を使って、
新たなリレーション
              作業               休憩 3
        作業開始時刻 < 休憩終了時刻
  and
      作業終了時刻1 > 休憩開始時刻

として、
上記と同様に作業終了時刻2を求めます。

オフライン

#23 2018-08-07 18:34:35

popo1
ゲストユーザー

Re: 休憩時間を加味した時間の表示について

チポ様

作業テーブルと休憩時間3の設定は終わりました。

作業終了時刻2の式ですが、
作業終了1 + Case( IsValid ( 休憩時間 3::休憩開始 ) ; 休憩時間 3::休憩終了 - 休憩時間 3::休憩開始 )
ということでしょうか..?

#24 2018-08-08 08:59:12

チポ
メンバー

Re: 休憩時間を加味した時間の表示について

それでいいでしょう、
お試しください。

オフライン

#25 2018-08-08 12:28:35

Hiro
メンバー

Re: 休憩時間を加味した時間の表示について

マラソン・スレッツに、外から大後出し失礼します。
一連の流れを見ていて思ったのですが、
条件付き繰越計算にリレーションを利用すると段取り設定が面倒なので、
リレーション設定を必要としない、複合ExecuteSQL関数式で計算取得
する方法も検討に値するかなぁ? ...と。

オフライン

クィック投稿

メッセージを書いて送信してください。
登録の確認

実在の人物による登録であることを確認します。

Board footer