حلت المساعدة في حساب فترة زمنية

Ahmed Jendoubi

Developpeur Windev
طاقم الإدارة
إنضم
17 جوان 2013
المشاركات
3.411
مستوى التفاعل
6.145
اخي بالنسبة للكود date vers entier هل قمت بتجربته ام لا ؟؟؟ لانه حسب ما اتذكر فانه يعمل حسب ما طلبته ولكن بان تقوم بالقسمة على 360 وليس 365 يوم وهكذا يصبح كل شهر فيه 30 يوم
 

polo2009

عضو
إنضم
23 أوت 2017
المشاركات
56
مستوى التفاعل
12
اخي بالنسبة للكود date vers entier هل قمت بتجربته ام لا ؟؟؟ لانه حسب ما اتذكر فانه يعمل حسب ما طلبته ولكن بان تقوم بالقسمة على 360 وليس 365 يوم وهكذا يصبح كل شهر فيه 30 يوم
اخي Ahmed Jendoubi لم اقم بتجربته لاني وجدت نفسي محاصر بالعمل خاصة في فترة نهاية السنة الى غاية نهاية جانفي و سأستكمل تعلم البرمجة بمساعدتكم لاني أجد صعوبات في العمل و أحاول ايجاد حلول و ما شجعني هته العائلة الجديدة التي انضممت اليها و أتشرف.. .. شكرا أخي على الاهتمام و ربي يزيدك من علمه
 

polo2009

عضو
إنضم
23 أوت 2017
المشاركات
56
مستوى التفاعل
12
اخي بالنسبة للكود date vers entier هل قمت بتجربته ام لا ؟؟؟ لانه حسب ما اتذكر فانه يعمل حسب ما طلبته ولكن بان تقوم بالقسمة على 360 وليس 365 يوم وهكذا يصبح كل شهر فيه 30 يوم
هدا المشروع الابتدائي و لكن جربت عدة طرق لجعل ايام كل الاشهر تساوي 30 يوم ولكن لم أفلح فهل من مساعدة
 

المرفقات

polo2009

عضو
إنضم
23 أوت 2017
المشاركات
56
مستوى التفاعل
12
هدا المشروع الابتدائي و لكن جربت عدة طرق لجعل ايام كل الاشهر تساوي 30 يوم ولكن لم أفلح فهل من مساعدة
يا السي Ahmed Jendoubi أيين انت .... حسب مستواي في البرمجة ما لقيت حتى حل .... هل من مساعدة و بارك الله فيك
 

grandbebe77

عضو
إنضم
9 مارس 2008
المشاركات
64
مستوى التفاعل
45
السلام عليكم أخي

جرب هذا الكود
كود:
dDateDebut est une Date="20180525" // Champ Date (ou variable de type date) de début
dDateFin est une Date="20180602" // Champ Date (ou variable de type date) de fin
nPeriod  est un entier

//dDateDebut,dDateFin sont des Dates=("20180525","20180602")
//dDateDebut,dDateFin sont des Dates=("20180221","20180305")
//dDateDebut,dDateFin sont des Dates=("20171228","20180202")
//dDateDebut,dDateFin sont des Dates=("20180101","20180102")
//dDateDebut,dDateFin sont des Dates=("20180326","20180404")

SI dDateDebut>dDateFin ALORS
    dTmp1 est une Date=dDateDebut
    dTmp2 est une Date=dDateFin
    dDateDebut=dTmp2
    dDateFin=dTmp1
FIN

SI dDateDebut..Année=dDateFin..Année ALORS
    SI dDateDebut..Mois=dDateFin..Mois ALORS
        nPeriod=(dDateFin..Jour-dDateDebut..Jour)+1
    SINON
        nPeriod=(30-dDateDebut..Jour)+1
        POUR i=dDateDebut..Mois+1 _À_ dDateFin..Mois
            nPeriod+=30
        FIN
        nPeriod-=30-dDateFin..Jour
    FIN
