始めの言葉

「プリンターから印刷できて当たり前」と、ユーザーからもSIerからも軽視されがちなプリンターの世界ですが、実際にはお困りだったり、思ったような印刷結果が得られないまま我慢してお使いの皆様のために、今までの経験が役立てばと、このブログを立ち上げました。印刷の基本から、応用情報、問題の解決方法を情報発信すると共に、PDF化など、これからどうするかについても、ご相談に乗れれば幸いです。ご質問はコメントでお寄せください。

2018年11月17日土曜日

MapDraw を使った帳票設計のテクニック 第18 回 - 条件の設定 - 7 -

Mappingでは帳票設計する際に、文字や罫線など様々な要素に条件付けをすることで、それまでの固定的な表現の帳票設計から容易に脱却することができます。横罫線だけでなく、縦罫線に関しても、データの存在する行に応じて表現することで、帳票の見易さが大きく向上していると思います。
前回は、データの存在する行と、その 1 つ上の行に縦罫線の要素を引くことを、条件付けを使ってどのように設計するかをご紹介してきました。
前回の設計では、その結果、データのある行の中の最上段の行では、データのある行にのみ縦罫線が引かれ、その上の空白行には引かれませんでした。
条件だけを見ればおかしな現象ですが、設計全体を見直すと、元々グループの開始行はデータのある行の中の最上段の行でした。それは、縦罫線の要素に使用している条件付けも、その行から始まることを意味していますので、この結果は正しいわけです。
グループの開始行は 10 行目
他のデータの存在する行と同様に、この最上段の行でも縦罫線の要素をもう 1 つ上に追加するには、2 つの方法が考えられます。
1つは、必ず引かなければならない罫線なら、始めから DrawF 画面上で固定罫線を引いてしまうという方法です。
DrawF 画面で最低限必要な罫線を引く
もう 1 つの方法は、グループの開始行を 9 行目とするというものです。その場合、最も上に位置する横罫線のみを DrawF 画面で引きます。
DrawF 画面で横罫線のみを引く
そして、MapF 画面では、グループ "g1" の開始行を "10" から "9" に変更します。それによって、次のプレビュー画面のように希望通りの縦罫線が引けたことを確認できます。
グループ "g1" の開始行を "9" に変更する
必要な長さの縦罫線が引けた

2018年11月10日土曜日

MapDraw を使った帳票設計のテクニック 第17回 - 条件の設定 - 6 -

前回は、データの存在する行にのみ、横罫線を引く設計を行いました。今回は、同じ考え方を使って縦罫線にも条件を付けてみましょう。
先ず、縦罫線を横罫線と同じようにデータの存在する行にのみ引いてみましょう。
横罫線の時と同様に、MapF 画面で、横罫線の左端に近い場所に、大体 1 行分の長さを持つ縦線をマウスで引きます。マウスのボタンを離すと、次のような線のプロパティを設定する画面が、自動的に表示されます。
MapF 画面で引いた縦罫線
この画面で、次の設定を行います。
- 名前 : これは任意の名前です。
- ゾーン条件 : 横罫線を引く時に作った条件が使えますので、"a" を指定します。
- ペンの太さ、色 : 好みで指定します。
一旦、プレビュー画面で、縦罫線の位置や長さを確認します。
縦罫線のプレビュー画面
条件付けによって、データの存在する行に表示されるはずなので、位置を少し上に上げる必要があります。上下の位置の調整は、線のプロパティ画面の "Y シフト" の値を使って行います。座標の原点は用紙の左上角で、上下方向、つまり Y 座標の値は下に向かうほど大きくなりますので、線の位置を上に移動するには、値をマイナス方向に大きくします。プレビューを確認しながら試行錯誤を繰り返し、ここでは "-35(1/10mm)" に設定すると良さそうです。
Y シフトの値を使って、線を上に移動する。
プレビュー画面
次に、今、引いた縦罫線の間を埋める縦罫線を引きます。MapF 画面上で、先ほど引いた縦線をコピー・ペーストし、真下に移動します。(左右に動かないようにするには、キーボードの、下向きのカーソル・キーを使用して移動するのが便利です。)
キーボードの F5 キーを押して、その線のプロパティを表示させ、次のように変更します。
- 名前 : 別の名前に変更します。
- ゾーン条件 : データの無い行に適用するために "b" を指定したら、どうでしょうか。
データの無い行に引く縦罫線の指定
プレビュー画面を見ると、データの無い行にも縦罫線を引くように指定したことになり、ページの下の方にまで、余分に縦罫線が引かれています。
プレビュー画面
条件が正しくないのが原因ですから、新しい条件を設定します。
次の画面のように、条件設定の中の "行" の指定方法には、"現在行" の他に、1 行下の行を指定するための "+1" や、1 行上の行を指定するための "-1" があります。この数字は、最高 200 まであります。ここでは、次の行がデータの存在する行であることを条件とするために、この画面のような条件を定義して "c" としています。
新しい条件 "c"
縦線 "L2" の条件を "c" に変更したところ、プレビュー画面は次のようになりました。
プレビュー画面
実は自分でも多少疑問な点があるのですが、ここまでできれば、後は 1 行目の上の横罫線を DrawF 画面で引いておけば、きれいな罫線付きの表になります。疑問な点は、次回にお話しします。



