ページビューの合計

2018年3月19日月曜日

#支払管理 アプリを作ってみよう(3)

Today, let's add some more features to the Notes form I created last time.


みなさま、こんにちは!
いよいよですね Think 2018
残念ながら現地で参加することはできませんでしたが、既にいろんな情報が発信されてきておりますので、ぜひアンテナを張っておいてください。

個人的には先週金曜のテクてく、なかなかヒットでした。

週末、MacのDockerを有効にし、Watson Explorer Community Editionのインストールまでは完了しましたが、まだそれ以降ができていません。
せっかくなので、会社のサーバー内にインストールを試みてみようかとも考えておりますので、もし案内できるような形ができれば、こちらでも取り上げてみたいと思います。
 
さて今回は先日までのフォームにもう少し機能を加えてみたいと思います。

まずは[ClosingDate]フィールドです。
弊社では支払処理を行っている月末を締日としていますので、デフォルト値に計算式を設定します。
※例外処理日などを考慮し、計算結果フィールドにはしていません。


Next:=@Adjust(@Today;0;1;(-(@Day(@Today)-1));0;0;0);
@Adjust(Next1;0;0;-1;0;0;0)


[Next]に今日を基準として、翌月1日をセットし、さらに1日引くことで当月末の日にちを取得しています。
※もちろん末締め以外の場合は考慮が必要です。

次に適用サイト[PaymentTerm]です。
マスタ作成時に書きませんでしたが、金額により支払サイトが異なる場合があります。
本アプリでは現状ふたつの閾値を設定できるようにしてあります。

具体的にはpaymentForm内の合計[PurchaseAmount]が
支払条件金額1[PaymentAmount1]より低い場合は支払条件1[PaymentTerm1]
それ以上、支払条件金額2[PaymentAmount2]より低い場合は支払条件2[PaymentTerm2]
それ以上は支払条件3[PaymentTerm3]が適用されます。

適用サイトフィールドは、その何れが適用されたのかを明示する数式を設定します。

それでは少し長くなりますが、[PaymentTerm]フィールドを計算結果に変更し、以下の式を設定します。


PA:=PurchaseAmount;
PA1:=PaymentAmount1;
PA2:=PaymentAmount2;
PT1:=PaymentTerm1;
PT2:=PaymentTerm2;
PT3:=PaymentTerm3;
@If(PA="";"";@If(PA<PA1;PT1;@If(PA<PA2;PT2;PT3)))

※注意点
この評価式を正しく処理させるため、makerFormの条件登録時に考慮が必要となってしまいます。

まず閾値が2点の場合は、以下のような設定となります。


金額に関わらず、全額同一の場合は以下のように支払条件金額1及び2に「1」を入れてください。また支払条件1,2,3はすべて同一になります。


最後に閾値が1点の場合です。こちらには閾値となり金額を支払条件金額1,2の両方にセットします。
支払条件1には閾値以下の日数を。支払条件2,3には以上の日数をセットします。


この時点でそれぞれの条件のメーカーマスタを作成し、金額を変更してみて正しく評価されるか確認してください。
条件が多岐にわたるため、本ブログでは割愛させて頂きます。

最後に支払予定日と支払日です。
支払予定日は計算結果として締日に適用サイトを足した日付を表示させます。


@If(PaymentTerm="";"";
@Adjust(ClosingDate;0;0;PaymentTerm;0;0;0))

※PaymentTermは合計を評価するまで値が入らないため、@If関数で値が入るまでは計算しないようにしてあります。

支払日については、こちらの支払予定日を参考に、実際に支払う日を手入力することになります。
理由は単純で、例えば2018年2月で処理した場合、適用サイトが60日だとすると、以下のような支払予定日が計算されてしまいます。


適用サイトは毎月の日数を30として便宜上決められた数値であるため、単純に足してしまうと、ほぼ本来の支払日とは不一致してしまいます。
そのため、実際の支払日は手入力を行う仕様としています。
もちろん月末のみの支払でしたらなんとか計算でできそうなのですが、サイトが45日などの場合等を考慮すると現状の私の能力はオーバーしております。

