Настройка формы Журнал Учителя
- Для того, чтобы лучше понять, как настраивать работу формы, которую только сейчас создадим, необходимо ввести хотя бы некоторые данные в журнал. И сделать это на «низком уровне», то есть без формы, а прямо в таблице. Откройте таблицу Журнал оценок и заполните ее 20-30 записями. Причем старайтесь поставить оценки так, чтобы ученики были с нескольких (хотя бы трех) классов, с хотя бы двух параллелей, и чтобы каждый учитель-предметник «поставил» бы какие-то оценки хотя бы двум-трем ученика с разных классов. Это важно для понимания того, как настраивать фильтры формы Журнал Учителя. (Например, пусть по географии оценки получат два ученика с 10 Б и три с 11 А).
- После ввода закройте таблицу.
- Перейдите к формам и Создайте при помощи мастера форму. Из таблицы Журнал оценок возьмите поля Фамилия, Предмет, Оценка, Дата. На последнем шаге назовите ее «Журнал учителя – оценки». Нажмите Готово.
- Форма отображает данные как форма, а нам нужно, чтобы она отображала данные в виде таблицы. Закройте форму, перейдите в режим конструктора и откройте форму. Перейдите на Макет и в поле Режим по умолчанию. Поставьте Режим таблицы. Закройте конструктор и откройте форму.
- Как видите, эта форма отображает данные о том, какие оценки по данному предмету получили ВСЕ ученики ВСЕХ классов со ВСЕХ параллелей, то есть она отображает ВСЕ содержимое таблицы Журнал оценок. Для учителя такая форма неудобна – ведь гораздо удобнее работать с журналом одного класса, а не всей школы! Необходимо добавить фильтры отбора. Но сначала сделаем так, чтобы при нажатии на кнопку в форме Журнал учителя открывалась эта форма – Журнал учителя – оценки. Для этого создадим микропрограмму – макрос.
- Выйдите в Макросы и нажмите кнопку Создать. В первой строке выберите заготовку макроса ОткрытьФорму. Внизу, в аргументах макроса, выберите имя формы Журнал учителя – оценки,режим – Таблица, режим данных – изменение - ведь учитель имеет право не только добавлять новые оценки но и старые корректировать. Закройте окно макроса и сохраните его под именем ОткрытьЖурналУчителя(без пробелов).
- Запустите макрос. Как вы видите, его действие равно выполнению команды пользователя по открытию формы. Теперь добавим кнопку открытия.
- Откройте в режиме конструктора главную форму Журнал учителя. Увеличьте место НАД (а не под!) примечанием формы. Поставьте на это место кнопку, настройте ее (Разное - Выполнить макрос – Далее – ОткрытьЖурналУчителя – Далее – Текст «Открыть журнал» - Готово. Закройте конструктор и откройте форму Журнал учителя.
- Выберите предмет, класс, параллель и нажмите кнопку Открыть журнал.
- Форма открывается, но… Там опять все те же ВСЕ оценки по всем предметам. Закройте обе формы.
- Добавим фильтры отбора – ведь данные для отбора у нас уже есть в полях со списками Класс: и Параллель. Откройте форму Журнал учителя – оценки в режиме конструктора.
- Щелкните по левому верхнему углу формы и перейдите на вкладку Данные.
- Щелкните по кнопке справа от поля «Источник строк». Ответьте ДА на вопрос о построителе запросов. В появившемся запросе в первом столбце введите таблица «Журнал оценок», поле «Фамлия», во втором: «Журнал оценок», «Предмет», в третьем: «Журнал оценок», «Оценка», В четвертом: «Журнал оценок», «Дата». Однако этих данным мало для запроса.
- В окне запроса, где отображаются таблицы-источники (а сейчас там всего одна – Журнал оценок) щелкните правой кнопкой мыши и выберите Добавить таблицу и добавьте таблицуУченики.
- В пятом поле запроса введите: «Ученики», «Класс», в шестом: «Ученики», «Параллель». Теперь в запросе все данные, которые нам нужны для фильтрации общей таблицы.
- В запросе в строке Условие отбора в поле Предмет щелкните правой кнопкой мыши и выберите «Построить». Появится окно Построителя выражений. Он помогает автоматически построить выражение запроса без ошибок. В первом окне построителя выберите Forms – все формы, выберите форму Журнал учителя и выберите объект, который будет источником отбора – поле Код предмета. Нажмите Вставить и ОК.
- Аналогично в поле запроса Класс при помощи построителя введите выражение по классам - Forms – все формы, выберите форму Журнал учителя и выберите объект, который будет источником отбора – поле Списокклассов.
- Аналогично для поля запроса Параллель введите выражение запроса по параллелям.
- Закройте запрос и конструктор. Проверим действие фильтра. Откройте главную форму, которую создали ранее – Журнал Учителя. Выберите преподавателя, класс и параллель. Нажмите кнопку Открыть журнал.
- Как видно, в дочерней форме теперь отображаются только те ученики, которые соответствуют введенным в главной форме преподавателю, предмету, классу и параллели. Смените в главной форме преподавателя, или класс, или предмет. Нажмите кнопку Открыть журнал.Однако в журнале ничего не изменилось! Чтобы увидеть журнал другого класса или предмета, нужно эту форму закрыть и заново открыть. Проверьте!
- Сделаем так, чтобы окно журнала с оценками открывалось в модальном режиме – то есть, пока его не закроешь, нельзя вернуться на форму, это окно породившую. Закройте обе формы, откройте в режиме конструктора макрос ОткрытьЖурналУчителяи измените режим окна на Окно диалога. Закройте макрос и вновь откройте форму и проверьте модальность окна журнала оценок.
- Попытайтесь изменить данные формы Журнал учителя – оценки. Если все работает, попытайтесь вводить новые оценки. Обратите внимание на недочеты –
- при выборе учеников появляется список ко ВСЕМИ учениками, а надо, чтобы в списке были те, кто учится в выбранном классе.
- Хоть журнал открылся для выбранного предмета, предмет в поле предметы все равно придется вводить – иначе данные не запомнятся в общей таблице оценок, вернее, запомнятся, но с предметом 0.
- Исправим сначала второй недочет. Закройте формы и создайте новый макрос. В первой строчке введите заготовку макроса ЗадатьЗначение. Внизу, в аргументах макроса в поле элемент введите [Формы]![Журнал учителя - оценки]![Предмет], а в поле Выражение введите [Формы]![Журнал учителя]![Код].Этот макрос заменяет поле предмета данными из родительской формы с поля код предмета. Закройте макрос, назвав его Подстановка.
- Когда его запускать? Тогда, когда пользователь изменяет запись в поле Фамилия формы Журнал учителя – оценки. Откройте в режиме конструктора форму Журнал учителя – оценки. Правой кнопкой щелкните на поле Фамилия и выберите Свойства. Перейдите на вкладку События и в поле Изменение выберите только что созданный макрос - Подстановка. Теперь при вводе или изменении фамилии поле Предмет автоматически заполнится выбранным предметом!
- Теперь исправим первый недочет. Продолжая оставаться в режиме настройки поля Фамилия, перейдите на вкладку Данные и щелкните по кнопке справа от поля Источник строк.
- В появившемся запросе, в третьей (пустой) колонке выберите Имя таблицы – Ученики, Поле – Класс, а в условии отбора введите [Forms]![Журнал учителя]![Списокклассов].Это заставитпрограмму при формировании списка в список брать только тех учеников, класс которых совпадает с выбранным в списке классов. В четвертой колонке запроса веведите запрос по полю Параллель таблицы Ученики. Условие отбора [Forms]![Журнал учителя]![СписокПараллелей]. Уберите с созданных полей галочки вывода на экран. Закройте запрос. Выделите поле Предмет вместе с его надписью и удалите. Теперь, после автозаполнения, оно нам не нужно. Закройте конструктор.
- Запустите форму. Откройте журнал выбранного класса. Как вы видите, теперь при заполнении новых оценок в списке подстановок фамилий и имен учеников имеются только те ученики, которые учатся в данном классе. Вроде бы, наконец-то недочетов нет!
Запомните! Недочеты в программе есть и будут! Крупные мы исправили. Но программист всегда должен видеть в своем произведении недочеты и пытаться их исправить, приблизить программу к идеалу. Однако идеал в принципе недостижим, и это прекрасно, ибо для истинно творческих людей бесконечное приближение к идеалу в своем творчестве и есть смысл их жизни!!!
Задание – разберитесь, какие еще недочеты имеются в базе данных. Поговорите с учителем, как можно избавиться от некоторых.
Однако хватит высокопарных (хотя и искренних) философствований. Перейдем к созданию формы Классный Журнал
Усовершенствования
До создания классного журнала немного усовершенствуем то, что мы уже сделали. Вы помните вопрос о недочетах? Наверное, некоторые вы уже выявили для себя. Выделим два из них:
- При открытии формы они располагаются на экране бесконтрольно, причем одна может перекрывать другую. Это неудобно.
- Неудобно вводить дату оценки. Лучше бы сделать специальную форму для изменения даты.
Исправим первый недочет. Есть такой макрос – СдвигРазмер – он изменяет размер активной формы и ее координаты на экране. Координаты отсчитываются относительно верхнего левого окна Access до верхнего левого угла формы. Единицы измерения – сантиметры. Правда, эти сантиметры не всегда соответствуют реальным сантиметрам, и приходится несколько раз подбирать данные.
- Создадим макрос, настраивающий положение формы Классный Журнал. Договоримся, что при запуске она должна появляться посередине экрана вверху.
- Перейдите на Макросы, нажмите Создать.
- Выберите в первой строке макрос СдвигРазмер и внизу в аргументах введите По правому краю – 8см («см» не пишите, программа подставит автоматически), От верхнего края – 1см. Сохраните макрос под именем НастройкаЖурналаУчителя
- Аналогично создайте новый макрос с командой СдвигРазмер, в котором поставьте По правому краю – 1см, От верхнего края – 9см. и назовите макрос НастройкаОценокУчителя.Этот макрос будет настраивать местоположение журнала оценок.
- Когда эти макросы должны срабатывать? Тогда, когда нужная форма открывается. Свяжем эти макросы с соответствующими событиями форм.
- Войдите в режиме конструктора в форму Журнал учителя, перейдите на Макет – События и в строке Открытие выберите макрос НастройкаЖурналаУчителя. Закройте Макет и конструктор.
- Откройте в конструкторе форму Журнал учителя – оценки и аналогично свяжите с событием открытия макрос НастройкаОценокУчителя.Проверьте теперь, как и где открываются окна.
Первый недочет исправили. И научились управлять положением окон на экране. Теперь – исправление второго недочета. Создадим с нуля форму для выбора даты.
- В режиме КОНСТРУКТОРА (не мастера! – мы впервые создаем форму в режиме конструктора!) создайте форму.
- Дважды щелкните в левом верхнем углу, перейдите в Макет и в поле Рисунок нажмите на кнопку справа и из папки (которая у вас может открыться автоматически) C:\Program Files\Microsoft Office\OFFICE11\BITMAPS\STYLES выберите понравившийся вам рисунок, например ACEXPDTN.GIF. В поле Мозаичное заполнение поставьте Да. Это заставит рисунок, который меньше формы по своим размерам, мозаикой заполнить форму. Закройте Макет.
- Поставьте в левом верхнем углу поле со списком, выберите фиксированный набор значений и введите в один столбец числа от 1 до 31 – это дни месяца. Назовите список День.
- Аналогично добавьте ниже поле со списком Месяц (числа от 01 до 12) и Год (числа от 2006 до 2009).
- Зайдите в Макет и уберите полосы прокрутки, область выделения и кнопки перехода. Закройте конструктор, сохраните форму под именемДата. Запустите форму и проверьте работу списков дней, месяцев и лет.
- Добавим поле, в котором будет синтезироваться выбранная дата. Именно из этого поля эта дата будет копироваться в журнал Оценок.
- Откройте в конструкторе форму Дата и правее списков поставьте поле (не поле со списком!) и назовите его Дата. Увеличьте (для удобства) его размеры и шрифт как поля, так и подписи к нему. Правой кнопкой щелкните на поле (а не на его надписи!) и выберите Свойства – Другие и в поле Имя введите Дата. Закройте макет.
- Также, заходя в свойства, измените имена для списков, назвав их соответственно День, Месяц и Год.
- Снова перейдите в свойства поля Дата, перейдите на Данные и справа от строчки Данные нажмите кнопку. В построителе выражений постройте выражение или введите строчку: [День] & "." & [Месяц] & "." & [Год]. Закройте построитель. Как вы заметили, эта формула объединяет текстовые данные дня, месяца и года через символ точки, что соответствует формату даты. Однако, чтобы эта строчка расценивалась как дата, необходимо задать маску ввода. Нажмите на кнопке справа от поля Маска ввода и выберите маску Краткий формат даты. Поставьте блокировку на поле Дата. Закройте макет.
- Войдите в свойства списка День – Данные поставьте значение по умолчанию – 1, ограничиться списком - Да, в списке Месяц – 01 и ограничение списком, а в списке Год – 2007 и ограничение списком.
- Закройте конструктор и откройте форму Дата. Проверьте, как работает выбор даты.
- Создайте макрос, который устанавливает поле Дата в координаты 16см от правого края и 9 см от верха. Назовите его НастройкаДаты. Свяжите этот макрос с событием открытия формы Дата.
- Откройте форму Дата, откройте форму Журнал учителя и в ней нажмите кнопку Открыть журнал. Все три формы не должны перекрывать друг друга (см. рис.). Если это не так, разберитесь, какую форму нужно передвинуть и измените данные соответствующего макроса и вновь проверьте.
- Автоматизация открытия. Сначала снимем режим модальности с формы Журнал учителя – оценки. Как вы помните, она открывается кнопкой Открыть журнал. А кнопка связана с макросом ОткрытьЖурналУчителя. Откройте этот макрос в режиме конструктора и смените Режим окна с Окно диалога на Обычное. Теперь в этом же макросе во второй строке поставим ту же команду, что и стояла в первой – ОткрытьФорму. В аргументах команды в поле Имя формы поставьте Дата. Закройте макрос.
- Откройте форму Журнал Учителя. Выберите предмет, класс и параллель и нажмите кнопку Открыть журнал. У вас должны открыться сразу две формы – Журнал учителя - оценки и Дата. Если теперь форма журнала «ушла» вниз, подкорректируйте макрос, который настраивает ее местоположение НастройкаОценокУчителя.
- Теперь создадим макрос, который должен копировать дату, введенную в Форме Дата и содержащуюся в его поле Дата в ячейку Дата активной строки таблицы оценок формы Журнал Учителя – оценки.
- Создайте новый макрос и в первой строчке выберите команду ЗадатьЗначение. Внизу, в аргументах, в поле Элемент введите при помощи построителя поле Дата формы Журнал учителя – оценки: Forms![Журнал учителя - оценки]![Дата]. В поле Выражение, введите, откуда для указанного элемента будет браться выражение – поле Дата формы Дата: Forms![Дата]![Дата].
- Сохраните макрос как ПодстановкаДаты.
- Откройте форму Дата в режиме конструктора и под полем Дата поставьте кнопку. В настройках кнопки выберите Разное – Выполнить макрос – ПодстановкаДаты – текст – «Подставить Дату».
- Настройте размер кнопки и шрифт надписи кнопки. Закройте конструктор.
- Откройте форму Журнал учителя.
- Выберите предмет, класс, параллель и нажмите кнопку Показать журнал. Если все правильно, должны открыться две формы – Журнал учителя - оценки и Дата.
- Измените какие0ниюудь записи в журнале или создайте новые. Дату вводите при помощи формы Дата. При нажатии на кнопку Подставить дату дата должна заноситься в выбранную строчку журнала в раздел Дата.
- И последний недочет уберем – сделаем так, чтобы при изменении предмета, класса или параллели форма с оценками автоматически закрывалась. Создайте новый макрос, в первой строке выберите команду Закрыть, в Аргументах – Тип – Форма, Имя - Журнал учителя – оценки, Сохранение – Да. Сохраните макрос под именем ЗакрытьОценки.
- Сопоставьте этот макрос с событиями «Кнопка вниз» кнопок перехода по записям формы Журнал Учителя, а так же событиям Изменения спискам СписокКлассов и СписокПараллелей.
Создание Классного Журнала
Основная форма
- Создадим в режиме конструктора (не мастера!) новую форму. Выйдите в Макет (дважды щелкнув по верхнему левому углу формы в режиме конструктора), и в поле Надпись введите «Классный журнал».
- Аналогично созданию формы Дата, настройте внешний вид формы – выберите фоновый рисунок, удалите полосы прокрутки, область выделения и кнопки перехода.
- Вставьте в верхнюю часть надпись и введите текст: Выберите класс. Измените размер шрифта на 16.
- Вставьте ниже два поля со списком. В надписи одного из них введите «Класс:», второго – «Параллель». Измените размер шрифта на 14.
- Войдите в свойства списка Класс (а не его надписи!) и в странице Другие в строке Имя введите Класс. В странице Данные установите режим Ограничиться списком. Значение по умолчанию поставьте 10.
- Так же измените имя списка параллелей на Параллель и поставьте ограничение списком. Значение по умолчанию – А.
- Закройте макет и конструктор и сохраните форму как Классный журнал.