본문 바로가기
ABAP

온라인 프로그램 생성해보기

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

실행화면

  • 자재번호를 입력하고 실행하면

  • 조회조건에서 입력 받은 자재번호로 우선 (ZMARA_xx) 테이블에서 먼저 읽어 값이 있으면 출력하고 없을 경우 (MARA) 테이블에서 읽어 출력한다.

  • 자재그룹, 자재유형의 텍스트를 출력, 언어는 로그인 언어
  • 생성자, 생성일은 최초저장 시 한 번 저장
  • 변경자, 변경일은 변경 시 마다 저장
  • 변경신청 버튼 클릭 시 입력 받은 값을 (ZMARA_xx) 테이블에 저장

프로그램 로직

프로그램을 짜기전, 자재정보를 가지고 있는 MARA테이블과 비슷한 테이블 ZMARA_11을 생성한다.


1. 화면 100 생성

자재번호는 필수값으로 설정한다. 입력필드 REQUIRED로 설정.


2. 데이터 담을 변수 선언

TABLES: zmara_11. 

DATA: gs_tab  TYPE zmara_11,
      gt_tab  TYPE TABLE OF zmara_11.

3. 100 데이터 SELECT

화면에 그린 자재번호 필드와 자재번호가 같을때 데이터를 가져온다. 화면100의 PBO에서 SELECT한다.

  SELECT * FROM zmara_11
    INTO TABLE gt_tab
    WHERE matnr = zmara_11-matnr. 

4. 화면 200 생성

변경정보는 사용자가 입력하지 않고 저장시 자동으로 생성되는 데이터로 처리할거기때문에 출력전용 필드로 설정한다. 자재번호와 자재그룹 텍스트, 자재유형 텍스트도 출력전용 필드로 설정한다.


5. 데이터 담을 변수 선언

자재내역, 자재그룹, 자재유형을 담을 변수를 선언한다.

DATA: name    TYPE makt-maktx,
      g_name  TYPE zmara_11-matkl,
      g_name2 TYPE zmara_11-mtart.

6. 200 데이터 SELECT

조회조건에서 입력 받은 자재번호로 ZMARA_xx에서 먼저 읽어 값이 있으면 출력하고 없을 경우 MARA에서 읽어 출력한다. 화면 200의 PBO에서 SELECT 한다.

  SELECT SINGLE matkl meins mtart FROM zmara_11
    INTO CORRESPONDING FIELDS OF zmara_11
    WHERE matnr = zmara_11-matnr.

  IF sy-subrc NE 0.
    SELECT SINGLE matkl meins mtart FROM mara
      INTO CORRESPONDING FIELDS OF zmara_11
      WHERE matnr = zmara_11-matnr.
  ENDIF.

7. 텍스트 데이터 SELECT

텍스트 데이터를 변수에 담아준다. 자재그룹과 자재유형은 로그인 언어로 출력해줘야 하기 때문에 언어 조건을 추가해 select한다.

 CLEAR: g_name, g_name2, name.

  "자재그룹 명
  SELECT SINGLE wgbez FROM t023t
    INTO g_name
    WHERE matkl = zmara_11-matkl
      AND spras = sy-langu.
  "자재유형 명
  SELECT SINGLE mtbez FROM t134t
    INTO g_name2
    WHERE mtart = zmara_11-mtart
      AND spras = sy-langu.
  "자재 명
  CLEAR: name.
  SELECT SINGLE maktx FROM makt
    INTO name
    WHERE matnr = zmara_11-matnr.

8. 변경정보

생성자, 생성일은 최초저장 시 한 번 저장하고 변경자, 변경일은 변경 시 마다 저장한다. 생성자가 빈값일 때와 아닐 때로 구분한다.

  IF zmara_11-ernam IS INITIAL.
    zmara_11-ersda = sy-datum. "생성일
    zmara_11-ernam = sy-uname. "생성자
  ELSE.
    zmara_11-laeda = sy-datum. "변경일
    zmara_11-aenam = sy-uname. "변경자
  ENDIF.

9. 변경 신청 버튼

버튼은 화면이 아닌 GUI STATUS에 있기 때문에 200의 STATUS에서 생성해준다.

화면200에서 버튼을 눌렀을때 저장하는 로직이 타야하므로 200의 PAI에서 저장로직을 입력한다.

  CASE ok_code.
    WHEN 'SAVE'.
      MODIFY ZMARA_11 FROM ZMARA_11.

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

  ENDCASE.
728x90
반응형

'ABAP' 카테고리의 다른 글

생산계획 엑셀업로드+BDC 프로그램 1  (0) 2023.02.20
레포트 프로그램 생성해보기  (0) 2023.02.20
ALV Tree 2  (0) 2023.02.20
ALV Tree  (0) 2023.02.20
Simple Tree 2  (0) 2023.02.20

댓글