みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
himadanee様
ご回答ありがとうございます。
WindowsとiOSの両方で、「ピンを立てた後、もう一度クリックして移動すればURLに反映される」という方法を試してみましたが、
場所によって2パターンの動きをすることが分かりました。
○パターン1 Googlemapsに住所や施設情報のデータがあるところ
・赤いピンが立ちURLに反映される(長いURL)
・最初のピンが立っているところと別の箇所をクリックするとピンの座標のまま短いURLになる
→座標はURLの中にある
○パターン2 Googlemapsに住所や施設情報のデータがないところ
・目的の位置をクリックすると白いピンが立つ(URLは変わらず)
・もう一度ピンを選択すると青い大き目のピンが立つ(URLは変わらず)
→座標は白いピンの座標をクリックして出てきた左の情報内の検索窓の中にある
できればlocation関数と同じ十進数形式の座標を取得したかったのですが、これらのパターンの違い等により操作が2通りになってしまうことが理解できました。
タブレットを使用する現場の人に複雑な仕組みにはできないこともあり、正確な位置情報へ修正に関しては、ピンを手動で移動(ドラッグ)して緯度経度を更新するという方法を取りたいのでJavaScriptを少し学んでみることにしました。
この度は貴重なアドバイスをありがとうございました。
himadanee様、Shin様
別スレッドについてですが、この度は回答が遅れ、大変申し訳ございませんでした。
また、今回もご回答下さりありがとうございます。
himadanee様へ
質問が分かりづらくなってしまい、申し訳ございません。
「GPSデバイスなどを用いずに、iPadだけで行いたい」というのは、外部のGPSデバイスではなく、iPad自体のGPS機能のみを使用する意味で質問いたしました。
また、「地図上でピンを動かして緯度経度を更新する方法、またはボタン経由でスクリプトを実行してピンの位置を修正する方法」については、
これらがWebビューワーを使用し、Google Maps APIやJavaScriptの知識が必要であり、複雑さからもっと簡単な方法がないかと考えていました。
GPSの位置情報の取得には誤差が生じるため、より正確な緯度経度情報への修正が必要になる事例があるかと思いますが、皆様がどのような方法でこの問題に対処しているか、お聞きしたかった次第です。
Shin様へ
PCでは、地図上のピンを立てた後にその緯度経度をコピーしてFileMakerの対応するフィールドにペーストすることがそれほど誤操作なくできますが、現場状況は実際に現場にいないと判断できないため、iOSでの対応を検討していました。
iOSでの操作はタッチ操作に若干のコツが必要で、単純なコピー&ペースト作業も困難を伴います。したがって、ボタン(スクリプト)などを用いて修正したピンの位置から緯度経度を直接関連フィールドに入力できる方法があればと考え、現在その方法を模索しているところで質問いたしました。
Shin様、himadanee様
この度は回答が遅れ、大変申し訳ございませんでした。
Shin様よりお送りいただいたファイルを拝見し、内容を理解することができました。また、太字の書式設定に関しては、「$$key = テーブル2::副キー and IsValid ( テーブル2::副キー )」という計算式を用いることで実現できたことをご報告いたします。
当初はGet(アクティブポータル行番号)を使用する方法を考えていましたが、Shin様からの異なるアプローチによって新たな学びが得られました。
親テーブルのflagとテキストフィールドに設定されたスクリプトトリガ(新規ポータル行)の使用方法については、まだ完全には把握できておりませんが、今回の目的は無事達成することができました。
ありがとうございました。
FileMaker GoとGoogle Mapを用いて現場の正確な位置情報(住所が不明確な場所もあり)を取得する際、一般的にはlocation関数を使用して緯度と経度を得る方法があります。しかし、この方法では誤差が生じることがあります。
そこで、より正確な緯度と経度の情報に修正したいのですが、どのような方法がありますでしょうか?
※
GPSデバイスなどを用いずに、ipadだけで行いたい。
ピンを手動で移動して緯度経度を更新する or ボタンからスクリプトを実行させて修正したピンの緯度経度を取得する→APIやJavascriptの知識が必要となり難易度が上がるためもう少し簡易的な方法を探したい。
ポータル行がアクティブな場合のみ、該当行のボタンを表示させ、非アクティブ行はボタンを非表示にしたいと考えています。
また、ポータル行がアクティブな時には、フィールドの文字を太字にする設定もしたいと思います。
これには条件付き書式を使用しようと考えているのですが、思うように設定ができず困っております。
ご助言いただけますと幸いです。どうぞよろしくお願い申し上げます。
shin様チポ様
ご回答ありがとうございます。
>そのレコードを作った状態では、まだそのレコードが確定されていないので、データとして存在しません。ですから、リレーション先のレコードが存在しないので null が返されます。2レコード目も同じで、自身のレコードはカウントされません。
これを念頭に置いてレコード確定前後の動きを見てテストしてみたところ以下の動きが発生するのでよく分かりました。
1.最初のレコードが空欄となる→自身のレコードはカウントされないから
2.途中のレコードを削除して再度新規レコード作成を行うと、番号が重複する→自身のレコードはカウントされない+この時点の関連レコード数をカウントしているから
この度は、大変勉強になりました。今後ともよろしくお願いいたします。
チポ様
>それより誤ったレコードを作らせない工夫
事例を教えてくださりありがとうございます。
必要フィールドに全て入力しないと「確定」ができない。と、shin様のおっしゃっているトランザクションの両方をテストしてみたいと思います。
>関連レコード数はCount関数で求められます。
「このリレーションの関連レコード数」とレコードIDの使い方がとても勉強になりました。
教えていただいた通り設定し、点検番号フィールドを計算タイプにして以下の様にしましたら、うまく動くようになりました。
レコード削除時の挙動(関連レコード数をカウントしているので、レコード削除するとそれ以降のレコードの番号が詰められて再計算されてしまう)もよく分かりました。
点検一覧_点検一覧|自己_点検番号用::アカウント名
&Right ( "000000" &Count (点検一覧_点検一覧|自己_点検番号用::シリアル番号) ; 6 )
テストしている中で分からない動きがあったのでもし可能であれば教えてください。
誤ったレコードを作らせない+削除はなし。の条件で決定なのですが、点検番号フィールドを計算タイプではなく数字タイプまたはテキストタイプとし、「入力値の自動化」→「計算」とすると、
1件目のレコードは空欄、2件目のレコードから001000001と採番されます。リレーションではシリアル番号 >= シリアル番号となっているのになぜ空欄となるのでしょうか?
shin様
トランザクションを開くへのリンクありがとうございます。
現在考えている点検レコード作成の流れは、
新規点検レコード作成→顧客の選択(主キー入力)→点検内容入力という流れですが、この中でどのように実装すればいいか考えてみたいと思います。
> 誤ってレコードを作成することが多いのでは
>作らせない工夫を考えられたらいかがでしょう。
やはり、物理削除より論理削除の方がよいということでしょうか?(無料のClaris アカデミーで学んでおりまして、削除機能は慎重にとあったのですが、勘所が分かってなくすみません)
点検で使用した商品の請求や集計があるので、レコードがない方が都合がいいかと思ったのですが。
>全レコードを通してシリアル番号を振ります。
自己リレーション
アカウント名 = アカウント名
and
シリアル番号 >= シリアル番号
教えていただいた通り、リレーションを組み、以下のところまで来ました。
フィールド設定 内容
アカウント名(計算タイプ) Get(アカウント名)
シリアル番号(テキストタイプ) 入力値の自動化 シリアル番号
点検番号(計算タイプ) 点検一覧_点検一覧|自己_点検番号用::アカウント名 & Right ( "000000" & 点検一覧_点検一覧|自己_点検番号用::シリアル番号 ; 6 )
ここで3点ほど質問がございます。
1, 点検番号フィールドに、アカウント+シリアル番号で表示はされるのですが、アカウントごとにシリアル番号が付与されず全アカウントで連番となっているようです。どこかで間違っていますでしょうか?(001000001→001000002→002000003→003000004となってしまう)
2,リレーションのシリアル番号 >= シリアル番号の部分ですが>=ではなくて<=にするとカウントアップしていくのですがこちらで合っていますでしょうか?
3,>欠番にしないのなら、前設定のフィールドを計算フィールドにすればいいんです。
欠番にしないのならシリアル番号フィールドを計算タイプにするということでしょうか?(欠番にするパターンとしないパターンの両方をテストしてみようとしたのですが、シリアル番号を振る計算式が調べてもわからず欠番解消のテストできずにおります)
チポ様
ご回答くださりありがとうございます。
まだテストの段階ですので決定ではないですので、方向性でのお話になり恐縮なんですが、以下のようになります。
>このリレーションの関連レコード数が求めるシリアル値になります。
ただし、これは途中のレコード削除が有るとだめです。
その可能性はありますか?
今のところ誤ってレコードを作成することが多いのでは?と考えられますので、不要な空レコードがたくさんあるのは邪魔なので、点検レコードの削除は論理削除ではなく物理削除で実装する方向で考えております。
>ある場合、
その番号は欠番
それ以降を振りなおし
どちらか決める必要がありますね。
それ以降を振り直しの方がスマートではあるのですが、デメリットが多い場合は欠番でも運用上問題はありません。
(細かい従業員に欠番だと気持ち悪がられるくらいだと思います)
以上よろしくお願いします。
shin様
いつも助けていただきありがとうございます。
> フィールドひとつひとつとも考えましたが、隠したいフィールド数が70くらいあったことと、
> 目的のオブジェクトを複数選択して、まとめて設定が可能です。
初歩的なところなのかもしれませんが、知りませんでした。今後の作業がすごく捗る気付きです。教えていただきありがとうございました。
> 入力制限後に表示したいフィールドも中にはありましたので
> それらのオブジェクトは複製して、インスペクタでフィールドへ入ることを禁止し、上の表示と逆の条件で隠せばいいです。
その発想は全くありませんでした。図形(ボタン)をクリックすると色が反転するのがなんとなく気持ち悪く感じ、あれから改善を試みても解決できていませんでしたので、切り替えてこの方法で実装したいと思います。
いつも大変お世話になっております。
顧客T -----< 点検一覧T
という、リレーションで点検票を作成しようとしています。
複数人で点検をしていて、一人当たり年2500回ほど点検レコードが発生する想定です。
この点検票に点検番号を付与するにあたって、次の要件を満たせるものを検討しています。
・ユニークであること(主キーとなるUUIDは別にあります)
・できれば短い桁数のもの(最大12桁くらいでテキストと数字の混合でも可)
・点検票をPDF出力したときに管理しやすいよう、ファイル名に点検番号を含める予定(日付_点検番号 など)
現在は以下のように単純に考えてGet(アカウント名)&シリアル番号で作成してみましたが、アカウントごとにシリアル番号を振らないと桁数が足りなくなることに気づいたところで詰まっています。
今の状態
アカウント名は数字3桁にしています(001、002、003・・・・)
シリアル番号は数字6桁(999999/2500で400年分あるため)
点検番号とは別にシリアル番号カウント用のフィールドを作成
フィールドの計算式
Get ( アカウント名 )
& Right ( "000000" & 計算用シリアル番号 ; 6 )
アカウントごとにシリアル番号を付与するための計算式が分からないので教えていただきたいということもあるのですが、
もし他に上記の要件を満たす上手な点検番号の付与方法がございましたら合わせてご教授いただければ幸いです。
何卒よろしくお願いいたします。
皆様いつもご回答くださりありがとうございます。
やはり間違っていたんですね。
沼に入りかかっていましたので、間違っているということが分かって助かりました。
フィールドひとつひとつとも考えましたが、隠したいフィールド数が70くらいあったことと、入力制限後に表示したいフィールドも中にはありましたので(この場合、塗りつぶしなしの長方形でマスキングする)
マスキングの方向で考えておりました。
qb_dpさんのおっしゃっているのをやってみたところ
①図形ツールからマスキング用の図形を作成
②図形を右クリックで「ボタン設定」を選択
③処理は 単一ステップ- 現在のスクリプト終了
④次の場合にオブジェクトを隠す条件を設定
としましたら、下層のフィールドはクリックできなくなりました。
クリックすると色が反転しますがうまくいきそうな感じがします。
(インスペクタパネルの外観で、オブジェクトの状態をすべて設定しても色の反転はするんですね)
皆様本当にありがとうございました。今後ともよろしくお願いいたします。
最前面にマスキングする大きさの図形を持ってくればレイアウト内のフィールド入力を制限できるのでは?と思い試行錯誤しています。
次の場合にオブジェクトを隠すを用いて、ポータル内の入力フォームの一部を図形ツールで作成した長方形で隠して、指定したフィールドに入力できないようにしたいです。
長方形で隠すところまではOKなのですが、どうも隠しているだけでフィールドの入力はできてしまいます。
最前面に図形を持ってきてもだめでした。
この方法は間違っているのでしょうか?
ファイルメーカーの自習室にある「インクリメンタル・ポータルフィルタ」ほど複雑でない方法で、検索窓に文字を入力するたびにポータル内の更新が行える方法として、以下のようなスクリプトを設定しました。
〇スクリプトトリガ
OnobjectModify
〇スクリプト
レコード検索条件確定
ポータルの更新
フィールドへ移動(検索窓グローバルフィールド)
このとき、PCのキーボードでは漢字変換が済むまでスクリプトが実行されないため問題なく検索できるのですが、
filemakerGOで同様の操作を行うと、日本語入力時に変換を待たずに1文字入れるごとに更新されてしまうため、漢字の変換ができなくなるという状態になってしまいます。(「山下」としたいのに、「や」でスクリプトが動いてしまう)
いろいろとキーボード設定やスクリプトなどを変えてみたのですが、なかなかうまくいきません。
おとなしく、隣に検索ボタンをつければ良いのですが、便利なので可能であれば実装したいです。
filemakerGOで動かすための良い方法はありませんでしょうか?
himadanee様
ご返信ありがとうございます。
思いっきり勘違いしていたんですね。ポータル設定から行うフィルタ機能の意味がよく分かりました。
「作成したレコードがポータル内には見えなくなってる」のもおっしゃる通りでして、テストで作成したレコードが明細テーブルに大量に入っていました。
動的値一覧で解決です。ありがとうございました。
点検フォームにて消耗品(商品)の入力機能を作成しています。
消耗品の金額が、顧客の契約区分によって異なるという条件がありまして(直接契約、組合契約など)顧客マスタの契約区分で「フィルタリングされた消耗品のみをポータル内のポップアップメニューで表示」させるるべく作業しているのですが、うまくいかず困っています。
現在の設定内容
〇テーブル
顧客マスタ
点検入力(契約区分フィールドへは顧客マスタから契約区分をルックアップしている)
消耗品明細(中間テーブル)
消耗品マスタ(消耗品はすべてこのテーブルにあり、契約区分フィールドによって区分している)
〇リレーション
点検入力(顧客外部キー)=顧客マスタ(主キー)
点検入力(主キー) =消耗品明細(点検入力外部キー)
消耗品明細(消耗品マスタ外部キー)=消耗品マスタ(主キー)
〇ポータル設定
現在は点検入力フォーム内に消耗品明細のポータルを設けてポータルレコードのフィルタで設定を試みている
現在の計算式:点検入力::契約区分 = 消耗品修繕費マスタ 2::契約区分
以上の設定ですと、消耗品明細のレコードの作成は防止できるのですが、消耗品選択時のポップアップ内でそもそも非表示にしたいのです。
※Exact ( 点検入力::契約区分 ; 消耗品修繕費マスタ 2::契約区分 )でもやってみましたが同じ結果でした。
※グローバルフィールドを設けて選択してフィルタリングする手法は、そもそも選択する必要がなく誤入力の原因になってしまいそうなので用いてません。
以上、何卒よろしくお願いいたします。
バージョン情報
filemaker:19.6.1.45(11-01-2022)
Windows 11 Home
shin様
ご回答ありがとうございます。
色々な手法があるのですね。やってみてなるほどと思うと同時に開発者はすごいなと思う次第です。
入力フォームには視認上塗りつぶしがあるのですが、印刷レイアウトは塗りつぶしがなしでも変ではないので、まだ試行している段階ですが、すべてのフィールドに実装して行けそうな気がしています。
どうもありがとうございました。
shin様
とんでもございません。感謝しっぱなしです。
Dayにしてみてやっと理解できてきました。
「月のみ」で表示したいというオーダーなので、日は切り捨てるために/100としているのですね。
うまく表示できるようになりました。
ありがとうございました。
チポ様
了解いたしました。
リレーション
【点検入力T(入力用レイアウトあり)顧客マスタ外部キー】>ー【顧客マスタT 外部キー】【and作業日 > 作業日】
と設定したところ引き算はできるようになりました。(月のみの表示はshin様の計算式で表示されるようになりました)
shin様
お忙しいところ、わざわざモデルファイルを作成して下さりありがとうございます。
質問の答えですが、点検入力Tで今回点検レコードを作成した時点で、今回点検日と前回の点検日の差を見ております。
リレーションは分かってきたのですが、月のみの表示の仕方が分からなかったので点検経過フィールドのlet関数を見せていただき大変勉強になっています。
計算の中で分からない部分があります
Let (
[
D0 = Year ( 点検テーブル::点検日 ) * 12 + Month ( 点検テーブル::点検日 ) + Year ( 点検テーブル::点検日 ) / 100 ;
D1 = Year ( Get ( 日付 ) ) * 12 + Month ( Get ( 日付 ) ) + Year ( Get ( 日付 ) ) / 100
] ;
Int ( D1 - D0 )
)
のD0、D1において月数を算出しようとしているのはわかるのですが、それぞれの最後にYear ( 日付) / 100を足す操作をして、最後にint関数で小数点以下を切捨てているのはどんな操作をしているのでしょうか?
実際にいろんな日付を当てはめて計算したのですが、答えを自分で導き出せずにいます。
何度もすみませんがよろしくお願いいたします。
shin様チポ様ありがとうございます。
説明不足で済みません。
リレーションはアンカーブイでと演習で習いましたので、テーブル構成は次のようにしました。
顧客マスタT フィールド:顧客情報etc
点検入力T フィールド:作業日、その他点検項目etc
リレーション
【点検入力T(入力用レイアウトあり)顧客マスタ外部キー】>ー【顧客マスタT 主キー】
ここで顧客=顧客は設定しているのですが、作業日は点検入力Tの中にしかありませんので、and作業日 > 作業日 日付の降順ソート指定ができません。
点検入力T同士を作業日でを自己リレーションすればよいということでしょうか?
またフィールドの計算式は
month(点検入力T::作業日 - 点検入力T2::作業日)ということでしょうか?
とりあえず上記の様に理解して自分でやってみましたが、入力した日付がそのまま返ってくるのみでだめでした。
試してなかったので、数字フィールドでは「マイナス記号」なのでダメなのかと思いましたが、その計算式で別に問題ないですね。
数字書式で小数1桁、とかやってるのでは。「入力したまま」にしないと表示を調整されてしまうのでだめですね。
himadanee様
ありがとうございます。
pHなど小数の値ばかりなので、小数の書式にしておりました。「入力したまま」にしたら「ー」は表示されるようになりました。
最終的には、
Case(IsEmpty(Self);"―";Round ( フィールド名; 桁数 ))
とすることで、小数点以下の任意の桁数での四捨五入と空欄時の"ー"の両方を満足することができました。ありがとうございました。
あとは「ー」のできない日付、計算、集計タイプのフィールドをどうするかは、また次の宿題にしたいと思います。
お忙しい中回答してくださった、皆さまありがとうございました。
himadanee様、shin様ありがとうございます。
日付、計算、集計には「ー」ができないのですね。早く分かってよかったです。ありがとうございます。
また、フォーム上の未入力時の「ー」はプレースホルダーテキストで実装したいと思います。(レコード上の空欄はとりあえず懸案事項にしたいと思います。)
数字タイプについて聞きたいことがございます。
点検項目に水質のpHなどがありまして数字タイプとしたいのですが、教えていただいたCase(IsEmpty(Self);"ー";self)を使用する際にも、テキストタイプにすれば問題なく動くのですが、数字タイプにするとレコードに反映されません(いろいろな"ー"で試してみましたがだめでした)
数字タイプのフィールドは、レコード上でも点検不要を明示したいものが多いので数字タイプにしながら、「ー」に限らず、点検不要を区別できる何らかの目印を入れたいのですが、何か良い方法はありますでしょうか?
その他、もし出来たらでよいのですが、
点検不要な項目の「印刷時」の処理の仕方でアイデアがございましたら教えていただけたら幸いです。
印刷物で空欄があると、点検し忘れと点検不要の区別がつかず、いらないトラブルの原因となってしまうためです。
初心者です。
機器点検システムのレポート印刷機能を作っています。
点検の際、機器によっては点検が必要な項目と不要な項目がありますので、画面入力時やレポート印刷時に点検が不要である項目については「ー」を入れたいのですが、なかなかうまくできません。
〇条件
・フィールド未入力の時、誤ってフィールドを入力してしまって削除した時のフィールド内容を「ー」にしたい。
・印刷時だけでなく、フィールド入力時にも「ー」が確認できるとありがたい。(たぶんレコード作成時には全て「ー」が入っている状態になると思います)
〇使用するフィールドのタイプ(データ型)
テキスト、数字、日付、計算、集計
以上、よろしくお願いします。
Pages: 1
[ Generated in 0.010 seconds, 6 queries executed - Memory usage: 779.52 KiB (Peak: 832.69 KiB) ]