Перенос столбцов Tfrxdbcrossview на одной странице.

отредактировано May 2017 Раздел: FastReport VCL
Добрый день.
Нужно построить отчёт, попробовав разные варианты построил на основании TfrxDBCrossView. Но возник вопрос, таблица растёт в одну сторону, т.е. после выхода кол-ва столбцов за границу страницы таблица продолжается на следующей странице, а хотелось бы, чтобы таблица сперва заполняла текущую страницу.
Keep*Together не помогает.
задание максимальной ширины тоже
Картинка в пост не вставляется.
https://www.dropbox.com/s/jo1d2dqd4c3nk0d/%...%D0%BA.JPG?dl=0 - ссылка на то, как должно быть.

Комментарии

  • gpigpi
    отредактировано 22:46
    К сожалению, в FR такой возможности пока нет
  • отредактировано 22:46
    aitk.kia написал: »
    Добрый день.
    Нужно построить отчёт, попробовав разные варианты построил на основании TfrxDBCrossView. Но возник вопрос, таблица растёт в одну сторону, т.е. после выхода кол-ва столбцов за границу страницы таблица продолжается на следующей странице, а хотелось бы, чтобы таблица сперва заполняла текущую страницу.
    Картинки уже нет в доступе, но если я правильно понял задачу, то нужно независимо от числа столбцов назначить такую их ширину, чтобы вся таблица влезала на одну страницу по ширине.
    Я делал такое через скрипт. Возможно можно сделать изящнее, но я не профессиональный программист, по крайней мере работает.
    const
    MIN_COLUMNWD = 54; //Ширину простой колонки принимаем 54 пикселя
    MAX_ALLHEADERWD = 1458; // Максимальная ширина всех заголовков
    ...
    procedure DBCross1OnBeforePrint(Sender: TfrxComponent);
    var
    CulcColWidth: Extended;
    begin
    { этот код будет работать только на втором проходе }
    if GroupCount>0 then begin
    PageWidth:=Engine.PageWidth;
    CurrentDBCross := TfrxDBCrossView(Sender);
    HeaderColumnCount := CurrentDBCross.RowLevels;

    {Определяем ширину колонок как если уместить все колонки на полстраницы}
    CulcColWidth := (PageWidth/2/GroupCount);

    if CulcColWidth < MIN_COLUMNWD then
    ColumnWidth := MIN_COLUMNWD
    else
    ColumnWidth := Trunc(CulcColWidth);

    TotalColumnWidth := ColumnWidth * 1.1;

    AllColumnsWidth := (ColumnWidth*(GroupCount-1)) + TotalColumnWidth;
    AllHeadersWidth := Trunc(PageWidth - AllColumnsWidth - 1);
    //if AllHeadersWidth>MAX_ALLHEADERWD then AllHeadersWidth := MAX_ALLHEADERWD;

    HeadWidth := Trunc(AllHeadersWidth/6)*(5-HeaderColumnCount);

    {определяем окончательную ширину колонки Всего }
    TotalColumnWidth := PageWidth - (HeadWidth*HeaderColumnCount) - (ColumnWidth*(GroupCount-1));

    CurrentDBCross.MaxWidth := Trunc(HeadWidth);
    CurrentDBCross.MinWidth := Trunc(HeadWidth);
    end;

    end;

    procedure DBCross1OnCalcWidth(ColumnIndex: Integer; ColumnValues: Variant; var Width: Extended);
    begin
    { этот код будет работать только на втором проходе }
    if DBCross1.IsGrandTotalColumn(ColumnIndex)
    then
    Width := TotalColumnWidth
    else
    Width := ColumnWidth;
    end;

    procedure DBCross2OnAfterPrint(Sender: TfrxComponent);
    begin
    CurrentDBCross := TfrxDBCrossView(Sender);
    GroupCount := CurrentDBCross.ColCount;
    end;

    Изображение того что получается.
    https://yadi.sk/i/bwapNdET3Mhmes

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

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