공부하면서 한번 만들어 봤는데 뭐가 잘못된듯 합니다.
테이블에 데이터 있는데 salv만 뜨고 데이터가 안 나옵니다.
뭔가 잘못됐는데, 처음하는데다가 계속 보고 있었더니 점점 더 모르게 됬어요~
도와주세요~~
*======================================================================*
* Global Data Declaration.
*======================================================================*
TABLES: LFA1, MARC, MAKT, ANLA, CSKS, ZMMT401, ZMMT402 .
TYPES: BEGIN OF GTITAB,
BICHASU LIKE ZMMT401-BICHASU, "반입연장요청
REGNO LIKE ZMMT401-REGNO, " 반출입번호
SEQNO LIKE ZMMT402-SEQNO, "품목
GUBUN LIKE ZMMT401-GUBUN, " 반입대상(여부)
WERKS LIKE ZMMT401-WERKS, "플랜트
LIFNR LIKE ZMMT401-LIFNR, "반출업체
MATNR LIKE ZMMT402-MATNR, "자재번호
TXZ01 LIKE ZMMT402-TXZ01, "내역
ANLN1 LIKE ZMMT402-ANLN1, "자산번호
TXT50 LIKE ZMMT402-TXT50, "자산내역
BCQTY LIKE ZMMT402-BCQTY, "반출수량
BIQTY LIKE ZMMT402-BIQTY, "반입수량
MEINS LIKE ZMMT402-MEINS, "단위
KOSTL LIKE ZMMT401-KOSTL, "반출부서코드
KTEXT LIKE ZMMT401-KTEXT, "반출부서명
UNAME LIKE ZMMT401-UNAME, "반출인
BCMLTP LIKE ZMMT401-BCMLTP, "반출용도
"반입예정일
BCDATE1 LIKE ZMMT401-BCDATE1, "1차 연장일
BCDATE2 LIKE ZMMT401-BCDATE2, "2차 연장일
BCDATE3 LIKE ZMMT401-BCDATE3, "3차 연장일
BCDATE LIKE ZMMT401-BCDATE, "반출일자
"반입일자
BINAME LIKE ZMMT401-BINAME,"반입인
* CPUDT LIKE ZMMT401-CPUDT, "SYSTEM 일자
BICHECK LIKE ZMMT401-BICHECK, "반입완료지시자
BCCOMM LIKE ZMMT401-BCCOMM, "반입연장사유
END OF GTITAB.
DATA gt_itab TYPE TABLE OF gtitab .
DATA gs_itab TYPE gtitab.
DATA GR_TABLE TYPE REF TO CL_SALV_TABLE.
*data gr_display type ref to cl_salv_display_settings.
DATA GR_LAYOUT TYPE REF TO CL_SALV_LAYOUT.
DATA G_PROGRAM TYPE SALV_S_LAYOUT_KEY.
* OPT
data gr_columns type ref to cl_salv_columns_table.
* 반입완료지시자
data gr_column type ref to cl_salv_column_table.
*======================================================================*
* Selection Screen.
*======================================================================*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_REGNO FOR ZMMT401-REGNO, " 반출입번호
S_WERKS FOR ZMMT401-WERKS, "플랜트
S_MATNR FOR ZMMT402-MATNR, "자재번호
S_KTEXT FOR ZMMT401-KTEXT, "반출부서
S_UNAME FOR ZMMT401-UNAME, "반출인
S_BCDATE FOR ZMMT401-BCDATE. "반출일자
SELECTION-SCREEN END OF BLOCK B1.
*======================================================================*
* AT SELECTION-SCREEN ON
*======================================================================*
AT SELECTION-SCREEN.
*======================================================================*
* Start of Selection.
*======================================================================*
START-OF-SELECTION.
*data_select
SELECT
A~BICHASU "반입연장요청
A~REGNO " 반출입번호
B~SEQNO "품목
A~GUBUN " 반입대상(여부)
A~WERKS "플랜트
A~LIFNR "반출업체
B~MATNR "자재번호
B~TXZ01 "내역
B~ANLN1 "자산번호
B~TXT50 "자산내역
B~BCQTY "반출수량
B~BIQTY "반입수량
B~MEINS "단위
A~KOSTL "반출부서코드
A~KTEXT "반출부서명
A~UNAME "반출인
A~BCMLTP "반출용도
"반입예정일
A~BCDATE1 "1차 연장일
A~BCDATE2 "2차 연장일
A~BCDATE3 "3차 연장일
A~BCDATE "반출일자
"반입일자
A~BINAME "반입인
* A~CPUDT "SYSTEM 일자
A~BICHECK "반입완료지시자
A~BCCOMM "반입연장사유
INTO CORRESPONDING FIELDS OF TABLE GT_ITAB
FROM ZMMT401 AS A
JOIN ZMMT402 AS B
ON B~REGNO = A~REGNO
WHERE B~REGNO = S_REGNO
AND A~WERKS = S_WERKS
AND B~MATNR = S_MATNR
AND A~KTEXT = S_KTEXT
AND A~UNAME = S_UNAME
AND A~BCDATE = S_BCDATE
.
*salv
CL_SALV_TABLE=>FACTORY(
IMPORTING
R_SALV_TABLE = GR_TABLE
CHANGING
T_TABLE = GT_ITAB
).
GR_LAYOUT = GR_TABLE->GET_LAYOUT( ).
G_PROGRAM-REPORT = SY-REPID.
GR_LAYOUT->SET_KEY( G_PROGRAM ).
GR_LAYOUT->SET_SAVE_RESTRICTION( CL_SALV_LAYOUT=>RESTRICT_NONE ).
*OPT
gr_columns = gr_table->get_columns( ) .
gr_columns->set_optimize( 'X' ).
*반입완료지시자
LOOP AT gt_itab INTO gs_itab.
IF GS_ITAB-GUBUN = 'A'.
IF GS_ITAB-BCQTY NE GS_ITAB-BIQTY.
gr_column ?= gr_columns->get_column( 'BICHECK' ).
gr_column->SET_TEXT_COLUMN('X').
ENDIF.
ENDIF.
* 반입대상 A-반입 B-미반입
IF GS_ITAB-GUBUN = 'A'.
gr_column ?= gr_columns->get_column( 'GUBUN' ).
gr_column->SET_TEXT_COLUMN('반입').
ELSEIF GS_ITAB-GUBUN = 'B'.
gr_column ?= gr_columns->get_column( 'GUBUN' ).
gr_column->SET_TEXT_COLUMN('미반입').
ELSE.
gr_column ?= gr_columns->get_column( 'GUBUN' ).
gr_column->SET_TEXT_COLUMN(' ').
ENDIF.
ENDLOOP.
*======================================================================*
* End of Selection.
*======================================================================*
END-OF-SELECTION.
GR_TABLE->DISPLAY( ).
select 에서 돌려 봤는데 gt_itab에 아무 값도 안 들어오더군요.
댓글 9
-
okso6441
2010.10.06 02:17
-
유리선율
2010.10.06 02:26
SELECT 조건때문에 발생한 DUMP는 아닌 듯 한데요. ^^;
디버그모드에서 F5로 한 단계씩 진행해 보세요.
어느구문에서 DUMP가 발생하는지..
-
버미!
2010.10.06 02:36
select 구문은 IN으로 바꾸시고요
gr_column->SET_TEXT_COLUMN(' ').
이 구문이 잘못되었습니다.
괄호안 값은 필드명이 들어가야 합니다.
-
okso6441
2010.10.06 02:37
주석 걸어보면서 보니까
* GR_COLUMN ?= GR_COLUMNS->GET_COLUMN( 'BICHECK' ).
* GR_COLUMN->SET_TEXT_COLUMN('X').
때문인거 같은데;;
쓸 줄 몰라서;; 찾아서 대충 썼더니 이러네요;;
하지만 여전히 어떻게 써야 할 지 모르겠어요;;
-
ABAPer33
2010.10.06 02:37
난 이렇게 class로 칠갑을 해놓은 소스가 젤 싫더라.디버깅도 힘들고.
-
버미!
2010.10.06 02:38
보아하니 ALV 타이틀 같은데 그렇다면
DATA : lr_columns TYPE REF TO cl_salv_columns,
ls_column TYPE REF TO cl_salv_column_table. "indiv.col.set
DATA : lv_stext TYPE scrtext_s,
lv_mtext TYPE scrtext_m,
lv_ltext TYPE scrtext_l.
try.
ls_column ?= lr_columns->get_column( &1 ).
catch cx_salv_not_found.
endtry.
lv_stext = lv_mtext = lv_ltext = '헤더 텍스트'.
ls_column->set_short_text( lv_stext ).
ls_column->set_medium_text( lv_mtext ).
ls_column->set_long_text( lv_ltext ).
으로 변경하시면 됩니다.
저두 대부분 SALV로 코딩하는 데 불편한 점도 있지만 편한점도 있답니다.
-
okso6441
2010.10.06 02:41
문제는 다음 어떤 조건 하에서 타이틀이 아니라 필드 값이 'x'로 출력되게 하는건데;;
저렇게 해도 해결이 되나요??
-
okso6441
2010.10.06 03:38
modify로 해결봤습니다~
감사합니다~
-
Jam
2010.10.06 21:09
스탠다드 프로그램 먼저 분석해 보세요~ PACKAGE: SLIS
계속 질문입니다. 이후에 select 조건을 selection-option이라 =에서in으로 바꾸었는데 덤프가;;;;
아래는 덤프
어떤 문제가 발생했습니까?
The exception 'CX_SALV_NOT_FOUND' was raised, but it was not caught anywhe
along
the call hierarchy.
Since exceptions represent error situations and this error was not
adequately responded to, the running ABAP program
'CL_SALV_COLUMNS===============CP' has to be
terminated.
오류분석
An exception occurred which is explained in detail below.
The exception, which is assigned to class 'CX_SALV_NOT_FOUND', was not cau
and
therefore caused a runtime error.
The reason for the exception is:
Object ColumnOBJECT XKEY not found (class COLUMNS_TABLECLASS method
GET_COLUMNMETHOD)
loop 문 어디서 잘못된;;;