نمایش نتایج 1 تا 7 از 7

نام تاپیک: ایجاد گزارش بدهکار بستانکار و مانده در SQL Server با روشی ساده و ابتکاری

  1. #1
    کاربر جدید
    تاریخ عضویت
    آذر 1387
    پست
    7
    تشکر کردن
    5
    0 بار تشکر شده در 0 پست

    ایجاد گزارش بدهکار بستانکار و مانده در SQL Server با روشی ساده و ابتکاری

    سلام در لینک زیر شما می تونین روش جالبی رو برای ساخت لیست بدهکار بستانکار مانده بدون اینکه فشار زیادی به SERVER بیادر ایجاد کنین. این کدها و برنامه ها قبلا تست شده. می تونین به لینک زیر مراجعه بفرمائین:

    http://www.forum.a00b.com/showthread.php?tid=33

  2. #2
    مدیر بخش
    تاریخ عضویت
    بهمن 1385
    محل زندگی
    تبریز
    پست
    1,882
    تشکر کردن
    275
    1,424 بار تشکر شده در 809 پست

    نقل قول: ایجاد گزارش بدهکار بستانکار و مانده در SQL Server با روشی ساده و ابتکاری

    شما از مانده برای سرعت بخشیدن استفاده کردید؟

    اینکار اصلا خوب نیست. شاید اگر یک سیستم باشه اوکی باشه اما اگر چند تا سیستم بصورت همزمان کار کنن فکر کنم سیستم شما ایراد پیدا کنه. فرض کنید که دو نفر همزمان یک debit‌برای یک نفر ثبت کنند. اگر این رو هم تراکنش کنید که مشکل همزمانی حل بشه بازم فشار به سیستم اضافه می شه. اگر می خواید همچین کاری کنید یک جدول اضافی ایجاد کنید و مثلا هر روز یا زمانی که لود سیستم کم هست به روزش کنید. مثلا سندهای حسابداری رو آخر روز صادر کنید. البته بازم این روش خوب نیست. بهترین راه این هست که سندهای بسته شده و نشده داشته باشید و برای سندهایی که بسته نشدن همون جمع و تفریق کنید و برای سندهای بسته شده میزان نهایی رو نشون بدید. مثلا یک جدول سند اینجا کنید که آخر هر روز برای هر مشتری یک سند بزنه (یا یه جدول جدا برای هر ماه و ...)

    مشکل اصلی دیتابیس ها معمولا اجرای کوئری نیست. انتقال اون هست. فرض کن شما یهو ۱۰۰ هزار رکورد رو می زارید روی شبکه و یا از دیتابیس در خواست ۱۰ هزار رکورد می کنید. بعدش میاد با مثلا چه می دونم linq یا هرچیز دیگه فیلتر می کنید. (اشتباه خیلی رایج برنامه نویسهای سی شارپ) دیتا بیس می تونه خیلی از کوئری هایی که ما نیاز داریم رو سریع اجرا کنه مثلا توی سیستم من برای ۵۰ هزار رکورد متنی DBMS می تونه در ۱ میلی ثانیه (MySQL Corei5 8Gb RAM) کوئری رو اجرا می کنه. (هیچ بهینه سازی هم وجود نداره) اما برای انتقال همون نتایج به برنامه (Fetch time) نزدیک ۲۵ میلی ثانیه زمان مصرف میشه. حالا من اگر یه دستور where بزنم و ازش درخواست کنم که ۱۰ تا رکورد برگردونه نه تنها اجرای دستور زیر یک میلی ثانیه میاد حتی انتقال و نمایش اونم زیر یک میلی ثانیه می شه.

    بعد میشه سرعت دیتابیس رو با موارد زیاد بالا برد مثل کش کردن و یا استفاده از امکانات دیتابیس مثلا مپ کردن جدولها به RAM و یا کلاستر کردن و ... . اما خب شما هر کاری کنید برای هر سازمانی ارزش دیتا به اندازه هویت اون مهم هست برای همین هم باید دیتا به شکلی ذخیره بشه که براش مشکلی پیش نیاد.

    بیشتر مشکلات سرعت که من توی برنامه های ایرانی دیدم یا به ساختار برنامه بر می گشته (مثلا ۹۹ درصد موردهایی که دیدم یا کش کردن نداشتن و یا اینکه اصلا کش کردن درست و اصولی نداشتن و یک پارچگی داده رو به خطر می انداختن) یا مثلا برنامه ها همنطور که گفتم داده های زیادی رو درخواست می کردن و روی مواردی مثل شبکه می زاشتن. یه مورد خیلی رایج دیگه نداشتن ابتکار توی طراحی دیتابیس بودش. اما خب می تونم بگم ۹۰ درصد کندی توی سازمانهای کوچیک و متوسط از خود برنامه ناشی میشه و در سازمانهای بزرگ با داده زیاد هست که دیتابیس کندی رو ایجاد می کنه. (که اونا هم بودجه کافی برای کلاستر و ... رو دارن)

  3. #3
    مدیر کل سایت آواتار حمیدرضاصادقیان
    تاریخ عضویت
    آذر 1382
    محل زندگی
    تهران
    پست
    6,738
    تشکر کردن
    342
    4,143 بار تشکر شده در 1,863 پست

    نقل قول: ایجاد گزارش بدهکار بستانکار و مانده در SQL Server با روشی ساده و ابتکاری

    سلام .
    به جز مواردی که گفته شد ، در SQL Server خیلی راحت میتونید مانده رو بدون نگرانی محاسبه کنید . مثلا با استفاده از Window Function ها میتونید خیلی راحت و در کمترین زمان ممکن مانده رو به صورت آنلاین حساب کرده و به کاربر نشون بدین.
    با این روش فقط لقمه رو ده دور ، دور سرتون چرخوندین . با 3-4 خط کد خیلی راحت میشه به مانده رسید و در تعداد رکوردهای بالای 10 میلیون رکورد در زمان بسیار اندک با یک ایندکس گذاری مناسب به گزارش فوق دسترسی پیدا کرد.

  4. #4
    مدیر بخش
    تاریخ عضویت
    بهمن 1385
    محل زندگی
    تبریز
    پست
    1,882
    تشکر کردن
    275
    1,424 بار تشکر شده در 809 پست

    نقل قول: ایجاد گزارش بدهکار بستانکار و مانده در SQL Server با روشی ساده و ابتکاری

    به جز مواردی که گفته شد ، در SQL Server خیلی راحت میتونید مانده رو بدون نگرانی محاسبه کنید . مثلا با استفاده از Window Function ها میتونید خیلی راحت و در کمترین زمان ممکن مانده رو به صورت آنلاین حساب کرده و به کاربر نشون بدین.
    با این روش فقط لقمه رو ده دور ، دور سرتون چرخوندین . با 3-4 خط کد خیلی راحت میشه به مانده رسید و در تعداد رکوردهای بالای 10 میلیون رکورد در زمان بسیار اندک با یک ایندکس گذاری مناسب به گزارش فوق دسترسی پیدا کرد.
    فکر نکنم نیازی به window function باشه. می شه با group by هم حلش کرد. چون مبلغ نهایی مهم هست نه track. از طرف دیگه result کمتری تولید می کنه و در نتیجه سرعت بیشتری خواهد داشت و در کنارش قابلیت portable بودنش هم بیشتره.

    البته اگر track باشه حق با شماست. توی اوراکل هم می شه از توابع آنالیزی استفاده کرد. داخل MySQL هم میشه از مواردی مثل متغییرها بجاش استفاده کرد.

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

  5. #5
    مدیر کل سایت آواتار حمیدرضاصادقیان
    تاریخ عضویت
    آذر 1382
    محل زندگی
    تهران
    پست
    6,738
    تشکر کردن
    342
    4,143 بار تشکر شده در 1,863 پست

    نقل قول: ایجاد گزارش بدهکار بستانکار و مانده در SQL Server با روشی ساده و ابتکاری

    نقل قول نوشته شده توسط pswin.pooya مشاهده تاپیک
    فکر نکنم نیازی به window function باشه. می شه با group by هم حلش کرد. چون مبلغ نهایی مهم هست نه track. از طرف دیگه result کمتری تولید می کنه و در نتیجه سرعت بیشتری خواهد داشت و در کنارش قابلیت portable بودنش هم بیشتره.

    البته اگر track باشه حق با شماست. توی اوراکل هم می شه از توابع آنالیزی استفاده کرد. داخل MySQL هم میشه از مواردی مثل متغییرها بجاش استفاده کرد.

    یه راه دیگه هم می تونه تریگر ها باشه. اما من کلا کش کردن رو ترجیح می دم. اما اینکار باید خیلی حساب شده باشه جوری که دیتای کش غیر معتبر نشه.
    در واقع منظور من از مانده ، Running Total یا مانده در ردیف هست. وگرنه برای مانده نهایی که اصلا نیازی به Window Function نیست.ولی برای Running Total روشهای مختلفی وجود داره مثل استفاده از Cursor و یا Set Based Solution که با join ها پیاده سازی میشه. بهترین روش ولی استفاده از Window Function ها هست که سرعت بسیار بالایی دارد و خیلی سخت میتوانید یا شاید نتوانید این سرعت رو در سمت کلاینت با حجم داده های زیاد پیاده سازی کنید.

  6. #6
    کاربر جدید
    تاریخ عضویت
    اردیبهشت 1387
    پست
    16
    تشکر کردن
    12
    0 بار تشکر شده در 0 پست

    نقل قول: ایجاد گزارش بدهکار بستانکار و مانده در SQL Server با روشی ساده و ابتکاری

    سلام.خسته نباشید
    من برای این موردی که شما ذکر کردید نیاز به کمک دارم. وضعیت باقیمانده حساب بدهکار / بستانکار را تا هر ردیف نمایش دهد.
    اگر مقدوره راهنمایی کنید. با تشکر

  7. #7
    مدیر کل سایت آواتار حمیدرضاصادقیان
    تاریخ عضویت
    آذر 1382
    محل زندگی
    تهران
    پست
    6,738
    تشکر کردن
    342
    4,143 بار تشکر شده در 1,863 پست

    نقل قول: ایجاد گزارش بدهکار بستانکار و مانده در SQL Server با روشی ساده و ابتکاری

    سلام
    اینجا رو ملاحظه کنید
    البته سایت مذکور فیلتره باید با پروکسی بازش کنید.

