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

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

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

You are not logged in.

Announcement

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


#1 Re: 初心者のFileMaker pro Q&A » 売上Tから請求書を作る仕組みはこれでいいですか? » 2023-04-07 15:42:04

せいきゅう wrote:

請求書レコードを発行する(一般的には月替わりのタイミングとかになると思います。)
に関してはどのように処理するのでしょうか?

これは月替わりでなくても別に構わないのですが、月末に駆け込みで新たな得意先ができたりしたら、その得意先の請求書発行を忘れたりするので、意識的に月初に先月分の請求書をまとめて発行するケースを例示しました。月初に得意先を全てループして売上データの存在を確認→請求書発行という手順を取っているためです。

ここはどのタイミングでもいいですが、請求日を売上明細の請求日と一致させるため、例えば4月頭に3月末締分の請求書を発行する場合、リレーションを一致させるために請求レコードには2023/03/31という締日(請求日)を持たせる必要があります。なので、その計算式(先月末が自動的に入ったり、当月末が自動的に入ったり)の設定を楽にするために発行時期を決めておいた方がいいかと思います。
ダイアログで先月分とか当月分とかで選択させてもいいですし。

上でshinさんがおっしゃっているように売上があった時点で自動的に発行されるようにするのが楽で一番いいのですが、ケースによっては請求書の発行のタイミングで別のチェックも同時に走らせる事もあるかと思います。私は請求書発行と同時に複数の処理を走らせていますので毎月同じタイミングで行っています。

#2 Re: 初心者のFileMaker pro Q&A » WebViewerでのテーブル表示 » 2023-04-06 15:14:25

良かったですね。

JSでラップということは、

const someFunc = (arg)=> {
  Alpine.store("alpineData").changeTableData(arg)
}

という風にhtmlのscriptタグ内にラップ関数を記述して、FileMakerからsomeFuncを叩いたということですね。
webDirectだとラップすれば動く、直だと動かないケースがあるという事ですね。
自分はwebDirectは滅多に使わないので勉強になりました。

#3 Re: 初心者のFileMaker pro Q&A » 売上Tから請求書を作る仕組みはこれでいいですか? » 2023-04-06 05:05:56

請求書関係はこのコミュニティ内で検索すると色々有益な情報がヒットすると思いますが、

一般的な商取引(月締めで、同じ月内に複数回の取引がある)のスタンダードなやり方としては

請求書レコードを発行する(一般的には月替わりのタイミングとかになると思います。)
請求書レコードには顧客ID,請求日フィールドがありますので、
この顧客IDと請求日で売上テーブルとリレーションすれば、その月の特定顧客の請求データが得られます。
ということで、後は売上テーブル側に請求日フィールドがあれば良くて、売上レコードの作成が先、請求書レコードの作成は後という順番になります。
この請求日は20日締めや月末締めなど得意先ごとに違うでしょうから、得意先マスターに請求日区分を持たせておいて、非保存の計算フィールド(タイプは日付)で請求日フィールドを作成し、常に今現在の締日が入るようにしておきます。請求書レコード・売上レコードを作成する度に当月の請求日をこの得意先マスターから引っ張ってくればいいと思います。

基本的なテーブル構成は

得意先マスターテーブル
商品マスターテーブル

売上テーブル
売上明細テーブル(売上IDでリレーション)

請求書テーブル

というのがミニマルな構成で、印刷の柔軟性を考慮すると、正規化は崩れますが、売上明細テーブルに得意先IDと請求日をルックアップで持たせておくと印刷が楽です。

これで
請求書テーブル ===> 売上テーブル
請求書テーブル ===> 売上明細テーブル
とアクセスできますので得意先別・請求日別で集計できます。

印刷する場合は売上明細レコードをリスト表示させれば複数ページでも柔軟に表示できます。請求書テーブルのポータルで売上明細を表示して印刷をやろうとすると、複数ページに分けて表示するのは面倒になりますので、設計は楽ではありますが印刷の柔軟性は落ちます。

