본문 바로가기
ABAP

1000번스크린 화면 값 읽어서 업데이트하기

by wonieee 2023. 12. 15.

개발을 하다보면 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.

 

댓글