ارسال پاسخ 
 
امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
ایجاد گزارش بدهکار بستانکار مانده حساب بالانس حساب با SQL Server
10-12-2015, 03:13 AM (آخرین ویرایش در این ارسال: 12-15-2015 08:16 PM، توسط ali.)
ارسال: #1
ایجاد گزارش بدهکار بستانکار مانده حساب بالانس حساب با SQL Server
می خواهیم تابعی در SQL Server ایجاد نماییم که توسط آن بتوانیم تراز حساب اشخاص را به صورت بدهکار بستانکار و مانده بدست آوریم ، به این صورت که اطلاعات مربوط به حساب یک نفر را از یک جدول گرفته و مانده حساب ها ، بدهکار و بستانکار را محاسبه کند. در این روش هر عدد با عدد قبلی خود جمع می شود و در روبرای عدد جاری مقدار مانده نوشته می شود. به مثال زیر دقت فرمائید:

بدهکار بستانکار مانده
=========================
1000 0 1000
0 200- 800
450 0 1250

ابتدا یک جدول با مشخصات زیر ایجاد می کنیم.که اطلاعات مربوط به حساب افراد را نگه داری می کند.

کد:
CREATE TABLE [dbo].[tblAcount]
(
    [RowID] [int] PRIMARY key  IDENTITY(1,1) NOT NULL,
    [AcountStatus] [int] NOT NULL,
    [Name] [nvarchar](20) NOT NULL
)
فیلد RowID به صورت خودکار مقدار دهی می شود و کلید جدول است.
فیلد AcountStatus مقدار حساب را نشان می دهد.
فیلد Name نشان دهنده نام فرد دارای حساب است.
اطلاعات را به صورت زیر وارد جدول می کنیم.


کد:
INSERT INTO dbo.tblAcount ( AcountStatus, Name )VALUES  ( 100, 'ali')
INSERT INTO dbo.tblAcount ( AcountStatus, Name )VALUES  ( -520, 'amin')
INSERT INTO dbo.tblAcount ( AcountStatus, Name )VALUES  ( 30, 'mohammad')
INSERT INTO dbo.tblAcount ( AcountStatus, Name )VALUES  ( -90, 'ali')
INSERT INTO dbo.tblAcount ( AcountStatus, Name )VALUES  ( 160, 'ali')
INSERT INTO dbo.tblAcount ( AcountStatus, Name )VALUES  ( 95, 'amin')
INSERT INTO dbo.tblAcount ( AcountStatus, Name )VALUES  ( 700, 'reza')
INSERT INTO dbo.tblAcount ( AcountStatus, Name )VALUES  ( 50, 'mohammad')
INSERT INTO dbo.tblAcount ( AcountStatus, Name )VALUES  ( -180, 'reza')

[تصویر:  6358025352336732790100000.jpg]

تعریف تابع
عملکرد تابع به این صورت است که نام صاحب حساب را می گیرد و مقادیر حساب به همراه مانده آن را محاسبه می کند.

کد:
CREATE function [dbo].[UDFAcount2](@name nvarchar(20))
    returns @tblAcount table(
                    RowID int not null ,
                    debit decimal not null,
                    credit decimal not null,
                    remain decimal not null)
    as
    begin
            
        insert into @tblAcount
            select RowID,  
                  Isnull((select AcountStatus  from tblAcount
                               where  RowID=ta.RowID and AcountStatus>=0),0),
Isnull((select AcountStatus from tblAcount
            where  RowID=ta.RowID and AcountStatus<0),0),

            (select sum(AcountStatus) from tblAcount
                          where RowID<=ta.RowID and Name=@name)
              
                  from tblAcount ta where name=@name

        return
      end

با استفاده از این تابع، اطلاعات را از جدول tblAcount دریافت کرده و در یک جدول جدید با مشخصات زیر وارد کنیم تا مقدار باقیمانده حساب را محاسبه کند.با این شرط که اگر مقدار AcountStatus مثبت باشد، مقدار آن در ستون debit قرار گرفته و مقدار credit صفر شود. اگر مقدار AcountStatus منفی باشد مقدار آن را در ستون credit قرار داده و مقدار فیلد debit صفر می شود.

کد:
@tblAcount table(
        RowID int not null ,
        debit decimal not null,
        credit decimal not null,
                            remain decimal not null)

قطعه کد زیر بررسی می کند که آیا مقدار AcountStatus مثبت است یا خیر؟ در صورتی که مقدار آن مثبت باشد مقدار AcountStatus را در ستون debit قرار می دهد و در صورت منفی بودن مقدار صفر را قرار می دهد.

کد:
Isnull((select AcountStatus  from tblAcount
      where  RowID=ta.RowID and AcountStatus>=0),0)

قطعه کد زیر بررسی می کند که آیا مقدار AcountStatus منفی است یا خیر؟ در صورتی که مقدار آن منفی باشد مقدار AcountStatus را در ستون credit قرار می دهد و در صورت مثبت بودن مقدار صفر را قرار می دهد.

کد:
Isnull((select AcountStatus from tblAcount
       where  RowID=ta.RowID and AcountStatus<0),0)

این قسمت نیز مقدار مانده را محاسبه می کند.برای محاسبه مانده برای هر ردیف باید مقدار حساب فعلی یک نفر را با حساب های قبلی او جمع کرد.

کد:
(select sum(AcountStatus) from tblAcount
                          where RowID<=ta.RowID and Name=@name)

اجرای تابع
تابع را برای محاسبه مانده حساب فردی به نام ali اجرا می کنیم.

کد:
SELECT * FROM dbo.UDFAcount2('ali')

نتیجه به صورت زیر است.

[تصویر:  6358025414036148510100001.jpg]

(ارسال شده توسط آقای مهندس امین امیرخانی کارشناس ارشد نرم افزار)


==================================================
طراحی وب سایت
پروژه های برنامه نویسی تجاری
دانلود پروژه های ASP.NET وب سایتهای آماده به همراه توضیحات
دانلود پروژه های سی شارپ و پایگاه داده SQL Server همراه توضیحات و مستندات
دانلود پروژه های UML نمودار Usecase نمودار class نمودرا activity نمودار state chart نمودار DFD و . . .
دانلود پروژه های حرفه ای پایگاه داده SQL Server به همراه مستندات و توضیحات
پروژه های حرفه ای پایگاه داده Microsoft access به همراه مستندات و توضیحات
دانلود پروژه های کارآفرینی
دانلود گزارشهای کارآموزی کارورزی تمامی رشته های دانشگاهی
قالب تمپلیت های آماده وب سایت ASP.NET به همراه Master page و دیتابیس
برنامه های ایجاد گالری عکس آنلاین با ASP.NET و JQuery و اسلایدشو به همراه کد و دیتابیس SQL کاملا Open Source واکنشگرا و ساده به همراه پایگاه داده
==================================================
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال پاسخ 


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 2 مهمان