23 Ocak 2012 Pazartesi

Halk Yaşam Sigortasina Kayıtlı Personel - Örnek ABAP Uygulaması 8

REPORT ZHRTMP16 LINE-SIZE 205  NO STANDARD PAGE HEADING.

*-- Table(s)
TABLES : PERNR,
         T591S,
         PA0002,
         PA0006,
         PA0021.

*-- Infotype(s)
INFOTYPES: 0000, 0001, 0002, 0006, 0041.

*--- Internal Table(s)
DATA:BEGIN OF P OCCURS 10,
      PERNR      LIKE PERNR-PERNR,
*     ename      like pernr-ename,
      VORNA      LIKE P0002-VORNA,     "Adi
      NACHN      LIKE P0002-NACHN,     "Soyadi
      HIRE       LIKE P0000-BEGDA,     "Ise Giris Tarihi
      FIRE       LIKE P0000-ENDDA,     "Isten çikis Tarihi
      GBDAT      LIKE P0002-GBDAT,     "Dogum Tarihi
      TELNR      LIKE P0006-TELNR,     "Telefon no
      STRAS      LIKE P0006-STRAS,     "Cadde
      LOCAT      LIKE P0006-LOCAT,     "Adresin Devami
      HSNMR      LIKE P0006-HSNMR,     "Ev.No
      POSTA      LIKE P0006-POSTA,     "Daire
      ORT01      LIKE P0006-ORT01.     "Daire
DATA: END OF P.

*--- Internal Table(s) (Halk Yasam Sigorta Bilgileri)
DATA:BEGIN OF S OCCURS 10,
      PERNR      LIKE PERNR-PERNR,
      BEGDA      LIKE P0021-BEGDA,     "Baslangiç Tarihi
      ENDDA      LIKE P0021-ENDDA,     "Sinirlama Tarihi
      FAMSA      LIKE P0021-FAMSA,     "Aile Bilgisi
      STEXT      LIKE T591S-STEXT,     "Aile text Bilgisi
      OBJPS      LIKE P0021-OBJPS,     "Çocuk Sayisi
      FAVOR      LIKE P0021-FAVOR,     "Sigortalinin Adi
      FANAM      LIKE P0021-FANAM,     "Sigortalinin Soyadi
      FGBDT      LIKE P0021-FGBDT.     "Sigortalinin Dogum Tarihi
DATA: END OF S.

DATA: XPA0006 LIKE PA0006 OCCURS 0 WITH HEADER LINE,
*     xpa0002 like pa0002 occurs 0 with header line,
      XPA0021 LIKE PA0021 OCCURS 0 WITH HEADER LINE,
      XT591S  LIKE T591S  OCCURS 0 WITH HEADER LINE.

*-- RP_HIRE_FIRE
DATA: HIREDATE LIKE P0000-BEGDA,
      FIREDATE LIKE P0000-ENDDA.
DATA: BEGIN OF PHIFI OCCURS 5.
        INCLUDE STRUCTURE PHIFI.
DATA: END OF PHIFI.

*-- Variables
DATA: MYTOPLAM_AILE(4)  TYPE N,
      MYTOPLAM_FERT(4)  TYPE N,
      MYTOPLAM_DUL(4)   TYPE N,
      MYTOPLAM_COCUK(4) TYPE N,
      MYPERS_YAS(3)     TYPE N,
      MYSIGO_YAS(3)     TYPE N,
      MYNUMPOSTA(6)     TYPE C,
      H_HIRE            LIKE P0000-ENDDA,
      H_FIRE            LIKE P0000-ENDDA,
      C01               LIKE SY-COLNO VALUE 203.

*-- Giris ekranina ilave
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME TITLE TEXT-012.

SELECT-OPTIONS: HI_FI    FOR P0001-BEGDA
                DEFAULT '19800101'
                TO      SY-DATUM ,
                SDATE    FOR P0041-BEGDA OBLIGATORY.
SELECTION-SCREEN END OF BLOCK BLOCK1.

*-------     PROGRAM BASLIYOR

START-OF-SELECTION.

  PERFORM SET_INITIAL_VALUES .

