どうも。つじけ(tsujikenzo)です。このシリーズでは「在庫管理バーコード」についてお届けしています。社内マニュアル的な要素が強いですが、皆さんのお勤め先でも使えるアイディアになれば幸いです。
前回のおさらい
前回は「在庫管理バーコード」についてお話を始めました。弊社で運用してるバーコードの桁表示と簡単な業務の流れについてお話しました。

今回は「現場棚卸とデータベースの突合作業」についてお届けしたいと思います。
リーダーが拾ってくるデータ
空のスプレッドシート[棚卸君]を用意します。セル[A2]にカーソルを合わせてバーコードリーダーでバーコードをスキャンしてみます。
このように入力されて改行が挿入されてます。
バーコードを解析する
A列に入力されたデータを解析して、B列、C列に展開してみましょう。まずA列を変数に格納します。今後B列、C列にデータが追加されていくと思いますが、values[i][0]にバーコード値が格納されていることを覚えておきましょう。
const values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
console.log(values);
//[ [ 'バーコード(A2をクリックしてからスキャンを開始して下さい)' ],
// [ 'DS72055999988887777' ],
// [ 'DS72055999988887776' ],
// [ 'DS72055999988887775' ] ]
バーコードの先頭から6桁が商品を示す固有IDです。文字数のみで抽出できるなら.slice()メソッドで倒します。
const ids = values.map( value => [value[0].slice(0,6)]);
console.log(ids);
//[ [ 'バーコード(' ], [ 'DS7205' ], [ 'DS7205' ], [ 'DS7205' ] ]
変数idsはB列にそのまま貼り付けできそうです。(見出し行は無視しましょう。無視も大事です。)
SpreadsheetApp.getActiveSheet().getRange(1,2,ids.length,1).setValues(ids);
同じ要領で納品書番号も同じ要領で、10桁目から末尾までです。C列に貼り付けまでやります。
コードが正しければ必ずセルに貼り付けられるはずなので都度ログ出力を省略します。何かエラーが出たらログを見るように作業効率を高めましょう。
const trackingNos = values.map( value => [value[0].slice(10)]);
SpreadsheetApp.getActiveSheet().getRange(1,3,ids.length,1).setValues(trackingNos);
スプレッドシートへ出力
さて、B列、C列への貼り付けを別々のコードで行ってきました。都度サーバーにアクセスしてしまう為、SpreadSheet APIを叩くメソッドはなるべく少ない方が好ましいです。
なので、一度の処理でsetValues()できるように.map()メソッドでやっつけてみましょう。
const mappedValues = values.map( value => {
return [[value[0].slice(0,6)],[value[0].slice(10)]];
}
);
SpreadsheetApp.getActiveSheet().getRange(1,2,mappedValues.length,mappedValues[0].length).setValues(mappedValues);
無事貼り付けできてると思います。(一つ上の画像と同じ結果ですね。)
在庫表から商品IDと納品書番号を取得する
このような在庫表は良くあると思いますが、[部品ID](商品IDと呼んでいたフィールドです)と[納品書番号]を取得したいと思います。※画面の都合で一部です。
いつものように全体をがばっと取ってきます。
const id = 'みなさんのID';
const stockValues = SpreadsheetApp.openById(id).getDataRange().getValues();
//[ [ 'No',
~ 中略 ~
// '納品書番号' ],
// [ '1',
// 5549800],
// [ '2',
// 5805640] ,
~ 中略 ~
//]
商品ID・・・・stockValues[i][5]
納品書番号・・stockValues[i][10]
が格納されています。
まとめ
さて、今回は「現場棚卸とデータベースの突合作業」の前半戦として、突合する為の素材の準備をしました。次は[mappedValues]と[stockValues]を比較して行きたいと思います。
Comments