alv dcell sum more edit

&---------------------------------------------------------------------
*& Report Z_ALV_TEST_017
*&
&---------------------------------------------------------------------
*&
*&
&---------------------------------------------------------------------

REPORT Z_ALV_TEST_017 MESSAGE-ID OO.

----------------------------------------------------------------------

  •          Pools and Types
    

----------------------------------------------------------------------
TYPE-POOLS: SLIS,ABAP,VRM,ICON,OLE2.

TYPES: BEGIN OF STRUC_TAB,
MBLNR TYPE MSEG-MBLNR,
MJAHR TYPE MSEG-MJAHR,
ZEILE TYPE MSEG-ZEILE,
BWART TYPE MSEG-BWART,
MATNR TYPE MSEG-MATNR,
MAKTX TYPE MAKT-MAKTX,
DMBTR TYPE MSEG-DMBTR,
MENGE TYPE MSEG-MENGE,
BPMNG TYPE MSEG-BPMNG,
MEINS TYPE MARA-MEINS,
SUM TYPE CHAR50,
END OF STRUC_TAB.

----------------------------------------------------------------------

  •      Work Area and Internal Table
    

----------------------------------------------------------------------
DATA: GS_LAYOUT TYPE LVC_S_LAYO,
GS_SETTINGS TYPE LVC_S_GLAY,
GT_SORT TYPE LVC_T_SORT,
GT_FIELDCAT TYPE LVC_T_FCAT.

DATA: GS_TAB TYPE STRUC_TAB,
GT_TAB TYPE TABLE OF STRUC_TAB.

----------------------------------------------------------------------

  •       Ranges and Field Symbols
    

----------------------------------------------------------------------
FIELD-SYMBOLS: <FS_TAB> TYPE STRUC_TAB.

----------------------------------------------------------------------

  •         Class and Object
    

----------------------------------------------------------------------
DATA: GRID TYPE REF TO CL_GUI_ALV_GRID.

----------------------------------------------------------------------

  •         START-OF-SELECTION
    

----------------------------------------------------------------------
START-OF-SELECTION.

PERFORM FRM_DATA_GET.
PERFORM FRM_DATA_PROCESS.
PERFORM FRM_DATA_OUTPUT.

&---------------------------------------------------------------------
*& FORM FRM_DATA_GET
&---------------------------------------------------------------------
FORM FRM_DATA_GET.

SELECT A~MBLNR A~MJAHR A~ZEILE A~BWART A~MATNR A~DMBTR A~MENGE A~BPMNG
B~MAKTX
FROM MSEG AS A
INNER JOIN MAKT AS B ON B~MATNR EQ A~MATNR AND B~SPRAS EQ SY-LANGU
UP TO 15 ROWS
INTO CORRESPONDING FIELDS OF TABLE GT_TAB.

IF GT_TAB IS INITIAL.
MESSAGE S000 WITH ‘没有符合条件的数据!’ DISPLAY LIKE ‘E’.
STOP.
ENDIF.

ENDFORM. "FRM_DATA_GET

&---------------------------------------------------------------------
*& FORM FRM_DATA_PROCESS
&---------------------------------------------------------------------
FORM FRM_DATA_PROCESS.

LOOP AT GT_TAB ASSIGNING <FS_TAB>.
CONCATENATE <FS_TAB>-MAKTX ‘-’ <FS_TAB>-BWART INTO <FS_TAB>-SUM.
ENDLOOP.

GS_TAB-MEINS = ‘EA’.
MODIFY GT_TAB FROM GS_TAB TRANSPORTING MEINS WHERE MEINS NE ‘EA’.
CLEAR GS_TAB.

ENDFORM. "FRM_DATA_PROCESS

&---------------------------------------------------------------------
*& FORM FRM_DATA_OUTPUT
&---------------------------------------------------------------------
FORM FRM_DATA_OUTPUT.

PERFORM FRM_ALV_INIT_LAYOUT.
PERFORM FRM_ALV_INIT_SETTINGS.
PERFORM FRM_ALV_SORT_BUILD.
PERFORM FRM_ALV_INIT_FIELDCAT.
PERFORM FRM_ALV_DISPLAY.

