23 Ocak 2012 Pazartesi

İhbar Gününün Bulunması - Örnek ABAP Uygulaması 10

REPORT ZHRRIG09 LINE-SIZE 250 NO STANDARD PAGE HEADING.

TABLES : PERNR,
         HRP1000,
         T503T,
         T528T.

INFOTYPES: 0000,
           0001,
           0002,
           0032,
           9001,
           9004.

DATA: X      LIKE HRP1000-MC_SHORT,
      Y      LIKE HRP1000-MC_SHORT,
      MYTOPLAM(4) TYPE N,
      BEGDA_DT LIKE P0000-BEGDA,
      ENDDA_DT LIKE P0000-ENDDA,
      COUNT1 TYPE N,
      COUNT2 TYPE N,
      IHBAR(5) TYPE N.
DATA:BEGIN OF INTTAB OCCURS 100,
      PERNR    LIKE PERNR-PERNR,
      ENAME    LIKE PERNR-ENAME,
      BEGDA    LIKE P0000-BEGDA,
      ANSVH    LIKE P0001-ANSVH,
      PERSK    LIKE P0001-PERSK,
      MC_SHORT LIKE HRP1000-MC_SHORT,
      MC_STEXT LIKE HRP1000-MC_STEXT,
      PLANS    LIKE P0001-PLANS,
      PLSTX    LIKE HRP1000-STEXT,
      PTEXT    LIKE T503T-PTEXT,
      SSKNO    LIKE P9004-SSKNO,
      FATER    LIKE P9001-FATER,
      GBORT    LIKE P0002-GBORT,
      GBDAT    LIKE P0002-GBDAT,
*      ihbar    like p2010-anzhl,
      TEL01    LIKE P0032-TEL01.
DATA: END OF INTTAB.
DATA: XT528T  LIKE T528T OCCURS 0 WITH HEADER LINE,
      XT503T  LIKE T503T OCCURS 0 WITH HEADER LINE.

*---departman listesi
DATA :  BEGIN OF DEP OCCURS 0,
          OBJID LIKE HRP1000-OBJID,
          SHORT LIKE HRP1000-MC_SHORT,
          STEXT LIKE HRP1000-MC_STEXT,
        END OF DEP.

DATA:BEGIN OF BDC_TAB OCCURS 5.                             "IS
        INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDC_TAB.

PARAMETER MAPNAME DEFAULT SY-UNAME LIKE RPTAXXXX-MAP_NAME.  "IS

DATA: FNAME(128), FTYPE(3), FSIZE TYPE I.                   "IS


DATA:BEGIN OF REC OCCURS 10 ,                               "IS
     PERNR(8),
*     begda(8),
*     anzhl(5),
     IHBAR(5),
END OF REC.

*-- Giris ekranina ilave
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME TITLE TEXT-012.
SELECT-OPTIONS: SHORT  FOR HRP1000-MC_SHORT.
PARAMETERS : BEGDA LIKE SY-DATUM,
             ENDDA LIKE SY-DATUM,
             IHBTRH LIKE SY-DATUM.
SELECTION-SCREEN END OF BLOCK BLOCK1.

*-------     PROGRAM BASLIYOR

START-OF-SELECTION.
  PERFORM SET_INITIAL_VALUES.

GET PERNR.
  COUNT1 = 0.
  COUNT2 = 0.
*-- Ise giris tarihi
  LOOP AT P0000 WHERE BEGDA BETWEEN PNPBEGDA AND PNPENDDA
                 AND MASSN IN PNPMASSN.
    COUNT2 = COUNT2 + 1.
  ENDLOOP.
  CHECK SY-SUBRC EQ 0.
  MOVE P0000-BEGDA TO INTTAB-BEGDA.
  RP-PROVIDE-FROM-LAST P0001 SPACE P0000-BEGDA P0000-ENDDA.
  IF SY-SUBRC EQ 0.
    READ TABLE XT503T WITH KEY PERSK = P0001-PERSK.
  ENDIF.
