2019年8月4日日曜日

FileMaker 配列変数から取り込む

前回の
API_OpenWeatherMapをFileMakerに取り込む際、

1、改行テキストに変換
2、配列をグローバル変数に格納
3、GetValue関数を使ってLOOP処理でFMのデータ化させる

という流れでした。

OpenWeatherMapは項目とデータをグローバルフィールドで照合していて分かりずらかったと思いますので、今回はよくあるid、品名、分類のテキストにしました。






前回のものをデバッガで確認していただけたらOKなのですが、あえて順序だてたサンプルを用意しました。

1~4まで青枠のボタンがありますので、サンプルで確認してみてください。


FileMakerの場合、
配列変数からの取り込みは「変数設定の繰返し(繰返し変数)」を使用するのではなく、
グローバル変数を使った改行テキストからGetValue関数を使って抜き出すというのが一般的であると考えています。

------省略------
Loop
新規レコード/検索条件
フィールド設定 [id;GetValue ( ※1.整理する配列変数 ; 1 )] 
フィールド設定 [品名;GetValue ( ※1.整理する配列変数 ; 2 )]
フィールド設定 [分類;GetValue ( ※1.整理する配列変数 ; 3 )]
変数設定[$cnt;値:$cnt+1]
Exit Loop If [$cnt>$$cnt_mx]
End Loop
------省略------
※1.整理するというのは
Substitute ( GetValue ( $$source ; $cnt ); [ " " ; "¶" ] ; [ " " ; "¶" ] 
の事です。

変数設定の繰返し(繰返し変数)を使用した場合、どのように取り込むのかは、なんとも想像できません。(繰返し変数からインポートとか出来るようになったら・・・・かな。
僕が古いのかな・・・)




ダウンロード(FileMaker17Win)



追記
配列変数と書いてますが、FMの場合、他の言語とはまったく違います。
ここでは単純にテキスト改行にして一括取り出しをしているだけで、行や列という概念が無いですしインデックスを持たせられません。行、列の部分的な宣言、代入はできません。
( Dim C(3,4) ⇒ Dim B(3,4)の誤り )

このような宣言として配列変数を使用することが出来ないという事です。
残念ながらExecuteSQLにもありませんし(データを生成させてグローバル変数を利用して並べる事は出来ます)、
無償のSQLでいえば
MySQLにも配列変数が無いので、PostgreSQLか、高価なOracleとODBC連動という事も考えられますが、そこまでして・・・というめんどくささがあります。

行と列の変数での宣言、もしくは指定というより、抜き出す前の段階でデータを絞り込む事を考えた方が賢明かもしれません。


2019年7月31日水曜日

API_OpenWeatherMapをFileMakerに取り込んじゃう作戦


ピンクのとこ押すと今の天気を取得できちゃう。


POSレジ進めなきゃいけないのですが、ちと本業の納期が数件あったり、追加依頼だったり、修正だったりして遅れてすみません。ちゃんとやるからねー。

でも小売業にとても影響する天気情報をネットから取得しちゃう作戦を載せてみます。レジのジャーナルとか日報とかお天気の情報って、その日の朝の天気1回じゃないですか?今作ってるPOSに上の天気情報を移植すると何ができますか!?
そう、時間ごとに天気が取得できちゃいます。

特に、外食業界!天気がもろに影響しますでしょ、
行楽施設、百貨店、スーパー、ショッピングモール、路面店、その他小売店、ぜーーーんぶ天気に影響しますでしょ!?

なのに、日報では朝一回きり。大事ですよー
後にデータ分析の役に立ちます。


OpenWeatherMapさんのAPI
基本は無料なのですが、ビジネスとして使うなら、ちゃんと登録してお金払いましょう。APIを使用する場合はその辺のところをよく注意して使用しましょう。


API Keyを取得するにはアカウントを作る必要があります。Sign Upページで必要な項目を入力して「Create Account」します。設定すると次の画面でAPI Keyが表示されるはずです。






それをスクリプトの中のOpenWeatherMapのURLを生成 箇所がありますので、
ご自身のAPIKeyを取得して設定してください。



次に、自分の場所の緯度と経度を調べておいてください。API側のデータはJSON, XML, or HTMLにしなくても、ダイレクトにURLから取得できます。
ネット上から一旦、ズドン!とマスタ(情報ソース)にパラメータデータを取得して、それをデータテーブルの項目別の複数のテーブルに分けFileMaker用のデータとして生成します。配列変数からの取り出し詳細は、難しい話になるので後日またの機会ということでw



id:802でCloudsってなってるね、でも晴だよ・・・実際は803が曇り、ちと微妙だね



Temp_min:303.71 
最低気温303度?っておかしいべ!?死ぬべ!?
って、いろいろ調べると華氏から摂氏に変えないといけないので、各tempにマイナス273.15で計算すると33.6℃とか出たから安心(笑)



ダウンロード(FilemakerPro17 win)





2019年7月16日火曜日

今から間に合う!一緒に、軽減税率対応のPOSレジを作りますかぁ? その9

前回のダウンロードしたファイルがうるさい!とクレームがきたのですが(笑)、
FileMakerはPCのタッチパネルディスプレイを使用するときなどボタンに音を入れる事が出来ない(昔はハイパーカードみたいに出来た)ので、ウィンドウズのコントロールパネルの警告音を利用して音を入れています。必要がなければ、全てスクリプトから外すのも大変なので音量を下げて使用してください。使用する人は音源ファイルを入れてますのでコントロールパネルで設定してみてください。


按分

按分機能は、レストランやパティスリー、カフェ、居酒屋など外食産業に多く必要とされる機能ですが、最近はカルディなど小売店でも別会計に対応できるようなサービスを取り入れています。



少しレイアウトを変えました。
今回は、前回の会計に引き続き、会計の補助、個別会計ができる「按分機能」を作りました。

まずは動きを見てみます。


①最初は商品を選択する画面です。

商品ボタンを押すと、税区分「E」(イートイン)が選択されていれば、デフォルト値「E」で選択されてしまいます。数量は該当する商品数に追加されます。
「苺のショートケーキ3個」のうち1つをテイクアウェイにしたい場合は、商品名がボタンになっていますので、押すと「苺のショートケーキ」が最後の行にばらされて表示されます。税区分を「T」に変更します。


②ばらされた明細


「苺のショートケーキ」自体の数量は変わりませんが、税率が変わりますので、当然合計の金額が変わります。
このボタンは、商品の数量が2個以上あった場合のみばらされます。


③会計画面

また、少しレイアウトを変えました。黒背景の意味のない項目を削除しました。
下の税率別の計算数値が必要なければ消してもいいですが、軽減税率の仕組みや今後の税改正までは、こういうのがあった方がエビデンスのためにも分かり易くていいかもです。
(ちなみにうちの商品は、これが無いので、今回作っていて採用する事にしましたw)


④按分

商品名の背景がグレーに変わり、該当商品名を押すと、別会計のポータルに商品を1個移動します。「今までの明細がボタンに代わり、別会計用の新しい明細に打込む」という仕組みです。商品マスタから選ぶのでなく、受注された明細から数量のかたまりをばらしていきます。


⑤按分 その2

それぞれに会計を行います。会計後は「次の会計」ボタンを押します。

それぞれ、個別会計時にカードや割引、金券などの使用があった場合でも、累積されるようにしています。

最後の方まで会計をすませば、

⑥元の会計画面

商品の数量が全てばらされた会計画面に戻されます。(モンブラン2個というのは同じ方がお会計した場合、数量も合算されます)

累積される会計種別は、割引類、カード類、金券や商品券です。あとは釣銭なしの商品券・金券の預かりデータです。別会計に売掛は持たせていません。
釣銭が幾ら、ですとか、現金預かりが幾らとかは売上集計上あまり必要が無いので省きました。


この機能で重要なのは、リレーションです。
全て同じ受注明細テーブルのテーブルオカレンスを使用していることです。





実際に按分に必要な追加TOは③と④です。
按分の画面上は①のテーブルに通常の明細②のデータを④を使って③に移動すると考えればいいのですが、これはここで説明するより、分解して構造を見てください。
(壊れたら、またダウンロードすればいいです)



コメントが多いと気持ち悪いのですが、我慢してください。
デバッグで動きをみながら壊していくと中身が分かるかと思います。



ダウンロード(FileMakerPro17 Win)



次は、レシートとカスタマーディスプレイ
その次は、更新処理、売上ファイルにデータ移行、集計








2019年7月13日土曜日

今から間に合う!一緒に、軽減税率対応のPOSレジを作りますかぁ? その8

少し忙しくてPOSレジ方が遅れてます


今回は会計の画面ですね~
入力画面も少し変更しています。自由にカスタマイズしてくださいね。

今回作ってて思ったのですが、

●軽減税率と標準税率を分ける
●端数処理(ポータル明細内の各行と、受注側(3カ所の消費税計算)
●繰返しFと混在の計算(税を分けるところ)
●内税、外税

この4つの条件で一旦は作ったのですが、想像していた通り、重くなりまして、今後按分会計の開発を考えると、一番重い外税は一旦やめておくことにしました(笑)
(自社マスタで設定できていた内税と外税を外しデフォルト内税にしました)
外税が必要な方は、計算式内の /* 消し*/で残していますので自由に使ってください。

端数処理の重いのはしょうがないです。(遷移で止まるのはこれです)






この会計ですが、作っている過程を掲載するのは難しいですよね。


あるところまでは、一気に作り上げないと、逆に説明のしようがないです。

写真の赤まるの消費税の誤差ですが、左の消費税は
明細ごとに消費税を計算(当然明細ごとに端数処理をします)したもので
右の消費税は割引後の合計値を元に計算(合計に対しての端数処理)したものです。
当然、税率が変わります。

しかし、これは国税局が指導した端数処理(切り捨て)の範囲内であり、なんの
問題もありません。(請求する額が減っては困りますが)
今回のPOSシステムでは、この差をまるめるのではなく、あえて表示させ、今後も続くであろう軽減税率の対策に生かそうと考えています。
(例えば、明細上では小数点2位表示させ、その合計で端数処理とか)




今回の軽減税率で一番困る話


●今回8%と10%の対象品合計をレシート上で分けて表示すること。対象品は *マーク
(画像は国税局)

すごく、中途半端ですよね。
このシステムに補助金をかけて次回のインボイスに再び補助金がおりるのでしょうか・・。






●次回(2023年)は、インボイス方式で消費税も分けて表示すること。
(画像は国税局)

2段階目があるということです。




どんどん内容が変わる国税局。

上の絵は見た目は簡単ですが、
分けるということは、合計と消費税だけではなく、割引(クーポン割引)、クレジット(クレジット、やデビット、電子マネー、スマホ決済など、全て8%と10%に分けないと、消費税の計算が合わなくなります。 請求書を2つに分けるって、一体誰がそんなめんどくさい管理しずらいシステムを作るというのでしょう・・・・か!

あえて、段階的に税率を表示させましたが、この赤まるの消費税の計算の違いは


このように構成比を基に値を計算して分けないと、算出されません。
でも、ここでちゃんと分ければ、レシートや伝票を税率ごとに発行しないで済みますし管理もしやすいですよね・・・。




今回、時間が無くて十分なデバッグをしていません。
ちゃんと動かなかったらすみません。(あとでじっくりデバッグしますw)

ダウンロード(FileMakerPro17 win)

※タッチパネル用に、ボタンに警告音を入れています。使用する場合は
音源も入れてますのでWinのコントロールパネルで設定してください。



追記・・・

計算式だらけで、レコードが貯まる分、どんどんパフォーマンスが悪くなります。
どうするかというと、別ファイル(売上)の数字フィールド(計算フィールドは止める)に受注や明細データを売上にインポート(集計や分析資料に使用します)して、受注テーブル側のデータは消します(更新処理)。
なので、日々のパフォーマンスは悪くなりません。
更新後の修正は出来ないので、赤黒処理をします。
日次更新として日の終わりか、サーバーがあればチェック(承認)だけしておいて、深夜自動更新という手もあります。






2019年6月29日土曜日

今から間に合う!一緒に、軽減税率対応のPOSレジを作りますかぁ? その7

バーコード

会計機能を作る前にもう少し、入力の補助なんかを・・・。
バーコードは既に使っている人も多くいるかと思います。
POSレジでは、商品の決済時も使う事がありますが、在庫、棚卸とか発注(今回は作りません)とかではよく使いますので知っておくと便利です。



製造など外食では、バーコードは使わないかもしれませんが、
うちのお店では、棚にバーコードを貼って「ピ、数量」とかやってます。
主に発注で使っています。
番号は、オリジナルで大丈夫です。
(今回はUUIDのうちの12桁を商品バーコードにしています。重複しません)
物販業はJANコードなどありますから、仕入れ業者からデータをもらって商品マスタにインポートしておけばいいですよね。

POSレジのボタン数で間に合う場合は、そのボタンでいいのですが、一般販売業などは商品アイテムが多く、そもそもボタンを探してられない場合などに便利ですよね。
(商品アイテム1万以上の場合は次回別の方法も紹介します)

今はQRコードもありますが、A4シールに印刷して気軽に利用するなら通常のバーコードでぜんぜんOKです。(なるべく資材にもお金かけたくないですしね~)
独自の番号をシールなどで印刷して、下敷きやメニュー、棚に貼って「ピ」でも使えます。
で、そのバーコードなのですが、PCの場合はバーコードフォントというのがあって、一般的にはそれを使います。ですが、そのままでは使えません。というかバーコードリーダーが読み込んでくれません。



上の画像の右がフォントで表示されたコード39というバーコードなのですが、開始と最後にアスタリスクを付けないと読み込んでくれません。
また、印刷した状態にもよるとは思うのですが、幅が広く高さが無いので、読み込んでくれたり、読まなかったりでけっこうトラブルがありました。

そこで今回はJQuery Barcodeを使ってちょうどいい大きさで、しっかり読み込んでくれるバーコード生成ファイルを外部ファイルで結んで使用する事にしました。
だんだんJavaScriptとか使う頻度が増えそうですよねぇ・・・。


受注画面で商品を選ぶので、この外部ファイルを受注側のグローバルフィールドで結びます。使用する分には単純で難しくはないので(javascriptの中身じゃないですよw)、今回ダンロードファイルに一緒に入れておきます。在庫とか、発注なんかにでも使ってください。




バーコードのボタンを押すと「Lady Go!」と表示されます。
プレースホルダテキストに次の計算式を入れ
Case(Get ( アクティブフィールド名 ) = "g_バーコード読込結果";"  Lady Go!";"")
フィールドをフォーカスし(水色)、条件付き計算で
$$barcode_keycnt = 0  (ピンク色)
設定しただけです。


バーコードリーダーを使用すると、


トリガが発動します。


バーコードを発動させ読み込むスクリプトはけっこう人によって違うかな・・・
僕が紹介する複雑なものより、単純に商品を拾うというロジックで構わないと思います。
調べて好みのスクリプトを使用してください。



商品が決定されるとピンクになり、明細に商品が記載されます。




FileMakerPro17(Win)
ダウンロード







2019年6月23日日曜日

今から間に合う!一緒に、軽減税率対応のPOSレジを作りますかぁ? その6


今回は、消費税別の集計。

10%は幾ら、
8%は幾ら・・・というところ

受注側のテーブルに繰返し(2か3)のg_税率というグローバルフィールドを作ります。
受注明細テーブルはTOを2つ作ります。






受注明細と受注明細をg_税率と受注idで結びます。sys_D受注_D受注明細_税率集計でポータル内の10%と8%の合計を計算





受注と結ぶ、sys_D受注_D受注明細_税率でポータル内の10%と8%の合計を繰返しに表示


賛否はあるかと思いますが、フィールドの計算値が後の利用度が低く、他に極端に影響を与えない特性のものであれば、繰返しフィールドを使用しています。
僕的には、ここで繰返しを使用しないで何処で使うか・・・みたいな感じですかw

特に特別な計算式はありません。





商品明細の横に「*」アスタ表示

今回の軽減税率は、
●商品ごとに通常増税10%と、お米など軽減税8%を表す区分
●もうひとつは外食産業の様にイートイン10%は通常、テイクアウェイ8%は軽減税という2つの特性があり、これらは同じではありません。

しかし、今回僕が作るシステムの計算上は%の違いで合計計算をしています。
(第一段階の軽減税率はこの程度で、2023年からの第二弾でこの辺のところは変わって来るかと思います)ですので、自社マスタ(システムマスタ)で変更に対応できるように作る事が要求されるでしょう。

また、現場で入力する際、請求と違い、現金商売なのでお客様をなるべく待たせない。
いわゆる商品ごとの税の特性については商品マスタであらかじめ事前設定する事が必須になるでしょう。明細側で「これは、軽減税率対象品だから・・・」なんて考えたり調べたりしている場合ではありません。

入力画面では、ポータルの上に、明細のデフォルト値が反映されるように一般商材(通常増税、軽減税)、E(イートイン)、T(テイクアウェイ)が選択できるようになっています。ポータルの明細内でも、Eか、Tの変更、混在が可能です。また、ファミリーレストランの様にカウンター越しに物販などある場合は、おもちゃは”一般”を選択すれば10%、お米の販売があったとしても”一般”を選択すれば、商品マスタ側で事前に設定されている8%で計算されるというものです。一般とは、一般商材という意味です。(商品マスタ側で事前設定できます。消費税マスタもよく確認してみましょう)
たぶん、これらがクリアされていれば問題はないでしょう。

2023年からインヴォイス形式に代わります。
これ等は明細上で税率表記が義務ずけられるというものですが、システム的には今回からそのように作らないと、8%と10%を分ける事は出来ません。
更にクーポンや割引きです。以前は明細ごとの構成比を出し、値引き額を構成比ごとに按分させていいく方式で説明しました。(実際、納品しているPOSのほとんどがそれ //明細が汚くなりますけど)
しかし、今回は、%ごとの構成比でOKなので、10%と8%の金額の構成比を算出し、値引き額を算出します。
正直、2023年がどうなるか分かりません。もしかしたら、ほんとうに明細ごとに算出しなくてはいけなくなるかもしれません。
(でも、そんなに難しくないです。 ごちゃごちゃして汚いですけど)

今回も特に特別な計算式、スクリプトはありません。




(FileMakerPro17 win)








Associatron (アソシアトロン)連想記憶

  なぜか、僕のブログの研究所側ではなく、FileMaker側にヒットするので アソシアトロン Associatron研究 リンクを貼っておきます。 研究と実験詳細 https://cside-associatron.blogspot.com/ 公開実験(JavaScriptのみ...