본문 바로가기
ABAP

Module-pool 1 (변경)

by clode 2023. 2. 14.
728x90
반응형

실행가능 프로그램과 모듈풀의 차이

  • TYPE 1 실행가능프로그램 : tcode없이도 실행가능, 스크린없이 실행, REPORT로 시작
  • M 모듈풀 : tcode가 있어야함, 프로그램과 스크린이 같이 움직임, PROGRAM으로 시작

모듈풀 만드는법

1) MZ로 시작하는 프로그램을 만든다.
2) OUTPUT, INPUT, FORM 주석을 풀고 INCLUDE를 생성한다.
3) 화면을 생성한다.
4) 화면을 볼 수 있는 트랜잭션을 생성한다.


[실행 화면]

화면100에서 1번테이블의 키값인 '순번'을 가져온다.

화면200은 100에서 가져온 순번대로 다른 개인정보들을 입력하고(2번테이블 필드) 변경 시 입력한 값을 DB에 반영한다.

이미 있는 값은 가져온다.




1번 테이블

2번 테이블

[프로그램 로직]

<TOP>

TABLES: ZS1D11T_01, ZS1D11T_02.

DATA: OK_CODE TYPE SY-UCOMM,
      GS_TAB TYPE ZS1D11T_01,
      GS_TAB2 TYPE ZS1D11T_02,
      GT_TAB TYPE TABLE OF ZS1D11T_01,
      GT_TAB2 TYPE TABLE OF ZS1D11T_02.

TABLES로 선언하면 테이블이름과 같은 WA가 만들어진다.

<화면 100>

PROCESS BEFORE OUTPUT.
 MODULE STATUS_0100.

PROCESS AFTER INPUT.
MODULE EXIT AT EXIT-COMMAND.
 MODULE USER_COMMAND_0100.

<화면 200>

PROCESS BEFORE OUTPUT.
 MODULE STATUS_0200.
 MODULE SELECT_0200.

PROCESS AFTER INPUT.
MODULE EXIT AT EXIT-COMMAND.
 MODULE USER_COMMAND_0200.

<PBO>

MODULE status_0100 OUTPUT.
 SET PF-STATUS 'S100'.
 SET TITLEBAR 'S100'.
ENDMODULE.


MODULE status_0200 OUTPUT.
 SET PF-STATUS 'S200'.
 SET TITLEBAR 'S200'.

 SELECT * FROM zs1d11t_02
   INTO CORRESPONDING FIELDS OF TABLE gt_tab.
ENDMODULE.


MODULE select_0200 OUTPUT.
  CLEAR: zs1d11t_02.
  SELECT SINGLE * FROM zs1d11t_02
  WHERE seqnr = zs1d11t_01-seqnr.

  zs1d11t_02-seqnr = zs1d11t_01-seqnr.
ENDMODULE.

화면100의 '순번'필드에 입력된 값은 화면200의 '순번'필드에 입력된 값과 같다. 100에서 입력한 값이 200에서도 출력된다.


<PAI>

MODULE user_command_0100 INPUT.
 CASE ok_code.
     WHEN 'BACK'.
    LEAVE TO SCREEN 0. "SET SCREEN 0. 프로세스를 종료하느냐 이동하느냐 차이
  WHEN 'OK'.
     CALL SCREEN 200.
  ENDCASE.

ENDMODULE.



MODULE exit INPUT.
  CASE ok_code.
    WHEN 'EXIT' OR 'CANC'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.



MODULE user_command_0200 INPUT.
 CASE ok_code.
     WHEN 'BACK'.
    LEAVE TO SCREEN 0.
  WHEN 'MODI'.
  IF zs1d11t_02-ernam  IS INITIAL. "값이 없을때
      zs1d11t_02-erdat = sy-datum. "생성날짜
      zs1d11t_02-erzet = sy-uzeit. "생성시간
      zs1d11t_02-ernam = sy-uname. "생성자
  ENDIF.

  zs1d11t_02-aedat = sy-datum. "변경날짜
  zs1d11t_02-aezet = sy-uzeit. "변경시간
  zs1d11t_02-aenam = sy-uname. "변경자

  MODIFY zs1d11t_02.

  IF sy-subrc = 0.
   MESSAGE s016(pn) WITH '변경되었습니다'.
   COMMIT WORK.
  ELSE.
   MESSAGE s016(pn) WITH '변경 중 오류가 발생했습니다'
   DISPLAY LIKE 'E'.
   ROLLBACK WORK.
   EXIT.
  ENDIF.

 ENDCASE.
ENDMODULE.
728x90
반응형

댓글