SINON
    nPeriod=(30-dDateDebut..Jour)+1
    SI dDateDebut..Mois<12 ALORS
        POUR i=dDateDebut..Mois+1 _À_ dDateFin..Mois
            nPeriod+=30
        FIN
    SINON
        dDateDebut_Tmp est une Date=dDateDebut
        dDateDebut_Tmp..Année+=1
        dDateDebut_Tmp..Mois=1
        dDateDebut_Tmp..Jour=1
        POUR i=dDateDebut_Tmp..Mois _À_ dDateFin..Mois
            nPeriod+=30
        FIN
    FIN

    nPeriod-=30-dDateFin..Jour
FIN

SELON nPeriod
    CAS 0,1 :
        Info(nPeriod+" jour")
    AUTRE CAS
        Info(nPeriod+" jours")
FIN
 

polo2009

عضو
إنضم
23 أوت 2017
المشاركات
56
مستوى التفاعل
12
السلام عليكم أخي

جرب هذا الكود
كود:
dDateDebut est une Date="20180525" // Champ Date (ou variable de type date) de début
dDateFin est une Date="20180602" // Champ Date (ou variable de type date) de fin
nPeriod  est un entier

//dDateDebut,dDateFin sont des Dates=("20180525","20180602")
//dDateDebut,dDateFin sont des Dates=("20180221","20180305")
//dDateDebut,dDateFin sont des Dates=("20171228","20180202")
//dDateDebut,dDateFin sont des Dates=("20180101","20180102")
//dDateDebut,dDateFin sont des Dates=("20180326","20180404")

SI dDateDebut>dDateFin ALORS
    dTmp1 est une Date=dDateDebut
    dTmp2 est une Date=dDateFin
    dDateDebut=dTmp2
    dDateFin=dTmp1
FIN

SI dDateDebut..Année=dDateFin..Année ALORS
    SI dDateDebut..Mois=dDateFin..Mois ALORS
        nPeriod=(dDateFin..Jour-dDateDebut..Jour)+1
    SINON
        nPeriod=(30-dDateDebut..Jour)+1
        POUR i=dDateDebut..Mois+1 _À_ dDateFin..Mois
            nPeriod+=30
        FIN
        nPeriod-=30-dDateFin..Jour
    FIN
SINON
    nPeriod=(30-dDateDebut..Jour)+1
    SI dDateDebut..Mois<12 ALORS
        POUR i=dDateDebut..Mois+1 _À_ dDateFin..Mois
            nPeriod+=30
        FIN
    SINON
        dDateDebut_Tmp est une Date=dDateDebut
        dDateDebut_Tmp..Année+=1
        dDateDebut_Tmp..Mois=1
        dDateDebut_Tmp..Jour=1
        POUR i=dDateDebut_Tmp..Mois _À_ dDateFin..Mois
            nPeriod+=30
        FIN
    FIN

    nPeriod-=30-dDateFin..Jour
FIN

SELON nPeriod
    CAS 0,1 :
        Info(nPeriod+" jour")
    AUTRE CAS
        Info(nPeriod+" jours")
FIN

شكرا جزيلا أخي الكريم

grandbebe77 على المساعدة فقد استخدمت الكود الخاص بك و هو غاية في الروعة و كما هو مطلوب الا في جزئية سأرفقها وهي في حالة اختلاف السنة لا يعطي النتائج المرجوة لا أدري لعل الخطأ من جانبي في كيفية التعامل مع الكود و شكراااااااااااا على المساعدة -الملفات مرفقة- RESULTA REP-MAL.png
 

المرفقات

التعديل الأخير:

grandbebe77

عضو
إنضم
9 مارس 2008
المشاركات
64
مستوى التفاعل
45
السلام عليكم
تم تصحيح الكود
يمكن استعمال Procédure
لتفادي تكرار الأكواد
كود:
PROCEDURE pCalculer_DuréeCongé(dDateDebut est une Date,dDateFin est une Date)

SI PAS DateValide(dDateDebut) OU PAS DateValide(dDateFin) ALORS
    RENVOYER 0
FIN

nPeriod  est un entier=0

SI dDateDebut > dDateFin ALORS
    dTmp1 est une Date = dDateDebut
    dTmp2 est une Date = dDateFin
    dDateDebut = dTmp2
    dDateFin = dTmp1