2018年11月3日土曜日

MapDraw を使った帳票設計のテクニック 第16回 - 条件の設定 - 5 -

前回は、グループで指定した開始行から終了行までの間で、データの存在する行だけに、下部に罫線を引くという設計を始めたところです。
各行の "6" 桁目に、ブランクが無ければ、つまり、何かのデータが存在すれば実行するという条件を、罫線のプロパティ画面の中で設定しました。しかし、その結果、プレビューすると罫線しか表示されませんでした。
それは、グループの中で条件を設定した場合には、その条件の結果が "真" になった場合だけ実行されるからです。
この場合に当てはめると、"6" 桁目にデータがある行において、罫線を引くことだけが "真" だったので実行されましたが、文字を表示するゾーンに対しては条件を設定していないので、"真" になることがなく実行されなかった、つまり、文字は表示されなかったということになります。
別の言い方では、グループの中で条件を設定する場合には、グループの中の全ての要素に対して条件を設定しないとならないと言えます。

では、前回、設定した "z11" というゾーンに対して条件を設定します。条件は新たに定義する必要はなく、罫線に適用した "a" を使用すればデータのある行の文字を表示できるはずです。
ゾーンに条件 "a" を適用する
では、プレビューしてみましょう。
プレビュー画面
文字も表示されるようになりましたが、元のスプールでは 1 行間隔であるはずの空白行が無くなっているため、行間が詰まっているように見えます。
それは、条件 "a" で指定した "6" 桁目にデータのある行に対して、罫線や文字のゾーンを設定しているからです。つまり、"6" 桁目にデータの存在しない空白行に対する手当てを行う必要があるということです。
そのためには、6 桁目を 1 桁だけ(桁数はもっと多くても構いません。)指定したゾーン "z12" を設定します。
ゾーン "z12" の設定
このゾーンに対して、"a" とは逆の条件 "b" を設定します。"a" とは逆に、"There is"と設定しても結構ですし、"There isn't"のままで、論理ルール欄に "not 1" と指定しても結構です。
条件 "b" の設定
では、改めてプレビューしてみましょう。
プレビュー画面
これで、1 行間隔で空白行が入る、元のスプールと同様になりました。
もちろん、ゾーン "z11" のプロパティで、間隔を調整するという方法もあり得ます。その場合は、間隔の量を調整できることがメリットかと思います。

ただ、良く見ると、文字と罫線の間隔が狭く、下部が重なって見えます。
プレビューを倍率100%で表示した画面
調整するには、文字のゾーンの位置を少し上に上げる、あるいは、罫線を少し下げるという 2 つの方法が考えられます。ここでは、罫線の位置を少し下げます。罫線のプロパティ画面で、"Y シフト" の値を 10(1/10mm 単位)に設定します。Y 軸は下方向に伸びていますので、下に移動するためには、値を大きくします。
罫線の Y シフトの値を 10 に設定する
プレビューしてみると、適当な間隔になったことを確認できます。
プレビュー画面

2018年10月27日土曜日

MapDraw を使った帳票設計のテクニック 第15回 - 条件の設定 - 4 -

