Quantcast
Channel: SCN : Discussion List - SAP ERP Human Capital Management (SAP ERP HCM)
Viewing all articles
Browse latest Browse all 7926

Please help me to figure out issue ???

$
0
0

Hi All,

 

We have developed functionality in which if employee works less than 45 hrs then mail is triggered to that employee.

But the issue is sometimes mail is triggered to some employees even if he worked more than 45 hrs.

We tried to create a same scenario in quality and development but mail is not triggered in that case.

Please find the below code.

 

Please let me is it because of not clearing wa_time variable???

 

 

GET peras.

 

  rp_provide_from_last p0000 space sy-datum sy-datum. "latest p0000 record

  IF p0000-stat2 EQ '3'.

 

    rp_provide_from_last p0001 space sy-datum sy-datum."latest p0001 record

 

    IF p0001-bukrs EQ '2680'.

 

      rp_read_infotype peras-pernr 2001 p2001 gv_beg  gv_end.

 

      rp_read_infotype peras-pernr 2002 p2002 gv_beg  gv_end.

 

      rp_read_infotype peras-pernr 2006 p2006 '18000101' sy-datum.

 

      IF rb1 EQ 'X'.

 

        n = 1.

 

      ELSEIF rb2 EQ 'X'.

 

        n = 5.

 

      ENDIF.

      CLEAR : gv_cntr,gv_dat,gv_week.

      gv_dat = gv_beg.

 

      DO n TIMES.

        IF gv_dat  GT gv_end.

          gv_week = n - 1.

          EXIT.

        ENDIF.

        gv_cntr = gv_cntr + 1.

 

        IF  gv_cntr GT 1 .

 

*          gv_beg = gv_beg + 2.

          gv_dat =  gv_dat + 2.

        ENDIF.

 

        DO 5 TIMES .

*

*          if rb2 eq 'X'.

*

          IF gv_dat  LE gv_end.

*

*            endif.

 

            READ TABLE it_time INTO wa_time WITH KEY pernr = p0001-pernr

                                                     ldate = gv_dat

                                                     satza = 'P10'.

 

            IF sy-subrc EQ '0'.

 

              gv_in = wa_time-ltime.

 

          

 

              READ TABLE it_time INTO wa_time WITH KEY pernr = p0001-pernr

                                                    ldate = gv_dat

                                                    satza = 'P20'.

              IF sy-subrc EQ '0'.

 

                gv_out = wa_time-ltime.

 

                gv_time =  gv_time + ( gv_out - gv_in )  .

 

              

 

*                CALL FUNCTION 'MONI_TIME_CONVERT'

*                  EXPORTING

*                    ld_duration        = gv_time

*                  IMPORTING

*                    lt_output_duration = gv_tot.

 

*gv_tote = gv_tot.

 

*   gv_total = gv_total  +  gv_tote.

*    clear : gv_tot,gv_tote.

 

**CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'

**  EXPORTING

**    input                      =  gv_time

***   NO_TYPE_CHECK              = 'X'

***   ROUND_SIGN                 = ' '

**   UNIT_IN                    = 'S'

**   UNIT_OUT                   = 'H'

** IMPORTING

***   ADD_CONST                  =

***   DECIMALS                   =

***   DENOMINATOR                =

***   NUMERATOR                  =

**   OUTPUT                     =  gv_total

** EXCEPTIONS

**   CONVERSION_NOT_FOUND       = 1

**   DIVISION_BY_ZERO           = 2

**   INPUT_INVALID              = 3

**   OUTPUT_INVALID             = 4

**   OVERFLOW                   = 5

**   TYPE_INVALID               = 6

**   UNITS_MISSING              = 7

**   UNIT_IN_NOT_FOUND          = 8

**   UNIT_OUT_NOT_FOUND         = 9

**   OTHERS                     = 10

**          .

**IF sy-subrc <> 0.

*** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

***         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

**ENDIF.

 

 

*                CALL FUNCTION 'POINT_IN_TIME_CONVERT'

*                  EXPORTING

**   KZ_ENDTERMIN        = ' '

