ドリンクバーゲン会場

システム危うし!2010年10月01日 10時17分50秒

先日、指導要録のレイアウトが改正されることになりました。
それ以外にも、教科が変更になるという話も聞いています。

それに伴って教務システムをそっくり入れ替える可能性が急に高まってきました。
もともと、今稼働しているシステムは古く、そのためにサポートするシステムを構築することになったのですが、もろもろの変更が2年ほどしか猶予がないこともあり、私一人で作成していては間に合わない可能性が高く、新システムの購入というのが現実味を帯びてきた次第です。

私が学校に来た当初から、システム移行の話は出ていたのですが、いくつか業者をあたったところ、1000万~1500万円くらいの金額が必要で、今までは対応できなかったのですが・・・!

金額が大きく、どうなるかはわからないので、現段階では作成を続けていきますが、新指導要録を実現するには、データベースにも変更を加える必要があり(項目の追加)、それ以外にもVistaから変更になったフォントなどいくつか抱えている問題を新しいシステムですべてクリアする必要があるので、最終的にはシステムを購入することになるのではないかと思っています。

でも、作っているものが無駄になるのはちょっと残念です!

学籍簿の作成はやっぱり大変!2010年10月06日 09時19分52秒

学籍簿の作成はやっぱり大変!

ソフトウェア開発
VisualStudio
雑談


システムの購入の話が出てきてはいますが、今のところまだ購入に向けた動きがあるわけではないし、今のシステムではやはり不便なので開発は継続中です。

指導要録は4枚の印刷物で構成されていて、生徒の情報、修得単位数、所見、学籍の記録となっています。

現状では、生徒の情報、修得単位数、所見の3つはある程度できています。
しかし、最後の学籍の記録で今は止まっている状況です。

学籍の記録では、科目ごとの評定と単位を学年ごとに表示させることになります。

        1年          2年         3年
     評定  単位     評定  単位    評定  単位
国語   3    4       4    4      3    6
数学   4    3       3    5      2    3

こんな感じで表示させるのですが、これがうまくいきません。
最初に考えたのは、サブレポートでクロス集計の画面をつくる方法ですが、
評定と、単位を項目として指定した場合、評定と単位が上下に並んでしまい、横に表示することができませんでした。
方法があるのかもしれませんが、現状では確認できていません。

次に評定のみでサブレポートを作成し、とりあえずできるかどうか試してみたのですが、
クロス集計でできた表では行間が広く、レイアウトに合わせて表示させることができませんでした。

学籍の記録では、科目を1列で表示するために、フォントも小さく、高さもかなり狭いレイアウトになり、
通常のサブレポートであれば、表示できる場合でも、クロス集計を行ってしまうと行間がどうしても開いてしまい、
レイアウト通りにはなりませんでした。

CrystalReportでのクロス集計が無理だったら、データベース側で行えばよいのではないかと思い、
SQLServer側でクロス集計を行う方法を調べてみたら、なんかややこしいようです。

ACCESSのようにはできないようで、現在調査中です。
T-SQLとか使わないといけないようです。
この辺はあまりよくわかってないので、調べてみます。

HYBRID W-ZERO3の通話がやっぱりおかしい2010年10月09日 12時08分51秒

HYBRID W-ZERO3で通話の際、トランシーバーのような雑音がひどく話ができなかったり、無音でまったく話ができない状態に時々なります。

アンテナの電源を切っても改善しないのですが、W-SIMを一度抜くと状態が回復します。
一度抜けば2~3日は大丈夫なのですが、また雑音がひどくなるということを繰り返しています。
期間はまちまちで1週間くらい大丈夫な時もあるのですが!

前々から修理に出したほうが良いのかなと思っていたのですがまだ出せていません。

これって私だけなんでしょうか?

なんとか解決!?2010年10月19日 13時03分50秒

クロス集計で止まっていたのですが、T-SQLを使わずに
表示が出せるようになりました。

正直このようなやり方が良いのかどうか、不安な面もあるのですが、
私の知識ではこれがベターだと思っています。

問題点をおさらいすると、科目ごとに評定と単位を表示するのですが、
指導要録のレイアウトに合わせるためには、教科ごとにデータを作らなければいけません。

クロス集計で学年別にデータを作成すると表にはできるのですが、
問題が出てきます。
例えば、教科によっては2年生の時にしか受けない科目や
1年と3年には受けるが2年の時には受けない科目が出てきます。

それでも、クロス集計を全科目で行えば各学年にそれぞれ1科目は入っているので、
なにも問題はないのですが、科目毎にクロス集計を行う場合には問題が発生します。

例を挙げると、家庭科の授業は2年生の時にしか行っていません。
レイアウトでは、左から1年、2年、3年と順番に表示させるのですが、
家庭科の授業では1年のところに2年の評定と単位が入ってしまいます。

