1. 이 문장이 숫자인지 알아보기
data : num(10) value '0123456789'.
if data cn num.            

TRUE  : 숫자가 아닌 값이 존재한다.
FALSE : 모두 숫자다.

2. PC file list(Popup window) 얻기 및 file 선택
call function 'KD_GET_FILENAME_ON_F4'

3. File name과 path 분리
call function 'SO_SPLIT_FILE_AND_PATH'

4. 현재 화면의 FIELD값 얻기

form dynp_values_read tables fld          structure dynpread
                      using  value(fname) like      dynpread-fieldname
                             retcd        like      sy-subrc.
  refresh fld.
  clear   fld.
  fld-fieldname = fname.
  append fld.


* 현재 화면의 특정 필드 값 읽기

  call function 'DYNP_VALUES_READ'
       exporting
            dyname     = sy-cprog
            dynumb     = sy-dynnr
       tables
            dynpfields = fld
       exceptions
            others     = 01.
  retcd = sy-subrc.




5. 현재 화면의 FIELD값 변경
form dynp_values_update tables fld    structure dynpread
                        using  retcd  like      sy-subrc.
* 현재 화면의 특정 필드 값 변경
  call function 'DYNP_VALUES_UPDATE'
       exporting
            dyname               = sy-cprog
            dynumb               = sy-dynnr
       tables
            dynpfields           = fld
       exceptions
            invalid_abapworkarea = 1
            invalid_dynprofield  = 2
            invalid_dynproname   = 3
            invalid_dynpronummer = 4
            invalid_request      = 5
            no_fielddescription  = 6
            undefind_error       = 7
            others               = 8.

  retcd = sy-subrc.
endform.                               " DYNP_VALUES_READ

6. VARIABLE의 길이 만큼 줄 긋기
pos : 시작 지점
size : 너비

write at /pos(size) sy-uline.

7. SELECT-OPTION에 한가지 값만 들어왔는지 CHECK
form is_multi tables sel_option
              using  result.
  data : begin of separator occurs 3,
           option(1),
           operator(2),
         end of separator.

  data : count    like   sy-fdpos.

* 분석을 위해 oprator만 알아보려고...
  separator[] = sel_option[].

* 조건 table이 복수개의 line을 가지면 TRUE
  describe table sel_option lines count.
  if count > 1.  result = 'T'. exit. endif.

* Operator가 'EQ'가 아니면 TRUE
  read table separator index 1.
  if sy-subrc ne 0.                    " 조건이 없다.
    result = 'F'. exit.
  endif.
  if separator-operator ne 'EQ'.
    result = 'T'. exit.
  endif.

  result = 'F'.

endform.                               " IS_MULTI

8. 화면에 icon 보이기
   - 화면 특정 영역에 icon을 그때 그때 알맞게 보이고자 할 때 사용한다.

  사용 예는 다음과 같다. 
   1) 우선 화면에 Char 30의 Templated를 하나 만든다.(With Icon check)
   2) TOP inlcude에서 화면 필드를 data로 선언한다.(Character 80)
   3) PBO에서 다음과 같은 함수를 사용하여 선언한 Template에 값을 move한다.

    call function 'ICON_CREATE'
         exporting
              name                  = 'ICON_DETAIL'
              text                  = ' '                " Icon 옆에 나타날 설명
              info                  = '상세정보'
              add_stdinf            = 'X'
         importing
              result                = <화면 필드>
         exceptions
              icon_not_found        = 1
              outputfield_too_short = 2
              others                = 3.

9. Table 정보 얻기
방법 1.
  DATA : BEGIN OF NAMETAB OCCURS 0,
           INCLUDE STRUCTURE DNTAB,
         END OF NAMETAB

CALL FUNCTION 'NAMETAB_GET'
     EXPORTING
          TABNAME = TABNAME
     TABLES
          NAMETAB = NAMETAB
     EXCEPTIONS
          OTHERS  = 1.

방법 2.
     DATA: BEGIN OF TAB2 OCCURS 10.
             INCLUDE STRUCTURE X031L.
     DATA: END OF TAB2.

     IMPORT NAMETAB X030L
                    TAB2
                    ID TABNAME.

테이블이 가진 필드의 정보를 보여준다. 
만일 어떤 테이블에서 특정 필드만 제외하고 변경할 필요가 있다면 NAMETAB에서 
그 필드의 항목을 지우고 POSITION과 OFFSET, KEY의 개수(지울 필드가 KEY일 때), 
KEY(지울 필드가 KEY일 때)의 총 길이 등을 변경하면 된다.
이용가능한 곳 : Possible Entry로 

10. Screen 정보 얻기
  DATA : BEGIN OF HEADER_INFO,
           INCLUDE STRUCTURE D020S,
         END OF HEADER_INFO,
         BEGIN OF FIELD_LIST OCCURS 0,
           INCLUDE STRUCTURE D021S,
         END OF FIELD_LIST,
         BEGIN OF FLOW_LOGIC OCCURS 0,
           INCLUDE STRUCTURE D022S,
         END OF FLOW_LOGIC,
         BEGIN OF MATCHCODE OCCURS 0,
           INCLUDE STRUCTURE D023S,
         END OF NAMETAB.
  DATA : ID(12)    TYPE C.
     ID = 'SAPMF05A'.
     ID+8(4) = '0100'.
     IMPORT DYNPRO HEADER_INFO FIELD_LIST FLOW_LOGIC MATCHCODE ID ID.
