На главную   На главную   Форумы Новости Документация Скачать Купить  
Регистрация  
Система Allegro
Oб Allegro Характеристики Пример конфигурации Документация База ошибок Развитие
Версия для печати К списку книг Вернуться к оглавлению Предыдущий параграф Последний! Параграф
Поиск по книге

Глава 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.

Запустим проект. Сделаем какой-нибудь запрос и выведем отчет. Вызовем «Предварительный просмотр» и попробуем распечатать отчет.





Пример создания склада в Allegro Наверх