今回からは、グループの中にあるゾーンに条件を設定する方法についてお話します。
今までサンプルとして使用している、ベイトップ書房の見積り書の明細のページは、条件を設定していますので、これを使ってご説明しましょう。
明細のページに要求された条件とは次のとおりです。
- 左端に 3 けたのコードが付いた行が明細の行となりますが、全体で何行になるかはページによって異なります。- それらの行の下には、点線の罫線を引きます。
- 最下段の行は、小計の行で、右端に金額のみがあります。この行には、実線の罫線を引きます。
明細ページのスプール・データ
明細ページのプレビュー画面
1. 先ず、明細行のためのグループを、次のように作成します。グループには、"固定グループ" という開始行と固定行を指定するタイプのものと、"可変グループ" という終了行を条件で決めて終了するタイプのものの 2 種類があります。明細行の行数は可変なのですが、ここでは次のように終了行に大き目の値を指定した "固定グループ" とします
- グループ名 : g1 (これは任意です。)
- 開始行 : 10
- 終了行 : 68
明細行用の固定グループ
2. このグループの中にゾーンを定義します。初めは条件を無視して、そのままスプールのデータを表示するようにゾーンを作成します。明細行の桁を全て納めるために、ゾーンの設定は次のようになります。
- ゾーン名 : z11 (これは任意です。ここではグループ g1 の 1 つ目のゾーンであることを表しています。)
- データ位置 桁 : 6, 長さ : 123
- フォント名 : MS ゴシック
- フォント・サイズ : 9
- 固定ピッチ : 18
ゾーンのデータ位置の設定
ゾーンのフォントとスタイルの設定

ここまでの設定で、プレビュー画面は次のようになります。
3 ページ目のプレビュー画面
3. では、ここで、明細行の下に点線の罫線を引きます。DrawF 側の画面で引く罫線は、本数が固定になりますから、明細行の下にのみ罫線を引くという条件を満たせません。そこで、MapF 側の画面のグループ "g1" の中に罫線を引きます。罫線を引くと、自動的に次のような画面が表示されます。この画面では、次の設定を行います。
- 名前 : L11(これは任意です。)
- 太さ、色、種類

グループ g1 内に罫線を引く
4. この状態でプレビューすると、次の画面のように、グループで定義した10行目から68行目まで全ての行に罫線が表示されていることが分かります。
プレビュー画面
5. そこで、明細行でのみ罫線を引くことを実行するための条件を指定します。明細行は、必ず左端に 3 桁のコードが付いていますので、その先頭桁の "6" 桁目にデータがあることを条件とすることにします。そこで、罫線のプロパティ画面(キーボードの F5 キーを押します。)を開いて、"条件" タブの画面で次のように設定します。
- "新規" ボタンを押して、条件名を定義します。(ここでは "a" としました。)
- "There isn't" : もし、無かったら
- in line "現在" : グループで指定した 10 行目から 68 行目まで、1 行ずつチェックします。
- between columns "6" and "6" : 6 桁目
- the value " " : ブランク 1 桁
これで、各行の6桁目にブランクが無かったら、つまり何かデータがあったら、この罫線を実行するという条件を設定したことになります。グループの中に指定したゾーンや罫線の条件設定では、行の指定が "現在" や、"+1"、"-1"、あるいは特定行といったように、グループの中の各行との相対関係を指定できる点が、単独のゾーンに設定する条件付けと大きく異なる点です。
罫線の条件設定
6. さて、この状態で、プレビューすると、どのようになっているでしょうか。次の画面のように、罫線のみが表示されてしまい、文字は消えてしまいました。この後どうするかを次回にお話しいたします。
罫線に条件付けした後のプレビュー画面



2018年10月21日日曜日

MapDraw を使った帳票設計のテクニック 第14回 - 条件の設定 - 3 -

前回までは、フォーマット全体に対する条件設定でしたが、今回はフォーマット内部のゾーンに対する条件設定についてお話します。ゾーンの条件設定と言っても、単独に存在するゾーンと、グループ内に存在するゾーンでは、後者の方が細かい注意が必要になります。
今回もサンプルには、架空のベイトップ書房の見積書を使用します。この見積書は、あるお客様の見積書のスプールやデザインを元に、サンプル用に変更を加えたものなので、基本的な考え方は共通です。これから条件付けのお話しをするために使用する消費税に関するコメントも、そのお客様では連続用紙にドット・プリンターで印刷していた時代に使用していたものと同じです。つまり、ドット・プリンターに印刷していた時のアプリケーションには変更を加えずに、Mapping を使って新しい表現方法に変わっているということです。

そのお客様では、見積り金額を表示するに当たって、消費税込みの金額を使用する場合と消費税抜きの金額を使用する場合があります。そこで、見積書の表紙の事前印刷部分に、予め "上記の御見積り金額には消費税が含まれていません。" という文言を印刷しておきます。そして、消費税込みの金額を表示する場合には、スプール・ファイルの中の該当する場所に "*" を続けて配置して、プリンターが印刷する "*" によって上からその文言を打ち消すという方法が採られていました。
Mapping を使って、見積書を PDF ファイル化するに当たっては折角なので、直接 "上記の御見積り金額には消費税が含まれています。"、若しくは、"上記の御見積り金額には消費税が含まれていません。" という文言を表示するようにしたいという、お客様のご要望がありました。
そこで、具体的には次のようなゾーンの設計を行って、ご要望を実現しました。
なお、"*" が存在する場合には、20 行目の 34 桁目から始まるものとします。

1. 先ず、消費税が含まれる場合のゾーンを設計します。その場合は、スプール・データの中に "*" が含まれています。"*" は表示しないようにするために、"*" の無い、必ずブランクとなっている、21 行目の 34 桁目から 1 桁をゾーンに対応する桁の場所として指定します。
消費税が含まれる金額の場合のゾーンのプロパティ
 2. プロパティの画面には、"ゾーンの後に追加する文字" という欄があります。ここには、スプール・データには含まれない固定の文字列を記入できます。そこで、ここに "上記の御見積り金額には消費税が含まれています。" と入力します。

3. ゾーンのプロパティ画面の "条件" タブ画面で条件設定を行います。条件の設定項目自体は、前回までにお話ししたフォーマットの場合と同じです。このサンプルでは、次のように設定しています。
- There isn't : もし、無かったら
- in line 20 : 20行目
- between columns 34 and 34 : 34桁目
- the value 1 桁のブランク : 1 桁のブランク
以上から、20 行目の 34 桁目にブランクが無ければ、つまり何かデータがあったら実行するという設定になります。
もちろん、データは "*" であることが分かっていますので、次の設定でも良いわけです。
- There is : もし、あったら
- the value * : *
ゾーンの条件設定画面
3. 次に消費税が含まれない場合のゾーンを設計します。既に定義した消費税が含まれない場合のゾーンをコピーして、それを編集するのが簡単だと思います。その場合、編集する必要があるのは、次の項目です。
- ゾーン名 :  消費税なし
- ゾーンの後に追加する文字 : 上記の御見積り金額には消費税が含まれていません。
- There is : もし、あったら
あるいは、消費税ありと同じ条件のままとして、"論理ルール" 欄に "not 1" と設定します。
消費税が含まれない金額の場合のゾーンのプロパティ



ゾーンの条件設定画面

4. MapDraw では、ゾーンを重ねて配置できますので、上記の方法で設計した 2 つのゾーンを、次のように重ねて配置すると、同じ場所に "消費税込み" か、"消費税抜き" かのどちらかの文言を表示することができます。
MapDraw の MapF 画面
MapDraw のプレビュー画面








2018年10月13日土曜日

MapDraw を使った帳票設計のテクニック 第13回 - 条件の設定 - 2 -

サンプルとして使用している見積書のように、1 ページ目の鑑と、2 ページ目以降の明細という構成の帳票は、多くあると思います。鑑のページと明細のページの切り替えの条件としては、次のような設定方法もあります。
次の画面のように、条件設定の選択肢の中に "First" があります。これを鑑のページに適用します。
フォーマットを 1 ページ目に使用する条件設定

明細のページには、前回の条件設定のように、同じ条件を設定した上で論理ルール欄に "not 1" と設定します。つまり、2 つの相反する条件を適用する場合には、同じ条件を設定した上で、片方の論理ルール欄に "not 1" と指定すれば良いということです。
フォーマットを 2 ページ目以降に使用する条件設定
マルチ・プレビューの機能を使って、条件設定が正しく機能することが確認できたら、安心することなく、次の段階へ進みます。
それぞれのフォーマットに対して "プロジェクトを生成する" ボタンを押して、プロジェクト・ファイルを生成します。デフォルトでは "フォーマット名シーケンス番号"というファイル名になります。次の画面のようにファイル名を変えても構いませんが、1 つのフォーマットに対して同時に生成される 3 つのファイルのファイル名は同一であること、そして、フォーマット間ではファイル名を同一にしないことが鉄則です。
明細ページ用のプロジェクトの生成画面
MapDraw 上での生成が完了したら、OS/400 上の Mapping メニューの中の "MapDraw フォーマットの取り込み" を行います。
MapDraw フォーマットの取り込みを行う画面
フォーマットの取り込みが完了したら、次のコマンドを使用して、PDF ファイルを生成します。その際に重要なのは、1 つのスプール・ファイルに対して、複数のフォーマットを条件に応じて切り替えて適用する必要がある場合には、"Sequence" パラメーターの値を "*MRG" と指定することです。単独のフォーマットを適用する場合には、ここには "00010" といったように固定の値を入力しますが、複数のフォーマットを条件に従って適用するためには、"*MRG" を指定することにより、Mapping がフォーマットの条件を読み取って切り替えてくれます。
Mapping V7 で PDF を生成する MAPCPYSPLF コマンドの指定-1
Mapping V7 で PDF を生成する MAPCPYSPLF コマンドの指定-2
Mapping V7 で PDF を生成する MAPCPYSPLF コマンドの指定-3
青矢印で指定したパラメーターの値が正しく入力されていれば、MapDraw のマルチ・プレビュー画面で確認した結果と同じ PDF ファイルが生成されます。


