المساعد الشخصي الرقمي

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


medreg
09-05-2008, 09:18 PM
السلام عليكم

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

وجبة الغذاء تبدأ من الساعة 11:01 وتنتهي على الساعة 14:00
وجبة العشاء تبدأ من الساعة 18:00 وتنتهي على الساعة 21:00
المبيت يبدأ من الساعة 00:00 وتنتهي على الساعة 05:00توضيح
وجبة الغذاء
إذا كان الذهاب من الساعة 05:01 وساعة الأياب هي الساعة 11:00 في هذه الحالة لا يستفيد المعني من وجبة الغذاء
إذا كان الذهاب من الساعة 05:01 وساعة الأياب هي الساعة 11:01 في هذه الحالة يستفيد المعني من وجبة الغذاء

إذا كان الذهاب من الساعة 05:01 والأياب على الساعة 14:00 في هذه الحالة يستفيد المعني من وجبة الغذاء
إذا كان الذهاب من الساعة 05:01 والأياب على الساعة 14:01 في هذه الحالة لا يستفيد المعني من وجبة الغذاء

وجبة العشاء
إذا كان الذهاب من الساعة 14:01 وساعة الأياب هي الساعة 18:00 في هذه الحالة لا يستفيد المعني من وجبة العشاء
إذا كان الذهاب من الساعة 14:01 وساعة الأياب هي الساعة 18:01 في هذه الحالة يستفيد المعني من وجبة العشاء

إذا كان الذهاب من الساعة 18.01 والأياب على الساعة 21:00 في هذه الحالة يستفيد المعني من وجبة العشاء
إذا كان الذهاب من الساعة 18:01 والأياب على الساعة 21:01 في هذه الحالة لا يستفيد المعني من وجبة العشاء

إذا كان الذهاب من الساعة 05:01 والأياب على الساعة 18:00 في هذه الحالة يستفيد المعني من وجبة الغذاء فقط
إذا كان الذهاب من الساعة 05:01 والأياب على الساعة 18:01 في هذه الحالة يستفيد المعني من وجبة الغذاء و وجبة العشاء

المبيت

إذا كان الذهاب من الساعة 05:01 وساعة الأياب هي الساعة 00:00 في هذه الحالة لا يستفيد المعني من المبيت لكن يستفيد من وجبة الغذاء ووجبة العشاء فقط
إذا كان الذهاب من الساعة 05:01 وساعة الأياب هي الساعة 00:01 في هذه الحالة يستفيد المعني من وجبة الغذاء ووجبة العشاء والمبيت أيضًا

إذا كان الذهاب من الساعة 21:00 والأياب على الساعة 11:00 في هذه الحالة يستفيد المعني من وجبة العشاء والمبيت فقط
إذا كان الذهاب من الساعة 21:01 والأياب على الساعة 11:00 في هذه الحالة يستفيد المعني من المبيت فقط


نأخذ مثال
احد الموظفين انتقل في مهمة


المثال الأول
تاريخ بداية المهمة هو يوم 07/01/2008 على الساعة 05:01
وتاريخ عودته أي الأياب هو يوم 09/01/2008 على الساعة 11:00 في هذه الحالة يكون الموظف حصل على
وجبة غذاء = 02
وجبة عشاء = 02
المبيت = 02

---------------------------------------------
المثال الثاني
تاريخ بداية المهمة هو يوم 07/01/2008 على الساعة 05:01
وتاريخ عودته أي الأياب هو يوم 09/01/2008 على الساعة 11:01 في هذه الحالة يكون الموظف حصل على
وجبة غذاء = 03
وجبة عشاء = 02
المبيت = 02

