Фильтрация по колонкам

ojioji
отредактировано 03:37 Раздел: FastReport 3.0
Здравствуйте. Поставил себе задачку - есть четыре запроса, по ним формируются таблицы типа:

|
|
|
| Адрес | Наименование |
|
|
|

Необходимо вывести в отчете, соответственно, 4 таблицы, но уже вида:

|
|
|
|
|
|
| Адрес 1 | Адрес 2 | Адрес 3 | Адрес 4 | Адрес 5 |
|
|
|
|
|
|

Как мне по одному датасету фильтровать данные сразу для 5 столбцов?
Если можно, то с пояснением (или кусочком кода на FastScript, т.к. подозреваю
что без него не обойтись...).

Спасибо.

Комментарии

  • ojioji
    отредактировано 03:37
    Ладно, я понимаю что RTFM. Но так мало времени... ;)

    Копнул в сторону

    [IIF(Copy(<Customers."Contact">,1,3)='Ann',<Customers."Contact">,'')]

    Но как сделать чтобы вместо '' сделать пропуск записи?.. Подскажите, пжалуйста...
  • отредактировано 03:37
    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    begin
    MasterData1.Visible:=Copy(<Customers."Contact">,1,3)='Ann';
    end;
  • ojioji
    отредактировано May 2006
    Noskov, спасибо. Однако результат тот же --- пустые строки остаются, а не сдвигаются...

    Пробовал обработчик и на отдельные колонки.
    Memo27.Visible:=(<frxDSTechi."TTypeID"> = 2);

    Извиняюсь за настырность, совсем уж новичок в FastReports.
  • ojioji
    отредактировано 03:37
    Вот что получается...
    Пример в pdf

    Хотелось бы без сдвигов вниз и с нормальной разметкой таблицы (равномерной), а не получается. Уже замачался играть с параметрами. Может, кто сталкивался и подскажет?
  • gpigpi
    отредактировано 03:37
    Если список выполненных работ по каждому району выводится в одном мемо, то тогда можно установить высоту MasterData равной 0, в обработчике MasterDataOnBeforePrint сделать разнесение работ по районам. Что-то типа
    if <frxDSTechi."TTypeID">=... then Memo1.Memo.Add(<frxDSTechi."Field">);
    Memo1 расположить в подвале данных, а в обработчике HeaderOnBeforePrint очищать все мемо в подвале данных Memo1.Memo.Clear;
  • ojioji
    отредактировано May 2006
    gpi, сделал так:

    if (<frxDSTechi."TTypeID"> = 1) then
    Memo26.Memo.Add(<frxDSTechi."Name">) else
    if (<frxDSTechi."TTypeID"> = 2) then
    Memo27.Memo.Add(<frxDSTechi."Name">) else
    if (<frxDSTechi."TTypeID"> = 3) then
    Memo28.Memo.Add(<frxDSTechi."Name">);

    Заполняется только первый столбец. Но спасибо за идею - практически решил проблему при помощи вложенных отчетов. Некрасиво, но как сумел. ;)

    Теперь лишь одна проблема - как сделать продление таблицы, а то получается нечто вроде:

    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |

    В первом столбце 3 записи, во втором --- две, в третьем --- одна.
  • ojioji
    отредактировано 03:37
    Ура, заработало через case! ;)

    Но проблема та же --- продление полосок. Особенно для того memo, в котором вообще не появляется записей (иногда бывает и такое).
  • ojioji
    отредактировано 03:37
    Все, всем спасибо. Я разобрался. ;)
  • gpigpi
    отредактировано 03:37
    Установите MemoN.StretchMode=smMaxHeight

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

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