Глава 10. СОЗДАЕМ ОТЧЕТЫ
Отчет о движении товаров, экспорт в Excel
Включим режим «Дизайнер» и откроем проект goods_
flow_project.ipr.
Добавим компонент xlReport с палитры Print и вызовем в Инспекторе
объектов редактор свойства DataSources. В появившийся список источников данных
добавим новый элемент и назначим ему свойства:
Свойство |
Значение |
DataSet |
qryReport |
Alias |
REPORT |
Range |
range1 |
Закроем редактор источников данных и дважды щелкнем на компоненте xlReport1
, чтобы вызвать на редактирование новый шаблон документа Excel.
Удалим в нем лишние листы, оставив только «Лист1
». В самой верхней левой ячейке листа напишем опцию OnlyValues
. Ниже расположим заголовки будущих колонок отчета, оставив самую
левую колонку пустой. Ниже заголовков выделим две строки (
захватив левую пустую колонку) и обозначим выделенные ячейки,
как регион range1.
Сохраним шаблон под названием goods_flow_report.
xls и укажем название этого файла в свойстве XLSTemplate компонента
xlReport1. Введем в ячейки первой строки региона range1 названия
полей отчета в таком виде:
Вид товара |
=REPORT_GOODS_KIND_NAME |
Марка |
=REPORT_GOODS_MARK_NAME |
Артикул |
=REPORT_ARTICLE |
Начальный остаток, USD |
=REPORT_A |
Начальный остаток, Единиц |
=REPORT_Q |
Приход, USD |
=REPORT_AD |
Приход, Единиц |
=REPORT_QD |
Расход, USD |
=REPORT_AC |
Расход, Единиц |
=REPORT_QC |
Конечный остаток, USD |
=REPORT_CA |
Конечный остаток, Единиц |
=REPORT_CQ |
Средняя себестоимость |
=REPORT_COST |
Опт, Цена |
=REPORT_PRICE_W |
Опт, Наценка,% |
=REPORT_W_RATE |
Розница, Цена |
=REPORT_PRICE_R |
Розница, Наценка, % |
=REPORT_R_RATE |
Название каждого поля отчета состоит из псевдонима источника данных (
свойство Alias) и имени поля источнике данных, разделенных
знаком подчеркивания «_».
Для того чтобы не загромождать отчет нулями, установим формат
# ### для всех числовых полей отчета. В колонках
USD во второй строке региона введем слово sum. Компонент
xlReport1 выведет в эти ячейки суммы соответствующих колонок. Для
всех полей отчета, кроме «Вида товара» и
полей USD, зададим в формате ячеек выравнивание по горизонтали
по центру.
Вызовем «Параметры страницы» шаблона. На закладке «
страница» выберем альбомную ориентацию. На закладке «Колонтитулы
» выберем верхний колонтитул «Страница 1 из ?». На
закладке «Лист» укажем заголовки колонок отчета в качестве
сквозных строк.
Вызовем предварительный просмотр страницы и раздвинем поля так, чтобы
отчет помещался в лист A4. Сохраним шаблон и закроем
Excel.
Добавим на форму GoodsFlowForm кнопку BitBtn с палитры Additional.
Свойство |
Значение |
Caption |
Отчет |
Name |
btnReport |
Загрузим в свойство Glyph пиктограмму Excel.
Создадим обработчик события OnClick для кнопки btnReprt и впишем в
него такой текст:
procedure TGoodsFlowForm.btnReportClick(Sender: TObject);
begin
xlReport1.Report;
end;
Создадим обработчик события OnProgress для компонента xlReport1 и впишем в
него такой текст:
procedure TGoodsFlowForm.xlReport1Progress(Report: TxlReport; const Position, Max: Integer);
begin
if Position = 0 then
StatusBarDisplay(clBlack, Position, 0, Max, '', '', '')
else
StatusBarDisplay(clLime, Position, 0, Max, '', 'Экспорт в Excel...', '');
end;
Запустим проект. Выберем какие-то виды и марки
товаров. Нажмем кнопку «Запрос». Затем нажмем кнопку
«Отчет». Должен появиться документ Excel примерно такого вида
:
Наш отчет практически готов. Осталось вывести признаки фильтрации данных
в отчет.
Добавим в секцию private класса формы объявление функции GetFilterDescription:
private
{ Private declarations }
function GetFilterString(ListBox: TRxCheckListBox;
Query: TIBQuery; const FieldName: string): string;
function GetFilterDescription(ListBox: TRxCheckListBox): string;
public
{ Public declarations }
end;
Эта функция будет возвращать нам перечисленные через запятую признаки фильтрации
для вывода в отчет. Добавим в секцию implementation модуля
реализацию этой функции:
{Сборка описания фильтрации для отчета}
function TGoodsFlowForm.GetFilterDescription(ListBox: TRxCheckListBox): string;
var
i: integer;
begin
Result := '';
with ListBox do //сканируем список
for i := 0 to Items.Count - 1 do
if Checked[i] then //если соответствующий элемент в списке отмечен птичкой
begin
if Result <> '' then Result := Result + ', '; //добавляем запятую
Result := Result + ListBox.Items[i]; //добавляем в строку
end;
end;
Вызовем редактор свойства Params компонента xlReport1. Добавим параметры под
названиями:
STOCKS, KINDS, MARKS, DATES
Изменим обработчик кнопки btnReport, добавив в него команды,
выделенные здесь жирным шрифтом:
procedure TGoodsFlowForm.btnReportClick(Sender: TObject);
begin
xlReport1.ParamByName('STOCKS').Value := 'Склады: ' + GetFilterDescription(clbStock);
xlReport1.ParamByName('KINDS').Value := 'Виды товара: ' + GetFilterDescription(clbKind);
xlReport1.ParamByName('MARKS').Value := 'Марки: ' + GetFilterDescription(clbMark);
xlReport1.ParamByName('DATES').Value :=
'Период: ' + DateToStr(DateEdit1.Date) + '..' + DateToStr(DateEdit2.Date);
xlReport1.Report;
end;
Теперь дважды щелкнем на компоненте xlReport1 для вызова шаблона на
редактирование.
Добавим пять рядов ячеек вверху отчета. Объединим ячейки в
каждом ряду по всей ширине отчета. В верхней строке
напишем «Отчет о движении товаров» крупным шрифтом.
В остальных рядах напишем:
=XLRParams_STOCKS
=XLRParams_KINDS
=XLRParams_MARKS
=XLRParams_DATES
Придадим выравнивание влево и жирный шрифт. Сохраним шаблон и
закроем Excel.
Запустим проект. Сделаем какой-нибудь запрос и выведем
отчет. Вызовем «Предварительный просмотр» и попробуем распечатать
отчет.
|