---------------------------------------------
المثال الثالث
تاريخ بداية المهمة هو يوم 07/01/2008 على الساعة 14:01
وتاريخ عودته أي الأياب هو يوم 09/01/2008 على الساعة 11:00 في هذه الحالة يكون الموظف حصل على
وجبة غذاء = 01
وجبة عشاء = 02
المبيت = 02
----------------------------------------------
المثال الرابع
تاريخ بداية المهمة هو يوم 07/01/2008 على الساعة 14:01
وتاريخ عودته أي الأياب هو يوم 09/01/2008 على الساعة 11:01 في هذه الحالة يكون الموظف حصل على
وجبة غذاء = 02
وجبة عشاء = 02
المبيت = 02

merouane
09-05-2008, 11:26 PM
السلام عليكم

أولا يا أخي احرص في المرة القادمة على اختيار الخط لأنني لم أقرأ سوى "؟؟؟؟؟"

أو أكتب على الشكل عربي/انجليزي او عربي/فرنسي

ثانيا حسب ما فهمت في حال كانت مؤسستك هي التي تتكفل بالإيواء

تاريخ بداية المهمة هو يوم 07/01/2008 على الساعة05:01 أي يوم و وقت حضوره
وتاريخ عودته أي الأياب هو يوم 09/01/2008 على الساعة 11:00 أي يوم و وقت ذهابه
في هذه الحالة يكون الموظف حصل على
وجبة غذاء = 02
وجبة عشاء = 02
المبيت = 02


إذا كان ما فهمته صحيحا إذا يكون لدينا

وجبة غذاء = 02
وجبة عشاء = 02
المبيت = 01
لأنه جاء على الساعة 05:01 والمبيت ينتهي على الساعة 05:00 ،
وغادر على الساعة 11:00 والمبيت يبدأ على الساعة 00:00 منه لا يحق له المبيت يوم حضوره ويوم مغادرته

المبيت يبدأ من الساعة 00:00 وتنتهي على الساعة 05:00

إذن يبقى له يوم 08/01/2008 الذي يحق له فيه المبيت

ننتظر التأكيد أو التوضيح أكثر

مهدي
10-05-2008, 12:48 AM
و عليكم السلام و رحمة الله


وجبة الغذاء تبدأ من الساعة 11:01 وتنتهي على الساعة 14:00
وجبة العشاء تبدأ من الساعة 18:00 وتنتهي على الساعة 21:00
المبيت يبدأ من الساعة 00:00 وتنتهي على الساعة 05:00
ملاحظة أولية خطأ في السطرين الأخيرين و الصواب

وجبة الغذاء تبدأ من الساعة 11:01 وتنتهي على الساعة 14:00
وجبة العشاء تبدأ من الساعة 18:01 وتنتهي على الساعة 21:00
المبيت يبدأ من الساعة 00:01 وتنتهي على الساعة 05:00


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

فالكود يكون كالتالي



procedure TForm1.Button1Click(Sender: TObject);
var t1,t2:tdatetime;
i,h,i1,j:integer;
s:string;
begin
//
i:=0;
while DateTimePicker1.date+i<DateTimePicker2.date do
begin
i:=i+1;
end;
t1:=strtotime('11:00:00') ;
t2:=strtotime('14:01:00') ;
i1:=0;
j:=0;
if (DateTimePicker3.Time<=t1) and (DateTimePicker4.Time>=t1) or
(DateTimePicker3.Time>=t1) and (DateTimePicker3.Time<=t2) then
j:=1;
dbedit5.text:=inttostr(i-1+j);
//

//
t1:=strtotime('18:00:00') ;
t2:=strtotime('21:01:00') ;
i1:=0;
j:=0;
if (DateTimePicker3.Time<=t1) and (DateTimePicker4.Time>=t1) or
(DateTimePicker3.Time>=t1) and (DateTimePicker3.Time<=t2) then
j:=1;
dbedit6.text:=inttostr(i-1+j);
//
t1:=strtotime('00:00:00') ;
t2:=strtotime('05:01:00') ;
i1:=0;
j:=0;
if (DateTimePicker3.Time<=t1) and (DateTimePicker4.Time>=t1) or
(DateTimePicker3.Time>=t1) and (DateTimePicker3.Time<=t2) then
j:=1;
dbedit7.text:=inttostr(i-1+j);
//
end;
غير أنه أخطأ مع المثال الثالث

