#reporting-services
#службы отчетов
Вопрос:
У меня возникли проблемы с некоторыми элементами отчета, изменяющими позиции других элементов, когда они условно скрыты.
Я использовал службы Reporting Services 2000 для печати ценовых меток товаров в формате PDF, при этом отчет состоял из одной таблицы с одной ячейкой для каждого товара. Поля данных и другие элементы на ярлыке размещены внутри одного прямоугольника. Из-за очень специфического требуемого макета некоторые элементы отчета перекрываются в конструкторе для правильного размещения в отображаемом PDF-файле.
Это отлично работало в течение нескольких лет, пока мы не обновились до SSRS 2008 и мне не пришлось перенести отчет в новую версию.
Теперь, внезапно, когда определенные элементы отчета скрыты (с помощью выражения в скрытом свойстве), некоторые другие элементы меняют свои позиции. В некоторых случаях изменяется размер даже содержащего прямоугольника.
После недолгого поиска в Google я пришел к пониманию, что SSRS 2008 пытается поддерживать относительный интервал между элементами отчета, так что, если элемент слева от другого изменяется в размере, элемент справа корректируется соответствующим образом.
Очевидно, что скрытие элемента приравнивается к изменению его размера до нуля, и поэтому элемент рядом с ним сдвигается влево, чтобы заполнить пробел.
Однако я не хочу такого поведения, поскольку все элементы должны оставаться на своих предопределенных позициях независимо от других.
Итак, кто-нибудь знает способ «исправить» позиции элементов отчета, чтобы на них не влияло скрытие других элементов?
Я попытался разместить элементы внутри отдельных прямоугольников, чтобы сгруппировать их, в надежде, что только элементы внутри одного прямоугольника могут влиять друг на друга, но, похоже, это не помогает.
Любые идеи будут высоко оценены.
Ответ №1:
В примере side by side вы можете поместить элемент управления, который может быть скрыт, в прямоугольник, достаточно большой, чтобы вместить оба элемента; но затем поместите другой элемент управления, который должен оставаться в фиксированном положении за прямоугольником (т. Е. родительским элементом этого элемента управления является отчет, а не прямоугольник).
Если этого недостаточно, и скрытые и нескрытые элементы используют один и тот же набор данных, вы могли бы (с содроганием) использовать гигантский элемент управления tablix с группировкой = 1 и правильным количеством строк и столбцов для управления макетом (потому что вы можете вставлять прямоугольники внутри).
Некоторые другие хитрости заключаются в том, чтобы установить для свойств color / backgroundcolor значение white (хотя в некоторых форматах отображения вы можете щелкнуть и перетащить, чтобы выделить и все равно прочитать, что там было)… с другой стороны, вы можете зайти так далеко, что все содержимое элементов управления будет основано на выражениях, чтобы ничего не создавать при выполнении условия, и поэтому оно в основном невидимо.
Комментарии:
1. Боже мой, это действительно сработало! Я перепробовал все это, за исключением установки z-индекса ограничивающего прямоугольника перед затронутыми полями! Огромное спасибо, чувак, ты спас мой день! Хотелось бы, чтобы у SSRS было какое-нибудь свойство для отключения этой функции «динамического макета», но на данный момент это решает мои проблемы без особых хлопот.
2. У меня такая же проблема в 2012 году. Я нашел более подробное решение здесь: dinesql.blogspot.com/2010/05 /…
3. Это настолько безумно, что сработало! Я должен любить SSRS! На самом деле я только поместил текстовое поле, которое будет скрыто, в прямоугольник, который будет немного шире самого себя, чтобы прямоугольник был его родительским, и, как вы предложили, отправил прямоугольник вперед.
Ответ №2:
Другой подход: создайте прямоугольники, содержащие поля, которые вы хотите скрыть, затем проведите БЕЛУЮ линию по всей нижней (или верхней) части прямоугольника. При этом прямоугольник остается того же размера, даже если поля внутри него скрыты. Прямоугольник будет сжиматься, если поля внутри него уменьшатся, но линия, охватывающая весь прямоугольник, предотвращает это.
Ответ №3:
Не уверен, поможет ли это кому-либо еще, поскольку это довольно специфическое требование, но это решило мой вариант проблемы с OPs, так что вот. Я разрабатывал отчет SSRS для печати меток (в моем случае Avery 5164), и пользователи хотели выбрать, какие метки на листе они будут печатать, потому что они, возможно, уже использовали одну или две метки со страницы. Поскольку расположение напечатанных меток важно, мне нужно было, чтобы они оставались на месте, даже если метки над ними на листе были скрыты. Моим решением было создать пустые прямоугольники того же размера, что и метка, и наложить их непосредственно поверх существующих прямоугольников. Даже если я скрою два, три, четыре и т.д… метки, остальные останутся на месте.
Ответ №4:
Просто нарисуйте прямоугольник и слегка наложите объекты с помощью условного скрытого выражения на положение вашего нового пустого прямоугольника. Объекты справа будут удерживаться на месте прямоугольником. Никаких цветов фона или чего-либо еще, просто прямоугольник. Работает вертикально, как если бы у вас был адресный блок и вы хотели, чтобы объекты под адресными строками оставались на месте. Вот так … введите описание изображения здесь