*-- Isten çikmismi ?
  LOOP AT P0000  WHERE BEGDA BETWEEN PNPBEGDA AND PNPENDDA AND
                       MASSN EQ '10'.
    COUNT1 = COUNT1 + 1.
  ENDLOOP.
  CHECK COUNT1 NE COUNT2.
*-- Pozisyon degistirmis ?
  LOOP AT P0000 WHERE BEGDA BETWEEN PNPBEGDA AND PNPENDDA
                      AND MASSN EQ '02'.
  ENDLOOP.
  IF SY-SUBRC EQ 0.
    RP-PROVIDE-FROM-LAST P0001 SPACE P0000-BEGDA P0000-ENDDA.
    READ TABLE XT503T WITH KEY PERSK = P0001-PERSK.
  ENDIF.

*--- istenen departmanmi ?
  READ TABLE DEP WITH KEY P0001-ORGEH.
  CHECK SY-SUBRC EQ 0.

  PERFORM RE528.

END-OF-SELECTION.
*--  GUI Status Bilgisi
  SET PF-STATUS 'LIST'.
  PERFORM BODY.
  PERFORM BATCH_INPUT.
  PERFORM TOTAL.

TOP-OF-PAGE.
  PERFORM FORMAT.                      "Baslik Bilgisi

AT USER-COMMAND.
  CASE SY-UCOMM.
    WHEN 'P000'.
      SCROLL LIST RIGHT BY 22 PLACES.
    WHEN 'P001'.
      SCROLL LIST LEFT  BY 22 PLACES.
    WHEN 'P002'.
      SCROLL LIST RIGHT BY 150 PLACES.
    WHEN 'P003'.
      SCROLL LIST LEFT  BY 150 PLACES.

    WHEN 'S000'.
      PERFORM BODY.
      PERFORM TOTAL.
    WHEN 'S001'.
      PERFORM NAME.
      PERFORM TOTAL.
  ENDCASE.

TOP-OF-PAGE DURING LINE-SELECTION.
  PERFORM FORMAT.


*---------------------------------------------------------------------*
*       FORM RE528                                                    *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM RE528.
*-- Clear Islemleri
*  clear: xt503t, xt528t,
  CLEAR: P0002, P0032, P9004, P9001.
*-- Loop Islemleri
  LOOP AT P0002 WHERE BEGDA LE P0000-ENDDA AND
                      ENDDA GE P0000-BEGDA.
  ENDLOOP.
* loop at p0032 where begda le p0000-endda and
*                     endda ge p0000-begda.
  LOOP AT P0032 .
* write :/1 begda,' ',p0000-endda.
  ENDLOOP.

  LOOP AT P9001 WHERE BEGDA LE P0000-ENDDA AND
                      ENDDA GE P0000-BEGDA.
  ENDLOOP.
  LOOP AT P9004 WHERE BEGDA LE P0000-ENDDA AND
                      ENDDA GE P0000-BEGDA.
  ENDLOOP.

*  read table xt503t with key persk = p0001-persk.
  READ TABLE XT528T WITH KEY PLANS = P0001-PLANS.

*-- Internal Table Atama Islemleri
  MOVE PERNR-PERNR      TO INTTAB-PERNR.
  MOVE PERNR-ENAME      TO INTTAB-ENAME.
  MOVE P0001-PLANS      TO INTTAB-PLANS.
  MOVE XT528T-PLSTX     TO INTTAB-PLSTX.
  MOVE P0001-ANSVH      TO INTTAB-ANSVH.
  MOVE XT503T-PTEXT     TO INTTAB-PTEXT.
  MOVE P9004-SSKNO      TO INTTAB-SSKNO.
  MOVE P0001-PERSK      TO INTTAB-PERSK.
  MOVE P0032-TEL01      TO INTTAB-TEL01.
  MOVE DEP-SHORT        TO INTTAB-MC_SHORT.
  MOVE DEP-STEXT        TO INTTAB-MC_STEXT.
  MOVE P9001-FATER      TO INTTAB-FATER.
  MOVE P0002-GBORT      TO INTTAB-GBORT.
  MOVE P0002-GBDAT      TO INTTAB-GBDAT.
  APPEND INTTAB.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FORMAT
