10 Kasım 2017 Cuma

AX 2012 - SSRS Raporda Nakli/Devreden Yekün ve Sayfa Toplamı

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 valuesi 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 textbox'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()




Hiç yorum yok:

Yorum Gönder