الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

فكرة تحتاج توضيح: كشف حساب عميل تفصيلى ؟

بدأه red_scorpion1 في 16 أكتوبر 2013 · 10 رد · 10,041 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

 

كل عام وانتم بخير

 

اقوم بتصميم مشروع لمصنع وقمت بعمل جميع الصفحات المطلوبة (اصناف - موردين - عملاء - فواتير بيع - فواتير شراء - تسديد مديونية على العمل )

 

المشكلة التى تصادفنى الان هى الاتى: العميل كشوف الحساب التى يقوم بعملها تكون تفصيلى بمعنى

 

اسم العميل : احمد امين

 

صنف 1 - 01/10/2013 - 1000 جنيه

صنف 2 - 02/10/2013 - 500 جنيه

صنف 3 - 05/10/2013 - 2000 جنيه

-------------------------------------------

الإجمالى                        3500 جنيه

 

مدفوع   - 10/10/2013 - 500 جنيه

مدفوع   - 13/10/2013 - 1000 جنيه

------------------------------------------

الباقى                            2000 جنيه 

 

وهكذا .....................

 

وهنا استطيع ان استدعى الأصناف وقيمتها واقوم بحساب الإجمالى وكذلك أستدعى ما تم دفعة ولكن العميل اخبرنى انه احيانا بقوم باقفال حساب العميل شهريا على دفعات (لا يشترط ان تكون الدفعة مساوية لقيمة فاتورة على العميل ) واحيانا لا حيث من الممكن ان يكون للعميل حساب سابق فى شهر (9 مثلا) ويقوم بسحب بضاعة اخرى فى شهر (10) وتضاف إلى إجمالى مديونيته.

 

وفى مثالنا السابق احمد (عليه 2000 جنيه ) من شهر (10) وهم قيمة الأصناف السابقة فى المثال

ولكن اذا تم كتابة فواتير أخرى فى شهر (11 كمثال ) سيظهر فى كشف الحساب اما فواتير (10 او 11) وهذا حسب الفترة المختارة او ان اخترنا من 1/10/2013 حتى 30/11/2013 ستظهر لنا أصناف اخذها العميل فى 10 و 11 معا ( هل هذا صحيح ) - وفى نفس الوقت تم دفع 1500 من حساب العميل وتظهر فواتير تغطى قيمة ما تم دفعه ايضا 

 

فكيف يمكن التوصل لحل تلك المشكلة حيث ان العميل لا يريد الارتباط بفواتير فى السداد ( هو يريد ان يظهر له ما على العميل تفصيلا ( هنا المشكلة حيث ان هناك اصناف يكون تم دفع قيمتها وستظهر فى الاستعلام ؟ ) ويقوم بتخصيم المدفوع وهكذا ..... )

 

جداول قاعدة البيانات sql:

1. جدول عملاء ( كود - اسم - عنوان)

2. جدول الاصناف ( كود - اسم - وحدة - سعر - رصيد )

3. جدول فواتير بيع (تفاصيل) ( رقم الفاتورة - كود الصنف - السعر - الكمية - إجمالى قيمة الصنف )

4. جدول فواتير بيع (بيانات اساسية) ( رقم الفاتورة - كود العميل - تاريخ الفاتورة - إجمالى قيمة الفاتورة )

 

واخيرا اعتذر عن سوء طرح الموضوع واتمنى ان يكون مقصدى قد وضح لكم لمساعدتى فى ايجاد الحل

تم تعديل هذه المشاركة بواسطة red_scorpion1 في 16 أكتوبر 2013 في 04:50

#2
اقتباس

وفى مثالنا السابق احمد (عليه 2000 جنيه ) من شهر (10) وهم قيمة الأصناف السابقة فى المثال

ولكن اذا تم كتابة فواتير أخرى فى شهر (11 كمثال ) سيظهر فى كشف الحساب اما فواتير (10 او 11) وهذا حسب الفترة المختارة او ان اخترنا من 1/10/2013 حتى 30/11/2013 ستظهر لنا أصناف اخذها العميل فى 10 و 11 معا ( هل هذا صحيح ) 

 

 

صحيح ومنطقي

 

اقتباس
وفى نفس الوقت تم دفع 1500 من حساب العميل وتظهر فواتير تغطى قيمة ما تم دفعه ايضا 

 

 

هذا كلام جميل

 

اقتباس
فكيف يمكن التوصل لحل تلك المشكلة حيث ان العميل لا يريد الارتباط بفواتير فى السداد ( هو يريد ان يظهر له ما على العميل تفصيلا ( هنا المشكلة حيث ان هناك اصناف يكون تم دفع قيمتها وستظهر فى الاستعلام ؟ ) ويقوم بتخصيم المدفوع وهكذا ..... )

 

 

1 - عندما يقوم العميل بسداد دفعة من فاتورة يكون مبلغ السداد علي مستوي اجمالي فاتورة البيع وليس الاصناف

 

مثال

اشتري احمد أمين بضاعة في تاريخ 01-10-2013 ورقم الفاتورة 1  عبارة عن

 

1- شريحة نوكيا 10 جنيه

2- شاشة نوكيا 15 جنيه

3 - كي بورد نوكيا 5 جنيه

4- وش نوكيا 10 جنيه

==============

اجمالي الفاتورة 40 جنيه

 

سدد العميل احمد امين 10 جنيه من قيمة اجمالي الفاتورة رقم 1 اذن سيتبقي من الفاتورة وعلي العميل احمد 30 جنيه والموضوع ليس له علاقه الان بالاصناف

 

2- لم اشاهد في جداول قاعده البيانات جدول يتم تسجيل فيه سدادات العملاء ؟؟

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#3
محمد فؤاد تركي كتب:

صحيح ومنطقي

 

 

هذا كلام جميل

 

 

1 - عندما يقوم العميل بسداد دفعة من فاتورة يكون مبلغ السداد علي مستوي اجمالي فاتورة البيع وليس الاصناف

 

مثال

اشتري احمد أمين بضاعة في تاريخ 01-10-2013 ورقم الفاتورة 1  عبارة عن

 

1- شريحة نوكيا 10 جنيه

2- شاشة نوكيا 15 جنيه

3 - كي بورد نوكيا 5 جنيه

4- وش نوكيا 10 جنيه

==============

اجمالي الفاتورة 40 جنيه

 

سدد العميل احمد امين 10 جنيه من قيمة اجمالي الفاتورة رقم 1 اذن سيتبقي من الفاتورة وعلي العميل احمد 30 جنيه والموضوع ليس له علاقه الان بالاصناف

 

2- لم اشاهد في جداول قاعده البيانات جدول يتم تسجيل فيه سدادات العملاء ؟؟

 

السلام عليكم

 

أخى الفاضل محمد

 

يوجد جدول مدفوعات ولكن للأسف نسيت كتابته

 

ما فهمته من كلامك هو ان اى مبلغ يقوم العميل بدفعه يجب ان يتم خصمه من قيمة فاتورة وهذا أفضل بحيث ان المبلغ المدفوع إذا كان يغطى قيمة فاتورة يتم تعليمها على أنها مدفوعة وبذلك لن تظهر مرة أخرى - بمعنى أدق احمد اخذ فاتورتين واحدة ب 1000 والأخرى ب 300 ودفع 500 سيتم خصم ( 300 من الفاتورة ذات الإجمالى 300 وتعليمها على أنها سددت كى لا تظهر مرة أخرى ) وخصم 200 من الفاتورة التى قيمتها 1000 ) ويصبح إجمالى المديوينة 800 جنيه - هل هذا صحيح ؟

#4

هذا ما أقصدة بالضبط

1

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#5

السلام عليكم ...

اسمحوا لي أن أدلي بدلوي في الموضوع  :rolleyes:  .

يسمى هذا بــ "single payment for multiple invoices" أي دفعة واحدة لعدة فواتير  .... (و بالتالي الفاتورة الواحدة قد يتم سدادها عن طريق أكثر من دفعة )

حسب رأيي , فأنت تحتاج للجداول التالية :

  1. جدول الفواتير (رقم الفاتورة - تاريخ - رقم العميل - الاجمالي ..... تم_السداد_كاملا)
  2. جدول الدفعات الفعلية (رقم الدفعة - تاريخ -رقم العميل - المبلغ) و يمثل عمليات الدفع التي يقوم بها العميل 
  3. جدول ربط الدفعات بالفواتير و سأسميه الدفعات_الجزئية و فيه ( رقم الدفعة الفعلية - رقم الفاتورة - المبلغ) و يمثل هذا الجدول كوسيط بين الدفعات الفعلية و الفواتير .

سيناريو العمل :

ياتي زبون ليدفع دفعة , فنقوم بفتح سجل جديد في جدول الدفعات الفعلية , نسجل اسم العميل و المبلغ و التاريخ , نضغط رز "عرض" فيعرض فواتير الزبون التي فيها حقل تم_السداد_كاملا = false .

يعرض لك الفواتير بــ Grid  و فيها الحقول : 

رقم الفاتورة - الاجمالي - مجموع الدفعات للفاتورة إن وجدت - الباقي و هو الاجمالي ناقصا مجموع الدفعات - و حقل قابل للكتابة فيه هو المبلغ الذي نريد إضافته للدفعات (موضح بالصورة بالاسفل باسم payment) .

توزيع المبلغ على الفواتير :

إما يقوم المستخدم بتوزيع المبلغ كما يريد أو تضع خيار توزيع تلقائي بحيث يقون النظام بتوزيع المبلغ على الفواتير (يبدأ بالفاتورة الأقل قيمة مثلا ) .

عند الحفظ .. تقوم أولا بحفظ الدفعة الفعلية ثم الدفعات الجزئية , ثم إذا كانت الفاتورة دفعت بالكامل نضع حقل تم_السداد_كاملا = true  .

أصبح من السهل عليك عرض الدفعات لكل فاتورة مع إمكانية التعقب , مثلا فاتورة فيها الاجمالي = 1000 و المدفوع منها هو 800 , فقد يسألك العميل عنها , فيكون موضحا الدفعات و تواريخها 

record-single-payment-for-multiple-invoices.html

 

مشاكل ستواجهها :

تعديل مبلغ الدفعة بعد الدفع ؟؟؟؟ إمكانية حذف فاتورة فيها دفعات ..؟؟  أشياء بحاجة لمعالجة ..

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#6

السلام عليكم ورحمة الله وبركاته

أولاً: شكر خاص للأخ محمد تركى والأخ حسام الشامى على مجهودهما الرائع فى المنتدى

 

ثانياً: اسمحوا لى ببعض الإرشادات من خلال خبرتى العملية مع البرامج التجارية والمؤسسات ومن خلال دراستى لكورس المحاسبة

1- يجب أن تحاكى الواقع تماماً: بمعنى لو المستخدم عنده فاتورة مبيعات قيمتها 1000 وتم دفع نقدية 300 فيجب عليك فى البرنامج محاكات الواقع تماماً بأن تكون نافذة الفاتورة بها خانة للنقدية المدفوعة فيها وكذلك جدول الفواتير فى قاعدة البيانات سيحتوى على خانة للنقدية المدفوعة بجانب الخانات الأساسية للفاتورة من تاريخ، ورقم العميل، ومسلسل والرابط بالأسفل به عرض لفاتورة بيع من أحد إصدارت برنامج تجارى

2- الدفعات النقدية التى يدفعها العميل دون أى فواتير لا تربطها بأى فواتير لأنها بالفعل ليس لها أى علاقة بأى فاتورة إنما يتم تسجيلها من ضمن النقديات المدفوعة من العميل حتى يتم احتسابها لمعرفة صافى حسابه، كما أن ربطها بفاتورة معينة سيكون مجهوداً زائداً على المبرمج وكذلك عرضة للأخطاء البرمجية المنطقية