GET PERNR.
*--
  CALL FUNCTION 'RP_HIRE_FIRE'
       EXPORTING
            BEG       = PN-BEGDA
            END       = PN-ENDDA
       IMPORTING
            HIRE_DATE = HIREDATE
            FIRE_DATE = FIREDATE
       TABLES
            PP0000    = P0000          "input
            PP0001    = P0001          "input
            PPHIFI    = PHIFI.         "output
*----
* write :/1 hiredate,' ',firedate.
*---
  PERFORM CALC_HIRE.

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

TOP-OF-PAGE.
  PERFORM FORMAT .

AT USER-COMMAND.
  CASE SY-UCOMM.

    WHEN 'S005'.
      PERFORM FORMAT.
      PERFORM WRITE_LIST_SOYADI.
      PERFORM TOTAL.
  ENDCASE.

*&---------------------------------------------------------------------*
*&      Form  FORMAT
*&---------------------------------------------------------------------*
FORM FORMAT.
  WRITE : /30 TEXT-013 COLOR COL_BACKGROUND INVERSE.
  SKIP.
  ULINE AT (C01).
  FORMAT   INTENSIFIED OFF COLOR 1.
  WRITE : /1 '|' NO-GAP,(09)TEXT-001 NO-GAP,    "Pers.no.
             '|' NO-GAP,(12)TEXT-007 NO-GAP,    "Aile Bireyi
             '|' NO-GAP,(11)TEXT-003 NO-GAP,    "Giris Tarihi
             '|' NO-GAP,(11)TEXT-026 NO-GAP,    "Çikis Tarihi
             '|' NO-GAP,(15)TEXT-002 NO-GAP,    "Adi
             '|' NO-GAP,(15)TEXT-010 NO-GAP,    "Soyadi
             '|' NO-GAP,(11)TEXT-016 NO-GAP,    "D.Tarihi
             '|' NO-GAP,(04)TEXT-021 NO-GAP,    "Yas
             '|' NO-GAP,(15)TEXT-022 NO-GAP,    "Tel.No
             '|' NO-GAP,(20)TEXT-023 NO-GAP,    "Cadde
             '|' NO-GAP,(26)TEXT-024 NO-GAP,    "Adresin Devami
             '|' NO-GAP,(07)TEXT-025 NO-GAP,    "Ev.No
             '|' NO-GAP,(06)TEXT-028 NO-GAP,    "Daire No
             '|' NO-GAP,(26)TEXT-027 NO-GAP,    "Yer
             '|' .
  ULINE AT (C01).
ENDFORM.                               " FORMAT
*&---------------------------------------------------------------------*
*&      Form  BODY
*&---------------------------------------------------------------------*
FORM BODY.
  SORT P BY PERNR HIRE.
  CLEAR : MYTOPLAM_AILE, MYTOPLAM_FERT, MYTOPLAM_COCUK, MYTOPLAM_DUL.
  LOOP AT P.
*--
    MYPERS_YAS = SY-DATUM+0(4) - P-GBDAT+0(4).     "Personelin Yasi
*--
    FORMAT COLOR COL_KEY.
    WRITE: /01 SY-VLINE NO-GAP,
          (08) P-PERNR NO-ZERO UNDER TEXT-001, " pers.no
               SY-VLINE NO-GAP.
    WRITE: 24  SY-VLINE NO-GAP,        " Aile Bireyi
          (10) P-HIRE     UNDER TEXT-003,       " Giris tarihi
               SY-VLINE NO-GAP,
          (10) P-FIRE     UNDER TEXT-026,       " Çikis tarihi
               SY-VLINE NO-GAP,
*         (30) p-ename    under text-002,       " Name and Surname
*              sy-vline no-gap,
          (14) P-VORNA    UNDER TEXT-002,       " Adi
               SY-VLINE NO-GAP,
          (14) P-NACHN    UNDER TEXT-010,       " Soyadi
               SY-VLINE NO-GAP,
          (10) P-GBDAT    UNDER TEXT-016,       " Dogum Tarihi
               SY-VLINE NO-GAP,
          (03) MYPERS_YAS NO-ZERO UNDER TEXT-021,       " Yas
               SY-VLINE NO-GAP,
          (14) P-TELNR            UNDER TEXT-022,       " Tel.No
               SY-VLINE NO-GAP,
          (19) P-STRAS            UNDER TEXT-023,       " Cadde
               SY-VLINE NO-GAP,
          (25) P-LOCAT            UNDER TEXT-024,       " Adresin Devami
               SY-VLINE NO-GAP,
          (06) P-HSNMR            UNDER TEXT-025,       " Ev.No
               SY-VLINE NO-GAP,
          (05) P-POSTA            UNDER TEXT-028,       " Daire
               SY-VLINE NO-GAP,
          (25) P-ORT01            UNDER TEXT-027,       " Yer
               SY-VLINE NO-GAP.
*  break-point.
*-- Es ve Çocuk Bilgisi
    LOOP AT S   WHERE
                    PERNR  EQ P-PERNR.

*--
      IF S-ENDDA EQ '99991231'.        "Personelin evli olmasi durumu
*--
        MYSIGO_YAS = SY-DATUM+0(4) - S-FGBDT+0(4).  "Sigortalinin Yasi
*--            Es(1)          Çocuk(2)
        IF S-FAMSA = '1' OR S-FAMSA = '2' AND MYSIGO_YAS <= '18'.
*--
          IF S-FAMSA = '1'.        "Es sayisi toplam aile sayisina ekk.
            ADD 1 TO MYTOPLAM_AILE.
          ENDIF.
*--
*          if s-famsa = '2'.        "Cocuk sayisi toplaniyor
*             add 1 to mytoplam_cocuk.
*          endif.
*--
          FORMAT COLOR COL_NORMAL INTENSIFIED OFF.

          WRITE: /01  SY-VLINE NO-GAP,
                  11  SY-VLINE NO-GAP,
                 (08) S-STEXT UNDER TEXT-007,       "Aile Bireyi Text
                 (02) S-OBJPS,
                      SY-VLINE NO-GAP.
          WRITE:  36  SY-VLINE NO-GAP.
          WRITE:  48  SY-VLINE NO-GAP.
          WRITE:  49  S-FAVOR(15)  .   "Sigortalinin Adi
          WRITE:  64  SY-VLINE NO-GAP.
          WRITE:  65  S-FANAM(15)  .   "Sigortalinin Soyadi
          WRITE:  80  SY-VLINE NO-GAP,
             (10) S-FGBDT UNDER TEXT-016,       "Sigortalinin Dogum Tar.
                      SY-VLINE NO-GAP,
             (03) MYSIGO_YAS NO-ZERO UNDER TEXT-021,  "Sigortalinin Yasi
                      SY-VLINE NO-GAP.
        ENDIF.
      ELSE.
        ADD 1 TO MYTOPLAM_DUL.   "Esinden ayri olan personel
      ENDIF.
    ENDLOOP.
*-- Fert Sayisi Bulunuyor.
    ADD 1 TO MYTOPLAM_FERT.
*--
  ENDLOOP.
  ULINE AT (C01).
ENDFORM.                               " BODY
*---------------------------------------------------------------------*
*       FORM TOTAL                                                    *
*---------------------------------------------------------------------*
FORM TOTAL.
  SKIP.
  FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
  WRITE :/ TEXT-017,
           MYTOPLAM_AILE NO-ZERO COLOR COL_NEGATIVE.
  COMPUTE MYTOPLAM_FERT = ( MYTOPLAM_FERT - MYTOPLAM_AILE ).
  WRITE :/ TEXT-018,
           MYTOPLAM_FERT NO-ZERO COLOR COL_NEGATIVE.
  WRITE :/ TEXT-019,
           MYTOPLAM_DUL  NO-ZERO COLOR COL_NEGATIVE.
