SubReports

отредактировано 18:42 Раздел: FastReport 3.0
Есть проблема,
мне надопечатать несколько вложенных друг в друга отчетов.

На первом subreport'е все нормально, а на втором (вложенном в первый subreport) уже начинаются глюки:
если поставить subreport'у свойство PrintOnParent, то он перестает отображаться, если убрать, то гранийы начинают некорректно печататься.

Как это можно исправить или обойти???

Комментарии

  • zhitonzhiton Светловодск
    отредактировано 18:42
    Попробуйте сделать высоту MasterData-бэнда, на котором стоит 2-й Subreport
    сделать больше, т.е. она должна быть не меньше, чем высота данных на текущем MasterData-бэнде + высота MasterData-бэнда 2-го Subreport-а.
    При этом у 2-го Subreport-а PrintOnParent = False;

    Так по-моему получается. Я так думаю, что границы сбываются из-за того, что данные из Subreport-а не влазят на тот MasterData-бэнд куда они встраиваются.
  • отредактировано 18:42
    написал:
    При этом у 2-го Subreport-а PrintOnParent = False;
    Самое интересное в том, чтобы заставить таблицу печататься как мне интересно, чтобы сочитание колонок было m:n:k:l:p:q, чтобы определенные колонки растягивались в соответствии с данными в подотчетах.
    Необходимо сделать некоторое объединение по определенным столбцам.
  • zhitonzhiton Светловодск
    отредактировано 18:42
    а можно о задаче по-подробнее, может есть какой-то вариант её решения без subreport-ов
  • отредактировано 18:42
    Задача в следущем,
    необходимо сделать таблицу с несколькими вертикальными объединениями (см. приложенный рисунок).
    написал:
    а можно о задаче по-подробнее, может есть какой-то вариант её решения без subreport-ов
    Есть.
    Можно управлять границами Memo и видимостью текста.
  • zhitonzhiton Светловодск
    отредактировано 18:42
    Я так понимаю, что нужен отчёт такого типа, как в прикреплённом файле.

    Тогда можно для тех ячеек, данные которых не должны повторяться, установить SuppressRepeated:= True;(предварительно нужным образом отсортировав)

    А линии рамки устанавливать по алгоритму:
    если не начало и не конец датасета и если Memo.Text = '' (а лучше Trim(Memo.Text) = '') then Memo.Frame.Typ:= ftLeft + ftRight
    а если начало датасета или Memo.Text <> '', то Memo.Frame.Typ:= ftLeft + ftRight + ftTop
    ну и если конец датасета, то то Memo.Frame.Typ:= ftLeft + ftRight + ftBottom


    что-то в этом роде
  • отредактировано 18:42
    Я данный способ уже использовал.
    Возникают несколько мелких неприятностей.

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

    Или, если колонки идут по старшенству слева направо, и значение во второй колонке одинаково для первой и второй строк изи первой колонке. В результате получается некрасивое объединение. Придется писать дополнительный код.

    Вывод.
    В данном случае намного проще и функционалнее использовать подотчеты.


    Я, собственно, уже добился желаемого результата (при помощи подотчетов), правда немного кривовато, но отображается именно так как надо.
    Просто, очень бы хотелось знать, как это можно сделать не прибегая к шаманству.

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

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