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

نام تاپیک: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

  1. #1

    Question تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    با سلام
    من یک جدول دارم که تاریخ های کل سال را روزانه ثبت شده و در فیلد دیگر این جدول مقادیر ظرفیت روزانه وجود دارد. (جدول 1)

    مشابه ذیل :
    تاریخ ظرفیت
    98/01/02 500
    98/01/03 400
    98/01/04 300
    98/01/05 700

    جدول 1
    جدول دیگری نیز وجود داره که مقدار سفارش مورد نیاز ثبت شده (جدول 2)

    مشابه ذیل :

    شماره سفارش مقدار سفارش
    1 1000
    2 500

    جدول 2
    حالا میخوام کوئری بسازم که مثلا سفارش 1 رو در جدول 1 بررسی بکنه و بگه جهت این سفارش باید تاریخ 98/01/02 به مقدار 500 و 98/01/03 به مقدار 400 و 98/01/04 به مقدار 100 واحد تولید بشه سپس از ادامه ظرفیت باقی مانده 98/01/04 که 200 تا میشه شروع کنه سفارش شماره 2 رو تامین بکنه که میشه 98/01/04 به میزان 200 واحد و 98/01/05 به میزان 300 واحد و همینطوری برای سایر روزها و سایر سفارشات بشه محاسبه کرد.
    ممنون میشم راهنمایی کنید.

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

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    بیان دقیق و درست پرسش خودش نیمی از پاسخ هست!

    خواسته شما مستقیم در کوئری بدست نمیاد و نیاز به کدنویسی داره.

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

    یک روتین هم باید بنویسین که دو جدول اصلی رو رکورد به رکورد پیمایش و پردازش کنه و نتیجه رو در جدول جدید بنویسه.
    روش هم به این صورت هست که از اولین سفارش و اولین تاریخ تولید شروع میکنین و مقادیر رو میخونین (در متغیر میریزین)
    اگر میزان سفارش کمتر یا برابر از مقدار تولید هست : در جدول سوم شماره سفارش و تاریخ تولید و میزان سفارش رو مینویسین و میزان سفارش رو از میزان تولید کم میکنین و میرین سراغ سفارش بعدی
    اگر میزان سفارش بیشتر از میزان تولید هست : در جدول سوم شماره سفارش و تاریخ تولید و میزان تولید رو مینویسین و میرین سراغ تاریخ تولید بعدی

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

    کد ساده هست ولی دقت میخواد، اگر مشکلی با نوشتن اون دارین خبر بدین.

  3. #3

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

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


    ممنون از وقتی که میزارین

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

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    الگوریتم رو براتون آماده میکنم

    time

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

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    اول پر کردن جداول با دیتا تست:

    1.PNG

    2.PNG

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

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    Sub Fill_Data()
    DoCmd.RunSQL "Delete * From Orders"
    DoCmd.RunSQL "Delete * From Production"
    Dim rs As Recordset
    Set rs = CurrentDb.OpenRecordset("Production")
    Dim MM, DD, Days As Long
    For MM = 1 To 12
    Days = IIf(MM < 7, 31, 30)
    For DD = 1 To Days
    rs.AddNew
    rs("[Date]") = 13980000 + MM * 100 + DD
    rs("Quantity") = 100 * RndX(1, 15)
    rs.Update
    Next DD
    Next MM
    rs.Close
    Set rs = CurrentDb.OpenRecordset("Orders")
    Dim i As Integer
    For i = 1 To 500
    rs.AddNew
    rs("OrderID") = i
    rs("Quantity") = 100 * RndX(1, 10)
    rs.Update
    Next i
    rs.Close
    Set rs = Nothing
    End Sub


    Public Function RndX(MIN As Long, Max As Long) As Long
    Randomize Timer
    RndX = Int((Max - MIN + 1) * Rnd + MIN)
    End Function

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

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    روتین پر کردن جدول OrderByDate :

    Sub Calc()
    DoCmd.RunSQL "Delete * From OrderByDate"
    Dim rsP As Recordset
    Dim rsO As Recordset
    Dim rsOBD As Recordset
    Set rsO = CurrentDb.OpenRecordset("SELECT * FROM Orders ORDER BY OrderID")
    Set rsP = CurrentDb.OpenRecordset("SELECT * FROM Production ORDER BY [Date]")
    Set rsOBD = CurrentDb.OpenRecordset("OrderByDate")
    Dim OQ, PQ, Q As Long
    PQ = rsP("Quantity")
    OQ = rsO("Quantity")
    Do
    Q = IIf(PQ < OQ, PQ, OQ)
    If Q > 0 Then
    rsOBD.AddNew
    rsOBD("OrderID") = rsO("OrderID")
    rsOBD("[Date]") = rsP("[Date]")
    rsOBD("Quantity") = Q
    rsOBD.Update
    End If
    If PQ >= OQ Then
    PQ = PQ - OQ
    rsO.MoveNext
    If rsO.EOF Then Exit Do
    OQ = rsO("Quantity")
    Else
    OQ = OQ - PQ
    rsP.MoveNext
    If rsP.EOF Then Exit Do
    PQ = rsP("Quantity")
    End If
    Loop
    rsP.Close
    rsO.Close
    rsOBD.Close
    Set rsP = Nothing
    Set rsO = Nothing
    Set rsOBD = Nothing
    End Sub


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

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    نتیجه کار:

    3.PNG

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

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    بررسی صحت عملیات :

    SELECT OrderByDate.Date, Production.Quantity, Sum(OrderByDate.Quantity) AS SumOfQuantity
    FROM OrderByDate INNER JOIN Production ON OrderByDate.Date = Production.Date
    GROUP BY OrderByDate.Date, Production.Quantity;


    4.PNG

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

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    بررسی صحت عملیات :

    SELECT OrderByDate.OrderID, Orders.Quantity, Sum(OrderByDate.Quantity) AS SumOfQuantity
    FROM OrderByDate INNER JOIN Orders ON OrderByDate.OrderID = Orders.OrderID
    GROUP BY OrderByDate.OrderID, Orders.Quantity;


    5.PNG

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

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    برنامه نمونه
    فایل های ضمیمه فایل های ضمیمه

  12. #12

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    بسیار بسیار متشکرم
    واقعا عالی بود

  13. #13

    Question نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    با سلام
    من به یک مشکل دیگه ای برخوردم Order های من دارای مدل های مختلفی (Type) هستش که اون ها را داخل جدول Orders گذاشتم و این مدل ها در جدول Production فقط در بعضی از روزها تولید می شوند.(باید محاسبات طوری باشه که روزهایی که Type موجود در جدول Production برابر با type موجود در جدول order بشه در نظر گرفته بشن)
    مثلا orderID های 1و5و8 که دارای Type یک (1) هستند و مقدارشون 900 و 200 و1500 هستش باید در جدول Production ، فقط در روزهایی که دارای Type یک (1) هستن باید تولید بشوند (در روزهای 1398/01/01 ، 1398/01/03 ، 1398/01/06 ، 1398/01/10 ، 1398/01/11)
    ممنون میشم تو فایلی که گذاشتم اصلاح کنین


    با تشکر
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله bita_ziba77 : شنبه 16 آذر 1398 در 13:27 عصر

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

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    سر فرصت فایل پیوست رو چک میکنم

    ولی بنظر میاد کافی هست شرط رو موقع باز کردن رکوردست اعمال کنین!

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

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    همین که شرط رو اضافه کنین کافی هست (هر دو رکوردست)
    برای هر type باید جداگانه محاسبه کنین

    البته بهتر هست که فیلد type رو به جدول OrderByDate هم اضافه کنین

  16. #16

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    با سلام
    امکان انجام کلیه Type ها به صورت همزمان وجود نداره ؟
    تعداد Type ها خیلی زیاده
    یا اینکه به صورت اتوماتیک بره هر نوع رو حساب کنه و در آخر تو جدول بریزه؟
    برای برنامه تولید میخوام انجام بدم
    اگه کمک کنین ممنون میشم
    خیلی بهش نیاز دارم

    با تشکر

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

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    1-در همون روتین calc یک آرگومان برای type تعریف کنید (البته اسم type رو عوض کنین چون reserved هست - فرضا ptype)
    در طراحی جدول ها هم همین تغییر نام رو انجام بدین و نوع اون رو هم integer بگذارین و نه string
    SUB CALC(PTYPE AS INTEGER)


    2- کد پاک کردن دیتا ORDERBYDATE رو حذف کنین

    3- شرط =WHERE PTYPEرو به کد بازکردن رکوردست ها اضافه کنین

    4- مقدار PTYPE رو هم در جدول ORDERBYDATE بنویسین

    5- یک روتین جدید بنویسین که در یک حلقه بازای تمام مقادیر PTYPE روتین CALC رو اجرا کنه
    کد مرحله 2 رو در ابتدای این روتین بگذارین

  18. #18

    نقل قول: تکمیل ظرفیت روزانه با احتساب مقادیر اولیه

    با سپاس فراوان
    مشکل حل شد

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

  1. پاسخ: 8
    آخرین پست: شنبه 08 اسفند 1394, 17:30 عصر
  2. سوال: تعریف عملگر انتساب برای انتساب اشاره گرها
    نوشته شده توسط Ananas در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 0
    آخرین پست: پنج شنبه 17 اسفند 1391, 09:37 صبح
  3. سوال: مشکل در انتساب بیت مپ به کامپوننت خودم
    نوشته شده توسط mbshareat در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 0
    آخرین پست: یک شنبه 07 آبان 1391, 17:54 عصر
  4. سوال: مشکل در انتساب بیت مپ به پراپرتی کامپوننت؟
    نوشته شده توسط mbshareat در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 2
    آخرین پست: دوشنبه 27 شهریور 1391, 02:50 صبح
  5. گرفتن اطلاعات اتسال اینترنت. (تعداد بایت فرستاده شده)
    نوشته شده توسط H_SH_VB در بخش برنامه نویسی در 6 VB
    پاسخ: 13
    آخرین پست: پنج شنبه 27 بهمن 1384, 22:49 عصر

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

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