#PARAN SILVERLIGHT#
  • Tistory
    • 관리자
    • 글쓰기
Carousel 01
Carousel 02
Previous Next

'ERP'에 해당되는 글 53건

  • 2011.10.05 Web Dyn Pro : Exception Class CX_FQDN
  • 2011.10.05 Web Dynpro : 웹페이지 표시 에러 - res://ieframe.dll/dnserrordiagoff_webOC.htm
  • 2011.10.05 공유 메모리 이용방법 : Call 받는 프로그램의 파라미터가 Checkbox 일때
  • 2011.07.26 LOGRT : LOCATION MASTER DATA 조회
  • 2011.07.20 Class Pattern 기능
  • 2011.07.19 ALV - 전표 프로그램
  • 2011.07.19 ALV GRID - SLIS Package
  • 2011.07.19 SAP MEMORY & ABAP MEMORY
  • 2011.07.19 FIELD-SYMBOL 설명과 사용예
  • 2011.07.19 String 함수

Web Dyn Pro : Exception Class CX_FQDN

ERP/SAP/R/3 2011. 10. 5. 13:44

 첫 Dyn Pro 프로그램을 개발 하던 중에 위 문제로 에러가 발생하였다.
 
 SAP Web Server(Internet Transaction server)의 도메인을 Qualified 된 형식으로 바꾸어 주었더니  해결되었다.
 참고 :  http://help.sap.com/saphelp_erp2005/helpdata/en/67/be9442572e1231e10000000a1550b0/content.htm

 



나의 첫 Dyn Pro Application. ^^

저작자표시 비영리 (새창열림)
블로그 이미지

파란실버라이트

To remember the time when I started learning Silver Light!

,

Web Dynpro : 웹페이지 표시 에러 - res://ieframe.dll/dnserrordiagoff_webOC.htm

ERP/SAP/R/3 2011. 10. 5. 12:56

Dynpro Hello World 를 실행 하려고 사진과 같이 페이지가 표시되지 않고

res://ieframe.dll/dnserrordiagoff_webOC.htm 가 발생합니다.

혹시 해결책을 가고 계시면 답변 부탁드립니다.



[해결 방법]
1.  DNS에 SAP가 등록되어 있는지 확인
     등록되어 있지 않다면 임시로 Host file을 수정해서 도메인과 IP를 추가한다.


   a. sap Internet transaction server domain name 위치




b. host 파일 위치 및 수정(Tab으로 IP와 Domain 이름을 구분)


 2. SAP Setup 시 full Package(dynpro)가 설치되어 있는지 확인해야 한다.
 => 어느 패키지 때문에 실행이 되지 않는지 아시는 분 있으시면 알려주세요 .^^;
저작자표시 비영리 (새창열림)
블로그 이미지

파란실버라이트

To remember the time when I started learning Silver Light!

,

공유 메모리 이용방법 : Call 받는 프로그램의 파라미터가 Checkbox 일때

ERP/SAP/R/3 2011. 10. 5. 11:35

아래 zmmr081에서  check box를 선택 여부에 따라서 

zmmr033의 check box를 선택을 동일하게 하려 합니다.


 

 

Zmmr081 실행 결과

 

 

Zmmr081 : Call 하는 함수 소스  Command event 시

 

 

 

 

Zmmr033 소스 : Call 받는 함수 소스 Parameter 공유 메모리 설정

 

 

 


Zmmr033 call 
이후  스크린 화면

=> Material name은 공유가 된 것을 확인

=> PO checkbox 를 check , uncheck 하는데 어려움이 있습니다.(아래 소스 및 화면 캡쳐 참조)

 

 

[해결 방법]

submit이라는 함수를 사용해서 call 받는 프로그램의 check box 체크 유무를 변경할 수 있네요. ^^

A. Call 하는 프로그램 소스 : T-Code(zmmr033)가 아닌 Program 이름(zmmr0033)을 입력한다.

        data : PO VALUE '' ,
             PR VALUE '',
             LINE VALUE '',
             MATERIALROOM VALUE 'X'.

      IF OPEN_PO EQ 'X'.
        PO = 'X'.
      ENDIF.
      IF LINE_STO EQ 'X'.
        LINE = 'X'.
      ENDIF.

      submit zmmr0033 and return "VIA SELECTION-SCREEN
      with c_3 = LINE
      with c_4 = PR
      with c_5 = PO
      with c_6 = MATERIALROOM
      with s_matnr = WA-idnrk.

B. Call 받는 프로그램 소스 : Memory Set 을 한다.

 

저작자표시 비영리 (새창열림)
블로그 이미지

파란실버라이트

To remember the time when I started learning Silver Light!

,

LOGRT : LOCATION MASTER DATA 조회

ERP/SAP/R/3 2011. 7. 26. 11:10





저작자표시 비영리 (새창열림)
블로그 이미지

파란실버라이트

To remember the time when I started learning Silver Light!

,

Class Pattern 기능

ERP/SAP/R/3 2011. 7. 20. 11:19