ENDFORM.                               " TOTAL
*&---------------------------------------------------------------------*
*&      Form  CALC_HIRE
*&---------------------------------------------------------------------*
FORM CALC_HIRE.
  CHECK HIREDATE BETWEEN HI_FI-LOW AND HI_FI-HIGH.
  RP-PROVIDE-FROM-LAST P0001 SPACE HI_FI-HIGH HI_FI-HIGH.
  RP-PROVIDE-FROM-LAST P0002 SPACE HI_FI-HIGH HI_FI-HIGH.
  RP-PROVIDE-FROM-LAST P0006 SPACE HI_FI-HIGH HI_FI-HIGH.
  RP-PROVIDE-FROM-LAST P0041 SPACE SDATE-LOW  SDATE-HIGH.

  PERFORM FILL_P.
ENDFORM.                               " CALC_HIRE
*&---------------------------------------------------------------------*
*&      Form  FILL_P
*&---------------------------------------------------------------------*
FORM FILL_P.

*-- P0041 Kayit Atilan Personel
  CHECK P0041-BEGDA GE SDATE-LOW.

*-- Istenilen tarih araliginda bilginin bulunmasi
  CHECK FIREDATE GE HI_FI-HIGH .

  MOVE: PERNR-PERNR   TO P-PERNR,
*       p0001-ename   to p-ename,
        P0002-VORNA   TO P-VORNA,
        P0002-NACHN   TO P-NACHN,
        HIREDATE      TO P-HIRE,
        FIREDATE      TO P-FIRE,
        P0002-GBDAT   TO P-GBDAT,
        P0006-TELNR   TO P-TELNR,
        P0006-STRAS   TO P-STRAS,
        P0006-LOCAT   TO P-LOCAT,
        P0006-HSNMR   TO P-HSNMR,
        P0006-POSTA   TO MYNUMPOSTA,
        MYNUMPOSTA    TO P-POSTA,
        P0006-ORT01   TO P-ORT01.

  APPEND P.

  LOOP AT XPA0021 WHERE PERNR EQ PERNR-PERNR.

    READ TABLE XT591S WITH KEY SUBTY = XPA0021-FAMSA.

    MOVE : XPA0021-PERNR   TO S-PERNR,
           XPA0021-BEGDA   TO S-BEGDA,
           XPA0021-ENDDA   TO S-ENDDA,
           XPA0021-FAMSA   TO S-FAMSA,
           XPA0021-FANAM   TO S-FANAM,
           XT591S-STEXT    TO S-STEXT,
           XPA0021-OBJPS   TO S-OBJPS,
           XPA0021-FAVOR   TO S-FAVOR,
           XPA0021-FGBDT   TO S-FGBDT.
    APPEND S.

  ENDLOOP.
ENDFORM.                               " FILL_P
*&---------------------------------------------------------------------*
*&      Form  SET_INITIAL_VALUES
*&---------------------------------------------------------------------*
FORM SET_INITIAL_VALUES.

*-- Bosanmis Personel Bilgileri
* select * from pa0002 into table xpa0002 where pernr in pnppernr
*                                         and   famst eq '3'
*                                         or    famst eq '4'
*                                     order by pernr.
*-- Adres Bilgileri
  SELECT * FROM PA0006 INTO TABLE XPA0006 WHERE PERNR IN PNPPERNR
                                      ORDER BY PERNR.
*-- Aile Bilgileri
  SELECT * FROM PA0021 INTO TABLE XPA0021 WHERE PERNR IN PNPPERNR
                                      ORDER BY PERNR.
*-- Aile (Text Bilgileri)
  SELECT * FROM T591S  INTO TABLE XT591S  WHERE SPRSL EQ SY-LANGU  AND
                                                INFTY EQ '0021'.

ENDFORM.                               " SET_INITIAL_VALUES
*&---------------------------------------------------------------------*
*&      Form  WRITE_LIST_SOYADI
*&---------------------------------------------------------------------*
FORM WRITE_LIST_SOYADI.
  SORT P BY NACHN HIRE.
  CLEAR : MYTOPLAM_AILE, MYTOPLAM_FERT, MYTOPLAM_COCUK, MYTOPLAM_DUL.
  LOOP AT P.
*--
    MYPERS_YAS = SY-DATUM+0(4) - P-GBDAT+0(4).     "Personelin Yasi
