初心者のFileMaker pro Q&A

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

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

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

ログインしていません。

アナウンス


#1 Re: 初心者のFileMaker pro Q&A ≫ ポータルの選択 ≫ 2020-02-15 17:14:47

ポータル行をクリックするたびに、OnObjectEnterイベントが発生するので、
そのトリガから関連レコードへ移動するスクリプトを呼べば良いでしょう。

ただし…
「OnObjectEnter がポータルオブジェクトに割り当てられたときは、別のポータル行が有効になるたびにアクティブになります。
同じポータル行内の別のオブジェクトをクリックしてもポータルの OnObjectEnter スクリプトトリガは再びアクティブになりません。」
https://fmhelp.filemaker.com/help/16/fm … enter.html

#2 Re: 初心者のFileMaker pro Q&A ≫ 001-Rev.1 001-Rev.2 001-Rev.3 002-Rev1のようにしたいのですが。。。 ≫ 2020-02-09 18:54:21

Rev.が抜けないように「最大値を取得して+1する」と同じ考え方を親番号にも適用すれば良いのでは?
親番号に単純にシリアル値を自動入力するだけだと、抜けが発生することはどうしても避けられないでしょう。

まず採番ルールを明確にしないと、実装のあるべき姿が決まりません。
1)001、002、003の002を削除したのちに、新規レコードを作成したら次は何番?(002?or004?)
2)002、002、003の003を削除したのちに、新規レコードを作成したら次は何番?(003?)
1)が002で2)が003だとすると、途中で抜けた002は再利用できないが、最後に抜けた003は再利用できる、
という、(考え方によっては)一貫しない仕様になります。
1)が004だとすると、002は抜けても良いということなので、2)も004で良いのでは?とも思われます。

そもそも論として、削除するから抜けが発生します。
つまり、通常の運用の中でユーザが手動でレコードを物理的に削除できる仕様はどうなのか?という議論もありうるのでは?
「削除」と言っても、それなりの目的、意味があるはずです。
単に操作ミスで新規作成したレコードを削除したいのかもしれないし、注文キャンセル等の理由で不要になったからという理由かもしれない。
いずれにしても「なぜその番号が抜けているのか?」の理由を履歴として残すようにしないと、もしかすると決してはいけない
レコードを消した時にそれに気づかない危険が残りますし、物理削除してしまったレコードは復活できません。

というわけで、「基本的にレコードは物理削除しない、ミスによるレコードの新規作成が発生しないよう操作手順を工夫する」
などの仕様を検討されると良いと思います。

#4 Re: 初心者のFileMaker pro Q&A ≫ 001-Rev.1 001-Rev.2 001-Rev.3 002-Rev1のようにしたいのですが。。。 ≫ 2020-02-01 08:32:36

ケロケロ さんの発言:

ですが、金額が100にしていましたが、いろんな金額になるので上手くいきませんでした。
何か、スマートにやる方法はないでしょうか?

単に上手くいかない、ではなく、こういう実装にしてみたけれど、ここが上手くいかない、という具体的な問題点を書かないと回答は得られないでしょう。
例えば
・このようなリレーションにしてみたが、金額が0になる…
・こういうスクリプトを組んでみたが、最新の金額で合計されない/2重計上される…
など。
リレーションや関数、スクリプトを活用する以外に、ケロケロさんの必要とする機能をスマートに実現する方法はありません。

#5 Re: 初心者のFileMaker pro Q&A ≫ 001-Rev.1 001-Rev.2 001-Rev.3 002-Rev1のようにしたいのですが。。。 ≫ 2020-01-31 09:26:24

>Shinさん
ありがとうございます。なるほど、ですね。
以前にも同趣の回答を寄せられていたように思うのですが、この「金額をレコード数で割っておき再集計する」という発想は
私にはなかなか湧かないんですよねえ…。

#6 Re: 初心者のFileMaker pro Q&A ≫ 001-Rev.1 001-Rev.2 001-Rev.3 002-Rev1のようにしたいのですが。。。 ≫ 2020-01-31 08:01:45

