PDA

View Full Version : چگونگی پیاده سازی فرمول در یک جدول



mohsen_zelzela00
شنبه 15 بهمن 1390, 11:36 صبح
با سلام خدمت اساتید محترم

من دارم روی یه نرم افزار کار می کنم که یه سری محاسبات ریاضی رو براساس یه فرمول باید انجام بده ساده تر اگه بخوام بگم مثلاً اداره برق رو در نظر بگیرید که برای محاسبه مبلغ استفاده از یه فرمول خاص استفاده می کنه و ممکنه که هر چند وقت یه بار این فرمول عوض بشه.

چگونه من می تونم این مورد رو در نرم افزار خودم در نظر بگیرم؟؟؟ یعنی اینکه من فرمول رو چگونه در DB ذخیره کنم که هر سری که فرمول عوض بشه احتیاج نباشه من در برنامه دستکاری کنم؟؟؟؟

پیشاپیش سپاسگزارم

Galawij
شنبه 15 بهمن 1390, 11:52 صبح
سلام،
من فکر می کنم اول سعی کنید موارد واکشی که دارید و نیاز به فرمول و محاسبات دارند، داخل یک SP بنویسید، تا در صورتی که فرمول عوض شد، راحت بتونید SP را عوض کنید.
فیلدهایی را که در محاسبات استفاده می شوند در دستور Select بیارید، یعنی مستقیماً از نام فیلدها استفاده کنید نه از متغیرها.
اگر عملگر محاسباتی مثلاً از + به * عوض بشه که چاره ای جز Alter روال مورد نظر ندارید.
فرمول ها را هم در یک جدول دیگر نگهداری کنید،(می تونید همراه با فرمول ها نام روال مربوط به آن را نیز نگهداری کنید) بعداً به دردتون می خوره.
راه دیگری به ذهنم نمیرسه...

mohsen_zelzela00
شنبه 15 بهمن 1390, 12:04 عصر
سلام،
من فکر می کنم اول سعی کنید موارد واکشی که دارید و نیاز به فرمول و محاسبات دارند، داخل یک SP بنویسید، تا در صورتی که فرمول عوض شد، راحت بتونید SP را عوض کنید.
فیلدهایی را که در محاسبات استفاده می شوند در دستور Select بیارید، یعنی مستقیماً از نام فیلدها استفاده کنید نه از متغیرها.
اگر عملگر محاسباتی مثلاً از + به * عوض بشه که چاره ای جز Alter روال مورد نظر ندارید.
فرمول ها را هم در یک جدول دیگر نگهداری کنید،(می تونید همراه با فرمول ها نام روال مربوط به آن را نیز نگهداری کنید) بعداً به دردتون می خوره.
راه دیگری به ذهنم نمیرسه...
دوست عزیز ممنون میشم بیشتر توضیح بدید

ببینید مثلاً فرمول پارسال برابر
عامل1+عامل2+2000*2.3
و الان فرمولشون به این صورت تغییر کرده
عامل1+عامل3+3000*4.3+عامل4
که خود عامل ها هم روش محاسبه دارن

ممنون میشم اگه واستون ممکن باشه بیشتر واسم مسله رو باز بکنید

Galawij
شنبه 15 بهمن 1390, 12:55 عصر
ببینید من اگر باشم این طوری پیاده می کنم:
برای هر چهار تا عامل(در صورتی که در نهایت یک مقدار برمی گردانند) یک SP کلی طراحی می کنم که هر چهار تا عامل را داخل چهار تا متغییر قرار بده، این طوری هر وقت نیاز به هر عاملی باشه با فراخوانی یک SP در دسترس قرار می گیره.
برای اعداد ثابت هم متغییر(یا پارامتر ورودی) در نظر می گیرم(اعداد ثابت 2.3، 3000 و ...).
اگر از این فرمول در جاهای مختلف استفاده می کنید، بهتره براش یک SP در نظر بگیرید، اگر نه که در همان فرم برنامه محاسبه را انجام بدید و نتیجه را نمایش بدید.

mohsen_zelzela00
شنبه 15 بهمن 1390, 13:36 عصر
ببینید من اگر باشم این طوری پیاده می کنم:
برای هر چهار تا عامل(در صورتی که در نهایت یک مقدار برمی گردانند) یک SP کلی طراحی می کنم که هر چهار تا عامل را داخل چهار تا متغییر قرار بده، این طوری هر وقت نیاز به هر عاملی باشه با فراخوانی یک SP در دسترس قرار می گیره.
برای اعداد ثابت هم متغییر(یا پارامتر ورودی) در نظر می گیرم(اعداد ثابت 2.3، 3000 و ...).
اگر از این فرمول در جاهای مختلف استفاده می کنید، بهتره براش یک SP در نظر بگیرید، اگر نه که در همان فرم برنامه محاسبه را انجام بدید و نتیجه را نمایش بدید.
این فقط یک جا استفاده میشه و چون معلوم نیست که DB رویSQL بمونه نمی تونم با SP حلش کنم. حالا به نظر شما اگه بخوام در سطح فرم این کار رو انجام یدم یعنی لازم نیست فرمول رو درون DB ذخیره کنم؟؟؟؟ با تغییر فرمول محاسبات اونوقت من مجبورم برنامه ام رو دستکاری کنم درسته؟؟ اینو اون سازمان نمی خوات

in_chand_nafar
یک شنبه 16 بهمن 1390, 07:43 صبح
دوست عزیز برای طراحی Engine فرمول باید موارد زیر در نظر گرفته شود
1- کلیه پارامترهای مورد نظر شما از اطلاعات موجود در سیستم استخراج می گردد مثلا در سیستم محاسبه عوارض شهرداری پارمتر مساحت عرصه، تعداد طبقات و... (البته در این سیستم به بزرگی این چند تا چیزی که گفتم جمع دو عدد و....)
2- بهتر است موتور فرمول در برنامه باشد و از عبارت های TSQL برای پردازش استفاده کند
3- خط به خط فرمول را از بانک اطلاعاتی خونده و در اختایر مورد 2 قرار دهید تا پردازش را بوسیلهSQL انجام دهد
4- عبارت های شرطی را طزوری پیاده کنید که به طور مثال اگر حاصل عبارت درست بود به خط X و در صورت غلط بوده به خط Y برود
این چیزهایی که گفتم در حد خیلی ساده و بچه گانه است چند تا برنامه دیدم از این روش استفاده کرده یعینی خط به خطر فرمول را داخل جداول بانک اطلاعاتی ذخیره و پارس کردن عبارت های اون رو بهSQL دادن