인스턴스 메소드 호출과 파라미터에 대한 스크립가 화면에 자동으로 입력된다.

저작자표시 비영리 (새창열림)
블로그 이미지

파란실버라이트

To remember the time when I started learning Silver Light!

,

ALV - 전표 프로그램

ERP/SAP/R/3 2011. 7. 19. 20:52

  *&---------------------------------------------------------------------*
*& Report  ZRED_TEST2
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZRED_TEST2  MESSAGE-ID f5 NO STANDARD PAGE HEADING LINE-SIZE 150.


TABLES: bkpf, bseg.

DATA: it_01 LIKE bkpf OCCURS 0 WITH HEADER LINE.

TYPE-POOLS:slis.
 DATA: l_pos TYPE i VALUE 0.
 DATA: fieldcat TYPE slis_t_fieldcat_alv,
           fieldcat_ln LIKE LINE OF fieldcat.

DATA: sortcat TYPE slis_t_sortinfo_alv,
           sortcat_ln LIKE LINE OF sortcat.

DATA: eventcat TYPE slis_t_event,
           eventcat_ln LIKE LINE OF eventcat.


DATA: BEGIN OF it_02 OCCURS 0,
         bukrs  LIKE  bkpf-bukrs,  "회사코드
         belnr  LIKE  bkpf-belnr,  "전표번호
         gjahr  LIKE  bkpf-gjahr,  "회계연도
         blart  LIKE  bkpf-blart,  "전표유형
         bldat  LIKE  bkpf-bldat,  "증빙일
         budat  LIKE  bkpf-budat,  "전기일
         stblg  LIKE  bkpf-stblg,  "역분개전표
         stjah  LIKE  bkpf-stjah,  "연분개전표 회계연도
         waers  LIKE  bkpf-waers,  "통화키
         buzei  LIKE  bseg-buzei,  "개별항목번호
         bschl  LIKE  bseg-bschl,  "전기키
         shkzg  LIKE  bseg-shkzg,  "차변/대변 지시자
         dmbtr  LIKE  bseg-dmbtr,  "현지통화금액
         wrbtr  LIKE  bseg-wrbtr,  "전표통화금액
         sgtxt  LIKE  bseg-sgtxt,  "적요
       END OF it_02.


******************************************************************************
* SELECTION SCREEN
******************************************************************************
 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS: p_bukrs LIKE bkpf-bukrs OBLIGATORY MEMORY ID buk,       "회사코드
             p_gjahr LIKE bkpf-gjahr OBLIGATORY DEFAULT sy-datum.   "회계연도

SELECT-OPTIONS: s_belnr FOR bkpf-belnr.                            "회계전표번호

SELECTION-SCREEN END OF BLOCK b1.

******************************************************************************
* START-OF-SELECTION
******************************************************************************
 START-OF-SELECTION.

* READ BKPF
   PERFORM read_bkpf.

* READ BSEG
   PERFORM read_bseg.

* MERGE_DATA
   PERFORM merge_data.

******************************************************************************
* END-OF-SELECTION
******************************************************************************
 END-OF-SELECTION.

* AVL report
   PERFORM build_filedcat.                 " 필드 지정을 위한 폼
   PERFORM build_eventcat.               " 이벤트 처리 폼[선택사항]
   PERFORM build_sortcat.                 " 정렬 폼[선택사항]
   PERFORM alv_write USING 'G'.       " 출력 폼

* 처리에 필요한 form정보 포함.  (inc)
*   INCLUDE zred_test2_dataproc. "[기본 입력처리 폼 구성]
*   INCLUDE zred_test2_header. "[ALV 출력처리 폼 구성]
*


* INCLUDE문장 구성 *  ZRED_TEST2_DATAPROC "(dataproc)  △
*--------------------------------------------------------------------------------

*&---------------------------------------------------------------------*
*&  Include           ZRED_TEST2_DATAPROC
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  READ_BKPF
*&---------------------------------------------------------------------*
*      BKPF 내역 READ
*----------------------------------------------------------------------*

 form read_bkpf.
   clear it_01.                                      "INTERNAL 테이블 초기화

  select *
     into corresponding fields of table it_01
     from bkpf
    where bukrs = p_bukrs
     and gjahr = p_gjahr
     and belnr in s_belnr .

    if sy-subrc <> 0.                              "오류체크
       message s170.
       leave list-processing.
     endif.


endform.                                           " READ_BKPF


*&---------------------------------------------------------------------*
*&      Form  READ_BSEG
*&---------------------------------------------------------------------*
*       BSEG 내역 READ
*----------------------------------------------------------------------*

form read_bseg .
   clear it_02.
   refresh it_02.

  select *
     into corresponding fields of table it_02
     from bseg
    where bukrs = p_bukrs
      and gjahr = p_gjahr
      and belnr in s_belnr .

endform.                    " READ_BSEG


*&---------------------------------------------------------------------*
*&      Form  MERGE_DATA
*&---------------------------------------------------------------------*
*       IT_01 + IT_02 MERGE
*----------------------------------------------------------------------*

