Welcome, Guest. Please login or register.
Did you miss your activation email?

Author Topic: Порядок печати страниц отчета  (Read 2120 times)

JohnCS

  • Newbie
  • *
  • Posts: 20
    • View Profile
Порядок печати страниц отчета
« on: February 27, 2017, 02:54:24 PM »
Добрый день.
Как можно реализовать печать многостраничного отчета в порядке страниц?
Поясню:
Есть несколько записей из БД.
Есть несколько страниц отчета.
Нужно для каждой записи напечатать все страницы отчета по порядку, т.е. для первой записи все страницы, потом для 2-й и т.д.

Версия 1.4

Subst

  • Sr. Member
  • ****
  • Posts: 444
    • View Profile
Re: Порядок печати страниц отчета
« Reply #1 on: February 28, 2017, 03:11:36 AM »
Может я неверно вопрос понял, но не вижу в чем трудность.

Создаете многостраничный шаблон отчета, в программе определяете callbackDataSource, и слот, который соединияете с сигналом getCallbackData для этого источника данных. Ниже из программы пример

где-то при инициализации экземпляра LimeReport

m_studentDataSource=m_report->dataManager()->createCallbackDatasouce("students");
connect(m_studentDataSource,SIGNAL(getCallbackData(LimeReport::CallbackInfo,QVariant&)),this,SLOT(getStudentCallbackData(LimeReport::CallbackInfo,QVariant&)));
 connect(m_studentDataSource,SIGNAL(changePos(LimeReport::CallbackInfo::ChangePosType,bool&)),this,SLOT(changeStudentPos(LimeReport::CallbackInfo::ChangePosType,bool&)));

сами методы

void TMainWnd::getStudentCallbackData(LimeReport::CallbackInfo info, QVariant &value)
 {
 switch (info.dataType)
  {
  case LimeReport::CallbackInfo::IsEmpty:
   {
   value=(m_selected.size()==0);
   break;
   }
  case LimeReport::CallbackInfo::HasNext:
   {
   value=(m_selected.size() && m_current<m_selected.size()-1 && m_current>-1);
   break;
   }
  case LimeReport::CallbackInfo::RowCount:
   {
   value=m_selected.size();
   break;
   }
  case LimeReport::CallbackInfo::ColumnCount:
   {
   value=m_studentModel->columnCount();
   break;
   }
  case LimeReport::CallbackInfo::ColumnHeaderData:
   {
   value=m_studentModel->record().fieldName(info.index);
   break;
   }
  case LimeReport::CallbackInfo::ColumnData:
   {
   if (m_selected.size())
    {
    QSqlRecord record=m_studentModel->record(m_selected.at(m_current).row());
    value=record.value(info.columnName);
    }
   else
    value=QVariant();
   break;
   }
  }
 return;
 }
//

void TMainWnd::changeStudentPos(const LimeReport::CallbackInfo::ChangePosType type, bool &result)
 {
 switch (type)
  {
  case LimeReport::CallbackInfo::First:
   {
   result=(m_selected.size() && m_current==0);
   break;
   }

  case LimeReport::CallbackInfo::Next:
   {
   result=(m_selected.size() && m_current<m_selected.size()-1 && m_current>-1);
   m_current++;
   break;
   }
  }
 return;
 }

m_selected здесь - это выделенные записи из selectionModel таблицы-представления. m_current - текущая обрабатываемая запись.

В документации LM вроде об этом написано вообще

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Re: Порядок печати страниц отчета
« Reply #2 on: February 28, 2017, 08:50:30 PM »
Такой сценарий мне как-то не приходил в голову. Боюсь, что на данный момент, это сделать не получится. Тут надо либо подотчеты делать, либо в скриптах источниками данных рулить. Подумаю что можно сделать.   

JohnCS

  • Newbie
  • *
  • Posts: 20
    • View Profile
Re: Порядок печати страниц отчета
« Reply #3 on: March 01, 2017, 09:16:08 AM »
Понятно.
Спасибо :)