Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Горев “Эффективная работа с СУБД”.pdf
Скачиваний:
208
Добавлен:
28.06.2014
Размер:
4.71 Mб
Скачать

converted to PDF by HupBaH9I

Параметр nExpression по умолчанию равен 80.

Число строк на листе будет определяться системной переменной

_ASCIIROWS = nExpression

Параметр nExpression по умолчанию равен 63.

Таким образом, для получения текстового файла на основе данных отчета можно, например, выполнить такой код:

_ASCIICOLS = 60

_ASCIIROWS = 40

REPORT FORM Rep_price TO FILE D:\INFO\PRICE_TEXT ASCII

Управление режимом печати

Все или по крайней мере большинство приложений Windows позволяют для каждого документа задавать индивидуальные условия печати: размеры полей, страничную ориентацию и т. д.

Естественно предположить, что так же поступает Visual FoxPro со своими документами, предназначенными для печати, - отчетами. В команде выполнения отчета REPORT FORM есть опция TO PRINTER PROMPT, которая обеспечивает вывод на экран диалогового окна для установки условий печати. Это окно представлено на рис. 11.15.

Рис. 11.15. Диалоговое окно установки принтера в Visual FoxPro Кстати, это окно можно вывести на экран и после выполнения функции

GETPRINTER()

Если по каким-то причинам появление этого окна в пользовательской программе нежелательно, то изменить режим печати можно и программно. Файл, в котором запоминается описание отчета, представляет собой стандартную таблицу Visual FoxPro. В первой записи этого

converted to PDF by HupBaH9I

файла в поле expr, которое имеет тип поля примечаний, в текстовом виде указывается информация об установках принтера.

Каждая установка записывается с новой строки, всего в этом поле может храниться до 16 различных установок:

DRIVER - имя маршрутизатора, используемого Windows для управления запросами на печать от клиентов. Он определяет, какой компонент спулера печати должен обрабатывать этот запрос.

DEVICE - имя принтера.

OUTPUT - имя порта, к которому присоединен принтер.

ORIENTATION - ориентация страницы.

PAPERSIZE - размер бумаги.

PAPERLENGTH - длина листа бумаги.

PAPERWIDTH - ширина листа бумаги.

SCALE - фактор масштаба документа.

COPIES - число копий, которое будет напечатано.

DEFAULTSOURCE - тип лотка для подачи бумаги.

PRINTQUALITY - горизонтальное разрешение принтера.

COLOR - определяет, будет использоваться цветная или монохромная печать.

DUPLEX - определяет, будет ли использоваться при печати двойной проход.

YRESOLUTION - вертикальное разрешение принтера.

TTOPTION - определяет режим печати шрифта TrueType.

COLLATE - определяет порядок вывода страниц при печати нескольких копий.

Пример содержания поля expr для отчета Propmod приведен на рис. 11.16.

Допустимые значения для перечисленных выше параметров можно получить с помощью функции

PRTINFO(nPrinterSetting [, cPrinterName])

которая возвращает текущие установки, сделанные в Windows.

Различные допустимые значения параметра nPrinterSetting приведены в следующем списке:

1 - ориентация страницы

2 - размер бумаги

3 - длина листа бумаги

4 - ширина листа бумаги

5 - масштаб документа

6 - число копий, которое будет напечатано при выводе

7 - тип лотка для подачи бумаги

8 - горизонтальное разрешение принтера

9 - цветная или монохромная печать

10 - перенасыщенная печать

11 - вертикальное разрешение принтера

12 - режим печати шрифта TrueType

13 - режим последовательной печати

Получить информацию о текущем принтере можно с помощью функции

APRINTERS(ArrayName)

которая записывает данные в указанный массив. Массив может до выполнения ункции не существовать. Например, команда:

APRINTERS(aCurrentPrn)

запишет в массив aCurrentPrn следующие данные: ACURRENTRRN

Pub

A

( 1, 1)

C "Epson LQ-100 ESC/P 2"

( 1, 2)

C "LPT1:"

Установку драйвера принтера можно проверить с помощью функции

PRINTSTATUS()

converted to PDF by HupBaH9I

Если драйвер установлен, она возвращает значение .T.. Обратите внимание, что эта функция не определяет готовность принтера к печати.

Как быть, если мы хотим напечатать лишь некоторые страницы из отчета? Нам поможет

команда

PRINTJOB

<<Команды вывода на печать>> ENDPRINTJOB