form merge_data .
   sort it_01 by bukrs gjahr belnr.
   sort it_02 by bukrs gjahr belnr.

  loop at it_02.
     read table it_01 with key bukrs = it_02-bukrs
                               gjahr = it_02-gjahr
                               belnr = it_02-belnr
                               binary search.
     if sy-subrc <> 0.
     else.
       it_02-blart = it_01-blart.
       it_02-bldat = it_01-bldat.
       it_02-budat = it_01-budat.
       it_02-stblg = it_01-stblg.
       it_02-stjah = it_01-stjah.
       it_02-waers = it_01-waers.
     endif.

    if it_02-shkzg = 'H'.
       it_02-dmbtr = it_02-dmbtr * -1.
       it_02-wrbtr = it_02-wrbtr * -1.
     endif.
     modify it_02.
  endloop.

endform.                    " MERGE_DATA



* INCLUDE문장 구성 * ZRED_TEST2_HEADER (header) △

*&---------------------------------------------------------------------*
*&  Include           ZRED_TEST2_HEADER
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  BULLD_FILEDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

form build_filedcat ." (fieldcat)

* 회사코드
   l_pos = l_pos + 1.
   clear fieldcat_ln.
   fieldcat_ln-col_pos = l_pos.                        " 필드 위치
   fieldcat_ln-fieldname = 'BUKRS'.                 " 필드명
   fieldcat_ln-reptext_ddic = '회사코드'.           " 필드 레이블
   append fieldcat_ln to fieldcat.

* 회계연도
   l_pos = l_pos + 1.
   clear fieldcat_ln.
   fieldcat_ln-col_pos = l_pos.
   fieldcat_ln-fieldname = 'GJAHR'.
   fieldcat_ln-reptext_ddic = '회계연도'.
   append fieldcat_ln to fieldcat.

* 전표번
   l_pos = l_pos + 1.
   clear fieldcat_ln.
   fieldcat_ln-col_pos = l_pos.
   fieldcat_ln-fieldname = 'BELNR'.
   fieldcat_ln-reptext_ddic = '전표번'.
   append fieldcat_ln to fieldcat.

endform.                    " BULLD_FILEDCAT


*&---------------------------------------------------------------------*
*&      Form  build_sortcat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
 form build_sortcat. "(sortcat)
   sortcat_ln-spos = '1'.                            " 정렬하고자 하는 필드 순서.
   sortcat_ln-fieldname = 'BUKRS'.            " 정렬 필드 지정.
   sortcat_ln-up = 'X'.                                " 정렬(asc) 설정 'X', 해제 space.
   sortcat_ln-down = space.                      " 정렬(desc) 설정 'X', 해제 space.
   sortcat_ln-subtot = space.                     " 합계 지정 'X', 해제 space.
   append sortcat_ln to sortcat.

endform.                    "build_sortcat


*&---------------------------------------------------------------------*
*&      Form  eventcat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
 form build_eventcat. "(eventcat)
   eventcat_ln-name = 'TOP_OF_PAGE'.
   eventcat_ln-form = 'PAGE_HEADER'.

  append eventcat_ln to eventcat.

endform.                    "build_eventcat

*&---------------------------------------------------------------------*
*&      Form  alv_write
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FLAG       text
*----------------------------------------------------------------------*
 form alv_write using flag type c. "(write)

  data: pgm like sy-repid.
   pgm = sy-repid.

  data: disp_mode(30).

*출력 형식을 그리드와 리스트형으로 구분하여 출력.
   if  flag = 'G'.
     disp_mode = 'REUSE_ALV_GRID_DISPLAY'.        " 그리드 형식
   else.
     disp_mode = 'REUSE_ALV_LIST_DISPLAY'.         " 리스트 형
   endif.

  call function disp_mode
     exporting
       i_callback_program      = pgm
       i_callback_user_command = 'USER_COMMAND'
       it_fieldcat             = fieldcat
       it_sort                 = sortcat
       i_save                  = 'U'
       it_events               = eventcat
     tables
       t_outtab                = it_02
     exceptions
       program_error           = 1
       others                  = 2.

endform.                    "alv_write


*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
form user_command using r_ucomm type sy-ucomm
                                           rs_selfield type slis_selfield.
   case r_ucomm.
     when '&IC1'.
       read table it_02 index rs_selfield-tabindex.

      if it_02-belnr <> ' '.
         set parameter id 'BLN' field it_02-belnr.
         set parameter id 'BUK' field it_02-bukrs.
         set parameter id 'GJR' field it_02-gjahr.
         call transaction 'FB03' and skip first screen.
       endif.
   endcase.
 endform.                    "user_command

*&---------------------------------------------------------------------*
*&      Form  page_header
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
 form page_header.
   skip 1.
   write : '전표내역 ALV 프로그램 HEADER'.
   skip 1.
 endform.                    "page_header



전표 번호 더블클릭 : Pameter id에 회사코드, 회계연도, 전표번호를 저장하고 FB03 T-Code를 Call 하면 아래와 같은 세부정보를 보여준다.