ENDFORM. " FRM_DATA_OUTPUT

&---------------------------------------------------------------------
*& FORM FRM_ALV_INIT_LAYOUT
&---------------------------------------------------------------------
FORM FRM_ALV_INIT_LAYOUT.

GS_LAYOUT-ZEBRA = ‘X’.
GS_LAYOUT-SEL_MODE = ‘D’.
GS_LAYOUT-CWIDTH_OPT = ‘X’.
GS_LAYOUT-DETAILINIT = ‘X’.

ENDFORM. " FRM_ALV_INIT_LAYOUT

&---------------------------------------------------------------------
*& FORM FRM_ALV_INIT_SETTINGS
&---------------------------------------------------------------------
FORM FRM_ALV_INIT_SETTINGS.

GS_SETTINGS-EDT_CLL_CB = ‘X’.

ENDFORM. " FRM_ALV_INIT_SETTINGS

&---------------------------------------------------------------------
*& FORM FRM_ALV_SORT_BUILD
&---------------------------------------------------------------------
FORM FRM_ALV_SORT_BUILD.
DATA: LS_SORT TYPE LVC_S_SORT.

LS_SORT-FIELDNAME = ‘MATNR’.
LS_SORT-UP = ‘X’.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.

LS_SORT-FIELDNAME = ‘MAKTX’.
LS_SORT-UP = ‘X’.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.

LS_SORT-FIELDNAME = ‘BWART’.
LS_SORT-UP = ‘X’.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.

LS_SORT-FIELDNAME = ‘SUM’.
LS_SORT-UP = ‘X’.
LS_SORT-SUBTOT = ‘X’.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.

ENDFORM. "FRM_ALV_SORT_BUILD

&---------------------------------------------------------------------
*& FORM FRM_ALV_INIT_FIELDCAT
&---------------------------------------------------------------------
FORM FRM_ALV_INIT_FIELDCAT.
DATA: LS_FIELDCAT TYPE LVC_S_FCAT.
DEFINE MAC_FILL_FIELDCAT.
LS_FIELDCAT-FIELDNAME = &1.
LS_FIELDCAT-COLTEXT = &2.
LS_FIELDCAT-NO_ZERO = &3.
LS_FIELDCAT-DO_SUM = &4.
LS_FIELDCAT-NO_OUT = &5.
LS_FIELDCAT-REF_TABLE = &6.
LS_FIELDCAT-REF_FIELD = &7.
LS_FIELDCAT-DECIMALS_O = &8.
LS_FIELDCAT-QFIELDNAME = &9.
APPEND LS_FIELDCAT TO GT_FIELDCAT.
CLEAR LS_FIELDCAT.
END-OF-DEFINITION.

MAC_FILL_FIELDCAT ‘MBLNR’ ‘物料凭证’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MJAHR’ ‘凭证年度’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘ZEILE’ ‘行号’ ‘X’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘BWART’ ‘移动类型’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MATNR’ ‘物料编码’ ‘X’ ‘’ ‘’ ‘MARA’ ‘MATNR’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MAKTX’ ‘物料描述’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘DMBTR’ ‘金额’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MENGE’ ‘数量’ ‘’ ‘X’ ‘’ ‘MSEG’ ‘MENGE’ ‘0’ ‘MEINS’.
MAC_FILL_FIELDCAT ‘BPMNG’ ‘计算数量’ ‘’ ‘X’ ‘’ ‘MSEG’ ‘MENGE’ ‘0’ ‘MEINS’.
MAC_FILL_FIELDCAT ‘SUM’ ‘小计:’ ‘’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT ‘MEINS’ ‘单位’ ‘’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’.

LS_FIELDCAT-EDIT = ‘X’.
MODIFY GT_FIELDCAT FROM LS_FIELDCAT TRANSPORTING EDIT
WHERE FIELDNAME EQ ‘MENGE’.
CLEAR LS_FIELDCAT.

