Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого / 25 сообщений из 34, страница 1 из 2
10.05.2018, 15:19
    #39642715
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
Доброго времени суток.

Не первый день уже сижу над этой проблемой...

Имеется кросс (2 ColumnLevels, 3 RowLevels, 1 CellLevel). Данные 2го уровня (т е 1го индекса) столбцов содержат ...ну, очень длинные названия. При этом данные первого уровня строк содержат не очень длинные названия. Все остальные данные заголовков содержат относительно короткие обозначения.

В Cells содержится строка, недлинная (всегда состоящая из 2 строчек(формируется в запросе)): длиной от 3 и до 6-7 символов.

А, да, еще: страница бесконечна(ибо кол-во столбцов заранее неизвестно) + у кросса AutoSize = true.

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



На этом изображении MaxWidth у кросстаба не ограничен (т е почти не ограничен = 5000). Поэтому все названия "расползаются" на всю ширину. Для тех данных, что в первом столбце (т е для нас это RowField[0]), такая ширина вполне приемлема, а вот для тех данных, которые в третьей строке заголовка столбцов ( т е ColumnField[2]), это абсолютно неприемлемо, потому что отчет со всеми данными "расползается" в бесконечность, и выглядит вот так:


(это изображение просто, чтоб было понятно, что на напечатанном листе данные нечитаемы)


Если попытаться ограничить ширину столбцов, то сужаются абсолютно все столбцы. И первый (тот, что, как правило, содержит не оч длинные названия тоже).



Тогда форма становится читаемой, но пользователи не понимают, зачем нужна "такая высокая" строчка для данных с названием "Название длинное 7". + разумеется, эти самые названия могут быть разной длины для разных баз данных.

Вот как выглядит форма, если MaxWidth = 60


Вроде даже и ничего, если не считать того, что кол-во листов можно было бы сократить за счет удлинения ширины первого столбца. + Если столбцов совсем мало, а строчек столько же (что тоже вполне вероятно даже для одной и той же БД с разными запросами), кросс растянется по левой стороне листа на нескольких (или хотя бы на 2) листах.



И, конечно же, мы получаем умные предложения от пользователей типа: "Вы бы первый столбик немножко расширили, и форма поместилась бы на 1 страницу, а то нам бумагу экономить надо"....


Сейчас данная ситуация обходится ручным подсчетом....В запросе вычисляется количество столбцов, вычисляется наиболее приемлемая ширина первого столбца, и далее нехитрым мат вычислением считается кол-во символов, оптимально помещающихся по ширине. И в данные столбцов 2го уровня отправляется уже отредактированная с переносом строк информация. В этом случае при малом кол-ве столбцов и большом кол-ве строк форма сама "растягивается" по странице:



А при большом кол-ве столбцов форма сжимается по вертикали:


Эта схема в общем-то работает (ну, если не считать некоторой погрешности в вычислениях, когда именно переносить названия данные столбцов 2го уровня, особенно при нестандартных форматах, типа А3)

Но...сейчас появилась необходимость добавления еще одного уровня столбцов. Делается это динамически (и лишь для определенных наборов данных).
И тогда отчет выглядит несколько иначе:


И работающая схема с вручную посчитанными переносами части строк в столбцах 2го уровня перестает работать, ибо для некоторых из столбцов названия не нужно делить вручную на несколько строк.

Были попытки посмотреть в сторону вертикальных бэндов, но, если честно, не совсем разобралась + в этом отчете в шапке сверху используется вложенный отчет, а с вертикальными бэндами это вложенный отчет работать перестал.