2018年10月6日土曜日

MapDraw を使った帳票設計のテクニック 第12回 - 条件の設定 - 1 -

MapDraw では、ゾーンや図形、更にフォーマット自体が実行される条件を設定して、様々な帳票設計へのご要望に対応することができます。今までサンプルとして使用してきた、ベイトップ書房の見積書のように、1 本のスプールに対して、1 ページ目は鑑や表紙、2 ページ目以降は明細という 2 種類のフォーマットを適用したいというのは、一般的なご要望と思います。
先ずは、この見積書を例に、複数のフォーマットを用意して、条件に応じて適用する方法についてお話しましょう。
1. 表紙用のフォーマットと、明細用のフォーマットは同じフォーマット名を使用します。そして、シーケンスの番号をそれぞれ順番に振ります。次の例では、フォーマット名は "BAYTOP" で共通ですが、表紙のシーケンスは "00010"、明細のシーケンスは "00020" としています。これは、最後に PDF ファイルを生成するために使用する "MAPCPYSPLF" コマンドのパラメーターに関連します。
表紙のプロジェクトのプロパティ
明細のプロジェクトのプロパティ
2. 表紙と明細をそれぞれ設計していきますが、条件に応じて、表紙を適用するページなのか、明細を適用するページなのかを、Mapping が PDF ファイルを生成する時に判断できるように定義しないとなりません。このスプールでは、各ページの右上に 9 桁の見積り番号がありますが、このスプールができた経緯から、表紙のページでは 5 行目の 106 桁目から始まっていますが、明細のページではどのページでも共通して 4 行目の同じ桁から始まっています。これは、このサンプル・スプールの場合の表紙と明細の違いであって、要は、表紙と明細のページで必ず異なる箇所、ただし、明細のページでは共通なものを見つけることが重要です。
表紙のページの見積り番号の位置
明細のページの見積り番号の位置
3. この違いをプロジェクトの条件に定義します。表紙のプロジェクトのプロパティ画面には、"表面" というタブの画面があります。表紙の場合は、見積り番号の先頭が必ず 5 行目の 106 桁目にありますので、ここに何かデータがあったら、つまりブランクではなかったら適用するという条件を次のように設定します。
5 行目、106 桁目に何かデータがあったらという表紙の条件設定
- There isn't は、もし無ければ
- in line "5" は、5行目に
- between columns "106" and "106" は、106桁目に
- the value の欄には、画面には見えませんが、ブランク 1 桁が定義されていますので、以上を組み合わせて、上記のような条件になります。この条件は、最大 50 まで登録できますが、その場合には、下にある論理ルール欄で、論理式を定義する必要があります。

4. 明細ページの条件は、5 行目の代わりに 4 行目を定義すれば良いのですが、論理ルール欄を利用して、表紙ページを否定した条件 "not 1”も使用可能です。
表紙のページの条件を否定した明細のページの条件
5. これらの条件の設定が正しいかどうかを確認するには、"マルチ・プレビュー" を使用します。表紙でも明細でも、どちらかのプロジェクトの画面の "ホーム" タブ画面の右上にある "マルチ・プレビュー" のボタンを押します。スプールのページを "1" ページから順に変えていった時に、"2" ページ目以降で明細の設計のフォーマットに変わったことが確認できれば OK です。
マルチ・プレビューのボタンと 1 ページ目のプレビュー
スプールの 2 ページ目に切り替えて明細になったプレビュー画面