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

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

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

You are not logged in.

Announcement

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


#1 2020-06-19 12:17:12

たき
Member

レシートプリントの出力

Tm-m30 エプソン
FM18advanced
FM server 17
FM go

tm-m30のレシートプリンターで直接プリントができるようにしたいと考えております。エプソンからePOS-Print_XML_Sampleを
https://partner.epson.jp/support/details/contents141/
ダウンロードしその中のePOS-Print_XML_Sampleサンプルファイルで実際に無線環境でサンプルファイルの内容がプリントすることができました。

しかしファイルメーカーのフィールドをプリントしようとした場合にどのようにしたらよいかわからなく、エプソンに問い合わせてもファイルメーカーについては回答できないとの事でした。
エプソンのePOS-Print Editorをつかってxmlを作成できるとのことですが、そのXMLをファイルメーカーとどうつなげるのかわかりません。
どのようにするのか教えていただけないでしょうか?

Online

#2 2020-06-23 22:22:36

himadanee
Guest

Re: レシートプリントの出力

会員限定なので私はダウンロードできませんが、そもそもFileMaker用のサンプルファイルでスクリプトも作成済みのようですから、そのまま流用できないのですか?
多分XMLファイルを生成して「URLから挿入」で送信しているんだと思いますが...

#3 2020-06-23 22:46:30

Shin
Member

Re: レシートプリントの出力

まずは、送り込んでいるXMLファイルの中身をみて、内容を変更してみましょう。(この段階では、タグは変えてはダメですよ)
変更する内容を、FMのデータで置き換えてみると、データが印刷できるようになるでしょう。データの埋込みは、テキスト処理を行えばいいです。または、埋め込む位置に変数を設定して、変数に値を設定していってもいいです。
次に、そこから少しずつタグを変えていくと、デザインも変更できます。
最終的には、FMからXMLを作り出すようになれるといいですね。

Offline

#4 2020-06-24 09:23:37

koeda
Member

Re: レシートプリントの出力

FileMakerのフィールドとの関連づけはePOS-Print Editorで行うのではありません。
皆さんの回答にもありますが、XMLファイルが印刷データの実体です。
ロゴマークの画像、印字データ、改行等の制御などすべて送信するXMLファイルで行っています。

サンプル「ePOS-Print_XML_Sample.fmp12」の「Send」スクリプトをよくご覧いただきたいのですが、
以下のように、「印刷::印刷データ」フィールドをXML("<s:Body>" 〜 "</s:Body>"の間)に組み込んで、
プリンタにHTTPで送信しています。

1)変数$headerにヘッダ情報をセット
2)変数$bodyに印刷データをセット(ここで印刷::印刷データのデータを埋め込んでいます)
3)変数$soapに$headerと$bodyをセットして送信データ完成
4)プリンタに$soapを送信(URLから挿入)

サンプルにレシート.txt、受付番号.txt、領収書.txtというサンプルテキストが付属していますが、
マニュアルにも明記されている通り、これが「印刷::印刷データ」フィールドにあらかじめ格納されているデータです。

ですので、まず印刷::印刷データの値を変更したら、実際の印刷内容が変更されることを確認してください。
次に、このフィールドにお望みの印字したいデータを格納できるようにしてください。
計算フィールドにしても良いですし、スクリプトで組み立てても良いと思います。

以上のように動作の流れが把握できたら、ePOS-Print Editorのマニュアルに記載されたXML リファレンスをもとに
アレンジしていけば良いでしょう。
埋め込むロゴ画像を変えたい場合には、ePOS-Print Editorの出番です。

Last edited by koeda (2020-06-24 16:22:08)

Offline

#5 2020-06-24 17:18:23

たき
Member

Re: レシートプリントの出力

himadanee様 Shin様 koeda様

回答いただきありがとうございます。すぐにでも頂いた内容を踏まえて取り組んでみたいと思います!少し時間がかかりそうですが、やってみます。

Online

#6 2020-06-25 13:29:43

たき
Member

Re: レシートプリントの出力