저작자표시 비영리 (새창열림)
블로그 이미지

파란실버라이트

To remember the time when I started learning Silver Light!

,

ALV GRID - SLIS Package

ERP/SAP/R/3 2011. 7. 19. 20:01


ALV(abap list viwer)
SAP Standard에서 제공되는 View함수를 사용하는 프로그램
ALV를 통해 조회된 DATA를 수정/변경 할 수 있으며 신규 데이터도 입력 가능하다.

-주요기능-
정렬기능
필터링기능
열의 크기 변경
레이아웃 변경
더블클릭에 의한 추가 정보 제공
기본적인 계산 수행 기능
엑셀 파일 및 워드 문서 저장


실무에선 write로 된 리폿은 거의 안쓴다고.. ALV를 쓴다고 한다. 하긴... write 리폿은 너무 어려워..;;

강의시간에 배울 땐 어렵게 느껴졌는데, 집에와서 책보고 해보니 별거 아니라능..

PERFORM BUILD_FIELDCAT : 화면에 디스플레이할 필드를 정의
PERFORM BUILD_SORTCAT : 원하는 필드로 정렬하기 위한 레이아웃을 생성
PERFORM BUILD_EVENTCAT : 페이지의 header를 작성
PERFORM ALV_WRITE : field data 및 레이아웃 속성값과 인터널테이블 데이타를 Function Module인 'REUSE_ALV_LIST_DISPLAY'에 임포트


굳이 PERFORM문을 쓸 필요는 없지만 코딩은 깔끔하고 가독성이 있어야죠..

TYPE-POOLS : slis.
SLIS를 type-pool로 선언하여 프로그램에서 사용하겠다는 의미. TYPE-POOL이란 SAP에서 제공하는 각종 타입 및 Constants가 선언되어 있는 그룹이다.

*필드카탈로그
DATA : fieldcat TYPE slis_t_fieldcat_alv,
fieldcat_ln LIKE LINE OF fieldcat. "워크에어리아 생성 , 헤드만 있다.
*소트카탈로그
DATA : sortcat TYPE slis_t_sortinfo_alv,
sortcat_ln LIKE LINE OF sortcat.
*이벤트카탈로그
DATA : eventcat TYPE slis_t_event,
eventcat_ln LIKE LINE OF eventcat.
*write 카탈로그
DATA : pgm LIKE sy-repid.
pgm = sy-repid.
*디스플레이
DATA : ls_layout TYPE slis_layout_alv.


기존의 데이터베이스 테이블의 데이터를 가져오는 소스코드에서 추가하면 된다. ALV로 만들꺼..
주석달아서 필드, 소트, 이벤트, write 카탈로그 데이터를 선언한다.
slis_t_fieldcat_alv를 더블클릭하면 slis type-pool로 들어가는데.. 그곳에 type이 모두 정의되어 있다.. 백문이불여일견

PERFORM build_sortcat.
PERFORM build_eventcat.

fieldcat과 wirte는 그냥 프로그램에 써주었고 나머지는 인클루드시켜 perform으로 가져왔다.

DATA : BEGIN OF itab OCCURS 0,
carrid LIKE spfli-carrid,
connid LIKE spfli-connid,
fldate LIKE sflight-fldate,
cityfrom LIKE spfli-cityfrom,
cityto LIKE spfli-cityto,
planetype LIKE sflight-planetype,
END OF itab.

SELECT a~carrid a~connid a~fldate a~planetype b~cityfrom
INTO CORRESPONDING FIELDS OF TABLE itab
FROM sflight AS a
INNER JOIN spfli AS b ON a~carrid EQ b~carrid
WHERE a~carrid EQ 'LH'
AND a~planetype EQ 'A319'.

*LOOP AT itab.
* WRITE :/ itab-carrid,
* itab-connid,
* itab-fldate,
* itab-cityfrom,
* itab-cityto,
* itab-planetype.
*ENDLOOP.

*build field catalog

DATA : col_pos TYPE i.
*CLEAR : itab, itab[].


ADD 1 TO col_pos. "필드포지션 COL_POS에 + 1 1번
fieldcat_ln-fieldname = 'CARRID'. "반드시대문자
fieldcat_ln-reptext_ddic = '항공사번호'.
fieldcat_ln-col_pos = col_pos."조회하면 첫번채
fieldcat_ln-key = 'x'. "결과화면에서 화살표를 클릭해도 요 필드는 고정되어 있다.
fieldcat_ln-emphasize = 'C500'. "필드에 색깔주기
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.