この構成の利点はリレーショナルデータベースの基本を習得できる事です。なので請求書以外の様々なパターンへの応用が効きます。データベースの解説本などに請求書作成のサンプルが多いのは、RDBの基本をほぼ網羅しているためです。

請求書は業種・業界により様々なので一概には言えませんが、よくある定番パターンはこんな感じかと思います。ただ、取引形態によっては先に請求書を作成して、その請求IDを売上レコード側に持たせるのもありだと思います。決して間違ってはいないと思います。

#4 Re: 初心者のFileMaker pro Q&A » WebViewerでのテーブル表示 » 2023-04-05 15:24:05

単純な数値の配列でサンプルを書きますと

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Elapseit Viewer</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/2.2.17/tailwind.min.css">
    <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.11.1/dist/cdn.min.js"></script>

    <style>
    </style>

    <script>
      /**テスト用json*/
      const json1 = [1,2,3,4,5]
     
    </script>
  </head>

<body>
  <div class="container">
    <div x-data="alpineData">
   
    <ul>
        <template x-for="item in tableData" >
            <li x-text="item"></li>
           
        </template>
    </ul>
  </div>
  <script>
    const alpineData = {
        tableData: [],
        init(){this.tableData = json1},
        changeTableData(json) {
            const data = JSON.parse(json);
          this.tableData = data;
        },
    }
    document.addEventListener('alpine:init', () => {
      Alpine.store('alpineData', alpineData)
    })

  </script>
  </body>
</html>

上のhtmlをwebビューワで表示させます。
テキストを挿入で変数$htmlに上記htmlをまるっとペーストしてください。
webビューワの設定でwebビューワのオブジェクト名を指定して、actionはurlへ移動として、$htmlを計算式の中に指定。

この状態で1,2,3,4,5と縦に並んで表示されているはずです。


もう一つスクリプトを作成して、
[0,1,2,3]
のように数値の配列を作成し、変数$arrayに入れておく。サンプルとして。
そしてwebビューワでJavaScriptを実行で以下の式を記入
"(Alpine.store(\"alpineData\").changeTableData)"
で、下段の引数に$arrayを指定。

このスクリプトを叩くと、webビューワ内の値が$arrayの中の数値の配列で表示されるはずです。

alpineの初期化関数init()はver3になって指定しなくても自動で実行してくれるようになっただけで、廃止ではないです。
x-dataの中のメソッドchangeTableDataを外部から叩くには
document.addEventListener('alpine:init', () => {
      Alpine.store('alpineData', alpineData)
    })