イメージ的にもkoeda様の内容で分かってきているのですが、苦戦しております。

Shin wrote:

まずは、送り込んでいるXMLファイルの中身をみて、内容を変更してみましょう。(この段階では、タグは変えてはダメですよ)

ということですが、サンプルの<text></text>を変えずにこの間にFMのフィールドを入れ込むということなのでしょうか?この状態ですと、結果テキストの形でプリントされてるので、
どういうやり方なのかいまいちわかりません。どのように入れ込むのでしょうか?

Online

#7 2020-06-25 16:54:42

Shin
Member

Re: レシートプリントの出力

例えば、領収書のxmlで、
<text>2014-11-26</text>
<text> </text>
<text>12:34</text>
となっている部分がありますね。そこを、例えば、$DATE, $TIME にそれぞれ日付、時刻を設定して、
"<text>"& $DATE & "</text>
<text> </text>
<text>" & $TIME & "</text>"
というテキスト計算に変更して送り込む、ということをします。

Offline

#8 2020-06-25 17:33:06

koeda
Member

Re: レシートプリントの出力

計算フィールドを使う例。

1)印刷::印刷データに、"<text>FIELD_1</text><text> </text><text>FIELD_2</text>"という雛形データを入れておきます
※実際には、印刷::印刷データには部分的ではなく、 レシート全体の印刷データ(<epos-print>〜</epos-print>)を入れておきます)
2)実際の印刷データを求める計算フィールドを作り、
Substitute( 印刷::印刷データ; ["FIELD_1" ; 印刷データ::フィールド1] ; [ "FIELD_2" ; 印刷データ::フィールド2] )
のような式で、雛形にフィールド1、フィールド2を埋め込みます
3)2の計算結果をプリンタに送信します

原理的にはShinさんの#7と同じことで、要するにテキスト計算によって<text></text>タグの間に固定値ではなく
フィールドや変数の値を入れ込める仕組みを作る、ということです。

XML内のタグの意味については、EPSONが公開しているXML記述例の後半に分かりやすい説明があり、リファレンスに完全な解説があります。
<text>タグは、各種属性を付加することにより、印字データだけでなくプリンタの制御にも使われていることを記述例からご理解ください。

Last edited by koeda (2020-06-25 17:36:50)

Offline

#9 2020-06-26 12:55:44

たき
Member

Re: レシートプリントの出力

shin様 koeda様

丁寧に解説していただきありがとうございます。頂いた内容で試したいと思います。

Online

#10 2020-06-28 10:37:15

たき
Member

Re: レシートプリントの出力

頂いた内容をもとにフィールド内容を変数に渡してXMLの内容をsubstituteで変換してプリントができました。この後ですが、まだ勝手な解釈で間違っているかもしれませんが、例えば
テーブルが”メイン”と”明細”とあり
メイン::伝票コード
明細::伝票コード
明細::商品名
明細::数量
明細::単価
明細::金額
とあり、この明細の商品名、数量、単価、金額のそれぞれのフィールドを一つのフィールドにまとめて
executeSQLで検索をしてそれを<text>$変数</text>の変数に入れ込むという作業になるのでしょうか?

Online

#11 2020-06-28 11:55:38

Shin
Member

Re: レシートプリントの出力

やり方は色々ありますね。SQLで取り出してもいいでしょう。
私の好みは、送り込むテキストを変数に作り込んでいきまず

  1. ヘッダ部分を、メインのデータから作ります。

  2. 次に関連レコードへ移動で明細へ移動し、loop で1レコードずつデータを追加していきます。

  3. 終了すれば、メインへ戻り、フッタを作り込み、送信

です。
複数の行や複数の項目が絡んでくると Substitute での置換は面倒になってくるので、変数に保存して、テキスト計算させた方がわかりやすいでしょうね。

Last edited by Shin (2020-06-28 12:04:04)

Offline

#12 2020-06-28 13:14:51

たき
Member

Re: レシートプリントの出力

