Чтобы познакомиться с подобного рода отчётами воспользуемся готовым отчётом «Список подборки подборки для нескольких заказов», который уже размещён на сервере:

Добавьте этот существующий отчёт к нашему проекту из папки «Мои документы». Обратите внимание, здесь мы не будем использовать хранимые процедуры, а будем использовать запрос, непосредственно внутри отчёта и использовать конструкцию типа «where o.OR01001 in (@OrderNumbers)». Переменная @OrderNumbers при построении отчёта будет подменена значениями.

Флажок «Многозначное» в параметре отчёта и позволяет выбирать несколько значений из списка:

Эта возможность отсутствует в версии MS SQL 2000 и появилась, только начиная с версии MS SQL 2005. Сейчас Вам предоставляется возможность исследовать особенности отчёта, в частности обратите внимание, каким образом можно вывести значение параметра «OrderNumbers» в одну строку, разделённую запятыми. Чтобы наполнить отчёт данными используйте в качестве поисковой строки часть имени покупателя «Триал».
Чем ещё интересен этот отчёт? Тем, что это пример документа, который отсутствует в Скале и который невозможно получить стандартными средствами.
Возможно, у Вас возникнет вопрос «можно ли использовать хранимые процедуры в отчётах с многозначными параметрами?»
Да, это возможно, просто в рамках нашего тренинга мы не успеем разобрать примеры того, как многозначные параметры преобразуются в строку значений, разделённых запятыми, а эта строка, в свою очередь в хранимой процедуре преобразуется в виртуальную таблицу, с которой выполняется объединение.
Ниже приведён пример такого кода:
Фрагмент из параметров хранимой процедуры:
@WHs nvarchar(4000)='RW01,RW02,RW03,RW04,RW05,RW06', --Склады прихода годной продукции
Фрагмент кода — преобразования
-- Разбираем строку значений, разделенных запятыми из переменной @WHs и вставляем в таблицу: Declare @Warehouses table (WHCode nvarchar(6)) -- Переменные для "разбора" длинной переменной @WHs на отдельные значения Declare @WhCode nvarchar(6), --Код склада @WHsLen int, --Длина переменной @WHs --Служебные переменные @Cnt1 int, @Cnt2 int Set @WHsLen = Len(@WHs) Set @Cnt1 = 1 While @Cnt1 <= @WHsLen Begin Set @Cnt2 = Charindex(',', @WHs, @Cnt1) -- Последнее значение из @WHs, после которой нет запятой If @Cnt2 = 0 Set @Cnt2 = @WHsLen + 1 -- Получаем код склада из строки значений Set @WhCode = Substring(@WHs, @Cnt1, @Cnt2 - @Cnt1) Set @Cnt1 = @Cnt2 + 1 -- Вставляем в таблицу Insert into @Warehouses Values (@WhCode) End -- После разбора значений и помещения этих значений в таблицу необходимо использовать join на нее в основном запросе
Фрагмент основного запроса:
… SC01060 as ExtProductGroup FROM SC070100 SC07 (NOLOCK) LEFT JOIN SC010100 SC01 (NOLOCK) ON SC07003 = SC01001 join @Warehouses WH on SC07009=WH.WHCode WHERE (SC07003 BETWEEN upper(@SC1) AND upper(@SC2)) AND (SC07002 BETWEEN @d1 AND @d2) and SC07001='00'
Содержание:
- Цели урока, Введение: 4 уровня отчетности в Scala/iScala
- Обзор структуры БД системы
- Знакомство с MS SQL Server Reporting Services
- Практическое создание отчётов: Создание общего источника данных
- Создание простейшего отчёта без параметров
- Публикация отчёта на сервере
- Модификация отчёта
- Добавление параметра «Код компании»
- Создание отчёта с элементом «Матрица»
- Добавление к проекту существующих отчётов
- Альтернативный вариант перехода из отчёта в отчёт: переход к URL-адресу
- Отчёты с многозначными параметрами
- Использование функций: Как вывести сумму прописью?
- Пользовательские «хотелки»: «А можно сделать сортировку и Автофильтр, как в Excel’е?»
- Подписки на отчёты
- Автоматизация создания связанных отчётов при сложной структуре
- Включение отчётов в меню iScala
- Кратко о реальном использовании MS SQL Server Reporting Services в компаниях-клиентах Epicor|Scala
- Более тесная интеграция MS SQL Server Reporting Services с iScala версии 2.3 SR2
- Как в отчёт MS SQL Server Reporting Services добавить возможность скрывать и показывать подробности?