みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になります。
目次を作成しており、品目によってそれが何ページにのっているかを自動で表示させたいです。
目次が
1 品目1……3ページ
2 品目2……10ページ
3 品目3……1ページ
4 品目4……【20ページ】←この部分です
・
・
自分で作成してみたスクリプトは以下になりますが勘なのでもちろんうまくいきませんでした。
教えて頂けると幸いです。
レイアウト切り替え[(品目のページ番号を取得したいレイアウト)]
プレビューモードに切り替え[]
フィールドへ移動[品目名]
フィールド設定[(目次のレイアウト)のページ番号;Get(ページ番号)]
レイアウト切り替え[目次のレイアウト]
ブラウズモードに切り替え[]
プレビューモードに入ると、レコード選択は無効になります。
ですから、目的のレコードが最終レコードになるように、それ以降のレコードを対象外にします。
この作業は、最後のレコードから行っていくと、早く済みますよ。
プレビューモードにして、総ぺーじ数を取得すれば、そのレコードが属するページが得られます。ただし、そのレコードがページを跨っていると、誤差が出ます。
Offline
4 品目4……【20ページ】←この部分です
4行目だけ、という意味じゃないですよね。
テーブルとフィールドを列挙してください。
同じ品目が複数のページ(レコード)にある、ということはないですか。
Let($目次=List($目次;品目名 & Char(9) & Get(ページ番号));品目名)
という非保存計算フィールドを作って、ボディの品目名の代わりに配置。
スクリプト
プレビューモードに切り替え[]
Loop
スクリプト一時停止[0.1秒]
ページへ移動[次の;最後で終了]
EndLoop
フィールド設定[目次;$目次]
これで全部1つのフィールドに入ります。タブ位置とタブ文字を設定すればそのまま使えます。
品目順にソートするならレコードに取り出し。しかし、これは目次というより索引ですね。
初心者です。
FileMakerで印刷するときに、プレビューに表示される品名が何ページにあるか調べて、目次を作成したいのですが、いい方法はありませんか。
(データ)
1列目 2列目 3列目
アトルバスタチン錠10mg「トーワ」 【効】高コレステロール血症 【用】10mgを1日1回
トライコア錠80mg 【効】高脂血症(家族性を含む) 【用】1日1回106.6mg~160mgを食後
(目次)
アトルバスタチン錠10mg「トーワ」・・・1
トライコア錠80mg ・・・・・・・・・・2
別質問にしませう。
1列目が品目名なだけで全く同じ内容ですよね...
Layouterさんので、できないのかな。
Offline
Layouterさんの方式でできそうなのですが、初心者のため内容が機械できません。
Let($目次=List($目次;品目名 & Char(9) & Get(ページ番号));品目名)
これは、フィールドを作成(例:目次)し、そこの計算式にいれるということですか。
フィールド設定[目次;$目次]は、目次にすべてページと品名が作成されるということですか。
変数の目次とフィールドの目次という意味でしょうか。
Offline
>フィールドを作成(例:目次)
「目次」は最終結果を入れるフィールドなので、別の名前にします。「目次生成用」とか、なんでも。
レイアウトモードでそのフィールドを表示すると目次が変数に入るので、最後に変数値をフィールドに移す。
良く分かってないけど、、確かにできる!
「Layouter」さん
有難うございました。
できました。
Offline
>レイアウトモードでそのフィールドを表示すると目次が変数に入る
プレビューモードで、の間違いでした。
できてよかった。
レイアウトでスライド設定をしている場合は同じものが何回も出てきます。中にはページ数が違うものも出てきます。
これの対処法はないでしょうか?
Offline
ページの最後ではみ出した場合に、そのレコードだけもう一度次ページに送られて計算されたり、そのページの最初のレコードからやり直したりで
重複するようです。
https://fm-aid.com/bbs2/viewtopic.php?id=442
の方にあるwaderさんので「レコードに取り出し」でどうですか。
スライドは考慮してませんでしたが、Shinさんの書いてる「ページをまたぐ場合」があるかどうかも関係しそうですね。
レコードごとのページフィールドにページ番号を入れるスクリプト
最終レコードは最終ページにある、というのが前提なので、ページをまたぐとか、後部に集計パートがあるとだめかもしれない。
新規ウインドウ [スタイル: ドキュメント]
ウインドウの固定
レイアウト切り替え [「印刷用」]
変数を設定 [$目次; 値:""]
Loop
プレビューモードに切り替え []
レコード/検索条件/ページへ移動 [最後の]
変数を設定 [$目次; 値:List( Get ( ページ番号 );$目次)]
ブラウズモードに切り替え []
レコード/検索条件/ページへ移動 [最後の]
レコードを対象外に
Exit Loop If [Get ( 対象レコード数 ) = 0]
End Loop
ウインドウを閉じる [現在のウインドウ]
フィールド内容の全置換 [ダイアログなし; 目次::ページ; GetValue ( $目次 ; Get ( レコード番号 ) )]
Layouterさん
有難うございます。
ページは取得することができました。
なお、Loop中のプレビューモードでの最終ページへの移動は時間がかかり、100ページあると処理に3時間以上要しています。
時間を短縮することは不可能でしょうか。
Offline
全頁をプレビューで生成しないと実際に入るページがわからないので、前のように1回で済ます方法でないと時間はかかりますね。
「レコードに取り出し」ではできませんか。
目次を作るというより、各レコードのページ番号をフィールドに入れるということにして、
フィールドの計算式を変更。
Case ( Get ( ウインドウモード ) = 2 ;//ブラウズモードで計算しない保険
Evaluate( "Let($目次" & Get ( レコード ID ) & "=" & Get(ページ番号) & ";薬品名)" )
)
スクリプトの最後の「フィールド設定]を変更。
フィールド内容の全置換 [ダイアログなし; 目次::ページ番号; Evaluate ( "$目次" & Get ( レコード ID ) )]
後から計算される方が正しいページ番号である、という不確かな前提に基づいてますが、一応出来てると思います。
大量に変数を作るんで、レコード数の上限がどのくらいかも不明。
逆にレコード数が32000以下なら、配列変数にした方がいいのかな。
Offline
結果が全部合ってるのかどうかよくわからない(^^;)けど、郵便番号データで適当に作ったレイアウトを使って24677ページでも処理はできました。2時間ぐらいかな。
プレビューモードでスライダを使ってページを送るだけでしばらく「応答なし」になる...
Offline
配列変数のサイズ上限は繰り返しフィールドとは違うみたいです(122990まで作っても特にエラーは出ない)
しかしグローバル変数を大量に作った状態でうっかりデータビューアを開くと応答が無くなる...
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 561.52 KiB (Peak: 582.42 KiB) ]