経費精算アプリを作っています。
経費精算アプリで、
1つの申請番号に、申請No.や申請者名、勘定科目名や、金額、消費税率などが紐づいて保存されているのですが、
これらをCSV出力し、勘定奉行クラウドに読み込ませたいと思っております。
その際、項目名が、勘定科目名、金額などではなく、
特定の文字列「CSJS005」や「CSJS201」などとなっており、
手作業でのミスをなくすために、可能であれば、CSV出力時に項目名だけ置き換えて出力したいと考えているのですが、このようなことは実装可能でしょうか。
よろしくお願いします。
こんにちは。
カスタマイズしないでも実現できそうですね。
「CSJS005」「CSJS201」といったフィールドを用意しておいて、自動計算で勘定科目名、金額等の情報を表示しておく方法はいかがでしょうか?
CSVで出力する際は「CSJS005」「CSJS201」を出力すれば良いかと思います。
あさが様
おしえていただき、ありがとうございます!!
確かに、自動計算でコピーすればできますね!!そのように作りたいと思います。
あさが様
こちらの方法で、試してみたのですが、
すみません、最初の質問がよくなかったのですが、
経費精算アプリで、「テーブル」を使っていまして、テーブル内の値も、「CSJ●●●●」にコピーして保存するようにしたのですが、
一覧作成で、「CSJ●●●●」・・・と順に列を並べていると、テーブルは、「テーブル」としか表示できず、
テーブルの中で不要な項目や順番が指定することができませんでした。
具体的に言うと、
一覧作成時に、CSJS001 CSJS002 CSJS003 テーブル
としか選ぶことができず、
CSJS001 CSJS002 CSJS003 の続きに、テーブルの中身がそのまま→ 日付 支払先 内訳 勘定科目 CSJS201 ←というように、テーブルの中の必要/不要や 順番並び替えができない状況です。
こちら、解決方法はありますでしょうか?
何か案があれば教えていただけますと幸いです。
テーブルだったんですね。
一覧を、
CSJS001 CSJS002 CSJS003 テーブル
のようにした場合、CSVとしてデータは出力されると思うのですが、
勘定奉行クラウドに読み込ませる際に不要な項目が出力されるとマズいという事でしょうか?
(読み込みができなくなる?)
順番の並び替えは・・・テーブル自体の項目を並び変える必要がありますね。
もしくは、JavaScriptでのカスタマイズになりますが、
・現在のテーブルとは別にテーブルを追加する
・追加したテーブルの項目は、勘定奉行クラウドに読み込ませる際に必要な項目・並び順にする
・レコードを保存する際に、現在のテーブルから追加したテーブルにデータをコピーする
・CSV出力する際は追加した方のテーブルを出力する
という事はできるかと思います。
あさが様
返信いただき、ありがとうございます!お返事が遅くなってしまい、すみません。
そうなのです、勘定奉行クラウドに読み込ませる時に不要な項目がテーブルには含まれていて。。
いただいたやり方で対応しようかなと思うのですが、
テーブル内の項目とテーブル外の項目が入り混じって、並ぶ場合は、それでも難しいのかなと思ったのですが、どうでしょうか?
もし一旦、出力した後で、何か自動で列を並び替えていらない列を削除するということがキントーンの外でもいいので、できる方法があれば、そういう知識がないため、教えていただけますと幸いです。どういった対応が1番スムーズにできるのか検討してみたいです。
もし対応できる場合は、教えていただいたやり方の詳細も教えていただけますと幸いです。
・現在のテーブルとは別にテーブルを追加する
・追加したテーブルの項目は、勘定奉行クラウドに読み込ませる際に必要な項目・並び順にする
・CSV出力する際は追加した方のテーブルを出力する
↑ここまではキントーンの既存機能で作っておいて、
・レコードを保存する際に、現在のテーブルから追加したテーブルにデータをコピーする
↑この部分をJSでのカスタマイズで開発するということでしょうか?
すみませんが、実装イメージが全く湧かないため、どんな風に実装したらいいか例を挙げていただくか、参考になるページがあれば教えていただくことはできますでしょうか?
よろしく御願い致します。
fukuyama さま
実現方法の流れは合ってます!
具体的な実装方法ですが、
・レコード保存前イベントのパラメーター(eventオブジェクト)から「現在のテーブル」の値を取得
↓
・取得した情報を使って「追加したテーブル」にセットする情報を作る(eventオブジェクトを書き換える)
↓
・return eventする
でいけるのでは無いかと思ってます。
「追加したテーブル」用の情報は以下のような手順で作れるかなと思ってます。
https://developer.cybozu.io/hc/ja/articles/202796890
あさが様
ありがとうございます!
教えていただいた内容で実装してみたのですが、途中でエラーが出てしまい、
どこが間違っているか教えていただけますでしょうか?
(function() {
“use strict”;
kintone.events.on(‘app.record.create.submit’, function(event){
var tableRecords = event.record.テーブル.value;
var tableLength = tableRecords.length;
// 元テーブルの中身が取得できた
console.log(tableRecords);
// 元テーブルの件数が取得できた
console.log(tableLength);
var code = tableRecords[0].value.部署コード.value;
// 元テーブルのコピーしたいデータ(部署コード)が取得できた
console.log(code);
var table1List = event.record.テーブル1.value;
// CSV出力用に追加したテーブル(まだデータは入ってない)
console.log(table1List);
for (var i=0 ; i < tableLength ; i++) {
table1List[i].value.CSJS200.value = tableRecords[i].value.部署コード;
}
// CSV出力用テーブルのCSJS200(フィールドコード)は、元テーブルの部署コードのコピー
return event;
});
})();
元テーブルを2行にして、保存ボタンを押した時に、
Uncaught TypeError: Cannot read property ‘value’ of undefined
というエラーが出てしまいます。
table1List[i].value.CSJS200.value = tableRecords[i].value.部署コード; の行の最初のvalueの場所です。
よろしくお願いします。
すみません、途中までやってみたのですが、
↑のコメントにも書いていたのですが、テーブルの中の項目とテーブルの外の項目が入り混じって並んで出力したく、
元テーブルからデータ保存時に(最終形のCSV出力の並びのために)複数のテーブルに分けて入れると、
CSV出力時に、テーブル毎に行が分かれて出力されてしまうので、このやり方ですとうまくできなさそうでした。すみません。
と思ったのですが、CSV出力用に、テーブルの外の項目も合わせて、新しく作るテーブルの中に入れて、並べてしまえばできそうですね?!
二転三転してすみません>< 最初の質問のところ、確認いただけますと幸いです。
fukuyamaさん
table1Listの配列の要素数が1の状態で、行(要素)を追加しようとしているので発生してるのだと思います。
for (var i=0 ; i < tableLength ; i++) {
let newTable = {};
newTable.value = {};
newTable.value["CSJS200"] = {
"type": "SINGLE_LINE_TEXT",
"value": tableRecords[i].value.部署コード.value
};
table1List.push(newTable);
}
↑ こんな感じで自分で配列を作ってあげる方法もあります。
ただし、テーブルの先頭に空白行が残ってしまうので、空白行を消す処理を追加する必要がありそうです。
developer networkコミュニティでも時々見かける内容なので調べて頂いても良いでしょうか。
(うまくいかなったら、また聞いてください!)