Предположим, что у нас есть один общий отчёт для разных компаний и нам нужно в нём выводить разные логотипы в зависимости от кода компании. Причём, есть некоторые нюансы того, какие логотипы для каких компаний использовать.
Например, для компаний, коды которых начинаются на A, B, C, D выводить картинки с логотипами, соответственно, A, B, C, D. Для компании с кодом ST выводить логотип «ST», а для других компаний, коды которых, начинаются на S, выводить логотип «S». Для компаний с кодами, начинающимися на 0, выводить общий логотип.
Создадим тестовый отчёт и импортируем в него картинки с логотипами:
Добавим также все возможные значения кода компании (в реальном отчёте это удобно сделать с помощью запроса к базе данных, но в тестовом учебном отчёте базы данных нет, поэтому просто перечислим):
Добавим элемент «Изображение» прямо в ячейку таблицы (в заголовочную часть документа):
И зададим его свойства:
Укажем размер (оригинальный):
А в поле «Использовать это изображение» не будем выбирать конкретную картинку, а зададим формулу:
Для верхней картинки зададим формулу с использованием функции IIF:
=IIF((left(Parameters!CompanyCode.Value,1)>="A" and left(Parameters!CompanyCode.Value,1)<="D")
or left(Parameters!CompanyCode.Value,1)="S",
IIF(Parameters!CompanyCode.Value<>"ST",left(Parameters!CompanyCode.Value,1),"ST"),"Common")
А для нижней картинки другую формулу:
Формула может быть написана вот так:
=Switch(
left(Parameters!CompanyCode.Value,1)="A","A",
left(Parameters!CompanyCode.Value,1)="B","B",
left(Parameters!CompanyCode.Value,1)="C","C",
left(Parameters!CompanyCode.Value,1)="D","D",
left(Parameters!CompanyCode.Value,1)="S" and Parameters!CompanyCode.Value<>"ST",”S”,
Parameters!CompanyCode.Value="ST","ST",
left(Parameters!CompanyCode.Value,1)="0","Common")
или вот так:
=Switch(
left(Parameters!CompanyCode.Value,1)>="A" and left(Parameters!CompanyCode.Value,1)<="D",left(Parameters!CompanyCode.Value,1),
left(Parameters!CompanyCode.Value,1)="S" and Parameters!CompanyCode.Value<>"ST",”S”,
Parameters!CompanyCode.Value="ST","ST",
left(Parameters!CompanyCode.Value,1)="0","Common")
Смысл один. Зачем я делаю это двумя разными функциями? А вот это как раз очень интересно. В первом случае (IIF) нужно задавать несколько вложений этой функции, а во втором (Switch) можно просто перечислить все возможные варианты. Результат, вроде бы должен быть одинаковым. Проверим.
Код компании 01:
Код компании A1:
Код компании B2:
Код компании S2:
Код компании ST (помните, для этой компании должен быть отдельный логотип?):
Вроде всё одинаково. Однако, что будет, если код компании окажется вне списка, перечисленного в наших обеих формулах, например, TR:
Вторая картинка не выводится. Всё дело в том, что в конструкции формулы с использованием Switch нельзя задать что-то вроде «иначе» (else), как это задаётся при использовании конструкции IIF. Получается, что switch более наглядная конструкция, но у неё есть и отрицательная сторона 🙂
Желаю успехов 🙂