Она активизирует установки системных переменных, имеющих отношение к печати. Например, следующий фрагмент обеспечит вывод на печать вторую, третью и четвертые страницы отчета

Propmod.

_PBPAGE = 2

_PEPAGE = 4 PRINTJOB

REPORT FORM Propmod TO PRINTER ENDPRINTJOB

11.2. Создание отчетов в Access

В MS Access получать твердые копии результатов обработки данных можно путем распечатки таблиц, запросов и форм. Но при этом сложно или невозможно получить то качество и гибкость, которые предоставляет Конструктор отчета.

В этом параграфе мы расскажем, как создавать отчет с помощью Конструктора отчета и печатать его из программы Access.

Помимо вывода данных на печать, Конструктор отчета поможет провести, при установке соответствующих опций, предварительную сортировку и группировку данных, форматирование данных и подсчет промежуточных результатов без какого-либо программирования.

Для запуска Конструктора отчета в контейнере БД перейдите на вкладку Отчеты и нажмите кнопку Создать. В появившемся диалоговом окне в списке выберите пункт Конструктор. При загрузке Конструктора отчета вместе с ним загружается меню Конструктора отчета, а также панели инструментов для форматирования данных, выбора элементов управления и работы с Конструктором отчета.

Отчет для отображения данных из какого-либо набора должен иметь установленным свойством RecordSource (Источник данных). Обычно источник данных выбирается при первом вызове Конструктора отчета для создания конкретного отчета, когда диалог позволяет выбрать нужные таблицу или запрос из списка таблиц и запросов, находящихся в текущей базе данных. Если вам необходимо отображать данные из таблиц и запросов, находящихся в других базах данных Access или другого формата, то вам необходимо либо их присоединить, либо создать к ним сквозной запрос. Как это сделать, мы говорили в восьмой главе. Если вы не указали источник данных при создании отчета, то можете исправить положение с помощью окна Properties (Свойства), которое служит для установки свойств объектов в течение дальнейших изменений в отчете.

Элементы управления можно копировать и вставлять в другие отчеты, при этом элементы переносятся из отчета в отчет со всеми установлеными значениями свойств. Можно выделить и перенести целый набор объектов. Для выделения объекта вам достаточно, чтобы хотя бы часть его попала в область охвата указателя мыши, перемещаемого при нажатой левой кнопке. Для того чтобы установить эти параметры, используется диалоговое окно Параметры и вкладка Формы/Отчеты, как показано на рис. 11.17.

converted to PDF by HupBaH9I

Рис. 11.17.

Если вам необходимо несколько элементов, у которых много одинаковых свойств, создайте элемент, обладающий всеми общими для группы объектов свойствами, а затем дублируйте их с помощью команды Дублировать меню Правка.

В тех случаях, когда вам необходимо особо точно выстраивать элементы в отчете, используйте линейку, которая займет место вдоль верхней и левой границ окна Конструктора отчета. Для вывода Линейки используется команда с одноименным названием в меню Вид. При этом шкала измерений зависит от установок Windows. Поэтому, если вдруг шкала линейки окажется в дюймах, а не в сантиметрах, обратитесь к Панели Управления Windows и выберите установку Язык и Стандарты. В ней вы найдете вкладку, в которой можете установить метрическую систему исчисления. После этого, что очень приятно, не потребуется перезагрузка Access - установки будут приняты немедленно. Вместе с линейкой можно вывести сетку, воспользовавшись командой с одноименным названием из меню Вид.

В любой момент создания отчета вы можете перейти в режим предварительного просмотра и обратно, то есть для того, чтобы получить представление о внешнем виде отчета, вам необязательно его печатать. Режим предварительного просмотра позволяет увидеть отчет в том виде, в котором он будет выглядеть при печати.

При работе с отчетом и его элементами часто возникает необходимость в различных операциях форматирования. Например, выравнивание группы элементов по верхнему краю, приведение их размеров к одному значению, установка одинакового расстояния между элементами в группе. Для этого используется меню Формат, команды Выровнять, Размер,

Интервал по горизонтали и Интервал по вертикали. Если вам не нравится шрифт текстового поля и его размер, принятые по умолчанию для каждого нового объекта, вы можете создать объект с требуемыми свойствами и запомнить его в качестве стандартного. Для этого выделите созданный

вами будущий стандартный объект и выберите команду Задать стандартные свойства в меню

Формат.

В меню Формат имеется команда Автоформат, которая служит для быстрого выбора формата отчета из заранее предопределенных, в которых задаются шрифт, цвет и границы. При этом вы