としてグローバルストアにalpineData自体を持たせます。そしてFileMakerから叩く時はAlpine.store(\"alpineData\").changeTableDataとしてメソッドを指定してあげればいいです。
これならボタンを設定する必要はなく、都度FileMaker内のデータを自由に表示できます。
あとはこれをテーブルとして組み立てればいいです。

私もここは結構悩んだ箇所ですが、上記のやり方でうまくいっています。

ちなみにFileMaker Cloud環境だから出来ないってのはないと思いますよ。

#5 Re: 初心者のFileMaker pro Q&A » WebViewerでのテーブル表示 » 2023-04-04 06:26:23

実際に記述されているコードサンプルを少し貼って頂ければ助かります。
更新関数もx-dataで指定したオブジェクト内ですよね?

#6 Re: 初心者のFileMaker pro Q&A » WebViewerでのテーブル表示 » 2023-04-03 15:17:02

Alpine.storeにx-data(以下ではalpineData)全体を入れると外部から変更できるはずです。
以下ではchangeFirstName(string)をFileMakerから叩けば変更が反映されると思います。
動かして確認はしていませんが、多分。

実際はその変更する部分は大きめの配列とかになっていると思うので、置換できるようにダミーテキストを配置しておいて、都度置換し、更新関数を叩くというパターンでどうでしょう。

  <script>
         document.addEventListener("alpine:init", () => {
           Alpine.store("alpineData", {
             lastName: "tanaka",
         firstName: "taro"
           });
         });
         
         //この関数を外部から叩くとfirstNameの値が反映される
          const changeFirstName = (string) => {
                   Alpine.store("alpineData").firstName = string;
                 };
  </script>

#7 Re: 初心者のFileMaker pro Q&A » WebViewerでのテーブル表示 » 2023-04-03 15:03:15

Alpinejs多用しています。
このコミュニティでの題材からは少し離れていて、かつこのライブラリーを日本で使われている方は極々稀ですのでなかなかコメントは付きにくいでしょう。自分はJQueryは使わずAlpine.js一辺倒ですが。

このようなケースでは、自分は基本的にリセット(最初からデータ組み立て)し、再構築する事が多いです。
x-dataで指定したオブジェクト内のメソッドは外部から(FileMakerから)は叩けないので、グローバルのAlpine.storeを使う場面もありますが、あまり分散させると管理が面倒になるので。
表示するデータ部分だけx-dataの外部に外出ししておいて、その部分を都度置換し、再度Alpine.init()関数でリロードさせればいいと思います。なかなかうまく説明できませんが。

#8 Re: 初心者のFileMaker pro Q&A » cURL を利用したクライアント認証 » 2022-03-30 21:20:29

↑で皆様からアドバイスを頂いた者です。

YYYY.crt:pass ($sslCertificate)は.p12ファイルそのものを変数に格納しています。
UNAME($orcaId)はそのままorcaのID
apikey($orcaPw)はorcaのパスワードでなく、apikeyです。


" -H \"POST\" "
&
" -H \"Content-Type:text/xml; charset=utf-8\" "
&
" --cert-type P12 "
&
" --cert $cert "  //p12ファイル
&
" -pass " & $sslPw & " "  //sslパスワード
&
" -u " & $account  & " " //orcaId:apiKey
&
" -d @$data "  //リクエストとしてのxmlデータ

こんな感じです。
参考になれば幸いです。

#9 Re: 初心者のFileMaker pro Q&A » webビューアのjavascriptでの計算結果の取得について » 2021-05-17 10:24:42

元データはFM内にあるようですが、配列にまとめるのが困難な感じでしょうか?
FMで改行区切りのリスト形式でwvのJSに渡して、そこで配列にすると楽なのではないでしょうか。上記JSも改行区切りを配列化されてますので。
さすがに100万レコードを一気に配列化はきついでしょうが。

#10 Re: 初心者のFileMaker pro Q&A » webビューアのjavascriptでの計算結果の取得について » 2021-05-16 16:27:29

FileMakerのスクリプトでwv内の関数を叩いてその結果をまたFM側で受け取る?という事ですかね。

wvの中は
"data:text/html,
<!DOCTYPE html>
<html lang=\"ja\">
<head>
<meta charset=utf-8 >
<title>Array_mode</title>
</head>
<body>
<script>
var store = ['aa','bb','cc','dd','ee','bb','ee','cc','ee','aa','bb'];
   
function getMax() {
   var distribution = {};
     var max = 0;
     var result = [];
var obj =  {count: 0, mode: \"\"};
    store.forEach(function (a) {
        distribution[a] = (distribution[a] || 0) + 1;
        if (distribution[a] > max) {
            max = distribution[a];
            result = [a];
            return;
        }
        if (distribution[a] === max) {
            result.push(a);
        }
    });
obj.count = max;
obj.mode = result;
console.log(obj);
    FileMaker.PerformScript(\"script\", JSON.stringify(obj))
       
}</script>
</body>
</html>
"
として、storeを回す部分を関数getMaxで囲みます。この関数をFM側から叩くようにします。
(store以外の変数はgetMax関数内に移動させています。それと、結果をオブジェクトでまとめて渡すのでobjという変数を新たに作成しています。)

FMのスクリプトは2つ。
まず、getMax関数を叩くスクリプト、名前はなんでもいいので、こちらもgetMaxというスクリプト名にして、
webビューアでJavaScriptを実行[オブジェクト名: "web": 関数名;"getMax"]
とします。これを実行するとwv内のgetMax関数を叩けますので、
今度はこれを受け取るスクリプトここでは"script"と名付けます。
内容は
変数を設定$result : 値: Get(スクリプト引数)
で$resuletの中に戻り値が入ってきます。
上記の式だと
{"count":3, "mode":["ee","bb"]}
ですね。

storeの部分の配列もFileMakerから渡す場合は 、関数の上部を
function getMax(array) {
var store = JSON.parse(array);

に変更し、
webビューアでJavaScriptを実行[オブジェクト名: "web": 関数名;"getMax"; 引数: ここに配列を入れる]
でいけます。

FileMakerで配列を回す事と比較すると全然早いです。

#11 Re: 初心者のFileMaker pro Q&A » webビューワーに表示されている入力フォームの内容を javascript を利用して ファイルメーカーのフィールドに入力させたい » 2021-02-11 07:57:36

大事なの忘れていました。
htmleの<body>タグの直下に
<input id="name" placeholder="name"/>
<input id="age" placeholder="age"/>
を追加してください。

#12 Re: 初心者のFileMaker pro Q&A » webビューワーに表示されている入力フォームの内容を javascript を利用して ファイルメーカーのフィールドに入力させたい » 2021-02-11 06:24:15

連携動作がわかりやすいように少し分解してみましたので、以下のようにやってみて下さい。

まず新しいスクリプトで、

テキストを挿入[ターゲット: $$html] 内容は以下のhtml文を丸っとコピペで
(filemakerに戻す関数を追加しています)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button id="btn">FMへ戻す</button>

<script>

//filemakerからキックする関数
function fmToWeb(param) {
   console.log(param)
   const fmParam = JSON.parse(param)
   document.getElementById('name').value = fmParam.name;
   document.getElementById('age').value = fmParam.age;
  }

//filemakerに値を渡す関数
  function webToFm() {
   const name2 = document.getElementById('name').value;
   const age2 = document.getElementById('age').value
   const obj = {name: name2, age:age2};
   FileMaker.PerformScript('setResultFromWeb', JSON.stringify(obj));
  }

//ボタンに関数を割り当てる
  window.addEventListener("load",() => {
      const btn = document.getElementById('btn');
      btn.addEventListener('click', () => {
          webToFm();
      })
  })
</script>
</body>
</html>

次にwebビューワーの設定でwebアドレスを指定するボックスに
"data:text/html," & $$html
と記述して下さい。
そして設定でJavascriptによるFileMakerスクリプトの実行を許可のチェックボックスを忘れずにチェック。

これでwebビューワーは$$htmlを常に見るようになり、webビューワー側からFileMakerのスクリプトを叩けます。
あとは2番目のスクリプトを実行すればFileMakerのnameとageフィールドの値がwebビューワーに渡ります。

動作がわかりやすいようにJavascritpに関数webToFm()、そしてそれを発動するボタンを追加してるので、そのボタンでwebビューワー側で入力したnameとageを捉えてFileMakerに戻すようにします。
3番目のwebビューワーから受け取るスクリプトですが、
例えば
変数を設定 $fromWb = Get(スクリプト引数)
フィールド設定webviewer::name   JSONGetElement ($fromWb; "name")
フィールド設定webviewer::age   JSONGetElement ($fromWb; "age")
にすると、webビューワー上の値が元のFMフィールドに上書きされます。

注意点として、webビューワーは現在実行しているレイアウト上に配置して下さい。

動作検証していませんが、流れとしてはこんな感じにすると双方の動きが掴みやすいと思います。

#13 Re: 初心者のFileMaker pro Q&A » cURL を利用したクライアント認証 » 2021-01-08 13:46:55

Shin様

こちらからの報告が遅れてすみません。
その他APIもちゃんとレスポンス取得できております。

認証以外はポストデータの組み立てだけなので、認証さえ通れば後はなんとかいけそうです。

このクラウドはまだ殆どのレスポンスがXMLで返ってくるのでJSONへの変換を間に挟みますが、FileMaker純正機能だけで完結出来て素晴らしいです。

ちなみにxml => JSONへの変換はJavaScriptのライブラリ https://github.com/nashwaan/xml-js を使わせて頂き、web viewerのJSで変換して戻しています。
これはjson => xmlも可能です。うまくパースできない場合もあるので保険で以下のスクリプトも用意させてもらっています。
https://github.com/stevenwhitespacesystems/fm-xml2json
こちらはxml => JSONのみで大きなxmlは無理ですよと断りがありますが、手軽に使えて有り難いです。

本当に助かりました。
ありがとうございます。

#14 Re: 初心者のFileMaker pro Q&A » cURL を利用したクライアント認証 » 2020-12-25 09:42:45

ご指導ありがとうございます。
まだまだ認識不足ですが、とにかく出来る限りの事は全てトライしてみます。
cURLはわかってくると色々な事ができて、それがFMから利用出来るのですから素晴らしいですね。

#15 Re: 初心者のFileMaker pro Q&A » cURL を利用したクライアント認証 » 2020-12-25 05:47:47

文字列、ファイル指定、それぞれで試しており、混在していてすみません。
変数名の前の@ですが、ファイル指定する時は変数名の頭に@を使用するとの認識があるのですが(cURLが添付ファイルと解釈する)、ちょっと使い方が曖昧になっているかもしれません。
-d @$post_data
のような感じで一旦添付ファイルを変数に入れて、@を付与して変数と一緒に渡すと思っていたのですが、、、。

#16 Re: 初心者のFileMaker pro Q&A » cURL を利用したクライアント認証 » 2020-12-24 10:15:20

ありがとうございます。
エンコードとかはやっていないんですが、、、。
Termnalからcurl試してみます。debugはverboseオプションですね。

#17 Re: 初心者のFileMaker pro Q&A » cURL を利用したクライアント認証 » 2020-12-23 13:18:45

" -H Authorization:Basic " & $orcaId & ":" & $orcaPw
&
" -X POST "
&
" --cert-type P12 --cert " & $sslCertificate & " --key " & $sslPw & " & " -u " & $orcaId & ":" & $orcaPw
でやってみたのですが、通らず、

$sslCertificateがオブジェクトフィールドに保持したファイルなので、
@$sslCertificateで以下のように最終行を変更してみても同じく「SSL証明書エラー」と出ます。
"--cert-type P12 --cert @$sslCertificate --key " & $sslPw & " -u " & $orcaId & ":" & $orcaPw

SSL証明書は間違いないなく.p12のファイルを指定しており、
https://sms.orca.orcamo.jp/rpc/api01rv2/   以下にパラメーターを付与しております。
SSL証明書エラーはサーバーが返しているのではなく、FMから返ってきているようなのですが、、、。

プラグインの方も考慮しようかと思いますが、FM単体で完遂できればそれに越したことはないと思いまして。

#18 Re: 初心者のFileMaker pro Q&A » cURL を利用したクライアント認証 » 2020-12-23 10:37:12

>>himadanee様
アドバイスありがとうございます。cURLのオプション文は、デバッグできないのでいつも凡ミスに悩まされます。スペースの有無にも注意ですね。

>>Shin様
ありがとうございます。
教えて頂いた文でやってみます。とにかくトライアンドエラーを繰り返してみます。

#19 Re: 初心者のFileMaker pro Q&A » cURL を利用したクライアント認証 » 2020-12-23 03:40:19

Shin様

FileMakerからORCAクラウドへの接続方法を探っていてこのスレッドに辿り着きました。
現状詰まっており、アドバイス頂けたら幸いです。

ver19から追加されたオプションでの記述なのですが、例えば患者情報取得(patientgetv2?id=)の場合、

手探りでやっているのですが、urlから挿入のオプションボックスへの直書きで、

"-X \"POST\" "
&
"-H \"Authorization:Basic " & $orcaId & ":" & $orcaPw &  "\" "
&
"--cert @$sslCertificate"
&
"--pass" & $sslPw
&
"--cert-type \"P12\" "

という記述でやってみたのですが、うまくいかず、

管理機構に質問すると
認証は
--basic -u ユーザー名:APIキー (ユーザー名はオプション)
でやってくれとの返答で、
--cacert [./ca.crt]
 --cert [crtファイル]
 --key [pemファイル]
というオプション記述だとの返答だったのです。思っているのとかなり違う方法です。
しかし無反応でして。
--cacertはFMのcURLオプションではサポートリストに載っていないので無視されてるとは思いますが。

#20 Re: 初心者のFileMaker pro Q&A » webビューアにchart.jsのグラフを表示する方法ついて » 2020-11-20 04:48:22

自分は普通にES6構文で書いてFileMakerで動かす時は以下のbabelのサイトで古い構文に変換して貼り付けています。
https://babeljs.io/repl#?browsers=&buil … alPlugins=

webpackで細かく調整すればいいのでしょうが、面倒なのでちょっとしたものであれば変換はこれで十分かと思います。
これでほぼWindows版FMはいけてます。

#21 Re: 初心者のFileMaker pro Q&A » 映画記録でジャケットを取得する方法はありますか? » 2020-05-16 21:12:11

映画の事には詳しくないのですが、ここでAPIが公開されているのでタイトルと公開年度がわかれば個人利用でしたらポスター画像は簡単に取得できますね。
http://omdbapi.com/
PLATOON 1986
で試したらちゃんとポスターのurlが拾えますね。

#22 Re: 初心者のFileMaker pro Q&A » jsonデータが見えない » 2019-09-07 16:39:00

Bファイル上でデータビューアを開いて$jsonの中身を確認したらどうでしょうか。そこからJSON構造が辿れると思います。

#23 Re: 初心者のFileMaker pro Q&A » jsonデータが見えない » 2019-09-07 13:54:54

もし変数$josnにフィールドデータを格納しているのでしたら、
JSONFormatElement($json)
でエラーが返ってこないか確認してみて下さい。
ちゃんとしたJSON形式になっていないとエラーが返ります。

#24 Re: 初心者のFileMaker pro Q&A » jsonデータが見えない » 2019-09-07 13:50:00

フィールド自体にそのJSONの値を持たせているのでしたら、

JSONGetElement( 対象フィールド ;"商品[0].id")
で取れます。

変数$jsonにJSONデータを格納している場合は
JSONGetElement( $json ;"商品[0].id")
で取得できるはずです。

"$json"となっている箇所は、JSONデータを変数に格納した場合に、その変数名を指定する箇所です。

#25 Re: 初心者のFileMaker pro Q&A » フィールドで条件付きで空白不可に制限をつけたい » 2019-06-21 06:45:02

該当ケースに当てはまるかどうかわかりませんが、
フィールドAへ何かしらの値を入力を行う時に判別が必要だと仮定して。

以下のようなスクリプトを作成

-------------
If [PatternCount ( フィールドA ; "結果A" )]
   現在のスクリプト終了
Else
  カスタムダイアログを表示["フィールドBに値を入力して下さい。"]
  フィールド設定[フィールドA ; ""]
End If
--------------

そしてフィールドAのスクリプトトリガー設定のonObjectValidateに上記スクリプトを指定する。

とフィールドAに"結果A"以外の文字が入ると弾いてくれると思います。
想定ケースが違う場合でも、これを流用すればいけるかなと思います。

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.010 seconds, 7 queries executed - Memory usage: 711.2 KiB (Peak: 765.6 KiB) ]