FIN

SI dDateDebut..Année=dDateFin..Année ALORS
    SI dDateDebut..Mois=dDateFin..Mois ALORS
        nPeriod=(dDateFin..Jour-dDateDebut..Jour)+1
    SINON
        nPeriod=(30-dDateDebut..Jour)+1
        POUR i=dDateDebut..Mois+1 _A_ dDateFin..Mois
            nPeriod+=30
        FIN
        nPeriod-=30-dDateFin..Jour
    FIN
 
SINON
 
    nPeriod=(30-dDateDebut..Jour)+1
 
    SI dDateDebut..Mois<12 ALORS
        POUR i=dDateDebut..Mois+1 _A_ 12
            nPeriod+=30
        FIN
    FIN
 
    TANTQUE dDateDebut..Année+1<dDateFin..Année
        nPeriod+=30*12
    FIN
 
    POUR i=1 _A_ dDateFin..Mois
        nPeriod+=30
    FIN
 
    nPeriod-=30-dDateFin..Jour
FIN

RENVOYER nPeriod
طريقة الاستعمال
كود:
dDateDebut est une Date=Date_DEB_P5
dDateFin est une Date=Date_FIN_P5

nPeriod est un entier=pCalculer_DuréeCongé(dDateDebut,dDateFin)
يمكن أن تجد أخطاء أخرى

جرب و اطرح أسئلتك
 
التعديل الأخير:

polo2009

عضو
إنضم
23 أوت 2017
المشاركات
56
مستوى التفاعل
12
السلام عليكم
تم تصحيح الكود
يمكن استعمال Procédure
لتفادي تكرار الأكواد
كود:
PROCEDURE pCalculer_DuréeCongé(dDateDebut est une Date,dDateFin est une Date)

SI PAS DateValide(dDateDebut) OU PAS DateValide(dDateFin) ALORS
    RENVOYER 0
FIN

nPeriod  est un entier=0

SI dDateDebut > dDateFin ALORS
    dTmp1 est une Date = dDateDebut
    dTmp2 est une Date = dDateFin
    dDateDebut = dTmp2
    dDateFin = dTmp1
FIN

SI dDateDebut..Année=dDateFin..Année ALORS
    SI dDateDebut..Mois=dDateFin..Mois ALORS
        nPeriod=(dDateFin..Jour-dDateDebut..Jour)+1
    SINON
        nPeriod=(30-dDateDebut..Jour)+1
        POUR i=dDateDebut..Mois+1 _A_ dDateFin..Mois
            nPeriod+=30
        FIN
        nPeriod-=30-dDateFin..Jour
    FIN
  
SINON
  
    nPeriod=(30-dDateDebut..Jour)+1
  
    SI dDateDebut..Mois<12 ALORS
        POUR i=dDateDebut..Mois+1 _A_ 12
            nPeriod+=30
        FIN
    FIN
  
    TANTQUE dDateDebut..Année+1<dDateFin..Année
        nPeriod+=30*12
    FIN 
  
    POUR i=1 _A_ dDateFin..Mois
        nPeriod+=30
    FIN
  
    nPeriod-=30-dDateFin..Jour
FIN

RENVOYER nPeriod
طريقة الاستعمال
مشاهدة المرفق 1047567
يمكن أن تجد أخطاء أخرى

جرب و اطرح أسئلتك[/QUO
 

polo2009

عضو
إنضم
23 أوت 2017
المشاركات
56
مستوى التفاعل
12
شكرا لك على التجاوب ... سأجرب و أوافيك بالنتائج
:good::good::good::good::good::good::good::good::good::good::good::good::good::good:
 

grandbebe77

عضو
إنضم
9 مارس 2008
المشاركات
64
مستوى التفاعل
45
هذه طريق الإستعمال

كود:
dDateDebut est une Date=Date_DEB_P1
dDateFin est une Date=Date_FIN_P1

nPeriod est un entier=pCalculer_DuréeCongé(dDateDebut,dDateFin)
 
أعلى