medreg
10-05-2008, 09:07 AM
يا صديقي العزيز في هذا المثال قد بينت لك الحساب الحقيقي لعدد الوجبات التي يستحقها هذا الموظف من خلال المهمة التي قام بهاوكان تاريخ مغادرته من المؤسسة هو يوم 07/01/2008 على الساعة 12:00 وتاريخ عودته إلى المؤسسة يوم 09/01/2008 على الساعة 10:00
أوضح لك أكثر
تاريخ المغادرة من المؤسسة : في حالت مغادرته من المؤسسة فله الحق في وجبة الغذاء إبتداء من الساعة 11:01
تاريخ العودة إلى المؤسسة : في حالة عودته إلى المؤسسة فليس له الحق في وجبة الغذاء إلا إذا وصل على الساعة 11:01 وإذا وصل على الساعة 10:59 أو 11:00 بالضبط فليس له الحق
ولهذا فالموظف هذا له الحق فقط 04 وجبات ومبيتين
يوم 07/01/2008 من الساعة 12:00 إلى 14:00 له الحق في 01 وجبة غذاء ومن 14:01 إلى 18:00 ليس له الحق في أي شيء ومن 18:01 إلى 00:00 له الحق في 01 وجبة عشاء
يوم 08/01/2008 من الساعة 00:01 إلى 05:00 له الحق في 01 مبيت ومن 05.01 إلى 11:00 ليس له الحق في أي شيء ومن 11:01 إلى 14:00 له الحق في 01 وجبة غذاء ومن 14:01 الى 18:00 ليس له الحق في أي شيء
ومن 18:01 إلى 21:00 له الحق في 01 وجبة عشاء ومن 21:01 إلى 00:00 ليس له الحق في أي شيء
ويوم 09/01/2008 من 00:01 إلى 05:00 له الحق في 01 مبيت ومن 05:01 إلى 10:00 التي عاد عليها إلى المؤسسة ليس له الحق في أي شيء
ليكون عدد وجبات لهذه المهمة 02 وجبتين غذاء و02 وجبتين عشاء و 02 مبيتين

ملاحظة :
الفترة المتراوحة بين الساعة 14:01 و18:00 والتي اشرت فيها بانه ليس له الحق في اي شيء هذا للتوضيح فقط
بمأن المغادرة كاتنت من 12:00 من يوم 07/01/2008 ودامت إلى غاية 09/01/2008 فهنا معناه ان من 12:00 إلى 00:00 له الحق في 01 وجبة غذاء و01 وجبة عشاء
**** أن أكون قد وفقت

*******************************
علما بأنني استعمال الساعة حسب 24:00 ساعة بمعنى إن كتبت 12:00 فهي منتصف النهار وان كتبت 00:00 فهي منتصف الليل

merouane
11-05-2008, 04:58 PM
السلام عليكم

قبل أن تحكم جرب جميع الحالات الممكنة، ثم راجع القواعد التي ذكرتها وقارنها مع الكود

سأحاول أن أشرح ما كتبته:

لدينا: وجبة الغذاء تبدأ من الساعة 11:01 وتنتهي على الساعة 14:00

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

لدينا: وجبة العشاء تبدأ من الساعة 18:00 وتنتهي على الساعة 21:00

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

لدينا: المبيت يبدأ من الساعة 00:00 وينتهي على الساعة 05:00

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