*--
    FORMAT COLOR COL_KEY.
    WRITE: /01 SY-VLINE NO-GAP,
          (08) P-PERNR NO-ZERO UNDER TEXT-001, " pers.no
               SY-VLINE NO-GAP.
    WRITE: 24  SY-VLINE NO-GAP,        " Aile Bireyi
          (10) P-HIRE     UNDER TEXT-003,       " Giris tarihi
               SY-VLINE NO-GAP,
          (10) P-FIRE     UNDER TEXT-026,       " Çikis tarihi
               SY-VLINE NO-GAP,
*         (30) p-ename    under text-002,       " Name and Surname
*              sy-vline no-gap,
          (14) P-VORNA    UNDER TEXT-002,       " Adi
               SY-VLINE NO-GAP,
          (14) P-NACHN    UNDER TEXT-010,       " Soyadi
               SY-VLINE NO-GAP,
          (10) P-GBDAT    UNDER TEXT-016,       " Dogum Tarihi
               SY-VLINE NO-GAP,
          (03) MYPERS_YAS NO-ZERO UNDER TEXT-021,       " Yas
               SY-VLINE NO-GAP,
          (14) P-TELNR            UNDER TEXT-022,       " Tel.No
               SY-VLINE NO-GAP,
          (19) P-STRAS            UNDER TEXT-023,       " Cadde
               SY-VLINE NO-GAP,
          (25) P-LOCAT            UNDER TEXT-024,       " Adresin Devami
               SY-VLINE NO-GAP,
          (06) P-HSNMR            UNDER TEXT-025,       " Ev.No
               SY-VLINE NO-GAP,
          (06) P-POSTA            UNDER TEXT-028,       " Daire
               SY-VLINE NO-GAP,
          (25) P-ORT01            UNDER TEXT-027,       " Yer
               SY-VLINE NO-GAP.
*  break-point.
*-- Es ve Çocuk Bilgisi
    LOOP AT S   WHERE
                    PERNR  EQ P-PERNR.

*--
      IF S-ENDDA EQ '99991231'.        "Personelin evli olmasi durumu
*--
        MYSIGO_YAS = SY-DATUM+0(4) - S-FGBDT+0(4).  "Sigortalinin Yasi
*--            Es(1)          Çocuk(2)
        IF S-FAMSA = '1' OR S-FAMSA = '2' AND MYSIGO_YAS <= '18'.
*--
          IF S-FAMSA = '1'.        "Es sayisi toplam aile sayisina ekk.
            ADD 1 TO MYTOPLAM_AILE.
          ENDIF.
*--
*          if s-famsa = '2'.        "Cocuk sayisi toplaniyor
*             add 1 to mytoplam_cocuk.
*          endif.
*--
          FORMAT COLOR COL_NORMAL INTENSIFIED OFF.

          WRITE: /01  SY-VLINE NO-GAP,
                  11  SY-VLINE NO-GAP,
                 (08) S-STEXT UNDER TEXT-007,       "Aile Bireyi Text
                 (02) S-OBJPS,
                      SY-VLINE NO-GAP.
          WRITE:  36  SY-VLINE NO-GAP.
          WRITE:  48  SY-VLINE NO-GAP.
          WRITE:  49  S-FAVOR(15)  .   "Sigortalinin Adi
          WRITE:  64  SY-VLINE NO-GAP.
          WRITE:  65  S-FANAM(15)  .   "Sigortalinin Soyadi
          WRITE:  80  SY-VLINE NO-GAP,
             (10) S-FGBDT UNDER TEXT-016,       "Sigortalinin Dogum Tar.
                      SY-VLINE NO-GAP,
             (03) MYSIGO_YAS NO-ZERO UNDER TEXT-021,  "Sigortalinin Yasi
                      SY-VLINE NO-GAP.
        ENDIF.
      ELSE.
        ADD 1 TO MYTOPLAM_DUL.   "Esinden ayri olan personel
      ENDIF.
    ENDLOOP.
*-- Fert Sayisi Bulunuyor.
    ADD 1 TO MYTOPLAM_FERT.
*--
  ENDLOOP.
  ULINE AT (C01).

ENDFORM.                    " WRITE_LIST_SOYADI

Hiç yorum yok:

Yorum Gönder