少し複雑になり、また運用で回避するような内容を含んでしまいましたが、本日はここまでと致します。

2018年3月12日月曜日

#支払管理 アプリを作ってみよう(2)

Today, following the previous Notes form, I will make nine Notes views.
Next, I will set up the calculation formulas for the Notes form that references the master data.

みなさま、こんにちは!!
さてまずは宣伝です。
ノーツコンソーシアム2018年第一回大阪研究会の日程が決まりました!!

 4月20日(金曜) 13:30~
 於:日本アイ・ビー・エム株式会社 大阪事業所

大阪事業所が移転し、初めての大阪研究会になります。
真新しいスペースで、ぜひお会いいたしましょう!

会員外の方の見学も大歓迎です!上記研究会のリンクより、ノーツコンソーシアム事務局へご相談ください。

またこの日は第三金曜日、テクてくLotus技術者夜会も開催されます。
今回は特別に同じく大阪事業所にてパブリックビューを開催いただけることになりました。
こちらはどなたでも参加可能ですが、会場への入館手続きが必要になりますので、参加ご希望の方は、予めテクてくLotus技術者夜会のサイトより申し込みを行ってください。
※現在は3月分の申し込みを行っておりますので、4月分はもう少しお待ちください。

それでは本題にもどります。
前回に続き、今回はビューを作成して参ります。
早速ですが、まずはメーカーマスター用のビューです。
すべてのビューの選択式に、「使用フォームにより検索」・・・「makerForm」を設定してください。


 メーカー\コード順|bym_code
 コード: m_MakerCode(昇順)
 メーカー名: m_MakerName
 カナ: m_Kana

 メーカー\名称順|bym_kana
 カナ: m_Kana(昇順)
 メーカー名: m_MakerName
 コード: m_MakerCode

 (メーカー\参照用|bym_ref)
 コード: m_MakerCode(昇順) ・・・1
 メーカー名: m_MakerName ・・・2
 カナ: m_Kana ・・・3
 銀行: m_Bank ・・・4
 銀行コード: m_BankCode ・・・5
 支店: m_Branch ・・・6
 支店コード: m_BranchCode ・・・7
 口座区分: m_Account ・・・8
 口座区分コード: m_AccountCode ・・・9
 口座番号: m_AccountNo ・・・10
 口座名義: m_AccountName ・・・11
 支払条件: m_Payment ・・・12
 支払条件金額1: m_PaymentAmount1 ・・・13
 支払条件金額2: m_PaymentAmount2 ・・・14
 支払条件1: m_PaymentTerm1 ・・・15
 支払条件2: m_PaymentTerm2 ・・・16
 支払条件3: m_PaymentTerm3 ・・・17

 (メーカー\支払条件|bym_payment)
 支払条件: m_Payment(昇順・カテゴリ別)


それぞれアクションには
[終了][新規作成(メーカーマスタ/支払)][編集][印刷][削除]
を組み込んでおります。

続いて支払フォーム用のビューです。
こちらも先と同様に「使用フォームにより検索」・・・「paymentForm」を設定してください。

 支払\作成日順|bycreatedate
 作成日: created(降順)
 メーカー名: MakerName
 金額: PurchaseAmount
 締日: closingdate
 支払日: PaymentDay

 支払\締日順|byclosingdate
 締日: closingdate(降順・カテゴリ別)
 カナ: kana(昇順・非表示)
 メーカー名: MakerName
 金額: PurchaseAmount
 支払日: PaymentDay

 支払\支払日順|bypaydate
 締日: closingdate(降順・カテゴリ別)
 カナ: kana(昇順・非表示)
 メーカー名: MakerName
 金額: PurchaseAmount
 支払日: PaymentDay

 支払\名称順|bykana
 カナ: kana(昇順・カテゴリ別)
 メーカー名: MakerName
 金額: PurchaseAmount
 締日: closingdate(降順)
 支払日: PaymentDay

 支払\エクスポート|export
 銀行コード: BankCode(昇順)
 支店コード: BranchCode
 口座名義: AccountName(昇順)
 口座区分: AccountCode
 口座番号: AccountNo
 支払金額: PurchaseAmount
 支払日: PaymentDay


