Подавление пустых строк

отредактировано 21:02 Раздел: FastReport 2.xx VCL
Добрый день!
Повторно задаю вопрос о подавлении вывода пустых строк.
29.01.05 ответ был дан - использовать св-во бенда Visible, но проблема не ушла – пустая строка остается все равно. Пробовал делать условия для Visible и у бенда и у поля - не помогло.
Мне нужно, чтобы строка с «0» или «пусто» не занимала место в бенде. Готовлю отчет – карточка по з/плате для каждого работника. Вывод полей идет по вертикале:

В дизайнере: В DataSet : В отчете на печати: Мне надо:
Поле1 100.00 100,00 100,00
Поле2 0.00 300,00
Поле3 300.00 300,00

ПолеN

Подскажите, пожалуйста, что нужно сделать (проверить) чтобы реализовать задуманное.
Заранее благодарен.

Комментарии

  • отредактировано 21:02
    Во-первых есть такая штука, как HideZeros (у объектов ТЕКСТ).
    Во-вторых ты можешь посмотреть в сторону форматированного вывода (в FR поддерживаются форматы Delphi)
  • отредактировано 21:02
    К сожалению ответа все еще не получил. Принимаю любые советы и предложения. В ДОС эта проблема решалась элементарно (ген. отчетов PDOX_40 рус) там была предусмотрена функция "подавление строк" Для FR это похоже неразрешимая проблема?
  • SlasherXSlasherX Россия, Магнитогорск
    отредактировано 21:02
    А разве нельзя сделать фильтр у датасета? ведь фастрепорт выводит только данные из датасет...
  • отредактировано 21:02
    Rgv54 написал:
    Принимаю любые советы и предложения.
    Неотслюнявишь пару у.е.? А советы тебе не помогут - ты их не хочешь слушать...
  • отредактировано 21:02
    Строка в датасет и строка в отчете разные вещи. Фильтр не поможет т.к. в наборе строк отчета выводятся поля из датасет для одной записи:
    Поле_1 100
    Поле_2 0 ( или пусто)
    Поле_3 300
    ........
    Поле_N
    для одной записи датасета, потом следующей и.т.д.
    В отчете получается:
    100

    300
    А мне надо чтобы было так:
    100
    300
    HideZeros делает из 0 пусто , но оставляет пустое место. Visible False - не показывает поле, но тоже оставляет пустое место
    Может вопрос невнятно сформулирую?
  • отредактировано 21:02
    Откуда берутся данные для:

    Поле_1 100
    Поле_2 0 ( или пусто)
    Поле_3 300
  • отредактировано 21:02
    Данные беруться из датасет который нельзя изменять, фильторовать по нулевым (пустым) значениями .
    Таблица начислений и удержаний по работникам.
    У одной записи часть полей заполняется, часть нет. Для следующей записи может быть все наоборот. Если отчет не поджать, то карточка расчета по з/плате займет листа два формата А4 с массой пустых строк отчета (но не датасета)
  • отредактировано March 2005
    На событие OnBeforePrint нужного бенда пишется:
    begin
      if ["Начисленно"] = 0 then
        MasterData1.Visible := false
      else
        MasterData1.Visible := true
    end
    
  • отредактировано 21:02
    написал:
    На событие OnBeforePrint нужного бенда пишется:
    begin
      if ["Начисленно"] = 0 then
        MasterData1.Visible := false
      else
        MasterData1.Visible := true
    end
    
    У меня такая же проблема с пустыми строками.
    Изменение свойства Visible здесь не помогает (как уже дважды отмечалось выше).
    Пустая строка становится невидимой, но пустое место в отчете остается.

    У меня появляется подозрение, что все это можно сделать только программно. А с помощью дизайнера наверно никак.
  • отредактировано 21:02
    Можно ли с помощью дизайнера по условию не выводить бенд на пеать, раположенный на форме и чтобы не сотавалось пустоты? Если не трудно пример.
  • отредактировано 21:02
    Rgv54 написал:
    Можно ли с помощью дизайнера по условию не выводить бенд на пеать, раположенный на форме и чтобы не сотавалось пустоты? Если не трудно пример.
    Специально для тех кто на бронепоезде ( то бишь для тебя - можешь смело обижаться, ты заслужил).
    Есть такая вещь как скрипты (если ты конечно считаешь, что скрипты - это с помощью дизайнера). Тебе привели пример, как с помощью этих самых скриптов сделать то, что тебе нужно (причем можно сделать намного больше, чем подавление пустых строк). Так вот тебе работающий код - специально проверил, хотя и на глаз все ясно (просто после того, как целых два человека (ты и Alex437) в один голос стали утверждать, что это не работает, стало жутко интересно, что там вообще может не работать):
        if ["Name"] = ''      сюда вместо Name напиши имя своего поля, пустые значения которого нужно "подавить"
            then MasterData1.Visible := false
            else MasterData1.Visible := true
    

    Писать его надо (как ты надеюсь догадался) в скрипте MasterData1.

    Если у тебя и после этого не заработает, то можешь смело идти к врачу - руки выпрямлять.
  • отредактировано 21:02
    Писал уже раз пять, что Visible:= False не помогает. После него остается пустая строка и попробуйте, те кто не на бронепоезде, сделать так чтобы этой строки не было
  • отредактировано 21:02
    Каким образом вы выводите эти значения
    написал:
    Поле_1 100 
    Поле_2 0 ( или пусто) 
    Поле_3 300
    (структуру отчета, пожалуйста)
  • отредактировано 21:02
    Вариант 1

    MasterData1 Поле_1
    Поле_2
    Поле_3

    Вариант 2
    MasterData1 Поле_1

    MasterData2 Поле_2

    MasterData3 Поле_3
    Желаемый результат на выходе
    100
    300
    без пробелов по верикали
  • отредактировано 21:02
    Rgv54 написал:
    Писал уже раз пять, что Visible:= False не помогает. После него остается пустая строка и попробуйте, те кто не на бронепоезде, сделать так чтобы этой строки не было
    Какая пустая строка?!!! Откуда она взялась?!!!
    Ты вообще понимаешь, что такое Visible = False?

    Такие результаты тебе подходят или тебе нужно что-то другое:
    - это полный отчет (без применения вышеприведенного скрипта):
    1 AAA
    2 BBB
    3
    4 CCC
    5
    6 DDD

    - это отчет без твоих "пустых" строк:
    1 AAA
    2 BBB
    4 CCC
    6 DDD

    И вообще приведи структуру своего отчета!
  • отредактировано 21:02
    Народ, не парьтесь - Rgv54 пишет скрипт не в OnBeforePrint мастер бенда, а в OnBeforePrint самого объекта - поэтому у него получается пустое место ;) )

    2 Rgv54:
    ЕЩЁ раз прочитай весь топик, на предмет того что тебе советовали и что ты сделал. Если не опять ничего не поймёшь, то лучше программированием тебе не заниматься ;) )
  • отредактировано 21:02
    Vano написал:
    Народ, не парьтесь - Rgv54 пишет скрипт не в OnBeforePrint мастер бенда, а в OnBeforePrint самого объекта - поэтому у него получается пустое место ;) )
    -=Serg=- Отправлено: Mar 28 2005, 12:28 PM
    На событие OnBeforePrint нужного бенда пишется:


    Гаджимурадов Рустам Отправлено: Mar 28 2005, 05:05 PM
    Писать его надо (как ты надеюсь догадался) в скрипте MasterData1.


    Ну если у него глаза такие же как и руки, то никуда не денешься... ;)
  • отредактировано 21:02
    Спасибо Serg за участие и оказание помощи.
    Вопрос решен. Для тех кто столкнется с подобной проблемой вкратце:
    Решается форматированным выводом, а MasterData.Visible = False
    или Memo.Visible = False в данном случае не проходит
  • отредактировано 21:02
    Rgv54 написал:
    Спасибо Serg за участие и оказание помощи.
    Вопрос решен. Для тех кто столкнется с подобной проблемой вкратце:
    Решается форматированным выводом, а MasterData.Visible = False
    или Memo.Visible = False в данном случае не проходит
    Да.... *** Я щас матом ругаться буду!

    Ты посты выше читал?!!! И в каком месте оно не работает?!!! Ты мне строчку приведи которая не работает!
  • отредактировано April 2005
    MasterData.Visible := False всегда работает как надо.
    В данном случае OnBeforePrint не выполнялся, т.к. бенд не был привязан к источнику данных (что я не сразу заметил).
    Решение было формировать записи динамически в скрипте.
    Сейчас возникла мысл что можно было использовать Child бены (в которых конечно же будет работать Child.Visible := fasle ;) )
  • shkinevshkinev Россия, Омск
    отредактировано 21:02
    У меня структура отчета
    -- Заголовок группы
    -- Данные (наименование, кол-во) MsaterData
    -- Подвал группы (итого, сумма по полю кол-во)

    У меня получилось скрыть Данные, но после этого в Итогах сумма по полю кол-во стала нулевой. Как это можно исправить?
  • отредактировано 21:02
    Ну так нет данных - нет суммы ;)
    Подробне. Что вы скрыли, как?
  • shkinevshkinev Россия, Омск
    отредактировано 21:02
    Скрыл MasterDate1
    в скрипте написал
    MasterDate1.Visible := False

    Если написать
    MasterDate1.Visible := True
    то все данные мы видим и итоги также считаются.
  • отредактировано 21:02
    Покажи как суммируешь. Наверное без указания бэнда. А надо с бэндом )в хелпе есть пример, если не знаешь как).
  • shkinevshkinev Россия, Омск
    отредактировано 21:02
    написал:
    Покажи как суммируешь. Наверное без указания бэнда. А надо с бэндом )в хелпе есть пример, если не знаешь как).
    Вот так суммирую
    [SUM(<_DBDReport."SumALL">,MasterData1)]
  • отредактировано 21:02
    А что за поле SUMALL? Это в нем содержится количество?

    Короче все работает... SUM отрабатывает правильно в обиоих случаях (и с Visible = True и с Visible = False). Так что ищи у себя ошибку.
  • shkinevshkinev Россия, Омск
    отредактировано 21:02
    написал:
    А что за поле SUMALL? Это в нем содержится количество?
    Да, не совсем количество, но именно оно суммируется.
    написал:
    Короче все работает... SUM отрабатывает правильно в обиоих случаях (и с Visible = True и с Visible = False). Так что ищи у себя ошибку.
    Вот здесь ты не прав, в том коде что я написал была ошибка, из-за которой и не происходило суммирование. Правильно нужно писать
    [SUM(<_DBDReport."SumALL">,MasterData1,1)]
    
    Отличие в параметре после имени бэнда.
  • отредактировано 21:02
    shkinev написал:
    Вот здесь ты не прав, в том коде что я написал была ошибка, из-за которой и не происходило суммирование.
    Если в расчет надо включить невидимые бэнды, надо указывать третий параметр (1).

    Ну блин!... Ошибка у него, а неправ я!
    Надо было написать, что тебе сумма "неотображаемых" строк тоже нужна (что-то я такого не заметил по тексту...).
    И воббще к чему мы пришли? К тому, что руки не совсем прямые и хелп читать нужно!
  • shkinevshkinev Россия, Омск
    отредактировано April 2005
    написал:
    Надо было написать, что тебе сумма "неотображаемых" строк тоже нужна (что-то я такого не заметил по тексту...).
    Я это писал: "У меня получилось скрыть Данные, но после этого в Итогах сумма по полю кол-во стала нулевой. Как это можно исправить?"
    написал:
    И воббще к чему мы пришли? К тому, что руки не совсем прямые и хелп читать нужно!
    Спасибо за попытку помочь.

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

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