ENDFORM. " FRM_ALV_INIT_FIELDCAT

&---------------------------------------------------------------------
*& FORM FRM_ALV_DISPLAY
&---------------------------------------------------------------------
FORM FRM_ALV_DISPLAY.

CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT_LVC = GS_LAYOUT
I_GRID_SETTINGS = GS_SETTINGS
IT_SORT_LVC = GT_SORT
IT_FIELDCAT_LVC = GT_FIELDCAT
I_SAVE = ‘U’
I_DEFAULT = SPACE
I_CALLBACK_PF_STATUS_SET = ‘FRM_ALV_STATUS_SET’
I_CALLBACK_USER_COMMAND = ‘FRM_ALV_USER_COMMAND’
TABLES
T_OUTTAB = GT_TAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " FRM_ALV_DISPLAY

&---------------------------------------------------------------------
*& FORM FRM_ALV_STATUS_SET
&---------------------------------------------------------------------
FORM FRM_ALV_STATUS_SET USING PT_EXTAB TYPE SLIS_T_EXTAB.

SET PF-STATUS ‘ZSTATUS’ EXCLUDING PT_EXTAB.

CHECK GRID IS INITIAL.

CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
E_GRID = GRID.

ENDFORM. " FRM_ALV_STATUS_SET

&---------------------------------------------------------------------
*& FORM FRM_ALV_USER_COMMAND
&---------------------------------------------------------------------
FORM FRM_ALV_USER_COMMAND USING PA_UCOMM TYPE SY-UCOMM
PS_SELFIELD TYPE SLIS_SELFIELD.

CASE PA_UCOMM.
WHEN ‘&DATA_SAVE’.
PERFORM FRM_ALV_POPUP.
WHEN ‘SAVE’.
PERFORM FRM_ALV_POPUP.
WHEN ‘POPUP_1’.
CALL METHOD GRID->CHECK_CHANGED_DATA.
PERFORM FRM_ALV_POPUP.
WHEN ‘POPUP_2’.
PERFORM FRM_ALV_POPUP.
WHEN ‘EXIT’.
LEAVE PROGRAM.
WHEN ‘CANCEL’.
LEAVE PROGRAM.
WHEN ‘RETURN’.
LEAVE PROGRAM.
ENDCASE.

ENDFORM. " FRM_ALV_USER_COMMAND

&---------------------------------------------------------------------
*& FORM FRM_ALV_POPUP
&---------------------------------------------------------------------
FORM FRM_ALV_POPUP.
DATA: LS_FIELDCAT_SUB TYPE SLIS_FIELDCAT_ALV,
LT_FIELDCAT_SUB TYPE SLIS_T_FIELDCAT_ALV.
DEFINE MAC_FILL_FIELDCAT_SUB.
LS_FIELDCAT_SUB-FIELDNAME = &1.
LS_FIELDCAT_SUB-SELTEXT_M = &2.
LS_FIELDCAT_SUB-KEY = &3.
LS_FIELDCAT_SUB-NO_ZERO = &4.
LS_FIELDCAT_SUB-NO_OUT = &5.
LS_FIELDCAT_SUB-REF_TABNAME = &6.
LS_FIELDCAT_SUB-REF_FIELDNAME = &7.
LS_FIELDCAT_SUB-DECIMALS_OUT = &8.
LS_FIELDCAT_SUB-QFIELDNAME = &9.
APPEND LS_FIELDCAT_SUB TO LT_FIELDCAT_SUB.
CLEAR LS_FIELDCAT_SUB.
END-OF-DEFINITION.