можете с помощью кнопки Настройка переопределить любой встроенный формат или создать новый. Любой созданный отчет вы можете указать в качестве шаблона. Для этого используется вкладка Формы/Отчеты окна Настройки параметров.

Отчет в Access, так же как в Visual FoxPro, состоит из пяти частей: заголовок отчета, примечание отчета (итоги), верхний колонтитул, нижний колонтитул (или, другими словами, заголовок страницы и примечание страницы) и область данных. Все области, кроме области

converted to PDF by HupBaH9I

данных, вы можете выводить или не выводить в окне Конструктора отчетов. Каждая область имеет свой набор свойств и событий.

Рассмотрим пример создания отчета, который будет выводить сведения о наличие автомобилей на складе, группируя их по странам нахождения штаб-квартир и выводя сумму товара по каждой группе. При этом каждая отдельная группа должна выводиться своим цветом шрифта и иметь изображение национального флага рядом с названием страны. Для этого нам надо создать запрос, который мы назовем "Данные для отчета" и в который отберем четыре поля из трех таблиц.

Запрос будет выглядеть следующим образом, если его открыть в режиме SQL:

SELECT DISTINCTROW country.country_name, model.name_model, [automobile passenger car].date_issue, [automobile passenger car].cost FROM country INNER JOIN (firm INNER JOIN (model INNER JOIN [automobile passenger car] ON model.key_model = [automobile passenger

car].key_model) ON firm.key_firm = model.key_firm) ON country.key_country = firm.key_country;

Начав создание отчета, выберите в качестве источника данных запрос "Данные для отчета". Попав в режим Конструктора отчета, создайте себе комфортное окружение, разместив панели инструментов так, чтобы они всегда находились в одном месте и предоставляли быстрый доступ к нужным вам кнопкам. Оставьте в панели инструментов только те элементы, которые вы собираетесь часто использовать. Поработав с Конструктором отчета буквально одну-две недели, вы поймете, что держать кнопки для вывода-удаления Линейки и Сетки в панели инструментов Конструктора отчета смысла нет, так как это довольно редкая операция, к тому же ее можно выполнить из меню. А вот кнопка Копировать формат понадобится довольно часто.

Пример размещения инструментов и окон при работе с Конструктором приведен рис. 11.18.

Рис. 11.18.

После того как вы разместили все окна и панели инструментов, определите, какие из частей отчета вы собираетесь использовать. Если вам не нужен заголовок отчета, то отключите его вывод.

С помощью линеек, отделяющих одну часть отчета от другой, можно изменить размер каждой из областей. Для этого необходимо установить курсор мыши на линейку и, когда он примет форму перекрестия, нажать кнопку мыши и изменить размер перетаскиванием. Для размещения

converted to PDF by HupBaH9I

полей можно воспользоваться двумя способами. Первый - вывести список полей с помощью

команды Список полей меню Вид и обычным перетаскиванием графического образа поля в окно Конструктора отчета получить связанное текстовое поле. Второй - выбрать значок Поле в панели элементов и поместить элемент в окне Конструктора. При этом курсор примет вид, указывающий, какой элемент вы собираетесь разместить. Таким образом вы получите несвязанное поле. После этого необходимо указать поле в источнике, с которым вы хотите связать полученный элемент управления. Для этого измените свойство Источник данных (ControlSource). На этом этапе вы получите размещение полей и надписей, которое представлено на рис. 11.19.

Рис. 11.19.

Необходимо сгруппировать данные по полю country_name, так как в нашей задаче преследуется цель получить сводные данные по каждой автомобильной державе, автомобили которой мы продаем. Используем для этого команду Сортировка и Группировка. После ее выбора перед вами предстанет окно Сортировка и Группировка. Здесь в колонке Поле/Выражение мы выбираем необходимое нам поле, в нашем случае это country_name, во второй колонке указываем тип сортировки по этому полю - либо по возрастанию, либо по убыванию.

Для каждой записи в верхней части окна, в нижней части становятся доступными свойства группы. Это Заголовок и Примечание группы. Установив эти свойства в Да, вы получаете еще несколько областей в вашем отчете вместе с их свойствами и событиями.

Следующее свойство - группировка - может принимать различные значения в зависимости от типа поля, по которому проводится группировка. Для текстового поля таких значений может быть только два - По полному значению или По первым символам. Например, если вы хотите, чтобы в одну группу попали страны, названия которых начинаются на одну букву, то выберите группировку По первым символам, а следующее свойство Интервал оставьте равным 1.

Теперь Италия, Испания и Индия попадут в одну группу, если, конечно, фирма продает производимые в них автомобили. Для создаваемого отчета выбираем значение По полному значению, так как нам нужна группа с конкретной страной.

Последнее свойство - Не разрывать используется тогда, когда вы хотите, чтобы сведения о группе не разрывались, а размещались на одной странице. Бесспорно это очень удобно, но не экономно, так как даже если всего одно значение из группы не уместится на странице, вся группа целиком будет отпечатана на новой. Поэтому мы оставляем это свойство равным Нет.

Окно Конструктора отчета изменилось, его новый вид представлен на рис. 11.20, и, надеемся, то же самое вы наблюдаете на экранах своих компьютеров.

converted to PDF by HupBaH9I

Рис. 11.20.

После того, как у нас появилась область для группирования, мы разместили в ее заголовке поле country_name. Теперь при выводе отчета данные, соответствующие каждой новой стране, будут предваряться ее названием.

В примечании группы нам надо вывести сумму по полю цена для каждой страны. Для этого размещаем в примечании группы элемент управления поле, а в свойстве данные указываем следующее выражение:

= Sum(cost)

Обратите внимание, что выражение обязательно должно начинаться со знака равенства. В

противном случае Конструктор отчета воспримет его как параметр и потребует ввести его значение перед форматированием отчета. Так как мы разместили элемент управления в Примечании группы, то нам не надо заботиться о том, сумму по каким странам он будет вычислять. Сумма будет вычислена именно по группе. Теперь имеет смысл, выбрав команду Предварительный просмотр, вывести на экран макет нашего отчета. В окне предварительного просмотра он должен выглядеть так, как это представлено на рис. 11.21.

converted to PDF by HupBaH9I

Рис. 11.21.

Перед нами осталась последняя задача - вывести флаг каждой страны в заголовке группы и динамически изменить цвет шрифта у элемента управления, выводящего название страны в заголовке группы. Добавим в заголовок элемент управления Рисунок. Нас интересует его свойство Picture.

Элементы управления отчетов не имеют свойств событий, но эти свойства присутствуют у каждой из областей отчета, в том числе и у заголовков групп. Это свойства OnFormat, OnPrint, OnRetreat.

Событие Format (Форматирование) происходит при форматировании части отчета, к которой он относится, то есть на внутреннем уровне происходит установка свойств, которые мы задали при конструировании отчета. Имеет смысл иногда сделать эти свойства динамическими, чтобы

при форматировании каждой группы отдельные элементы получали разные свойства в зависимости от того, к какой группе они относятся.

Запишите следующий код для процедуры события форматирования заголовка группы:

Private Sub ЗаголовокГруппы0_Format(Cancel As Integer, FormatCount As Integer) Dim kolor As String

kolor = country_name

If Trim(kolor) = "Германия" Then Me!country_name.ForeColor = 255 risrep.Picture = "c:\project_book\Flggerm.ico"

End If

If Trim(kolor) = "Италия" Then Me!country_name.ForeColor = RGB(0, 255, 0) risrep.Picture = "c:\project_book\FlgItaly.ico"

End If

If Trim(kolor) = "США" Then Me!country_name.ForeColor = RGB(0, 0, 255) risrep.Picture = "c:\project_book\Flgusa01.ico"

End If End Sub

Теперь при выводе нашего отчета для предварительно просмотра будет изучаться значение элемента управления country_name и после этого устанавливаться свойство ForeColor (цвет шрифта) объекта country_name и свойство Picture объекта risrep, который в нашем случае является элементом управления для вывода значка с национальным флагом страны, являющейся заголовком группы. В итоге получается отчет, который представлен на рис. 11.22.

converted to PDF by HupBaH9I

Рис. 11.22.

Использование событий придаст вашим отчетам значительную гибкость, вы сможете использовать различные итоги в зависимости от ситуации, скрывать и выводить суммы, целые колонки полей. Создав один отчет, вы фактически получите несколько его вариантов.

Кроме этого, используя событие самого отчета например, Открытие, вы сможете легко

запретить нежелательному пользователю вывод вашего отчета на печать или его предварительный просмотр.

В заключение мы хотели бы дать вам следующие рекомендации при построении отчета в

Access:

максимально используйте мастеры построения отчетов;

создавайте свои автоформаты;

используйте шаблоны, если необходимо построить большое количество схожих отчетов;