*&---------------------------------------------------------------------*
*       text                                                           *
*----------------------------------------------------------------------*
FORM FORMAT.
  WRITE : /100 TEXT-013 COLOR COL_BACKGROUND INVERSE.
  SKIP.
  ULINE (228).
  FORMAT   INTENSIFIED OFF COLOR 6.
  WRITE : /1 '|' NO-GAP, (9)TEXT-001 NO-GAP,    "pers.no.
         '|' NO-GAP,(26)TEXT-002 NO-GAP.   "Name and Surname

  SET LEFT SCROLL-BOUNDARY.

  WRITE:  '|' NO-GAP,(11)TEXT-003 NO-GAP,   "Entry Date
          '|' NO-GAP,(11)'Ihbar günü' NO-GAP,   "Entry Date
*         '|' no-gap,(16)text-014 no-gap,   "Father Name
*         '|' no-gap,(16)text-015 no-gap,   "Birthplace
*         '|' no-gap,(11)text-016 no-gap,   "Birthdate
*         '|' no-gap,(9)text-004 no-gap,    "Dep.Code
*         '|' no-gap,(41)text-005 no-gap,   "Dept Name
*         '|' no-gap,(26)text-006 no-gap,   "Position
*         '|' no-gap,(3)text-007 no-gap,                    "SG
*         '|' no-gap,(21)text-008 no-gap,   "Sub. Group Text
*         '|' no-gap,(13)text-009 no-gap,   "SSK No
*         '|' no-gap,(5)text-010 no-gap,    "Cont.
*         '|' no-gap,(6)text-011 no-gap,    "Ext.
          '|'.
  ULINE (30).

ENDFORM.                               " FORMAT
*&---------------------------------------------------------------------*
*&      Form  BODY
*&---------------------------------------------------------------------*
*       text                                                           *
*----------------------------------------------------------------------*
FORM BODY.
  SORT INTTAB BY PERNR.
  FORMAT  INTENSIFIED OFF COLOR 3.
  CLEAR MYTOPLAM.
  LOOP AT INTTAB.

    CHECK INTTAB-MC_SHORT IN SHORT.
    IF BEGDA NE '18000101'.  "Begda degiskenin bos geçilmesi kontrolü
      CHECK INTTAB-BEGDA    GE BEGDA_DT AND INTTAB-BEGDA LE ENDDA_DT.
*     write :/1 begda,' ',endda,' ',inttab-begda.
    ENDIF.

    WRITE: / '|' NO-GAP,(8)INTTAB-PERNR NO-ZERO UNDER TEXT-001,
                                       "pers.no.
             '|' NO-GAP, (25)INTTAB-ENAME UNDER TEXT-002,
                 SY-VLINE NO-GAP.      " Name and Surname

    SET LEFT SCROLL-BOUNDARY.
*reak-point.
    IF IHBTRH = 0 .                    " bossa
      IHBTRH = '19990101'.
    ENDIF.
    IHBAR = IHBTRH - INTTAB-BEGDA.
    MOVE INTTAB-PERNR TO REC-PERNR.
    MOVE IHBAR TO REC-IHBAR.
    APPEND REC.

    WRITE:     SY-VLINE NO-GAP, (10)INTTAB-BEGDA UNDER TEXT-003,
                                       "Entry Date
               SY-VLINE NO-GAP, (10)REC-IHBAR UNDER 'Ihbar günü',
*              sy-vline no-gap, (15)inttab-fater under text-014,
*                                      "Father Name
*              sy-vline no-gap, (15)inttab-gbort under text-015,
*                                      "Birthplace
*              sy-vline no-gap, (10)inttab-gbdat under text-016,
*                                      "Birthdate
*              sy-vline no-gap, (8)inttab-mc_short under text-004,
*                                      "Dep.Code
*             '|' no-gap, (40)inttab-mc_stext under text-005, "Dept Name
*              '|' no-gap, (25)inttab-plstx under text-006,    "position
*              '|' no-gap, (2)inttab-persk under text-007,  "SG
*          '|' no-gap,(20)inttab-ptext under text-008,  "Sub. Group Text
*              '|' no-gap, (12)inttab-sskno under text-009,   "SSK No
*              '|' no-gap, (4)inttab-ansvh under text-010,    "Contract
*              '|' no-gap, (5)inttab-tel01 under text-011,  "Tel01
              '|'.
    ADD 1 TO MYTOPLAM.
  ENDLOOP.
  ULINE (30).
