메뉴 건너뛰기

SAP 한국 커뮤니티

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

요요 2009.11.14 00:24 조회 수 : 1751

>안녕 하세요 마늘맛 쿨피스 입니다 . 요금 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

번호 제목 글쓴이 날짜 조회 수
4227 <img src=1.gif>SALV HIERSEQ사용중 같은 필드 화면에 여러번 표시 은미짱 2009.11.25 1738
4226 <img src=3.gif>sap 서버 ip 가져오는 방법 알려주세요^^ [4] Norton 2009.11.24 1641
4225 <img src=3.gif>SELECTION-SCREEN default 값 관련.. [2] 초밥 2009.11.24 2081
4224 <img src=2.gif>write 프로그램에서 Print 버튼 없애기 [3] 낭랑18세 2009.11.24 1174
4223 <img src=3.gif>BDC FI 전표 생성시 Profit. Segment ? [2] 버미! 2009.11.23 1569
4222 <img src=2.gif>alv 에서 특정 셀의 색상 변경시 refresh 여부... [4] 쭌수야~! 2009.11.23 2556
4221 <img src=2.gif>CDPOS 테이블 Objectclass 관련된 질문입니다. [1] 도움이 2009.11.22 1180
4220 <img src=2.gif>variant 보다 먼저 읽히는 필수값 체크 문제입니다. [2] file 참참참 2009.11.21 1299
4219 <img src=2.gif>alv 레포트에서 글자크기 및 alv row 상하 넓이 조절 가능한가요... [3] eskang 2009.11.21 2256
4218 <img src=3.gif>[alv event hotspot_click r_row c_col를 받아서 처리후 alv refresh방법문의합니다. [1] eskang 2009.11.21 1754
4217 <img src=2.gif>Routing 수정 BAPI 혹시 있나요? [4] 신수도 2009.11.20 1660
4216 <img src=1.gif>'FWZZ' 에서 BDC 생성시 오류가 나서 수정이 되질않습니다. [1] file Cruel 2009.11.20 2163
4215 <img src=2.gif>OLE 를 이용해 엑셀 매크로 연동 후 PDF 변환 하는 방법 [1] 낭랑18세 2009.11.20 2226
4214 <img src=2.gif>ALV 에서 컬럼헤딩 텍스트 길이가 50 정도 되는데, 잘려서 나오네요. 방법이 없나요? [1] 푸른창공 2009.11.20 1243
4213 <img src=3.gif>sap 6.0 에서 debugging 질문입니다. [5] 십년만에 2009.11.19 1379
4212 <img src=3.gif>금액 절사방법에 대해 질문드립니다. [6] 해바라기 2009.11.19 5027
4211 <img src=3.gif>수(3,333)을 CHAR 타입로 받을때 소수점이 없어지지 않게 하는 방법 있나요? [3] sora 2009.11.19 1783
4210 <img src=2.gif>메일보내기(outlook) 방법 혹은 자료 부탁드립니다 [13] 츄리닝 2009.11.18 13416
4209 <img src=3.gif>Tab Control에서 alv내용중 checkbox를 여러개 사용해서 checkbox 클릭할때마다 변경하는 방법좀 알려주세요? [6] file eskang 2009.11.18 1237
4208 [re] <img src=2.gif>Tab Control에서 alv내용중 checkbox를 여러개 사용해서 checkbox 클릭할때마다 변경하는 방법좀 알려주세요? [4] 요요 2009.11.19 1932