Как сделать вывод логотипа зависимым от кода компании?

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

Например, для компаний, коды которых начинаются на 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")

Для верхней картинки зададим формулу с использованием функции IIF

А для нижней картинки другую формулу:

А для нижней картинки другую формулу

А для нижней картинки другую формулу

Формула может быть написана вот так:

=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:

Код компании 01

Код компании A1:

Код компании A1

Код компании B2:

Код компании B2

Код компании S2:

Код компании S2

Код компании ST (помните, для этой компании должен быть отдельный логотип?):

Код компании ST (помните, для этой компании должен быть отдельный логотип?)

Вроде всё одинаково. Однако, что будет, если код компании окажется вне списка, перечисленного в наших обеих формулах, например, TR:

что будет, если код компании окажется вне списка, перечисленного в наших обеих формулах, например, TR

Вторая картинка не выводится. Всё дело в том, что в конструкции формулы с использованием Switch нельзя задать что-то вроде «иначе» (else), как это задаётся при использовании конструкции IIF. Получается, что switch более наглядная конструкция, но у неё есть и отрицательная сторона 🙂

Желаю успехов 🙂