Field Catalog - Edit 관련 질문 드립니다.
위 그림에서 시뮬레이션 칼럼의 빨강 사각형 부분만 사용자로 부터 입력을 받으려고 하는데
Field Catalog 에서는 시뮬레이션에 관한 열 전체를 Edit 할수는 있는데
특정 셀만 Edit 로 하려면 어떻게 해야 할까요??
Field-Catalog 부분에서 로직이 추가되어야 하는건가요?
댓글 7
-
GG
2009.08.25 19:43
-
요요
2009.08.25 21:57
GG님 글에 첨언하면 layout 의 STYLEFNAME 에 해당 스타일로 사용할 필드를
필드를 지정하셔야 합니다. 그리고 조건별로 GG 님처럼 필드단위 스타일을 지정해 주시면 되겠네요.
GS_LAYPUT-STYLEFNAME = 'CELLTAB'.
-
도움이
2009.08.26 03:43
GG 님 / 요요님 샘플 프로그램 찾아서 특성 셀만 EDIT 가능하도록 구현된 상태인데요
값을 입력하고 엔터를 치면 메소드로 계산을 해서 VV010+VV040 = SUM01 ,
밑에 VV180 ~ VV540 의 합을 SUM05에 넣어주고 REFRESH 해야 하는데
cl_gui_alv_grid=>mc_style_enabled.
한 것(VV010, VV040, VV340, VV360.)만 메소드에서 인식(?) 이 되는것 같습니다..
어떻게 해야 할지..
SUM01과 SUM05 는 DISABLE 상태로 값을 변경해 주어야 하는데.. 쉽지 않은것 같습니다..
-
테라스
2009.08.26 04:14
DATA_CHANGED 이벤트를 이용하셔서 셀의 값이 변경된다면
ls_celltab1-style = cl_gui_alv_grid=>mc_style_disabled. 로 바꾸시고
MODIFY 하시면 적용될듯 합니다.
-
요요
2009.08.26 19:12
변경된 값에 대하여만 data_changed 이벤트가 발생합니다.
제 생각에 sumXX 는 변경불가 필드합계 필드이기 때문에 기본으로 disable 설정을 해주시면 될 것 같아요.
그리고 해당 합계 범위내에 있는 필드의 경우 합계필드에 변경된 값을 적용해 주시면 될 것 같네요
data_changed 에서 변경된 셀에 대한 레코드를 읽으면 현재값이 되고 변경된 셀값을 현재값에 반영하여 변경하게 될텐데요
현재값을 빼고 변경값을 더해 주는 식으로 합계를 계산하시면 될 것 같습니다.
예를 들면, sum05 에 대한 필드값이 vv340의 값이 변경되었다고 하면...
data ls_sum like line of itab.
loop at modicell.
* 현재값 ( vv340 셀에 대한 변경 정보임 )
read table itab index modicell-row_id.
check sy-subrc is initial.
* 합계 필드에 대한 레코드
clear ls_sum.
read table itab into ls_sum with key field = 'SUM05'.
if sy-subrc is initial.
"" 합계필드에 대한 값 계산 = 합계 - 현재값 + 변경값
ls_sum-value = ls_sum-value - itab-value + modicell-value.
endif.
"" 현재값을 변경값으로 변환
itab-value = mpdicell-value.
modify itab.
endloop.
이런 로직으로 계산하시면 합계 계산은 별 문제 없으실 거예요.
-
요요
2009.08.26 19:23
합계 modify 를 빼먹었네요. ^^;
modify itab from ls_sum
transporting value
where field = 'SUM05'.
-
도움이
2009.08.31 23:07
해결했습니다.. 도움주신 모든분들께 감사드립니다.. ^^
PBO 에 해당 셀에 대한 속성을 조건을 지정하여 걸면 특정셀만 Edit 되도록 할수 있습니다..
물론 ready_for_input 값 1 확인하시구요..
CALL METHOD gc_alv_grid1->set_ready_for_input
EXPORTING
i_ready_for_input = 1. "조회모드 0 (SORT 적용시)
PERFORM set_layo1.
PERFORM set_variant1.
PERFORM set_toolbar1.
PERFORM set_fcat1.
PERFORM handle_event1.
PERFORM change_edit_mode1.
PERFORM set_sort1.
PERFORM set_table_for_first_display1.
FORM change_edit_mode1 .
DATA : lt_celltab1 TYPE lvc_t_styl,
l_index1 TYPE i.
CLEAR l_index1.
LOOP AT gt_display1.
l_index1 = sy-tabix.
REFRESH : lt_celltab1.
PERFORM change_status_celltab1 USING 'RW'
CHANGING lt_celltab1.
INSERT LINES OF lt_celltab1 INTO TABLE gt_display1-celltab.
MODIFY gt_display1 INDEX l_index1.
ENDLOOP.
ENDFORM. " CHANGE_EDIT_MODE1
FORM change_status_celltab1 USING value(p_mode)
CHANGING pt_celltab TYPE lvc_t_styl.
DATA: ls_celltab1 TYPE lvc_s_styl,
l_mode1 TYPE raw4.
IF p_mode EQ 'RW'. "editable
l_mode1 = cl_gui_alv_grid=>mc_style_enabled.
ELSE. "p_mode eq 'RO' "non-editable
l_mode1 = cl_gui_alv_grid=>mc_style_disabled.
ENDIF.
CASE gt_display-값필드.
WHEN VV010 OR VV040 OR VV340 OR VV360.
ls_celltab1-fieldname = c_simulation. "시뮬레이션필드명
ls_celltab1-style = l_mode1.
INSERT ls_celltab1 INTO TABLE pt_celltab.
ENDCASE.