используйте перекрестные запросы, когда попадаете в затруднительную ситуацию (например, если необходимо значения какого-нибудь поля сделать заголовками колонок);

используйте параметрические запросы, чтобы уменьшить время предварительной обработки и сэкономить бумагу, а тем самым и кислород для себя и своих потомков;

активно используйте свойства событий как самого отчета, так и его составных частей.

СУБД Access позволяет чрезвычайно легко организовать печать отчетов из формы. Для этого действительно достаточно нескольких щелчков мышью.

Откройте какую-либо форму в Конструкторе формы. Выделите на панели элементов кнопку "Кнопка". Щелкните мышкой на форме в месте, где должен находиться левый верхний угол будущей кнопки для печати отчета. Автоматически запустится Мастер "Создание кнопок". Выберите в списке категорий пункт "Работа с отчетом", а в списке действий - "Печать отчета". На следующем шаге из списка необходимо выбрать имя одного из созданных ранее отчетов. Далее останется выбрать значок, которым будет украшена кнопка, и назначить ей имя, например cmdPrint.

В форме появится кнопка, при нажатии на которую будет печататься требуемый отчет. Если в Конструкторе формы вы посмотрите на код, который будет выполняться при

наступлении события OnClick для этой кнопки (нажатие кнопки), то увидите следующий текст:

Sub cmdPrint_Click()

On Error GoTo Err_cmdPrint_Click Dim stDocName As String stDocName = "Account"

DoCmd.OpenReport stDocName, acNormal Exit_cmdPrint_Click:

converted to PDF by HupBaH9I

Exit Sub

Err_cmdPrint_Click:

MsgBox Err.Description

Resume Exit_cmdPrint_Click

End Sub

В данном примере для печати отчета используется метод OpenReport, который в программе выполняет макрокоманду "ОткрытьОтчет" (OpenReport). Этот метод имеет следующий синтаксис:

DoCmd.OpenReport ИмяОтчета [, Режим] [, ИмяФайла][,Условие]

Аргумент ИмяОтчета представлят имя отчета, хранящегося в текущей базе данных.

Для задания значения аргумента Режим может использоваться одна из следующих встроенных констант:

acNormal - печать отчета (по умолчанию);

acDesign - вызов Конструктора отчета;

acPreview - вывод отчета в окно предварительного просмотра.

Аргумент ИмяФайла позволяет задать имя запроса, хранящегося в текущей базе данных, с помощью которого будут подготовлены данные для печати отчета.

Аргумент Условие позволяет задать допустимое предложение SQL WHERE без ключевого слова

WHERE

Необходимо отметить, что в Access мы можем легко вывести на печать не только отчет, но и любой активный объект, например форму или таблицу. Для этого используется метод PrintOut, который выполняет макрокоманду "Печать" (PrintOut). Синтаксис этого метода имеет следующий вид:

DoCmd.PrintOut [Диапазон] [, СоСтраницы, ПоСтраницу] [, Качество] [, ЧислоКопий] [, РазобратьКопии]

В качестве аргумента Диапазон может использоваться одна из следующих встроенных констант:

acPrintAll - для печати всего отчета (по умолчанию);

acSelection - для печати фрагмента отчета;

acPages - для печати указанных страниц. При этом должны быть указаны аргументы

СоСтраницы и ПоСтраницу.

Для задания значения аргумента Качество должна использоваться одна из следующих встроенных констант:

acHigh - высокое качество печати (разрешение принтера) - по умолчанию;

acMedium - среднее качество печати;

acLow - низкое качество печати;

acDraft - печать черновика.

Число печатаемых копий отчета задается аргументом ЧислоКопий которое по умолчанию равно

1.

Задание для аргумента РазобратьКопии значения, равного True(-1), определяет печать с раскладкой по копиям, а False (0) - печать без раскладки. Если оставить данный аргумент пустым, будет принято значение по умолчанию (True).

Напомним, что в Access необязательный аргумент посреди списка аргументов разрешается пропустить, однако при этом необходимо ввести запятую, отделяющую пропущенный аргумент. Если опускаются один или несколько последних аргументов, вводить запятые вслед за последним указанным аргументом не требуется.

Например, для вывода формы на принтер мы можем создать в ней специальную кнопку, для события OnClick которой запишем следующий код, при выполнении которого будут напечатаны три экземпляра отчета:

Private Sub cmdForm_Click()

DoCmd.PrintOut(acPrintAll,,3)

Соседние файлы в предмете Программирование на Delphi