3- لحساب صافى يتم جمع إجمالى الفواتير ونطرح منه إجمالى النقديات المدفوعة بالفاتورة وإجمالى النقديات المدفوعة منفصلة ويطرح أيضاً أى مرتجعات

4- بخصوص موضوع الشهريات، لا يوجد مؤسسة تريد معرفة حساب عميل فى شهر معين لأنه غير منطقى، ولكن يمكنها أن تسأل عن إجمالى قيمة البضاعة التى سحبها خلال شهر معين أو إجمالى النقديات المدفوعة فى شهر معين أما طرحهما من بعض لمعرفة حسابه فى هذا الشهر غير منطقى

 

الرابط التالى يحتوى على عرض تقديمى لعملية البيع والشراء والمخازن

http://www.mediafire.com/download/9yxsvx7dvs59z39/Omar_Ben_Khatab.rar

 

أرجو أن تفيد هذه الكلمات

دعائى بالتوفيق للجميع

تم تعديل هذه المشاركة بواسطة ema2000_t في 17 أكتوبر 2013 في 00:03

10

أدعو الله أن يجعل أعمالنا خالصة لوجهه الكريم --- وأن ينفعنا بما علمنا

Dr Sayed Tohamy

Programming Instructor

مدرب برمجة

---------------

EmaSoft2000

-------------------

#7

وعليكم السلام ورحمه الله وبركاته

 

تركت المشاركة بعض الوقت ورجعت فوجدت بسم الله مشاء الله مشاركات من الاخ حسام والاخ سيد التهامي جزاهم الله ألف خير في غايه الروعة وبما أنكم قد بدأتم فالبادي أظلم  :evil:

و سأدلو بدلوي أنا الاخر لما لي خبره أيضا في هذه الجزئية ( حسابات الموردين والعملاء )

 

1- فيما يخص جزئية حسابات العملاء وهي محل السؤال في هذه المشاركة

هناك نوعين من الفواتير يتم التعامل معهم في حسابات العملاء

 

أ- الفواتير المرتبطة بالمخزون "البضاعة" والتي يتم بيع بضاعة للعميل ثم يتم السداد

ب- الفواتير الغير مرتبطة بالمخزون وهذه الحالة تكون مرتبطة بالنشاطات الخدميه والتي لا تبيع بضاعة مثل خدمات الانترنت مثلا

 

- فيما يخص الجزئية الاولي وهي بيع بضاعة بفاتورة بيع تنقسم أيضا الي قسمين أو ثلاثه أقسام علي حسب حجم البرنامج وما يحتويه من تفصيلات

القسم الاول وهو بيع بضاعة أولاً ثم تسجيل عمليات السداد علي دفعات ثانياً

القسم الثاني وهو تسجيل دفعة مقدمة أولاً ثم ربطها بفاتورة البيع ثانيا وقت عمليه البيع

القسم الثالث وهو تحصيل المبالغ عن طريق شيكات وجزئيه الشيكات لها أيضا تفاصيل أخري بالبرنامج لتسجيل شيك سواء اصدار شيك لمورد أو تحصيل شيك من عميل

 

 

- فيما يخص الحاله الاولي يتم تسجيل فاتورة البيع أولاً وتحتوي فاتورة البيع علي التفاصيل التاليه

 

* هيدر الفاتورة وتتكون من ،،،

رقم الفاتورة

تاريخ الفاتورة

اسم العميل

نوع الحركة

طريقة الدفع

 

* تفاصيل الفاتورة وتتكون من ،،،،

كود الصنف

اسم الصنف

الوحده

الكمية

سعر الوحده

الاجمالي

الخصم

الصافي

 

* تم انشاء شاشة جديد يتم تسجيل فيها المصروفات "وأقصد بالمصروفات" هي مصروفات النقل والنولون ومصاريف الشحن وتجمع هذه المصروفات علي صافي الفاتورة

 

بعد الانتهاء من شاشة المبيعات نأتي لمرحلة السداد

وتكون محتويات هذه الشاشة عبارة عن

 

1- رقم سند القبض

2- التاريخ

3- العميل

