第467話:自動生成 PDF の「証明書発行日」を和暦表示する

2016年1月25日
※この記事には「改善編」があります

「日付は、和暦で!」

日本において「年の表記」は複雑だ。つまり、行政や学校では「2016年」とは言わない。あくまでも今年は「平成28年」なのだ。『住民票』であれ『戸籍謄本』であれ、ハタマタ『卒業証書』であれ、、、少しでも重みある書類には「和暦」が記入される。


しかし、現実、、、「ことしは平成28年!」と即答できる日本人は少ない。。。
とは言え、この「数十年に一度、元年(1年)にリセットするという仕組み」は、もう1400年以上も続いている。時の政府の一存で止めてしまえるものでもないのだ。。。(そして、現在の天皇が亡くなった日には、また新しい『元号』が発表されるハズだ)

以下のワークフローは『在職証明書』の発行フローだ。

上流工程で在職者の「氏名」や「生年月日」が入力され、フロー途中の[自動工程]で証明書 PDF が自動生成される仕組みとなっている。特筆すべきは「生年月日」や「証明書発行日」などの日付データが自動的に和暦に変換される点だ。たとえば『卒業証明書』や『保護者だより』のなどの発行フロー等にも転用できるだろう。

[証明書発行フロー]



「データを管理する視点」と「和暦で表記する視点」の相性は悪い。

この例でも、「生年月日」の入力にはカレンダー入力となるが、入力時点での表示は西暦で表示されている。もし、社員データベースなどと連携させるとしても、生年月日は西暦で格納されている。日本中の事務作業の現場には、西暦と和暦を変換するための「早見表」があり、人手で変換されているのが実情だ。しかし、非常に手間がかかる上に、ミスも多発する。


この[スクリプト工程]を配置すれば、和暦変換早見表が要らなくなる。

ちなみに、1989-01-07 というデータは「昭和64年1月7日」と表示され、1989-01-08 というデータは「平成元年1月8日」と表示される。つまり「改元」の日も自動判別される。(1月7日までは「昭和64年」だが、同じ年の1月8日以降は「平成元年」になる)。同様に「昭和」や「大正」も日付をもとに自動変換される。(「平成生まれ」が多くなってきた昨今においては「どうでも良い話」ではあるが…)
  • 1900-01-01: 明治33年1月1日
  • 1912-07-29: 明治45年7月29日
  • 1912-07-30: 大正元年7月30日
  • 1926-12-24: 大正15年12月24日
  • 1926-12-25: 昭和元年12月25日
  • 1989-01-07: 昭和64年1月7日
  • 1989-01-08: 平成元年1月8日

ところで、クラウド型ワークフロー『Questetra BPM Suite』においては、「1900年1月1日以前の日付データ」は日付型としては処理できない(システム制約)。つまり、「明治元年の頃」を指す西暦データは管理できないし、和暦への変換もできない。

もっとも、、、日本においては1872年(明治5年)まで「太陰太陽暦」(旧暦)が採用されていたため、すでに「西暦」(グレゴリオ暦)でのデータ管理が通用しない。たとえば、江戸城の無血開城直後に発布された「明治政府の基本方針」(政体書)は「慶応4年の閏4月21日」(うるう月)に発布されているが、それを「1868年6月11日」として管理する意味はない。

[証明書発行フロー:「1.証明内容の入力」画面]

▼スクリプト工程『和暦変換』の設定 (サーバサイド JavaScript)
//// == ワークフローデータの参照 / Retrieving ==
var birthDate = data.get( "4" );
var hireDate = data.get( "7" );
var issueDate = data.get( "12" );

//// == 演算 / Calculating ==
var locale = new java.util.Locale( "ja", "JP", "JP" );
// 言語コード、国コード、バリアントコード
// バリアント "JP" で明治以降の日付は元号表記になる
var japanFormat = new java.text.SimpleDateFormat( "GGGGyyyy年M月d日", locale );
// 「G」が1~3個の場合:「H」「S」のようにアルファベットで表示
// 「G」が4個の場合:「平成」「昭和」のように漢字で表示
// 「y」が4個の場合:「1年」を「元年」で表記
birthDateJa = japanFormat.format( birthDate.getTime() );
hireDateJa = japanFormat.format( hireDate.getTime() );
issueDateJa = japanFormat.format( issueDate.getTime() );

//// == ワークフローデータへの代入 / Updating ==
retVal.put( "5", birthDateJa );
retVal.put( "8", hireDateJa );
retVal.put( "13", issueDateJa );


<データ項目一覧画面>


[雛形ダウンロード (無料)]
<類似プロセス>
≪関連記事≫

[英文記事 (English Entry) ]

0 件のコメント :

コメントを投稿