金額集計用の計算フィールドを追加して、最新Rev.ならその金額を、最新でないなら0円をセットし、それを集計すれば良いでしょう。

チポさんの回答のようにリレーションで解決されたのであれば、リレーション先から最新のRevを取得して自レコードのRevと比較し、
最新ならその金額を、最新でないなら0円をセットします。

リレーションを使っていないならば、
ExecuteSQL ( "SELECT MAX(Rev) FROM \"テーブル\" WHERE \"番号\"=?" ; "" ; ""  ; 番号 )
を利用して最新Revかどうかを判定し、あとは同様に金額をセットします。
(上記SQLは数字を返すのでご注意を。たとえば"Rev.11"だと11を返します。)

(追記)
私は原則として管理番号のようなものはなるべく数値型のデータで管理し、ゼロ埋めやプレフィックス/サフィックスなど
画面表示や印字に必要なテキスト書式は別に計算で加工し利用するのが良いのでは、と考えています。
テキストで管理すると、ソートした時に意図した順番にならなかったり、単純な大小比較ができなかったりするので。
Rev.0
Rev.1
Rev.11
Rev.2…
もちろん入力のしやすさなどを踏まえて、ケースバイケースで判断すべきですが。

#7 Re: 初心者のFileMaker pro Q&A ≫ ポータルを用いた複数条件のフィルターと選択する方法について ≫ 2020-01-30 20:28:28

テーブルA:担当者テーブル……担当者の個人情報と、保有スキル(N個)
テーブルB:業務内容テーブル……業務内容と必要スキル(3個)

このテーブルAとテーブルBをスキルでマッチングして、たとえば
●担当者を特定して、その人がこなせる業務を検索する
●業務を特定して、その業務をこなせる担当者(候補者)を探す
などの機能を実現したい、ということでしょうか。

テーブルAとテーブルBをリレーションまたは検索で照合するときに、何をキーにして照合するかが重要です。
テーブルAには「料理」、テーブルBには「調理」
テーブルAには「掃除」、テーブルBには「清掃」
のように記述に揺れがあると一致するものとして扱えません。これはどのように管理しますか?

スキルAを1.01、スキルBを1.02など番号で管理しようと考えています。

例えばスキルマスタのようなテーブルを作って
1.01 調理/料理/クッキング
1.02 清掃/掃除/ハウスクリーニング
のようにキーと記述の組み合わせをリスト化できれば、
1.01のスキルを保有しているAさんに、1.01のスキルを必要とする業務を探すことができ、
1.02のスキルを必要としている業務に、1.02のスキルを保有するBさんを候補者として挙げることができます。

機能の作り込みの前に、何をキーにしてマッチングを実現するのか、そのキーをどのように体系的に管理するのかを明確にしておかないと有用なシステムにはならないと思います。
もしその辺りがすでに検討されているのであれば(厚労省あたりが作成したスキルシートに準拠するとか?)それを示してください。

#8 Re: 初心者のFileMaker pro Q&A ≫ スケジュール ≫ 2020-01-29 13:59:55

条件付き書式を設定すればできますよ。
計算式が DayOfWeek ( Self )=1 のとき文字色を赤
計算式が DayOfWeek ( Self )=7 のとき文字色を青

#9 Re: 初心者のFileMaker pro Q&A ≫ 001-Rev.1 001-Rev.2 001-Rev.3 002-Rev1のようにしたいのですが。。。 ≫ 2020-01-29 12:07:16

スクリプトでやる方法の一例です。
https://www.dropbox.com/s/9sozd22mld3og … fmp12?dl=0