こちらもアクションには
[終了][新規作成(メーカーマスタ/支払)][編集][印刷][削除]
を組み込んでおります。

続いて参照するビューができましたので、メーカーマスタの支払条件のダイアログを設定します。
[makerForm]の[m_Payment]フィールドを選択し、制御タブの[選択]を
【式で選択肢を設定】とし、以下の式を入力します。


@DbColumn("":"NoCache";"";bym_pay;1)


最後に【リストにない値も可】としておきます。


次に支払フォームについて、メーカーマスタから参照できる項目を設定します。

まずは[MakerCode]について、ダイアログでメーカーマスタからコードを呼び出す設定を行います。
コードを選ぶ場合、カナを検索して選択するような設計としました。

制御タブの[選択]を【[ビュー]ダイアログから選択】とし、現在のデータベースの【メーカー\名称順】の3列目を取得させます。


なおフィールドのExitingイベントに以下スクリプトを設定することで、フォーム内の参照フィールドが更新されます。

Sub Exiting(Source As Field)
Dim uiws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument

Set uidoc = uiws.CurrentDocument
Call uidoc.Refresh
End Sub



・・・こちらは御代様の記事「フォームの再計算」より拝借致しました。

続いて[MakerName]です。
こちらは先の[MakerCode]をキーとして、(メーカー\参照用)ビューから値をLookupします。
編集可能から計算結果へ変更し、以下式を設定します。
末尾の数字は、メーカー\参照用|bym_refの列番号(上記に記載)をセットしてあります。


@if(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;2))


引き続き以下フィールドも計算結果へ変更し、それぞれ式を設定します。


[Kana]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;3))

[Bank]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;4))

[BankCode]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;5))

[Branch]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;6))

[BranchCode]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;7))

[Account]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;8))

[AccountCode]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;9))

[AccountNo]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;10))

[AccountName]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;11))

[Payment]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;12))

[PaymentAmount1]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;13))

[PaymentAmount2]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;14))

[PaymentTerm1]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;15))

[PaymentTerm2]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;16))

[PaymentTerm3]
@If(MakerCode="";"";@DbLookup("":"NoCache";"";"bym_ref";MakerCode;17))


それでは実際に値が反映されるか確認しておきます。

正しく設定されていれば、以下のように「メーカー名」「カナ」及び「口座情報」「支払条件」の全フィールドが計算結果として取得されます。


最後に支払金額の「合計」を計算結果フィールドに変換します。
[PurchaseAmount]フィールドを計算結果に変更し、に求めたい式を設定します。


@If(Purchase="";"";@If(Tax="";"";Purchase + Tax))

※仕入金額及び消費税がブランクの場合はブランク表示するようにしてあります。
もし内税処理されるのであれば、消費税のデフォルト値に"0"を設定してください。


それではNotesでプリビューし、[仕入金額]と[消費税]を入力してみましょう。
当たり前ですが、正しく計算結果が表示されました。


なお[仕入金額]もしくは[消費税]がブランクであった場合、下記のようなエラー表示になります。


本日は以上とさせて頂きます。

次回はもう少しアプリケーションとしての機能を追加する予定です。

2018年3月5日月曜日

#支払管理 アプリを作ってみよう(1)

I will create a Notes application to manage payment from this time.
For the first time today, I will create two Notes forms.

みなさま、こんにちは!
今回よりとある方にご助言いただきました、英語学習のひとつとして、内容の要約を英文で冒頭に記述してみました。
Google先生を頼りながらですが、英語に触れる機会を増やすことを目的としております。
英文内容の不備については、目をつぶって頂けますと幸いです。


