Сделал обертку вокруг ICallbackDatasource для работы с master-detail (см. приложения) чтобы было можно работать с ними в таком виде:
// Создаем отчет и датасорсы
LimeReport::ReportEngine report;
LRDataSource* dsUnits = new LRDataSource(report.dataManager()->createCallbackDatasouce("units"));
dsUnits->setObjectName("units"); // Это просто что-бы в дебаге понимать, от кого вывод
dsUnits->setFieldNames(QStringList()
<< "unitID"
<< "name");
LRDataSource* dsDates = new LRDataSource(report.dataManager()->createCallbackDatasouce("dates"));
dsDates->setFieldNames(QStringList()
<< "unitID"
<< "dt");
dsDates->setObjectName("dates"); // Это просто что-бы в дебаге понимать, от кого вывод
dsDates->setParentDataSource(dsUnits, "unitID", "unitID");
// Добавляем записи
dsUnits->addRow(QVariantList()
<< calculator->inParams.unit->id()
<< calculator->inParams.unit->name());
dsDates->addRow(QVariantList()
<< calculator->inParams.unit->id()
<< calculator->inParams.dtBeg.toString("dd.MM.yyyy"));
// И т.д.
Добавил бэнды на страницу, все настроил. Но работает как-то странно. После отладки (вывод в дебаг я оставил в прилагаемых исходниках) выяснилось, что кол-во записей в дочерних датасорсах запрашивается LimeReport-ом только при вызове setAllDatasourcesToFirst в самом начале построения отчета и больше никогда не запрашивается.
Если смотреть на пример, вставленный выше, то после перехода на 1-ю запись в units, определяется, что в dates есть 20 записей. Они выводятся в отчет, потом units смещается на 2-ю запись, dates при этом уже имеет, например, 30 записей, но так как кол-во записей запрашивалось только для первой записи units, то опять же, выводится 20 записей. Если в dates для текущей записи units меньше записей, чем 20, например, 15, то 15 нормальных строк и 5 пустых.
В общем, хотелось бы либо иметь механизм уведомления dataManager-а о том, что кол-во записей изменилось, или чтобы кол-во записей перезапрашивалось заново при построении дочернего бэнда.
[вложение удалено администратором]