وكما قال الاخ حسام يتم فتح شاشة نستعرض منها جميع الفواتير التي لم يتم سدادها بالكامل

يتم اختيار الفاتورة لكي تنزل بكافة تفاصيلها في Grid الحركات ثم يتم كتابه الدفعه المراد سدادها مع العلم ان الفواتير المسدده بالكامل لا تظهر في هذه الشاشة

 

الحاله الثانية

الدفعات المقدمه

ماذا نفعل عندما يقوم العميل بدفع دفعه مقدمه قبل عمل فاتوره البيع 

 

1- يتم تصميم شاشه جديده لتسجيل الدفعات المقدمة من العميل

وتكون محتواها

- العميل

- الدفعة

- شرح القيد

 

2- عند عمل فاتورة البيع يتم استدعاء الشاشه السابقه لربط فاتورة البيع بالدفعات المقدمه وهذه الطريقة تقوم بعمل حركتين في حركة واحده

الاولي اصدار فاتورة البيع

الثانية غلق الدفعة مع فاتورة البيع

 

أما فيما يخص جزئية التحصيلات بشيكات

- يتم تصميم جدول عباره عن دفتر الشيكات ويكون مرقم حسب دفتر الشيكات المصدر من البنك

- ووقت تسجيل الدفعة المقدمه يتم تسجيل شيك تحصيل من العميل برقم شيك مرتبط بالتحصيل

 

من خلال التفاصيل المذكورة اعلاه

يمكننا عمل تقارير رائع جدا

وهو يمكننا الاستعلام عن الدفعة المرتبطة بالشيك والمرتبط بفاتورة البيع والمرتبط أيضا بالقيد المحاسبي

وبهذا الاستعلام يمكننا معرفه كافه التفاصيل الخاصه بهذه الفاتورة

 

مرفق بعض التقارير كأمثله التي تساعد المحاسب علي مشاهده حسابات العملاء طرفه

 

بالتوفيق للجميع

 

post-46243-0-63425600-1381958537_thumb.j

 

post-46243-0-82369700-1381958563_thumb.j

 

post-46243-0-46059200-1381958582_thumb.j

1

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#8

السلام عليكم ورحمة الله وبركاته

 

اعزائى الأعضاء أشكركم على إهتمامكم الشديد والذى اخجلنى حقا فجزاكم الله خيرا وسـأقص عليكم ما قمت بعمله والوضع الذى تم الوصول له الأن لكى تفيدونى بحل لأننى لا اجد اى حل 

 