ADD 1 TO col_pos. " COL_POS = COL_POS + 1
fieldcat_ln-fieldname = 'CONNID'.
fieldcat_ln-reptext_ddic = '항공기번호'.
fieldcat_ln-col_pos = col_pos."조회하면 두번째필드
fieldcat_ln-key = 'x'.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.

ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'FLDATE'.
fieldcat_ln-reptext_ddic = '비행날짜'.
fieldcat_ln-col_pos = col_pos."조회하면 세번채
fieldcat_ln-key = ''.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.

ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'PLANETYPE'.
fieldcat_ln-reptext_ddic = '항공사'.
fieldcat_ln-col_pos = col_pos."조회하면 네번채
fieldcat_ln-key = ''.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.

ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'CITYFROM'.
fieldcat_ln-reptext_ddic = '도착도시'.
fieldcat_ln-col_pos = col_pos."조회하면 다번번
fieldcat_ln-key = 'X'.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.


필드카테고리부분의 작성이다. col_pos를 이용해 1씩증가하게하여 각 필드의 위치를 잡는다.
속성들은 파악하지 못했다..
APPEND를 꼭 해주어야 한다. fieldcat_ln의 헤더라인에 있는 데이터를 fieldcat이라는 인터널테이블로 반드시 넣어주어야 한다.

*Build Layout
ls_layout-colwidth_optimize = 'X'.
무슨말인지 모르겠다.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_callback_program = pgm
I_callback_user_command = 'USER_COMMAND'
is_layout = ls_layout
it_fieldcat = fieldcat
it_sort = sortcat
it_events = eventcat
I_SAVE = 'A'
TABLES
t_outtab = itab
EXCEPTIONS
program_error = 1
OTHERS = 2.


REUSE_ALV_GRID_DISPLAY를 call하면 익스포팅과 임포팅부분에 많은 변수들이 세팅되는데 필요한것만 골라 쓰면된다.

기본적인것들 ls_layout, fieldcat, sortcat, eventcat 등 그리고 테이블은 itab..


출처 :http://anyframe.tistory.com/83

저작자표시 비영리 (새창열림)
블로그 이미지

파란실버라이트

To remember the time when I started learning Silver Light!

,

SAP MEMORY & ABAP MEMORY

ERP/SAP/R/3 2011. 7. 19. 09:49

저작자표시 비영리 (새창열림)
블로그 이미지

파란실버라이트

To remember the time when I started learning Silver Light!

,

FIELD-SYMBOL 설명과 사용예

ERP/SAP/R/3 2011. 7. 19. 09:32

필드심볼 이야기(http://erp.sarang.net)
작성자 : 한상열

1. 개요

필드심볼 모르면 생노가다!
알면 초간단!


2. 상황 발생

각 계정별로 원하는 기간(월별) 동안의 총 Recivable과
Payable 금액을 보여주는 레포트를 짜고 싶습니다.

테이블을 찾았더니 GLT0 이군요. 첨에는 테이블이 예쁘
게 생겼다고 생각했습니다. 야~ 이거 월별 금액이 각각
의 월필드에 들어가있으니 무지 좋구만~

허걱!

근데 어떻게 각 필드별로 합을 구하쥐?
사용자가 어떤 기간을 줄지 알고?


3. 해결책

멋있는 멍님의 글을 참고해봅시다.


-----------------------------------------------------------------------------------
이 테이블을 자세히 살펴보면...

...
...
HSL01
HSL02
HSL03
HSL04
HSL05
HSL06
HSL07
HSL08
HSL09
HSL10
HSL11
HSL12
HSL13
HSL14
HSL15
HSL16
...
...

이런식으로 필드가 존재합니다...

이 때, 위에서 나열한 필드의 뒤 두 자리가 월을 나타낸다고 했을 때,
현재월까지의 합을 구하는 레포트를 구현한다고 가정을 해봅시다...

만약 Field-Symbol을 사용하지 않을 경우...
지금이 10월이니깐 로직이 이렇게 되겠죠...

변수 = GLT0-HSL01 + GLT0-HSL02 + ......... + GLT0-HSL10. (헥헥~~)

그렇다면 11월일때는 어떡할 것인가 ???
5월일때는 ? 12월일때는 ???
이거 완전한 노가다 입니다...

이때, 우리의 Field-Symbol이 등장합니다... 짜잔~~~

가볍게 코딩을 합니다...


...
FIELD-SYMBOLS <FIELD>.

DATA : CN(2) TYPE N,
FNAME(10),
SUM LIKE GLT0-HSL01.
...
...

DO CN TIMES. "여기서 CN이라는 변수는 해당 월
CC = SY-INDEX.
CONCATENATE 'GLT0-HSL' CC INTO FNAME.
ASSIGN (FNAME) TO <FIELD>.
SUM = SUM + <FIELD>.
CLEAR : FNAME, <FIELD>.
ENDDO.
...
...



이렇게 하면 위에서 했던 노가다를 간단히 몇 줄의 문장으로 기술할 수 있는 것이죠...

<FIELD>라는 FIELD-SYMBOL에는 GTL0-HSL01의 값부터 시작해서...
GTL0-HSL10의 값까지 차례로 들어가면서 더해지게 되는 것이죠...

그리고 보너스로...

이런 구문도 존재한답니다...



...
...
DO.
...
ASSIGN COMPONENT SY-INDEX OF STRUCTURE CUSTOMER TO .
...
ENDDO.



이때, 가령 CUSTOMER라는 INERNAL TABLE이 다음과 같은 필드를 가지는
구조를 참조한다고 할 때...
(KUNNR, ANRED, NAME1, PFACH, STRAS, PSTLZ, ORT01, TELF1, TELFX)

DO... ENDDO... 문장 내에서 필드의 수만큼 LOOP을 돌게 되는거죠...

즉, 하나씩 디버깅을 해보면, 첫번째 루프를 돌때는, <FIELD>에 CUSTOMER-KUNNR의 값이...
그 다음 루프를 돌때는, <FIELD>에 CUSTOMER-ANRED의 값이...
세번째 루프를 돌때는, <FIELD>에 CUSTOMER-NAME1의 값이 들어갑니다...
-----------------------------------------------------------------------------------





4. 결론

노가다 많이 줄였습니다.

**************************************************************************

FIELD만 바뀌고 규칙적인 작업을 할때 각각을 프로그램 LOGIC으로 구성하려면
단순 CODING으로 쓸 데없이 LINE만 길어 질 수 있다.
이때 FIELD-SYMBOL을 사용하면 간단히 해결되면서 프로그램을 분석하기도 한결 수월해 진다.

우선 FIELD-SYMBOL 의 여러가지 변형을 살펴보면

1. ASSIGN f TO <fs>.
단순히 field f의 값을 <fs>가 가리키도록 한다.

2. ASSIGN (f) TO <fs>.
동적 field를 이용한것인데 field f안의 값을 또 field명으로 보고 그 field의 값
을 <fs>가 가리키도록 한다.

3. ASSIGN TABLE FIELD (f) TO <fs>.
2와 같은 경우이나 f 의 값이 table의 field명 일때 그 table field의 값을
<fs>가 가리키도록 한다.

4. ASSIGN LOCAL COPY OF MAIN TABLE FIELD (f) TO <fs>.
3와 같은 경우이나 tables로 선언된 main program의 table field값을
<fs>가 가리키는 것이 아니라 값만 복사 하여 사용하기 때문에 변경할 수 없다.

5. ASSIGN COMPONENT idx OF STRUCTURE rec TO <fs>.
structure의 구성요소 순서를 idx에서 읽어 그 순서에 위치한 구성요소의 값을
<fs>에 할당한다.

6. ASSIGN COMPONENT name OF STRUCTURE rec TO <fs>.
structure의 구성요소명(field명)을 name에서 읽어 그 구성요소의 값을
<fs>에 할당한다.

5번을 제외한 모든 경우는 field명을 사용하는 것이라서 field명에 규칙이 없으면
coding line 줄이는데 효과를 보지 못한다.
따라서 여기서는 field명에 규칙이 없더라도 coding line을 획기 적으로 줄일 수 있는
5번경우를 사용한 예제만 소개하겠다.

예제)