필드의 존재 유무 판단이나 그 화면을 변경(?)하고 싶을 때...
Export Dynpro와 함께 사용

11. FIELD값 암호화 방법
* PASSWORD FIELD는 RAW TYPE이어야 한다.

  PASSWORD = I_PASSWORD.
  DESCRIBE FIELD PASSWORD LENGTH LEN.
  OFFSET = F = 0.
  DO LEN TIMES.
       ASSIGN PASSWORD+OFFSET(1) TO < S > TYPE 'X'.
       IF < S > IS INITIAL.
            EXIT.
       ENDIF.
       F = F + < S >.
       ADD 1 TO OFFSET.
  ENDDO.

  IF SY-SUBRC = 0.
*      RSA Public key algorithm
*      Choose two very large primes (simple e.g., P=47, Q=71) and
*      set N = P*Q = 3337 and M = (P-1)*(Q-1) = 3220
*      Choose E relatively prime to M, e.g E=79
*      Set D = E^-1 (mod M) = 79^-1 (mod 3220) = 1019
*      Public key is (N, E) = (3337, 79)
*      Private key is (N, D) = (3337, 1019)
*      To encrypt n, C = cipher = n^E (mod N) = n^79 mode 3337
*      To decrypt C, n = C^D mod N

       F = F ** 79.
       F_STR = F DIV 3337.
       REPLACE '.' WITH '' INTO F_STR.
       REPLACE 'E+' WITH '' INTO F_STR.
       CONDENSE F_STR NO-GAPS.
       MOVE F_STR TO E_PASSWORD.
  ELSE.
       CLEAR E_PASSWORD.
  ENDIF.

12. DECIMAL 값을 CURRENCY로
call function 'CURRENCY_AMOUNT_IDOC_TO_SAP'
     exporting
          currency    = currkey
          idoc_amount = decamt
     importing
          sap_amount  = convamt
     exceptions
          others      = 1.
if sy-subrc ne 0.
endif.

13. 전표 LINE ITEM 조회
* 상세정보를 볼 전표번호
data : begin of buztab occurs 30,
         bukrs             like bseg-bukrs,
         belnr             like bseg-belnr,
         gjahr             like bseg-gjahr,
         buzei             like bseg-buzei,
         flaen(1)          type c,     " X = Posten geaendert
       end   of buztab.

call dialog 'RF_ZEILEN_ANZEIGE'
     exporting
          buztab                   " Line Item List
          line                     " Total Line Count
          tcode                    " Transaction code - FB05
          x_nochange from 'X'.

14. Post With Clearing BDC에서 Open item을 선택조건
* Post With Clearing에서 Open item을 선택할 때 무엇으로 선택할지 기준을
* 주어야 하는데 이 기준에 해당하는 Radio Button의 위치가 Configuration
* 사항이라 BDC시 문제가 발생한다.
* 따라서 관리 Table에서 직접 정보를 읽어 BDC Data를 구성한다.
    select single * from t021r
                    where event = 'SL-AG' and
                          feldn = 'BELNR'.
* 맨 앞에 NONE이 자동으로 생성되므로 위치가 뒤로 1씩 증가한다.
    location = t021r-selps + 1.
    concatenate 'RF05A-XPOS1(' location ')' into location_text.
    perform append_bdcdata(sapfzfb0) tables bdcdata using
               ' ' location_text  'X'. " Document number로

15. BDC 전표 기표에서 NEXT SCREEN 결정 LOGIC
FORM NEXT_SCREEN USING VALUE(BUKRS)
                       VALUE(TCODE)
                       VALUE(KOART)
                       NEXT_SCR.
  DATA   DYN_ID(12).

*
  SELECT SINGLE * FROM T001  WHERE BUKRS = BUKRS.
  IF SY-SUBRC NE 0.

  ENDIF.
*
  SELECT SINGLE * FROM T020  WHERE TCODE = TCODE.
  IF SY-SUBRC NE 0.

  ENDIF.
*
  T019-DYNCL = T020-DYNCL.
  T019-KOART = KOART.
  T019-UMSKZ = ' '.
  T019-BUVAR = T001-BUVAR.
  T019-DYNNR = SPACE.
*
  READ TABLE T019.
  IF SY-SUBRC NE 0.
    T019-BUVAR  =  SPACE.
    READ TABLE T019.
  ENDIF.
*
  IF SY-SUBRC EQ 0  AND  T019-DYNNR  >  '0000'.
    NEXT_SCR  =  T019-DYNNR.
    CONCATENATE 'SAPLF040' NEXT_SCR INTO DYN_ID.
    IMPORT DYNPRO  I_DYNHEAD I_DYNFLD  "Next SCREEN 정보읽기
                   I_DYNFLOW I_DYNMATC ID DYN_ID.
    IF NEXT_SCR  = '0300'.             "Subscreen 정보읽기.
      IMPORT DYNPRO  I_DYNH    I_DYNF
                     I_DYNL    I_DYNM    ID 'SAPLKACB0002'.
    ENDIF.
  ELSE.
    RAISE NEXT_SCREEN_NOT_FOUND.
  ENDIF.
ENDFORM.                               " NEXT_SCREEN

'ABAP' 카테고리의 다른 글

MESSAGE_SHOW  (0) 2022.07.29
EXIT, STOP, CONTINUE, CHECK  (0) 2022.07.22
Report에서 외부 명령어 호출  (0) 2022.07.21
Data를 excel file 형식으로 출력시키는 법  (0) 2022.07.21
ABAP 정규식 Regular Expression  (0) 2022.07.20

+ Recent posts