最初はT-SQLの使用も考えていたのですが、ダミーのデータがあれば
いけるはずなので、新規に登録することなくダミーのデータをもぐりこませる
方法はないか考えました。

その結果、在籍データと科目データを使ってダミーのデータを作ることができるようになりました。
在籍データには、学年毎の在籍情報が登録されています。
3年生であれば、1年生から3年生までの3件のデータがあるのですが、
その情報と科目データの情報を組み合わせます。

*****************************************************
SELECT dbo.在籍.年度, dbo.科目.科目コード, dbo.科目.科目名, dbo.在籍.クラス番号, dbo.在籍.学籍番号, 0 AS 平均値, 0 AS 単位, 0 AS 評定, ' ' AS 記録,
LEFT(dbo.科目.科目コード, 2) AS グループ
FROM dbo.履歴 CROSS JOIN
dbo.科目
*****************************************************

こんな感じでビューを作成しました。
ダミーのデータなので、評定や単位は0が入っています。
項目は評定テーブルに合わせているので、
評定テーブルとUNIONクエリーを使い、
合わせたものでサブレポートを作成します。
そうすると、先ほどの例でいえば、家庭科にも1年生と3年生のダミーデータが
存在するので、2年生のところに表示されるようになりました。

そして評定と単位を横に並べて表示する方法も解決しました。
評定と単位を一つのデータにしてしまうという方法をとりました。
SQLServerでビューを作成し、評定と単位をまとめ間にスペースを入れて一つのデータにしました。

*****************************************************
CAST(dbo.評定.評定 AS varchar(12)) + '   ' + CAST(dbo.評定.単位 AS varchar(12)) AS 記録,
*****************************************************
上記のような指定でデータを一つにまとめています。

これでレイアウトに合わせて印刷ができるようになったので、
前に進めるようになりました。

レポートのログオンを自動化する。2010年10月21日 15時20分57秒

学籍のレイアウト通りにデータを出力することは
ほぼできました。表示位置の微調整などは必要なのですが、
それはまた行うとして、実装にむけての問題があと2つ残っています。

一つは、CrystalReportで学籍情報を表示する際、パスワードを入力しないと
接続できません。
調べたところ、セキュリティ上の問題から、パスワードは保存できないように
なっているそうです。
でも実運用ではパスワードの入力をその都度行うわけにはいかないので、
パスワードの入力をしなくても動くようにする必要があります。

もう一つは、データの抽出です。
生徒単位の抽出やクラス単位での抽出を行う必要があるのですが、
Web画面からどのように設定するのかを調べる必要があります。

以上の2つを調べる必要があるのですが、まずは一つ目のパスワードの設定を
調べてみました。

相変わらず情報が少なめで苦労したのですが、CrystalReportのサンプルを参考に
解決しました。
もっとも参考というよりも丸ごとコピーなのですが・・・(*^_^*)

学籍印刷用のファイルは、「gakuseki1.aspx」と「gakuseki1.aspx.vb」に
分かれていて、コードは「gakuseki1.aspx.vb」です。

以下はコードの中身です。
*********************************************
  Imports CrystalDecisions.Shared
  Imports CrystalDecisions.CrystalReports.Engine
  Imports CrystalDecisions.Web

  Partial Class _Default
  Inherits System.Web.UI.Page
<=== 追加した内容
   Private Sub ConfigureCrystalReports()
   Dim reportPath As String = Server.MapPath("レポートファイル")
  CrystalReportViewer1.ReportSource = reportPath
   Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
   SetDBLogonForReport(myConnectionInfo)
  myConnectionInfo.ServerName = "サーバー名"
   myConnectionInfo.UserID = "ユーザー名"
   myConnectionInfo.Password = "パスワード"
   End Sub

   Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
   ConfigureCrystalReports()
   End Sub

  Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo)
  Dim myTableLogOnInfos As TableLogOnInfos = CrystalReportViewer1.LogOnInfo
   For Each myTableLogOnInfo As TableLogOnInfo In myTableLogOnInfos
   myTableLogOnInfo.ConnectionInfo = myConnectionInfo
  Next
   End Sub
ここまで  ===>
  End Class
*********************************************

<=== ===>ではさまれている部分が追加したところです。
サンプルをコピーして必要なところを変更しています。

変更箇所は上から2行目
Dim reportPath As String = Server.MapPath("レポートファイル")
カッコ内です。レポートファイルを入力するので、作ったレポートファイルの名前に変更します。
サンプルでは、「NorthwindCustomers.rpt」になっているのですが、作成したファイル名にします。

その下、ビューワーも合わせる必要があります。
CrystalReportViewer1.ReportSource = reportPath
「gakuseki1.aspx」ファイルを確認し、「CrystalReportViewer1」の部分を変更します。
「SetDBLogonForReport」のところも同じように変更します。

あとは、サーバー名、ユーザー名、パスワードを自分の環境に合わせて変更します。

これで実行させれば、レポートがダイレクトに表示されました。