みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
himadaneeさん、ありがとうございます。
相変わらず雑な理解しかできていないようで、お恥ずかしい限りです。。
必要なのは開始・終了タグの間の文字列ですよね。
そのとおりなんです。
それぞれのPositionを計算して余計な部分を削る方針ならば私でもできそうな気がしています。
XMLを取り込む部分はまだ手つかずで、作業過程で改行が消えてしまった場合はShinさんの計算式が使えなくなってしまうので、この方法も引き続き考えてみます。
Shinさん、ありがとうございます。
シンプルになり理解がだいぶ容易になりました。
今回はXMLファイルごとに「あいうえお株式会社」の部分が変わって、この値を取得したいので、これを変数に指定することはできないのですが、これを"<abcpc:name>"とすれば問題なさそうですね!
私も初心者なので正確な回答ができるかわかりませんが、以前似たような質問に対して、そのような表示形式のポータルは作れないので、24個のポータルを作成し、それぞれに関連テーブルのフィールドを設置して、2つ目以降のポータルには、「最初の行」を2, 3, 4,... と24まで順に設定する、という回答がついていたように記憶しています。
追記:「写真ギャラリー」は知りませんでした。素晴らしい機能ですね!私もバージョンを上げてぜひ使ってみたいです。
かなり古い質問をいまさら引っ張りだしてすみません。。
この頃から比べると多少私の勉強も進み、このトピックに挑戦してみようと思うのですが、以下の箇所が理解できません。ご教示いただけないでしょうか。
質問1
Case(Position(#txt;$key;1;1))
について、#txtは何を引数に設定すればよいのでしょうか?XMLの内容全体だとすると、$keyが含まれるのは前提なので、評価は常に1となるのではないでしょうか?
キモとなる#fncの部分を具体的に書き出してみると、
Let ( [ #txt = "" ] ; #txt & ¶ ) &
Let ( [ #txt = "#lst" ] ; #txt & ¶ ) &
Let ( [ #txt = "" ] ; #txt )
となり、これは要するに
¶ & #lst & ¶
ということだと思うのですが、なぜこれで該当行のみが切り出せるのかが理解できません。。
質問2
#lstには何を引数に設定すればいいのでしょうか?XMLの内容全体だとすると、#txtと同じになってしまいます。
やりたいことは、XML中の
<abcpc:name>【顧客名】あいうえお株式会社</abcpc:name>
の行を切り出したい、となります。
よろしくお願いいたします。
追記:現在はVer 18 Pro Adv for Mac を使用しています。
himadaneeさん、ありがとうございます。
そうですね、その部分を軽く考えていました。
例えば「都道府県」というフィールドを用いて照合して、「宛先」フィールドは顧客マスタからルックアップすればよいと考えていましたが、これだと一番最初の行の値しか入りませんね。。
スクリプトを使って、顧客数だけレコードを作成して、メールアドレスをインポートなどする必要があるでしょうか?
宛先のメールアドレス一覧は簡単に用意できるので、それぞれに1通ずつメールを送れればよいのですが。。
お世話になっております。FMP18 MacOS10.14 使用です。
かなり基本的な質問で恐縮ですが、お願いいたします。
数十から百くらいの顧客に、同一文面の案内メールを送りたいです。メルマガのようなものです。数が少ないので外部サービスを使わずにFMで処理しようと考えています。
想定しているのは、「一斉案内」というテーブルに、「件名」「本文」「宛先」のフィールドを設け、スクリプトで送るという単純なものです。
宛先は、顧客マスタから特定の条件で絞り込んだ、複数のメールアドレスです。
このような構成で、これまで、1つの宛先に1通のメールを送信することは、長年行ってきました。
今回、複数の宛先に同時にメール送信したいのですが、「メールを送信」スクリプトステップの「複数のメールアドレス(対象レコード内の各レコードに1つ)」にチェックを入れるのだと思います。
そうすると、宛先の数だけレコードを作成しないといけないのだと思いますが、この理解で正しいでしょうか?
また、上記構成で、宛先の数だけレコードを作成し、それぞれにメールアドレスを入力する方法について、アドバイスいただけないでしょうか。
なお、全宛先をToに入れたり、全員にBccで送信する方法は、考えていません。
どうぞよろしくお願いいたします。
Shinさま、Hiroさま、
サンプルファイルをありがとうございます!
なぜかShinさんのスクリプトがどちらも動作しません。
原因の見当がつかないのでこの点については相談のしようがありません。
ご両名のファイルの中身を見ていますが、すみません、まだ内容が理解できません。
もう少し研究して、改めてコメントさせていただきます。
取り急ぎ御礼申し上げます。
シャバダバさま、Shinさま、チポさま、
ご回答くださりありがとうございます。
評価版のDLに手間取り確認が遅れてしまいました。
シャバダバさとShinさまのファイルを確認いたしました。
すみません、私の説明が不十分だったのですが、
> 別テーブルにマスタのようなものを設けておいてそれを読みだせる
というのは、複数の明細行の組み合わせを、複数のボタンで読み出すことを想定しています。
上記質問では「商品発注」のボタンを一例で書きましたが、他にも「商品発送」や「在庫破棄」など、様々な種類の請求書があり、それぞれに明細行の組み合わせがあります。
これを、料金マスタのような別テーブルに情報を持たせておいて、そこから請求書のポータル行に必要な箇所だけコピーしたいというのが今回の質問でした。
このような設計ならば、明細行の内容に変更があった場合に、ユーザー側で修正が可能です。
フィールドを設ける設計だと、明細行の修正は設計マターになってしまい、時間がかかってしまうのです。
なお、数量についてはチポさまのご指摘どおりルックアップで解決しそうに思います。
引き続きどうぞよろしくお願い申し上げます。
いつもお世話になっております。FMP11 Mac 使用です。
請求書の各行をポータルで入力・印刷しています。
同じような請求内容はワンクリックで入力できるようにしたいのですが、どのような方法がよいでしょうか?
入力するのは、「項目」「単価」「数量」なのですが、「単価」は「項目」に紐付いて既に自動入力されるので、考慮不要です。
「項目」は、ひとつの請求で複数の行があることを想定しています。例えば「商品代金」「送料」「保管料」の3行が必要となります。
「数量」は、それぞれの行に、同じ数字を入力したいです。
イメージとしては、親テーブルに「数量」というフィールドを設けておいて、
「項目」については、「商品発注」のようなボタンを用意して、クリックすると上記3行が自動作成・入力され
「数量」も同時に自動入力される
ものを想定しています。
いまはスクリプトに変数を持たせておいてそれを入力させていますが、できれば別テーブルにマスタのようなものを設けておいてそれを読みだせると、管理者でなくても編集ができるので便利なのですが、やり方のイメージが掴めません。アドバイスいただけますと幸いです。
どうぞよろしくお願いいたします。
うまくいきました!ありがとうございました!
いつもお世話になっております。FMP11 Mac 使用です。
かなり単純なことだと思うのですが、うまくいきません。
要は他のファイル(マスタ)から関連するレコードのみをインポートしたいのですが、すべてのレコードがインポートされてしまいます。スクリプトでインポートするときは、リレーションが効かないのでしょうか?
■ ファイル構成
顧客マスタ(親) ー 担当者マスタ(子)
報告書(親) ー 担当者(子)
■ リレーション
顧客マスタ ー 報告書
| |
担当者マスタ 担当者
■ やりたいこと
「担当者マスタ」から、「報告書」からみた関連する担当者のレコードを、「担当者」テーブルにインポート(新規レコード追加)したい。
「担当者マスタ」→(インポート)→「担当者」
■ 現在のスクリプト(スタートは「報告書」レイアウト)
エラー処理[オン]
変数を設定[$serial; 値:報告書::Serial]
レイアウト切り替え[「担当者」 (担当者)]
対象レコードの絞り込み[記憶する]
対象レコード削除[]
レイアウト切り替え[元のレイアウト]
レコードのインポート[ダイアログなし; 「顧客マスタ.fp7」; 追加; シフト_JIS]
レイアウト切り替え[担当者(担当者)]
フィールド内容の全置換[ダイアログなし; 担当者::Serial; $serial]
レイアウト切り替え[元のレイアウト]
よろしくお願いいたします。
チポさん、Mozさん、Shinさん、ありがとうございます。
おかげさまで解決しました。
Mozさんにご用意いただいたサンプルを拝見して、私のものと同じ構造なのになぜ・・・といろいろいじったところ、トリガのかけかたが間違っていたことが判明しました。。
OnRecordLoadを設定していましたが、これだと検索で止まってしまいます(すみません理由はよくわかりません)。
これをOnLayoutEnterに設定したところ、問題なく動きました。いろいろ教えてくださりありがとうございました。ただこうすると日付をまたいで作業しているときにレコードを移動しても更新されないという課題が出てきますが、実際の運用ではほとんど問題にならないので、今回は無視することにします。
オマケ的に、
>同じスクリプト内で Get ( 日付 ) をフィールド設定している目的は何ですか?
>変数に直接 Get ( 日付 ) でも構わない気がしますが......
という点につきましては、どうせレイアウト読み込み時に今日の日付は更新しないといけないので、本件と関係なくフィールド設定は必要なため、この値を使おうと考えたためです。おっしゃる通り変数に直接設定しても、まったく問題ないと思います。
なお、Shinさんに教えていただいた条件がわかりやすいので、今回はこれを使用したいと思います。ただ他に特定の日付で検索するスクリプトも必要なので、そちらでは今回教えていただいたものを活用します。
ありがとうございました。とても助かりました。
いつもお世話になっております。 FMP11 Mac 使用です。
以下の投稿と同じような課題をクリアできずにいます。
「スクリプト検索条件に変数を使う」
http://joy-h.com/bbs2/viewtopic.php?id=1161
やりたいことは単純で、「最先期限」という日付フィールドの値が、今日の日付以降(今日を含みます)のものを、レイアウト読み込み時に絞り込みたいです(トリガ使用)。
たまたま他で今日の日付を利用するフィールド(グローバル)があるので、これを利用して、以下のようなスクリプトステップを組んだのですが、検索条件が有効でないというエラーが出ます。
フィールド設定[テーブル::今日; Get(日付)]
変数を設定[$today;値:テーブル::今日]
全レコードを表示
対象レコードの絞り込み[記憶する]
レコードのソート[記憶する;ダイアログなし]
対象レコードの絞り込みの検索条件は、「≥$today」としています。
あるいは、変数を [$today;値:"≥"&テーブル::今日] と設定して、検索条件を単に「$today」としても、やはり同様です。
どのようにすればよいでしょうか?よろしくお願いいたします。
すみません、読み直して、「”御中”を部署名の後に付けたい」とのことですので、単に「宛先_表示」の内容を「顧客マスタ::顧客名_2行 & 顧客マスタ::部署名」として、レイアウト上に「<<宛先_表示>>御中」というマージフィールドを配置すればよいと思われます。
あるいは、個人宛の請求がない(「様」のケースがなくてもよい)ならば、「宛先_表示」を「顧客マスタ::顧客名_2行 & 顧客マスタ::部署名 & "御中"」としてしまえば一番簡単かもしれません。
私も初心者なので良い回答ができるかわかりませんが・・・
:会社名のみでも15文字以上なら1行印刷だが切れないように(自動的に)フォントサイズを小さくしたい
これについては、条件付き書式で対応できる気がします。ただ小さくするときのフォントサイズも固定になるので、長さに合わせてサイズを自由に変えることはできないと思います。
:会社名+部署名が15文字以上なら別々の行(2行)の印刷で”御中”を部署名の後に付けたい
うちの例では、顧客マスタに、「顧客名_2行」というフィールドを持たせておいて、長い名称はそこに2行で入力します(短い名称はそのまま入力)。
そして、請求書のテーブルで、「宛先_表示」などという計算フィールドを作り、「顧客マスタ::顧客名_2行 & ¶ & 顧客マスタ::部署名」として、これをレイアウトにマージフィールドで下揃えで配置します。
<<宛先_表示>>御中
ただこれだと、部署名がないときに不要な改行が入ってしまうので、それを取り除く処理を別にする必要があります(私はsubstituteを使っていますが、部署名がなければそもそも改行を入れないような計算式にすることもできると思います)。
ご参考となれば幸いです。
チポさん、ありがとうございます!
その方法でうまくいきました。
こうしたリレーションを様々なファイルで使用しているので、この方法が応用できます。
とても助かりました!
Shinさん、ありがとうございます。
マスタ側に「条件なし」を入力するのは構わないのですが、台帳の各データは報告書作成のためだけにあるわけではないので、できれば本来のデータのみで照合したいです。
マスタ側の構成は単純で、「条件1」...「条件10」「報告書雛形」「報告書本文(G)」というフィールドがあるだけです。本文はテキストで得るのでFMで保存する必要がなく、都度グローバルフィールドに上書きしてエクスポートしています。
追記:
より具体的には、雛形中に [顧客名] などの形式で項目を配置しておいて、台帳のデータを使ってSubstituteして報告書本文を得ています。
最終的にHTMLで処理する必要があるため、このような内容のテキストデータを得ています。
お世話になっております。FMP11 Mac 使用です。
マスタテーブルと台帳テーブルがあり、両者を組み合わせてテキストデータを書き出す、ということをやっています。
具体的には、マスタテーブルには様々な報告書の雛形が入っており、それと台帳のデータ(例えば顧客名)を組み合わせて、「マスタ::報告書本文」というフィールド(グローバル)で文章を作成し、フィールド内容のエクスポートでテキストデータを得る、という仕組みです。
このとき、報告書の雛形には多くの種類があり、マスタと台帳の照合がうまくいかずに困っています。
両テーブルともに「条件1」...「条件10」というフィールドを作成し、すべてを「=」で照合していますが、必ずしもすべての条件が入力されているわけではなく、空白のフィールド同士がある場合にリレーションが機能しません。
過去の投稿を読んだところ、やはり空白のフィールドがあるとダメなようです。が、リレーションを工夫すればなんとかなるというご説明もあり、その方法がわかると大変ありがたいです。
とりあえず力技で、空白のときは「条件なし」などを入力するとか、「条件1_照合用」などのフィールドを作って「If(IsEmpty(条件1);"条件なし";条件1)」などとしてこれら同士を照合するなどで解決はできるのですが、今後雛形が増えると条件も増える可能性が高く、前者は条件が見づらくなり、後者はフィールドが増えて管理しづらくなるというデメリットがあります。もしリレーションの設定で解決できるならそれがありがたいです。
よろしくお願いいたします。
ただ、
豚肉 200円
鶏肉 100円
この例だと、豚肉はデフォルト料金なので、「顧客A」の情報を持っていません。
結局、マスタ側ですべての料金について顧客ごとにレコードを作成しないといけないでしょうか?
ほとんどの料金が共通なので、それは使いまわしたいのですが。。
豚肉 200円
鶏肉 120円
鶏肉 100円 顧客A
ということではなく、顧客A専用に、
豚肉 200円
鶏肉 100円
という表を作成したいのです。
チポさま、ありがとうございます。
質問がわかりづらくて申し訳ありません。。
>顧客ごとの表示はどのように?
「料金表」は基本的には「料金マスタ」をポータル表示するためだけのテーブルです。
顧客ごと(さらには年度ごと)にレコードを作成します。
そのレコードで、料金マスタの内容をポータル表示させます。
>今のグループごとのポータルに混ぜて表示なら簡単ですよね?
それが、デフォルトの料金と、顧客特有の料金どちらかのみならばできるのですが、両方を組み合わせる方法がわかりません。
グループは、全顧客に共通です。(要は「料金表」のレイアウトはひとつです。)
各グループ内の項目(請求項目)も共通ですが、顧客ごとに金額が異なることがあります。
例:
表のタイトル:野菜
キャベツ 100円
レタス 150円
表のタイトル:肉
豚肉 200円
鶏肉 120円 ←この金額が顧客によっては100円のことがある
よろしくお願いいたします。
補足:
「グループ」というのは、ひとつの料金表内で表示する料金の単位です。
「野菜」「肉」「魚」・・・などをそれぞれ表にまとめて、全体でひとつの料金表を構成します。
当然、マスタ側では、以下のようになっています。
「項目」「価格」「グループ」
ごぼう 100 野菜
セロリ 200 野菜
牛肉 300 肉
羊肉 200 肉
お世話になっております。FMP11 Mac 使用です。
以前以下で質問させていただいたものの延長になるのですが、顧客ごとに内容の異なる料金表を作成しようとしています。
https://fm-aid.com/bbs2/viewtopic.php?id=2672
基本構造は、「料金マスタ」と、「料金表」という2つのテーブルがあり、「料金表」では、グループ(大項目)ごとに料金一覧をポータル表示させています。
例)
表のタイトル:グループA
(料金一覧のポータル)
表のタイトル:グループB
(料金一覧のポータル)
・
・
・
グループA、B、・・・は、マスタの「グループ」なるフィールドに値を持たせていて、リレーションのキーとなっています(「料金表」側ではグローバルフィールドを使用)。
ここで、料金の内容が、顧客により異なることがあります。例えばある顧客は、ある項目が標準料金よりも安い、などです。ポイントは、ほとんどの項目はすべての顧客で共通だけれども、いくつかの項目のみ顧客ごとに金額が異なることです。
前回の質問で教えていただいたように、マスタ側に「顧客」というフィールドを作成し、金額が異なる項目(レコード)を複製して顧客フィールドに顧客名を入力しています。つまりこの例では、ひとつの項目について、標準料金のレコードと、その特別な顧客用のレコードの2つが存在し、顧客に応じて料金表の表示を切り替えることになります(「顧客」がリレーションのキー)。
前回はどうやったのかうまくいったようですが、そのファイルはもはや存在せず、いまやろうとしても再現できません。特に、「ポータルに基本的には標準料金を表示させつつも、特定の項目については顧客ごとの割引料金を表示させる」ことができません。
ご教授いただけないでしょうか。よろしくお願いいたします。
OS:[Mac OS10.10.5]FileMaker Ver:[pro11]
いつもお世話になっております。
「報告管理」というファイルでは、報告書を作成し、顧客担当者にメールを送っています。
宛先は、「顧客管理」という別のファイルで管理しています。
「顧客管理」では、メインテーブルに「代表メールアドレス」というフィールドがあるのに加え、「顧客担当者」という小テーブルをポータル表示させて、担当者情報(メールアドレスを含む)を管理しています。
「報告管理」からメールを送るときに、宛先は、まず「顧客担当者::メールアドレス」をリストで取得して、それに「顧客管理」の「代表メールアドレス」を加えて、すべての宛先に一斉に送るという、雑なやり方をしています。しかし、やはりその件の担当者のみにメールを送るべきシチュエーションもあり、構造を修正しようと考えています。
やりたいことは、「報告管理」の入力レイアウトに、
1.「代表メールアドレスに送る」というチェックボックスを表示し、チェックがある場合のみ送る
2.担当者を一覧で表示(チェックボックス)し、チェックを入れた人にのみメールを送る
の2点です。1は比較的簡単にできると思いますが、2の方法が思いつかないので、アドバイスいただけないでしょうか。チェックがある場合にフラグを立ててグローバルフィールドとリレーションを組んでリストで取得すればいい?ような気がしますが、具体的な方法がわかりません。
どうぞよろしくお願いいたします。
みなさま、ありがとうございます。とりあえずiCalを使う方法を試してみようと思います。
旅人さま
ありがとうございます。
OnTimerスクリプトは使ったことがなく思いつきませんでした。
例えばOnTimerを1時間おきに設定して、その1時間に含まれる期限のタスクがあればそれぞれ自動でメール送信するようなイメージに思われるのですが、正しいでしょうか?
またファイルの操作中はOnTimerスクリプトは実行されないようなので、期限(日付)のデータは別のファイルで管理して本体ファイルとリレーションを組むのがよいのでしょうか?
[ Generated in 0.007 seconds, 6 queries executed - Memory usage: 708.38 KiB (Peak: 765.28 KiB) ]