Может, кто-нибудь уже сталкивался с похожей проблемой? Заранее премного благодарна.
...
Рейтинг: 0 / 0
10.05.2018, 15:58
    #39642764
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
Не использовать Кросс.
...
Рейтинг: 0 / 0
10.05.2018, 15:59
    #39642765
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
DimaBrНе использовать Кросс.
Ок. Что использовать?
...
Рейтинг: 0 / 0
10.05.2018, 16:00
    #39642770
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
А длинные названия столбцов повернуть на 90 градусов и всё поместится на одну страницу
...
Рейтинг: 0 / 0
10.05.2018, 16:01
    #39642771
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
DimaBr,
Не могу ((((
Форма стандартизованная.... Пользователи не поймут
...
Рейтинг: 0 / 0
10.05.2018, 17:57
    #39642844
gpi
gpi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
Устанавливайте ширину столбцов кросса в событии кросса OnCalcWidth
...
Рейтинг: 0 / 0
11.05.2018, 10:40
    #39643095
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
gpiУстанавливайте ширину столбцов кросса в событии кросса OnCalcWidth
Уже пробовала...Но...
OnCalcWidth срабатывает перед выводом КАЖДОГО cell (НО НЕ row или column) и просто-напросто обрезает все данные, которые в ячейку columnа не вместились.



Уже пыталась так делать (((( У меня тоже так сделать - была первая мысль. Но спасибо за идею )
...
Рейтинг: 0 / 0
11.05.2018, 10:44
    #39643101
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
OlyaLoraкоторые в ячейку columnа не вместились
вместо того, чтоб "растянуть" ячейку вниз
...
Рейтинг: 0 / 0
11.05.2018, 10:59
    #39643113
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
Вот ответ на все ваши вопросы по Кросу.
Подготовьте данные для отчёта и печатайте в удобном для вас виде. Отчёт не должен ФОРМИРОВАТЬ данные, он должен их печатать из датасета (ну итожки конечно не в счёт)
...
Рейтинг: 0 / 0
11.05.2018, 11:22
    #39643130
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
DimaBrОтчёт не должен ФОРМИРОВАТЬ данные, он должен их печатать из датасета (ну итожки конечно не в счёт)
Он их и не формирует. Даже если, предположим, убрать динамическое создание колонок (которое, кстати, появилось лишь только из-за того что РАЗНЫЕ строки датасета Fast воспринимает как одну и ту же из-за совпадения части ключа) и оставить жить два разных макета (чего бы тоже не очень-то и хотелось, ибо при изменении одного макета необходимо будет непременно помнить об изменении и второго), то мы вернемся к предыдущей схеме, т е "ручному" управлению расстановок символа конца строки в данных, что тоже нехорошо и некрасиво, потому что по-хорошему, я не знаю, как правильно посчитать, после какого именно символа ставить конец строки для оптимального вида печати (да и сдается мне, не должна об этом задумываться, потому что, как раннее написал gpi, OnCalcWidth должен посчитать это и без меня, коль скоро отчет в этом случае данные ни коим образом не формирует).
...
Рейтинг: 0 / 0
11.05.2018, 11:28
    #39643135
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
Кстати говоря, несколько лет назад, впервые столкнувшись с данной проблемой (когда ни о каких там динамических столбцах и речи не шло), после долгих попыток сделать отчет удобочитаемым, я написала в и их тех поддержку и приложила не свои готовые данные, а макет, в котором просто вручную заполнила кросс, и проблема проявилась абсолютно точно также. Какое-то время со мной общался парень из тех.поддержки, потом он перевел вопрос на разработчика.....и всё, больше никаких вестей от них не поступало...
...
Рейтинг: 0 / 0
11.05.2018, 11:38
    #39643143
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
OlyaLora, а если это было еще в старом саппорте то и тикет небось пропал бесследно?
...
Рейтинг: 0 / 0
11.05.2018, 11:52
    #39643155
gpi
gpi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
OlyaLoragpiУстанавливайте ширину столбцов кросса в событии кросса OnCalcWidth
Уже пробовала...Но...
OnCalcWidth срабатывает перед выводом КАЖДОГО cell (НО НЕ row или column) и просто-напросто обрезает все данные, которые в ячейку columnа не вместились.



Уже пыталась так делать (((( У меня тоже так сделать - была первая мысль. Но спасибо за идею )
1,2,3 - это не column, это row header. Ширину row header, к сожалению, не установишь. Попробуйте, поможет ли MaxWidth в этом случае. А ширину column (4 и далее) мoжно задавать и в OnCalcWidth

vavanOlyaLora, а если это было еще в старом саппорте то и тикет небось пропал бесследно?
Если тикет создан до декабря 2012 г. и в декабре 2012 г. был закрыт, то после 2014 или 2015 гг. был удалён
...
Рейтинг: 0 / 0
11.05.2018, 12:47
    #39643203
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
gpiПопробуйте, поможет ли MaxWidth в этом случае. А ширину column (4 и далее) мoжно задавать и в OnCalcWidth
Да тоже уже пробовала. Обрезает длинные названия. Причем степень "зарезания" зависит от выставленной MaxWidth.

Отчет с MaxWidth = 100, а в OnCalcWidth ширина = 60 (заголовки 7 и 8 столбцов обрезаны, но не сильно (хотя, думаю, определение "не сильно" вряд ли устроит пользователя))


А вот отчет с уже MaxWidth = 200, а в OnCalcWidth ширина = 60 (заголовки 7 и 8 столбцов обрезаны, и уже прям сильно)


А это отчет с уже MaxWidth = 500, и нет OnCalcWidth (заголовки 7 и 8 столбцов не обрезаны, но зато и форма нечитаема)
...
Рейтинг: 0 / 0
11.05.2018, 12:53
    #39643210
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
Можно, конечно, каким-то образом попытаться вычислить оптимальное соотношение величин MaxWidth и Width в OnCalcWidth, давая fastreportу возможность "обрезать слишком длинные" с его точки зрения данные, но мы-то знаем, что это нехорошо, и пользователям вряд ли понравится....
Уверена, что первое, что услышу будет:"Просто сделайте ячейки с названиями подлиннее" )))
...
Рейтинг: 0 / 0
11.05.2018, 12:54
    #39643213
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
vavan,
Попытаюсь сейчас поискать.
...
Рейтинг: 0 / 0
11.05.2018, 13:15
    #39643235
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
Что вы так уродуетесь, выводите в иксель
...
Рейтинг: 0 / 0
11.05.2018, 13:20
    #39643241
gpi
gpi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
Пример для FRDemo. FR 5.6.14
...
Рейтинг: 0 / 0
11.05.2018, 14:08
    #39643265
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
Тикет, кстати открыт до сих пор. А прошло уже почти 4 года ))))



Но и не решен

...
Рейтинг: 0 / 0
11.05.2018, 14:12
    #39643267
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
чччДЧто вы так уродуетесь, выводите в иксель
Отчету не один год. И он работает.
Это как в анекдоте про мальчика, который про солнце спрашивал у папы-программиста

Если не найду другого выхода, то, наверное, придется...
Но, опять же, спасибо за идею. Мож, лучше в какой-нибудь другой (и желательно бесплатный ))) ) отчетник?...
...
Рейтинг: 0 / 0
11.05.2018, 14:20
    #39643273
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
gpiПример для FRDemo. FR 5.6.14
Эммм...мы с Вами, наверное, не оч друг друга поняли. Вот чуть переделала макет. Кстати, почти такой же я отправляла и ребятам из фаста.

