Вопросы создания отчетов нами уже обсуждались. В этой главе рассмотрим
использование при создании отчетов представлений данных, создание отчетов для таблиц, имеющих отношение "один-ко-многим", а также конструирование этикеток.
Использование в отчетах представлений данных
В главе 14 мы познакомились с представлениями данных, содержащими результат выборки из базовых таблиц базы данных. Их удобно использовать при создании отчетов, т. к. задавая параметры для представлений данных, можно печатать отчеты, содержащие информацию за определенный интервал времени, о конкретном клиенте и т. п.
Рассмотрим создание отчета, данные для которого находятся в представлении данных, содержащем итоговые суммы продаж по клиентам.
Откройте проект Sales.
Для создания нового отчета откройте окно конструктора отчетов.
Откройте окно Data Environment (Среда окружения), выполнив команду Environment (Окружение) из меню View (Вид) или выбрав команду Data Environment (Среда окружения) всплывающего меню.
Для добавления представления данных в среду окружения выполните команду Add (Добавить) из меню Data Environment (Среда окружения).
В открывшемся диалоговом окне Add Table or View (Добавить таблицу или
представление данных) установите опцию View (Представление данных) и выберите из списка представление данных sumcust.
Закройте окно Data Environment (Среда окружения).
Создайте стандартный отчет, используя команду Quick Report (Стандартный отчет) из меню Report (Отчет). При создании отчета воспользуйтесь
размещением по строкам и выберите все поля представления данных.
Скорректируйте заголовки полей в полосе Page Header (Верхний колонтитул) отчета.
Добавьте в отчет группировку по коду клиента, воспользовавшись командой Data Grouping (Группировка данных) из меню Report (Отчет).
В полосе Group Footer (Группа снизу) создайте итоговое поле, которое будет суммировать продажи по каждому клиенту.
Добавьте в отчет полосы для размещения заголовка и итоговой части отчета, выполнив команду Title/Summary (Титул/Итоги) из меню Report (Отчет).
В заголовке отчета введите текст Стоимость продаж по клиентам.
Этикетки
На практике часто возникает необходимость в создании отчетов, предназначенных для рассылки информации рекламного характера потенциальным клиентам или рассылки сведений о результатах деятельности предприятия за отчетный период. В Visual FoxPro для этих целей имеется специальный тип отчетов и соответствующий мастер для создания почтовых этикеток. В данном разделе мы рассмотрим создание этикеток, как с помощью мастера, так и в окне конструктора этикеток.
Использование мастера при создании этикеток
Сначала рассмотрим создание этикетки с помощью мастера. Выполните следующие действия:
Откройте созданный проект.
Выберите вкладку Documents (Документы).
Установите курсор в группу Labels (Этикетки) и нажмите кнопку New (Новый) окна конструктора проекта.
Открывается диалоговое окно New Label (Новая этикетка). Выберите в нем опцию Label Wizard (Мастер этикетки).
Совет
Для запуска мастера создания этикеток вы можете также в меню Tools (Сервис) выбрать команду Wizards (Мастера), а затем в открывшемся меню — опцию Label (Этикетка).
Запускается мастер по созданию почтовой этикетки. В его первом диалоговом окне выберите источник данных (рис. 17.1), т. е. укажите таблицу, из которой будут выбираться данные, и нажмите кнопку Next (Далее).
На втором шаге из предложенного списка наиболее часто используемых размеров этикеток выберите подходящий (рис. 17.2). Столбец Avery содержит наименования этикеток. В столбце Dimensions (Размеры) отображается
размер этикетки, а в столбце Columns (Колонки) — количество колонок этикеток,
помещаемых на странице. По умолчанию размер этикеток указывается в дюймах, а при установке опции Metric (Размерность) — в миллиметрах.
В этот список можно добавить новые размеры этикеток. Для этого нажмите кнопку New Label (Новая этикетка). Открывается диалоговое окно Custom Labels (Пользовательские этикетки) (рис. 17.3) со списком пользовательских этикеток. В этом окне можно ввести новые размеры этикеток или изменить существующие.
Рис. 17.1. Выбор источника данных для создания этикеток
Рис. 17.2. Выбор типа этикетки
Для создания новой или редактирования существующей этикетки необходимо нажать кнопку New (Новый) или Edit (Редактировать) соответственно. При этом открывается диалоговое окно New Label Definition (Определение размеров новой этикетки) (рис. 17.4), позволяющее ввести размеры этикетки или отредактировать установленные. Введите на схеме размеры этикетки, введите в поле Label Name (Наименование этикетки) наименование этикетки и нажмите кнопку Add (Добавить) или Update (Обновить) для добавления или изменения этикетки соответственно.
Рис. 17.3. Диалоговое окно Custom Labels
со списком пользовательских размеров
Рис. 17.4. Диалоговое окно New Label Definition
для определения нового размера этикетки
На третьем шаге создания этикетки необходимо расположить поля,
знаки пунктуации (точка, запятая, дефис, пробел, двоеточие), сформировав текст
этикетки. Этикетка заполняется последовательно, поэтому перед переносом в нее
объектов тщательно спланируйте их размещение в этикетке. Для формирования адреса выполните следующие действия:
перенесите из списка Available fields (Имеющиеся поля) в список Selected fields (Выбранные поля) поле, содержащее почтовый индекс. Для этого дважды щелкните на поле или нажмите кнопку со стрелкой;
чтобы разместить запятую, нажмите кнопку с изображением запятой;
для размещения пробела перед названием страны нажмите кнопку Space (Пробел);
перенесите поле, содержащее название страны;
если необходимо расположить данные с новой строки, нажмите кнопку с изображением изогнутой стрелки;
аналогично расположите остальные поля этикетки.
Разместив все необходимые поля (рис. 17.5), нажмите кнопку Next (Далее) для перехода к следующему шагу.
Рис. 17.5. Расположение объектов в этикетке
Теперь следует задать порядок сортировки данных (рис. 17.6). Перенесите из списка Available fields or index tag (Имеющиеся поля и индексы) в список Selected fields (Выбранные поля) поля или индексы, по которым хотите упорядочить этикетки. Нажмите кнопку Next (Далее).
В последнем окне мастера укажите вариант завершающих действий (сохранение этикетки, сохранение и открытие ее в конструкторе этикеток или сохранение и печать), выбрав соответствующую опцию.
При выборе второй опции созданная этикетка сохраняется на диске и открывается в окне конструктора этикеток (рис. 17.7). На рис. 17.8 показана созданная с помощью мастера этикетка в окне предварительного просмотра.
Совет
В том случае, если при создании этикеток вы хотите использовать вычисляемые поля для объединения полей исходной таблицы, отображения инициалов вместо полного имени и отчества и т. п., предварительно создайте представление данных, содержащее всю необходимую информацию в том виде, в каком нужно, и используйте его при создании этикеток с помощью мастера.
Рис. 17.6. Определение порядка сортировки
Рис. 17.7. Созданная этикетка в окне конструктора этикеток
Рис. 17.8. Созданная этикетка в окне просмотра
Создание этикетки
с помощью конструктора
При создании сложных этикеток вы можете использовать конструктор этикеток. Для его открытия выполните одно из следующих действий.
В меню File (Файл) выберите команду New (Новый). В открывшемся диалоговом окне New (Новый) установите опцию Label (Этикетка) и нажмите кнопку New file (Новый файл).
Нажмите кнопку New (Новый), предварительно выбрав на вкладке Documents (Документы) в окне проекта группу Labels
(Этикетки) и в открывшемся диалоговом окне New Label (Новая этикетка) выберите опцию New Label (Новая этикетка).
Открывается диалоговое окно New Label (Новая этикетка) (рис. 17.9), где в табличном виде находится список наиболее часто используемых этикеток. Столбцы таблицы имеют следующее назначение:
Avery No — наименование (номер) этикетки;
Height — высота этикетки;
Width — ширина этикетки;
Columns — число колонок.
Выберите из предложенных вариантов требуемый тип этикетки и нажмите кнопку ОК. На экране откроется окно конструктора этикеток (рис. 17.10).
Рис. 17.9. Диалоговое окно New Label
Рис. 17.10. Окно конструктора этикеток
Окно конструктора этикеток выглядит примерно так же, как окно конструктора отчетов. Отличие заключается в том, что для этикетки заданы размеры
отчета и количество колонок в отчете. В остальном создание этикетки аналогично созданию отчета.
Рассмотрим создание этикетки на примере подготовки адресов для рассылки корреспонденции клиентам, используя информацию из таблицы customer. Этот пример аналогичен примеру создания многоколоночного отчета, описание которого дано в главе 8.
Основное преимущество этикеток, по сравнению с отчетами, состоит в автоматическом
выборе размеров этикетки и расстояния между ними. Нет необходимости
самостоятельно рассчитывать размер получаемого отчета и заботиться о том, чтобы он поместился на бумаге. При печати на обычной бумаге это преимущество не вполне очевидно, но как только вы начнете использовать для этих целей специальные листы с наклейками, вы ощутите удобство выбора типа наклейки.
Для создания этикетки выполните следующие действия:
В меню File (Файл) выберите команду New (Новый). В открывшемся диалоговом окне New (Новый) установите опцию Label (Этикетка) и нажмите кнопку New file (Новый файл).
В открывшемся диалоговом окне New Label (Новая этикетка), содержащем
список типов наиболее часто используемых этикеток, выберите этикетку такого типа, которая удовлетворяет вашим требованиям.
Откройте окно Data Environment (Среда окружения) и добавьте в него таблицу Customer.
Воспользовавшись командой Quick Report (Стандартный отчет) из меню Report
(Отчет), перенесите в этикетку поля, содержащие почтовый индекс, страну проживания клиента, его адрес, фамилию, имя и отчество. При этом выберите размещение полей по строкам.
В окне конструктора разместите поля так, как это принято для почтовых этикеток в конкретной стране. В рассматриваемом примере будем считать, что почтовые этикетки изготавливаются для рассылки в пределах СНГ, поэтому расположим их так, как показано на рис. 17.11.
Просмотрите созданные этикетки в окне просмотра. В результате вы увидите отчет, показанный на рис. 17.12.
Замечание
В том случае, если вы хотите изменить количество этикеток, печатаемых на одной странице, или порядок их расположения, выберите в меню File (Файл) команду Page Setup (Разметка страницы). Затем в открывшемся диалоговом окне Page Setup (Разметка страницы) установите новые значения параметров, как при работе с обычным отчетом.
Сохраните созданную этикетку. Для этого в меню File (Файл) выберите команду Save as (Сохранить как).
Рис. 17.11. Расположение полей при создании почтовых этикеток
Рис. 17.12. Просмотр почтовых этикеток
Если работа над этикетками закончена, напечатайте их, воспользовавшись командой Print (Печать) из меню File (Файл).
Использование в отчетах отношения "один-ко-многим"
Visual FoxPro поддерживает в отчетах отношение "один-ко-многим". Эта возможность
упрощает отображение в отчете иерархических данных. Добавим в форму просмотра
телефонов клиентов и их заказов, созданную в главе 75, средства для печати
телефонов клиента, информация о котором отображена в форме. Для этого в форме
расположим кнопку для печати телефонов (рис. 17.13) и создадим соответствующий отчет.
Откройте Проект Sales.
Откройте для модификации форму Клиенты и продажи.
Добавьте в форму кнопку с надписью Печать.
Откройте окно свойств кнопки. Выберите метод click (Нажатие) и введите в окне процедуры следующий текст программы вызова отчета:
curiCdCustomer=icdCustomer
REPORT FORM RepCust TO PRINTER;
FOR PhonCust.icdCustomer=curiCdCustomer
SELECT PhonCust
SET SKIP TO
select Customer
ThisForm.Refresh()
Откройте новое окно конструктора отчетов и добавьте в окно Data Environment (Среда окружения) таблицы customer и PhonCust.
Главной таблицей отчета является Customer, а подчиненной по отношению к ней — таблица PhonCust. Установите связи между этими таблицами и определите свойство опетомапу (Один-ко-многим), выбрав значение True (Истина) (рис. 17.14).
В заголовке отчета расположите его название.
Добавьте в отчет группировку по коду клиента.
В полосе Group Header (Группа сверху) разместите поля из таблицы customer и надписи к ним, а также надписи к полям из таблицы phoncust.
В полосе Detail (Детали) разместите поля из таблицы Phoncust.
Созданный отчет представлен на рис. 17.15. Сохраните отчет под именем RepCust.
Запустите на выполнение форму Клиенты и продажи. Для печати телефонов клиента, на котором установлен курсор, нажмите кнопку Печать телефонов. На рис. 17.16 приведен вариант просмотра отчета на экране.
Рис. 17.13. Форма Клиенты и продажи
Рис. 17.14. Установка отношения "один-ко-многим"
Рис. 17.15. Отчет для печати телефонов клиентов
Рис. 17.16. Отчет для печати телефонов клиентов в окне просмотра
Знаете ли Вы, почему "черные дыры" - фикция? Согласно релятивистской мифологии, "чёрная дыра - это область в пространстве-времени, гравитационное притяжение которой настолько велико, что покинуть её не могут даже объекты, движущиеся со скоростью света (в том числе и кванты самого света). Граница этой области называется горизонтом событий, а её характерный размер - гравитационным радиусом. В простейшем случае сферически симметричной чёрной дыры он равен радиусу Шварцшильда". На самом деле миф о черных дырах есть порождение мифа о фотоне - пушечном ядре. Этот миф родился еще в античные времена. Математическое развитие он получил в трудах Исаака Ньютона в виде корпускулярной теории света. Корпускуле света приписывалась масса. Из этого следовало, что при высоких ускорениях свободного падения возможен поворот траектории луча света вспять, по параболе, как это происходит с пушечным ядром в гравитационном поле Земли. Отсюда родились сказки о "радиусе Шварцшильда", "черных дырах Хокинга" и прочих безудержных фантазиях пропагандистов релятивизма. Впрочем, эти сказки несколько древнее. В 1795 году математик Пьер Симон Лаплас писал: "Если бы диаметр светящейся звезды с той же плотностью, что и Земля, в 250 раз превосходил бы диаметр Солнца, то вследствие притяжения звезды ни один из испущенных ею лучей не смог бы дойти до нас; следовательно, не исключено, что самые большие из светящихся тел по этой причине являются невидимыми." [цитата по Брагинский В.Б., Полнарёв А. Г. Удивительная гравитация. - М., Наука, 1985] Однако, как выяснилось в 20-м веке, фотон не обладает массой и не может взаимодействовать с гравитационным полем как весомое вещество. Фотон - это квантованная электромагнитная волна, то есть даже не объект, а процесс. А процессы не могут иметь веса, так как они не являются вещественными объектами. Это всего-лишь движение некоторой среды. (сравните с аналогами: движение воды, движение воздуха, колебания почвы). Подробнее читайте в FAQ по эфирной физике.