FIELD-SYMBOLS : <FS1>, <FS2>.
DATA:IDX1 LIKE SY-INDEX.

DATA: BEGIN OF ITAB1 OCCURS 0,
CCYYMM(8),
WERKS LIKE MARD-WERKS,
MATNR LIKE MARD-MATNR,
LABST LIKE MARD-LABST,
UMLME LIKE MARD-UMLME,
INSME LIKE MARD-INSME,
EINME LIKE MARD-EINME,
SPEME LIKE MARD-SPEME,
RETME LIKE MARD-RETME,
VMLAB LIKE MARD-VMLAB,
VMUML LIKE MARD-VMUML,
VMINS LIKE MARD-VMINS,
VMEIN LIKE MARD-VMEIN,
VMSPE LIKE MARD-VMSPE,
VMRET LIKE MARD-VMRET,
END OF ITAB1.

DATA: ITAB2 LIKE ITAB1 OCCURS 0 WITH HEADER LINE.


경우1) FIELD-SYMBOL 사용하지 않았을 경우

LOOP AT ITAB1.
READ TABLE ITAB2 WITH KEY CCYYMM = ITAB1-PERIOD
WERKS = ITAB1-WERKS
MATNR = ITAB1-MATNR
BINARY SEARCH.

IF SY-SUBRC <> 0.
WRITE : / 'Not found in ITAB2 : ',
ITAB1-CCYYMM,
ITAB1-WERKS,
ITAB1-MATNR.
ELSE.
IF ITAB1-LABST <> ITAB2-LABST.
WRITE : / SY-INDEX,
ITAB2-CCYYMM,
ITAB2-WERKS,
ITAB2-MATNR,
ITAB1-LABST,
ITAB2-LABST.
ENDIF.

IF ITAB1-UMLME <> ITAB2-UMLME.
WRITE : / SY-INDEX,
ITAB2-CCYYMM,
ITAB2-WERKS,
ITAB2-MATNR,
ITAB1-UMLME,
ITAB2-UMLME.
ENDIF.


.............. 12번 반복 ........


ENDIF.
ENDLOOP.

경우2) FIELD-SYMBOL 사용했을 경우

LOOP AT ITAB1.
READ TABLE ITAB2 WITH KEY CCYYMM = ITAB1-PERIOD
WERKS = ITAB1-WERKS
MATNR = ITAB1-MATNR
BINARY SEARCH.

IF SY-SUBRC <> 0.
WRITE : / 'Not found in ITAB2 : ',
ITAB1-CCYYMM,
ITAB1-WERKS,
ITAB1-MATNR.
ELSE.

IDX1 = 3.

DO 12 TIMES.
IDX1 = IDX1 + 1.
ASSIGN COMPONENT IDX1 OF STRUCTURE ITAB1 TO <FS1>.
ASSIGN COMPONENT IDX1 OF STRUCTURE ITAB2 TO <FS2>.

IF <FS1> <> <FS2>.
WRITE : / SY-INDEX,
ITAB2-CCYYMM,
ITAB2-WERKS,
ITAB2-MATNR,
<FS1>,
<FS2>.
ENDIF.
ENDDO.
ENDIF.
ENDLOOP.

필드심볼을 이용하면 보통사용하는 테이블의 모양을 간단하게 바꿀 수 있다.

<기존에 사용하는 테이블>

연월 수량 금액 단가
200501 120 3500 23400
200502 3000 2300 3600
200503 500 1000 530
200504 300 28 400

<원하는 테이블>

  200501 200502 200503 200504
수량 120 3000 500 300
단가 3500 2300 1000 28
금액 23400 3600 530 400

우리가 원하는것은 해당연월에 수량, 단가, 금액이다.

field symbol을 이용해서 직접 확인해보자.

REPORT ZPPRTESTYW .
DATA: BEGIN OF S,
A VALUE '1', B VALUE '2', C VALUE '3', D VALUE '4',
E VALUE '5', F VALUE '6', G VALUE '7', H VALUE '8',
END OF S.

DATA OFF TYPE I.

FIELD-SYMBOLS <FS>.

ASSIGN S-A TO <FS>.

DO 4 TIMES.
OFF = SY-INDEX - 1.
ASSIGN <FS>+OFF(1) TO <FS>.
WRITE <FS>.
ENDDO.

==> 결과 1,2,4,7

<field symbol을 이용하여 데이터 뿌리기>

fname에 필드명을 count 와 조합하여 만든후 bufs로 assign한다.

LOOP AT it_sum3.
MOVE it_sum3-buname TO it_result-zrsbu.

DO 4 TIMES.

in = it_sum3-lfmon.
cn = cn + 1.
CONCATENATE 'it_result-zrs' in cn INTO fname.
ASSIGN (fname) TO <bufs>.

CASE cn.
WHEN 1.
<bufs> = it_sum3-abssu.
WHEN 2.
<bufs> = it_sum3-sucor.
WHEN 3.
<bufs> = it_sum3-abspr / rd_int.
WHEN 4.
<bufs> = it_sum3-prcor.
ENDCASE.
CLEAR : fname.
ENDDO.
COLLECT it_result.
CLEAR : it_result,it_sum3, cn, in.
ENDLOOP.

[출처] FIELD-SYMBOL 사용예|작성자 미래

저작자표시 비영리 (새창열림)
블로그 이미지

파란실버라이트

To remember the time when I started learning Silver Light!

,

String 함수

ERP/SAP/R/3 2011. 7. 19. 09:31

출처 : http://abap.wo.to/

1. String의 길이구하기
i = STRLEN( string )

2. CONCATENATE F1 F2 F3 INTO G.
- F1, F2, F3을 G에 넣는다.
- SEPARATED BY <string>
FI, F2, F3사이에 <string>을 넣는다.
ex) DATA: FIRST(2) VALUE 'BAE',
SECOND(2) VALUE 'BYUNG',
THIRD(2) VALUE 'SUNG',
NAME(20).
CONCATENATE FIRST SECOND THIRD INTO NAME SEPARATED BY SPACE.
결과 => 'BAE BYUNG SUNG'

3. SPLIT G AT <string> INTO F1 F2 F3.
- G의 내용을 <string>으로 구분하여 F1, F2, F3에 나누어 넣는다.
ex) DATA: NAME(20) VALUE ',BAE,BYUNG,SUNG',
FIRST(2),
SECOND(2),
THIRD(2),
FORTH(2),
FIFTH(2).
SPLIT NAME AT ',' INTO FIRST SECOND THIRD FORTH FIFTH.
결과 => FIRST = SPACE
SECOND = 'BAE'
THIRD = 'BYUNG'
FORTH = 'SUNG'
FIFTH = SPACE

4. SHIFT
- 변수에 들어있는 값을 이동한다. 모든 field를 type C로 간주하여 처리하기 때문에 type C, N, D외에는 사용할 때 주의하여야 한다.
- Option : CIRCULAR - 잘려나간 문자를 맨뒤에 놓는다.
RIGHT - 오른쪽으로 1칸 이동한다.
- 좌측으로 1칸 이동한다.
- SHIFT 문은 PERFORMANCE를 많이 요구하기 때문에 LOOP안에서는 사용을 하지 않는 것이 좋다.(1개의 문자를 이동하는데 5Microseconds 소요)