(追記)
しまった、Revのフィールドは"Rev."を付記したいのですね。見落としてました。
そこは関数等をうまく使って補ってください(^^ゞ

#10 Re: 初心者のFileMaker pro Q&A ≫ ポータル内の選択したレコードを他のポータル内のフィールドに選択番号を入れたい ≫ 2020-01-29 10:54:34

サンプルファイルを拝見しましたが、失礼ながら少しわかりにくい画面のように感じました。
少し整理が必要ではないでしょうか?

1)タスクに業務内容を登録した後、
2)それぞれの業務について、その業務を担当する部門の担当者をポータル等で表示し、チェックボックス等で担当者を選択・指定する
という操作にすれば、タブやボタンを減らし、インターフェースをもっとシンプルにできるのでは?

担当者マスタに業務部門の属性を持たせることはできないのでしょうか?

ポータル番号Fを「業務ID」Fに転記し作業割当Fに転記するようにすれば良いでしょうか?

それも一案ですが、私なら業務IDとは別にシリアル番号を振ってリレーションします。

#11 Re: 初心者のFileMaker pro Q&A ≫ While文 ≫ 2020-01-28 08:02:35

Let関数の用途の一つに、関数の深いネストを避けて可読性を向上させるということがありますから、
While関数の中でLet関数を使用することでコードがわかりやすくなるなら、それは良いことだと思います。
Letの中でLetを使うのも同じことですし。ユーザや開発者が必要性を判断すればよろしいのでは?

#12 Re: 初心者のFileMaker pro Q&A ≫ レコードを絞った上でのレイアウト移動と表示 ≫ 2020-01-27 19:40:33

とりあえず動くようになったようで何よりです。

Shin さんの発言:

中身テーブルへ移動する目的は? 一般的な作り方ですと、福袋レイアウトの中のポータルで、商品名、売価、原価、個数などの中身の入力を完成させてしまいます。

操作端末がiPadということなので、今回のレイアウトならば入力領域(ポータル)が画面上半分に固定でき、ソフトキーボードで画面が隠れたりスクロールしたりすることがないのはメリットかもしれません。オブジェクトの配置の工夫で、一般的な作り方でも行けるでしょうか?
タブレット用画面は経験が乏しいのでなんとも…

#13 Re: 初心者のFileMaker pro Q&A ≫ ポータル内の選択したレコードを他のポータル内のフィールドに選択番号を入れたい ≫ 2020-01-27 07:43:16

睡魔と格闘中 さんの発言:

1つ、補足をさせてください。
ポータルはフィルタをかけています
業務内容ポータル → PatternCount ( 業務内容::業務部門CD ; 業務内容::業務部門CD )

この条件だと常に1になるのでフィルタとして機能していないのでは?

リレーション構造をご指摘いただき有難うございます。
どのように修正すれば良いでしょうか?
ご教示いただけると幸いです。

#4の私の質問に答えていただけますか?
技術論の前に、業務の流れや情報の構造を正確に把握できないと回答できません。

手順1:1つのタスクに複数の業務を登録する
手順2:1つのタスクに複数の担当者を登録する
手順3:業務と担当者の対応を登録する(今回の課題)
という流れで合ってますか?

具体的には、
業務①   担当者A
業務②   担当者B
業務③   担当者C
と表示されている時、業務②にチェックを入れたら
業務①   担当者A
×業務②   担当者B
業務③   担当者C
としたいということ?しかし、最初の質問で「狙った担当者」とあるので違うのかな???

なおMozさんがすでに指摘されているように、Get(レコード番号)は、”いま何番目に表示されているか"という
単なる表示順を示すのみで、検索条件やソート順でコロコロ変化してしまう値なので、
業務レコードを一意に特定するIDとしては適しません。
「業務ID」なりのキーを用意して、それを割り当てテーブルに転記するようにする必要があります。

#14 Re: 初心者のFileMaker pro Q&A ≫ While文 ≫ 2020-01-26 10:50:16

使えます。
保存できないのは、おそらく文法的に誤りがあるのでしょう。
エラーメッセージが出ませんか?

#15 Re: 初心者のFileMaker pro Q&A ≫ ポータル内の選択したレコードを他のポータル内のフィールドに選択番号を入れたい ≫ 2020-01-26 10:12:22

割り当てテーブルの「担当者」とは、"タスク"の担当者なのですか?
それとも業務内容テーブルで管理される"業務"の担当者"なのですか?

現状、手動で業務テーブルと割り当てテーブルとを関連づけていることと、
フィールド設定[ 割当 :: 作業割当 ; $portalNo ]
というスクリプトで、業務テーブルのレコードと割り当てテーブルのレコードを関連づけようとしているので、たぶん後者と推測します。

この推測が正しいならば、タスクと割り当てをタスクIDでリレーションするという構造から見直した方が良いと思われます。

#16 Re: 初心者のFileMaker pro Q&A ≫ 祝休日開けの日付 ≫ 2020-01-26 00:21:01

Hiroさん、ありがとうございます!
日付で照合してCountを取るところまでは思いついたのですが、それをExceuteSQLで解決するアイディアは浮かびませんでした。
下記コードを動かして、狙いどおりに動作することを確認できました。

While (
[
  theDay = 振込日        //振込日で初期化
];
  /*** 下記に該当する日の間は繰り返す ***/
  DayOfWeek ( theDay ) =1 or DayOfWeek ( theDay ) = 7        //日曜日、土曜日
  or ExecuteSQL("SELECT COUNT(*) FROM ""祝日一覧"" WHERE ""日付""=? "; ""; ""; theDay)       //祝日
  or DayOfYear ( theDay ) ≤ 3 or DayOfYear ( theDay ) ≥ 365;    //年末年始
[
  //日付を1日繰り上げながら調べる
  theDay = theDay + 1  
] ;
  theDay
)

#17 Re: 初心者のFileMaker pro Q&A ≫ 祝休日開けの日付 ≫ 2020-01-25 20:40:40

私の#2の回答だと、振込日の"2020/02/24"が祝日一覧の"2020/2/24"とPatternCountで一致しないと判定されてしまいます。
とりあえず祝日一覧の日付フィールドと振込日フィールドについて、ゼロ埋めの有無について書式を揃えておけば良いとは思いますが。
お金がからむ機能だけに、しっかりと検証する必要がありそうです。

#18 Re: 初心者のFileMaker pro Q&A ≫ 祝休日開けの日付 ≫ 2020-01-25 18:56:45

FM18限定の回答です(17以前はWhile関数が使えないので)

1)祝日一覧と現在のテーブルをデカルト積[X}でリレーションします。
2)入金日フィールド(計算フィールド)の計算式を以下のように設定します(結果タイプ:日付)。

While (
[
  theDay = 振込日        //振込日で初期化
];
  /*** 下記に該当する日の間は繰り返す ***/
  DayOfWeek ( theDay ) =1 or DayOfWeek ( theDay ) = 7        //日曜日、土曜日
  or PatternCount ( List ( 祝日一覧::日付 ) ; theDay )        //祝日
  or DayOfYear ( theDay ) ≤ 3 or DayOfYear ( theDay ) ≥ 365;    //年末年始
[
  //日付を1日繰り上げながら調べる
  theDay = theDay + 1  
] ;
  theDay
)

※最初の投稿では、年末年始を見落としていました。

#19 Re: 初心者のFileMaker pro Q&A ≫ 関数 Get ( システムバージョン ) について。 ≫ 2020-01-25 18:27:30

FileMakerの不具合ではないと思います。
Get(システムバージョン)の戻り値はテキスト型です。
すなわち10.0という小数値ではなく、"10.0"というテキストが返ります。
https://fmhelp.filemaker.com/help/15/fm … rsion.html

If[  Get ( システムバージョン )  ≥  6  ]
という判定は、システムバージョンが1桁だったから偶然うまく動いていましたが、
Win10以降の環境ではお気づきの通りGetAsNumberで数値に変換が必要と思います。

#って、投稿したらMozさんと回答がカブりました(^^ゞ

#20 Re: 初心者のFileMaker pro Q&A ≫ レコードを絞った上でのレイアウト移動と表示 ≫ 2020-01-24 15:37:58

サンプルを作成してみました。
https://www.dropbox.com/s/uhyoccf4otuum … fmp12?dl=0

