Top.Mail.Ru
онлайн-митап
19 декабря в 17:00 МСК
Матрица компетенций: как инструмент для развития разработчика

Полезные команды Report_Expression для SSRS отчета

Когда мы создаем SSRS отчет, то часто сталкиваемся с различными требованиями для отображения данных. Используя Report_Expression, можно решить достаточно много простых и сложных задач по выводу данных в нужном виде. Вот несколько команд, которые помогут в создании SSRS отчетов.

Формат вывода в ячейки

Не всегда вывод по умолчанию совпадает с ожиданием заказчика. Этот параметр сделает формат вывода в соответствии с общими настройками, установленными в системе. Для вывода числовых значений (обычно сумм) в свойствах поля Format ставим:

=Microsoft.Dynamics.Framework.Reports.BuiltInMethods.GetExtendedDataTypeFormat("AmountMST", Parameters!AX_RenderingCulture.Value)  

Команды для Expression

Следующие команды можно писать для поля в Expression:

Вывод наименования компании – обычно используется в заголовке отчета. Информация так же берется из настроек системы:

=Microsoft.Dynamics.Framework.Reports.DataMethodUtility.GetFullCompanyNameForUser
(Parameters!AX_CompanyName.Value, Parameters!AX_UserContext.Value)

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

= iif(Parameters!DiscrepancyReport.Value, Labels!@GLS110972,"")
=Switch(Parameters!TaxVatRegister_TaxDirection.Value="IncomingTax", Labels!@GLS109154,
	Parameters!TaxVatRegister_TaxDirection.Value="OutgoingTax", Labels!@GLS109147,
	Parameters!TaxVatRegister_TaxDirection.Value="UseTax", Labels!@ GLS109137)

Также можно использовать обычные математические выражения и команды подсчета суммы:

=Sum(Fields!TaxAmount.Value + Fields!TaxBaseAmount.Value)
=Fields!TaxAmount.Value + Fields!TaxBaseAmount.Value

Форматированный вывод строки помогает составить и вывести строку. Отличие от привычного форматированного вывода строки в том, что вместо %1 %2 необходимо использовать {0} {1}. Обратите внимание что нумерация начинается с 0:

=System.String.Format("{0} - {1}", Labels!@SYS336072, Labels!@SYS336073)

Еще одна полезная команда для вывода даты в отчет позволяет выводить значение Datetime в различном формате. Формат можно задавать, например, такой “dd.mm.yyyy”.

=Microsoft.Dynamics.Framework.Reports.DataMethodUtility.ConvertUtcToAxUserTimeZoneForUser
(Parameters!AX_CompanyName.Value, Parameters!AX_UserContext.Value, System.DateTime.UtcNow, "d", Parameters!AX_RenderingCulture.Value) & vbCrLf & Microsoft.Dynamics.Framework.Reports.DataMethodUtility.ConvertUtcToAxUserTimeZoneForUser(Parameters!AX_CompanyName.Value, Parameters!AX_UserContext.Value, System.DateTime.UtcNow, "t", Parameters!AX_RenderingCulture.Value)

VB код в отчете

В SSRS отчетах можно писать код на VB и использовать его в отчете. Например, для подсчета суммы строк. Для написания кода нужно открыть свойства отчета в дизайне, перейти в Code и написать сам код на VB.

Написанные функции в разделе Code можно использовать в ячейках отчета.

Используйте Code.название_функции(параметры):

=iif(Code.getCntOnPage = 0, Code.setCntOnPage(CountRows("TmpSalesReportForExample")), Code.setAmountLastPage(Fields!Amount.Value, Fields!IssueAmountCur.Value, RowNumber(Nothing)))

Для подсчета суммы строк и вывода результата в конце каждой страницы и общий итог в конце отчета добавим дополнительную колонку в отчет и сделаем ее скрытой. В этой колонке будем использовать написанные функции подсчета.

В начале объявим переменные

Dim private maxCntRowsOnPage = 18 
Dim public revenueAmountLastPage as Decimal
Dim public issueAmountLastPage as Decimal
Dim public cntRowsForLastPage as Integer

И опишем сами функции подсчета

Public Function setCntOnPage(ByVal _cntRows AS Integer) AS Integer
	cntRowsForLastPage = Int(_cntRows  / maxCntRowsOnPage ) * maxCntRowsOnPage
return cntRowsForLastPage
End Function
Public Function setAmountLastPage(ByVal _revenue As Decimal, 
			        	 ByVal _issue As Decimal,
				 ByVal _currentRow As Integer) as Integer
	If _currentRow > cntRowsForLastPage
		revenueAmountLastPage +=  _revenue
		issueAmountLastPage += _issue
	End If
return cntRowsForLastPage
End Function 

И функцию получения результата

Public Function getCntOnPage()
	return cntRowsForLastPage
End Function

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar