みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
使用環境はFileMaker13advanced、Mac OSX Yosemiteです。
日付フィールド、名前フィールド、フィールドA、フィールドBを含むデータが100個あるとします。
名前は6人分です。
名前を小計ソート対象にした印刷レイアウトを①②と2つ作りました。
フィールドBに数値が入力されているデータが6人中4人について合計20個あります。
ここで、フィールドBに数値が入力されている4人は片方のレイアウト①で印刷し、入力が一度もされなかった残りの2人はレイアウト②で印刷したいのです。
どのような計算式にすれば、これらが自動的にそれぞれのレイアウトで印刷されるように出来ますでしょうか。
是非よろしくご教授下さい。
Offline
フィールドBを検索で絞り込んでは。。。
loop で、1レコード毎に、フィールドBの値を見ながらレイアウトを変更して印刷する、という方法がオーソドックスかも。
Offline
全てのレコードをみて、
一つでもフィールドBに入力が有る人の全てのレコードはレイアウト1で印刷。
一つも入力がない人のレコードはレイアウト2で印刷。
ではないのかな?
Offline
全てのレコードをみて、
一つでもフィールドBに入力が有る人の全てのレコードはレイアウト1で印刷。
一つも入力がない人のレコードはレイアウト2で印刷。ではないのかな?
そうなんですね。
レコード毎に印刷したいのではないので、ちぽさんが言われるような印刷をしたいのです。
これをできれば名前の五十音順に印刷していきたいのです。
長年どうやればいいんだろうと思いながら悶々としてきました。
どなたかアイデアはございませんでしょうか。
Offline
チポさんの方法ですと、フィールドBにデータの有る人を印刷して、その後に無い人を印刷する事になります。
> 名前の五十音順に印刷していきたい
でしたら、レコード毎にレイアウトを変更しながら印刷するしかないですね。
Offline
了解しました。
では五十音順は諦めます。
フィールドBにデータの有る人を印刷して、
全てのレコードをみて、
一つでもフィールドBに入力が有る人の全てのレコードはレイアウト1で印刷。
のところが難しいのですが、どのような検索と計算式にすれば良いでしょうか。
ぜひご教授下さい。
Offline
そこは、最初にたまたまさんが書いていらっしゃいますよ。
ところで、なぜレコード毎に印刷する方法を選択されないのですか。後での紙の仕分けは手間がかかりますよ。レイアウトから印刷データを作るまでは、電子的に行われますので短時間で終了しますが、印刷そのものは機械的な物ですので、長時間かかります。最終的には、どちらの方法でも印刷完了までの時間はほぼ同じになるはずです。どうしても1手間で印刷したいのでしたら、PDFファイルへページを追加して書き出していき、一気に印刷、という方法もあります。
Offline
1ページに、1人の顧客の複数の日付のレコードが入ったレイアウトでして、これにA、Bの2種類のレコードが含まれています。
手間や時間は掛かってもいいのですが、過去ログを読ませて頂いて、loop処理で仕分けをしようとしてみたのですがうまく行きませんでした。
Loop
If[ (フィールドBの集計値) > 0]
レイアウト切り替え[ レイアウトその1]
Else
レイアウト切り替え[ レイアウトその2 ]
End If
印刷[]
レコード/検索条件/ページへ移動[次の; 最後まできたら終了]
End Loop
最初に選ばれたレイアウトで固定されて、すべてのデータが印刷されてしまいます。
Ifの条件式がまずいのでしょうか。
Offline
なんか話がかみ合っていないような。。
私の前レスは回答ではなく、おるふぇさんの質問の確認でした。
で、
その回答は私の通りでいいということですよね。
さらにお尋ねしますが、
1ページに複数のレコードを印刷するレイアウトということですが、
名前が変わったら改ページでもいいのでしょうか?
それとも続けて、詰めて印刷したいのでしょうか?
改ページならば、
一つの名前ごとにまとめて印刷を考えればいいでしょうね。
詰めて、だと、、
1ページにボディのレイアウトを変えて印刷はできませんから、
オブジェクトの表示・非表示でできないかな。。
どちらの場合でも五十音でソートした状態で印刷できるでしょう。
Offline
名前で検索、レイアウト切り替え、印刷
の繰り返しでは?
Loop
新規ウィンドウ
レコードへ移動[最初]
一致するレコードを検索[名前]
If[ (フィールドBの集計値) > 0]
レイアウト切り替え[ レイアウトその1]
Else
レイアウト切り替え[ レイアウトその2 ]
End If
印刷[]
ウィンドウを閉じる[現在の]
レコード/検索条件/ページへ移動[先頭]
一致するレコードを除外//これはどうするかな?
ExitLoopIf[Get(対象レコード数)=0]
End Loop
1ページに複数のレコードを印刷するレイアウトということですが、
名前が変わったら改ページでもいいのでしょうか?
ご回答ありがとうございます。
名前が変わったら改ページして印刷したいのです。
scripterさんの回答内容は今晩中に試してみます。
ありがとうございます。
Offline
1ページに複数のレコードを印刷するとき、標準機能では同じレイアウトの印刷しかできません。
異なるレイアウトを印刷するには、擬似的にレイアウトを変更するしか有りませんね。例えば、2個のレイアウトを上下に並べておき、それらの不要な方を条件付き書式で印刷しないようにしておき、フライドさせる、なども考えられたらいかがでしょう。
Offline
scripterさんの方法でできますが、
もう一つの考え方を。
別テーブルを作り、
名前をユニークにして、全部の名前のレコードを作ります。
名前のマスターのようなものが有ればそれを使えばいいですね。
元のテーブルと名前でリレーション。
マスタの方でフィールドBをCountして、
Bに入力がなければ0、
有ればその数が返されます。
これで印刷レイアウトを決定できますよね。
マスタを50音順(逆順の方がいいか?)に並べて、
順に、関連レコードへ移動して印刷
を繰り返せばいいでしょう。
Offline
「全レコードが印刷対象」とした場合
データレイアウト、印刷レイアウト1、印刷レイアウト2があるとして
名前フィールドでデータレイアウト2と自己リレーションして
スクリプトは
全レコードを表示
変数を設定 [ $n; 値:0 ]
Loop
レコードのソート [ 名前フィールド; 昇 順]
レコードへ移動[ 最初の ]
関連レコードへ移動 [ データレイアウト2; 使用するレイアウト計算:
Case ( フィールドBの集計値 > 0 ; "印刷レイアウト2";"印刷レイアウト3") ][ 関連レコードだけ表示 ]
変数を設定 [ $n; 値:$n+Get ( 対象レコード数 ) ]
レコードのソート [ 名前フィールド; 昇 順]
印刷 [ 対象レコード ]
レイアウト切り替え [ データレイアウト]
全レコードを表示
レコードのソート [ 名前フィールド; 昇 順]
レコードへ移動[ 最初の ]
複数レコードを対象外に [ $n ]
Exit Loop If [ Get ( 対象レコード数 ) = 0 ]
End Loop
とかは?
Offline
Scripterさんのご意見の最後の部分はどうしたものかと考えていたら、旅人さんがアドバイスして下さったおかげで、まずはこの長年の懸案が解消したようです。ありがとうございます!!
Shinさん、アドバイスありがとうございます。条件付き書式で不要なデータを印刷しない方法は過去ログにも書かれていたような気がするので勉強してみます。
チポさん、ありがとうございます。問題は解決しましたが、名前の別テーブルはすでにあるのでやってみました。別テーブルでフィールドBをカウントすることができませんでした。もう少し試行錯誤してみます。
しかし、長いこと解決できなかった印刷の手間が省けることになって感謝感謝です!!!!!!
別の問題も抱えているので別タイトルで質問させて下さい。今後ともよろしくお願い致します。
Offline
このスクリプトを実際に走らせているのですが、最初は分からなかった問題が出てきたので、再度質問させて下さい。
問題とは、レコードが飛んでしまうことです。
[関連レコードへ移動]のオプションで「関連レコードのみを表示(現在のレコードのみ照合)」としていると、レイアウトの切り替えは実行されるのですが、レコードがときどき飛ばされてしまいます。
そこで、「関連レコードのみを表示(現在の大将レコード内のすべてのレコードを照合)」とすると、レコードが飛ばされることはなくなるのですが、すべての印刷が同じレイアウトで実行されてしまいます。
なお、飛ばされるレコードの理由は理解できませんが、1つしかレコードを含まない名前の場合に時々飛ばされます。
どなたか、どこに原因があるか教えて頂けないでしょうか。
Offline
飛ばされる、というレコードを、関連レコードへ移動、で表示出来ていますか。名前の後ろにスペースが有るなどの問題があるのでは。
Offline
飛ばされるレコードは表示されていないようです。
[関連レコードへ移動]の次の行に[スクリプトの一時停止]を入れて、確認しました。
名前の終わりにスペースが入っていることはなかったです。
うーむ・・・なんでしょか
Offline
索引が壊れているかな。
Offline
本ファイル、およびすべての外部データソースファイルを修復して、修復したファイルだけで再構成して、スクリプトを実行しましたが、改善は見られませんでした。
Offline
ならば、フィールドの内容か、リレーションその物の問題。
前者は、検索している単語をコピーし、検索する方のテーブルのフィールドで、=="単語ペースと" という検索を行なってみるとどうなるかをチェック。
後者は、ポータルで、関連レコードが表示されるかを見れば良いでしょう。
おそらく、前者で思い通りに検索できないと思いますが。
Offline
後者ではポータルでデータは表示されています。
前者の部分を、過去ログを探してみましたが、どのように試せばよいのか分かりませんでした。
Offline
ポータルで表示され、関連レコードへ移動で絞り込めない、というのは、考えにくいですが。
現場で見てみないと無理かな。
Offline
Pages: 1
[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 576.75 KiB (Peak: 613.29 KiB) ]