業務ハックLab -とある情シスの備忘録-

とある情シスの備忘録的なものです。

【スポンサーリンク】

Power Appsで棚卸アプリを作ってみた!!

皆さんこんにちは~
業務ハックLabのよ~よんです。
今回の記事はMicrosoft Power Apps Advent Calendar 2020の12/20担当として書かせていただいています!!
今日はPower Appsで棚卸アプリを作ってみたのでそちらについて紹介したいと思います。

物を取り扱う仕事をした方なら一度はしたことがある「棚卸し」。
すべてバーコード管理されているものでも作業は大変ですがバーコードが付けられないものの棚卸しなんて正直考えたく有りません・・・
でもそんな環境もあるわけで・・・
ということでロケーション管理だけはできている前提になりますがバーコードを使わない形で簡易的に棚卸しをするアプリを作ってみました。

各種構成

SharePointリストの構成

まずはデータの格納場所が必要です。
今回はSharePointのリストを使用していきます。
SharePointの委任問題についてはここで語ると長くなってしまうので割愛します。
 委任問題についてはじゅんじゅんさんの記事が非常にわかりやすいのでおすすめです。

qiita.com


リストの構成はこんな感じです。

列名 1行テキスト種類 説明
タイトル 1行テキスト 連番の数字
Product_code 1行テキスト 社内管理コード
Maker_Name 1行テキスト メーカー名
Product_Name 1行テキスト 商品名
Maker_Num 1行テキスト メーカー商品コード
Location_No 1行テキスト ロケーションナンバー
WH 1行テキスト 倉庫名
Col 1行テキスト
Gr 1行テキスト
St 1行テキスト
Num 1行テキスト
Inventory_amount 1行テキスト 在庫数
Inventory_Count_Flag 1行テキスト カウントフラグ

次はアプリの構成です。

アプリの構成

棚卸アプリは下記のようなスクリーンの構成になっています。

  • AreaNoInputScreen
    このスクリーンでは棚卸しをするエリアと列を指定します。
    実はこのスクリーンで条件を指定する事で無理やり委任問題を回避しています。
    f:id:yo-yon:20201201214005p:plain:w100
  • EditScreen
    実際に棚卸し結果を入力スクリーンです。
    在庫数量を入力して「確定」ボタンをタップすると一覧から表示が消えるように設定してあります。

    f:id:yo-yon:20201201214118p:plain:w100

  • EditFixScreen
    棚卸し済みのデータの個数修正を行うスクリーンです。
    Inventory_Count_Flagが「1」になっているデータのみが表示されます。

    f:id:yo-yon:20201201214211p:plain:w100

スクリーン構成としてはたった3つです。

アプリの作成

各種データとの接続との接続

接続するデータは先程作成した「Sharepointリスト」と「Office365ユーザー」です。

f:id:yo-yon:20201201221303p:plain
SharePointのリストへの接続は検索欄で「SharePoint」と検索すると表示される「SharePoint」コネクタを選択し、接続先を選択します。

f:id:yo-yon:20201201220554p:plain

f:id:yo-yon:20201201220716p:plain

そうすると画面右側にSharePointサイトが表示されるのでリストが格納されているサイトを選択して該当のリストにチェックを入れてから接続をクリックします。

f:id:yo-yon:20201201220848p:plain

f:id:yo-yon:20201201221104p:plain
次にOffice365ユーザーコネクタに接続します。
Office365ユーザーコネクタへの接続は検索欄で「Office365ユーザー」と検索すると表示される「Office365ユーザー」コネクタをクリックし、該当するコネクタをクリックします。

f:id:yo-yon:20201201221859p:plain

f:id:yo-yon:20201201222136p:plain

これでデータの接続は完了!!


アプリを開いた時の変数の設定

アプリを開いた際に自動的に変数を設定するようコードを入力します。
ここをクリックしてから「OnStart」を選択して入力バーに下記コードを入力して下さい。

f:id:yo-yon:20201202104357p:plain

f:id:yo-yon:20201202104452p:plain

// Get the logged in user.
Set(varUser,Office365ユーザー.MyProfileV2());
// Set varInventoryFlag.
Set(varInventoryFlag,"0")

AreaNoInputScreenの作成

このスクリーンではEditスクリーンとEditFixスクリーンで表示する商品を絞るための役割を担います。 
オブジェクトツリーはこんな感じです。

