Maalesef SSRS'te nakli yekün ve sayfa toplamı olması gerekenden çetrefilli. Nakli yekün için
bir blogdan (Peter ?), sayfa toplamı için de
başka bir blogdan (Annette Theißen) faydalandım.
Nakli yekün ve sayfa toplamı alacağımız alan
AccountingCurrencyAmountDebit olsun.
Devreden yekün için tablix kontrolümüze adı
dCarry,
valuesi aşağıdaki gibi olan bir alan ekliyoruz:
=RunningValue(Fields!AccountingCurrencyAmountDebit.Value,SUM,"LedgerTransListAccountDS")
veya koda göre gruplayacaksak:
=RunningValue(Fields!AccountingCurrencyAmountDebit.Value,SUM,"AccountNum_0")
Nakli yekün için de adı
dCarryH olan aşağıdaki gibi bir alan ekliyoruz:
=RunningValue(Fields!AccountingCurrencyAmountDebit.Value,SUM,"AccountNum_0") - Fields!AccountingCurrencyAmountDebit.Value
Her iki alanın da
visibility değerini
no yapıyoruz. Alanlar gizli de olsa hesaplama yapacak.
Nakli yekün için
Page Header kısmına v
aluesi aşağıdaki gibi olan bir alan ekliyoruz:
=First(ReportItems!dCarryH.Value)
Visibility değerini şarta bağlıyoruz (Böylece ilk sayfada nakli yekün olmayacak):
=Globals!PageNumber=1
Devreden yekün için de
Page Footer kısmına da
valuesi aşağıdaki gibi olan bir alan ekliyoruz:
=last(ReportItems!dCarry.Value)
Visibility değerini şarta bağlıyoruz (Böylece son sayfada devreden yekün olmayacak):
=Globals!PageNumber=Globals!TotalPages
Sayfa toplamı için iki
data method ve
variable eklememiz gerekiyor.
Data method eklemek için
treeview'de
Designs altındaki
Data Methods nodunda sağ klik -
Add Data Method yapıyoruz. Ardından üzerine çift klik yaparak kod ekranını açıyoruz. Eklediğimiz kod aşağıda kırmızı çizili olan parça:
using System;
using System.Collections.Generic;
using System.Security.Permissions;
using System.Data;
using Microsoft.Dynamics.Framework.Reports;
using Microsoft.Dynamics.AX.Application.Reports;
public partial class LedgerTransListAccount
{
static double previousTotal;
static double pageTotal;
static bool NewAccount;
static string lastAccount;
...
[DataMethod(), PermissionSet(SecurityAction.Assert, Name = "FullTrust")]
public static double PageTotal(double total)
{
if (NewAccount)
return total;
else
return total - previousTotal;
}
[DataMethod(), PermissionSet(SecurityAction.Assert, Name = "FullTrust")]
public static double PreviousTotal(double total)
{
previousTotal = total;
return 0;
}
[DataMethod(), PermissionSet(SecurityAction.Assert, Name = "FullTrust")]
public static string Reset()
{
NewAccount = false;
lastAccount = "";
return "";
}
[DataMethod(), PermissionSet(SecurityAction.Assert, Name = "FullTrust")]
public static string FollowAccount(string account)
{
if (lastAccount != "" && lastAccount != account)
NewAccount = true;
lastAccount = account;
return account;
}
}
Page Footera Bir
textbox ekliyoruz:
=PreviousTotal(First(ReportItems!dCarryH.Value))
Bu t
extbox'un
visible değerini
false yaparsak maalesef hesaplama yapmaz. Display formatı
number seçip
Show zero as combobox değerini boşluk yapın (None değil!!).
Sayfa toplamını göstermek için bir alan daha ekliyoruz:
=PageTotal(last(ReportItems!dCarry.Value))
Neden yukarıdaki gibi fazladan bir textbox kullandık diyenler için; SSRS malesef
expression parametre olarak iki farklı alanı kabul etmiyor.
Sayfa başına bir
Textbox ekliyoruz:
=Reset()