Распечатать страницу

Проектировщик отчета Visual FoxPro

« Назад

Создает макет отчета. В качестве источников данных могут быть использованы одна таблица или две связанные таблицы.

Откроем файл d:\AuthorsAndBooks.qpr – первый запрос, созданный средствами проектировщика запроса, и направим вывод в таблицу d:\AuthorsAndBooks.dbf (фрагмент таблицы см. на рис. 12.6). Отобразим эту таблицу в виде отчета.

Откроем проектировщик отчета (команда меню File – New – переключатель Report – New File). Сделаем быстрый отчет: выполним команду меню Report – Quick Report, выберем затем таблицу d:\AuthorsAndBooks.dbf, в появившемся диалоге Quick Report (рис. 12.21) сбросим флажок Add alias и нажмем на кнопку Fields.

180.1.-Диалог-Quick-Report

Рис. 12.21. Диалог Quick Report

В открывшемся диалоге Field Picker (рис. 12.22) выберем все поля и нажмем на OK сначала в Field Picker, а затем в диалоге Quick Report.

180.2.-Выбраны-все-поля

Рис. 12.22. Выбраны все поля

Замечание. Все поля будут выбраны, если нажать OK в диалоге Quick Report, минуя Field Picker.

Проектировщик отчета создаст приведенный на рис. 12.23 макет.

180.3.-Quick-Report-макет

Рис. 12.23. Quick Report-макет

Сохраним его в файле d:\AuthorsAndBooks.frx.

В макете 3 полосы:

  • вершина страницы (Page Header);

  • детали (Detail);

  • основание страницы (Page Footer).

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

Если просмотреть отчет, выполнив, например, команду меню View – Preview или употребив иконку  стандартной панели инструментов, то получим результат, фрагмент которого приведен на рис. 12.24.

180.4.-Просмотр-быстрого-отчета

Рис. 12.24. Просмотр быстрого отчета

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

Чтобы ввести заголовок, а заодно и полосу для итогов, откроем вкладку Optional Bands окна редактирования свойств отчета (команда меню Report – Properties) и установим на ней флажки Report has title band и Report has summary band (рис. 12.25); остальные флажки оставим сброшенными.

180.5.-Задание-полос-для-заголовка-и-итогов-отчета

Рис. 12.25. Задание полос для заголовка и итогов отчета

В полосу заголовка, воспользовавшись, например, иконкой  панели инструментов Report Controls, добавим текст "Авторы и книги". Также перенесем, оперируя мышкой, в эту полосу и поле с функцией DATE( ) из основания страницы. Кроме того, заключим дату в скобки, заменив функцию DATE( ) на следующее выражение:

"(" + Dtoc(Date( ))+ ")"

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

Устраним теперь повторения фамилий авторов. Для этого дважды ударим мышью по полю Author и в окне редактирования свойств поля (рис. 12.26) на вкладке Print When установим флажок No (рис. 12.27) в группе кнопок Print repeated values (печатать повторяющиеся значения).

180.6.-Фрагмент-диалога-Field-Properties

Рис. 12.26. Фрагмент диалога Field Properties

180.7.-Фрагмент-вкладки-Print-When

Рис. 12.27. Фрагмент вкладки Print When

В основании страницы удалим надпись Page, а поле _PAGENO поместим в центре полосы и, дважды ударив по нему мышью, в окне редактирования свойств поля _PAGENO введем выражение

"– " + Transform(_PAGENO) + " –"

которое обеспечит вывод номера страницы в формате "– № –".

В новую полосу для итогов поместим копию поля Price и обеспечим в нем вывод суммарного значения величин столбца "Цена". Для этого откроем окно редактирования свойств поля Price, расположенного в полосе итогов, выберем в окне вкладку Calculation и приведем ее в соответствии с рис. 12.28.

180.8.-Задание-вычисляемого-поля

Рис. 12.28. Задание вычисляемого поля

Перед полем Price полосы итогов отчета добавим надпись "Всего книг на сумму:".

