2016-08-23 7 views
0

私はスケジュールされたタスクを作成しました。ローカルホストでは、この機能を持つスケジューラが正常に動作しています。サーバーでは、Number of Calls = 10、Interval Unit = MinutesおよびInterval Number = 1を設定します。Openerp Schdularが一度に実行

特定のアップグレード後にサーバーが起動するのは、Number of Callsが9

この

機能

def allocate_on_probations(self, cr, uid, ids,tl, context=None): 

     allo=0 
     state='active' 
     result = {} 


     emps=self.pool.get('hr.employee').search(cr, uid, [('current_status','=','active')], context=context) 
     if emps: 

      for r in emps: 
       hol_state=2 
       gt_dt=cr.execute("""SELECT appointed_date FROM hr_employee WHERE id= %d order by id"""%(r)) 
       gt_dd=cr.fetchone()[0] 

       #getting today details 
       today = datetime.datetime.now() 
       tt=today.date() 
       td=tt.day 
       tm=tt.month 
       ty=tt.year 

       #getting appointment date details 
       app=datetime.datetime.strptime(gt_dd, "%Y-%m-%d").date() 
       #print app 
       ay=app.year 
       am=app.month 
       ad=app.day 

       if ay==ty: 
        #compairing today and appointed date 
        comp=(tt-app) 
        chat=int(comp.days) 
        chat_mod=chat%30 
        print chat_mod 
        print r 

        if chat_mod==29: 
         hol_obj=self.pool.get('hr.holidays') 
         print hol_obj 
         condition_1=[('employee_id','=',r),('type','=','add'),('holiday_status_id','=',hol_state)] 
         hol_emp=hol_obj.search(cr, uid,condition_1, context=context) 

         if hol_emp: 

          for n in hol_emp: 
           hol_dt=cr.execute("""SELECT number_of_days_temp FROM hr_holidays WHERE id= %d order by id"""%(n)) 
           hol_dd=cr.fetchone()[0] 
           hol_inc=(hol_dd+0.5) 

           print hol_inc 
           cr.execute("""UPDATE hr_holidays SET number_of_days_temp= %d WHERE id= %d"""%(hol_inc,n)) 
           cr.execute("""UPDATE hr_holidays SET number_of_days= %d WHERE id= %d"""%(hol_inc,n)) 




     return True 

XMLスケジューラコール

<record id="ir_cron_scheduler" model="ir.cron"> 
      <field name="name">Casual Leave Allocation</field> 
      <field name="interval_number">1</field> 
      <field name="interval_type">minutes</field> 
      <field name="numbercall">10</field> 
      <field eval="False" name="doall"/> 
      <field eval="'hr.holidays'" name="hr.holidays"/> 
      <field eval="'allocate_on_probations'" name="allocate_on_probations"/> 
      <field eval="'()'" name="args"/> 
     </record> 
で私を助けてください

あなたがTrueに設定するとUI enter image description here

enter image description here

+0

xmlを介してやったのですか? – danidee

+0

最初にxmlからスケジューラを呼び出し、ui –

+0

を使用して引数を変更しました。スケジューラと実行している関数の両方にコードを貼り付けて、デバッグするのが簡単になります – danidee

答えて

1

は、あなたが抱えている問題はRepeat missed

であり、それは、サーバーがダウンした際に失われた逃した行動がなければならないことを意味サーバが再起動したときに実行されるため、サーバが少なくとも10分間ダウンした場合、再起動すると、その期間中に逃したすべてのアクションができるだけ早く実行されます。そう、それはあなたのコード内で実際にFalseだ、そのオプションを外しますしていない、あなたはまた、XMLから機能をトリガ引数を設定することができます

(ジャストUIでオプションを無効にするために、あなたのモジュールをアップグレード)

<field eval="'(True,)'" name="args"/>

+0

ありがとうございましたダニディー...それは働いた –

関連する問題