定年年齢誕生日は現在「文字列(一行)」で
計算フォーム内の項目を下記計算式で結合しております。
計算_年&“/”&計算_月&“/”&計算_日
しかし、あくまでも文字列なのでリマインダー機能等を利用できません。
その為、「日付」に結合結果を表示されるようにプログラムを組みたいです。
プログラム知識に乏しい為、是非ともご教授を頂きたいです。
宜しくお願い致します。
定年年齢誕生日は現在「文字列(一行)」で
計算フォーム内の項目を下記計算式で結合しております。
計算_年&“/”&計算_月&“/”&計算_日
しかし、あくまでも文字列なのでリマインダー機能等を利用できません。
その為、「日付」に結合結果を表示されるようにプログラムを組みたいです。
プログラム知識に乏しい為、是非ともご教授を頂きたいです。
宜しくお願い致します。
テクバン廣瀬です。
ご回答する前に1点ご確認させてください。
定年年齢誕生日を「年/月/日」の文字列にしているのは、生年月日を分割→定年計算した値を結合しているためと推測しますが、そちらはこのスクリーンショットでは見えていない別の機能も考慮しこのような仕組みになっているのでしょうか。
単純に考えると、計算フィールドにて生年月日+60年を計算し表示すると解消できると思うのですが、いかがでしょうか。
以上になります。
よろしくお願いいたします。
テクバン廣瀬様
コメントを頂きましてありがとうございます。
こちらのフォームに組み込んでいる詳細な情報と、意図に関してご説明させて頂きたいと思います。
和暦(プルダウン)+和暦年(数値) ⇒ 生年月日 年(数値)
和暦月(数値) ⇒ 生年月日 月(数値)
和暦日(数値) ⇒ 生年月日 日(数値)
こちらは記事を参考にJavascriptを用いて算出されるように設定をしております。
「生年月日」に関しては一覧にした際に見やすくする為に、年・月・日を「文字列(一行)」の自動計算を用いて表しております。
「日付」から60年後で計算をする為には”うるう年”を考慮する必要性がある為、分割をした「生年月日 年」から計算をすると簡単に設定を行えると考え、
定年年齢 年(計算(式:生年月日 年 + 60))
で設定をしております。
今回定年年齢の表示を「日付」形式にこだわる理由としては、リマインダー機能を利用したい為です。
是非ともお力添え頂けたらと思います。宜しくお願い致します。
テクバン廣瀬です。このような形でよろしいですか。
(前提)「和暦」「和暦年」「和暦月」「和暦日」を入力すると、他の項目が自動的に反映するようになっています。
前提が違う場合、ご指摘ください。
(function ($) {
'use strict';
let changeevents = [
'app.record.create.change.和暦',
'app.record.edit.change.和暦',
'app.record.create.change.和暦年',
'app.record.edit.change.和暦年',
'app.record.create.change.和暦月',
'app.record.edit.change.和暦月',
'app.record.create.change.和暦日',
'app.record.edit.change.和暦日'
];
/ **************************************************** */
/* 値変更イベント
/ **************************************************** */
kintone.events.on(changeevents, function (event) {
// 和暦、和暦年、和暦月、和暦日すべて値が入っている場合に実行
if (event.record.和暦.value !== undefined && event.record.和暦年.value !== undefined &&
event.record.和暦月.value !== undefined && event.record.和暦日.value !== undefined) {
let teinenYYYY;
let teinenMM;
let teinenDD;
// 年の計算
if (event.record.和暦.value === '昭和') {
// 西暦の生年月日(年)を計算
event.record.西暦年.value = parseInt(event.record.和暦年.value, 10) + 1925;
// 定年時の年を計算
teinenYYYY = parseInt(event.record.和暦年.value, 10) + 1925 + 60;
} else if (event.record.和暦.value === '平成') {
event.record.西暦年.value = parseInt(event.record.和暦年.value, 10) + 1988;
teinenYYYY = parseInt(event.record.和暦年.value, 10) + 1988 + 60;
} else if (event.record.和暦.value === '令和') {
event.record.西暦年.value = parseInt(event.record.和暦年.value, 10) + 2018;
teinenYYYY = parseInt(event.record.和暦年.value, 10) + 2018 + 60;
}
event.record.定年年.value = teinenYYYY;
// 月の計算
event.record.西暦月.value = event.record.和暦月.value;
// 定年時の月を計算(0埋め含む)
if (String(event.record.和暦月.value).length === 1) {
teinenMM = '0' + event.record.和暦月.value;
} else {
teinenMM = event.record.和暦月.value;
}
event.record.定年月.value = teinenMM;
// 日の計算
event.record.西暦日.value = event.record.和暦日.value;
// 定年時の日を計算(0埋め含む)
if (String(event.record.和暦日.value).length === 1) {
teinenDD = '0' + event.record.和暦日.value;
} else {
teinenDD = event.record.和暦日.value;
}
event.record.定年日.value = teinenDD;
// 定年時の年月日を結合
event.record.日付.value = teinenYYYY + '-' + teinenMM + '-' + teinenDD;
}
return event;
});
})();
テクバン廣瀬様
ありがとうございます。前提の間違いありません。
こちらのプログラムで正常に動作する事を確認できました。
貴重なお時間を割いて頂き、コードをお書き頂きまして、ありがとうございました。
プラス1点ご教授いただけると幸いです。
雇用形態(プルダウン:正社員、非正規社員)を用いて、
正社員を選択した場合は定年年齢65歳、
非正規社員を選択した場合は定年年齢60歳、
と分岐がされるような形も実現は出来る物でしょうか。
テクバン廣瀬です。
上記要望も可能と思われます。
それを含めたソースコードを以下載せます。
雇用形態のフィールドコードはフィールド名と同じ、未選択時は60歳での計算としています。
また、定年生年月日の計算フィールドもIFを使えば計算可能と思われます。
(function ($) {
'use strict';
let changeevents = [
'app.record.create.change.和暦',
'app.record.edit.change.和暦',
'app.record.create.change.和暦年',
'app.record.edit.change.和暦年',
'app.record.create.change.和暦月',
'app.record.edit.change.和暦月',
'app.record.create.change.和暦日',
'app.record.edit.change.和暦日',
'app.record.create.change.雇用形態',
'app.record.edit.change.雇用形態'
];
/ **************************************************** */
/* 値変更イベント
/ **************************************************** */
kintone.events.on(changeevents, function (event) {
// 和暦、和暦年、和暦月、和暦日すべて値が入っている場合に実行
if (event.record.和暦.value !== undefined && event.record.和暦年.value !== undefined &&
event.record.和暦月.value !== undefined && event.record.和暦日.value !== undefined) {
let teinenYYYY;
let teinenMM;
let teinenDD;
let teinenTerm;
if (event.record.雇用形態.value === '正社員') {
teinenTerm = 65;
} else {
teinenTerm = 60;
}
// 年の計算
if (event.record.和暦.value === '昭和') {
// 西暦の生年月日(年)を計算
event.record.西暦年.value = parseInt(event.record.和暦年.value, 10) + 1925;
// 定年時の年を計算
teinenYYYY = parseInt(event.record.和暦年.value, 10) + 1925 + parseInt(teinenTerm, 10);
} else if (event.record.和暦.value === '平成') {
event.record.西暦年.value = parseInt(event.record.和暦年.value, 10) + 1988;
teinenYYYY = parseInt(event.record.和暦年.value, 10) + 1988 + parseInt(teinenTerm, 10);
} else if (event.record.和暦.value === '令和') {
event.record.西暦年.value = parseInt(event.record.和暦年.value, 10) + 2018;
teinenYYYY = parseInt(event.record.和暦年.value, 10) + 2018 + parseInt(teinenTerm, 10);
}
event.record.定年年.value = teinenYYYY;
// 月の計算
event.record.西暦月.value = event.record.和暦月.value;
// 定年時の月を計算(0埋め含む)
if (String(event.record.和暦月.value).length === 1) {
teinenMM = '0' + event.record.和暦月.value;
} else {
teinenMM = event.record.和暦月.value;
}
event.record.定年月.value = teinenMM;
// 日の計算
event.record.西暦日.value = event.record.和暦日.value;
// 定年時の日を計算(0埋め含む)
if (String(event.record.和暦日.value).length === 1) {
teinenDD = '0' + event.record.和暦日.value;
} else {
teinenDD = event.record.和暦日.value;
}
event.record.定年日.value = teinenDD;
// 定年時の年月日を結合
event.record.日付.value = teinenYYYY + '-' + teinenMM + '-' + teinenDD;
}
return event;
});
})();
kintonehikeテクバン廣瀬様
ご返事が大変遅くなり申し訳ございませんでした。ご返答、ご教授を頂きましたありがとうございます。
廣瀬様にご教授頂いたシステムを含め上長と今後の運用に関してとフォームの見直しを行いました。
その結果、
・前提として用いるのは西暦年・月・日とする事。
・あくまでも和暦年は補助的な役割として、和暦年を入力する事で西暦年に自動変換される機能を付けたい。(入力をしなくても他の動作に支障が無い形を希望)
・西暦生年月日は文字列(一行)の通常計算機能を用いて表示をする。
・定年年=西暦年+60年、定年月=西暦年、定年日=西暦日としたい。
・定年誕生日(日付)=定年年+定年月+定年日としたい。
以上5点の条件を網羅できるコードを探しております。
勝手ばかり申し上げており大変恐縮ですが、これら条件を網羅する事は可能でしょうか。
何卒宜しくお願い致します。
テクバン廣瀬です。
ご回答が遅くなり大変申し訳ございません。
実現できるとは思います。
・和暦、もしくは和暦年変更時に西暦年へ計算した値を反映
・定年年、月、日を結合して定年年齢誕生日の計算
上記2点をカスタマイズで実施すれば解決できそうです。
コードについては、(こちらの諸事情により)お待ちいただければ私の方で作成できます。
大変申し訳ございません。
テクバン廣瀬様
私の知識不足が故に度重なるお願い事となり、申し訳ございません。
お時間は構いません。お言葉に甘えさせて頂いても宜しいでしょうか。
是非とも宜しくお願い申し上げます。
テクバン廣瀬です。1点ご確認です。
こちらのコメントで添付している画像内の「自動計算」になっている項目ですが、
生年月日 = 西暦年 & “/” 西暦月 & “/” & 西暦日
定年年 = 西暦年
定年月 = 西暦月
定年日 = 西暦日
の認識でよろしいでしょうか。
テクバン廣瀬様
仰る通りでございます。
定年年=西暦年の箇所で西暦年+60年を表示したい為。
もし現在の計算式がコードと干渉するようでしたら、
用いている「計算」フォームから「数値」フォーム等へ変更する事も検討しております。
宜しくお願い致します。
テクバン廣瀬です。
こちらでいかがでしょうか。
後程メンテナンスしやすいようにコメントも書いています。
この機会にソースコードに触れることも挑戦していただけると幸いです。
ご確認ください。
(function ($) {
'use strict';
let changeevents1 = [
'app.record.create.change.和暦',
'app.record.edit.change.和暦',
'app.record.create.change.和暦年',
'app.record.edit.change.和暦年',
];
let changeevents2 = [
'app.record.create.change.西暦年',
'app.record.edit.change.西暦年',
'app.record.create.change.西暦月',
'app.record.edit.change.西暦月',
'app.record.create.change.西暦日',
'app.record.edit.change.西暦日'
];
/ **************************************************** */
/* 値変更イベント1
/ **************************************************** */
kintone.events.on(changeevents1, function (event) {
// 和暦、和暦年すべて値が入っている場合に実行
if (event.record.和暦.value !== undefined && event.record.和暦年.value !== undefined) {
// 西暦の生年月日(年)を計算し、西暦年に設定
if (event.record.和暦.value === '昭和') {
event.record.西暦年.value = parseInt(event.record.和暦年.value, 10) + 1925;
} else if (event.record.和暦.value === '平成') {
event.record.西暦年.value = parseInt(event.record.和暦年.value, 10) + 1988;
} else if (event.record.和暦.value === '令和') {
event.record.西暦年.value = parseInt(event.record.和暦年.value, 10) + 2018;
}
}
return event;
});
/ **************************************************** */
/* 値変更イベント2
/ **************************************************** */
kintone.events.on(changeevents2, function (event) {
// 西暦年、西暦月、西暦日すべて値が入っている場合に実行
if (event.record.西暦年.value !== undefined &&
event.record.西暦月.value !== undefined && event.record.西暦日.value !== undefined) {
let teinenYYYY;
let teinenMM;
let teinenDD;
let teinenTerm = 60;
// 年の計算
teinenYYYY = parseInt(event.record.西暦年.value, 10) + parseInt(teinenTerm, 10);
// 月の計算
// 定年時の月を計算(0埋め含む)
if (String(event.record.西暦月.value).length === 1) {
teinenMM = '0' + event.record.西暦月.value;
} else {
teinenMM = event.record.西暦月.value;
}
// 日の計算
// 定年時の日を計算(0埋め含む)
if (String(event.record.西暦日.value).length === 1) {
teinenDD = '0' + event.record.西暦日.value;
} else {
teinenDD = event.record.西暦日.value;
}
// 定年時の年月日を結合し、日付フィールドへ設定
event.record.日付.value = teinenYYYY + '-' + teinenMM + '-' + teinenDD;
}
return event;
});
})();
テクバン廣瀬様
こちらのソースコードで正常動作を確認致しました。
長期に渡り親身にご教授、お力添えを頂きました事、心より感謝申し上げます。
私自身も廣瀬様の様に”理想”を”実現”に変えられるように勉学に励んでいきたいと思います。
またご機会御座いましたらご指導ご鞭撻を頂けたらと思います。この度は大変お世話になりました。
N.Takayama
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。