2016年11月21日月曜日

第28回弁護士向けソフト  まずは、30分で見積システムを作ってみます。

前回も書きましたが、弁護士さん向けのソフト開発を最初から作っていきますので
よろしくお願いします。



事件管理ソフトの前に、簡単な見積システムなんかを作ってみます。
データベースの構造を知る上で、てっとり早く簡単に理解がしやすいからです。


まずはFileMakerの無料評価版をダウンロードします。
買うのなら、ちょっと高いけどFileMaker Pro Advancedをお勧めします。
理由はスクリプトデバッガとデータビューアがついてるからです。
テーブルインポート、カスタム関数が使えるのもいいですね。

僕は14のAdvancedで作ります。


データベース(以下DB)は、通常SQLとPHPなど、データベースとアプリを分離して開発しますが、FileMakerは、何も考えずに、これひとつで開発できますので、プロじゃなくても非常に早く簡単に目的にたどり着けます。分離開発は、FileMakerにもExecuteSQL関数がありますので、やってやれないこともないのですが、開発の仕方を間違えると、遅く、使えないシステムになってしまうこともありますので、素直にそのまま使用する事をお勧めします。





---- それでは始めますね ---


新規ソリューションから ファイル名「Test1」を作り

テーブルを作っていきます。
・見積
・見積明細
・商品マスタ
・得意先


日本語ですよ。
日本人なら日本語がいいに決まってるじゃないですか。





































テーブルを作ったら、各テーブル毎にデータを入れるためのフィールドを設定していきます。



見積(テーブル)には

・伝票No(テキスト)
・得意先No(テキスト)
・日付 (日付)

































同じく

見積明細(テーブル)

・伝票No(テキスト)
・商品No(テキスト)
・商品名(テキスト)
・単価(数字)
・数量(数字)
・金額(計算) =単価×金額



商品マスタ(テーブル)

・商品No(テキスト)
・商品名(テキスト)
・単価(数字)


得意先(テーブル)

・得意先No(テキスト)
・得意先名(テキスト)


を作ります。
ファイルを作った時に勝手にできたTest1のテーブルは放置してください。































次はリレーションです。

得意先(テーブル)の得意先Noから
見積(テーブル)の得意先Noをドラッグして線で繋げます。



見積(テーブル)の伝票Noから、見積明細(テーブル)の伝票Noまでドラッグして
線で繋げ、レコードの作成許可と、一緒に削除の2か所にチェックを入れます。



見積明細(テーブル)の商品Noから、商品マスタ(テーブル)の商品NOまで
ドラッグして線で繋げます。



テーブルは文字通り仕事の机と同じで、
田中さんの机と、佐藤さんの机を、あるKeyで結び同時に仕事をする事と似ています。
このとき、田中さんが作ったデータと、佐藤さんが作ったデータは、合わさって見えるのですが、データはしっかりと別々の机で保管されています。この関係をリレーション(関係)と呼び、
これができるデータベースをリレーショナル・データベースと呼びます。

primary key (主キー)や外部キーについては、今回は省きます。
































見積明細(テーブル)の商品名フィールドと単価フィールドを商品マスタ(テーブル)の同じ名称のフィールドからルックアップさせてデータを保管させます。


データの正規化と冗長性については後程説明します。



































見積(テーブル)の伝票Noをオプションでシリアル番号を設定します。
1+1でも、0001+1でも、自由でいいです。


同じように、日付フィールドを作成日にチェックします。



































得意先(テーブル)の得意先Noもシリアル設定をします。


































商品マスタ(テーブル)の商品Noもシリアル設定します。


※ 見積(テーブル)と見積明細(テーブル)は伝票Noで照合されていますが、
見積明細(テーブル)側の伝票Noはシリアル設定をしてはいけません。
見積明細(テーブル)の伝票No以外のデータが入力され確定された時点で
自動的に見積(テーブル)側の伝票Noが生成されます。


































見積(テーブル)のレイアウト画面を開き、見積明細(テーブル)のポータルを作ります。

田中さんの机の上で、佐藤さんの机が見えるような状態(不思議ですね~)
































ポータルにフィールドを追加します。
このとき、明細の伝票Noは省いて結構です。



































こんな感じになりますが、全部同じ幅だと変ですので、フィールドの幅と書式を設定します。































数字フィールドは右寄せ、小数点以下、3桁区切りなどを設定します。































見積(テーブル)に得意先(テーブル)の得意先名フィールドを置きます。

あれ?と思うでしょう。
見積(テーブル)側に得意先名フィールドを作って、さっきと同じようにルックアップさせて
データを保管させなくてもよいのかと・・・・。

それでもOKなんです。

でも、あえて、見積(テーブル)とキーで結んだ得意先(テーブル)から得意先名を参照させることにしました。


