본문 바로가기
ABAP

Module-pool 4 (Radio button)

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

[실행화면]

입력버튼을 눌러도 생성/변경 정보는 입력할 수 없다.

저장을 누르면 생성/변경 정보가 자동으로 입력이 되고 입력한 데이터는 DB에 반영된다.

조회버튼을 눌렀을 땐 아무것도 입력할 수 없다.

[프로그램 로직]

<TOP>

TABLES: Z11T_MARA, Z11T_MAKT.

DATA: OK_CODE TYPE SY-UCOMM,
      P_INPUT(1) TYPE C,
      P_LOOK(1) TYPE C.

라디오 버튼에 값이 있을때(체크 됐을때), 없을때(체크되지 않았을 때)를 넣어줄 변수를 선언한다. 레이아웃에서 그린 라디오버튼의 이름과 동일하게 선언해줬다.

<화면 100>

라디오버튼은 둘중 하나만 체크할 수 있게 해야하기 때문에 그룹을 지어준다. 그룹을 지어줄 라디오버튼들을 드래그하고 편집-라디오버튼-그룹핑 설정을 해주면 된다.

조회버튼을 눌렀을때 입력 못하게 막으려면 로직으로 한번에 처리해줄 수 있는데 그전에 레이아웃에서 입력 못하게 막으려는 필드들을 그룹 지어주어야 한다. 그 필드들을 더블클릭해 그룹에 G1을 직접 일일히.. 입력해주었다.

생성일, 생성자, 변경일, 변경자는 사용자가 따로 입력할 수 없고 저장버튼을 눌렀을때 자동으로 뜨게하기 위해 출력필드 전용으로 해준다.

PROCESS BEFORE OUTPUT.
 MODULE STATUS_0100.
 MODULE SELECT_0100.
MODULE SETTING_SCREEN.

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

<PBO>

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


MODULE select_0100 OUTPUT.
  SELECT SINGLE * FROM Z11T_MARA AS A
    INNER JOIN Z11T_MAKT AS B
    ON A~MATNR = B~MATNR
    INTO CORRESPONDING FIELDS OF  Z11T_MARA
    WHERE A~MATNR = Z11T_MARA-MATNR.
ENDMODULE.

MODULE setting_screen OUTPUT.
  LOOP AT SCREEN.
  CASE 'X'.
      "입력 라디오버튼 체크시
    WHEN P_INPUT . 
        IF screen-group1 = 'G1'.
         screen-input = 1. "입력을 허용한다.
       ENDIF.

    "조회 라디오버튼 체크시
    WHEN P_LOOK. 
      IF screen-group1 = 'G1'.
           screen-input = 0. "입력을 막는다.
       ENDIF.

   ENDCASE.
   MODIFY SCREEN.
  ENDLOOP.
ENDMODULE.

프로그램이 실행되면 PBO탄뒤 PAI타고 PBO다시 탄다. (화면이 하나기 때문에) 입력->조회, 조회->입력으로 변경할 때 속성 바뀐거 적용해 뿌려주기위해 레이아웃에서 라디오코드에 F코드 입력해 변경되는 이벤트를 만들어준다.

<PAI>

MODULE user_command_0100 INPUT.
   CASE ok_code.
     WHEN 'BACK'.
    LEAVE TO SCREEN 0.

    "저장버튼 눌렀을 때 입력/변경 정보 넣어주는 로직
    WHEN 'SAVE'.
    IF z11t_mara-ernam  IS INITIAL. "값이 없을때
        z11t_mara-ersda = sy-datum. "생성날짜
        z11t_mara-ernam = sy-uname. "생성자
    ELSE.
       z11t_mara-laeda = sy-datum. "변경날짜
       z11t_mara-aenam = sy-uname. "변경자
    ENDIF.

   MODIFY z11t_mara.
   MODIFY z11t_makt.

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

 ENDCASE.
ENDMODULE.


MODULE exit INPUT.
  CASE ok_code.
    WHEN 'EXIT' OR 'CANC'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.
728x90
반응형

'ABAP' 카테고리의 다른 글

Module-pool 6 (Subscreen, table control)  (0) 2023.02.14
Module-pool 5 (변경/생성)  (0) 2023.02.14
Module-pool 3 (Domain text)  (0) 2023.02.14
Module-pool 2 (조회)  (0) 2023.02.14
Module-pool 1 (변경)  (0) 2023.02.14

댓글