さて弊社は商社ということで、メーカーから商品を買い付け、お客様に販売致します。
つまり買掛金と売掛金を管理すれば、財務の流れは把握できるのです。(もちろん諸経費等は除く)

ちなみに売掛金については、iSeriesで管理されているのですが、買掛金についてはベースは同じくiSeries内にあるものの、いろんな条件があるため、買掛金管理(支払処理)については別途Excelブックも使っております。
もちろん単純に「支払い」という観点ではそれで十分なのですが、1ヶ月1シート、年間1ブックという管理のため、BIでのデータ利用等に手間がかかります。

ということで、Notesで試作するよう指示が出た次第です。

大まかな要件としては、メーカーの情報(支払条件など)を管理するフォーム(makerForm)と実際の支払処理のトランザクションを管理するフォーム(paymentForm)を作成します。
なお弊社では手形の支払いもありますが、まずはこちらを考慮せず、振込(さまざまなサイトの期日振込)を管理するアプリとして作って参ります。

さて前置きが長くなりましたが、まずはmakerFormの内容です。
※弊社ではメーカーコードはテキストとして扱っておりますので、そのように設計いたします。


 コード: m_MakerCode(テキスト・編集可能)
 メーカー名: m_MakerName(テキスト・編集可能)
 カナ: m_Kana(テキスト・編集可能)
 銀行: m_Bank(ダイアログリスト・編集可能)
 銀行コード: m_BankCode(テキスト・編集可能)
 支店: m_Branch(テキスト・編集可能)
 支店コード: m_BranchCode(テキスト・編集可能)
 口座区分: m_Account(ラジオボタン(普通|1/当座|2)・
       編集可能)
 口座区分コード: m_AccountCode(数値・
       計算結果/m_Account)
 口座番号: m_AccountNo(テキスト・編集可能)
 口座名義: m_AccountName(テキスト・編集可能)

 支払条件: m_Payment(ダイアログリスト・編集可能)
 支払条件金額1: m_PaymentAmount1(数値・編集可能)
 支払条件金額2: m_PaymentAmount2(数値・編集可能)
 支払条件1: m_PaymentTerm1(数値・編集可能)
 支払条件2: m_PaymentTerm2(数値・編集可能)
 支払条件3: m_PaymentTerm3(数値・編集可能)


分かりにくいフィールドには「フィールドヘルプ」を設定しました。
また口座区分の項目に別名(1及び2)を設定し、口座区分コードは計算結果フィールドで「m_Account」とすることで、コードを取得("普通"の場合は"1"、"当座"の場合は"2")させています。またラジオボタン選択時に計算結果を実行するように、"m_Account"フィールドに「キーワードの変更時にフィールドを更新」をチェックしてあります。


続いてpaymentFormの内容です。
※計算結果フィールドがいくつかありますが、一旦編集可能で作成しておきます


 コード: MakerCode(ダイアログリスト・編集可能)
 メーカー名: MakerName(テキスト・編集可能)
 カナ: Kana(テキスト・編集可能)

 仕入金額: Purchase(数値・編集可能)
 消費税: Tax(数値・編集可能)
 合計: PurchaseAmount(数値・編集可能)
 適用サイト: PaymentTerm(数値・編集可能)
 締日: ClosingDate(日付・編集可能)
 支払予定日: PaymentDayPlan(日付・編集可能)
 支払日: PaymentDay(日付・編集可能)

 口座情報セクション
 銀行: Bank(テキスト・編集可能)
 銀行コード: BankCode(テキスト・編集可能)
 支店: Branch(テキスト・編集可能)
 支店コード: BranchCode(テキスト・編集可能)
 口座区分: Account(テキスト・編集可能)
 口座区分コード: AccountCode(数値・編集可能)
 口座番号: AccountNo(テキスト・編集可能)
 口座名義: AccountName(テキスト・編集可能)

 支払条件セクション
 支払条件: Payment(テキスト・編集可能)
 支払条件金額1: PaymentAmount1(数値・編集可能)
 支払条件金額2: PaymentAmount2(数値・編集可能)
 支払条件サイト1: PaymentTerm1(数値・編集可能)
 支払条件サイト2: PaymentTerm2(数値・編集可能)
 支払条件サイト3: PaymentTerm3(数値・編集可能)