После перечисленных модификаций, а также изменений геометрии элементов и выбора подходящих шрифтов для надписей и полей макет отчета примет приведенный на рис. 12.29 вид.

180.9.-Новый-вариант-макета-диалога

Рис. 12.29. Новый вариант макета диалога

Просмотр отчета (иконка ) покажет более приемлемый результат (рис. 12.30).

180.10.-Вариант-отчета-Авторы-и-книги

Рис. 12.30. Вариант отчета "Авторы и книги"

Рассмотрим вариант, в котором имя и отчество автора заменяются инициалами. Для его реализации создадим функцию ShortAuthor( ), получающую поле Author, и возвращающую фамилию автора с инициалами:

function ShortAuthor(Author)

                                            if Empty(Author) then

                                               return ""

                                            endif

                                            && Число слов в строке

                                            nWords = GetWordCount(Author)

                                            && Фамилию берем полностью

                                            sAu = GetWordNum(Author, 1)

                                            for k = 2 to nWords

                                               && Получаем очередное слово, формируем инициал

                                               && и прибавляем его после пробела к строке sAu

                                               sAu = sAu + " " + Left(GetWordNum(Author, k), 1) + "."

                                            next

                                            && Возвращаем фамилию с инициалами

                                            return sAu

endFunc

Функцию сохраним, например, в файле d:\ShortAuthor.prg. Поле Author макета заменим на поле с выражением ShortAuthor(Author) (рис. 12.31).

180.11.-Преобразованное-поле-Author

Рис. 12.31. Преобразованное поле Author

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

set procedure to d:\ShortAuthor.prg additive

report form d:\AuthorsAndBooks preview

release procedure d:\ShortAuthor.prg

Как вариант, функцию ShortAuthor( ) можно разместить в файле с командой REPORT FORM:

report form d:\AuthorsAndBooks preview 

function ShortAuthor(Author)

                                            …

endFunc

Фрагмент результата приведен на рис. 12.32.

180.12.-Две-строки-табличной-части-отчета

Рис. 12.32. Две строки табличной части отчета

Недостаток такой организации отчета в том, что его нельзя запускать, если не загружена функция ShortAuthor( ).

Рассмотрим теперь вариант отчета с группировкой данных, поместив дату ввода и фамилию автора перед списком его книг. После списка книг автора выведем сумму значений в столбце "Цена".

Откроем окно редактирования свойств отчета, выберем вкладку Data Grouping и оформим ее в соответствии с рис. 12.33.

180.13.-Группировка-по-полю-Author

Рис. 12.33. Группировка по полю Author

Раздвинем появившуюся в макете отчета полосу Group Header 1:author и перенесем в нее заголовки "Автор" и "Дата ввода", а также соответствующие им поля из полосы Detail. Перед каждым заголовком проставим двоеточие, воспользовавшись окном редактирования свойств надписи (рис. 12.34).

180.14.-Окно-редактирования-свойств-надписи

Рис. 12.34. Окно редактирования свойств надписи

Раздвинем далее полосу Group Footer 1:author и поместим в нее поле Price (рис. 12.35), например копируя существующее или пользуясь иконкой  панели инструментов Report Controls.

180.15.-Макет-диалога-с-группировкой-данных

Рис. 12.35. Макет диалога с группировкой данных

Оформим Price как вычисляемое поле и укажем для него функцию Sum( ) (рис. 12.36).

180.16.-Поле-Price-в-полосе-Group-Footer1Author

Рис. 12.36. Поле Price в полосе Group Footer 1:Author будет отображать общую стоимость книг автора

Важно, чтобы в списке Reset base on находилось название созданной группы Author. Это будет означать, что в каждой новой группе суммирование начинается с нуля, что, собственно, нам и нужно для получения верного результата.

Прочие изменения можно воспроизвести по вышеприведенному макету (см. рис. 12.35). Выполнив отчет, получим результат, фрагмент которого приведен на рис. 12.37.

180.17.-Фрагмент-отчета-с-группировкой-по-полю-Author-результата-запроса

Рис. 12.37. Фрагмент отчета с группировкой по полю Author результата запроса