وهناك أمر آخر عليك أن تدركه وهو أنك عندما تقوم بالآتي : ('t1:=strtotime('11:00:00
النتيجة تكون وقت يوم 30/12/1899 (البداية التي يحسب بها النظام) لأن الاوقات تحول إلى أرقام (Double) أي النتيجة تكون مختلفة عن الوقت 11:00 ليوم 09/07/2008

ملاحظة : لتتأكد قم بالأتي :
uses . . . . ,DateUtils ;
. . . . . .
procedure TForm1.Button1Click(Sender: TObject);
var t1:TDatetime;
V: double;
S: string;
AYear,AMonth,Aday: word;
begin
t1:=strtotime('11:00:00');
label1.Caption := datetostr(t1);
V:=t1;
Str(V:0:8, s);
label2.caption:=S;

DecodeDate(DateTimePicker1.Date,AYear,AMonth,Aday) ;
t1:=EncodeDateTime(AYear,AMonth,Aday,11,00,00,00) ;
label3.Caption := datetostr(t1);
V:=t1;
Str(V:0:8, s);
label4.caption:=S;
end;


وعليه t1 دائما أصغر

الحل هو العمل مع DecodeDate و EncodeDateTime أنظر السورس ثم انظر Help الخاص بالدلفي

هذه الطريقة في نظري أحسن و أثبت

Uses . . . .
DateUtils ;
. . . . . . . . . . .
procedure TForm1.Button1Click(Sender: Tobject) ;
var t1,t2: TdateTime ;
i,j: integer ;
AYear,AMonth,ADay: word ;
begin
// عدد الأيام
i:=DaysBetween(DateTimePicker1.date,DateTimePicker 2.date) ;

// نتأكد من أنها نفس اليوم بالنسبة ليوم الوقت
DateTimePicker3.Date:=DateTimePicker1.Date;
DateTimePicker4.Date:=DateTimePicker2.Date;

// بداية حساب عدد وجبات الغذاء
DecodeDate(DateTimePicker1.Date,AYear,AMonth,Aday) ;
t1:=EncodeDateTime(AYear,AMonth,Aday,14,00,00,00) ;
DecodeDate(DateTimePicker2.Date,AYear,AMonth,Aday) ;
t2:=EncodeDateTime(AYear,AMonth,Aday, 11,01,00,0) ;

j:=0 ;
if (DateTimePicker3.Time<t1) then
j:=j+1 ;
if DateTimePicker4.Time>=t2 then
j:=j+1 ;

dbedit5.text:=inttostr(i-1+j) ;

// بداية حساب عدد وجبات العشاء
DecodeDate(DateTimePicker1.Date,AYear,AMonth,Aday) ;
t1:=EncodeDateTime(AYear,AMonth,Aday , 21,00,00,00) ;
DecodeDate(DateTimePicker2.Date,AYear,AMonth,Aday) ;
t2:=EncodeDateTime(AYear,AMonth,Aday,18,00,00,00) ;

j:=0;
if (DateTimePicker3.Time<t1) then
j:=j+1;
if DateTimePicker4.Time>=t2 then
j:=j+1;

dbedit6.text:=inttostr(i-1+j) ;

// بداية حساب عدد مرات المبيت
DecodeDate(DateTimePicker1.Date,AYear,AMonth,Aday) ;
t1:=EncodeDateTime(AYear,AMonth,Aday,05,00,00,00) ;
DecodeDate(DateTimePicker2.Date,AYear,AMonth,Aday) ;
t2:=EncodeDateTime(AYear,AMonth,Aday, 00,00,00,00) ;

j:=0 ;
if (DateTimePicker3.Time<t1) then
j:=j+1 ;
if (DateTimePicker4.Time>t2) then
j:=j+1 ;

dbedit7.text:=inttostr(i-1+j) ;

end ;

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

أي شيء آخر فيعود لك و كيف وصفته

بالتوفيق و ننتظر النتيجة

medreg
12-05-2008, 02:09 AM
السلام عليكم

قبل أن تحكم جرب جميع الحالات الممكنة، ثم راجع القواعد التي ذكرتها وقارنها مع الكود

سأحاول أن أشرح ما كتبته:

لدينا: وجبة الغذاء تبدأ من الساعة 11:01 وتنتهي على الساعة 14:00

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

لدينا: وجبة العشاء تبدأ من الساعة 18:00 وتنتهي على الساعة 21:00

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

لدينا: المبيت يبدأ من الساعة 00:00 وينتهي على الساعة 05:00

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

وهناك أمر آخر عليك أن تدركه وهو أنك عندما تقوم بالآتي : ('t1:=strtotime('11:00:00
النتيجة تكون وقت يوم 30/12/1899 (البداية التي يحسب بها النظام) لأن الاوقات تحول إلى أرقام (Double) أي النتيجة تكون مختلفة عن الوقت 11:00 ليوم 09/07/2008

ملاحظة : لتتأكد قم بالأتي :
uses . . . . ,DateUtils ;
. . . . . .
procedure TForm1.Button1Click(Sender: TObject);
var t1:TDatetime;
V: double;
S: string;
AYear,AMonth,Aday: word;
begin
t1:=strtotime('11:00:00');
label1.Caption := datetostr(t1);
V:=t1;
Str(V:0:8, s);
label2.caption:=S;

DecodeDate(DateTimePicker1.Date,AYear,AMonth,Aday) ;
t1:=EncodeDateTime(AYear,AMonth,Aday,11,00,00,00) ;
label3.Caption := datetostr(t1);
V:=t1;
Str(V:0:8, s);
label4.caption:=S;
end;


وعليه t1 دائما أصغر

الحل هو العمل مع DecodeDate و EncodeDateTime أنظر السورس ثم انظر Help الخاص بالدلفي

هذه الطريقة في نظري أحسن و أثبت

Uses . . . .
DateUtils ;
. . . . . . . . . . .
procedure TForm1.Button1Click(Sender: Tobject) ;
var t1,t2: TdateTime ;
i,j: integer ;
AYear,AMonth,ADay: word ;
begin
// عدد الأيام
i:=DaysBetween(DateTimePicker1.date,DateTimePicker 2.date) ;

// نتأكد من أنها نفس اليوم بالنسبة ليوم الوقت
DateTimePicker3.Date:=DateTimePicker1.Date;
DateTimePicker4.Date:=DateTimePicker2.Date;

// بداية حساب عدد وجبات الغذاء
DecodeDate(DateTimePicker1.Date,AYear,AMonth,Aday) ;
t1:=EncodeDateTime(AYear,AMonth,Aday,14,00,00,00) ;
DecodeDate(DateTimePicker2.Date,AYear,AMonth,Aday) ;
t2:=EncodeDateTime(AYear,AMonth,Aday, 11,01,00,0) ;

j:=0 ;
if (DateTimePicker3.Time<t1) then
j:=j+1 ;
if DateTimePicker4.Time>=t2 then
j:=j+1 ;

dbedit5.text:=inttostr(i-1+j) ;

// بداية حساب عدد وجبات العشاء
DecodeDate(DateTimePicker1.Date,AYear,AMonth,Aday) ;
t1:=EncodeDateTime(AYear,AMonth,Aday , 21,00,00,00) ;
DecodeDate(DateTimePicker2.Date,AYear,AMonth,Aday) ;
t2:=EncodeDateTime(AYear,AMonth,Aday,18,00,00,00) ;

j:=0;
if (DateTimePicker3.Time<t1) then
j:=j+1;
if DateTimePicker4.Time>=t2 then
j:=j+1;

dbedit6.text:=inttostr(i-1+j) ;

// بداية حساب عدد مرات المبيت
DecodeDate(DateTimePicker1.Date,AYear,AMonth,Aday) ;
t1:=EncodeDateTime(AYear,AMonth,Aday,05,00,00,00) ;
DecodeDate(DateTimePicker2.Date,AYear,AMonth,Aday) ;
t2:=EncodeDateTime(AYear,AMonth,Aday, 00,00,00,00) ;

j:=0 ;
if (DateTimePicker3.Time<t1) then
j:=j+1 ;
if (DateTimePicker4.Time>t2) then
j:=j+1 ;

dbedit7.text:=inttostr(i-1+j) ;

end ;

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

أي شيء آخر فيعود لك و كيف وصفته

بالتوفيق و ننتظر النتيجة

شكرًا جزيلاً
لكن هنا خطأ يظهر عندي
علما انني استعمل في مكان DateTimePicker الستعمل DBEdit
وبدلاً من السطر
i:=DaysBetween(DateTimePicker1.date,DateTimePicker 2.date) ;
استعمل
i:=DaysBetween(table3.fieldByName('DT_DEP1').asdat eTime,table3.fieldByName('DT_ARV1').asdateTime) ;

عندما احاول التنفيذ يعطيني هذا التحذير
[Erreur]Unit1.pas(773):Identificateur non déclaré:'table3'
**** اظهار اين يكمن الخطأ

merouane
12-05-2008, 02:26 AM
العفو .. لكن لم تخبر هل هذا ما أردته وهل النتائج صحيحة؟؟؟

بالنسبة للخطأ، هل TTable سميته Table3

لأن الرسالة تخبرك بأن Table3 غير معرف (أي لم يجده)

medreg
12-05-2008, 08:47 AM
العفو .. لكن لم تخبر هل هذا ما أردته وهل النتائج صحيحة؟؟؟

بالنسبة للخطأ، هل TTable سميته Table3

لأن الرسالة تخبرك بأن Table3 غير معرف (أي لم يجده)


السلام عليكم
عفوًا يا صديقي ما كنت **** ان اخبرك بالنتيجة قبل تجربة كل الأمثلة
ولكن من خلال الميثال الأول يظهر لي أنه تمام التمام والله يعطيك العافية
وجزاكم الله عنا كل خير

اما بالنسبة لتسمية TTable ب Table3
فا اقول لك لا لم اغير اسم TTable
والسطر الموجود به الخطأ كان في المرة السابقة جيد ويفهمه قبل التغير الذ طرأ هذه المرة
علمًا بأنه الخطأ الآول الذي ظهر لي وهو كان بسبب DaysBetween لم يفهمها وعندما ادرجت DateUtils في uses قبلها ثم جاء بالخطأ الذي اشرت اليه والمتعلق بTable3

medreg
13-05-2008, 11:24 PM
شكرًا جزيلاً
لكن هنا خطأ يظهر عندي
علما انني استعمل في مكان DateTimePicker الستعمل DBEdit
وبدلاً من السطر
i:=DaysBetween(DateTimePicker1.date,DateTimePicker 2.date) ;
استعمل
i:=DaysBetween(table3.fieldByName('DT_DEP1').asdat eTime,table3.fieldByName('DT_ARV1').asdateTime) ;

عندما احاول التنفيذ يعطيني هذا التحذير
[Erreur]Unit1.pas(773):Identificateur non déclaré:'table3'
**** اظهار اين يكمن الخطأ

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

لكن هناك مشكلة ربما بسيطة لديكم وهي عندما اضغط على زر حساب الوجبات يعطيني النتيجة المطلوبة لكن الحقل المتعلق بالساعة بمجرد ما يتم تنفيذ العملية ويعطيني النتيجة يظهر في الحقل 00:00:00 بدلا من الساعة التي تم بها الحساب
**** ال****** في الموضوع

وماذا عن الموضوع السابق والمتعلق بجلب المعطيات من مشروع لآخر

medreg
20-05-2008, 09:49 PM
السلام عليكم
أين انتم يا اخ مروان ويا اخ مهدي

مهدي
20-05-2008, 09:52 PM
و عليكم السلام و رحمة الله

أنا هنا لكنك لم تجبني فيما كتبت


اقتباس:
وجبة الغذاء تبدأ من الساعة 11:01 وتنتهي على الساعة 14:00
وجبة العشاء تبدأ من الساعة 18:00 وتنتهي على الساعة 21:00
المبيت يبدأ من الساعة 00:00 وتنتهي على الساعة 05:00
ملاحظة أولية خطأ في السطرين الأخيرين و الصواب

وجبة الغذاء تبدأ من الساعة 11:01 وتنتهي على الساعة 14:00
وجبة العشاء تبدأ من الساعة 18:01 وتنتهي على الساعة 21:00
المبيت يبدأ من الساعة 00:01 وتنتهي على الساعة 05:00

medreg
21-05-2008, 11:31 PM
و عليكم السلام و رحمة الله

أنا هنا لكنك لم تجبني فيما كتبت

السلام عليكم أعذرني لم انتبه
ظننتك وجدت الخطأ وأصلحته وأن ما كتبته هو انك حذرتني من الخطأ

وسأشرح لك

الصواب هو :
وجبة الغذاء تبدأ من الساعة 11:01 وتنتهي على الساعة 14:00
وجبة العشاء تبدأ من الساعة 18:01 وتنتهي على الساعة 21:00
المبيت يبدأ من الساعة 00:01 وتنتهي على الساعة 05:00

ملاحظة أخرى
كيف يمكن للساعة ان تخرج في ورقة الطباعة بهذا الشكل
00:00 بدلا من 00:00:00
وكيف يمكن للتاريخ ان يخرج في ورقة الطباعة على هذا الشكل
01/01/2008 بدلا من 2008/01/01

مهدي
22-05-2008, 01:50 AM
و عليكم السلام و رحمة الله


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


هل تريد إلغاء حساب الثواني ؟


وكيف يمكن للتاريخ ان يخرج في ورقة الطباعة على هذا الشكل
01/01/2008 بدلا من 2008/01/01


يمكنك تغيير شكل التاريخ من الإعدادت الإقليمية في لوحة التحكم

بدلا من dd-MM-yyyy اكتب yyyy-MM-dd

medreg
22-05-2008, 10:32 AM
السلام عليكم ورحمة الله تعالى وبركاته
وصباح الخير

نعم **** إلغاء حساب الثواني حتى تظهر الساعة بأربعة ارقام في الطباعة بدلا من ستة ارقام

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

مهدي
22-05-2008, 10:52 AM
و عليكم السلام و رحمة الله و بركاته


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


لكن ما ****ه هو ان التغيير يكون داخل البرنامج لكي حتى ولو كان في الويندوز يظهر من اليسار الى اليمين لا بد من اظهاره في البرنامج من اليمين الى اليسار
إليك هذا المثال الذي يحدث التغيير الذي أردته و ذلك لإستعمال كائن TButton و كائنين من TEdit


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
Present: TDateTime;
Year, Month, Day, Hour, Min, Sec, MSec: Word;
begin
Present:= Now;
DecodeDate(Present, Year, Month, Day);
Edit1.Text:=IntToStr(Year)+'-'+IntToStr(Month)+'-'+IntToStr(Day) ;
DecodeTime(Present, Hour, Min, Sec, MSec);
Edit2.Text:=IntToStr(Hour) + ':'+ IntToStr(Min)
end;

end.

medreg
22-05-2008, 11:03 AM
شكرًا جزيلاً وسأرى بعد التجربة وأخبرك

medreg
24-05-2008, 10:21 PM
السلام عليكم ورحمة الله تعالى وبركاته
الأكود الذي تمت به التجربة وحولته هو الملف المرفق من طرفكم
DATE_HEURE_correct
لقد حولته من DateTimePicker إلى DBedit
ولم افلح (اين الخطأ يا ترى)

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

merouane
25-05-2008, 02:00 AM
و عليكم السلام ورحمة الله تعالى وبركاته

الخطأ هو

table3.fieldByName('HR_DEP1').asdateTime:=table3.f ieldByName('DT_DEP1').asdateTime;
table3.fieldByName('HR_ARV1').asdateTime:=table3.f ieldByName('DT_ARV1').asdatetime;

في حين:

DT_DEP1, DT_ARV1: Date
HR_DEP1, HR_ARV1: Time

لمعالجة الوضعية (أؤكد أنها تتغير حسب المبرمج، البرنامج، ...) تستطيع استعمال هذه الطريقة:

اللون الأزرق يعبر عن التعديل

procedure TForm1.Calcul1Click(Sender: TObject);
var t1,t2,
t01,t02 : tdatetime;
i,j : integer;
AYear,AMonth,ADay : word;

function TheTime(AYear,AMonth,ADay:word ;heure:string):tdatetime;
var Hour,Min,Sec,MSec : Word;
begin
DecodeTime(strtotime(heure),Hour,Min,Sec,MSec);
Result := EncodeDateTime(AYear,AMonth,ADay,Hour,Min,Sec,MSec );
end;
begin
i:=DaysBetween(table3.fieldByName('DT_DEP1').asdat eTime,table3.fieldByName('DT_ARV1').asdatetime);

DecodeDate(table3.fieldByName('DT_DEP1').asdateTim e,
AYear,AMonth,Aday);
t1:=EncodeDateTime(AYear,AMonth,ADay,
14,00,00,00);

t01 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_D EP1').AsString);

DecodeDate(table3.fieldByName('DT_ARV1').asdatetim e,
AYear,AMonth,Aday);
t2:=EncodeDateTime(AYear,AMonth,ADay,
11,01,00,00);

t02 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_A RV1').AsString);

j:=0;
if (t01<t1)then
j:=j+1;
if t02>=t2 then
j:=j+1;

table3.Edit;
table3.FieldByName('Nb_RPJ1').asInteger:=(i-1+j);
table3.Post;

DecodeDate(table3.fieldByName('DT_DEP1').asdateTim e,AYear,AMonth,Aday);
t1:=EncodeDateTime(AYear,AMonth,ADay,
21,00,00,00);
t01 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_D EP1').AsString);

DecodeDate(table3.fieldByName('DT_ARV1').asdatetim e,AYear,AMonth,Aday);
t2:=EncodeDateTime(AYear,AMonth,ADay,
18,00,00,00);
t02 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_A RV1').AsString);

j:=0;
if (t01<t1)then
j:=j+1;
if t02>=t2 then
j:=j+1;

Table3.edit;
table3.FieldByName('Nb_RPM1').asInteger:=(i-1+j);
table3.post;

DecodeDate(table3.fieldByName('DT_DEP1').asdateTim e,AYear,AMonth,Aday);
t1:=EncodeDateTime(AYear,AMonth,ADay,
05,00,00,00);
t01 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_D EP1').AsString);

DecodeDate(table3.fieldByName('DT_ARV1').asdatetim e,AYear,AMonth,Aday);
t2:=EncodeDateTime(AYear,AMonth,ADay,
00,00,00,00);
t02 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_A RV1').AsString);

j:=0;
if (t01<t1)then
j:=j+1;
if (t02>t2) then
j:=j+1;

table3.edit;
table3.FieldByName('N_Che1').asInteger:=(i-1+j);
table3.FieldByName('N_RP1').AsInteger:=Table3.fiel dbyname('Nb_RPJ1').AsInteger + table3.fieldbyname('Nb_RPM1').AsInteger;
table3.Post;
end;

بالنسبة للإدخال في الجدول حاول دائما الإدخال مرة واحدة.

table3.Edit;
table3.FieldByName('Nb_RPJ1').asInteger:=(i-1+j);
table3.FieldByName('Nb_RPM1').asInteger:=(i-1+j);
table3.FieldByName('N_Che1').asInteger:=(i-1+j);
table3.FieldByName('N_RP1').AsInteger:=
Table3.fieldbyname('Nb_RPJ1').AsInteger + table3.fieldbyname('Nb_RPM1').AsInteger;
table3.Post;

ملاحظة: الحل المقترح مع انه يقوم بما تريد إلا أنه ليس نهائي تستطيع دائما التحسين

ننتظر النتيجة ، و بالتوفيق :)

medreg
25-05-2008, 10:36 PM
شكرًا جزيلاًا هذا هو المطلوب وجزاكم الله عنا كل خير
ووفقكم لما فيه الخير
متمنيين من المولى عز وجل ان يضع اعمالكم هذه في ميزان حسناتكم