운영서버 반영모습
구현
코드
USER-COMMAND - GUI
USER-COMMAND - ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_PROGRAM
I_CALLBACK_PF_STATUS_SET = C_STATUS_SET
I_CALLBACK_USER_COMMAND = C_USER_COMMAND "
IS_LAYOUT = G_LAYOUT_S
IT_FIELDCAT = G_FIELDCAT_T
IT_SORT = G_SORT_T
IT_EVENTS = G_EVENTS_T
I_SAVE = G_SAVE
IS_VARIANT = G_VARIANT_S
IS_PRINT = G_PRINT
I_GRID_SETTINGS = G_GRIDSET
TABLES
T_OUTTAB = LT_DISP_TAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
USER-COMMAND
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: LR_TABLE TYPE REF TO CL_SALV_TABLE,
LR_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE,
LR_COLUMN TYPE REF TO CL_SALV_COLUMN_TABLE,
LR_DISPLAY TYPE REF TO CL_SALV_DISPLAY_SETTINGS.
CASE R_UCOMM.
WHEN 'VMIOD'.
WHEN OTHERS.
ENDCASE.
ENDFORM. "user_command
SALV - 라인 선택
IF RS_SELFIELD-TABINDEX IS NOT INITIAL.
READ TABLE LT_DISP_TAB INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC EQ 0 AND LT_DISP_TAB-BOX EQ C_X.
PERFORM ZDKB_ZDKE_QUAN "SELECT DATA
USING LT_DISP_TAB-KUNNR LT_DISP_TAB-MATNR.
ELSE.
MESSAGE E000 WITH '라인을 선택해주세요' DISPLAY LIKE 'S'.
ENDIF.
SALV - 테이블 이동
CL_SALV_TABLE=>FACTORY(
IMPORTING
R_SALV_TABLE = LR_TABLE
CHANGING
T_TABLE = GT_VMI[] ).
SALV - FIELD TEXT
LR_DISPLAY = LR_TABLE->GET_DISPLAY_SETTINGS( ).
LR_DISPLAY->SET_LIST_HEADER( 'VMI 오더 현황' ).
LR_COLUMNS = LR_TABLE->GET_COLUMNS( ).
LR_COLUMNS->SET_OPTIMIZE( ).
LR_COLUMN ?= LR_COLUMNS->GET_COLUMN( 'VBELN' ).
LR_COLUMN->SET_SHORT_TEXT( 'ZDKB 오더' ).
LR_COLUMN->SET_MEDIUM_TEXT( 'ZDKB 오더' ).
LR_COLUMN->SET_LONG_TEXT( 'ZDKB 오더' ).
LR_COLUMN ?= LR_COLUMNS->GET_COLUMN( 'POSNR' ).
LR_COLUMN->SET_SHORT_TEXT( 'ZDKB 품목' ).
LR_COLUMN->SET_MEDIUM_TEXT( 'ZDKB 품목' ).
LR_COLUMN->SET_LONG_TEXT( 'ZDKB 품목' ).
LR_COLUMN ?= LR_COLUMNS->GET_COLUMN( 'BFIMG' ).
LR_COLUMN->SET_SHORT_TEXT( 'ZDKB 출고' ).
LR_COLUMN->SET_MEDIUM_TEXT( 'ZDKB 출고수량' ).
LR_COLUMN->SET_LONG_TEXT( 'ZDKB 출고수량' ).
LR_COLUMN ?= LR_COLUMNS->GET_COLUMN( 'EFIMG' ).
LR_COLUMN->SET_SHORT_TEXT( 'ZDKE 출고' ).
LR_COLUMN->SET_MEDIUM_TEXT( 'ZDKE 출고수량' ).
LR_COLUMN->SET_LONG_TEXT( 'ZDKE 출고수량' ).
LR_COLUMN ?= LR_COLUMNS->GET_COLUMN( 'REMAIN' ).
LR_COLUMN->SET_SHORT_TEXT( '잔여수량' ).
LR_COLUMN->SET_MEDIUM_TEXT( '잔여수량' ).
LR_COLUMN->SET_LONG_TEXT( '잔여수량' ).
LR_TABLE->SET_SCREEN_POPUP(
START_COLUMN = 1
END_COLUMN = 60
START_LINE = 1
END_LINE = 10 ).
SALV - DISPLAY
LR_TABLE->DISPLAY( ).
DATA
*1. VMI 자재 연관 ZDKB 오더 + 출고 SELECT ------------------------------
_ALPHA_I: P_KUNNR P_KUNNR, P_MATNR P_MATNR. _CLEARIT GT_ZDKBGI.
SELECT A~VBELN A~POSNR C~LFIMG AS BFIMG C~MEINS "ZDKB
INTO CORRESPONDING FIELDS OF TABLE GT_ZDKBGI
FROM VBAP AS A
JOIN VBAK AS B ON A~VBELN = B~VBELN "ZDKB
AND B~KUNNR = P_KUNNR
JOIN LIPS AS C ON A~VBELN = C~VGBEL "ZDKB
AND A~POSNR = C~VGPOS
WHERE A~PSTYV EQ 'ZKBN'
AND A~ABGRU EQ C_SPACE
AND A~MATNR EQ P_MATNR.
*2. ZDKB 오더 연관 ZDKE 오더 + 출고 SELECT -----------------------------
IF GT_ZDKBGI[] IS NOT INITIAL.
_CLEARIT GT_ZDKEGI.
SELECT A~VGBEL AS VBELN A~VGPOS AS POSNR "ZDKB
B~LFIMG AS EFIMG B~MEINS "ZDKE
INTO CORRESPONDING FIELDS OF TABLE GT_ZDKEGI
FROM VBAP AS A
JOIN LIPS AS B ON A~VBELN = B~VGBEL "ZDKE
AND A~POSNR = B~VGPOS
FOR ALL ENTRIES IN GT_ZDKBGI
WHERE A~VGBEL = GT_ZDKBGI-VBELN "ZDKB
AND A~VGPOS = GT_ZDKBGI-POSNR
AND A~PSTYV EQ 'ZKEN'
AND A~ABGRU EQ C_SPACE.
ENDIF.
*3. 출고 수량 COLLECT : 부분 납품건 수량 합계 --------------------------
_CLEARIT: GT_ZDKBCOL, GT_ZDKECOL.
LOOP AT GT_ZDKBGI.
COLLECT GT_ZDKBGI INTO GT_ZDKBCOL. CLEAR: GT_ZDKBGI, GT_ZDKBCOL.
ENDLOOP.
LOOP AT GT_ZDKEGI.
COLLECT GT_ZDKEGI INTO GT_ZDKECOL. CLEAR: GT_ZDKEGI, GT_ZDKECOL.
ENDLOOP.
*4. 잔여 수량 계산 -----------------------------------------------------
SORT GT_ZDKECOL BY VBELN POSNR. _CLEARIT GT_VMI.
LOOP AT GT_ZDKBCOL.
MOVE-CORRESPONDING GT_ZDKBCOL TO GT_VMI.
GT_VMI-REMAIN = GT_ZDKBCOL-BFIMG.
READ TABLE GT_ZDKECOL WITH KEY VBELN = GT_ZDKBCOL-VBELN
POSNR = GT_ZDKBCOL-POSNR
BINARY SEARCH.
IF SY-SUBRC EQ 0.
"잔여 수량 = ZDKB 출고수량 - ZDKE 출고수량
GT_VMI-REMAIN = GT_ZDKBCOL-BFIMG - GT_ZDKECOL-EFIMG.
GT_VMI-EFIMG = GT_ZDKECOL-EFIMG. "ZDKE 출고수량
ENDIF.
"단위 환산
CASE C_X.
WHEN RB_M3.
PERFORM GET_CHANGE_RATE_POPUP USING 'RB_M3' P_MATNR
CHANGING GT_VMI-BFIMG GT_VMI-EFIMG GT_VMI-REMAIN GT_VMI-MEINS.
WHEN RB_SA.
PERFORM GET_CHANGE_RATE_POPUP USING 'RB_SA' P_MATNR
CHANGING GT_VMI-BFIMG GT_VMI-EFIMG GT_VMI-REMAIN GT_VMI-MEINS.
ENDCASE.
APPEND GT_VMI. CLEAR: GT_ZDKBCOL, GT_ZDKECOL, GT_VMI.
ENDLOOP.
"ZDKE 잔량 0, 출고량 0이 아닌 경우 삭제
DELETE GT_VMI WHERE REMAIN EQ 0 AND EFIMG NE 0.