みなさま、こんにちは!!
いまだ梅雨入りしてない神戸ですが、ようやくそれらしい雰囲気になって参りました。
さて日本企業では売上集計などを年度で取り扱う場合も多いかと思われます。
弊社も例にもれずではありますが、従来はNotesではあまり年度というものを意識することなく利用しておりました。
今回、従来Excelで行っていた、取引先向けの実績収集ファイルをNotes化しようという案件が発生したのですが、その必須項目として以下のように「年度」や「期」、「月」が要求されております。
今まではExcelで行っていたので、蓄積された前行をコピーするなどであまり意識する必要がなかったのですが、Notesでの入力はフォームで行うため、その入力作業を簡素化できればと思ったのが今回の発端です。
目的としては、「納品書発行日付」をカレンダーから選択するだけで、「年度」「期」「月」が計算結果で得られればというものです。
ということで、簡単なフォームを作成してみました。
納品書発行日付[InvoiceDate]は編集可能な日付/時刻としています。
日付/時刻制御にチェックし、年月日のみの表示としてあります。
またフォームのオプションで、「フィールドの自動更新」にもチェックしておきます。
まずは簡単な「月」からです。
こちらは計算結果のテキストとしてあります。
単純に「納品書発行日付」から「月」部分を抜き出すだけです。
※今回はうしろに「月」を付加してあります。
式は以下のようにしました。
@If(InvoiceDate="";"";@Text(@Month(InvoiceDate))+"月") |
If文は、新規作成時にはInvoiceDateがブランクのため、計算結果が得られず、エラーになることを回避させています。
文字列「月」をつなげるため、@Monthで得られた数字を@Textで文字列化しているという、単純なものになります。
次に「期」です。
今回は4~9月の場合に「上」、10~3月の場合に「下」を表示させたいと思います。
こちらも計算結果のテキストとしてあります。
こちらの式は、以下のようにしました。
@If(Month="";"";(@If(Month="4月":"5月":"6月":"7月":"8月":"9月";"上";"下"))) |
先のMonthフィールドが「4月」~「9月」であった場合、「上」。それ以外は「下」を表示するというこちらも簡単なIf文になります。
複数条件をまとめるため、各月を「:」(コロン)で接続してあります。
もう少しIf文をネストする必要がありますが、これだと海外のようなQ1~Q4も実現できますね。
それでは最後に年度です。
年と年度の違いは、もちろん12月で終わるか、3月で終わるかです。
問題なのは1~3月が[本来の年]-1される必要があるというものです。
なんて考えていると複雑になってしまうのですが、要は今の日付から3ヶ月引いた時の年(Year)を取得すればいいということになります。
先と同様、こちらも後ろに「年度」の文字を接続させるため、計算結果のテキストとしています。
@If(InvoiceDate="";"";@text(@Year(@Adjust(InvoiceDate;0;-3;0;0;0;0)))+"年度") |
こちらも簡単ですね。
InvoiceDateをAdjust関数を用いて、マイナス3ヶ月としたものから年部分を取り出します。
そちらをテキスト化して、「年度」をくっつけているだけになります。
それでは実際のフォームの動きを見てみましょう。
まずは新規作成画面です。
「納品書発行日付」がブランクですので、If文で処理した通り、「年度」「月」「期」のすべてがブランクになっています。
If文がなければ、この新規作成の画面を開くことができません。
If文がなければ、この新規作成の画面を開くことができません。
それでは本日の日付を選択してみます。
以下は選んですぐの状態です。
フィールドのフォーカスを移動させると、
予定通り、「2019年」「6月」「上」という計算結果が得られました。
それでは今年の10月1日にしてみた場合、どうなるでしょう。
こちらも正しく期は「下」となってくれました。
それでは来年3月31日では・・・
2019年の下期と表示されました。
しつこいようですが、最後に来年の4月1日です。
ちゃんと「2020年度」「上期」になりました。
以上、いまさら取り上げることではないかとも思いましたが、企業として年度ベースでものごとを見ている場合も多いため、記事にしてみました。