1. تم عمل كشف الحساب بالطريقة الاتية ( يتم ادخال تاريخ الفترة مثلا 1/11/2013 حتى 30/11/2013 - يتم عرض اصناف تلك الفترة فقط وعرض اجماليها فى خانة مديونية الفترة - يتم الاستعلام عن حسابات ( ما قبله ) وهى صافى مشترياته ومدفوعاته فى خلاف التاريخ المحدد سابقا - يتم إافية المدوينة الحالية + ما قبله ويتم الحصول على الصافى وهو مطابق تماما لما تم حسابه يدويا والحمد لله.

 

لم يعجب العميل هذا الوضع واخبرنى انه لا يريد كتابة تاريخ نهائيا لأنه قد لا يتذكر التاريخ الذى سحب منه العميل بضاعته ورغم محاولتى اقناعه بالوضع السابق وان الغرض من التاريخ هو اظهار اصناف تلك الفترة فقط الا انه لم يقتنع وطلب منى ان يكون كشف الحساب بدون تواريخ  :wacko: 

 

2. قمت بعمل نموذج اخر من كشف الحساب بدون تاريخ ( يم اختيار العميل - ثم يتم احتساب اجمالى مشترياته واجمالى مدفوعاته ويتم طرحهم من بعض واظهار الصافى ( وهو نفس الرقم الذى كان يخرج بالتقرير السابق ) وقمت بعمل تجميع لمشتريات كل شهر بحيث انها تظهر تحت بعضها ويظهر كذلك مجموعها - الا انه فى النهاية احبطنى واعترض على انه بهذا عند عمل كشف الحساب لعميل ستظهر له جميع الاصناف التى اخذها طوال العام وهو يريد اظهار اللى عليه فقط وفى نفس الوقت لا يريد ربط دفعات السداد بفواتير نهائيا ؟؟؟!!  :wacko:  :o 

 

هو يريد كشف الحساب بهذ الشكل وبدون تاريخ ؟؟ (مطلوب كشف الحساب تفصيلى بالأصناف وكمياتها)

 

1/11/2013    صنف 1       20 كيلو      1000جنيه

2/11/2013    صنف 2       30 كيلو      3000 جنيه

4/11/2013    سداد دفعة                     500 جنيه

                    الباقى                          3500 جنيه

وهكذااااا .........

 

لا ادرى بكل وضوح كيف يمكننى عمل ذلك - هل اقوم بعمل جدول للترحيل مع كل صنف يتم كتابته وكل عملية دفع تتم واقوم بعمل كشف الحساب من هذا الجدول ؟ ولكن هذا الجدول مع الوقت سيصبح ثقيلا جداااا كذلك فى تلك الحالة ساقوم بتخرين الفاتورة مرتين مره فى جدول الفواتير ومره فى جدول الترحيلات - والدفعات المسددة كذلك مرة فى جدول السداد ومره فى جدول الترحيل ؟؟؟

 

لا يرد ربط السداد بالفواتير وفى نفس الوقت بريد ان اظهر له المتبقى عليه فقط ( تفصيلا ؟؟ ) والاهم لديه ان تظهر الدفعات المسددة تحت الاصناف بترتيب التواريخ كما اوضحت سلفا ؟   :o 

#9

السلام عليكم ..

الأخ red_scorpion1 ... 

ما يطلبه العميل , اعتقد سهل التحقيق ...و هو محق في طلباته .. 

  1.  توجد الباقي = مجموع المشتريات - مجموع الدفعات ..
  2. إذا كان الباقي = 0 هذا يعني أن حساب العميل كامل و خالص (لا مديونية) .
  3. إذا كان الباقي سالب , يعني العميل دافع زيادة .. و تعتبر دفعة مقدمة .. نادرا ما يحصل .
  4. الباقي موجب ... ببساطة نجلب المشتريات مرتبة حسب التاريخ .. و نضع الناتج في DataTable  ... و نضيف (ValueMustPaid)  يمثل القيمة التي يجب دفعها (قيمته 0 في الاستعلام و لكن ستحسب ضمن حلقة For).. يملء الــ DataTable  من الاستعلام التالي : 
    SELECT * , 0 AS ValueMustPaid FROM Invoice ORDER By InvoiceDate
  5. نعمل For Loop  ابتداء من آخر سطر , و نوجد المجموع في كل سطر , إذا كان المجموع الحالي أصغر من الباقي نضع ValueMustPaid  بقيمة المشتريات من السطر و إذا كان المجموع الحالي في السطر أكبر من الباقي يكون قيمة ValueMustPaid  هي الفرق .. و نتوقف في الحلقة ..
  6. نعرض للعميل الاسطر الأخيرة فقط الناتجة من الحلقة .. هكذا اعتبرنا أن الدفعات الأولى هي للمشتريات الأولى . في حالتك طالما أن الباقي هو 3500  فنعرض السطر الأخير 3000 و نعرض السطر الذي قبله و لكن نحن بحاجة لدفع 500 فقط .
  7.  

 

التاريخ              المادة          الوزن             القيمة            القيمة التي يجب دفعها

1/11/2013    صنف 1       20 كيلو      1000جنيه          500 جنيه  

2/11/2013    صنف 2       30 كيلو      3000 جنيه        3000 جنيه

 

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#10
حسام الشامي كتب:

 

السلام عليكم ..

الأخ red_scorpion1 ... 

ما يطلبه العميل , اعتقد سهل التحقيق ...و هو محق في طلباته .. 

  1.  توجد الباقي = مجموع المشتريات - مجموع الدفعات ..
  2. إذا كان الباقي = 0 هذا يعني أن حساب العميل كامل و خالص (لا مديونية) .
  3. إذا كان الباقي سالب , يعني العميل دافع زيادة .. و تعتبر دفعة مقدمة .. نادرا ما يحصل .
  4. الباقي موجب ... ببساطة نجلب المشتريات مرتبة حسب التاريخ .. و نضع الناتج في DataTable  ... و نضيف (ValueMustPaid)  يمثل القيمة التي يجب دفعها (قيمته 0 في الاستعلام و لكن ستحسب ضمن حلقة For).. يملء الــ DataTable  من الاستعلام التالي : 
    SELECT * , 0 AS ValueMustPaid FROM Invoice ORDER By InvoiceDate
  5. نعمل For Loop  ابتداء من آخر سطر , و نوجد المجموع في كل سطر , إذا كان المجموع الحالي أصغر من الباقي نضع ValueMustPaid  بقيمة المشتريات من السطر و إذا كان المجموع الحالي في السطر أكبر من الباقي يكون قيمة ValueMustPaid  هي الفرق .. و نتوقف في الحلقة ..
  6. نعرض للعميل الاسطر الأخيرة فقط الناتجة من الحلقة .. هكذا اعتبرنا أن الدفعات الأولى هي للمشتريات الأولى . في حالتك طالما أن الباقي هو 3500  فنعرض السطر الأخير 3000 و نعرض السطر الذي قبله و لكن نحن بحاجة لدفع 500 فقط .
  7.  

 

التاريخ              المادة          الوزن             القيمة            القيمة التي يجب دفعها

1/11/2013    صنف 1       20 كيلو      1000جنيه          500 جنيه  

2/11/2013    صنف 2       30 كيلو      3000 جنيه        3000 جنيه

 

 

 

أشكرك أخى الفاضل حسام ولكن هل بإمكانك التوضيح أكثر لأننى للم أفهم ما تقصده جيدا ؟؟

 

وهل اقوم بعمل جدول ترحيلات ام لا ؟

#11
red_scorpion1 كتب:

أشكرك أخى الفاضل حسام ولكن هل بإمكانك التوضيح أكثر لأننى للم أفهم ما تقصده جيدا ؟؟

 

وهل اقوم بعمل جدول ترحيلات ام لا ؟

حقيقة , لا اعرف إن جدول الترحيلات يمكن أن يحل المشكلة أم .. 

اليك الكود الذي أقصده ..  

float remaining = 3500;			DataTable dataTable = new DataTable();			dataTable.Columns.Add("Thedate" , typeof(DateTime));			dataTable.Columns.Add("Material" , typeof(string));			dataTable.Columns.Add("Price" , typeof(string));			dataTable.Columns.Add("Total" , typeof(float));			dataTable.Columns.Add("ValueMustPaid" , typeof(float));						dataTable.Rows.Add(new DateTime(2013 , 10 ,15) , "M1" , 300 , 300 , 0);			dataTable.Rows.Add(new DateTime(2013 , 10 ,30) , "M2" , 400 , 200 , 0);			dataTable.Rows.Add(new DateTime(2013 , 11 ,1) , "M3" , 1000 , 1000 , 0);			dataTable.Rows.Add(new DateTime(2013 , 11 ,2) , "M4" , 3000 , 3000 , 0);									DataTable destTable = dataTable.Clone();						float currentSum = 0;			DataRow r;			for(int i = dataTable.Rows.Count - 1; i >= 0 ; i --)			{				r = dataTable.Rows;				if(currentSum + (float)r["Total"] < remaining)				{					currentSum += (float)r["Total"];					r["ValueMustPaid"] = r["Total"];					destTable.ImportRow(r);				}else if (currentSum + (float)r["Total"] >= remaining)				{					float diff = remaining - currentSum;					r["ValueMustPaid"] =  diff;					destTable.ImportRow(r);					break;				}			}			destTable.DefaultView.Sort = "TheDate";			dataGridView1.DataSource = destTable.DefaultView;

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…