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

سؤال : كيف يمكن فلترة الأقساط ؟

بدأه Swift في 9 سبتمبر 2008 · 34 رد · 5,379 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

شباب لدى سؤال . اليوم شغال على منظومة برنامج اقساط للبيع مقدماً ووقف امامى الأتى :-

لدى جدولين كما بالصورة بالأسفل

1. بيانات العملاء .

2.العمليات التى نحدث عموماً .

post-87900-1220933920_thumb.jpg

المشكلة : عملت فورم جديد لكى اقوم بعرض العملاء اللذين لم يقوموا بسداد " قسط شهر 9 " ولكن وقفت حائراً امام افتراضات كثيرة لا أدرى ما الأصح منها .

هنلاحظ فى الصورة أنى العميلين الأوليين قاما بسداد شهر 9 ماعدا العميل الأخير .

ياريت يا شباب طريقة يمكننى عرض العملاء الذين لم يسددوا قسط شهر 9 وعرضهم فى DBGrid

لو فى طريقة أخرى تحتاج الى تعديلات فى الجداول او الحقول او ما الى أخره لكى تتلائم مع هذة المشكلة برجاء كتابتها ايضاً

اتمنى ان يكون سؤالى مفهوم.

تم تعديل هذه المشاركة بواسطة Swift في 9 سبتمبر 2008 في 08:38

Comming Soon

#2

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

أولا: بالنسبة للفلترة يمكنك استعمال Query تتضمن التعليمة SELECT DISTINCT

ثانيا : ملاحظة بخصوص الجدول Transactions ، أليس من الأفضل لو مكان الاسم يكون الرقم التعريفي للعميل

:)

تم تعديل هذه المشاركة بواسطة merouane في 9 سبتمبر 2008 في 09:11

#3
اقتباس
أولا: بالنسبة للفلترة يمكنك استعمال Query تتضمن التعليمة SELECT DISTINCT

ما فائدة هذه التعليمة ؟ وياريت مثالى توضيحى بسيط عليها

اقتباس
ثانيا : ملاحظة بخصوص الجدول Transactions ، أليس من الأفضل لو مكان الاسم يكون الرقم التعريفي للعميل

عندك حق أحسن بس نحل مشكلة مشكلة الاول .

Comming Soon

#4

السلام عليكم:

بواسطة ادراج مكونين من datepicker واختيار اي فترة وذلك من خلال استعلام between and وبهذا يمكن عرض الزبائن الذين لم يسددوا في فترة معينة ..اتمنى ان اكون قد بسطت المشكلة

#5

SELECT DISTINCT مهمتها أنها تلغي التكرارات بعد القيام بـ SELECT

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

عند العمل مع DISTINCT سيظهر سطر واحد لهذا يمكننا اعتمادها للـ DBGrid دون مشاكل

بكل بساطة فلترة للذين لم يدفعوا ثم Distinct لهذه النتيجة

مثل

[color= #993333; font-weight: bold;]SELECT [color= #993333; font-weight: bold;]DISTINCT name [color= #993333; font-weight: bold;]FROM Transactions

هذه التعليمة ستظهر جميع الأسماء لكن دون تكرار

أي

محمد أحمد السيد

علاء ولي الدين

يحي عبد الوهاب

في حال عدم استعمالها

محمد أحمد السيد

محمد أحمد السيد

محمد أحمد السيد

علاء ولي الدين

علاء ولي الدين

علاء ولي الدين

علاء ولي الدين

يحي عبد الوهاب

يحي عبد الوهاب

يحي عبد الوهاب

الباقي عليك

:)

تم تعديل هذه المشاركة بواسطة merouane في 9 سبتمبر 2008 في 09:46

#6

مشكور أخوانى بس تعالى نطبق فكرتك يا King هنلاحظ الاتى :-

لو حددنا الفترة من 01/09/2008 الى الفترة 30/09/2008 سوف يقوم بعرض العملاء اللذين سددوا فقط ؟ لكن أنا اريد العكس

