با سلام به کلیه دوستان؛
موضوعی که مطرح می کنم یکی از مشکلات برنامه نویسان سیستم های اطلاعاتی (مثل حسابداری، انبار، فروش و ...) است:
مثلا در سیستم حسابداری
در گزارشاتی مانند دفتر روزنامه، دفتر کل و معین و ... که گزارشی از اتفاقات لحظه ای مالی جهت یک یا چند حساب یا همه حساب های یک دوره مالی یا یک محدوده تاریخی است؛ عناوینی مثل گردش بدهکار، گردش بستانکار و مانده حساب وجود دارد که تابعی از اطلاعات رکورد جاری و اطلاعات تجمیعی رکورد قبلی است. به عبارتی ساده تر:
گردش بدهکار (رکورد جاری) = مبلغ بدهکار (رکورد جاری) + گردش بدهکار (رکورد قبلی)
گردش بستانکار (رکورد جاری) = مبلغ بستانکار (رکورد جاری) + گردش بستانکار (رکورد قبلی)
مانده حساب = تفاضل گردش بدهکار و گردش بستانکار
و یا در سیستم انبار
در گزارشی مانند کارکس مقداری کالا که گزارشی از اتفاقات لحظه ای ورود و خروج کالا (مقداری) جهت یک یا چند کالا یا همه کالاهای یک دوره مالی یا یک محدوده تاریخی است؛ عناوینی مثل گردش وارده (یا گردش تجمیعی وارده / یا جمع وارده)، گردش صادره و مانده (موجودی) وجود دارد که تابعی از اطلاعات رکورد جاری و اطلاعات تجمیعی رکورد قبلی است. به عبارتی ساده تر:
گردش وارده (رکورد جاری) = مقدار وارده (رکورد جاری) + گردش وارده (رکورد قبلی)
گردش صادره (رکورد جاری) = مقدار صادره (رکورد جاری) + گردش صادره (رکورد قبلی)
مانده / موجودی کالا = تفاضل گردش وارده و گردش صادره
یا بطور کلی : برخی از اطلاعات عددی یک رکورد تابعی تجمیعی از اطلاعات آن رکورد و رکوردهای قبلی است.
نوشتن یک SP یا Function و استفاده از Cursor و یا جداول موقت یا مجازی برای نیل به این هدف مشکل نیست ولی منظور از این تاپیک ارایه راهکار مناسب می باشد تا:
1) برای حجم اطلاعات زیاد ، کند نباشد.
2) موجب افزایش حجم DB نگردد.
3) باعث افزایش ترافیک شبکه نگردد.
4) در هر محدوده از اطلاعات (مثلا محدوده تاریخی) قابل اجرا باشد.
5) فیلدی جهت ذخیره سازی فیلدهای تجمیعی فوق تعریف نشود.
با تشکر از همه کسانی که در این گفتگو راهکار مناسب ارایه دهند.