JavaScriptとACCESSでちょこっとやってみたその6
さてDailyReportView.jsです。ここは、テーブルの動的変更部分で
結構ベタベタなことしてます。テーブル表示の部分をシンプルにしたいのと。
同一の案件ならセル結合させたいなぁと思っていますが、
そこまでスキルがついて来なかった。EXCELのセル結合みたいな感じに
したいと思いましたが断念
参考にさせてもらったサイト、ありがとうございます。
http://www.abe-tatsuya.com/web_prog/javascript/add_table_rows.php
http://www.yscjp.com/doc/table1.html
DailyReportView.js
結構ベタベタなことしてます。テーブル表示の部分をシンプルにしたいのと。
同一の案件ならセル結合させたいなぁと思っていますが、
そこまでスキルがついて来なかった。EXCELのセル結合みたいな感じに
したいと思いましたが断念
参考にさせてもらったサイト、ありがとうございます。
http://www.abe-tatsuya.com/web_prog/javascript/add_table_rows.php
http://www.yscjp.com/doc/table1.html
DailyReportView.js
var EmpCd=location.search.substring(1); //ログイン画面から担当者CD取得 onload = init; onunload = dbClose; //* //* 初期設定をする関数 //* function init() { //実績日表示 txtReportday = document.getElementById("txtReportday"); var txtdate = new DateFormat("yyyy/MM/dd"); txtdate = txtdate.format(new Date()); txtReportday.value = txtdate; //計画日のテキストボックス制御 txtReportday.onblur = function () { this.style.backgroundColor = "#ffffff"; } document.getElementById("btnDaySearch").onclick = function() { txtDateUpdate(txtReportday); } //データベース接続 dbConnect(); // 担当者をセットして画面の初期表示 EmpCdisplay(EmpCd); DisPlayChecker(); } //* //* 終了処理 //* function OperateEnd() { dbClose(); (window.open('', '_self').opener = window).close(); } //* //* 実績日更新時の処理 //* function txtDateUpdate(obj) { DisPlayChecker(); obj.style.backgroundColor = "#ffffff"; } //* //* 実績日にデータが存在するかを判別して表示する関数 //* function DisPlayChecker() { //実績日チェック var Reportday = document.getElementById('txtReportday').value; var EmpID = EmpCd; if (ChckDate(Reportday)) { } else { return; } var mySql = " SELECT COUNT(WorkplanID) AS WIDCount" + " FROM t_workplan" + " WHERE (PlanDate='" + Reportday + "') AND (Empid='" + EmpID + "') AND (DeleteFlg = '0' );"; var recordSet = database.Execute(mySql); var wPlanCount = recordSet(0); var mySql = " SELECT COUNT(ReportID) AS RIDCount " + " FROM t_dailyreport " + " WHERE (Reportday>='" + Reportday + "') AND (Empid='" + EmpID + "') AND (DeleteFlg = '0' );"; var recordSet = database.Execute(mySql); var ReportCount = recordSet(0); //登録がなければ画面をクリアする if (ReportCount == 0) { //0件の場合は画面をクリアする。 TableClear(); } //登録があればデータを表示する。 if (ReportCount != 0) { TableClear(); dataDisplay(); } recordSet.Close(); recordSet = null; } //* //* データを表示する関数 //* function dataDisplay() { try { //作業計画登録なし var cWork = "-"; //日報部分 var Reportday = document.getElementById('txtReportday').value; ChckDate(Reportday); var EmpId = EmpCd; var mySql = " SELECT ReportID,WorkplanID,AdministrationID,ActionplanID,MatterID,TaskID,Reportday,Dailymemo,Workinghours,Reference " + " FROM t_dailyreport " + " WHERE (Reportday='" + Reportday + "') AND (Empid='" + EmpId + "') AND (DeleteFlg = '0' ) ORDER BY AdministrationID,ActionplanID,MatterID ;"; var recordSet = database.Execute(mySql); //alert(mySql); //console.log(mySql); var counter = 1; while (!recordSet.EOF) { //テーブル設定用 var table1 = document.getElementById("table1"); var row1 = table1.insertRow(counter); var cell1 = row1.insertCell(0); var cell2 = row1.insertCell(1); var cell3 = row1.insertCell(2); var cell4 = row1.insertCell(3); var cell5 = row1.insertCell(4); // class の付与は UserAgent によって // 挙動が違うっぽいので念のため両方の方法で cell1.setAttribute("class", "ReportNo"); cell2.setAttribute("class", "ActionPlan"); cell3.setAttribute("class", "workPlan"); cell4.setAttribute("class", "DailyReport"); cell5.setAttribute("class", "Nextwork"); cell1.className = 'ReportNo'; cell2.className = 'ActionPlan'; cell3.className = 'workPlan'; cell4.className = 'DailyReport'; cell5.className = 'Nextwork'; //■NOと今日実施した作業表示: var ReportId = recordSet(0); var workPlanID = recordSet(1); var Mcd = Number(recordSet(2)) + '-' + Number(recordSet(3)) + '-' + Number(recordSet(4)); var MatterCd = Number(recordSet(2))+recordSet(3)+recordSet(4); var Tcd = recordSet(5); var ReportMemo = recordSet(7); var TaskHour = recordSet(8); var Reference = recordSet(9); var tD = Date.parse(recordSet(6)); var wkTime = new Date(tD); var bodydate = new DateFormat("MM/dd"); bodydate = bodydate.format(wkTime); //案件が一致する場合はNO部分のセルを空白に if (Mcd == beforeMcd){ var HTML1 = '<td rowspan = "2" ></td>'; }else{ var HTML1 = '<span id="ReportNo' + counter + '">'+ MatterCd + '</span>'; } cell1.innerHTML = HTML1; var HTML4 = '<span id ="DailyReport' + counter + '">'+ReportMemo + '</span>'; //作業名取得 myTaskSql = "SELECT m_Task.TaskID, m_Task.taskName " + " FROM m_Task" + " WHERE (((m_Task.TaskID)=" + Tcd + ") AND ((m_Task.DeleteFlg) Is Null));" TrecordSet = database.Execute(myTaskSql); var TaskName = TrecordSet(1); var RepHtml = '<span id="DailyReport' + counter + '">' + bodydate + " " + TaskName + ":" + '</span>' + HTML4; TrecordSet.Close(); TrecordSet = null; cell4.innerHTML = RepHtml; //■作業予定取得 var WPMemo = ""; if (workPlanID == cWork || workPlanID == null || workPlanID == undefined) { WPMemo = cWork; var HTML3 = '<span id="workPlan' + counter + '">' + WPMemo + '</span>'; } else { mySubSql = " SELECT t_dailyreport.ReportID, t_workplan.WorkplanID, t_workplan.AdministrationID, t_workplan.ActionplanID, t_workplan.MatterID, t_workplan.TaskID,Planmemo " + " FROM t_dailyreport INNER JOIN t_workplan ON (t_workplan.PlanDate = t_dailyreport.Reportday) " + " AND (t_dailyreport.Empid = t_workplan.Empid) AND (t_dailyreport.WorkplanID = t_workplan.WorkplanID) " + " WHERE (((t_dailyreport.Empid)='" + EmpId + "') AND ((t_dailyreport.Reportday)='" + Reportday + "') AND ((t_dailyreport.DeleteFlg)='0') AND ((t_workplan.DeleteFlg)='0')) " + "AND ((t_workplan.WorkplanID)='" + workPlanID + "');"; SubrecordSet = database.Execute(mySubSql); //alert(mySubSql); //console.log(mySubSql); var WPMemo = SubrecordSet(6); var HTML3 = '<span id="workPlan' + counter + '">' + WPMemo + '</span>'; SubrecordSet.Close(); SubrecordSet = null; } cell3.innerHTML = HTML3; //■案件名取得(案件ID分割後に案件名表示) var separator = "-"; var allayworkCd = Mcd.split(separator); var AdministrationCd = allayworkCd[0]; var ActionPlanCd = allayworkCd[1]; var MatterCd = allayworkCd[2]; myMatterSql = "SELECT m_Matter.AdministrationID, m_Matter.ActionplanID, m_Matter.MatterID, m_Matter.MatterName " + " FROM m_Matter " + "WHERE (((m_Matter.AdministrationID)='" + AdministrationCd + "') " + " AND ((m_Matter.ActionplanID)='" + ActionPlanCd + "')" + " AND ((m_Matter.MatterID)='" + MatterCd + "')" + " AND ((m_Matter.DeleteFlg) Is Null));" MrecordSet = database.Execute(myMatterSql); //alert(myMatterSql); //console.log(myMatterSql); var MatterName = MrecordSet(3); //案件が一致する場合は計画部分のセルを空白 if (Mcd == beforeMcd) { var HTML2 = '<td rowspan = "2" ></td>'; } else { var HTML2 = '<span id="ActionPlan' + counter + '">' + MatterName + '</span>'; } cell2.innerHTML = HTML2; MrecordSet.Close(); MrecordSet = null; //案件ID比較用 var beforeMcd = Mcd; //次レコード recordSet.MoveNext(); counter++; } recordSet.Close(); recordSet = null; } catch (error) { alert(error.number + "\n" + error.description); } } //* //* 登録されている担当者を表示する関数 //* function EmpCdisplay(loginId) { var mySql = "SELECT * FROM m_Emp WHERE ( DeleteFlg Is Null) ORDER BY EmpID"; var recordSet = database.Execute(mySql); //console.log(mySql); document.getElementById("EmpID").innerHTML = ""; var tempHtml = "担当者ID: <select name=\"selectEmpId\" id=\"selectEmpId\">\n"; tempHtml = tempHtml + "\t<option value=\"0\">選択してください。</option>\n"; while (!recordSet.EOF) { var optionval = recordSet(0); //オプション値指定がある場合はそのオプションを選択状態にする。 if (optionval == loginId) { tempHtml = tempHtml + '\t<option value="' + optionval + '" selected >' + recordSet(0) + ":" + recordSet(1) + '<\/option>\n'; } else { tempHtml = tempHtml + '\t<option value="' + optionval + '"\">' + recordSet(0) + ":" + recordSet(1) + '<\/option>\n'; } recordSet.MoveNext(); } tempHtml = tempHtml + "</select>"; // console.log(tempHtml); document.getElementById("EmpID").innerHTML = tempHtml; selEmpid = document.getElementById("selectEmpId"); selEmpid.onchange = function () { selectEmpIdCdchange(this); } recordSet.Close(); recordSet = null; } //* //* 担当者選択時の動作 //* function selectEmpIdCdchange(obj) { var workCd = obj.value; if (obj.selectedIndex == 0) { var selEmp = document.getElementById("EmpIDdisPlay"); alert("担当者を選択してください。"); selEmp.focus(); return; } else { EmpCd = workCd; } } //* //* 実績日チェック //* function ChckDate(Reportday) { if (Reportday) { } else { txtReportday = document.getElementById("txtReportday"); alert("実績日は必須です。"); txtReportday.focus(); return false; } return true; } //* //* 担当者コードチェック //* function ChckEmp(Employ) { if (Employ) { } else { var selEmp = document.getElementById('selectEmpId'); alert("担当者を選択してください。"); selEmp.focus(); return false; } return true; } //* //* 案件の文字列分割用 //* function StringSeparator(objString) { var sobj = objString; var separator = "-"; var allayworkCd = sobj.split(separator); var robj = allayworkCd[1]; return robj; } //* //* テーブルの明細部分を削除する。 //* function TableClear() { var targetTable = document.getElementById('table1'); var allCount = targetTable.rows.length; var headerCount = 1; var footerCount = 0; if (targetTable.tHead) { headerCount = targetTable.tHead.rows.length; } for (var i = headerCount; i < allCount; i++) { targetTable.deleteRow(headerCount); } }
コメント