*                    point_in_time       = gv_time

*                 IMPORTING

**   DATE                =

*                   time                = gv_hours."actual working hours

*

*

*                gv_total = gv_total + gv_hours.

 

                gv_punch = 'X'.

 

                CLEAR wa_final.

                CLEAR :gv_out,gv_in,gv_hours.

 

              ENDIF.

            ENDIF.

 

            IF gv_punch IS  INITIAL .

              LOOP AT p2001 WHERE pernr EQ peras-pernr AND begda LE gv_dat AND endda GE gv_dat.

 

*              gv_total = gv_total + 090000.

                gv_time = gv_time + 32400.

                gv_abs = 'X'.

 

              ENDLOOP.

            ENDIF.

            IF gv_punch IS INITIAL AND   gv_abs IS INITIAL.

              LOOP AT p2002  WHERE pernr EQ peras-pernr AND begda LE gv_dat AND endda GE gv_dat.

                gv_time = gv_time + 32400.

                gv_prs = 'X'.

*              gv_total = gv_total + 090000.

 

              ENDLOOP.

 

            ENDIF.

*            PERFORM holiday_check USING gv_dat.

            IF gv_punch IS INITIAL AND gv_abs IS INITIAL AND gv_prs IS INITIAL.

              CALL FUNCTION 'HOLIDAY_CHECK_AND_GET_INFO'

                EXPORTING

                  date                = gv_dat

                  holiday_calendar_id = 'HM'

                IMPORTING

                  holiday_found       = gv_ind.

 

 

              IF gv_ind  EQ 'X'.

                gv_time = gv_time + 32400.

              ENDIF.

 

              CLEAR gv_ind.

            ENDIF.

            CLEAR :gv_punch, gv_abs ,gv_prs.

            gv_dat = gv_dat + 1.

 

            IF gv_dat GT gv_end.

 

              EXIT.

            ENDIF.

          ENDIF.

        ENDDO.

 

 

        CLEAR : gv_tot,gv_tim.

        CALL FUNCTION 'MONI_TIME_CONVERT'

          EXPORTING

            ld_duration        = gv_time

          IMPORTING

            lt_output_duration = gv_tot.

 

 

*

*        IF gv_beg LE gv_end.

        CONCATENATE gv_tot+2(2) gv_tot+5(2) gv_tot+8(2) INTO gv_tim.

 

 

        v_dat = ( gv_dat - 1 ).

        wa-awh = wa-awh + gv_time.

        IF  v_dat EQ gv_end.

          wa-pernr = p0001-pernr.

          APPEND wa TO it.

          CLEAR wa.

        ENDIF.

        IF  gv_tim LT c_hrs .

 

 

 

          wa_final-pernr = p0001-pernr.

*          WA_FINAL-BEGDA = SY-DATUM.

          wa_final-ename = p0001-ename.

*          wa_final-actual  = gv_time.

          wa_final-diff = gv_45hrs - gv_time.

          wa_final-plans = p0001-plans.

 

          CLEAR : wa_t001p.

          READ TABLE it_t001p INTO wa_t001p WITH KEY werks = p0001-werks

                                                     btrtl = p0001-btrtl.

          IF sy-subrc EQ 0.

            wa_final-dept = wa_t001p-btext.

          ENDIF.

 

          CLEAR gv_org.

          PERFORM org_text.

 

          wa_final-divsn = gv_org.

          wa_final-werks = p0001-werks.

          wa_final-sacha =  p0001-sachp.

          IF wa_final-diff GT 0.

            APPEND wa_final TO it_final.

          ENDIF.

          CLEAR wa_final.

 

 

        ENDIF.

 

*        ENDIF.

        CLEAR : gv_time ,gv_hours.

        CLEAR gv_tot.

        CLEAR : gv_total.

 

      ENDDO.

 

      CLEAR gv_cntr.

*    ENDIF.

    ENDIF.

 

  ENDIF.

*  CLEAR gv_beg.

 

END-OF-SELECTION.


Viewing all articles
Browse latest Browse all 7926

Trending Articles