- ベストアンサー
ファイルメーカーPro7でカレンダーを作成したい。
とても急いでいます。 なるべく簡単な方法でお願いいたします。 カレンダーのレイアウトには表示西暦年と表示月、次月へボタンと前月へボタンを配置して、レイアウトが開かれた時は今月を、ボタンで任意の月のカレンダーが表示できるものが希望です。 テーブル構造とレイアウト表示時・ボタンに設定するスプリクトをご指導下さい。 宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
カレンダーに書き込みは出来なくて良いんだよね? テーブル1:<<カレンダー表示用>> フィールド カレンダー_day 日付 カレンダー_Month 数字・グローバル カレンダー_Year 数字・グローバル カレンダー_Day増加 計算 =If(DayNameJ ( カレンダー_Day ) = "日曜日" ; TextColor ( Day( カレンダー_Day) ; RGB ( 255 ; 0 ; 0 )) ; Day( カレンダー_Day ) ) 【日曜を赤く表示する為のもの、不要なら作らなくても可】 カレンダー_初日番号 計算・グローバル =DayOfWeek ( Date ( カレンダー_Month ; 1 ; カレンダー_Year ) ) カレンダー_設定日 日付・グローバル テーブル2:<<カレンダー>> フィールド 表示日付 日付・グローバル 表示年 計算・グローバル =Year(表示日付) 表示月 計算・グローバル =Month(表示日付) リレーション: カレンダー_Year = 表示年 and カレンダー_Month = 表示月 カレンダー作成スクリプト: ・まず全レコード削除 ・37レコード新規作成 ・カレンダー設定日に今日の日付を入れる ・カレンダー_Yearとカレンダー_Monthにカレンダー設定日から計算で年と月を入力 ・レコード移動(計算で指定)でカレンダー_初日番号を指定 ・カレンダー_Dayに計算代入 Date(カレンダー表示用::カレンダー_Month ; 1 ; カレンダー表示用::カレンダー_Year) ・カレンダー増加に計算代入 カレンダー表示用::カレンダー_Day + 1 ・次のレコードへ移動して、以下Loop ----Loop ・カレンダー_dayにカレンダー_Day増加の値を代入 ・カレンダー増加に計算代入 カレンダー表示用::カレンダー_Day + 1 ----ExitLoopIf =カレンダー表示用::カレンダー_Day = Date(カレンダー表示用::カレンダー_Month + 1 ; 0 ;カレンダー表示用::カレンダー_Year)【月末来たら終わる】 ・次のレコードへ移動 ----EndLoop これでカレンダーができる。 あとはカレンダーテーブルのレイアウトにカレンダー表示用にリレーションしたポータルを横に7個、5行+6表目2個の合計37行つくって、各ポータルにカレンダー_Day表示(作ってないときはカレンダー_Day)フィールドをいれて、カレンダーテーブルのスクリプトで、表示日付に今日の日付を入れるスクリプトを作って今月表示。 あとはカレンダー設定日と表示日付に一月づつ足すスクリプトと引くスクリプト作って貼り付けるだけ。 またわからんかったら聞いて。
その他の回答 (4)
- a2c_2005
- ベストアンサー率49% (29/59)
日付にボタン持たせるなら、カレンダー表示用の関連レコードへ飛ばすスクリプトを書いて、カレンダー表示用の カレンダー_Day の内容をコピーしておいて、予約管理の日付で検索させればOKです。 下の作成方法がわかりづらいと思うので解説すると・・・ カレンダーは37コマ(7日かける5週+2日)あれば一ヶ月の日にちを完全に表示できます。 カレンダー表示用というテーブルに表示したい月の日が入ったレコードを作ります。 最終的にポータルで表示する為、その月の初めの日が何曜日かで、何レコード目から1日を作るのかが決まりますから、それを =DayOfWeek ( Date ( カレンダー_Month ; 1 ; カレンダー_Year )) という計算式で計算します。 その計算結果の数のレコードまで移動して、そこから順番に1.2.3・・・と日を入れていきます。 その月の末日まできたらやめます(ExitLoopIf) この末日はDate関数で求めれます。 これで37コマのうち必要な場所に必要な数字がはいるので、後はポータルで表示してやるだけですが、日付でリレーションすると一日分しかこないので、年と月でリレーションさせます。 これで、理論上万年カレンダー(もちろん閏年も計算)の完成です。が、FileMakerの成約上0001/1/1 から 4000/12/31 (Ver.7)までしか作れません。 Ver.6でもテーブルをそれぞれのファイルに分ければ(日曜日を赤くする以外は)同じ要領で作成可能です。カレンダー表示用のフィールドに備考欄でも持たしておけば簡単なスケジュールなどは作成可能ですが・・・ Ver.6ではポータルは縦のみですので、普通のカレンダーのような表示は出来ません(曜日単位でリレーション組めば出来ないことは無いですが。。。) 以上参考にしてください
お礼
とにかくいろいろありがとうございます。 盛りだくさんのご指導で週末の作業が楽しみです。 a2c_2005さんの指導をもとに思い描いている予約管理に近づけたいと思っています。頑張ります。 結果はまた週明けにご連絡します。
補足
スクリプトは数行ずつに分けて実行して問題解決し、無事カレンダーも表示、←や→ボタンで前月次月動作も出来ました。カレンダーの日付にボタンをもたせて予約管理のタイムテーブル表示も出来ました。ついでに前月次月を表示する際、タイムテーブルがまだ作成されていない月の表示の時にはタイムテーブルに1ヶ月分の日付データを作成することも設定しました。細かい指導で大変わかりやすかったです。ありがとうございました。補足でお礼させて頂きました。
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
> あらかじめ1月1日から12月31日までを入力しておかなくてはならない > ということでしょうか? そうです。 > 範囲指定した期間でカレンダーテーブルに日付を入力するスプリクト 面倒くさいのでExcelで表を作って読み込みました。邪道?
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
私はまだ5.5なんですが、 一ヶ月のカレンダーを表示させるには、一週間を1レコードにして日 曜から土曜までの日付フィールドを持たせます。レイアウトは当然、 日曜から土曜までを横に並べて、月の最初の週から最後の週までリス ト形式でたてに並べるイメージになりますね。で、対象となる期間分 のレコード(1年間で52レコード)を作成し、それぞれの曜日に日付を 入力しておきます。 あとは表示したい年月を適当に設定して、検索するだけ。私は「表示 月」ってフィールドを持たせて、日曜または月曜の年月が一致したら 「今月」フラグが立つようにしましたが、そこらへんは適当に。
補足
ありがとうございます。 何となくテーブル構造はわかりましたので作ってみます。「それぞれの曜日に日付を入力します」とありますが、2005年の12ヶ月を表示するカレンダーだとすると、あらかじめ1月1日から12月31日までを入力しておかなくてはならないということでしょうか? もしそうだとすると、範囲指定した期間でカレンダーテーブルに日付を入力するスプリクトはありますか?
- aqula
- ベストアンサー率60% (70/115)
私もチャレンジしたことがあるのですが、私のスキルでは無理でした。 >テーブル構造とレイアウト表示時・ボタンに設定するスプリクトをご指導下さい。 このあたりは簡単に出来ますが、その前に月ごとのカレンダー表示が難しいと思います。 私には日付と祭日フラグだけのシンプルなカレンダーと別のスケジュールソフトで 充分でしたので深く考えていませんが、、、 下のサイトに有料テンプレートがあります。 http://www.computerworks.co.jp/ のデモ版ダウンロード「アイデア集」に「暦と予定」 下の2つは詳しい方が多いので行ってみては? kipwmiのファイルメーカー会議室 http://www.kipwmi.com/fmbbs/wwwlng.cgi ファイルメーカユーザのページ http://www.ogawa.tokushima.tokushima.jp/~fmjuser/ のメーリングリスト
お礼
いろいろ紹介してくださったサイトも含め探したのですが、なかなか「○○のようなカレンダーの作り方を教えて下さい」→「このようにして作成します」というようなシンプルな質疑応答が見つからないのです。 引き続き探しながら頑張ってみます。
お礼
ありがとうございます。 カレンダーに書き込みはなしです。日付にボタンでももたせて該当日の予約管理画面を表示させるつもりです。 今日は打合せが午前午後ともに入っているので週末は早速取り組んでみます。 取り急ぎ、テーブル構造と作成方法で答えて下さってすごく感謝しています。
補足
(1) 定義→データベースで「カレンダー初日番号」をタイプ「計算」で設定するのですが、計算式の中にカレンダー_monthのようにその値自身がグローバルなものを使うと「カレンダー初日番号」がグローバル設定できないようですが…。 (2) スクリプトを見ていただけますか? データベースはACCESSで6年ほど作っています。今回ファイルメーカーは初めてで、テーブルやレコードの追加や更新、削除などスクリプトで自由にいじれなくてもじもじしています。 今、ループしっぱなしのようです。見てあきれないで下さい。宣しくお願いします。 1.全てを選択 2.対象レコード削除[ダイアログなし] 3.新規レコード/検索条件 ↓ 37行 39.新規レコード/検索条件 40.計算結果を挿入[選択;カレンダー表示::カレンダー設定日;Get(日付)] 41.計算結果を挿入[選択;カレンダー表示::カレンダーYear;year(カレンダー表示::カレンダー設定日)] 42.計算結果を挿入[選択;カレンダー表示::カレンダーMonth;Month(カレンダー表示::カレンダー設定日)] 43.レコード/検索条件/ページへ移動[ダイアログなし;カレンダー表示::カレンダー初日番号] 44.計算結果を挿入[選択;カレンダー表示::カレンダーDay;Date(カレンダー表示::カレンダーMonth;1;カレンダー表示::カレンダーYear)] 45.計算結果を挿入[選択;カレンダー表示::カレンダー日付増加;カレンダー表示::カレンダーDay + 1] 46.レコード/検索条件/ページへ移動[次の] 47.Loop 48.計算結果を挿入[選択;カレンダー表示::カレンダーDay;カレンダー表示::カレンダー増加] 49.計算結果を挿入[選択;カレンダー表示::カレンダー増加;カレンダー表示::カレンダーDay + 1] 50.Exit Loop If [カレンダー表示::カレンダーDay = Date(カレンダー表示::カレンダーMonth + 1;0;カレンダー表示j::カレンダーYear)] 51.レコード/検索条件/ページへ移動[次の] 52.End Loop 53.レイアウト切り替え[”カレンダー”(カレンダー)] 54.フィールド設定[カレンダー::表示Year;Year(Get(日付))] 55.フィールド設定[カレンダー::表示Month;Month(Get(日付))] お願いします。