ENDFORM.                               " BODY
*&-----------------------------------------------------------------*
*&          Isme gore sirali                                       *
*&-----------------------------------------------------------------*
FORM NAME.
  SORT INTTAB BY ENAME.
  FORMAT  INTENSIFIED OFF COLOR 3.
  CLEAR MYTOPLAM.
  LOOP AT INTTAB.

    CHECK INTTAB-MC_SHORT IN SHORT.
    CHECK INTTAB-BEGDA    GE BEGDA_DT AND INTTAB-BEGDA LE ENDDA_DT.

    WRITE: / '|' NO-GAP,(8)INTTAB-PERNR NO-ZERO UNDER TEXT-001,
                                       "pers.no.
             '|' NO-GAP, (25)INTTAB-ENAME UNDER TEXT-002,
                 SY-VLINE NO-GAP.      " Name and Surname

    SET LEFT SCROLL-BOUNDARY.

    WRITE:     SY-VLINE NO-GAP, (10)INTTAB-BEGDA UNDER TEXT-003,
                                       "Entry Date
               SY-VLINE NO-GAP, (15)INTTAB-FATER UNDER TEXT-014,
                                       "Father Name
               SY-VLINE NO-GAP, (15)INTTAB-GBORT UNDER TEXT-015,
                                       "Birthplace
               SY-VLINE NO-GAP, (10)INTTAB-GBDAT UNDER TEXT-016,
                                       "Birthdate
               SY-VLINE NO-GAP, (8)INTTAB-MC_SHORT UNDER TEXT-004,
                                       "Dep.Code
              '|' NO-GAP, (40)INTTAB-MC_STEXT UNDER TEXT-005, "Dept Name
               '|' NO-GAP, (25)INTTAB-PLSTX UNDER TEXT-006,    "position
               '|' NO-GAP, (2)INTTAB-PERSK UNDER TEXT-007,  "SG
           '|' NO-GAP,(20)INTTAB-PTEXT UNDER TEXT-008,  "Sub. Group Text
               '|' NO-GAP, (12)INTTAB-SSKNO UNDER TEXT-009,   "SSK No
               '|' NO-GAP, (4)INTTAB-ANSVH UNDER TEXT-010,    "Contract
               '|' NO-GAP, (5)INTTAB-TEL01 UNDER TEXT-011,  "Tel01
               '|'.
    ADD 1 TO MYTOPLAM.
  ENDLOOP.
  ULINE (228).

ENDFORM.                               "BODY

*---------------------------------------------------------------------*
*       FORM TOTAL                                                    *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM TOTAL.
  SKIP.
  WRITE :/ TEXT-017,MYTOPLAM NO-ZERO COLOR COL_NEGATIVE.

ENDFORM.                               " TOTAL
*&---------------------------------------------------------------------*
*&      Form  SET_INITIAL_VALUES
*&---------------------------------------------------------------------*
FORM SET_INITIAL_VALUES.
*--- set date
  IF BEGDA EQ 0.   "Ekrandan begda degiskenin bos geçilmesi
    MOVE '18000101' TO BEGDA. MOVE BEGDA TO PNPBEGDA.
    MOVE '99991231' TO ENDDA. MOVE ENDDA TO PNPENDDA.
  ELSE.
    MOVE BEGDA TO BEGDA_DT.   "Ekranda bir tarih araliginin girilmesi
    MOVE ENDDA TO ENDDA_DT.
  ENDIF.
*--- set massn islemler dizisi
  MOVE : 'I'     TO     PNPMASSN-SIGN,
         'EQ'    TO     PNPMASSN-OPTION,
         '01'    TO     PNPMASSN-LOW.
  APPEND PNPMASSN. CLEAR PNPMASSN.
  MOVE : 'I'     TO     PNPMASSN-SIGN,
         'EQ'    TO     PNPMASSN-OPTION,
         '12'    TO     PNPMASSN-LOW.
  APPEND PNPMASSN. CLEAR PNPMASSN.