セクション内はメーカーマスタからデータを参照致しますので、印刷時以外は「省略」に設定してあります。

なおサブフォームとして作成者・作成日・編集者・編集日を作成し、それぞれのフォームの末尾に追加しておきます。


最後にアクションとして以下を追加しておきます。

[戻る][保存][編集][削除][印刷]


本日はここまでとさせて頂きます。
次回はビューの作成を行って参ります。

2018年2月27日火曜日

チョー #初心者 向け、 #XPages 開発手順~仕上げ

みなさま、こんにちは!
先週金曜はノーツコンソーシアムFesta2018に参加させて頂きました。
各研究会の発表は非常に興味深く、今年も期待されるものばかりでした。
上記リンクで内容と一部資料ダウンロードも可能ですので、参加された方のみならず、当日参加できなかった皆様もぜひご覧頂き、今年の研究会への参加の検討資料にしてください。

個人的には昨年同様、大阪研究会とザ・ノーツ研究会に登録を予定しています。
また名古屋・九州の地方研については機会あればお邪魔させて頂ければとも考えております。

くわえてこちらは会員限定になりますが、ユーザー情報交換会も予定されております。
特に10月については、M社様にて開催との事で、今から楽しみでなりません。


それでは本題に戻ります。
先日より続けております本シリーズですが、一旦今回で完結致します。
最後までよろしくお願い致します。

さて早速ですが、前回まででふたつのXPageを作成し、ビューページから対象の文書のフォームページを開くことができるようになりました。
今回はxp_mainFormへ3つのボタン(戻る・編集・保存)とxp_byDateへ1つのボタン(新規作成)を組み込みたいと思います。

まずはxp_mainFormを開いてください。

早速ですが、前回作成した表の上にある改行部分にコアコントロールから[ボタン]を3つ配置します。

それぞれラベルを左から、「戻る」「編集」「保存」とします。


次にイベントを設定します。

まずは「戻る」ボタンです。

イベントタブに移動し、onclickが選択されていることを確認し、[アクションの追加]をクリックします。
以下のように、xp_byDateを開くように設定し[OK]します。


続いて「編集」ボタンです。
こちらも単純に「文書モードの変更」で「編集モード」とするだけになります。


最後に「保存」ボタンです。
こちらのみイベントはふたつ登録します。
まずは「文書の保存」です。


保存した後に、xp_byDateに移動させます。


アクショングループとして、以下のようになっていればOKです。


続いて選択項目であるClassとTagsを設定します。
いずれも値の[式項目の追加]にて@DbColumnを使用し、ビュー内の値を取得します。

まずはClassです。


@DbColumn("","byClass",1);

と入力し、[OK]します。
値は以下のように表示されます。


同様にTagsです。


@DbColumn("","byTags",1);

と入力し、OKします。

なおTagsは複数選択可能としますので、リストボックスのオプションをチェックしておきます。


次にxp_byDateに新規作成ボタンを追加します。
カスタムコントロール titleBarの下の改行へコアコントロールより[ボタン]をひとつ追加し、ラベルには「新規作成」としてください。

イベントタブに移動し、onclickのイベントとして以下を設定します。


こちらも単純にxp_mainFormを新規作成モードで開くというものです。

それではxp_mainFormをブラウザでプリビューし、各ボタンの動作を確認してください。

xp_byDate

[新規作成]

[分類]

[日付]

[タグ](複数選択)

以下デモデータで[保存]すると・・・

ビューに表示されました。

再度開いて、

