ELSEIF P_R2 = 'X'. ----------> 여기 선택할때 데이터량이 커서 에러가나요!
PERFORM ALV_DISPLAY_PART TABLES GT_DATA2.
==> 여기만 이렇게 삭제해버리면 해결이 될까요????????????????????????
>안녕하세요!~ 반갑습니다.^^
>
>오늘중으로 처리해야 하는데.. 방법이나 조언좀 구하려구요^^;
>
>현재 프로그램을 실행시키면 alv grid 형태로 조회가 된 다음에
>이것을 파일로 (ftp) 타서버에 전송합니다.
>
>그런데 옵션중에서 특정1개가 관련 데이터용량이 너무 커서인지
>Foreground로 돌리면 Runtiem 에러가 나서..
>Background로 돌렸는데.. 약 30분 넘게 도는 것 같은데..(1900초 정도 되다가 에러나니까..)
>다음과 같은 에러로그가 나타나고 있습니다.
>-----------------------------------------------------
>Control Framework: Fatal error - GUI cannot be reached
ABAP/4 프로세서: RAISE_EXCEPTION
작업을 취소했습니다
>-----------------------------------------------------
>
>이것저것 찾아본결과 background로 돌릴때에는 alv grid 화면형태로 구성을 못해주기 때문에
>위와 같은 에러가 난다고 하는데요..
>
>그렇다면 alv 로 화면표시가 안되게 만들어야 할 것 같은데.. 잘 돌았다는 간단한 메시지 하나만 뿌려주고
>바로 파일로 전송할수 있게 해야 하겠죠???
>그럼 어떻게 표시안되게 만들어줄수 있을까요? alv 관련 부분이 복잡해서.. 감이 잘 안잡히네요^^;;;
>
>
>PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
MODULE SET_ALV_GRID. -----------------> 이부분에서 alv display 해줘서..
*
PROCESS AFTER INPUT.
> MODULE EXIT_PRO AT EXIT-COMMAND.
MODULE USER_COMMAND_0100.
>
>
>MODULE SET_ALV_GRID OUTPUT.
PERFORM SET_ALV_GRID.
ENDMODULE. " SET_ALV_GRID OUTPUT
>
>
>FORM SET_ALV_GRID .
> IF LCL_CONTAINER IS INITIAL.
> CREATE OBJECT LCL_CONTAINER
EXPORTING
CONTAINER_NAME = LCL_MYCONTAINER.
> IF SY-SUBRC <> 0.
MESSAGE A000(TREE_CONTROL_MSG).
ENDIF.
> CREATE OBJECT LCL_GRID
EXPORTING
I_PARENT = LCL_CONTAINER.
ENDIF.
> PERFORM LAYOUT_ATTRIBUTE CHANGING GS_LVC_LAYO. " Grid 속성
PERFORM TOOLBAR_PART USING 'gt_ui_functions'. " Tool Bar
> IF P_R1 = 'X'.
PERFORM LVC_FIELDCATALOG_MERGE1 CHANGING GT_LVC_FCAT. " Field Cat.
ELSEIF P_R2 = 'X'.
PERFORM LVC_FIELDCATALOG_MERGE2 CHANGING GT_LVC_FCAT. " Field Cat.
ELSEIF P_R3 = 'X'.
PERFORM LVC_FIELDCATALOG_MERGE3 CHANGING GT_LVC_FCAT. " Field Cat.
ELSEIF P_R4 = 'X'.
PERFORM LVC_FIELDCATALOG_MERGE4 CHANGING GT_LVC_FCAT. " Field Cat.
ENDIF.
*** perform event_handler_register. " Event
* PERFORM BUILD_CELL_ATTR. " 셀의 특성
* PERFORM SET_SORT.
IF P_R1 = 'X'.
PERFORM ALV_DISPLAY_PART TABLES GT_DATA1. ELSEIF P_R2 = 'X'. ----------> 여기 선택할때 데이터량이 커서 에러가나요!
PERFORM ALV_DISPLAY_PART TABLES GT_DATA2.
==> 여기만 이렇게 삭제해버리면 해결이 될까요????????????????????????
ELSEIF P_R3 = 'X'.
PERFORM ALV_DISPLAY_PART TABLES GT_DATA3.
ELSEIF P_R4 = 'X'.
PERFORM ALV_DISPLAY_PART TABLES GT_DATA4.
ENDIF.
>
ENDFORM. " set_alv_grid
>
>
>
> ELSEIF P_R2 = 'X'.
PERFORM ALV_DISPLAY_PART TABLES GT_DATA2.
>
> => FORM ALV_DISPLAY_PART TABLES P_ITAB.
> CALL METHOD LCL_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LVC_LAYO
IT_TOOLBAR_EXCLUDING = GT_UI_FUNCTIONS
I_SAVE = 'A' " 전체가능유형.
I_DEFAULT = 'X' " 레이아웃 사전셋팅 허용.
IS_VARIANT = GS_VARIANT " 선택메뉴Display
CHANGING
IT_OUTTAB = P_ITAB[]
IT_SORT = GT_LVC_SORT[]
IT_FIELDCATALOG = GT_LVC_FCAT[].
>ENDFORM. " alv_display_part
>
>
>위 파일을 다른 서버로 전송해준다.(SEND버튼)
>
>PROCESS AFTER INPUT.
> MODULE EXIT_PRO AT EXIT-COMMAND.
MODULE USER_COMMAND_0100. <------ 요부분이 파일로 전송(SEND)해주는 부분이에요 ㅇㅇ
>
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>이제 저는 어떻게 해야 될까요? ㅡㅜ
>고수분들의 많은 도움과 조언 부탁드립니당~~!
>
음...프로그램을 전혀 모르시는거 같은데요...
간다히 말씀드리면
위에 적어주신 소스는 alv 를 생성하고 화면에 그리는 것입니다.
노아님은 alv 자체를 생성할 필요가 없기 때문에
call screen 100 ~~ << 이런 구문이 있을텐데요 ( 100번 화면으로 예상되네요 숫자가 다를수도 있어요 )
이 부분을 빼시고
MODULE USER_COMMAND_0100 << 요기 안쪽에서도 실제로 send 해주는 부분이 따로 있을텐데
그 부분이 바로 와야 합니다.
즉 프로그램이 실행되서 데이터를 가져오면
alv 를 그리지 않고 ( call screen 100 하지 않음 )
바로 send 하는 로직이 되는거지요^^