*---- departman listesi
  SELECT OBJID MC_SHORT MC_STEXT  FROM HRP1000  INTO TABLE  DEP
           WHERE OTYPE     EQ  'O'           AND
                 PLVAR     EQ  '01'          AND
                 MC_SHORT  IN  SHORT         AND
                 LANGU     EQ  SY-LANGU
                 ORDER BY OBJID.
*-- Pozisyon textleri listesi
  SELECT * FROM T528T INTO TABLE XT528T WHERE SPRSL EQ SY-LANGU
                                        AND   OTYPE EQ 'S'.
*-- Çalisan grup textleri listesi
  SELECT * FROM T503T INTO TABLE XT503T WHERE SPRSL EQ SY-LANGU.


ENDFORM.                               " SET_INITIAL_VALUES
*&---------------------------------------------------------------------*
*&      Form  BATCH_INPUT
*&---------------------------------------------------------------------*
*       text                                                           *
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BATCH_INPUT.

*call function 'UPLOAD'
*     exporting
*        filename            = 'C\WORK\019.TXT'
*        filetype            = 'ASC'
*     importing
*          filesize            = fsize
*          act_filename        = fname
*          act_filetype        = ftype
*     tables
*          data_tab            = rec
*     exceptions
*          conversion_error    = 1
*          invalid_table_width = 2
*          invalid_type        = 3.
*write: / 'upload tamam'.
*if sy-subrc ne 0.  exit.  endif.

  CALL FUNCTION 'BDC_OPEN_GROUP'
       EXPORTING
            CLIENT = SY-MANDT
            GROUP  = MAPNAME
            USER   = SY-UNAME.

  LOOP AT REC .
    PERFORM BASLA.
  ENDLOOP .


  CALL FUNCTION 'BDC_CLOSE_GROUP'.


ENDFORM.                               " BATCH_INPUT

*&---------------------------------------------------------------------*
*&      Form  BASLA
*&---------------------------------------------------------------------*
*       text                                                           *
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BASLA.

  PERFORM DEG USING 'SAPMP50A' '1000'  .
  PERFORM YAZ USING 'RP50G-PERNR' REC-PERNR .
  PERFORM YAZ USING 'RP50G-CHOIC' '2010'.
  PERFORM YAZ USING 'RP50G-SUBTY' '5500'.
  PERFORM YAZ USING 'BDC_OKCODE' '/6'.

*******0000 COPY EVENTS
  PERFORM DEG USING 'MP200000' '2450'.
  PERFORM YAZ USING 'P2010-BEGDA' '01011999'.
  PERFORM YAZ USING 'P2010-ANZHL' REC-IHBAR.
  PERFORM YAZ USING 'Q2010-EITXT' 'Saat '.
  PERFORM YAZ USING 'BDC_OKCODE' '/11'.

  CALL FUNCTION 'BDC_INSERT'
       EXPORTING
            TCODE     = 'PA30'
       TABLES
            DYNPROTAB = BDC_TAB.
  REFRESH BDC_TAB.
ENDFORM.                               " BASLA

*&---------------------------------------------------------------------*
*&      Form  DEG
*&---------------------------------------------------------------------*
*       text                                                           *
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DEG USING PROGRAM DYNPRO.

  CLEAR BDC_TAB.
  BDC_TAB-PROGRAM = PROGRAM.
  BDC_TAB-DYNPRO = DYNPRO.
  BDC_TAB-DYNBEGIN = 'X'.
  APPEND BDC_TAB.
ENDFORM.                               " DEG

*&---------------------------------------------------------------------*
*&      Form  YAZ
*&---------------------------------------------------------------------*
*       text                                                           *
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM YAZ USING FNAM FVAL.

  CLEAR BDC_TAB.
  BDC_TAB-FNAM = FNAM.
  BDC_TAB-FVAL = FVAL.
  APPEND BDC_TAB.
ENDFORM.                               " YAZ

Hiç yorum yok:

Yorum Gönder