こんにちは。CData Software Japan リードエンジニアの杉本です。
以前このBlogで「スマレジの在庫情報をFTPサーバーと連携して更新する」という方法を紹介していたのですが、お客様から「相対値で在庫情報を更新したいのだけど、可能ですか?」という問い合わせを受けました。
つまり、シナリオとしては「売上・注文データなどがFTPサーバーや他のシステムからやってくるので、その販売した数で在庫を減らしたい」というイメージですね。
通常であれば、在庫情報(Stocksテーブル)は、在庫数をそのまま指定した値で上書きしてしまう、つまり絶対値による更新となります。 そのため普通に考えれば、「現在在庫数を一度取得してから、注文数で値を差し引き、その結果を元に在庫数を更新する」というちょっと面倒なアプローチを取らなければいけません。
しかしながら、実はスマレジ APIが在庫情報の相対値で更新する機能をサポートをしているので、在庫数を「-3」する、みたいな更新が使えます。
今回はその利用方法を紹介します。
相対値による更新方法
例えば以下の「商品ID:13」の「販売店A:1」にある在庫数を更新したい場合です。
まず最初に絶対値による更新方法を確認しておきましょう。
更新に必要な項目は「在庫数」を指定する「StockAmount」と、「在庫の更新理由となる区分」の「StockDivision」を指定します。併せて商品IDと販売店を指定するための「ProductId」と「StoreId」を更新条件として指定します。
以下のSQLだと上記画像の商品を在庫数3に更新できます。
UPDATE [Stocks] SET [StockAmount] = 3, [StockDivision] = 10 WHERE [ProductId] = 13 and [StoreId] = 1;
SQL発行後、以下のように値が更新されました。
それでは続いて、この在庫数から1を引いてみましょう。
相対値による更新を行う場合は「AmountType」という項目を使います。「AmountType」は「Absolute」を指定すると絶対値による更新、「Relative」を指定すると相対値による更新を行う条件指定用の疑似カラムです。
この項目を用いて、以下のように条件指定することで、在庫数を1減らすことができます。ポイントは「AmountType」と併せて「StockAmount」を「-1」と指定する点です。
UPDATE [Stocks] SET [StockAmount] = -1, [StockDivision] = 10, [AmountType] = 'Relative' WHERE [ProductId] = 13 and [StoreId] = 1;
以下のように、在庫数が「3」から「2」に変わりました。
在庫数を増やす場合は、負の値ではなく正の値を指定します。例えば在庫数を「5」増やしたい場合は以下のようなSQLを発行します。
UPDATE [Stocks] SET [StockAmount] = 5, [StockDivision] = 10, [AmountType] = 'Relative' WHERE [ProductId] = 13 and [StoreId] = 1;
これで在庫数が「2」から「7」に変わりました。
Excel Add-in で使う場合
この相対値更新ですが、Excel Add-in で利用する場合はちょっと注意が必要です。「AmountType」は先程も記載していたとおり、疑似カラムという特殊なカラムであるため、デフォルトではこの項目が表示されません。
項目を表示したい場合は接続設定画面で「Other」の項目に「PseudoColumns="*=*"」という値を指定してください。
ArcESBで利用する場合
ArcESBで自動化フローを組む場合もExcel Add-inのように「AmountType」を使うために追加の設定が必要です。
スマレジのコネクタを構成後「Advanced」タブにある「Pseudo Columns」の項目に「*=*」を設定して
一度スキーマをリセットしましょう。ArcESBは内部でスキーマをキャッシュしているため、この操作をキャッシュの有効期間がすぎるまでカラムが表示されません。
この状態であらためて、インプットに「Stocks」テーブルを追加すると、以下のように項目が表示されます。
あとはマッピング画面などで固定値として「Relative」を指定すれば相対値による更新ができます。