Базы данных. Практикум
.pdf6.3. Макетирование отчетов
Создание макета отчета является более кропотливой работой, не- жели создание макета формы. Если размеры формы, ее разделов и элементов управления в режиме конструктора и в режиме вывода формы на экран практически одинаковы как по горизонтали, так и по вертикали, то для отчета заранее оценить вертикальные размеры не- возможно.
Почему так? Во-первых, заранее неизвестно число выводимых за- писей в источнике данных для отчета. Во-вторых, почти все состав- ляющие отчета (разделы, элементы управления) имеют возможности подгонки вертикальных размеров под выводимые в них данные. Из последнего вытекает, что размер по вертикали, требуемый для выво- да одной записи, будет изменяться в зависимости от длины данных в полях записей.
С размерами по горизонтали тоже не все просто. Если горизон- тальные размеры формы больше размеров экрана, вы просто исполь- зуете горизонтальную прокрутку. Поскольку отчет привязан к выво- ду на печать, для него задается ширина страницы. При ширине отче- та, превышающей размер страницы, на печать выводится та часть отчета, которая помещается на странице по горизонтали, а то, что осталось, выводится на следующую страницу. Даже если в данный размер страницы не поместился последний пробел в строке, он будет перенесен на следующую страницу и распечатанный отчет будет пе- ремежаться пустыми страницами.
Конечно, это не всегда минус. Если вам нужен отчет, который не помещается даже на горизонтальном развороте формата А4, можно склеивать полученные части.
В заключение упомянем о размещении объектов. Их положение друг относительно друга на макете существенно отличается от поло- жения на напечатанной странице. Дело в том, что с одной стороны, разрешение хорошего принтера выше, чем у типового экрана, а с другой стороны, имеют место различимые глазом «кинематические» погрешности перемещения бумаги в процессе печати. К этому до- бавляются еще и погрешности преобразования сантиметров в твипы. В результате при выводе на печать вы часто будете обнаруживать, что проведенная на макете в режиме конструктора линия, распола- гавшаяся там, где ей должно быть, на печати «заезжает» на данные или, наоборот, оставляет пустые места.
Одной из основных (и наиболее занудных) проблем при построе- нии отчета является проблема того, как поместить всю нужную ин-
71
формацию по ширине страницы, сохранив при этом если не элегант- ность, то хотя бы удобочитаемость. Поэтому в отчетах очень важную роль играют свойства Расширение и Сжатие. Задав поле расширяе- мым, вы добьетесь того что, скажем, самое длинное название фирмы будет выведено на экран полностью, хотя и в несколько строк. Един- ственной проблемой остается то, что, если некоторое слово в выво- димом тексте настолько длинно, что не помещается в строке поля, оно переносится произвольным образом, причем без всяких знаков переноса.
Еще одна проблема связана с переходом со страницы на страницу в длинных отчетах. Свойство Не разрывать применяется только к разделу в целом, и нет никакой гарантии, что запись, занимающая несколько строк, будет размещена на одной странице.
Бороться со всеми этими рутинными проблемами достаточно тя- жело. Основной метод здесь состоит в выводе отчета на экран в ре- жиме предварительного просмотра, обнаружении неполадок, правке и новом выводе на экран.
72
7. РЕАЛИЗАЦИЯ УПРАВЛЕНИЯ ПРИЛОЖЕНИЕМ
Основными средствами управления приложением в режиме диалога являются формы. Посмотрим, как это делается. Стандартный метод со- стоит в создании главной формы приложения, которая содержит только органы управления и задания режимов. Это означает, что на такой фор- ме обязательно присутствуют кнопки и, возможно, переключатели.
Кнопки запускают основные операции системы, почти всегда свя- занные с выводом каких-то форм. Выводимая по нажатию кнопки форма может снова содержать в основном органы управления, а мо- жет и данные. Можно было бы говорить о разделении форм на два класса – управляющие формы и формы данных, однако чаще форма комбинирует управление и обмен данными с приложением.
В качестве примера приведем возможный вид главной формы из приложения торговой системы, которая выводится на экран при за- пуске системы (рис. 33).
Рис. 33. Главная форма
Сразу оговоримся, что вопросы дизайна формы нас не интересуют (это дело вкуса разработчиков).
Рассмотрим основную операцию – оформление заказов. Переклю- чателем задается ввод новой заявки или работа с уже существующей. При нажатии кнопки «Заказы» на экране появляется диалоговая форма «Заказы», содержащая данные по конкретному заказу, если была выбрана опция «Работа с заказом» (рис. 34), или эта же форма без данных, если была выбрана опция «Новый заказ».
73
Рис. 34. Форма для работы с заказом
Форма «Заказы» уже содержит данные. Кроме того, на ней имеет- ся несколько управляющих кнопок. Кнопка «№ счета» позволяет ав- томатически присваивать следующий номер счета в системе, но только для вновь создаваемого заказа.
Кнопка «Вывод счета» служит дня вывода на печать счета. Кноп- ка «Выписка накладных» открывает новую, столь же насыщенную форму, позволяющую выписывать по данному заказу одну или не- сколько накладных.
В нижней части экрана выводится ленточная форма с описанием заказанных товаров.
Теперь вновь вернемся к обсуждению главной формы (рис. 33). На первый взгляд кажется излишней кнопка «Просмотр заказов». Однако с ее помощью можно открыть ленточную форму для удобно- го выбора заказа.
Выбрав нужный заказ, ее можно открыть кнопкой «Заказы». Функция кнопки «Оплата счетов» в пояснении не нуждается, а с по- мощью кнопки «Сводки» можно сформировать отчет по базе данных.
Особо следует остановиться на реализации переключателей на главной форме. На практике в большинстве случаев они служат для наглядного ввода-вывода логических данных. Здесь они играют роль управления кнопкой, т.е. ни к каким реальным данным в базе данных
74
они не привязываются. Это достигается следующим образом. В ре- жиме конструктора вызываются свойства кнопки. В окне «Кнопка» на вкладыше «События» задается процедура на нажатие кнопки (в открывающемся окне Visual Basic).
Применительно к нашему примеру код процедуры, позволяющей открывать разные формы при нажатии кнопки в зависимости от ак- тивизированных переключателей с именами PerekRab и PerekNov, может быть такой:
Private Sub Кнопка_Click()
If Me!PerekRab.Value = True Then
DoCmd.OpenForm "Работа с заказом"
End If
If Me!PerekNov.Value = True Then
DoCmd.OpenForm "Новый заказ"
End If
End Sub
Для автоматического вывода на экран главной управляющей фор- мы (рис. 33) может быть использован макрос Autoexec, как правило, включающий три макрокоманды.
Первая макрокоманда макроса убирает с экрана главное окно баз данных, чтобы в него случайно не залез пользователь, вторая откры- вает главную управляющую форму приложения, а третья убирает с экрана штатную панель инструментов.
Однако аналогичного эффекта легко добиться, если воспользоваться основным меню и выбрать пункты Сервис / Параметры запуска, за- дав параметры, определяющие три указанные выше операции.
В заключение вопроса о реализации управления приложением от- метим, что последовательная реализация управления посредством форм имеет много преимуществ, однако недостатки есть и здесь. В более или менее сложном приложении число элементов управления на каждой форме увеличивается. Это приводит к следующим непри- ятным последствиям.
1.Элементы управления занимают все большую часть формы, и для данных места остается все меньше. Если переходить на много- страничную форму, это резко снижает интуитивность интерфейса.
2.Большое количество кнопок на форме также снижает нагляд- ность управления, у пользователя просто начинает рябить в глазах.
3.Используя управление посредством форм, вы приучаете и поль- зователя и себя к уникальности каждого приложения. Вместо того, чтобы привыкать к стандартам Windows-приложений и их интерфей- са, пользователь каждое новое приложение осваивает заново.
75
ЗАКЛЮЧЕНИЕ
В качестве заключения начинающим разработчикам можно дать три основных практических совета.
1.Не следует воспринимать примеры проектирования (представ- ленные в данном практикуме и в любой другой литературе), как па- нацею на все случаи жизни. Следует помнить, что любое (даже под- час ничтожное) изменение описания предметной области может по- ставить проект «с ног на голову».
2.Чтобы научиться проектировать совершенно недостаточно вы- полнить этот процесс умозрительно. Нужна его тщательная прора- ботка сначала на бумаге, а потом непосредственно за компьютером. При этом нельзя недооценивать первую фазу – проработку на бумаге (хотя многие ошибочно считают это «бумаготворчеством»). Скурпу- лезно должны быть расписаны (нарисованы) схемы БД, структуры таблиц, содержание запросов, вид форм и т.д. Хороший проект на бумаге, как правило, приводит к лучшим результатам.
3.Следует придерживаться изложенного выше порядка проекти- рования. И, главное, не надо «бежать впереди паровоза», т.е. начи- нать проектирование, толком не разобравшись в предметной области
итребованиях к приложению. К сожалению, это очевидное правило даже достаточно опытные разработчики часто нарушают. В резуль- тате кажущееся начальное ускорение на практике оборачивается тя- желыми последствиями: по мере уяснения требований к приложению приходится многое переделывать или просто начинать с нуля.
76
ЗАДАНИЯ ДЛЯ САМОПРОВЕРКИ
Задание 1
1. Спроектируйте схему базы данных для хранения накладных
(рис. 35).
|
|
Накладная |
от 00/00/00 |
|
||||
ЗАО «АВС» |
|
|
|
|
|
|
|
|
Поставщик: |
|
|
|
|
|
|
|
|
ЗАО «LLL» |
|
|
|
|
|
|
|
|
Покупатель: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
№ |
Номенклатура |
|
Цена |
|
Количество |
Сумма |
||
1 |
Марля |
|
125.00 |
|
10 |
|
1250.00 |
|
2 |
Зубная паста |
|
20.00 |
|
100 |
|
2000.00 |
|
… |
|
|
|
|
|
|
|
|
Итого |
|
|
|
|
|
|
|
3250.00 |
Всего наименований 2 |
|
|
|
|
|
|
||
|
|
|
Рис.35 Форма накладной |
|
||||
Задание 2
1.Спроектируйте схему базы данных для хранения информации об упаковочных ярлыках (рис. 36). Проанализируйте поля, определи- те состав таблиц.
2.Напишите SQL-операторы для создания таблиц базы данных. (Использовать каскадное удаление в связанных таблицах).
Упаковочный ярлык
АВС
Организация, адрес Отделение подъемных механизмов
Структурные подразделения
Сертификат |
|
|
|
|
|||
Номер |
|
Срок действия |
|
|
|
||
|
с |
по |
|
|
|
||
|
|
|
|
|
|||
145-3 |
|
01.10.98 |
01.12.08 |
|
|
|
|
|
|
|
|
|
|||
Товар |
|
Единица измерения |
Количество |
Масса |
|||
Домкрат |
|
шт. |
|
100 |
|
||
Упаковщица Сидорова А.И.
Рис. 36. Форма упаковочного ярлыка
77
Задание 3
1.Спроектируйте схему базы данных для хранения товарных на- кладных (рис. 37).
2.Разработайте триггеры для удаления данных в связанных таб- лицах.
3.Напишите оператор Select, который формирует отчёт обо
всех накладных на внутреннее перемещение и спецификации, отно- сящиеся к ним. Шапка должна включать номер товарной накладной, дату формирования и название номенклатуры, количество, цену.
ЗАО «Дороги России» Грузоотправитель: ОАО «Старт»
Товарная накладная
|
|
|
|
|
|
Номер документа |
|
Дата составления |
||||||||
|
|
|
|
|
|
1-16 |
|
|
|
|
01.12.07 |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Товар |
Единица |
Вид |
|
Масса |
Количе- |
|
Цена, |
Сумма |
|
НДС |
Сумма |
|
||||
|
измерения |
фасовки |
|
брутто |
ство |
|
руб. |
|
|
|
|
(18%) |
+ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
НДС |
|
|
Репа |
кг |
мешок |
|
|
1000 |
|
50 |
50000 |
|
5000 |
55000 |
|
||||
Подпись Иванов И.И. |
|
|
|
|
|
На сумму |
50000 |
|
|
|
||||||
|
|
|
Рис. 37. Товарная накладная |
|
|
|
|
|
|
|
|
|||||
Задание 4
1.Создайте базу данных для хранения накладных на внутренне перемещение (рис. 38). Напишите SQL-операторы для создания таб- лиц базы данных.
2.Создайте форму, внизу которой разместите подчиненную таб- личную форму с описанием товаров.
3.Напишите оператор Select, который формирует отчёт с сум-
марной стоимостью спецификации по товарным накладным. 4.Напишите запрос на увеличение цены каждой номенклатуры на
десять процентов.
78
Накладная на внутреннее перемещение, передачу товаров
|
|
|
|
|
|
|
|
|
Номер документа |
Дата составления |
|||||||
|
|
|
|
|
|
|
|
|
1-678 |
|
|
01.12.05 |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Отправитель |
|
|
|
Получатель |
|
|
|
|
|
Код анали- |
|||||||
Структурное |
|
Вид |
Структурное |
|
Вид деятельно- |
|
|
тического |
|||||||||
подразделение |
|
деятельности |
подразделение |
|
сти |
|
|
учёта |
|||||||||
Каптерка 1 |
|
Складирование |
Каптерка 2 |
|
Складирование |
|
|
009 |
|
||||||||
|
|
|
|
|
полуфабрикатов |
|
|
|
|
полуфабрикатов |
|
|
|||||
|
|
|
|
|
|
|
|
Цена, руб. |
|
|
|
|
|||||
Товар |
|
Сорт |
|
Единица измерения |
Количество |
|
|
Сумма |
|||||||||
Молоко |
|
1 |
|
л |
|
1000 |
|
|
30 |
|
|
30000 |
|
||||
Отпустил |
|
Сидоров Ф.Ф. |
|
|
|
|
|
На сумму |
30000 |
|
|||||||
Принял |
|
Сидоров В.В. |
|
|
|
|
|
|
|
|
|
|
|
|
|||
Рис. 38. Форма накладной на внутреннее перемещение
Задание 5
1.Создайте базу данных для хранения распоряжений на отпуск потребителю (рис. 39).
2.Напишите SQL-операторы для создания таблиц базы данных.
3.Разработайте триггеры для удаления данных.
4.Разработайте форму с вычисляемыми полями для вывода дан- ных «Сумма» и «Итого».
5.Сформируйте отчеты по отпуску товаров определенной но- менклатуры.
Распоряжение на отпуск № 100
Грузоотправитель: ЗАО «Финиш» Адрес грузоотправителя: Склад 7 Грузополучатель:
Номенклатура |
Единица |
Количество |
Цена, |
Сумма |
|
|||||
|
|
измерения |
|
Руб. |
|
|
||||
Сыр «ВиолаЭ |
шт |
100 |
30 |
|
|
3000 |
|
|||
Сырок «Дружба» |
шт |
200 |
5 |
|
|
1000 |
|
|||
Итого: 4000 |
|
|
|
|
|
|
||||
В т.ч. НДС: 800 |
|
|
|
|
|
|
||||
Руководитель предприятия: Шишкин Ш.Ш. |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|||
Груз отпустил: Мишин М.М. |
Груз получил: Петров П.П. |
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
Рис. 39. Форма распоряжения на отпуск
79
Задание 6
Разработайте информационную систему «ГРАНТ», предназначен- ную для хранения информации о ходе исполнения и финансирования научных работ.
Вся информация о грантах хранится в четырёх таблицах: «ГРАНТ», «ПЛАТЁЖ», «АНКЕТА», «ВЕДОМОСТЬ».
В табл. 9 «ГРАНТ» содержатся паспортные данные гранта.
|
|
|
|
|
Таблица 9 |
|
|
«ГРАНТ» |
|
|
|
|
|
|
|
|
|
Наименование гранта |
Номер |
|
Вид проекта |
Дата |
Дата |
|
гранта |
|
|
начала |
окончания |
Когнитивные роботы |
GR_1223 |
|
Исследовательский |
01.07.02 |
01.12.03 |
Организация конферен- |
GR_1567 |
|
Конференция |
01.07.02 |
01.12.04 |
ции по хранению графи- |
|
|
|
|
|
ческой информации |
|
|
|
|
|
Исследование курганов |
GR_1445 |
|
Экспедиция |
01.07.01 |
01.07.02 |
Тверской области |
|
|
|
|
|
Болезни аквариумных |
GR_6665 |
|
Исследовательский |
01.07.02 |
01.07.05 |
рыбок |
|
|
|
|
|
В табл. 10 «ПЛАТЁЖ» заносятся суммы поступлений денежных средств по грантам.
|
|
|
|
|
|
|
|
Таблица 10 |
||
|
|
«ПЛАТЁЖ» |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
Наименование гранта |
|
|
|
Номер |
Сумма |
Дата поступ- |
||||
|
|
|
|
|
гранта |
|
ления |
|||
Когнитивные роботы |
|
|
|
GR_1223 |
500000 |
01.07.02 |
|
|||
Когнитивные роботы |
|
|
|
GR_1223 |
500000 |
01.10.02 |
|
|||
Организация конференции по хранению |
|
GR_1567 |
200000 |
01.07.02 |
|
|||||
графической информации |
|
|
|
|
|
|
|
|
||
Исследование курганов Тверской области |
|
|
|
30000 |
01.09.01 |
|
||||
Исследование курганов Тверской области |
|
GR_1445 |
300000 |
01.07.01 |
|
|||||
Болезни аквариумных рыбок |
|
|
GR_6665 |
520000 |
01.07.01 |
|
||||
Анкетные данные исполнителей грантов будут представлены в |
||||||||||
табл. 11 «АНКЕТА». |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 11 |
||
|
|
«АНКЕТА» |
|
|
|
|
||||
|
|
|
|
|
|
|
||||
Фамилия |
Имя |
Отчество |
Дата рождения |
Табельный номер |
Пол |
|
||||
Перов |
Александр |
Иванович |
02.07.76 |
|
122345 |
|
Муж |
|
||
80 |
|
|
|
|
|
|
|
|
|
|
