お世話になります。
プリントクリエイターを使い請求書を出力するアプリを作成したく、模索しております。
プログラミング経験はありますが、JavaScriptはほぼ初心者です。
<考えている仕様>
◎売上管理アプリに納品した案件毎のレコードを登録する
売上日、得意先名等の情報を登録する。
一度に納品する商品は複数の場合が多い為、商品明細サブテーブルを設けて複数行登録する。
◎請求書は以下の2パターンで出力できるようにしたい(顧客要望)
1.案件単位(売上管理アプリのレコード単位)
2.得意先単位で期間指定(月締め等)して一枚の請求書に売上日順に複数の案件(商品明細)を並べたい
上記出力パターンの1.については売上管理アプリ内で完結する話だと思います。
ただし2.については、同アプリ内での実装は難しいのではないかと思い、こちらの情報を参照して期間指定の「絞り込みアプリ」を別途作成することを考えました。
この場合、絞り込みアプリにてある得意先の1ヶ月分の売上レコード(複数)内のサブテーブルに入っている商品明細を売上日順に並べてプリントクリエイターで出力することは可能でしょうか?
(請求書イメージ添付致します)
プリントクリエイターのアプリ連携では連携先にサブテーブル内のフィールドは選択できませんでした。
商品明細をテーブルではなくレコード単位で登録する仕様も考えましたが、実際には一度に納品する商品数が多く得意先1社で月に何百レコードにもなってしまう為、現実的ではないと思いました。
やはり1納品=1レコードにしたいです。
考え方の誤りも含め、実装方法についてアドバイスをいただければと思います。
どうぞよろしくお願い致します。
binjiさん
cstapの瀧ヶ平です
おっしゃる通り通常プリントクリエイターのアプリ連携機能ではサブテーブルを利用することができないため、高度なカスタマイズを要しますが、別アプリのサブテーブルを出力することは可能です。
こちらにあるpdfを参考に裏技プログラムを利用したうえで、こちらのサンプルをカスタマイズすることになります。
具体的には
{=PC_MAGIC_START
ELEMENT_TYPE=TABLE;
ELEMENT_STYLE->TABLE_CODE=アプリと競合しないフィールドコード;
ELEMENT_STYLE->TABLE_TYPE=STRING;
=PC_MAGIC_END=}{%テーブル内要素のフィールドコード%}
のようにプリントクリエイターの表示項目内に設定しておき、REST APIで取得してきた別アプリのテーブルをプリントクリエイターに送信するレコードに、先ほど設定したフィールドコードとして追加(src/print-creator/form/single.coffee内のrecord と src/print-creator/multi-view/index.coffee内のmultiRecords がそれぞれ送信するレコードとレコードの配列なので、それらそれぞれのレコードにデータを追加)すれば実装できるかと思います。
参考になりますでしょうか
瀧ヶ平さま
早速のアドバイスありがとうございます。
裏技についてはすでに利用させていただいております。
設定例のご提示ありがとうございます。
どうも私の理解力が弱く、後半の部分が読み解けませんでした・・
Print Creator sample for kintone SI とは具体的にどのように使うものなのか理解できていないせいだと思います・・
申し訳ありませんが、もう少しとっかかりになるヒントをいただけないでしょうか。
binjiさん
前述のリポジトリはでNode.jsを利用したプリントクリエイターのJavaScriptのプロジェクトになっています。
リポジトリをクローンし、ソースを編集してビルドすることで独自機能などを追加しカスタマイズされたプリントクリエイターのJavaScriptファイルを作成することができます。ソースはCoffeeScriptで書かれているのでCoffeeScriptの知識がないと難しいかもしれません。
先ほどの実装例では、実際には存在しないテーブルフィールドをスクリプト側で送信する際に書き換えて追加して送信することで、実際に存在しないフィールドをプリントクリエイターで出力することを可能にするということになります。
難しそうでしたらレコードの追加編集時に帳票出力するアプリにテーブルフィールドを用意し、別アプリのテーブルフィールドをREST APIで取得しテーブルフィールドに追加するような代替案で対応するのも良いかと思います
瀧ヶ平さま
なるほど、そういうことなんですね。
CoffeeScriptは経験が無く難しそうです。
代替案としていただいたREST APIで別アプリのテーブルフィールドを取得するやり方なら理解できそうです。
こちらの方法でやってみます。
またつまずいたときにはご質問させていただくかもしれませんが、どうぞよろしくお願い致します。