4-1. SHIFT c.
ex) DATA: FIRST(10) VALUE 'ABCEDFGHIJ'.
SHIFT FIRST.
결과 : FIRST = 'BCDEFGHIJ '.

4-2. SHIFT c BY n PLACES.
- 변수 c를 자리만큼 좌측으로 이동한다. 만일 c의 length보다 n이 크면 c에는
blank가 들어간다.

4-3. SHIFT c UP TO c1.
- 변수 c의 내부에 c1이라는 string을 만날 때까지 좌측으로 이동한다.
- c1이 없으면 아무변화도 일어나지 않는다.
- 이때 return value SY-SUBRC는 -4이다.

4-4. SHIFT c LEFT DELETING LEADING c1.
SHIFT c RIGHT DELETING TRAILING c1.
- string c의 첫 번째 혹은 마지막 character가 string c1에 포함되어 있다면
해당 character를 삭제하면서 이동한다.
- 첫 번째 혹은 마지막 character가 중복되어 있다면 다른 character가 나올 때
까지 이동한다.
- 같은 글자가 없다면 아무런 변화도 일어나지 않는다.

5. CONDENSE <string>.
- string 내부 단어사이의 blank를 1개씩만 남기고 없앤다.
- Option : NO-GAPS - 모든 blank를 없앤다.
- type C를 제외한 다른 field를 포함한 field string을 변환시키지 말 것. 이
상한 값이 들어갈 수 있다.

6. TRANSLATE c TO UPPER CASE.
TRANSLATE c TO LOWER CASE.
- 대소문자를 변환하는데 쓰인다.
- 10byte이상의 긴 field를 변환하는 것은 performance에 좋지 않다.

7. OVERLAY c1 WITH c2.
- c1의 character 중 blank의 자리에 c2의 character가 있다면 blank의 위치에
있는 c2의 character를 넣는다.
ex) DATA: WORK(20) VALUE 'BA B UNG-SU G',
HELP(20) VALUE ' E AYY - NNI'.
OVERLAY WORK WITH HELP.

결과 : WORK = 'BAE BYUNG-SUNG'.

- Performance에 좋지 않기 때문에 많이 쓰지 않는 것이 좋다.

8. REPLACE c1 WITH c2 INTO c3.
- string c3에 있는 c1이라는 string을 c2로 변환시킨다.

9. SEARCH
9-1. SEARCH c1 FOR c2.
- c1에서 c2라는 string을 찾는다.
- c1의 단어사이는 blanck로 구분한다.
- c2에는 '_' , '*'를 포함하여 사용할 수 있다.
- SY-SUBRC = 0 일 때 SY-EDPOS에 찾은 단어의 위치정보가 들어 있다.

9-2. SEARCH itab FOR c2.
- itab이라는 internal table에서 c2라는 string을 찾는다.
- 나머지는 위와 상동
- SY-SYBRC = 0 일 때 SY-TABIX에는 internal table의 line number가 SY-EDPOS에는 위치정보가 들어 있다.

[출처] [본문스크랩] SAP 에서 CBO 개발시 필요한 각종 String 관련 연산 명..|작성자 미래

저작자표시 비영리 (새창열림)
블로그 이미지

파란실버라이트

To remember the time when I started learning Silver Light!

,
  • «
  • 1
  • 2
  • 3
  • 4
  • ···
  • 6
  • »

카테고리

  • Inforamtion Technology (281)
    • DESIGN PATTERN (33)
      • 실용주의 디자인패턴 (29)
    • SOFTWARE ENGINEERING (21)
      • Art Of Readable Code (12)
      • Object Oriented Programming (6)
      • TDD (2)
    • FRAMEWORK (22)
      • Spring.net (2)
      • LightSwitch (20)
    • PROGRAMING (58)
      • C# (20)
      • .NET (6)
      • HTML5 (7)
      • ASP.NET (9)
      • SILVERLIGHT (7)
      • Ruby On Rails (6)
    • PROJECT MANAGEMENT (10)
      • SW Version Management (7)
      • Schedulring Management (1)
    • BOOKS (18)
    • MOBILE APP (1)
      • SENCHA TOUCH (1)
    • SECURITY (5)
    • MES (1)
    • B2B (14)
      • WEBMETHODS (4)
    • ERP (53)
      • SAP/R/3 (51)
    • ABOUT TOOLS (2)
    • FUNDAMENT CONCEPT (21)
    • SOA BPM (22)
    • PORTFOLIO (0)

태그목록

  • 동시성
  • 프로그래밍
  • 병렬

최근에 받은 트랙백

글 보관함

링크

파란실버라이트

블로그 이미지

To remember the time when I started learning Silver Light!

LATEST FROM OUR BLOG

RSS 구독하기

LATEST COMMENTS

BLOG VISITORS

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015 Socialdev. All Rights Reserved.

티스토리툴바