Программно.
Чтоб не приходилось извращатся в так [([Row.DateEnd]-[Row.DateBegin]).ToString().Split('.')[0]]
Задача нетривиальная. Вам ведь наверняка захочется получить формат типа "5 дней 2 часа 3 минуты". Это тянет за собой локализацию (и разные аглоритмы для разных языков).
AlexTZ
Я вернул колонки в дата-бенд, снова всё стало ровно.
Но, вернулась ошибка в ФР, что когда на очереди длинный бенд, перед ним печатается чистая страница.
Сейчас попробую вам выслать обновленный пример.
Даже если задать фильтр "2373" Вы увидите, что перед каждым длинным бендом выходит пустая страница. Выглядит прикольно, чистый лист, начало бенда, чистый лист, начало другого бенда и т.д.
Выслал, к сожалению, уже.
Я бы предложил такую логику, не знаю как это будет трудно реализовать.
Непререкаемое правило: Длинные бенды дробятся по страницам(или колонкам) без согласия(или несогласия) разработчика отчета.
Как дробятся зависит от свойства Разрываться.
Если оно НЕ установлено, то длинный бенд начинается с новой страницы(или с новой колонки) и далее занимает столько страниц(колонок) сколько ему надо.
Если Разрываться установлено, то длинный бенд начинается на текущей странице(колонке) вслед за последним бендом если есть место, и далее занимает столько страниц(колонок) сколько ему надо.
Спасибо за идею. Сможете проверить на ночной сборке. Сейчас вроде бы все корректно работает для колонок страницы. Колонки бэнда еще не делал - там возиться долго.
ФР скачал сегодня. Выставил колонки у страницы. Не знаю что у вас работает, у меня нет.
Пустые страницы исчезли - да, но длинные бенды не дробятся по колонкам и также рисуются на нижнем колонтитуле и чуть ниже края страницы.
Колонки разнятся по отступу от верхнего края страницы на страницах с обрубками длинных бендов.
Если задать фильтр 2373, то обрубок первого длинного бенда на первой странице рисуется со второй колонки (первая - пустая)
вторая страница - 2 обрубка 2-х бендов и т.д.
А Вы случайно не забыли включить флаг "Может разрываться" у объектов бэнда? Если этот флаг включен только у бэнда, то разрыва не будет.
Да, насчет отступов - я ведь предлагал их сделать снизу, бэндом "Дочерний". При разрыве отступ, как он сделан у Вас сейчас, будет только на первой странице.
Я специально не ставил, т.к. мне надо чтоб короткие бенды(короче высоты колонки) печатались целиком, без переносов на другую колонку страницу. Я хочу, чтоб только длинные бенды дробились, т.к. им не хватает одной целой колонки, а потеря данных не устраивает.
Т.е. сейчас, если не считать неравномерный отступ колонок на первой странице от верхнего края страницы вы сделали только последний пункт моего предложения:
написал:
Непререкаемое правило: Длинные бенды дробятся по страницам(или колонкам) без согласия(или несогласия) разработчика отчета.
Как дробятся зависит от свойства Разрываться.
Если оно НЕ установлено, то длинный бенд начинается с новой страницы(или с новой колонки) и далее занимает столько страниц(колонок) сколько ему надо. Если Разрываться установлено, то длинный бенд начинается на текущей странице(колонке) вслед за последним бендом если есть место, и далее занимает столько страниц(колонок) сколько ему надо.
Насчет бенда "дочерний" - мне не понятно, зачем он мне нужен, если и так (при отсутствии длинных бендов всё печатается верно и ровно(если устанавливать колонки в датабенде). Имхо, это ошибка ФР, что он не начинает разные бенды с одной высоты(т.е. после верхнего колонтитула) когда есть длинные бенды, или когда установлено разрываться или когда колонки указываем у страницы...
Т.к. с высотой колонок у бенда с продолжением мне ясно, я просто подниму рамку до верха бенда , а место оставлю снизу.
Снимаю свои претензии, действительно нужен дочерний бенд.
Сейчас уже почти всё хорошо, кроме случая когда длинный бенд самый первый - он печатается со второй колонки первой страницы.
Этот случай исправить довольно сложно. Хотя критерий печати бэнда довольно простой: если на следующей странице свободного места столько же, сколько и на текущей, то переносить бэнд на следующую страницу не имеет смысла - печатать на текущей, с разрывом. Проблема в деталях: узнать свободное место на следующей странице можно, лишь добавив ее. При этом выполнится куча действий, которые надо потом как-то откатить назад.
Тогда наивный вопрос.
А зачем для самого ПЕРВОГО бенда для самой ПЕРВОЙ страницы вычислять свободное место на следующей, которой еще нет?
Имхо, первый бенд на первой странице должен печататься с первой колонки, независимо длинный он или короткий.
А до начала печати первой страницы известно, что первый бенд длиннее
высота страницы - верхний_колонтитул - ниж_колонтитул - min(заголовок_отчета, заголовок_страницы) ?
Если известно - вот возможное решение проблемы, начинаем его дробить с самой левой колонки первого листа.
1. в инсталлятор ФР.НЕТ надо довавить вызов анинсталлятора пред.версии.
2. несогласованность.
ФР.НЕТ ставится по умолчанию в c:\Program Files\Fast Reports\FastReport.Net Demo,
в меню Программы как Fast Reports\FastReport.Net
ФР демо для RS2009 ставится по умолчанию в c:\Program Files\FastReports\FastReport 4
в меню Программы как FastReports\FastReport 4
Согласуйте корневые папки во всех ваших инсталляторах, либо "Fast Reports", либо "FastReports"
3. не для этого топика конечно, но я переправил свою программу с ФР4 собранную на RS2007 на RS2009 + демо ФР4.7.2, так вот она компилируется и работает нормально, хотя потерялась юникодность текстовых констант в отчете. Но в отчет я зайти не могу. Даёт подряд несколько AV, в rtl120, frx12, rtl120, и.т.д.
Прислать код? (работает с той же базой, что я вам присылал для отладки ФР.НЕТ)
Или же между версией 4.7 и предыдущей нет совместимости и надо отчет рисовать заново?
Проблема с автомасштабированием с А3 на А4.
Если отчет в виде Ландшафта А3, то масштабирует, как будто печаться будет на Портрете А4.
В итоге из принтера вылезает Ландшафт А4, на котором располагается Ландшафт А3 сильно уменьшенный, т.е. отмасштабировалось не на весь лист Ландшафта А4.
Комментарии
Чтоб не приходилось извращатся в так [([Row.DateEnd]-[Row.DateBegin]).ToString().Split('.')[0]]
Задача нетривиальная. Вам ведь наверняка захочется получить формат типа "5 дней 2 часа 3 минуты". Это тянет за собой локализацию (и разные аглоритмы для разных языков).
Я вернул колонки в дата-бенд, снова всё стало ровно.
Но, вернулась ошибка в ФР, что когда на очереди длинный бенд, перед ним печатается чистая страница.
Сейчас попробую вам выслать обновленный пример.
Даже если задать фильтр "2373" Вы увидите, что перед каждым длинным бендом выходит пустая страница. Выглядит прикольно, чистый лист, начало бенда, чистый лист, начало другого бенда и т.д.
Я бы предложил такую логику, не знаю как это будет трудно реализовать.
Непререкаемое правило: Длинные бенды дробятся по страницам(или колонкам) без согласия(или несогласия) разработчика отчета.
Как дробятся зависит от свойства Разрываться.
Если оно НЕ установлено, то длинный бенд начинается с новой страницы(или с новой колонки) и далее занимает столько страниц(колонок) сколько ему надо.
Если Разрываться установлено, то длинный бенд начинается на текущей странице(колонке) вслед за последним бендом если есть место, и далее занимает столько страниц(колонок) сколько ему надо.
Пустые страницы исчезли - да, но длинные бенды не дробятся по колонкам и также рисуются на нижнем колонтитуле и чуть ниже края страницы.
Колонки разнятся по отступу от верхнего края страницы на страницах с обрубками длинных бендов.
Если задать фильтр 2373, то обрубок первого длинного бенда на первой странице рисуется со второй колонки (первая - пустая)
вторая страница - 2 обрубка 2-х бендов и т.д.
Да, насчет отступов - я ведь предлагал их сделать снизу, бэндом "Дочерний". При разрыве отступ, как он сделан у Вас сейчас, будет только на первой странице.
Т.е. сейчас, если не считать неравномерный отступ колонок на первой странице от верхнего края страницы вы сделали только последний пункт моего предложения:
Т.к. с высотой колонок у бенда с продолжением мне ясно, я просто подниму рамку до верха бенда , а место оставлю снизу.
Сейчас уже почти всё хорошо, кроме случая когда длинный бенд самый первый - он печатается со второй колонки первой страницы.
А зачем для самого ПЕРВОГО бенда для самой ПЕРВОЙ страницы вычислять свободное место на следующей, которой еще нет?
Имхо, первый бенд на первой странице должен печататься с первой колонки, независимо длинный он или короткий.
высота страницы - верхний_колонтитул - ниж_колонтитул - min(заголовок_отчета, заголовок_страницы) ?
Если известно - вот возможное решение проблемы, начинаем его дробить с самой левой колонки первого листа.
Сейчас всё хорошо. Спасибо.
1. в инсталлятор ФР.НЕТ надо довавить вызов анинсталлятора пред.версии.
2. несогласованность.
ФР.НЕТ ставится по умолчанию в c:\Program Files\Fast Reports\FastReport.Net Demo,
в меню Программы как Fast Reports\FastReport.Net
ФР демо для RS2009 ставится по умолчанию в c:\Program Files\FastReports\FastReport 4
в меню Программы как FastReports\FastReport 4
Согласуйте корневые папки во всех ваших инсталляторах, либо "Fast Reports", либо "FastReports"
3. не для этого топика конечно, но я переправил свою программу с ФР4 собранную на RS2007 на RS2009 + демо ФР4.7.2, так вот она компилируется и работает нормально, хотя потерялась юникодность текстовых констант в отчете. Но в отчет я зайти не могу. Даёт подряд несколько AV, в rtl120, frx12, rtl120, и.т.д.
Прислать код? (работает с той же базой, что я вам присылал для отладки ФР.НЕТ)
Или же между версией 4.7 и предыдущей нет совместимости и надо отчет рисовать заново?
Если отчет в виде Ландшафта А3, то масштабирует, как будто печаться будет на Портрете А4.
В итоге из принтера вылезает Ландшафт А4, на котором располагается Ландшафт А3 сильно уменьшенный, т.е. отмасштабировалось не на весь лист Ландшафта А4.
Документация (chm) также ставится в "Fast Reports", а сам FR в "FastReports".