正直、sic3605さんの設計意図がよくわからない部分があって、まずイメージを共有するための目的もあります。

(補足)
福袋レイアウトの削除ボタンが「対象レコードの削除」になっていました。
「レコード/検索条件削除」が正しいです。修正して動かしてください。

中身レイアウトのポータルは、編集中の商品は表示しない実装になっていますが、
これも含めて全部表示したいときはリレーションからPK_中身IDを外してください。

#21 Re: 初心者のFileMaker pro Q&A ≫ メモフィールドから文字を抜粋する ≫ 2020-01-24 13:34:15

チポさんの回答どおり、Left()とTrim()の組み合わせで。

Let ( [
  txt = GetValue( Substitute ( GetValue( メモ; 3 ); [":"; ¶ ] ); 2 )
];
  //性別の1文字を取り除いたあと、スペース文字を取り払う
  Trim( Left ( txt ; Length ( txt )-1 ))
)

もちろんLetを使わなくても、関数を入れ子にすれば1行で書けますね。
もし性別を抽出するなら

Let ( [
  txt = GetValue( Substitute ( GetValue( メモ; 3 ); [":";¶ ] ); 2 )
];
  //末尾の性別1文字のみを取り出す
  Right ( txt ; 1 )  
)

#22 Re: 初心者のFileMaker pro Q&A ≫ メモフィールドから文字を抜粋する ≫ 2020-01-24 12:53:57

和男さんとか早乙女さんとか、患者氏名に"男/女"の文字が含まれていることも考慮しないと。
姓と名はスペース1文字区切り(あるいは区切りがない)、性別の前はスペースがN個以上、性別のあとは必ず改行、
性別が空欄になることはない…などメモフィールドの値に確実な規則性は期待できますか?

#23 Re: 初心者のFileMaker pro Q&A ≫ フィールドから複数行を取り出すには? ≫ 2020-01-24 12:32:33

キーワードA
キーワードB1
キーワードB2
キーワードB3…

キーワードB1
キーワードB2
キーワードB3…
にしたい、つまり元フィールドの値から1行目を取り除いて、2行目以下を取得すれば良いということなのでは?

RightValues ( 元フィールド ; ValueCount ( 元フィールド )-1 )
https://fmhelp.filemaker.com/help/18/fm … alues.html

あるいはRight関数を使って、「(キーワードA)の文字数+1」を引いた文字数を取得する(1は改行分)。
Right ( 元フィールド ; Length ( 元フィールド )-( Length ( GetValue (  元フィールド ; 1  ) )+1) )
のように。あまりスマートではないか。

#24 Re: 初心者のFileMaker pro Q&A ≫ 日付フィールドを反映されるスクリプトについて ≫ 2020-01-24 01:46:34

ロジックは崩壊していないと思いますよ。
⑤を手動で更新→②をスクリプトで更新→④をスクリプトで更新という連鎖を心配されているのだと思いますが、
②の更新スクリプトを実行しても、赤字の④の更新スクリプトは実行されません。

なぜなら、ヘルプにあるように

[フィールド設定]、[フィールドを名前で設定]、および [Web ビューアの設定] スクリプトステップなど、
フィールドを直接変更できるスクリプトステップでは、OnObjectModify スクリプトトリガは実行されません

https://fmhelp.filemaker.com/help/18/fm … ggers.html

つまり、⑤を 手動で更新したとき、⑤のOnObjectModifyイベントによってスクリプトが実行され②に値が反映されますが、
②のOnObjectModifyイベントは発生しない→スクリプトは実行されないので④に値が反映されることはありません。

#25 Re: 初心者のFileMaker pro Q&A ≫ 数字の小数点以下を揃えてCSVにするには? ≫ 2020-01-22 08:39:27

まじかー\(◎o◎)/!お恥ずかしい。
そういうオプションがあるのを初めて学びました。Mozさん、ありがとうございます。
というわけで、私の回答は忘れてください(^^ゞ

Board footer

Powered by FluxBB