Базы данных. Практикум
.pdf
Рис. 22. Задание таблицы со значениями, которые будет содержать поле со списком
Рис. 23. Задание полей, значения которых будут выводиться на форме
61
Далее надо указать, что выбранное из объекта «поле со списком» значение должно сохраняться в поле «Код вида доставки» (рис. 24).
Рис. 24. Задание поля для сохранения выбранных значений
В результате на форме будет построено поле со списком, вид ко-
торого в режиме конструктора и в режиме просмотра формы пред-
ставлен соответственно на рис. 25 и 26.
Рис. 25. Вид поля со списком «Код вида доставки» таблицы «Заказы» в режиме конструктора
Рис. 26. Вид поля со списком «Код вида доставки» таблицы «Заказы» в режиме просмотра формы (при свернутом и развернутом списке)
62
Таким образом, при работе с формой пользователь будет видеть текстовое название вида доставки, а вводиться в поле будет только числовой код.
5.4. Иерархические формы
Иерархическая форма удобна для отображения документов. В первую очередь она используется для отображения на одной форме сведений из таблиц, объединенных отношением «один – ко – мно- гим».
Для такого отображения в главной форме, открытой в режиме простой формы, выводят все сведения из главной таблицы (со сто- роны «один»), а в подчиненной форме, открытой в режиме таблич- ной формы, выводятся все записи подчиненной таблицы, связанные с текущей записью в главной форме. При смене текущей записи в ос- новной форме записи в подчиненной форме изменяются синхронно. Мало того, если добавить в подчиненной форме новую запись, свя- зывающее поле в ней (внешний ключ) система автоматически запол- нит значением ключа текущей записи в главной форме. На рис. 27 представлена иерархическая форма, отображающая товарные счета по заказам.
Рис. 27. Иерархическая форма с двумя уровнями иерархии
Отметим особенности использования иерархических форм. Во- первых, при внедрении подчиненных форм главная форма может от- крываться только в режиме простой формы. Последнюю нельзя, на- пример, открыть как ленточную.
Во-вторых, на главную форму вовсе необязательно выводить свя- занное поле (как в нашем примере «N заказа»). В качестве главного поля можно использовать несвязанное поле. Например, можно задать
63
на главной форме поле со списком. Тогда при выборе из списка дан- ные в подчиненной форме будут синхронно меняться.
В-третьих, число подчиненных форм, внедренных в одну главную (или число уровней иерархии), формально не ограничено. Хотя на практике разместить на экране более одной достаточно сложно. В качестве примера этого утверждения на рис. 28 представлена иерар- хическая форма с тремя уровнями иерархии, отображающая товары по определенным счетам выбранных заказов.
Рис. 28. Иерархическая форма с тремя уровнями иерархии
64
6.РАЗРАБОТКА ОТЧЕТОВ
6.1.Сходства и различия отчетов с формами
изапросами
По своему внешнему виду отчеты очень похожи на ленточные формы.
У них есть те же разделы, панель элементов для обоих конструк- торов одна и та же (да и сами они очень похожи), многие свойства отчетов и их разделов также одинаковы.
На первый взгляд, единственным отличием является то, что отчет не ограничен размерами экрана, и в нем всегда выводятся все ото- бранные записи области данных, в то время как на форме приходится применять прокрутку.
Тем не менее разница есть, и весьма существенная.
В первую очередь она обусловлена принципиальными различиями между выводом форм на экран и отчетов на принтер.
Не вдаваясь в технические детали этих отличий, сразу укажем, что главное отличие отчета от формы состоит в том, что в форме данные выводятся динамически, а в отчете – статически.
Это, с одной стороны, плохо, поскольку замедляет подготовку от- чета – прежде чем вывести его даже на экран, он должен быть подго- товлен весь полностью, а с другой стороны, поскольку обрабатыва- ются сразу все данные, можно использовать более тонкие методы обработки.
Отчеты имеют много общего и с запросами. По своей сути это и есть запросы на выборку данных, причем, как правило, отчеты выво- дят большое количество строк, описывающих состояние предметной области за некоторый период времени. Но средства для обеспечения такой выборки крайне скудны. Наложить какие-либо условия отбора практически невозможно. С помощью конструктора можно отобрать только отдельные поля из одной таблицы / запроса, а с помощью мастера – из нескольких. Поэтому в большинстве случаев для фор- мирования достаточно сложного отчета в качестве источника строк приходится использовать не таблицы, а промежуточные (специально сделанные) запросы.
65
Однако по сравнению с запросами отчеты имеют и некоторые преимущества. Одним из основных неудобств просмотра данных в запросах является повтор одних и тех же данных из главной таблицы в нескольких строках. В отчетах с этим легко бороться, задав свойст- во Не выводить повторы. Если одно и то же значение повторяется несколько раз подряд, то в отчете оно распечатается только в первый раз, а в следующих выведенных записях поле остается пустым.
И, конечно, самое мощное, что есть в отчетах, – это группировка. С группировкой мы уже знакомы по запросам, однако в отчетах эта операция является более сильной.
6.2. Группировка записей
Группировка в запросах направлена в первую очередь на обеспе- чение групповых операций (нахождение для группы значений мини- мума, максимума, среднего, суммы и т.д.). При этом в результирую- щий набор, как правило, выводятся только два поля.
Группировка в отчетах ориентирована, в первую очередь, на удобное представление данных (выделение групп строк). При этом можно задать несколько уровней группировки. Каждый уровень группировки оформляется как самостоятельный отчет со своими раз- делами заголовка и примечаниями (только колонтитулы, по понят- ным причинам, являются общими для всего отчета).
Если в запросе итоговые значения можно было получить только по самому внутреннему уровню группировки, то здесь итоговые зна- чения можно получить по каждому уровню группировки, да еще и использовать их в вычисляемых полях отчета для получения различ- ных относительных групповых параметров.
Очень полезным орудием в отчетах с группировкой является свойство данных поля Сумма с накоплением.
Далее рассмотрим основные особенности отчетов, учитывая выше сделанные замечания, на конкретном примере. Допустим, что требу- ется разработать отчет с информацией о ежедневных продажах това- ров за какой-то период времени. В отчете необходимо указывать день выписки оплаченного счета, название и количество проданного товара. Такой отчет может быть, в частности, необходим для учета товара на складах, а также в целях маркетинга. Назовем такой отчет «Сводка по продажам».
66
Для простоты описания будем считать, что все выписанные счета оплачены и товары по ним проданы (это ограничение в данном слу- чае совершенно не существенно).
На первый взгляд требуемую сводку легко получить с помощью простого запроса, если использовать в качестве источника данных поля «Выписан», «Название товара», «Количество» из соответст- вующих связанных таблиц «Товарные счета», «Номенклатура това- ров» и «Товары по счетам» (рис. 29).
Рис. 29. Запрос для отчета
В этом запросе используется группировка записей по двум полям «Выписан», «Название товара», и над выделенными полями выполняет- ся групповая операция сложения, обеспечивающая получение общего количества одноименного товара, проданного за день по разным счетам.
Недостаток такой реализации очевиден: не удается избежать дуб- лированных значений в поле «Выписан».
Теперь посмотрим, что получится, если с помощью Мастера по- строить отчет, используя в качестве источника данных те же поля указанных таблиц (рис. 30).
67
Рис. 30. Отчет, полученный непосредственной обработкой исходных таблиц
Здесь для удобства отображения значения поля «Выписан» пред- ставлены не в области данных отчета, а в заголовке группы (рис. 31).
При этом по этому же полю произведена группировка записей. Такой группировкой удается избежать дублирования дат, характер- ного для предыдущего способа, однако появляется другой недоста- ток – дублируются названия товаров, проданных в один и тот же
68
Рис. 31. Размещение данных в областях отчета
день по разным счетам, и не подсчитывается их общее количество (например, для детского мыла). Заметим, что использование свойств
Не выводить повторы и Сумма с накоплением применительно к таблицам «Номенклатура товаров» и «Товары по счетам» по очевид- ным причинам невозможно.
Чтобы устранить указанные недостатки отчета следует в качестве источника данных использовать не таблицы, а рассмотренный выше запрос.
В результате с помощью Мастера отчетов легко получается окончательный вариант, представленный на рис. 32.
69
Рис. 32. Отчет, полученный непосредственной обработкой дополнительного запроса
70