С названиями, правда, понапутала, но смысл, думаю, прозрачный: слова "длинное" в заголовках не видать вообще...
...
Рейтинг: 0 / 0
11.05.2018, 15:00
    #39643298
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
Ваш Кросс данные не суммирует ? У вас проблема в формировании заголовка колонок ?

Создайте мемки на бенде Header или ColumnHeader, сделайте его растягиваемым и мемки растягиваемыми.
Зная количество колонок в датасете, можно получить ширину колонки, создать мемки на Detail-бенде и на Header-бенде.

Зачем пытаться использовать Кросс, если количество колонок заранее известно ?
...
Рейтинг: 0 / 0
11.05.2018, 15:25
    #39643317
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
DimaBrВаш Кросс данные не суммирует ?
Пока, да. Не суммирует. Но это не значит, что завтра это не понадобится ;)


DimaBr У вас проблема в формировании заголовка колонок ?
Именно. Точнее, проблема в формировании заголовка, влезающего на страницу таким образом, чтоб всё было максимально читаемым.

DimaBrЗачем пытаться использовать Кросс, если количество колонок заранее известно ?

Оно НЕИЗВЕСТНО заранее. Варьируется от запроса и от базы. от 1 и до....ну, порядка 50ти точно встречала. Известно оно мне будет только тогда, когда запрос выполнен. Для каждого из запросов (и в каждой отдельно взятой базе данных) количество колонок будет разным
...
Рейтинг: 0 / 0
11.05.2018, 15:28
    #39643323
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
DimaBrСоздайте мемки на бенде Header или ColumnHeader, сделайте его растягиваемым и мемки растягиваемыми.
Зная количество колонок в датасете, можно получить ширину колонки, создать мемки на Detail-бенде и на Header-бенде.

Я правильно поняла, что мемки нужно будет создавать динамически? (кол-во колонок-то неизвестно)
В общем-то, меня это не пугает, просто не уверена, что это наиболее оптимальный способ решения. Если уж создавать всё руками, то проще действительно писать сразу в excel
...
Рейтинг: 0 / 0
11.05.2018, 15:32
    #39643326
OlyaLora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого
Приложенный отчет, понятное дело, имеет конкретное кол-во столбиков. Надо ж было как-то обозначить проблему, а весь проект с базой, а еще лучше с несколькими...сами понимаете
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport. Уменьшить ширину столбцов crossa, не меняя при этом ширину первого / 25 сообщений из 34, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]