개발을 하다보면 1000번 스크린에 있는 값들을 엔터 이벤트 없이 처리해야할때가 있다.
그럴때 쓰면 좋은 함수들
1. 1000번 화면에 있는 값 읽어오기
*&---------------------------------------------------------------------*
*& Form dynp_values_read
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& --> 1000번 스크린 필드명
*& <-- 값
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
FORM DYNP_VALUES_READ USING PV_FIELD TYPE DYNFNAM
CHANGING PV_VALUE.
*"Variable
DATA:
LT_DYNP TYPE TABLE OF DYNPREAD WITH HEADER LINE.
LT_DYNP-FIELDNAME = PV_FIELD.
APPEND LT_DYNP. CLEAR LT_DYNP.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-REPID
DYNUMB = SY-DYNNR
TABLES
DYNPFIELDS = LT_DYNP
EXCEPTIONS
INVALID_ABAPWORKAREA = 1
INVALID_DYNPROFIELD = 2
INVALID_DYNPRONAME = 3
INVALID_DYNPRONUMMER = 4
INVALID_REQUEST = 5
NO_FIELDDESCRIPTION = 6
INVALID_PARAMETER = 7
UNDEFIND_ERROR = 8
DOUBLE_CONVERSION = 9
STEPL_NOT_FOUND = 10
OTHERS = 11.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
SORT LT_DYNP BY FIELDNAME.
READ TABLE LT_DYNP WITH KEY FIELDNAME = PV_FIELD
BINARY SEARCH.
IF SY-SUBRC = 0.
PV_VALUE = LT_DYNP-FIELDVALUE.
ENDIF.
ENDFORM.
퍼폼으로 불러서 쓰려면
*값 있는지 확인
DATA : LV_BUKRS TYPE BUKRS."받아오려는 변수
PERFORM DYNP_VALUES_READ USING '1000번화면의 필드명'(EX:P_BUKRS, S_WERKS-LOW)
CHANGING LV_BUKRS.
2. 데이터 가공하고 1000번 화면에 UPDATE 할때
*&---------------------------------------------------------------------*
*& Form dynp_values_update
*&---------------------------------------------------------------------*
*& --> 1000번 스크린 필드명
*& <-- 값
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
FORM dynp_values_update USING pv_field TYPE dynfnam
VALUE(pv_value).
* CHANGING pv_value.
*"Variable
DATA:
lt_dynp TYPE TABLE OF dynpread WITH HEADER LINE.
lt_dynp-fieldname = pv_field.
lt_dynp-fieldvalue = pv_value.
APPEND lt_dynp. CLEAR lt_dynp.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = sy-cprog
dynumb = sy-dynnr
TABLES
dynpfields = lt_dynp
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
undefind_error = 7
OTHERS = 8.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
SORT lt_dynp BY fieldname.
READ TABLE lt_dynp WITH KEY fieldname = pv_field
BINARY SEARCH.
IF sy-subrc = 0.
pv_value = lt_dynp-fieldvalue.
ENDIF.
ENDFORM.
퍼폼 문 에서 적용할때
LV_BUKRS = '회사코드값'.
PERFORM DYNP_VALUES_UPDATE USING '1000번 스크린 필드명'
CHANGING LV_BUKRS.
'ABAP' 카테고리의 다른 글
[ABAP]사용했던 탭스트립 값 기억하기 / Remember the tab strip values you used (0) | 2024.12.02 |
---|---|
실행중인 BATCH JOB 조회 (0) | 2023.12.14 |
ABAP단축키(SE80 단축키) (0) | 2023.12.13 |
[ABAP]SE16N EDIT 열기 (0) | 2022.09.15 |
ALV - 음수값 계산 / Set to allow negative input (0) | 2022.09.02 |
댓글