*&---------------------------------------------------------------------*
*& Report ZSDR008
*&---------------------------------------------------------------------*
*& Author : NathanSun
*& Create Date : 2019-10-06
*& Program Type : Report
*& Description : 自动扩充销售视图
*&---------------------------------------------------------------------*
REPORT ZSDR008.
TABLES:MARC,MARA,MVKE.
TYPE-POOLS:SLIS,T001W,ICON.
"定义ALV输出所需变量
DATA: S_LAYOUT TYPE SLIS_LAYOUT_ALV,
GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
TYPES: BEGIN OF GTS_DATA .
TYPES: MATNR TYPE MARC-MATNR. "物料
INCLUDE STRUCTURE ZTSD_ST01.
TYPES: MESSAGE TYPE BAPI_MSG. "消息
TYPES: MTYPE TYPE BAPI_MTYPE. "消息类型
TYPES: END OF GTS_DATA.
DATA: GT_ALV TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_ALV_A TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_ALV_B TYPE TABLE OF GTS_DATA WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
SELECT-OPTIONS: S_MATNR FOR MARC-MATNR MODIF ID MXY . "物料
SELECT-OPTIONS: S_WERKS FOR MARC-WERKS MODIF ID MXY . "工厂
SELECT-OPTIONS: S_MTART FOR MARA-MTART MODIF ID MXY . "物料类型
SELECT-OPTIONS: S_ERSDA FOR MARA-ERSDA MODIF ID MXY . "创建日期
SELECT-OPTIONS: S_VKORG FOR MVKE-VKORG MODIF ID MXY . "销售组织
SELECT-OPTIONS: S_VTWEG FOR MVKE-VTWEG MODIF ID MXY . "分销渠道
SELECTION-SCREEN END OF BLOCK B2.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
* 数据声明
DATA: CLIDAINP LIKE BAPI_MARA_GA, "客户端层次物料数据
CLIDAOUT LIKE BAPI_MARA, "客户端层次物料数据
CLIDAOUTX LIKE BAPI_MARAX, "BAPI_MARA 的复选框结构
HEADDATA LIKE BAPIMATHEAD, "带有控制信息的表头段
RETURN LIKE BAPIRET2, "返回参数
CLIENTDATA TYPE BAPI_MARA,
CLIENTDATAX TYPE BAPI_MARAX,
PLANTDATA TYPE BAPI_MARC,
PLANTDATAX TYPE BAPI_MARCX,
SALESDATA TYPE BAPI_MVKE,
SALESDATAX TYPE BAPI_MVKEX,
TAXCLASSIFICATIONS LIKE BAPI_MLAN OCCURS 0 WITH HEADER LINE,
RETURNMES LIKE BAPI_MATRETURN2 OCCURS 0 WITH HEADER LINE.
DATA GT_ZTSD_ST01 TYPE TABLE OF ZTSD_ST01 WITH HEADER LINE .
CLEAR GT_ALV[].
SELECT
MARC~MATNR
MARC~WERKS
MARA~MTART
TVKWZ~VKORG
TVKWZ~VTWEG
INTO CORRESPONDING FIELDS OF TABLE GT_ALV[]
FROM MARC
INNER JOIN MARA ON MARC~MATNR = MARA~MATNR
INNER JOIN TVKWZ ON MARC~WERKS = TVKWZ~WERKS
WHERE MARC~MATNR IN S_MATNR
AND MARC~WERKS IN S_WERKS
AND MARA~MTART IN S_MTART
AND MARA~ERSDA IN S_ERSDA
AND TVKWZ~VKORG IN S_VKORG
AND TVKWZ~VTWEG IN S_VTWEG
.
LOOP AT GT_ALV.
SELECT SINGLE MATNR,VKORG,VTWEG INTO @DATA(LV_MVKE) FROM MVKE
WHERE MATNR = @GT_ALV-MATNR
AND VKORG = @GT_ALV-VKORG
AND VTWEG = @GT_ALV-VTWEG
.
IF SY-SUBRC = 0.
DELETE GT_ALV.
ELSE .
CLEAR GT_ZTSD_ST01[] .
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_ZTSD_ST01[] FROM ZTSD_ST01
WHERE WERKS = GT_ALV-WERKS
.
CLEAR GT_ZTSD_ST01 .
READ TABLE GT_ZTSD_ST01 WITH KEY MTART = GT_ALV-MTART .
IF SY-SUBRC = 0.
DELETE GT_ZTSD_ST01[] WHERE MTART <> GT_ALV-MTART .
ELSE .
DELETE GT_ZTSD_ST01[] WHERE MTART IS NOT INITIAL .
ENDIF.
READ TABLE GT_ZTSD_ST01 WITH KEY VKORG = GT_ALV-VKORG .
IF SY-SUBRC = 0.
DELETE GT_ZTSD_ST01[] WHERE VKORG <> GT_ALV-VKORG .
ELSE .
DELETE GT_ZTSD_ST01[] WHERE VKORG IS NOT INITIAL .
ENDIF.
READ TABLE GT_ZTSD_ST01 WITH KEY VTWEG = GT_ALV-VTWEG .
IF SY-SUBRC = 0.
DELETE GT_ZTSD_ST01[] WHERE VTWEG <> GT_ALV-VTWEG .
ELSE .
DELETE GT_ZTSD_ST01[] WHERE VTWEG IS NOT INITIAL .
ENDIF.
IF GT_ZTSD_ST01 IS INITIAL .
READ TABLE GT_ZTSD_ST01 INDEX 1 .
ENDIF.
IF GT_ZTSD_ST01 IS NOT INITIAL.
GT_ALV-SPART = GT_ZTSD_ST01-SPART .
GT_ALV-DWERK = GT_ZTSD_ST01-DWERK .
GT_ALV-TAXKM_HK = GT_ZTSD_ST01-TAXKM_HK .
GT_ALV-TAXKM_CN = GT_ZTSD_ST01-TAXKM_CN .
GT_ALV-KTGRM = GT_ZTSD_ST01-KTGRM .
GT_ALV-MTVFP = GT_ZTSD_ST01-MTVFP .
GT_ALV-MTPOS = GT_ZTSD_ST01-MTPOS .
GT_ALV-MTPOS_MARA = GT_ZTSD_ST01-MTPOS_MARA .
GT_ALV-TRAGR = GT_ZTSD_ST01-TRAGR .
GT_ALV-LADGR = GT_ZTSD_ST01-LADGR .
* Header segment with control information
HEADDATA-MATERIAL = GT_ALV-MATNR. "物料
HEADDATA-MATL_TYPE = GT_ALV-MTART. "物料类型
HEADDATA-SALES_VIEW = 'X'. "销售视图
* Client-specific material data
CLEAR CLIENTDATA .
CLIENTDATA-DIVISION = GT_ALV-SPART. "产品组
CLIENTDATA-ITEM_CAT = GT_ALV-MTPOS_MARA. "普通项目类别组
CLIENTDATA-TRANS_GRP = GT_ALV-TRAGR. "运输组
CLEAR CLIENTDATAX .
CLIENTDATAX-DIVISION = 'X'. "产品组
CLIENTDATAX-ITEM_CAT = 'X'. "普通项目类别组
CLIENTDATAX-TRANS_GRP = 'X'. "运输组
* Plant-specific material data
CLEAR PLANTDATA .
PLANTDATA-AVAILCHECK = GT_ALV-MTVFP. "可用性检查
PLANTDATA-LOADINGGRP = GT_ALV-LADGR. "装载组
CLEAR PLANTDATAX .
PLANTDATAX-AVAILCHECK = 'X'. "可用性检查
PLANTDATAX-LOADINGGRP = 'X'. "装载组
* Sales data
CLEAR SALESDATA .
SALESDATA-SALES_ORG = GT_ALV-VKORG. "销售组织
SALESDATA-DISTR_CHAN = GT_ALV-VTWEG. "分销渠道
SALESDATA-DELYG_PLNT = GT_ALV-DWERK. "交货工厂
SALESDATA-ITEM_CAT = GT_ALV-MTPOS. "来自物料主文件的项目类别组
SALESDATA-ACCT_ASSGT = GT_ALV-KTGRM. "该物料的科目设置组
CLEAR SALESDATAX .
SALESDATAX-SALES_ORG = GT_ALV-VKORG. "销售组织
SALESDATAX-DISTR_CHAN = GT_ALV-VTWEG. "销售组织
SALESDATAX-DELYG_PLNT = 'X'. "交货工厂
SALESDATAX-ITEM_CAT = 'X'. "来自物料主文件的项目类别组
SALESDATAX-ACCT_ASSGT = 'X'. "该物料的科目设置组
* Tax classifications
CLEAR TAXCLASSIFICATIONS[] .
TAXCLASSIFICATIONS-DEPCOUNTRY = 'HK'.
TAXCLASSIFICATIONS-TAX_TYPE_1 = 'MWST'.
TAXCLASSIFICATIONS-TAXCLASS_1 = GT_ALV-TAXKM_HK.
APPEND TAXCLASSIFICATIONS.
CLEAR TAXCLASSIFICATIONS.
TAXCLASSIFICATIONS-DEPCOUNTRY = 'CN'.
TAXCLASSIFICATIONS-TAX_TYPE_1 = 'MWST'.
TAXCLASSIFICATIONS-TAXCLASS_1 = GT_ALV-TAXKM_CN.
APPEND TAXCLASSIFICATIONS.
CLEAR TAXCLASSIFICATIONS.
CLEAR RETURNMES[].
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
HEADDATA = HEADDATA
CLIENTDATA = CLIENTDATA
CLIENTDATAX = CLIENTDATAX
PLANTDATA = PLANTDATA
PLANTDATAX = PLANTDATAX
SALESDATA = SALESDATA
SALESDATAX = SALESDATAX
IMPORTING
RETURN = RETURN
TABLES
TAXCLASSIFICATIONS = TAXCLASSIFICATIONS[]
RETURNMESSAGES = RETURNMES[].
DELETE RETURNMES[] WHERE TYPE <> 'E' .
IF RETURNMES[] IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
SORT RETURNMES[] BY MESSAGE .
DELETE ADJACENT DUPLICATES FROM RETURNMES[] COMPARING MESSAGE.
LOOP AT RETURNMES.
GT_ALV-MESSAGE = GT_ALV-MESSAGE && ';' && RETURNMES-MESSAGE.
GT_ALV-MTYPE = 'E'.
CLEAR RETURNMES .
ENDLOOP.
ELSE .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
GT_ALV-MESSAGE = '操作成功!' .
GT_ALV-MTYPE = 'S'.
ENDIF.
ELSE .
GT_ALV-MESSAGE = '配置表无相关数据!' .
GT_ALV-MTYPE = 'E'.
ENDIF.
MODIFY GT_ALV.
ENDIF.
CLEAR GT_ALV.
CLEAR LV_MVKE.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
CLEAR S_LAYOUT.
S_LAYOUT-ZEBRA = 'X'.
S_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
S_LAYOUT-COLTAB_FIELDNAME = 'CELLCOLOR'. "单元格颜色内表字段
* s_layout-box_fieldname = 'BOX'.
PERFORM FRM_FILL_FIELD .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_SAVE = 'A'
IS_LAYOUT = S_LAYOUT
IT_FIELDCAT = GT_FIELDCAT
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
* i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
TABLES
T_OUTTAB = GT_ALV[].
ENDFORM.
FORM FRM_FILL_FIELD .
DATA: WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
DEFINE FILL_FIELD.
WA_FIELDCAT-FIELDNAME = &1.
WA_FIELDCAT-SELTEXT_L = &2.
IF WA_FIELDCAT-FIELDNAME = 'CKBOX' .
WA_FIELDCAT-CHECKBOX = 'X'.
WA_FIELDCAT-EDIT = 'X'.
ENDIF.
IF WA_FIELDCAT-FIELDNAME = 'MENGE_T' .
WA_FIELDCAT-REF_TABNAME = 'AUFM'.
WA_FIELDCAT-REF_FIELDNAME = 'MENGE'.
WA_FIELDCAT-OUTPUTLEN = '13'.
WA_FIELDCAT-EDIT = 'X'.
ENDIF .
IF WA_FIELDCAT-FIELDNAME = 'LGORT_T' .
WA_FIELDCAT-EDIT = 'X'.
ENDIF .
IF WA_FIELDCAT-FIELDNAME = 'PLNBEZ'
OR WA_FIELDCAT-FIELDNAME = 'MATNR'
OR WA_FIELDCAT-FIELDNAME = 'MATNRT'
.
WA_FIELDCAT-REF_TABNAME = 'MARA'.
WA_FIELDCAT-REF_FIELDNAME = 'MATNR'.
ENDIF.
IF WA_FIELDCAT-FIELDNAME = 'ARKTX' OR WA_FIELDCAT-FIELDNAME = 'WAKTX' .
WA_FIELDCAT-REF_TABNAME = 'VBAP'.
WA_FIELDCAT-REF_FIELDNAME = 'ARKTX'.
ENDIF.
IF WA_FIELDCAT-FIELDNAME = 'AUFNR' .
WA_FIELDCAT-REF_TABNAME = 'AUFK'.
WA_FIELDCAT-REF_FIELDNAME = 'AUFNR'.
ENDIF.
IF WA_FIELDCAT-FIELDNAME = 'BLDAT'
OR WA_FIELDCAT-FIELDNAME = 'BUDAT'
.
WA_FIELDCAT-REF_TABNAME = 'MATDOC'.
WA_FIELDCAT-REF_FIELDNAME = 'BLDAT'.
* WA_FIELDCAT-EDIT = 'X'.
ENDIF.
IF WA_FIELDCAT-FIELDNAME = 'MESSAGE' .
WA_FIELDCAT-OUTPUTLEN = '100'.
ENDIF.
IF WA_FIELDCAT-FIELDNAME = 'TYPBO'
OR WA_FIELDCAT-FIELDNAME = 'TYPAI'
.
WA_FIELDCAT-ICON = 'X'.
WA_FIELDCAT-OUTPUTLEN = '13'.
ENDIF.
APPEND WA_FIELDCAT TO GT_FIELDCAT.
CLEAR WA_FIELDCAT.
END-OF-DEFINITION.
FILL_FIELD :
'MATNR' '物料',
'WERKS' '工厂',
'MTART' '物料类型',
'VKORG' '销售组织',
'VTWEG' '分销渠道',
'SPART' '产品组',
'DWERK' '交货工厂',
'TAXKM_HK' '物料的税分类_HK',
'TAXKM_CN' '物料的税分类_CN',
'KTGRM' '科目设置组',
'MTVFP' '可用性检查',
'MTPOS' '项目类别组',
'MTPOS_MARA' '普通项目类别组',
'TRAGR' '运输组',
'LADGR' '装载组',
'MTYPE' '消息类型',
'MESSAGE' '消息'.
ENDFORM.
FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STANDARD_FULLSCREEN1'.
ENDFORM.
FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
IS_SELFIELD TYPE SLIS_SELFIELD.
DATA: REF TYPE REF TO CL_GUI_ALV_GRID.
DATA : LV_STABLE TYPE LVC_S_STBL. "刷新稳定性
RANGES: L_WERKS FOR T001W-WERKS.
RANGES: L_MATNR FOR MARA-MATNR.
DATA:L_BUKRS TYPE T001K-BUKRS.
LV_STABLE-ROW = '1'.
LV_STABLE-COL = '1'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF.
CALL METHOD REF->CHECK_CHANGED_DATA.
CASE I_UCOMM.
WHEN 'ALL'.
ENDCASE.
CALL METHOD REF->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
ENDFORM.
START-OF-SELECTION.
PERFORM FOM_GETDATA.
PERFORM FRM_DISPLAY.
SD-自动扩充销售视图(开发笔记)
最新推荐文章于 2023-02-09 08:35:14 发布