пользователям программных продуктов Scala 5.1, iScala 2.1, iScala 2.2, iScala 2.3, iScala 3.0, iScala 3.1, iScala 3.2, iScala 3.3 (и так далее)

Насколько сложно перенести старые отчёты на Reporting Services?

Дано: есть большое количество отчётов, построенных на разных технологиях, этакий «зоопарк» — это и отчёты Crystal, и отчёты, загружаемые с помощью VBA кода в Excel, и RGW, и Access и т.д. и т.п. Важна не конкретная технология, а именно разнородность.

Как всё это упорядочить? Ну, вы же понимаете, что я буду говорить про SSRS, так как именно эта технология позволяет хранить всё на сервере, а не в локальных папках, и так как это на настоящий момент лучшая простая массовая технология в области отчётности.

Начнём с того, что больше 80% отчётов являются табличными, т.е. такими, где количество и структура столбцов заранее определены, а количество строк переменно.

Оставшиеся (менее 20%) отчётов — это либо матричные отчёты (с переменным количеством и строк, и столбцов), либо (чаще всего) отчёты фиксированной формы, классический пример — это российский баланс, где фиксированным являются не только столбцы, но и строки. Другим, чуть менее классическим примером, являются документы, например, счет-фактура или накладная, или УПД. Они, конечно, тоже имеют переменное количество строк, но я решил отделить их от обычных табличных отчётов из-за трудоёмкости «рисования» формы самого отчёта:

Универсальный передаточный документ (УПД) в дизайнере отчётов

Здесь я буду вести речь про табличные отчёты. Возьмём, например, вот такой:

Или вот такой:

Получение списка покупателей в RGW

Если рассматривать вопрос трудоёмкости создания подобного рода (табличных) отчётов, то самое сложное при их создании — получить правильный запрос к базе данных. А если запрос к базе данных уже есть, создать отчёт MS SQL Server Reporting Services дело нескольких минут или десятков минут (зависит от количества параметров, необходимости слегка «подкирпичить» запрос для совместимости с типами переменных, иногда нужно задать имя выводимого поля, вот, например, на картинке выше можно заметить такой фрагмент «isnull(GL53002,’’)» — в RGW это будет работать, а для SSRS желательно в явном виде указать имя поля в возвращаемом наборе данных, например, вот так: «isnull(GL53002,’’) as AccountName» и т.п.). Иногда на всё это, включая первичное тестирование, может уйти полчаса, иногда 2 часа, но, как правило, не больше 4-х.

Именно поэтому любые разговоры относительно того, что невозможно переделать 100 существующих отчётов я всегда воспринимаю скептически, как говорится: «Дорогу осилит идущий». Ну, предположим, что в среднем, на каждый отчёт требуется 2 часа. Умножим на 100 отчётов. 200 часов. Ну, да, это месяц работы. Но далеко не в каждой компании имеется 100 отчётов, в одной 10, в другой 25, редко где 50. Зато вы получите возможности, которых раньше не было. Не поленитесь и прочтите всё-таки статью «Что Вы сможете выжать из Вашей Скалы с помощью новых технологий?» или «Почему мы выбрали в качестве инструмента построения системы корпоративной отчетности MS SQL Server Reporting Services?»
Разумеется, иногда приходится полностью переписывать запрос, так, например, я встречал аксессовские отчёты, построенные не на исходных таблицах, а на представлениях (views), когда в одном представлении идёт обращение к другому, а из него, в свою очередь, к третьему и так до 10 вложений. Смотрится это ужасно, абсолютно непрозрачно и непонятно, а выполняется мучительно долго. Поэтому перед человеком, переносящим такого рода старый отчёт на новую платформу, встаёт вопрос: «оставить всё как есть, или всё переделать?». Но это уже другая история 🙂