実は、なぜ見積システムを作るのかは、これを説明したかったからなんです。


先程の見積明細(テーブル)の商品名や単価もルックアップさせずに、キーによって参照させることによってデータを表示させることが可能です。(これが正規化です)

なぜ、そうしなかったのか・・・


一つには、参照させて表示させる事は、この見積(テーブル)画面で、マスタ側のデータも変更できてしまう!ということです。
そこに不具合が生じるか否かを、使用者側の用途によって決定させなくてはいけません。
例えば、見積もりの場合、明細(テーブル)ポータル上で商品マスタにある名称や単価が操作(参照して表示)できれば、まるで学習機能かのようで便利ではありますが、過去の取引データの変化が取得できません。


8月15日 りんご 100
9月11日 りんご 101円

という単価の変化を明細で取得したいのに、正規化したいがために、商品マスタを参照させ過去のデータまで


8月15日 りんご 101
9月11日 りんご 101円

に上書きされてしまったら、取引の変化が分かりません。




見積もりや売上請求、仕入・買掛など、相手と取引する業務では、「過去と現在に変化があって当然」と決定されれば、ルックアップさせて、データを保管させ、あえて冗長させる手段をとります。


いやいや、過去データよりも、どんどんマスタ・データを参照させて上書き(正規化)させれば、データも更新され「楽なんだ」と考える場合は、過去の明細単価まで一斉に変わってしまいます。


もう、これは開発者より、使用者が決めなくてはいけません。


見積書という概念で考えると、得意先名が伝票入力時に変更される事は考えられないので正規化でいいのだと考えます。一方、明細内の商品単価は、原料の値上げや、諸事情などで今回の取引上の単価が変わるなど日常起こりうることです。
マスタ側のデータはそのままで、明細上で単価変更が出来き、過去の取引金額の変化が分かった方が良いでしょう。
見積ならまだしも売上請求で過去の明細データが変わってしまったら、ソフトウエアとは言えないものになってしまいます。



リレーションといっても、なんでもかんでも正規化すると、実際の業務に支障をきたす場合がありますので、現場実務を考慮して判断しなくてはいけません。
また、メンテナンスなど、ファイルが壊れ、NOと名称を合わせるのが大変な場合、ルックアップされてデータが保管されていれば、「0003番はリンゴ」というデータが確認できますが、正規化された場合は、NOがなんの商品なのか分からなくなる可能性もあります。

(だからといって、なんでもルックアップも止めましょう)
































さてさて、見積(テーブル)の合計フィールドをSum関数を使って、
見積明細(テーブル)の金額を指定します。




































まぁ、見栄えの問題でもありますが、ポータルをクリックし、代替の行状態にチェックを入れます。

































インスペクタで、各フィールドの入力しなくてよいものを選び、ブラウズモードを外します。



































入力するフィールドに色を付けてみます。






























レイアウトモードにして、レイアウトメニューからタブ順の設定を行います。

キーボード操作で次のフィールドに移れるのは便利ですね。2分でできます。


(最近クラウドを使ったWebでの業務アプリが増えてきましたが、FileMakerでは、このタブ順でキーボード操作を設定するのは便利ですよね、Webソフトでは下手するとEnterキーを押すたびに送信したりして使い物にならなくないですか?最近ではjqueryのイベントなど使ってコードを書けるようにはなりましたが、何日もかかりますし、開発が嫌になります。実際、現場実務でのWebソフトは、まだちょっと処理も遅く駄目っすね~)



必要のない箇所の番号は削除します。

































TabキーとEnterキーで次のフィールドに移るように設定します。



これで、非常に簡単で簡易的な見積システムが完成です。
得意先(テーブル)と商品マスタ(テーブル)にデータを入れて
実際に操作してみましょう。




























消費税の設定やデータのコミット(確定)は後日、説明します。
今回はスクリプトを一切使っておりません。









ダウンロード
(今回の分)










2016年11月12日土曜日

第27回弁護士ソフト,司法書士ソフト もう一回、最初から一緒に作りますか!?(笑)

随分とご無沙汰をしてしまい申し訳ありません。
会社の仕事が忙しくて・・・
といって、暇になった訳ではないのですよぅ。


弁護士ソフト、途中で止めて、「お前なんか信じられない」と言われても仕方ないのですが、心を入れ替え死なない限り続けていこうかと思いますよ、えぇ
そうそう、前回まで作ったものを応用して使われていらっしゃる弁護士さんもいるのですよ。
嬉しいですね。


弁護士さんや司法書士さんに拘ってるわけではないのですが、御恩がありまして(笑)
気分転換と言ってはなんですが自分で作りましょう(笑)
使うソフトはFileMakerというデータベースソフトです。
初心者でも簡単にデータベースが作れますので、自作をお勧めします。

自分で作ると、後々クラウドだのiPadだの応用がききますし、将来基幹システムみたいな大規模なシステムなんかも作れます。使い勝手は自分流でいいじゃないですか!?



僕じゃないですよ、優秀な社員さんです。



何を隠そう、僕はソフト屋なのですが、業界を絞って開発しているので、詳しくない業界なんかも沢山あるんです。弁護士や司法書士の士業だって大して知りません。
でもね、知っていればいいものができるかというと、そうでもない。

一緒に作ることによって、使う側の自由度を生かしたシステム開発ってのが、あったっていいのではないかと思っているんです。 ソフト屋が機能や仕様範囲を決定するのは、つまらないじゃないですか。

さすがにギブアップというところで、依頼してくれれば、飛んでいけるようなソフト会社があってもいいでしょう。
公開しながら開発するわけですが、ソースと言っても大したものでもないので、近所の詳しい人がフォローアップしてもいいわけですよ。どうぞご自由に、著作権なんか放棄しまくりますし。
知らない誰かが勝手に商売したけりゃ、すればいいわけです(笑)



内緒ですけど、うちの商品
可愛いでしょ。



おじさんが作った野暮ったいシステムより、自分で作った方がいいのです(笑)

ショッキングピンクの弁護士ソフトがあったっていいじゃないですか!😊
駄目か・・・。









2016年5月23日月曜日

FileMaker Hiroさんカレンダー(カスタム)を月曜スタートに・・・

2014年6月にUPした

「第18回 自分で作ろう!弁護士向けソフト スケジュール」

カレンダーの「曜日のスタートを月曜からにしてほしい」というご要望がありましたので
修正の方法を書いておきます。



通常、週の始まりは日曜スタートですが

業態によって、月曜スタートという表示もありうるとは伺ってましたので
計算式だけで変更できますので
書いておきます。


この計算式はHiroさん案なので、基本構造は変えずに、式の追加と
組み合わせで変更します。




◆日付設定フィールドの計算式を変えます。


Let([
$start=Date(Month(開始日[1]);0;Year(開始日[1]));
$date=$start +1+ Get(計算式繰り返し位置番号) - DayOfWeek($start)
];
$date
)






$start=Date(Month(開始日[1]);0;Year(開始日[1]));
赤文字の「0」は「」から変えたものです。
1のままだと、行詰まりしてしまいます。


「$date=$start 」と「Get(計算式繰り返し位置番号) 」の間に「+1」を追加します。
火曜スタートなら+2です。





次に
◆曜日設定フィールドの計算式を変えます



Choose(Get(計算式繰り返し位置番号);
"";"MON";"TUE";"WEN";"THU";"FRI";
TextColor("SAT";RGB(0;0;255));
TextColor("SUN";RGB(255;0;0));)





週表記の順番を変えるだけです。

これで、上の様に、月曜日スタートとなりました。






2016年1月30日土曜日

第26回弁護士向けソフト UPしてあったファイルを修正

昨年の1月2日にアップしていたファイルの修正(一年ぶり)

第25回 自分で作ろう! 弁護士向けソフト 請求確認と消込入金、ダイレクト入金

で、少しスクリプトがおかしいのと、カスタマイズするための理屈が分かりずらいので修正しました。
今までダウンロードしてくださった方ありがとうございます。



なんちゃって請求・消込入金画面



↑見積から売上画面  
   
不親切ですがデフォルトのメニューから請求入金に行ってください、、、




↑なんちゃって請求書


公開して沢山の方からリレーションがわかりずらいという声を頂きました(笑)
すみませんです。
普通はこんなにリレーションを張らないと思うのですが、過去のデータを追跡させるために、前々回まで遡れるものを作りましたので、気持ちが悪いのかと思います(詫び)


簡単なものを複雑にする気はないのですが
変数や関数を極力使わず、データをフィールドに保管し、足算、引算、掛算、割算で
請求書や入金処理をしちゃいましょうというものです。
ただ、集計は使っていません。
(関数も最小限、エラー処理もダイアログも作っていませんが・・・)

前回締日とか今回締日とか、リレーションとポータルフィルタで強引に帳尻を合わせたせいで、非常に複雑になっているのだと思います。

カスタマイズするのであれば
例えば、売上や入金日付と締日計算で照合せずに、今回締日開始、今回締日終了という計算式を作って範囲で照合するとポータルフィルタは最小限で済むかと思います。
ポータルフィルタはポータルに表示させるだけの機能で、SUM( )のような計算をすると全て計算されますから、何処かで帳尻合わせが必要になり、より複雑にしてしまいます。
何処に何が隠れているのか、探すのも大変ですから。。。。

前回は請求書までは作らなかったのですが、今回はなんちゃって請求書を作りました。

