2017-12-13 15 views
0

단순화하는 방법에 대한 아래의 코드에 대한 아이디어가 필요합니다. 아래의 코드는 훌륭하게 작동하지만 코드를 동적으로 만드는 코드를 향상 시키거나 단축 할 수있는 방법이 있습니까?동적 구조에 값 할당

TYPES: BEGIN OF lty_dates, 
      yesterday TYPE string, 
      today  TYPE string, 
      tomorrow TYPE string, 
      END OF lty_dates. 

    DATA: it_table TYPE TABLE OF lty_dates. 

    DO 3 TIMES. 
     CASE lv_count. 
     WHEN 1. 
      it_table[ 1 ]-zyesterday = 'Result Yesterday'. 
      it_table[ 2 ]-zyesterday = 'Result Yesterday'. 
      it_table[ 3 ]-zyesterday = 'Result Yesterday'. 

     WHEN 2. 
      it_table[ 1 ]-ztoday = 'Result Today'. 
      it_table[ 2 ]-ztoday = 'Result today'. 
      it_table[ 3 ]-ztoday = 'Result Today'. 

     WHEN 3. 
      it_table[ 1 ]-ztommorrow = 'Result Tomorrow'. 
      it_table[ 2 ]-ztommorrow = 'Result Tomorrow'. 
      it_table[ 3 ]-ztommorrow = 'Result Tomorrow'. 
     ENDCASE. 

     lv_count = lv_count + 1. 

    ENDDO. 

제 아이디어는 아래의 의사 코드와 같습니다. it_table의 필드가 100 개 (필드)에 도달하면 CASE를 여러 번 특수 수행하는 것을 원하지 않습니다.

DO 3 TIMES. 
     ASSIGN 'ZTODAY' TO <dynamic_fieldname>. 
     it_table[ 1 ]-<dynamic_fieldname> = <dynamic_result>. 
     it_table[ 2 ]-<dynamic_fieldname> = <dynamic_result>. 
     it_table[ 3 ]-<dynamic_fieldname> = <dynamic_result>. 
    ENDDO. 

제발 도와주세요.

+0

정확히 동적으로 만들고 싶습니까? – vwegert

+0

@vwegert 비슷한 매핑 1을 사용하여 row1에 대한 결과 (어제, 오늘, 내일)를 가져옵니다. 또 다른 mapping2는 row2에 대한 결과를 얻고, 다른 mapping3은 row3에 대한 결과를 얻습니다. 그래서 모든 행에 대해 결과를 얻기 위해 서로 다른 매핑을 갖지만 각 매핑은 어제, 오늘 및 내일의 행당 값을 가져 오는 데 적용 가능합니다. 내 생각에, 제공된 코드는 내 디자인을 만족하지 않는 어제 열, 오늘 열 및 내일 열에 대한 유사한 매핑을 가정합니다. ASSIGN COMPONENT 구문에 수행 할 작업이있을 수 있습니다. 나는 그것에 대해서도 놀아야한다. – Czarinaaaaa29

답변

1

잘 시도해 볼 수 있습니다. 나는 그것이 당신을 도울 것이라고 생각합니다.

YESTERDAY   TODAY   TOMORROW 
Result Yesterday Result Today Result Tomorrow 
Result Yesterday Result today Result Tomorrow 
Result Yesterday Result Today Result Tomorrow 

이 왜 이것에 대한 매크로를 사용하기 : 당신은 구조 실제로

TYPES: BEGIN OF lty_dates, 
     yesterday TYPE string, 
     today  TYPE string, 
     tomorrow TYPE string, 
     END OF lty_dates. 

TYPES: BEGIN OF lty_result , 
     fieldname TYPE fieldname, 
     result TYPE string, 
     END OF lty_result . 

FIELD-SYMBOLS <fs_data> TYPE any . 

DATA: lt_table TYPE TABLE OF lty_dates, 
     lt_result TYPE TABLE OF lty_result. 

lt_result = VALUE #((fieldname   = 'yesterday' 
         result = 'result_yesterdaty') 
         (fieldname = 'today' 
         result = 'result_today') 
         (fieldname = 'tomorrow' 
         result = 'result_tomorrow' 
        )). 

DO 3 TIMES . 
    APPEND INITIAL LINE TO lt_table . 
ENDDO . 

LOOP AT lt_table ASSIGNING FIELD-SYMBOL(<fs_table>) . 
    LOOP AT lt_result ASSIGNING FIELD-SYMBOL(<fs_result>) . 
    ASSIGN COMPONENT <fs_result>-fieldname OF STRUCTURE <fs_table> TO <fs_data> . 
    MOVE <fs_result>-result TO <fs_data> . 
    ENDLOOP . 
ENDLOOP . 
+0

나는 비슷한 mapping1을 가지고 row1에 대한 결과 (어제, 오늘, 내일)를 얻는다. 또 다른 mapping2는 row2에 대한 결과를 얻고, 다른 mapping3은 row3에 대한 결과를 얻습니다. 그래서 모든 행에 대해 결과를 얻기 위해 서로 다른 매핑을 갖지만 각 매핑은 어제, 오늘 및 내일의 행당 값을 가져 오는 데 적용 가능합니다. 제공된 코드는 내 디자인을 만족하지 않는 어제 열, 오늘 열 및 내일 열에 대한 유사한 매핑을 가정합니다. ASSIGN COMPONENT 구문에 수행 할 작업이있을 수 있습니다. 나는 그것에 대해서도 놀아야한다. – Czarinaaaaa29

1

의 명령 ASSIGN 구성 요소에 대해 자세히 살펴해야한다, 당신의 코드는이 결과 테이블을 작성? 이것은 작동

FIELD-SYMBOLS: <fvalue> TYPE ANY. 
DEFINE put_values. 
    ASSIGN COMPONENT &1 OF STRUCTURE &2 TO <fvalue>. 
    <fvalue> = &3. 
END-OF-DEFINITION. 

it_table = VALUE #(() () ()). 

LOOP AT it_table ASSIGNING FIELD-SYMBOL(<fs_tab>). 
    put_values 'yesterday' <fs_tab> 'Result Yesterday'. 
    put_values 'today' <fs_tab> 'Result Today'. 
    put_values 'tomorrow' <fs_tab> 'Result Tomorrow'. 
ENDLOOP. 

경우 루프 반복이 (코드에서와 같이) ITAB의 라인에 동일한 경우 번호 : 매크로가 완벽하게 당신의 요구를 충족 할 수 있습니다.