تاپیک های مشابه

  1. ایجاد محدودیت ( Constraints )برای فیلد ها در Sql Server
    نوشته شده توسط tiago2 در بخش T-SQL
    پاسخ: 0
    آخرین پست: دوشنبه 28 اردیبهشت 1394, 09:59 قبل از ظهر
  2. چگونگی ثبت عکس در sql server با زبان vb6
    نوشته شده توسط atefehazad در بخش مطالب مرتبط با بانکهای اطلاعاتی در VB6
    پاسخ: 0
    آخرین پست: سه شنبه 28 مهر 1388, 14:13 بعد از ظهر
  3. سوال: محاسبه نمودن بدهکار بستانکار و مانده در گزارش
    نوشته شده توسط amini699 در بخش گزارش سازی با Crystal Report
    پاسخ: 3
    آخرین پست: دوشنبه 20 خرداد 1387, 10:18 قبل از ظهر
  4. سوال: محاسبه نمودن بدهکار بستانکار و مانده در گزارش
    نوشته شده توسط amini699 در بخش برنامه نویسی در 6 VB
    پاسخ: 13
    آخرین پست: یکشنبه 19 خرداد 1387, 23:49 بعد از ظهر
  5. قراردادن عکس در SQL Server با ASP (فوری)
    نوشته شده توسط ferdowsi در بخش Classic ASP
    پاسخ: 1
    آخرین پست: جمعه 08 مهر 1384, 02:28 قبل از ظهر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •