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

نام تاپیک: امتیاز بندی واریزی و رنکینگ

  1. #1

    امتیاز بندی واریزی و رنکینگ

    با سلام خدمت اساتید.
    در فایل پیوست امتیاز بندی را بر اساس واریزی انجام داده ام، ولیکن می خواهم که امتیاز بندی برای واریزی هایی که نهایتا تا سقف واریزی مبنا است انجام بشود و اضافه واریزی ها در امتیاز بندی در نظر گرفته نشود. ایده خودم نوشتن کدی برای پر کردن یک کویری از رکوردهای واریزی اشخاص هست تا اینکه مجموع واریزی به سقف مبنا برسد. ولیکن در عمل و اجرای آن قاصرم و از دوستان و اساتید مدد می خواهم .
    لطفا کمک کنید.

    با تشکر
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله amirali111 : یک شنبه 05 خرداد 1398 در 09:17 صبح

  2. #2

    نقل قول: امتیاز بندی واریزی و رنکینگ

    لطفا اگه کسی می تونه کمکم کنه.

  3. #3
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: امتیاز بندی واریزی و رنکینگ

    شرح مسئله بقدر کافی گویا نیست، یک مورد اینکه سقف واریزی انباشته در نظر گرفته میشه یا نه؟
    خروجی مورد نظر بر اساس دیتا نمونه رو بصورت جدول یا تصویر پیوست کنین

  4. #4

    نقل قول: امتیاز بندی واریزی و رنکینگ

    ممنون از توجه شما.
    سقف واریزی بر اساس جدول مبنای واریزی (TbVariziMabna) مد نظر است ، که تا تاریخهای مشخص مبالغی تعیین شده است. بطور خلاصه می توانیم میزان واریزی را برای 6 ماه اول و دوم هر سال ، یا حتی سالانه در نظر گرفت. ولی مساله اصلی بنده این هست که از زودترین تاریخ واریزی شروع کند و امتیاز بدهد تا جاییکه کمتر از سقف تعیین شده باشد و در واقع اضافه واریزی امتیازی در بر نداشته باشد.
    در واقع می توان از طریق Append Query واریزی هایی که باید در امتیاز بندی باشند را به یک جدول جدید اضافه و سپس از آن استفاده کرد ، ولی مشکل اینجاست که باید یکی یکی واریزی های هر فرد را بر اساس زودترین تاریخ انتخاب کند و چنانچه از سقف واریزی کمتر بود امتیازش را محاسبه نماید و بهمین ترتیب برای واریزی بعدی هم اگر چنانچه انباشته واریزی از انباشته واریزی مبنا کمتر بود به آن جدول موقت اضافه گردد .... تا آخر و نهایتا برای واریزی هایی که از سقف واریزی تعیین شده بیشترند امتیاز لحاظ نگردد.
    آخرین ویرایش به وسیله amirali111 : سه شنبه 07 خرداد 1398 در 11:06 صبح دلیل: اصلاح و توضیح بیشتر

  5. #5

    نقل قول: امتیاز بندی واریزی و رنکینگ

    لطفا کمک بفرمایید. من توضیحات را در پست قبل کامل تر کردم.
    شاید بهتر است سوالم را این طور مطرح کنم که چه کدی بنویسم تا بتواند رکوردهای یک جدول (TbVarizi) برای هر فرد را یکی یکی به جدولی موقت (TbVariziTemp) اضافه کند و در هر بار اضافه کردن مقایسه کند که به سقف واریزی رسیده است یا خیر؟ اگر رسیده بود مابقی واریزی های فرد را Append یا اضافه نکند.

  6. #6

    نقل قول: امتیاز بندی واریزی و رنکینگ

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

    همونظور که آقای mazoolagh
    گفتن شرح مسله و نمونه اصلا گویا نیست اگر میخوای به نتیچه برسی یه نمونه کاملتر بذازین هدف این سایت و کاربران اشتراک گداری و کمک هست وکسانی که کمک میکنن دنبال کش رفتن برنامه کسی نیستن

  7. #7
    کاربر دائمی
    تاریخ عضویت
    دی 1387
    محل زندگی
    تربت حیدریه
    پست
    131

    نقل قول: امتیاز بندی واریزی و رنکینگ

    نقل قول نوشته شده توسط amirali111 مشاهده تاپیک
    با سلام خدمت اساتید.
    در فایل پیوست امتیاز بندی را بر اساس واریزی انجام داده ام، ولیکن می خواهم که امتیاز بندی برای واریزی هایی که نهایتا تا سقف واریزی مبنا است انجام بشود و اضافه واریزی ها در امتیاز بندی در نظر گرفته نشود. ایده خودم نوشتن کدی برای پر کردن یک کویری از رکوردهای واریزی اشخاص هست تا اینکه مجموع واریزی به سقف مبنا برسد. ولیکن در عمل و اجرای آن قاصرم و از دوستان و اساتید مدد می خواهم .
    لطفا کمک کنید.

    با تشکر
    با سلام
    من هم یه طرحی مثل این برای امتیاز بندی واریزیها از طریق کوئری داشتم، و تا حدودی هم پیش رفتم ولی الان فایلش رو دم دست ندارم بزارم، پیشنهاد میکنم شما کلیه امتیاز واریزیها رو حساب کنید و بالاترین امتیاز رو درنظر بگیرید. یه سری پیشنهاد دارم که شاید در طراحی کوئری بدرد بخوره:
    1- حتما تو جدول یک فیلد منحصر بفرد از نوع Auto Number مثلا [ID] و یک فیلد تاریخ بصورت 8 رقمی [Tarikh] داشته باشید.
    2- روش امتیاز دهی رو میشه مثل بانکها استفاده کرد مثلا هر 100000 تومان هر روز یک امتیاز با توجه به تاریخ واریز.
    3- یک کوئری از جدول واریزی با فیلتر کد شخص بسازید و علاوه بر فیلدهای جدول مثل id و تاریخ و مبلغ واریز ،یک فیلد ترکیبی [ID] & [Tarikh] با فرمت تعداد کارکتر یکسان برای همه رکوردها داشته باشید. البته از ID هم میشه به تنهایی استفاده کرد ولی اگه اولش تاریخ باشه شما اگه واریزیهای رو جلو عقب ثبت کنید در موقع sort کردن به ترتیب تاریخ مرتب میشه
    4- توابع تاریخ شمسی رو هم داشته باشید و در کوئری یک فیلد تفاوت تعداد روز تاریخ واریز با تاریخ فعلی رو ایجاد کنید.
    5- یک فیلد امتیاز هم در کوئری بسازید و در اون میتونید فیلد تعداد روز را در مبلغ واریز با توجه به هر 100 تومن یک امتیاز ضرب کنید مثلا اگه واریزی 1 خرداد 200000 تومن بوده و 5 خرداد 150000 واریز شده . امتیاز این تا 10 خرداد بصورت زیر محاسبه میشه: برای رکورد 1 خرداد 200000/100000 ضرب تعداد 10 روز، 20 امتیاز و برای رکورد 5 خرداد، 7.5 امتیاز محاسبه میشه که اگه ازین جمع بگیریم جمعا 27.5 امتیاز خواهد شد. و شما بعدا میتونید بر مبنای بالاترین امتیاز هر شخص عمل کنید
    6- گاهی شما باید از چندین کوئری استفاده کنید که هر کدوم بر مبنای کوئری قبلی ساخته شده
    حالا نمدونم چقدر تونستم منظورم را برسونم

  8. #8

    نقل قول: امتیاز بندی واریزی و رنکینگ

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

    همونظور که آقای mazoolagh
    گفتن شرح مسله و نمونه اصلا گویا نیست اگر میخوای به نتیچه برسی یه نمونه کاملتر بذازین هدف این سایت و کاربران اشتراک گداری و کمک هست وکسانی که کمک میکنن دنبال کش رفتن برنامه کسی نیستن
    ممنون از توجه شما. در جدول مبنا تعهدات پرداخت و تاریخهای مقرر برای تمام اعضا آورده شده است. و در خصوص اینکه تاریخ مبناست عرض کنم، بطور مثال تا 931225 باید مجموعا 20 میلیون واریز بشه. و حالا می خوام با توجه به ریز واریز های هر فرد اگر تاریخ امتیاز بندی را فرضا تا پایان روز 931225 گرفتم فقط به اونهایی که نهایتا تا سقف واریزی مبنا پول ریخته اند امتیاز بده و به اضافه واریزی امتیاز تعلق نگیره.

  9. #9

    نقل قول: امتیاز بندی واریزی و رنکینگ

    نقل قول نوشته شده توسط sadegh1944 مشاهده تاپیک
    با سلام
    من هم یه طرحی مثل این برای امتیاز بندی واریزیها از طریق کوئری داشتم، و تا حدودی هم پیش رفتم ولی الان فایلش رو دم دست ندارم بزارم، پیشنهاد میکنم شما کلیه امتیاز واریزیها رو حساب کنید و بالاترین امتیاز رو درنظر بگیرید. یه سری پیشنهاد دارم که شاید در طراحی کوئری بدرد بخوره:
    1- حتما تو جدول یک فیلد منحصر بفرد از نوع Auto Number مثلا [ID] و یک فیلد تاریخ بصورت 8 رقمی [Tarikh] داشته باشید.
    2- روش امتیاز دهی رو میشه مثل بانکها استفاده کرد مثلا هر 100000 تومان هر روز یک امتیاز با توجه به تاریخ واریز.
    3- یک کوئری از جدول واریزی با فیلتر کد شخص بسازید و علاوه بر فیلدهای جدول مثل id و تاریخ و مبلغ واریز ،یک فیلد ترکیبی [ID] & [Tarikh] با فرمت تعداد کارکتر یکسان برای همه رکوردها داشته باشید. البته از ID هم میشه به تنهایی استفاده کرد ولی اگه اولش تاریخ باشه شما اگه واریزیهای رو جلو عقب ثبت کنید در موقع sort کردن به ترتیب تاریخ مرتب میشه
    4- توابع تاریخ شمسی رو هم داشته باشید و در کوئری یک فیلد تفاوت تعداد روز تاریخ واریز با تاریخ فعلی رو ایجاد کنید.
    5- یک فیلد امتیاز هم در کوئری بسازید و در اون میتونید فیلد تعداد روز را در مبلغ واریز با توجه به هر 100 تومن یک امتیاز ضرب کنید مثلا اگه واریزی 1 خرداد 200000 تومن بوده و 5 خرداد 150000 واریز شده . امتیاز این تا 10 خرداد بصورت زیر محاسبه میشه: برای رکورد 1 خرداد 200000/100000 ضرب تعداد 10 روز، 20 امتیاز و برای رکورد 5 خرداد، 7.5 امتیاز محاسبه میشه که اگه ازین جمع بگیریم جمعا 27.5 امتیاز خواهد شد. و شما بعدا میتونید بر مبنای بالاترین امتیاز هر شخص عمل کنید
    6- گاهی شما باید از چندین کوئری استفاده کنید که هر کدوم بر مبنای کوئری قبلی ساخته شده
    حالا نمدونم چقدر تونستم منظورم را برسونم
    ممنون از کمکتون. من بابت امتیاز دهی به هر واریزی افراد و نهایتا تجمیع آن و حتی رنکینگ مشکلی ندارم. مشکل من این است که می خواهم به واریزی های بالاتر از سقف تعیین شده امتیاز تعلق نگیرد. مثلا در فایل نمونه ای که گذاشتم سقف 60 میلیون تومان است. حال اگر بخواهیم در آخر به نرم افزار بگوییم که از واریزهای فرد با سورت تاریخ استفاده کند و آنها را در امتیاز بندی شرکت دهد و این کار را تا جایی انجام دهد که به سقف تعیین شده برسد چگونه قابل انجام است؟

  10. #10

    نقل قول: امتیاز بندی واریزی و رنکینگ

    اساتید محترم لطفا در کد نویسی موضوع مطرح شده و یا سایر راهکار حل آن کمک بفرمایید.

  11. #11
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: امتیاز بندی واریزی و رنکینگ

    شاید اگر یک رکوردست باز کنین و رکوردها رو تک تک بخونین و پردازش کنین راحتتر باشه.

  12. #12

    نقل قول: امتیاز بندی واریزی و رنکینگ

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

  13. #13

    نقل قول: امتیاز بندی واریزی و رنکینگ

    دارم سعی میکنم از طریق رکوردست به جواب سوالم برسم ولی در گام اول به مشکل برخوردم. لطفا راهنمایی بفرمایید چرا ایرور میده.
    موضوع سوالم این هست که می خوام از جدول Tb-varizi واریزی افراد را یکی یکی به ترتیب تاریخ واریزی بخونه و با جمع سقف واریزی از جدول مبنا واریزی مقایسه کنه و اگر کمتر از سقف بود به کویری مربوطه اضافه کنه و اگر بیشتر بود خیر. و این کار برای تک تک افراد انجام بشه.
    حالا با یک فانکشن جهت محاسبه جمع واریزی شروع کردم که در کویری QSumMablagh از اون استفاده کنم ولی ایرور زیر رو داد! نمی تونم دلیلش رو پیدا کنم.
    عکس های ضمیمه عکس های ضمیمه
    فایل های ضمیمه فایل های ضمیمه

  14. #14
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: امتیاز بندی واریزی و رنکینگ

    چند مورد هست که باید دقت کنین:
    1- در این تابع که نوشتین id رو بعنوان آرگومان ارسال میکنین ولی در اصل از codehesab حساب میکنین که مقدار نداره چون تعریف نشده.
    همیشه یک option explicit در ماژول ها بگذارین تا متوجه متغییرهای تعریف نشده بشین.
    2- کد حساب اگر عدد هست در جدول هم عدد معرفی کنین.
    3- در اسم جدول از - استفاده کردین. بجاش _ بگذارین تا با اپراتور تفریق اشتباه نشه.
    حداقل اینکه اسم های اینچنینی رو درون [] بگذارین.
    4- در جدول tbname خود codehesab کلید هست و نیاز به فیلد id ندارین. در واقع در جدول واریزی هم نیازی به id ندارین.
    البته اگر قرار هست دیتابیس خارج از اکسس استفاده بشه (مثلا یک اپلیکیشن دات نت) برای عملیات update/insert/delete همیشه یک کلید یکتا نیاز هست.

    من یک سری تغییرات رو براتون انجام میدم و دوباره پیوست میکنم.

  15. #15
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: امتیاز بندی واریزی و رنکینگ


  16. #16
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: امتیاز بندی واریزی و رنکینگ

    Option Compare Database
    Option Explicit
    Public Function Sum_Deposits(AccountID As Long) As Currency
    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM Deposits WHERE AccountID=" & AccountID & " ORDER BY DepositDate")
    Do While Not rst.EOF
    Sum_Deposits = Sum_Deposits + rst!Amount
    rst.MoveNext
    Loop
    rst.Close
    Set rst = Nothing
    End Function

  17. #17
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: امتیاز بندی واریزی و رنکینگ

    پس از این پاسخ ها رو از روی همین نمونه که پیوست میکنم بگیرین
    فایل های ضمیمه فایل های ضمیمه

  18. #18

    نقل قول: امتیاز بندی واریزی و رنکینگ

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

  19. #19

    نقل قول: امتیاز بندی واریزی و رنکینگ

    اگر بخواهم در کد ارایه شده کنترل کنم که جمع واریزی ها را تا جمع کل مبنا (مثلا 600 میلیون ریال) برای هر عضو انجام دهد چگونه بنویسم.

  20. #20
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,030

    نقل قول: امتیاز بندی واریزی و رنکینگ

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

    Public Function Rank(AccountID As Long, BaseAmount As Currency) As ???
    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM Deposits WHERE AccountID=" & AccountID & " ORDER BY DepositDate")
    Dim Sum_Deposits As Currency
    Do While Not rst.EOF
    Sum_Deposits = Sum_Deposits + rst!Amount
    If Sum_Deposits <= BaseAmount Then
    Rank = ......
    Else
    Rank = ......
    Exit Do
    End If
    rst.MoveNext
    Loop
    rst.Close
    Set rst = Nothing
    End Function


  21. #21

    نقل قول: امتیاز بندی واریزی و رنکینگ

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

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

  1. پاسخ: 8
    آخرین پست: یک شنبه 17 آبان 1394, 17:58 عصر
  2. سوال: درمورد برنامه ریزی در نحوه تهیه فایل پشتیبان
    نوشته شده توسط سیروس مقصودی در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 2
    آخرین پست: سه شنبه 15 اسفند 1391, 14:15 عصر
  3. پاسخ: 1
    آخرین پست: جمعه 24 خرداد 1387, 01:13 صبح

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

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