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

الخطأ هو

كود :
table3.fieldByName('HR_DEP1').asdateTime:=table3.fieldByName('DT_DEP1').asdateTime; table3.fieldByName('HR_ARV1').asdateTime:=table3.fieldByName('DT_ARV1').asdatetime;

في حين:

DT_DEP1, DT_ARV1: Date
HR_DEP1, HR_ARV1: Time

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

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

كود :
procedure TForm1.Calcul1Click(Sender: TObject); var t1,t2, [color=Blue] t01,t02[/color] : tdatetime; i,j : integer; AYear,AMonth,ADay : word; [COLOR=Blue] 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;[/COLOR] begin i:=DaysBetween(table3.fieldByName('DT_DEP1').asdateTime,table3.fieldByName('DT_ARV1').asdatetime); DecodeDate(table3.fieldByName('DT_DEP1').asdateTime, AYear,AMonth,Aday); t1:=EncodeDateTime(AYear,AMonth,ADay, 14,00,00,00); [color=Blue]t01 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_DEP1').AsString);[/color] DecodeDate(table3.fieldByName('DT_ARV1').asdatetime, AYear,AMonth,Aday); t2:=EncodeDateTime(AYear,AMonth,ADay, 11,01,00,00); [color=Blue]t02 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_ARV1').AsString);[/color] j:=0; if ([color=Blue]t01[/color]<t1)then j:=j+1; if [color=Blue]t02[/color]>=t2 then j:=j+1; table3.Edit; table3.FieldByName('Nb_RPJ1').asInteger:=(i-1+j); table3.Post; DecodeDate(table3.fieldByName('DT_DEP1').asdateTime,AYear,AMonth,Aday); t1:=EncodeDateTime(AYear,AMonth,ADay, 21,00,00,00); [color=Blue]t01 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_DEP1').AsString);[/color] DecodeDate(table3.fieldByName('DT_ARV1').asdatetime,AYear,AMonth,Aday); t2:=EncodeDateTime(AYear,AMonth,ADay, 18,00,00,00); [color=Blue]t02 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_ARV1').AsString);[/color] j:=0; if ([color=Blue]t01[/color]<t1)then j:=j+1; if [color=Blue]t02[/color]>=t2 then j:=j+1; Table3.edit; table3.FieldByName('Nb_RPM1').asInteger:=(i-1+j); table3.post; DecodeDate(table3.fieldByName('DT_DEP1').asdateTime,AYear,AMonth,Aday); t1:=EncodeDateTime(AYear,AMonth,ADay, 05,00,00,00); [color=Blue]t01 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_DEP1').AsString);[/color] DecodeDate(table3.fieldByName('DT_ARV1').asdatetime,AYear,AMonth,Aday); t2:=EncodeDateTime(AYear,AMonth,ADay, 00,00,00,00); [color=Blue]t02 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_ARV1').AsString);[/color] j:=0; if ([color=Blue]t01[/color]<t1)then j:=j+1; if ([color=Blue]t02[/color]>t2) then j:=j+1; table3.edit; 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; 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;

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

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


الملفات المرفقة
.zip   FRAIS_DEPL_Correct.zip (الحجم : 370.55 ك ب / التحميلات : 69)
الرد


الردود في هذا الموضوع
مشكلة في حسابات تتعلق بالزمن والتاريخ - بواسطة merouane - 25-05-2008, 01:00 AM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم