메뉴 건너뛰기

SAP 한국 커뮤니티

[re] <img src=2.gif> FIELD-SYMBOLS 관련 질문입니다.

요요 2009.11.14 00:24 조회 수 : 1744

>안녕 하세요 마늘맛 쿨피스 입니다 . 요금 e-abap.net에서 많은 정보, 문제 해결을 받고 있어서 모든 분께 감사 드림니다.


>필드 심볼을 써서 엄청 긴 소스를 줄일려고 하는데 자꾸 에러가 나서 그런데 좋은 해결 방법이 없을까요 ??


>그래서 질문 드립니다. 이거 해결되면 1000라인 이상 줄일수 있을거 같아서 질문 드립니다.



>Field symbol has not yet been assigned. 이런 에러가 나오네요 ㅠㅜ




>다시 수정 햇는데 안돌아 가네요 .


>   >

>FORM INPUT USING    p_seq.

  gt_seq-seq = p_seq.

ENDFORM.


>  >

>FORM AUTO.

  FIELD-SYMBOLS :  TYPE ANY.
  FIELD-SYMBOLS :  TYPE ANY.
  FIELD-SYMBOLS :  TYPE ANY.

  DEFINE DIVIDE_MAC.

   if &1 = 0. &3 = 0.

  else.
   &3 = ( &2 / &1 - 1 ) * 100.
  endif.

  end-of-definition.

  DATA : A_CAL(3),
*             B_CAL(3),
*             C_CAL(3),
             D_CAL(30),
             E_CAL(30),
             F_CAL(30).

  DATA : Z_DATE LIKE P_DATE." LIKE P_DATE.

  Z_DATE = P_DATE+4(2).

  DO 24 TIMES.
   PERFORM INPUT USING : '10''11''12''13''20''21''22','30',
   '31''32''33''34''35''36''37''38',
   '40''41''42',  '43' ,'44','50''51''52'  .

   A_CAL = A_CAL + 1.
   CONCATENATE `gs_amt_profit-amt_`  A_CAL INTO D_CAL.
   CONCATENATE `gs_amt_fix12-amt_` Z_DATE INTO E_CAL.
   CONCATENATE `gs_amt_fix-amt_` gt_seq-seq INTO F_CAL.

  ASSIGN (A_CAL) TO .
  ASSIGN (E_CAL) TO .
  ASSIGN (F_CAL) TO .

IF SY-SUBRC = 0.
   = (  +  - 1 ) * 100.
  "DIVIDE_MAC :   .
ELSE.
  CLEAR : .
ENDIF.
ENDDO.
"ENDCATCH.
ENDFORM.



>***********************************************************************************************8


>--수정전"""


> >

>FORM AUTO.

  FIELD-SYMBOLS :  TYPE C .
  DATA : A_CAL(100),
             B_CAL(100),
             C_CAL(100),
             D_CAL(100),
             E_CAL(1000).

  DATA : Z_DATE(100)." LIKE P_DATE.

  Z_DATE = P_DATE+4(2).

  CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 4  OTHERS = 8.

DO 24 TIMES.

"FREE . CLEAR : Z_dATE, gt_seq-seq, D_CAL.

 PERFORM INPUT USING : '10''11''12''13''20''21''22','30',
 '31''32''33''34''35''36''37''38','40''41''42',  '43'
 ,'44','50''51''52'  .

CONCATENATE 'gs_amt_fix' P_DATE+4(2`-amt_` gt_seq-seq
`  / gs_amt_fix-amt_`   gt_seq-seq `- 1 ) * 100 .`  INTO D_CAL.
*      CONCATENATE : 'gs_amt_fix' Z_DATE  INTO A_CAL.
*      CONCATENATE :  A_CAL `-amt_` INTO  B_CAL.
*      CONCATENATE :  B_CAL `  / gs_amt_fix-amt_` INTO C_CAL.
*      CONCATENATE :  C_CAL gt_seq-seq INTO D_CAL.
*      CONCATENATE :  E_CAL `- 1 ) * 100 .`  INTO E_CAL.

  IF sy-subrc = 0.
     ASSIGN (D_CAL) TO  CASTING.
       gs_amt_profit-amt_1  =   .
       "FREE . CLEAR : Z_dATE, gt_seq-seq, D_CAL.
       gs_amt_profit-amt_2 = .
       gs_amt_profit-amt_3 = .
       gs_amt_profit-amt_4 = .
       gs_amt_profit-amt_5 = .
       gs_amt_profit-amt_6 = .
       gs_amt_profit-amt_7 = .
       gs_amt_profit-amt_8 = .
       gs_amt_profit-amt_9 = .
       gs_amt_profit-amt_10 = .
       gs_amt_profit-amt_11 = .
       gs_amt_profit-amt_12 = .
       gs_amt_profit-amt_13 = .
       gs_amt_profit-amt_14 = .
       gs_amt_profit-amt_15 = .
       gs_amt_profit-amt_16 = .
       gs_amt_profit-amt_17 = .
       gs_amt_profit-amt_18 = .
       gs_amt_profit-amt_19 = .
       gs_amt_profit-amt_20 = .
       gs_amt_profit-amt_21 = .
       gs_amt_profit-amt_22 = .
       gs_amt_profit-amt_23 = .
       gs_amt_profit-amt_24 = .
  ELSE
    FREE CLEAR : Z_dATE, gt_seq-seq, D_CAL.
    PERFORM AUTO.
  ENDIF.


ENDDO.
ENDCATCH.


 


perform input 의 매개변수가 필드라는 가정하에 서로다른 3개에


같은 필드이름으로 계산이 될 거라는 자의적 해석에 의하여 필드는 24개까지만


설정하고 만들어봤습니다.


도움이 되시길 바랍니다.


 


DATA : BEGIN OF GS_AMT,
          AMT_1  TYPE P DECIMALS 2 VALUE 100,
          AMT_2  TYPE P DECIMALS 2 VALUE 100,
          AMT_3  TYPE P DECIMALS 2 VALUE 100,
          AMT_4  TYPE P DECIMALS 2 VALUE 100,
          AMT_5  TYPE P DECIMALS 2 VALUE 100,
          AMT_6  TYPE P DECIMALS 2 VALUE 100,
          AMT_7  TYPE P DECIMALS 2 VALUE 100,
          AMT_8  TYPE P DECIMALS 2 VALUE 100,
          AMT_9  TYPE P DECIMALS 2 VALUE 100,
          AMT_10 TYPE P DECIMALS 2 VALUE 100,
          AMT_11 TYPE P DECIMALS 2 VALUE 100,
          AMT_12 TYPE P DECIMALS 2 VALUE 100,
          AMT_13 TYPE P DECIMALS 2 VALUE 100,
          AMT_14 TYPE P DECIMALS 2 VALUE 100,
          AMT_15 TYPE P DECIMALS 2 VALUE 100,
          AMT_16 TYPE P DECIMALS 2 VALUE 100,
          AMT_17 TYPE P DECIMALS 2 VALUE 100,
          AMT_18 TYPE P DECIMALS 2 VALUE 100,
          AMT_19 TYPE P DECIMALS 2 VALUE 100,
          AMT_20 TYPE P DECIMALS 2 VALUE 100,
          AMT_21 TYPE P DECIMALS 2 VALUE 100,
          AMT_22 TYPE P DECIMALS 2 VALUE 100,
          AMT_23 TYPE P DECIMALS 2 VALUE 100,
          AMT_24 TYPE P DECIMALS 2 VALUE 100,
       END   OF GS_AMT,
       GS_AMT_PROFIT LIKE GS_AMT,
       GS_AMT_FIX12  LIKE GS_AMT,
       GS_AMT_FIX    LIKE GS_AMT.


DATA : BEGIN OF GT_SEQ,
         SEQ TYPE C LENGTH 5,
       END   OF GT_SEQ.


DATA : A_CAL   TYPE I,
       A_CAL_C TYPE C LENGTH 3,
       FNAME   TYPE FNAME.


* make data ( temp ) - gs_amt_fix 생성.
DATA L_SEQ TYPE N LENGTH 2.
FIELD-SYMBOLS <FS_TEMP> TYPE ANY.
MOVE-CORRESPONDING GS_AMT TO : GS_AMT_FIX, GS_AMT_FIX12.
DO 24 TIMES.
  ADD 1 TO L_SEQ.
  ASSIGN COMPONENT SY-INDEX OF STRUCTURE GS_AMT_FIX TO <FS_TEMP>.
  IF SY-SUBRC IS INITIAL.
    ADD L_SEQ TO <FS_TEMP>.
  ENDIF.
ENDDO.


PERFORM INPUT USING : '10', '11', '12', '13', '20', '21', '22'.


*&---------------------------------------------------------------------*
*&      Form  INPUT
*&---------------------------------------------------------------------*
FORM INPUT USING    P_SEQ.  " 필드 위치라고 가정


  DATA L_FNAME TYPE LVC_FNAME.
  DATA L_DATE  TYPE D.


  FIELD-SYMBOLS : <LFS_PROFIT> TYPE ANY,  " 이익~
                  <LFS_MM_AMT> TYPE ANY,  " 월별
                  <LFS_AMOUNT> TYPE ANY.  " 총


* seq 번호에 해당하는 필드를 기준으로 아래 계산식으로 계산한다고 가정
  L_DATE = '20091201'.  " 설정된 구조가 12월밖에 없음(임시)


  UNASSIGN : <LFS_PROFIT>, <LFS_MM_AMT>, <LFS_AMOUNT>.


  " Assign(GS_AMT_PROFIT) => Profit field
  CONCATENATE `AMT_`  P_SEQ INTO L_FNAME.
  ASSIGN COMPONENT L_FNAME
      OF STRUCTURE GS_AMT_PROFIT
         TO <LFS_PROFIT>.


  " Assign(GS_AMT_FIX) => amount field
  ASSIGN COMPONENT L_FNAME
      OF STRUCTURE GS_AMT_FIX
         TO <LFS_AMOUNT>.


  WRITE :/ L_FNAME.


  " Assign(GS_AMT_FIXnn) => 월별 구조의 필드
  CONCATENATE `GS_AMT_FIX` L_DATE+4(2) `-AMT_` P_SEQ INTO L_FNAME.
  ASSIGN (L_FNAME) TO <LFS_MM_AMT>.


  CATCH SYSTEM-EXCEPTIONS COMPUTE_INT_ZERODIVIDE = 1
                          BCD_OVERFLOW           = 2
                          ARITHMETIC_ERRORS      = 4
                          OTHERS                 = 8.
* 예) 식 : gs_amt_profit-amt_1 = ( gs_amt_fix12-amt_1 / gs_amt_fix-amt_1 ) * 100
    <LFS_PROFIT> = ( <LFS_MM_AMT> / <LFS_AMOUNT> ) * 100.
  ENDCATCH.
  IF SY-SUBRC IS NOT INITIAL.
    CASE SY-SUBRC.
      WHEN 1.   MESSAGE E208(00) WITH 'Divide 0 ... !!'.
      WHEN 2.   MESSAGE E208(00) WITH 'Overflow ... !!'.
      WHEN 4.   MESSAGE E208(00) WITH 'Arithmetic error'.
      WHEN 8.   MESSAGE E208(00) WITH 'Error( etc... !!)'.
    ENDCASE.
  ENDIF.


  WRITE :  'Result :', <LFS_PROFIT>, '=',
           '(', <LFS_MM_AMT>, '/', <LFS_AMOUNT>, ') * 100'.


ENDFORM.                    "INPUT

번호 제목 글쓴이 날짜 조회 수
» [re] <img src=2.gif> FIELD-SYMBOLS 관련 질문입니다. [1] 요요 2009.11.14 1744
4198 <img src=3.gif>write문으로 이루어진 list를 pdf파일로 저장하는 부분의 궁금증 [5] file 튀밥 2009.11.13 1855
4197 <img src=3.gif>엑셀 다운로드시 숫자가 2.00911E+12나오는데 방법이 없을까요? [6] 귤탱 2009.11.13 6014
4196 <img src=3.gif>ALV에서 F4 구현시 도메인의 Range값 가져오는 법? [2] 부산갈매기 2009.11.13 2156
4195 <img src=2.gif>ws_download을써서 header가 나오게 하고싶습니다. [2] CoolGuy 2009.11.13 1080
4194 <img src=1.gif>Intertable의 데이터를 cvs파일로 다운로드 CoolGuy 2009.11.12 1218
4193 <img src=2.gif>[질문수정]사용자의 SAP GUI 버전 정보 시스템 변수 또는 펑션이 있나요? [3] 도마슈노 2009.11.12 1244
4192 <img src=2.gif>Grid에서 0.000000 을 0으로 보이게... [3] CoolGuy 2009.11.12 1268
4191 <img src=3.gif>SAP GUI 710 설치 후 스크린페인터 오류 [6] 부산갈매기 2009.11.12 2829
4190 <img src=3.gif>SUBMIT 관련 해서 질문 입니다. ^^ [4] rainbow1 2009.11.12 1661
4189 <img src=3.gif>OPEN SQL에 대해 질문드립니다~ ^^; [6] 이카루스 2009.11.12 1557
4188 <img src=2.gif> SET LANGUAGE 질문입니다 ㅠㅜ [7] 아밥콩` 2009.11.12 2487
4187 <img src=1.gif>SALV HIERSEQ에서 필드 구분자 넣는 방법.. 은미짱 2009.11.12 1690
4186 <img src=3.gif>SALV HIERSEQ에서 컬럼 OUTPUT LENGTH 설정.. [3] 은미짱 2009.11.11 1387
4185 <img src=2.gif>혹시 as/400 db데이터를 sap으로 가지고 오는 방법 아시는분 계신가요 [2] 처서련 2009.11.11 1058
4184 <img src=2.gif>프로그램 실행시 'CNDP' 덤프가 나는데 이유를 잘 모르겠습니다 원인과 해결책을 부탁드립니다. [2] file rune 2009.11.10 2346
4183 <img src=3.gif>0을 값으로 나눌때 생기는 에러 해결 어떻게 해야 하나요 ??? [8] 마늘맛쿨피스 2009.11.10 1728
4182 <img src=2.gif>[T-CODE]T-CODE의 변경일 생성일을 알수 있는 테이블이 어케 되나요? [2] 드라곤 2009.11.10 1329
4181 <img src=2.gif>[User-exit] BOM ( check bom data before saving ) [3] 찬호사랑 2009.11.10 2308
4180 <img src=2.gif>bom/routing BAPI 질문드립니다. [4] 신수도 2009.11.10 1774