يعنى العملاء الذين لم يسددوا

اقتباس
بكل بساطة فلترة للذين لم يدفعوا ثم Distinct لهذه النتيجة

جميل خالص .. لقينا الخطوة اللى بعد القادمة .. لكن اين هى الخطوة الأم ! لم نعثر عليها

مشكورين على المحاولة

Comming Soon

#7

لا تذهب بتفكيرك بعيدا

[color= #993333; font-weight: bold;]SELECT [color= #66cc66;]* [color= #993333; font-weight: bold;]FROM Costumer

[color= #993333; font-weight: bold;]WHERE ID [color= #993333; font-weight: bold;]NOT  [color= #993333; font-weight: bold;]IN [color= #66cc66;]([color= #993333; font-weight: bold;]SELECT [color= #993333; font-weight: bold;]DISTINCT ID [color= #993333; font-weight: bold;]FROM Transactions

                  [color= #993333; font-weight: bold;]WHERE Date [color= #993333; font-weight: bold;]BETWEEN [color= #ff0000;]'09/01/2008' [color= #993333; font-weight: bold;]AND [color= #ff0000;]'09/30/2008'[color= #66cc66;])

ملاحظة التعريف بالـ ID و ليس Name لأنها أفضل

أو بالاعتماد على Name (غير مستحبة)

[color= #993333; font-weight: bold;]SELECT [color= #66cc66;]* [color= #993333; font-weight: bold;]FROM Costumer

[color= #993333; font-weight: bold;]WHERE Name [color= #993333; font-weight: bold;]NOT  [color= #993333; font-weight: bold;]IN [color= #66cc66;]([color= #993333; font-weight: bold;]SELECT [color= #993333; font-weight: bold;]DISTINCT Name [color= #993333; font-weight: bold;]FROM Transactions

                    [color= #993333; font-weight: bold;]WHERE Date [color= #993333; font-weight: bold;]BETWEEN [color= #ff0000;]'09/01/2008' [color= #993333; font-weight: bold;]AND [color= #ff0000;]'09/30/2008'[color= #66cc66;])

:)

#8
اقتباس
لو حددنا الفترة من 01/09/2008 الى الفترة 30/09/2008 سوف يقوم بعرض العملاء اللذين سددوا فقط ؟ لكن أنا اريد العكس

يعنى العملاء الذين لم يسددوا

استخدم SubQuery لعمل ما تريد:

  1.  
  2. SELECT name FROM TransactionsTable WHERE ID NOT IN(SELECT ID FROM TransactionsTable WHERE date
    BETWEEN '01/09/2008' AND '30/09/2008')
  3.  

ملاحظة هامة لا تستخدم اسماء محجوزة في اسماء الحقول مثل كلمة Date فقط تسبب لك الكثير من المشاكل في المستقبل, Transaction ايضا كلمة محجوزة.

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#9

مشكورين وجزاكم الله خيراً لحسن تعاونكم معى

سأقوم بتجربة الحلول بالمساء ان شاء الله

My Local Area Connection Duration : 4 Days and 2 hours

Sleepinggggggggg

تم تعديل هذه المشاركة بواسطة Swift في 9 سبتمبر 2008 في 13:33

Comming Soon

#10

أخي Swift نوم الهنا

بطريقك جرب

-

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
adotable1.First;
for i := 1 to adotable1.RecordCount do
begin
adotable2.Filtered := false;
adotable2.Filter := 'id = '''+adotable1.fieldbyname('id').asstring+''' and dat = '''+copy(datetostr(datetimepicker1.DateTime),1,7)+'''';
adotable2.Filtered := true;
showmessage(inttostr(adotable2.RecordCount));
if adotable2.RecordCount <= 0 then
begin
adotable3.Insert;
adotable3.Fields[0].Text := adotable1.Fields[0].Text;
adotable3.Fields[1].Text := adotable1.Fields[1].Text;
adotable3.Post;
end;
adotable1.Next;
end;
adotable2.Filtered := false;
end;

-

adotable1 هو جدول العملاء adotable2 هو جدول الأقساط adotable3 هو الجدول الذي سيحمل أسماء العملاء الذين لم يدفعو الأقساط

يقوم الأمر بأخذ رقم العميل من جدول العملاء ثم يعمل فلترة على جدول الأقساط حسب إسم العميل و التاريخ المحدد فإذا لم يجد تشابه فهذا يعني أن العميل لم يسدد هذا الشهر فيقوم بنسخه إلى جدول أخر و يكرر العملية

على كل أسماء العملاء لاحظ الصورة المرفقة التي تمثل ما حدث بعد النقر على الزر

لاحظ شكل التاريخ فهو يسجل السنة و الشهر فقط

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

-

أرجو أن تفيدك هذه الطريقة و لو بفكرة بكل الأحوال بعون الله نحن على الخط

-

-

و السلام ختام و رمضان مبارك على الجميع

post-143282-1220968516_thumb.jpg

تم تعديل هذه المشاركة بواسطة rober في 9 سبتمبر 2008 في 16:55

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#11

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

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

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

وبالنسبة لطريقة الأخ / rober فيظهر لى خطأ

Item cannot be found in the collection corresponding to the requested name or ordinal.

ارفقت المشروع للإطلاع على النتائج اللتى تظهر عند عمل الفلترة وهى نتائج غير صحيحة :S

وشكراً لسعة صدركم

تم تعديل هذه المشاركة بواسطة Swift في 10 سبتمبر 2008 في 10:35

Comming Soon

#12

المشكلة ليست في التعليمتين و إنما في قاعدة البيانات

لأنك عرفت PayDate كـ Texte

أرفقت مثالا لقاعدتين بالـ Custumer) Paradox و Orders المرفقتين مع دلفي) و الاتصال بالـ BDE

لاحظ Total للجدول الأخير مقارنة بالجدول الأول (العملاء)

ملاحظة : التواريخ MM/DD/YYYY

:)

SQL_Not_Saled.zip

#13

بالفعل غيرت نوع الحقل الى Date/Time وغيرت التنسيق الى Short Date

وتاكدت من ان البيانات المخزنة مطابقة للتنسيق

ومازالت المشكلة ايضاً

Comming Soon

#14

لدي ملاحظة قد تفيدك وتسهل الأمور قليلا... أو تعقدها قليلا.

في تصميم الجدول لدي سؤال ....

حقل التاريخ هل يمثل تاريخ السداد أم تاريخ القسط ... ؟؟

فأن كان يمثل تاريخ السداد (تاريخ إدخال عملية السداد) ... فهو لايمثل بالضرورة شهر القسط المطلوب عنه السداد

مثلا القسط المستحق عن شهر 9 قمت بسداده يوم 1/10

يمكنك إضافة حقل واحد نصي يمثل "فترة القسط" ويكون على هذه الصورة YYYYMM لأن اليوم لا يفرق معاك في السداد عن شهر ... مع الإحتفاظ طبعا بتاريخ السداد.

عن طريق حقل الفترة سيسهل عليك إستخراج أي تقارير أو إستعلامات شهرية.

تحياتي.

#15

لدي ملاحظة خارج نطاق إستفسارك

في نافذة جميع العملاء أسلوب البحث عن العملاء الذي إتبعته غير سليم لأنه يتطلب كتابة الإسم كاملا من دون أخطاء كما انه يظهر خطأ عند البحث عن إسم خالي ''

جرب هذه الطريقة

procedure TAllForm.Edit1Change(Sender: TObject);
begin
	 if edit1.Text<>'' then
		begin
			 MForm.CusTable.Filter:='Name like ''*' + edit1.Text+'*''';
			 MForm.CusTable.Filtered:=true;
		end;
end;
#16
اقتباس
لدي ملاحظة خارج نطاق إستفسارك

في نافذة جميع العملاء أسلوب البحث عن العملاء الذي إتبعته غير سليم لأنه يتطلب كتابة الإسم كاملا من دون أخطاء كما انه يظهر خطأ عند البحث عن إسم خالي ''

أنا فعلاً عايز الأسم يكون 100% متطابق وشكراً على توضيحك :wub:

هذا ما توصلت اليه مؤخراً

بطريقة SQL

  1.  
  2. ADOQuery1.Close;
  3. ADOQuery1.SQL.Clear;
  4. //ADOQuery1.SQL.Add('SELECT Name FROM Debitors WHERE Name NOT IN(SELECT Name FROM Products WHERE MonthPay BETWEEN '+Edit1.Text+ ' AND '+ Edit2.Text+') ');
  5. ADOQuery1.SQL.Add('SELECT * FROM Debitors WHERE Name NOT IN (SELECT DISTINCT Name FROM Products WHERE PayDate BETWEEN '+datetoStr(datetimepicker1.Date)+' AND '+datetoStr(datetimepicker1.Date)+')');
  6. ADOQuery1.Open;
  7.  
  8.  
  9.  
  10.  

1. قمت بتغيير خصائص الحقل الى Date/Time

2. يقرأ التاريخ من datetimepicker

النتيجة : يظهر لى جميع المستخدمين يعنى معملناش حاجة جديدة :S .

بطريقة Table العادية ... Rober

  1.  
  2. var
  3. I : integer;
  4. begin
  5.  
  6. MForm.CusTable.First;
  7. for i := 1 to MForm.CusTable.RecordCount do
  8. begin
  9. MForm.ProTable.Filtered := false;
  10. MForm.ProTable.Filter := 'Name = ''' + MForm.CusTable.fieldbyname('Name').AsString + ''' and Pa
    yDate = ''' + copy(datetostr(datetimepicker1.DateTime),1,7) + '''';
  11. MForm.ProTable.Filtered := true;
  12. showmessage(inttostr(MForm.ProTable.RecordCount));
  13. if MForm.ProTable.RecordCount <= 0 then
  14. begin
  15. MForm.NotTable.Insert;
  16. //MForm.NotTable.Fields[0].Text := MForm.CusTable.Fields[0].Text;
  17. MForm.NotTable.Fields[1].Text := MForm.CusTable.Fields[1].Text;
  18. MForm.NotTable.Post;
  19. end;
  20. MForm.CusTable.Next;
  21. end;
  22. MForm.ProTable.Filtered := false;
  23.  
  24.  
  25.  
  26.  

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

تم تعديل هذه المشاركة بواسطة Swift في 11 سبتمبر 2008 في 18:14

Comming Soon

#17

المشكلة في تعليمة ال SQL مع اكسس, حيث عند التعامل مع التاريخ يجب وضع # على طرفي التاريخ حتى يأخذه بالصيغة المناسبة,

جرب استبدال التعليمة بما يلي :wink: :

  1.  
  2. ADOQuery1.SQL.ADD('SELECT * FROM Debitors WHERE Name NOT IN (SELECT DISTINCT Name FROM Product
    s WHERE PayDate BETWEEN #'+datetoStr(datetimepicker1.Date)+'# AND #'+datetoStr(datetimepicker2.
    Date)+'#)');
  3.  
  4.  

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#18

قمت بفتح البرنامج والإطلاع على تكوين قاعدة البيانات وبعض العمليات فيه

ونصيحتي لك كوني محاسبا ومبرمجاً أن تقوم بإعادة تكوين البنية الأساسية لقاعدة البيانات وإتباع قواعد محاسبية نظامية للحصول على المعلومات اللتي ترغب بها

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

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

إذ حسب تصوري حتى لو استطعت حل مشكلتك الحالية فأنت ستحلها على اساس غير قوي

تم تعديل هذه المشاركة بواسطة decompiler في 10 سبتمبر 2008 في 11:44

#19
decompiler كتب:
قمت بفتح البرنامج والإطلاع على تكوين قاعدة البيانات وبعض العمليات فيه

ونصيحتي لك كوني محاسبا ومبرمجاً أن تقوم بإعادة تكوين البنية الأساسية لقاعدة البيانات وإتباع قواعد محاسبية نظامية للحصول على المعلومات اللتي ترغب بها

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

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

إذ حسب تصوري حتى لو استطعت حل مشكلتك الحالية فأنت ستحلها على اساس غير قوي

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

على العموم أخي سويفت أعتقد أن هذا ما تريده إن لم أكن مخطئ

Project_C1.rar

تحياتي

#20

أخي swift قمت بتجربة طريقة قد تنفع معك

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

عند بداية المشروع يقوم بإختبار أخر شهر تم إدخاله فإن كان أصغر من الشهر الحالي(مما يعني تغير الشهر)

يقوم بإضافة سجل لكل عميل و تكون قيمة الدفعة هي (0)

البحث حين يكون مربع التحديد (الكل) يقوم بعرض كل أقساط العميل المدفوعة و الغير مدفوعة بدون تحديد مدة معينة

البحث حين يكون مربع التحديد(الغير مسدد) يقوم بعرض أقساط العميل الغير مدفوعة فقط بدون تحديد مدة معينة

بحث عن العملاء الغير مسددين في الشهر المحدد يعرض جميع العملاء الغير مسددين خلال الشهر الذي يحدده المستخدم

شاهد المرفق

filter_option.rar

تم تعديل هذه المشاركة بواسطة rober في 10 سبتمبر 2008 في 13:03

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#21
اقتباس
وم بإضافة سجل لكل عميل و تكون قيمة الدفعة هي (0)

مشاء الله حل جميل ولكنه غير عملي ... ماذا عن العملاء الذين إنتهو من سداد كل الأقساط ... سيستمروا في الظهور معك في الشهور التالية ... وتضخيم قاعدة البيانات بشكل غير عادي وبلا أي داعي..

نفس المشكلة ظهرت في الحل اللذي قدمته أنا فوق حيث يقوم البرنامج بعرض كل العملاء الذين ليس لهم أقساط في شهر 9 مثلا .... يعني قائمة العملاء كاملة بما فيها من ليس له أقساط خلال الشهر المذكور.

ستقول هناك حل بان نضيف فلاج ما الى الجدول لتمييز العملاء الذين قامو بالسداد من هؤلاء الذين لايزال عليهم أقساط .... أقول كله لف ودوران دون داعي وسيظل أخي سويفت يخرج من مشكلة لمشكله أخرى.

البرنامج أخي روبير يجب أن يتم إعادة تحليله وتنظيم قاعدة بياناته بشكل أكثر فاعلية.

تحياتي

#22

أخي topsec شكرا للملاحظة

لكن حمل المرفق و جربه

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#23

أخي روبير قمت بتحميل البرنامج والفكرة كما قلت مسبقا ممتازة ... ولا إعتراض عليك أبدا ... ولكنه -مع روعته- يدخل تحت بند الترقيع

مشكلتي أني لا أستطيع أن أهضم التحليل المبني عليه البرنامج ... وكذلك لا اعرف المتطلبات المطلوبة من اخي سويفت في هذا البرنامج.

يجب لأي برنامج ان يبنى على تحليل سليم يخدم المطلوب منه ...

فمثلا "مثلا"

في برامج الأقساط وعلى حسب خلفيتي المتواضعة يكون هناك جدول لتسجيل الأقساط "المستحقة" وتواريخ إستحقاقها ... "فلوس الشركة اللي عند الناس"... أين هو في هذا البرنامج..؟

كيف تعرف الشركة ما تبقى لها من أقساط عند الشعب ...؟ :)

إن وجد مثل هذا الجدول سيكون من السهل جدا إستخراج مثل الإستعلام المطلوب وبمنتهى الدقة ...

وتقبلوا جميعا تحياتي ... وما أريد إلا المنفعة ... فقط لاغير

#24

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

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

فى البداية احب اشكر كل من كتب كلمة فى هذا الموضوع .

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

ونصيحتي لك كوني محاسبا ومبرمجاً أن تقوم بإعادة تكوين البنية الأساسية لقاعدة البيانات وإتباع قواعد محاسبية نظامية للحصول على المعلومات اللتي ترغب بها

زميل يعنى :D أنا بس لسة بدرس "كلية تجارة"

بالنسبة لموضوع التحليل :-

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

كان سؤالى له عن تسجيل قيود يومية / ترحيل الى دفتر الأستاذ / ميزانية عمومية

رفض كل ذلك وقال انة يريد فقط حاجة يسجل فيها العملاء اللى بيشتروا من عندى بالتقسيط وكل واحد ليه دفتر لوحدة كل ما يدفع مبلغ اضيفة فى الدفتر بتاعة .

الدفتر به خانتين : مدين قمت بالتعويض عنها فى البرنامج بــ ProPrice و دائن تم التعويض عنها بــ MonthPay

وعندما يتم مساواة المدين بالدائن يتم حذف العميل وشكراً .

وصفحة اعرف منها مين مدفعش الشهر دة علشان اطالبة .

وشكراً يا ايهاب

كان تحليلى للبرنامج بسط جداً واستخدمت البساطة فى كل شئ .

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

بالنسبة لموضوع الفلترة : استخدمت حل الأخ / TopSec جزاة الله كل خير

وهو يعمل بكفاءة معى .

وشكراً مرة أخرى لكل من ساهم ولو بكلمة

Comming Soon

#25

طلب صاحب المحل بعدم تعقيد البرنامج لايعني ابدا ان لايكون معتمد على اساس محاسبي صحيح يا أخي

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

ملاحظة

1- البرنامج يعطيك الرصيد المستحق على الشخص اي مجمل الدفعات التي لم يسددها (ليس الرصيد الفعلي اللذي عليه)

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

3- وضع تاريخ اول دفعة بشكل رقم بسبب تفضيلي لهذه الطريقة بالنسبة للتواريخ

procedure TForm1.Button1Click(Sender: TObject);
var
debt,credit,balanc,A_balanc:array[1..10] of integer;
s:string;
id,i,tim,p_v,p_p,p_f,p_r:integer;
begin

for i:=1 to 10 do
begin
debt:=0;
credit:=0;
balanc:=0;
A_balanc:=0;
end;

tb_pay.First;
while not tb_pay.Eof do
begin
credit[tb_payclint_id.AsInteger]:=credit[tb_payclint_id.AsInteger]+tb_payvalue.AsInteger;
tb_pay.Next;
end;

tb_sales.First;
while not tb_sales.Eof do
begin
debt[tb_salesclint_id.AsInteger]:=debt[tb_salesclint_id.AsInteger]+tb_salesprice.AsInteger;
tb_sales.Next;
end;

for i:=1 to 10 do
balanc:=debt-credit;
tb_sales.first;
while not tb_sales.Eof do
begin
p_v :=tb_salespay_val.AsInteger;
p_p :=tb_salespay_period.AsInteger;
p_f :=tb_salesFirst_pay.AsInteger;
p_r :=tb_salesprice.AsInteger;

tim:=round((now-p_f)/p_p);
if tim > round(p_r/p_v) then
tim:= round(p_r/p_v) ;

A_balanc[tb_salesclint_id.AsInteger]:=tim*p_v-credit[tb_salesclint_id.AsInteger];



StringGrid1.Cells[0,tb_salesclint_id.AsInteger]:=get_clint_nam( tb_salesclint_id.AsInteger);
StringGrid1.Cells[1,tb_salesclint_id.AsInteger]:=IntToStr( A_balanc[tb_salesclint_id.AsInteger]);
tb_sales.next;
end;





end;

pays.rar

post-114608-1221050515_thumb.jpg

تم تعديل هذه المشاركة بواسطة decompiler في 10 سبتمبر 2008 في 15:46

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