MAC_FILL_FIELDCAT_SUB ‘MBLNR’ ‘物料凭证’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘MJAHR’ ‘凭证年度’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘ZEILE’ ‘行号’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘BWART’ ‘移动类型’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘MATNR’ ‘物料编码’ ‘’ ‘X’ ‘’ ‘MARA’ ‘MATNR’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘MAKTX’ ‘物料描述’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘DMBTR’ ‘金额’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
MAC_FILL_FIELDCAT_SUB ‘MENGE’ ‘数量’ ‘’ ‘’ ‘’ ‘MSEG’ ‘MENGE’ ‘0’ ‘MEINS’.
MAC_FILL_FIELDCAT_SUB ‘BPMNG’ ‘计算数量’ ‘’ ‘’ ‘’ ‘MSEG’ ‘MENGE’ ‘0’ ‘MEINS’.
MAC_FILL_FIELDCAT_SUB ‘MEINS’ ‘单位’ ‘’ ‘’ ‘X’ ‘’ ‘’ ‘’ ‘’.

CALL FUNCTION ‘REUSE_ALV_POPUP_TO_SELECT’
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_ZEBRA = ‘X’
I_SCREEN_START_COLUMN = 10
I_SCREEN_START_LINE = 1
I_SCREEN_END_COLUMN = 135
I_SCREEN_END_LINE = 15
I_TABNAME = ‘1’
IT_FIELDCAT = LT_FIELDCAT_SUB
I_CALLBACK_USER_COMMAND = ‘FRM_ALV_USER_COMMAND_POPUP’
TABLES
T_OUTTAB = GT_TAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.

ENDFORM. "FRM_ALV_POPUP

&---------------------------------------------------------------------
*& FORM FRM_ALV_USER_COMMAND_POPUP
&---------------------------------------------------------------------
FORM FRM_ALV_USER_COMMAND_POPUP USING PA_UCOMM TYPE SY-UCOMM
PWA_SELFIELD TYPE SLIS_SELFIELD.
DATA: L_FILENAME TYPE STRING,
L_PATH TYPE STRING,
L_FULLPATH TYPE STRING,
L_ACTION TYPE I.
TYPES: BEGIN OF STRUC_TABLE,
MBLNR TYPE CHAR20,
MJAHR TYPE CHAR20,
ZEILE TYPE CHAR20,
BWART TYPE CHAR20,
MATNR TYPE CHAR20,
MAKTX TYPE CHAR20,
DMBTR TYPE CHAR20,
MENGE TYPE CHAR20,
BPMNG TYPE CHAR20,
END OF STRUC_TABLE.
DATA: LS_TAB TYPE STRUC_TABLE,
LT_TAB TYPE TABLE OF STRUC_TABLE.

CASE PA_UCOMM.
WHEN ‘&ETA’.
CLEAR PA_UCOMM.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
FILE_FILTER = ‘Excel Files (.xls,.xlsx)|.xls;.xlsx’
CHANGING
FILENAME = L_FILENAME
PATH = L_PATH
FULLPATH = L_FULLPATH
USER_ACTION = L_ACTION
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 39
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

CHECK L_ACTION EQ 0.
CLEAR LS_TAB.
REFRESH LT_TAB.

LOOP AT GT_TAB ASSIGNING <FS_TAB>.
MOVE-CORRESPONDING <FS_TAB> TO LS_TAB.
APPEND LS_TAB TO LT_TAB.
CLEAR LS_TAB.
ENDLOOP.

LS_TAB-MBLNR = ‘物料凭证’.
LS_TAB-MJAHR = ‘凭证年度’.
LS_TAB-ZEILE = ‘行号’.
LS_TAB-BWART = ‘移动类型’.
LS_TAB-MATNR = ‘物料编码’.
LS_TAB-MAKTX = ‘物料描述’.
LS_TAB-DMBTR = ‘金额’.
LS_TAB-MENGE = ‘数量’.
LS_TAB-BPMNG = ‘计算数量’.
INSERT LS_TAB INTO LT_TAB INDEX 1.
CLEAR LS_TAB.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
EXPORTING
FILENAME = L_FULLPATH
WRITE_FIELD_SEPARATOR = ‘X’
CHANGING
DATA_TAB = LT_TAB
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
NOT_SUPPORTED_BY_GUI = 22
ERROR_NO_GUI = 23
OTHERS = 24.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDCASE.

ENDFORM. " FRM_ALV_USER_COMMAND_POPUP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值