FR и динамически изменяемая структура датасета

Евгений ПришкоЕвгений Пришко Украина, Харьков
отредактировано 22:06 Раздел: FastReport 2.xx VCL
Доброго времени суток, уважаемые!
Есть задача: вывести в отчет данные из датасета (DOA), структура которого изменяется по желанию пользователя (необходимые поля отмечает галочками и включаются в запрос) и растянуть его (отчет) на N страниц по ширине, если все не помещается на одной странице.
Сейчас отчет генерится в рантайме, но получается жутко медленно и коряво, к тому же отчет не растягивается больше чем на одну страницу.
Есть задумка, попытаться сделать его через cross-tab.....но никаких дельных идей пока нет.
Если кто-то сталкивался с подобной задачей или есть какие-то идеи по решению - помогите.

С уважением, Евгений Пришко

Комментарии

  • отредактировано 22:06
    Компонент TfrPrintTable не поможет?
  • Евгений ПришкоЕвгений Пришко Украина, Харьков
    отредактировано 22:06
    скорее всего не поможет.

    в отчете необходимо сделать группировку, уровней эдак на 8 (в перспективе на 20) с подведением итогов по каждой группе по ВСЕМ столбцам с денежкой, причем группирование записей опять таки выбирается пользователем.

    сделал с использованием бэнда Crossdata
    проблему вывода данных я кажется решил - создаю несколько массивов (заголовок, ширина, имя поля) и в скрипте бэнда или мемки передаю значение.
    ширина передается в OnBeforePrint кроссбэнда.
    заголовок и мя поля передаются в скрипте мемки.
    memo := Title[Column#]; - заголовок
    memo := FieldName[Column#]; - ячейка

    Все замечательно работает кроме нескольких моментов:
    1 странно выполняется растягивание мемки и бэндов. Как я понял, за модель берется мемка с шириной последней, а за ее содержимое - самая длинная строка. В общем, ерунда получается. Высота мемки получается эдак вдвое больше чем надо. Проблема уходит в том случае, если ширина последней ячейки такая же, как и у самой широкой. Но у меня в последней ячейке цифры! она мне узкой нужна!
    2 вторая трабла вылезает тогда, когда я пытаюсь использовать FieldName[Column#] в функции SUM. в FieldName хранится имя поля в виде '[T_RESULT."MARK10"]' к примеру. Мне дважды надо извлечь значение, как это сделать - не знаю. попробую генерить скрипт мемки в какомнить бэнде, подставляя в него значение FieldName, чтобы при обработке скрипта самой мемки обращение шло к [T_RESULT."MARK10"].
    хотЯ хотелось бы сделать обращение к переменной


  • Евгений ПришкоЕвгений Пришко Украина, Харьков
    отредактировано 22:06
    есть еще один вариант о котром я сначала не подумал
    в Словаре данных можно связать переменную и поле из датасета
    или в строке выражения написать [dataset."Field"].
    как это же сделать в рантайме?
    если передавать так
    frVariables := '' + fieldname + ''; где fieldname - string
    frVariables := '''' + fieldname + '''';
    или
    frReport.Dictionary.Variables := '''' + fieldname + '''';
    frReport.Dictionary.Variables := '' + fieldname + '';
    в переменную передается СТРОКА.
    а хотелось бы сделать связку "элемент массива" - поле БД
  • отредактировано 22:06
    Честно говоря, не совсем себе представляю тип отчета, поэтому дельных советов дать не смогу.
    По поводу ф-и SUM - она считается очень запутанно, поэтому динамические параметры туда лучше не подставлять.
    Чтобы в переменную передать ссылку на поле, надо писать без кавычек:
    frReport.Dictionary.Variables := fieldname;

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.