[戻る]ボタンでxp_byDateに戻ることを確認してください。
続いて[編集]ボタンを押すと

当たり前ですが、編集画面になります。
「分類2」に変更して[保存]すると、

長くなりますが、最後にボタンの表示制御のみ続けさせてください。
今のままですと、フォームが編集モード時にも[編集]ボタンが、読み込みモード時にも[保存]ボタンが表示されてしまいますので、それぞれについて非表示の設定を行います。

まず[編集]ボタンを選択し、[可視]の右にある◇をクリックし、[値の計算...]をクリックします。


スクリプトエディタが表示されますので、左側の[参照]タブ内 currentDocument 以下の 
idEditable() をダブルクリックしてください。


式が登録されますので、先頭に式を否定する"!"を入力し、[OK]します。


逆に[保存]ボタンは否定せずに保存します。

ブラウザでプリビューしますと、

[読み込みモード時]

[編集モード時]

と、不必要なボタンの表示をなくすことができました。

いかがでしたか?

少し式は書きましたが、全くハードルは低いものではなかったでしょうか。
もちろん入力制御やその他機能を盛り込むべき部分もありますが、初心者でもXPagesを使い、WEBアプリケーションが作ることができる点をご理解頂けましたら、今回のシリーズとしては成功かと思います。

ぜひ一度、お試しください。

なお今回作成しましたアプリケーションはこちらよりダウンロード可能ですので、ご希望の方はご自由にお使いください。

※2018/03/14 ダウンロード先変更

2018年2月19日月曜日

チョー #初心者 向け、 #XPages 開発手順~メインフォーム

みなさま、こんにちは!
いよいよ今週ですね、ノーツコンソーシアム FESTA 2018
私は5分お時間を頂きましたので、大阪研究会の報告を行わせて頂きます。
その他、個人的には会員ユーザー向けの「ユーザー情報交換会」は非常に期待しています。
少し私も持ち合わせたものがありますので、理事の方と相談をと予定しています。

さて先日に続き、今回はフォームを表示するページを作りたいと思います。

早速ですが、新規XPageを作成してください。名称は以下としました。


ページが開きましたら、カスタムコントロール[titleBar]を先頭にドラッグ&ドロップします。
続いてその後ろに改行をふたつ入れておきます。

次にXPageにデータとして[mainForm]を定義します(デフォルトアクションは「文書を開く」にしてあります)。


データパレットにフィールドが表示されますので、すべて選択して先の2行目の改行の後ろにドラッグ&ドロップします。


データバインドコントロールが表示されますので、以下のような設定として[OK]してください。


※この選択ダイアログが開かない場合は、下記切り替えボタンをクリックし、[コントロールの選択]ダイアログボックス(使用可能)にしてください。



それでは一度、ブラウザでプリビューしてみましょう。


少し気になるところはありますが、無事ブラウザで表示させることができました。

それでは体裁は後で整えるとして、一旦前回のビューから今回のフォームを開く設定を行います。
XPageのxp_byDateを開いてください。

タイトルをクリックするとフォームページを開くようにしますので、ビューの列[Title]を選択し、表示タブ内[列の値をリンクとして表示する]にチェックし、開くモードは[読み取り専用]を選択します。


続いてイベントタブに移動し、onclick時のイベントを以下のように追加します。


以上でビューページからフォームベー時を開くことができるようになりましたので、一度ビューページをブラウザでプリビューしてみます。


タイトルがリンクになって表示されることが確認できます。
続いていずれかのタイトルをクリックすると、以下のようにxp_mainFormが表示されることを確認しておいてください。


xp_mainFormについては体裁が整えられておりませんので、先のxp_byDateに準じるようにデザイン等を修正してください。

取り急ぎ私の設定は以下のように致しました。



本日は以上とさせて頂きます。

次回はフォームの選択項目であるClass及びTagについて、ビューの値を参照する設定を行います。
またアプリケーションとして必要なボタンを配置し、完成させる予定ですので、引き続きよろしくお願い致します。