※追記(2021.4.24)
こちらの記事中では GetFieldValues関数を拝借しておりました。
そこを While関数で書き換えました記事を書きましたのでご笑覧ください。
kei0114.hatenablog.com
-
- -
以前にも書いたことなんですが、例えば「入退院履歴」(入院日:◯月◯日〜退院日:◯月◯日)のようなものがあれば、「今日現在入院している人を検索して抽出する」ことができます。私はその抽出結果を、あらためて「病床稼働履歴」として別のテーブルに書き出しています。毎日、スクリプトで書き出しています。
この 3.病床稼働履歴 というのは、1つのレコードが「○月○日、○病棟の○病室に○○さんが在院していた」という履歴で、1と2を元に、毎日、スクリプトでレコードを生成しています。その日毎の入院患者名簿を作っているというわけです。病床が稼働している数だけレコードを生成してしまおうというわけです。このレコード数をカウント関数で数えることで、病床稼動数を算出しています。
病床管理で私が基本にしている3つのテーブル - ぺーぺーぷーぷーな日々
で、私の場合は「病床移動履歴」(入退院履歴)と名づけたテーブルから当該日を抽出するのですが、この履歴から抽出した結果は例えばこんな感じになります。
患者番号 | 入院日 | 病棟 | 病室 | 病床 | 退院日 | - | - |
---|---|---|---|---|---|---|---|
001 | 1月1日 | 一般病棟 | 201 | A | 1月10日 | ||
008 | 1月1日 | 一般病棟 | 201 | B | - | ||
013 | 1月2日 | 療養病棟 | 301 | B | - | ||
106 | 1月3日 | 回復期リハ病棟 | 501 | - | - | ||
051 | 1月4日 | 一般病棟 | 210 | C | 1月20日 | ||
- | - | - | - | - | - | ||
- | - | - | - | - | - |
この情報から、患者番号、病棟、病室、病床を当該日の「病床稼働履歴」として書き出したい。
その日入院していた人の数を稼働数として、100件なら100件分を書き出したい。
書き出したいフィールド数が多いと大変なんだけど、これくらいなら変数で書きだしたほうが早かろう。
そこでまず、これらのフィールドの情報を
- $患者リスト
- $病棟リスト
- $病室リスト
- $病床リスト
という変数に格納します。変数名は任意で。
それぞれの変数には、100件なら100件分を改行区切りで格納したい。
ここで便利なカスタム関数、GetFieldValues 関数を利用します。
私はこの関数を、 FMPro.info で見つけました。ありがとうございます。
FileMaker Proの標準関数であるList()や既に公開しているカスタム関数SimpleList()は、関連レコードの指定したフィールド値を改行区切りで取得してくれる関数ですが、このGetFieldValues()関数は、関連レコードではなく現在のレコードセットの指定フィールド値を取得するための関数です。
http://www.fmpro.jp/fmi/xsl/plugin/cf.xsl?ID=0063
この関数をつかって、それぞれの変数( $患者リスト、$病棟リスト、$病室リスト、$病床リスト )に改行区切りでデータを格納します。
こうやってデータを格納した状態で、書き出したいテーブルに移動して新規レコードとして書き出していきます。
あとは Loop スクリプト 、そして GetValue 関数を使って、1行目、2行目、3行目と取り出していきます。
画像を参考までに。
(実際に使っているものなので、フィールド名が紛らわしいかもしれませんが、ご了承ください。)
補足すると、改行区切りから取り出すための1行目、2行目、3行目と指定するのにも変数を使っています。
(ここでは $count という名前の変数にしています。)
この変数に1ずつ足していって、Loop させる。
そして、 ValueCount 関数で行数を数えて、それを超えたら Loop 終了。
あ、あと、日付は $date として変数を設定してあります。
むかし、私は、「えー、100件も繰り返すなんて拷問だよー」と思っていたのですが、瞬時に終わります。
コンピュータにとっては、これくらい楽勝なんですねえ。
以前は「フィールド内容のインポート」とかを使ってたのですが、今回の方法の方が速いかも知んない。
サーバーサイドでも使えますし。