普通は、ポータル表示で請求書印刷はしません。一得意先で何枚にも渡る可能性があるからリスト形式で作ります。しかし、一得意先の締め単位の売上伝票が少ないのであれば、やっていけないわけではありません。

請求書を発行する前に、締日で検索できるリストがあると便利だと思います。
さらに、今回請求のある得意先にフラグを立てリレーションで照合すれば、もっと楽です。
前回請求+今回売上-今回入金で残があれば未収入金ですから、そういうリストも作れるのかと思います。

締めの一覧表は締日ごとで、月に一度売掛残高一覧表も作れるのかと思います。

ではでは。。。。




(もう、12がないので13か14で開けてください)






2016年1月24日日曜日

FileMaker   Get ( 最終メッセージ選択 )のデフォルト値のEscボタン反応に疑問

警告メッセージのボタンに対応する番号を返すスクリプトですが、
まだ直ってないので2年ぶりにUPするねー


どんな事かというと、
たとえば、新規レコード追加などでカスタムダイアログを出すようなとき
デフォルトでは"OK"が1、"キャンセル"が2になるのですが、
Enterを押すと当然OKが優先されます。
しかし、ダイアログを出した状態でEscボタンを押すと、キャンセルどころか、
1の”OK”を選んで新規レコードが追加されてしまうという現象。


(大したこと無いようで、開発者がこれを忘れてしまうと、けっこう
トラブります なぜかというとユーザーは他ソフトでもEscボタンに慣れてるから・・・)






ここでEscボタンを押すとレコードが新規で追加されてしまいます。
中身はというと、


こんなスクリプトで、ダイアログは



という感じで"OK"が優先されてるわけです。これはいいよね
優先を変えたければ、入替えればいいんです。

問題は、どうしてEscボタンをデフォルト値に反応させたか、なんですよ。

で、嫌なんですけど上の"OK"と"キャンセル"の位置を入替えて、データの確定は2のOKの方にチェックをふります。
スクリプトは

Get ( 最終メッセージ選択 ) = 2

にします。


これで
ダイアログを出してEnterを押すと、キャンセルが優先されます。
ダイアログを出した状態でEscボタンを押してもキャンセルされます。

(というか、Enter押してOKなら最初からダイアログなんて必要ないわけで、一旦注意を促す上で必要なんだけど、ダイアログ嫌いな僕でも、こういう場合は、キャンセルを優先させた方が安全かと思います)


ただ、他との兼ね合いで、"OK"と"キャンセル"の位置を変えるというのは
違和感、大ありなんですよねー



(新規レコードごときでは使わないかと思いますが、オリジナルでナビボタンなど作るとき、安易に新規レコードを増やしてもらいたくない場合や、頻繁に使うボタンの横に新規レコードボタンがある場合など、反応させてもキャンセル優先にしたい場合など)



2016年1月22日金曜日

FileMakerで分散開発

最近、FileMaker関係、更新してなかった。
っていうのはね~


FileMakerらしい問題があって、僕は夜型で開発してるんですよ
だから薄暗い毎日をおくってるんです。
昼間は優秀なSEが開発して、夜は僕ってなわけ、シフト開発してます。

お題に分散開発って書いたけど、このDB(データベース)ソフトはそれができません。
一人で頑張って下さいっていうソフト。
普通はね、サーバークライアントで複数人が同時に一つのDBを開発するんです。
同時に開発しなけりゃ、時間かかってしまうでしょ。

開発しやすいソフトとか、そういう次元の話ではなくね・・・

SQLなんてのはエディタで書いたSQL文貼り付けりゃ動くから、何十人でも
同時に開発出来ちゃうでしょ。FileMakerのような俺様ソフトはテキストで書いたスクリプトが動くわけじゃないから端末でスクリプトや管理設定開いていたら待たなければいけないわけ。
今のはSQLとPHPやCSSのようなデザインではないから、分離開発できないし。

FileMakerProAdvansedを複数ライセンスでそれぞれにローカルで開発して、一つに合わせていく事も可能だけど、最後のプレハブ合わせがデタラメになるのよ。
テーブル名変更だの変数名変更だの単純作業が増えてデバッグのほうが時間かかるし、風吹いたら崩れる

データファイルとアプリファイルに分けた分離開発にしても結局そのアプリ側に複数人必要なわけで、プログラムとデザインの分離もできない。

レイアウトいじることすら出来ないし

Redmineがあっても結局シフトで交代開発ってなかんじ。


でも、このソフトから離れる事できないのはなぜ・・・







最適化してますか?

 まるで入院していた患者が退院して元気に復活するような機能。 クラウドを使用するユーザーさんがほとんどなのですが、このゴールデンウィーク中は 最適化のメンテしときます。 データがピチピチしちゃいますよぅ。