f:id:yo-yon:20201202113901p:plain
GoEditButtonを押下時にAreaNoText、ColumnNoTextの値を変数に入れるような挙動になっています。

  • GoEditButton

    f:id:yo-yon:20201202152141p:plain
    Onselectを選択し入力バーに下記のコードを入力します。

    Set(VarArea,AreaNoText.Text);
    Set(VarColumn,ColumnNoText.Text);
    Navigate(EditScreen, ScreenTransition.None)
  • GoEditFixButton

    f:id:yo-yon:20201202152830p:plain

    Onselectを選択し入力バーに下記のコードを入力します。

    Set(VarArea,AreaNoText.Text);
    Set(VarColumn,ColumnNoText.Text);
    Navigate(EditFixScreen, ScreenTransition.None)
  • LoginInfoName

    Textを選択し入力バーに下記のコードを入力します。

    "氏  名:"&varUser.displayName
  • LoginInfoOffice

    Textを選択し入力バーに下記のコードを入力します。

    "所属支社:"&varUser.officeLocation
  • LogininfoDep

    Textを選択し入力バーに下記のコードを入力します。

    "所属部署:"&varUser.department

入力欄など位置はお好みで配置して下さい。

EditScreenの作成

このスクリーンでは実際に棚卸しでカウントした数を入力するスクリーンになっています。
オブジェクトツリーはこんな感じです。
Gallaeryを使用しています。

f:id:yo-yon:20201202180848p:plain

  • Gallery1

    Itemを選択し入力バーに下記のコードを入力します。

    Filter(
        [@本社棚卸リスト],
        WH = VarArea,
        Col = VarColumn,
        Inventory_Count_Flag = varInventoryFlag
    )
  • Location_Tx

    Textを選択し入力バーに下記のコードを入力します。

    ThisItem.Location_No
  • MakerName_Tx

    Textを選択し入力バーに下記のコードを入力します。

    ThisItem.Maker_Name
  • MakerNum_Tx

    Textを選択し入力バーに下記のコードを入力します。

    ThisItem.Maker_Num
  • Textを選択し入力バーに下記のコードを入力します。

    ThisItem.Product_Name
  • Button2

    Onselectを選択し入力バーに下記のコードを入力します。

    //本社入出庫管理リストの棚卸数量の値を更新
    Patch(本社棚卸リスト,First(Filter(本社棚卸リスト,ID=ThisItem.ID)),
    {Inventory_amount:Value(TextInput2.Text)},{Inventory_Count_Flag:"1"})

EditFixScreenの作成

このスクリーンでは実際に棚卸カウント済みのデータで数の修正をしたい場合に使用するスクリーンになっています。
オブジェクトツリーはこんな感じです。
基本的にはEditスクリーンをコピーした形になっています。

f:id:yo-yon:20201202204038p:plain

  • Gallery2

    Itemを選択し入力バーに下記のコードを入力します。

    Filter(
     [@本社棚卸リスト], 
     WH = VarArea,
     Col = VarColumn,
     StartsWith(Gr , GrNum_Tx.Text),
     StartsWith(St , StNum_Tx.Text),
     StartsWith(Num , Num_Tx.Text),
     Inventory_Count_Flag = "1"
    )
  • Location_Tx_1

    Textを選択し入力バーに下記のコードを入力します。

    ThisItem.Location_No
  • MakerName_Tx_1

    Textを選択し入力バーに下記のコードを入力します。

    ThisItem.Location_No
  • MakerNum_Tx_1

    Textを選択し入力バーに下記のコードを入力します。

    ThisItem.Location_No
  • ProductName_Tx_1

    Textを選択し入力バーに下記のコードを入力します。

    ThisItem.Location_No
  • Button2_1

    Onselectを選択し入力バーに下記のコードを入力します。

    //本社入出庫管理リストの棚卸数量の値を更新
    Patch(本社棚卸リスト,First(Filter(本社棚卸リスト,ID=ThisItem.ID)),
    {Inventory_amount:Value(TextInput2_1.Text)},{Inventory_Count_Flag:1})


以上で設定は完了です。
実際の動作はこんな感じになっています。

1万件以上のデータでも割合サクサク動いてます。
ロケーション管理さえしっかりしていればバーコードを振らずに管理が可能になっています。(とはいえバーコード管理するのが一番ではありますが・・・)
そこまで難しい処理はしていないので是非試してみて下さい。
それでは皆さん良い業務ハックライフを~


免責事項