FR и динамически изменяемая структура датасета
Евгений Пришко
Украина, Харьков
Доброго времени суток, уважаемые!
Есть задача: вывести в отчет данные из датасета (DOA), структура которого изменяется по желанию пользователя (необходимые поля отмечает галочками и включаются в запрос) и растянуть его (отчет) на N страниц по ширине, если все не помещается на одной странице.
Сейчас отчет генерится в рантайме, но получается жутко медленно и коряво, к тому же отчет не растягивается больше чем на одну страницу.
Есть задумка, попытаться сделать его через cross-tab.....но никаких дельных идей пока нет.
Если кто-то сталкивался с подобной задачей или есть какие-то идеи по решению - помогите.
С уважением, Евгений Пришко
Есть задача: вывести в отчет данные из датасета (DOA), структура которого изменяется по желанию пользователя (необходимые поля отмечает галочками и включаются в запрос) и растянуть его (отчет) на N страниц по ширине, если все не помещается на одной странице.
Сейчас отчет генерится в рантайме, но получается жутко медленно и коряво, к тому же отчет не растягивается больше чем на одну страницу.
Есть задумка, попытаться сделать его через cross-tab.....но никаких дельных идей пока нет.
Если кто-то сталкивался с подобной задачей или есть какие-то идеи по решению - помогите.
С уважением, Евгений Пришко
Комментарии
в отчете необходимо сделать группировку, уровней эдак на 8 (в перспективе на 20) с подведением итогов по каждой группе по ВСЕМ столбцам с денежкой, причем группирование записей опять таки выбирается пользователем.
сделал с использованием бэнда Crossdata
проблему вывода данных я кажется решил - создаю несколько массивов (заголовок, ширина, имя поля) и в скрипте бэнда или мемки передаю значение.
ширина передается в OnBeforePrint кроссбэнда.
заголовок и мя поля передаются в скрипте мемки.
memo := Title[Column#]; - заголовок
memo := FieldName[Column#]; - ячейка
Все замечательно работает кроме нескольких моментов:
1 странно выполняется растягивание мемки и бэндов. Как я понял, за модель берется мемка с шириной последней, а за ее содержимое - самая длинная строка. В общем, ерунда получается. Высота мемки получается эдак вдвое больше чем надо. Проблема уходит в том случае, если ширина последней ячейки такая же, как и у самой широкой. Но у меня в последней ячейке цифры! она мне узкой нужна!
2 вторая трабла вылезает тогда, когда я пытаюсь использовать FieldName[Column#] в функции SUM. в FieldName хранится имя поля в виде '[T_RESULT."MARK10"]' к примеру. Мне дважды надо извлечь значение, как это сделать - не знаю. попробую генерить скрипт мемки в какомнить бэнде, подставляя в него значение FieldName, чтобы при обработке скрипта самой мемки обращение шло к [T_RESULT."MARK10"].
хотЯ хотелось бы сделать обращение к переменной
в Словаре данных можно связать переменную и поле из датасета
или в строке выражения написать [dataset."Field"].
как это же сделать в рантайме?
если передавать так
frVariables := '' + fieldname + ''; где fieldname - string
frVariables := '''' + fieldname + '''';
или
frReport.Dictionary.Variables := '''' + fieldname + '''';
frReport.Dictionary.Variables := '' + fieldname + '';
в переменную передается СТРОКА.
а хотелось бы сделать связку "элемент массива" - поле БД
По поводу ф-и SUM - она считается очень запутанно, поэтому динамические параметры туда лучше не подставлять.
Чтобы в переменную передать ссылку на поле, надо писать без кавычек:
frReport.Dictionary.Variables := fieldname;