まだ理解に乏しいところがあり、繰り返しの質問になってしまうかもしれませんが、2番目の”次に関連レコードへ移動で明細へ移動し、loop で1レコードずつデータを追加していきます。”
とありますが、明細部分が例えば5レコードあった場合、xmlの方も
<text>レコード1</text>
<text>レコード2</text>
<text>レコード3</text>
<text>レコード4</text>
<text>レコード5</text>
というようにひな型を作っておいてloopで順番にはめ込むのでしょうか?SQLも試したのですが、うまくできなかったので別のやり方を考えています。
あと”複数の行や複数の項目が絡んでくると Substitute での置換は面倒になってくるので、変数に保存して、テキスト計算させた方がわかりやすい”
というのはちょっとイメージができないのですが、教えていただけないでしょうか?

Online

#13 2020-06-28 13:41:14

Shin
Member

Re: レシートプリントの出力

xml の作法は、Epson の解説をよくお読みください。
印刷内容は、xml 内にタグ付きでデータを並べていくだけのようです。ですから、その該当部分に行を追加していくだけです。

Offline

#14 2020-06-28 15:13:45

たき
Member

Re: レシートプリントの出力

ご回答ありがとうございます。詳しく見ながら試したいと思います。

Online

#15 2020-07-03 13:44:20

たき
Member

Re: レシートプリントの出力

おかげさまでプリントができるようになりました。ありがとうございます。プリントができるようになったのですが、ヘッダーはsubstitudeで置き換えをして調整する必要はあると思いますが、プリントできました。
問題は明細の中身のプリントで、xmlの中の
<text>商品明細</text>
と表示している状態で、明細::商品名、明細::数量、明細::単価、明細::金額というのがあった場合、
これを計算フィールドで明細::lineというフィールドに商品名 数量 単価 金額というように1フィールドにまとめました。これを$dataに入れて商品明細にsubstitudeで行けると思ったのですが、
これをプリントしようとすると
Aランチ 1 1000円 Bランチ 1 1500円
というようにプリントされて、理想図から言うと
Aランチ 1 1000円
Bランチ 1 1500円
というようにしたいところです。
明細::lineを変数で取得したときは改行を入れて$dataには
Aランチ 1 1000円
Bランチ 1 1500円
のように取得しているのですが、プリントすると先に述べたような横一列にプリントされます。またxmlで\nを入れると改行されるようなのでsubstitudeするときに$data&"\n"
というようにしてみてもうまくいきませんでした。この場合はどのようにすればよいのですか?あともう一つ理想の形は
Aランチ 1 1000円
Bランチ 1 1500円
といいましたがランチ名が異なってくると
Abcランチ 1 1000円
Bランチ 1 1500円
というように列が崩れてしまいます。これをRight関数をつかって固定値幅を定められるように◇をいくつか入れてから入れ替えるようにしてみましたが、読みにくい形になってしまいました。
固定値幅をスペースを交えながら作ることは可能なのでしょうか?

Online

#16 2020-07-03 14:07:50

Shin
Member

Re: レシートプリントの出力

改行は、<TEXT>内で#10で送るのでは。
桁揃えは、スペースで地道に揃えるしかなかったでしょう。ただ、今のFileMakerは文字列のバイト数のカウントが面倒なので、品名をあらかじめ一定の文字幅に合わせておくほうが早いでしょう。金額も桁が可変ですから、頭にスペースをいれて調整する必要があります。
<TEXT>Abcランチ 1 1000円#10</TEXT>
<TEXT>Bランチ     1 1500円</TEXT>
のように、スペースで揃えることになるでしょうね。

Last edited by Shin (2020-07-03 14:13:08)

Offline

#17 2020-07-03 15:22:45

たき
Member

Re: レシートプリントの出力

shin様

返信ありがとうございます。要約回答されている内容が合致してきました。ありがとうございます。もう少し頂いた内容を踏まえて取り組んでみようと思います。

Online

#18 2020-07-05 17:33:39

たき
Member

Re: レシートプリントの出力

おかげさまでプリントすることができました。ありがとうございます。

Online

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 569.1 KiB (Peak: 590.01 KiB) ]