根据开发逻辑说明文档,知道我们需要设计什么样子的选择屏幕。如下:
其中单据类型有三种选择:分别是9、H、J三种,当选择9 物料编码禁用时显示相应的数据:
当选择H 物料编码禁用及禁用系统时显示相应数据:
主要过程:
- 新建一个程序,命名‘ZMMDMR001’,标题‘物料明细查询表’,类型选择‘可执行程序’,保存到‘本地对象’;
- 首先声明表,这些表是我们设计表以及定义类型时需要参考的表;
- 定义类型;
- 定义内表,用于存放数据;
- 定义选择屏幕;
- 初始化屏幕;
- 开始选择;
- 设计逻辑;
- 执行得出结果。
建好程序之后。
1.声明需要用的表和类型:
TABLES : MARA,ZWLFLH,KLAH,MARC,MAKT,ZMDMITEM03,CDHDR,MVKE,T023,ZTDJLX,ZMMUPDAPPLYITEM.(以Z开头的是我使用的自建表,以此理解)
TYPES : BEGIN OF TY_OUTPUT,
KLART TYPE KLAH-KLART, "类别种类
ZORDER TYPE ZWLFLH-ZORDER, "申请单号
ZDJLX TYPE ZWLFLH-ZDJLX, "单据类型
ZMX1 TYPE ZWLFLH-ZMX1, "单据类型描述
ZWLLB TYPE ZWLFLH-ZWLLB, "物料类型
ZMX2 TYPE ZWLFLH-ZMX2, "物料类型描述
BTYPE TYPE ZWLFLH-BTYPE, "业务类别
ZAPPLYER TYPE ZWLFLH-ZAPPLYER, "申请人ID
TECHDESC TYPE USR21-TECHDESC, "申请人姓名
ZAPPLYDEPT TYPE ZWLFLH-ZAPPLYDEPT, "申请部门
ZAPPLYDATE TYPE ZWLFLH-ZAPPLYDATE, "申请日期
ZDATE TYPE ZWLFLH-ZDATE, "提交日期
ZAPPLYREASON TYPE ZWLFLH-ZAPPLYREASON, "申请原因
ZSTATUS TYPE ZWLFLH-ZSTATUS, "审批状态
ZMX3 TYPE ZWLFLH-ZMX3, "审批状态描述
MATNR TYPE ZMDMITEM01-MATNR, "物料
MAKTX TYPE MAKT-MAKTX, "物料简称
WERKS TYPE ZMDMITEM01-WERKS, "工厂
NAME1 TYPE ZMDMITEM01-NAME1, "工厂名称
MMSTA TYPE ZMDMITEM01-MMSTA, "特定工厂的跨物料状态
MSTAE TYPE ZMDMITEM01-MSTAE, "跨工厂的跨物料状态
ZNO TYPE ZMDMITEM01-ZNO, "行项目
ZAPPNAM TYPE ZWLFLH-ZAPPNAM, "审批人
ZSPXX TYPE ZWLFLH-ZSPXX, "审批消息
ZJYXT TYPE ZWLFLH-ZJYXT, "禁用系统
ZJYXTXT TYPE ZWLFLH-ZJYXTXT, "禁用系统描述
ZSFCRM TYPE ZWLFLH-ZSFCRM, "是否传输CRM
MATKL TYPE MARA-MATKL, "物料组
WGBEZ TYPE T023T-WGBEZ, "物料组描述
VALUE_NEW TYPE ZMDMITEM03-VALUE_NEW, "新值==特定工厂店物料新状态
VALUE_OLD TYPE ZMDMITEM03-VALUE_OLD, "旧值==特定工厂的物料旧状态
VALUE_NEW2 TYPE ZMDMITEM03-VALUE_NEW2, "跨工厂的跨物料新状态
VALUE_OLD2 TYPE ZMDMITEM03-VALUE_OLD2, "跨工厂的跨物料旧状态
VMSTD_OLD TYPE ZMDMITEM04-VMSTD_OLD, "旧状态
VMSTD_NEW TYPE ZMDMITEM04-VMSTD_NEW, "新状态
MSTAE_NEW TYPE ZMDMITEM03-MSTAE_NEW,
MSTAE_OLD TYPE ZMDMITEM03-MSTAE_OLD,
USERNAME TYPE CDHDR-USERNAME, "用户名
UDATE TYPE CDHDR-UDATE, "日期
VKORG TYPE MVKE-VKORG, "销售组织
VTWEG TYPE MVKE-VTWEG, "分销渠道
DWERK TYPE ZMDMITEM02-DWERK, "交货工厂
VMSTA TYPE ZMDMITEM02-VMSTA, "指定分销链的状态
VMSTD TYPE ZMDMITEM02-VMSTD, "有效的日期
ZMMCODE TYPE ZMMUPDAPPLYITEM-ZMMCODE, "9的物料编码
ZMMSNAME TYPE ZMMUPDAPPLYITEM-ZMMSNAME, "9的物料简称
ZWERKS TYPE ZMMUPDAPPLYITEM-WERKS, "9的工厂
ZNAME1 TYPE ZMMUPDAPPLYITEM-NAME1, "9的工厂名称
ZZDATE TYPE ZMMUPDAPPLYITEM-ZDATE, "9的最近修改日期
ZTIME TYPE ZMMUPDAPPLYITEM-ZTIME, "9的最近修改时间
END OF TY_OUTPUT.
DATA : GT_OUT TYPE TABLE OF TY_OUTPUT. "声明一个输出内表(存放显示数据)
DATA : GS_OUT TYPE TY_OUTPUT. "声明一个输出内表2
根据需求设计选择屏幕内容:
SELECTION-SCREEN : BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
S_KLART FOR KLAH-KLART, "类别种类
S_ZORDER FOR ZWLFLH-ZORDER. "申请单号
SELECT-OPTIONS:
S_DJLX2 FOR ZTDJLX-ZDJLX1 NO INTERVALS NO-EXTENSION,"单选 且 没有下一步选择
S_MTART FOR MARA-MTART, "物料类型
S_MATNR FOR MARC-MATNR, "物料
S_MAKTX FOR MAKT-MAKTX, "物料描述
S_MATKL FOR MARA-MATKL, "物料组
S_WERKS FOR MARC-WERKS, "工厂
S_NEW FOR ZMDMITEM03-VALUE_NEW,"新值==特定工厂的物料新状态1
S_OLD FOR ZMDMITEM03-VALUE_OLD,"旧值==特定工厂的物料旧状态1
S_ZAPPL FOR ZWLFLH-ZAPPLYER, "申请人ID
S_ZAPDA FOR ZWLFLH-ZAPPLYDATE, "创建日期
S_ZDATE FOR ZWLFLH-ZDATE, "提交日期
S_UDATE FOR CDHDR-UDATE. "日期
SELECTION-SCREEN : END OF BLOCK BK1.
代码解释:首先定义一个模块BLOCK,在里面设计我们屏幕,前面的如S_KLART 是自建类别种类的变量,参考KLAH表中的KLART字段,逐次类推。其中,单据类型我们要求是从多选框里面必须选出一个,NO INTERVALS 限制只能输入一个单元(去上限),NO EXTENSION限制只能输入一行数据,PARAMEMTERS是定义一个单值,AS CHECKBOX设为单选勾选框。
开始编写程序执行入口STAR-OF-SELECTION…END-OF-SELECTION(当点击闹钟时开始执行):
因为我的单据类型是单选且必选,所以我首先需要判断用户选的的单据类型。此外,
START-OF-SELECTION.
PERFORM SELECT_TYPE. "选择单据类型
FORM SELECT_TYPE .
IF S_DJLX2-LOW = 'H'.
PERFORM GETDATA_H.
PERFORM DISPLAY_HH. "表示未选checkbox 复选框的 销售组织
ELSEIF S_DJLX2-LOW = '9'.
PERFORM GETDATA_9.
PERFORM DISPLAY_9.
ELSEIF S_DJLX2-LOW = 'J'.
PERFORM GETDATA_J.
PERFORM DISPLAY_JJ. "表示选择checkbox 复选框的 销售组织
ENDIF.
ENDFORM.
END-OF-SELECTION.
代码解释:
通过PERFORM声明一个函数(SELECT_TYPE)用于设计选择单据类型,用条件选择进行判断,如果选择的类型是H则调用GETDATA_H获取数据,调用DISPLAY_H显示数据。单据类型9、H、J三种类型的读取方式显示方式都差不多,这里只说明其中一种:H。
获取数据:
FORM GETDATA_H .
SELECT ZWLFLH~ZORDER, "申请单号
ZWLFLH~ZDJLX, "单据类型
ZWLFLH~ZMX1, "单据类型描述
ZWLFLH~ZWLLB, "物料类型
ZWLFLH~ZMX2, "物料类型描述
ZWLFLH~BTYPE, "业务类别
ZWLFLH~ZAPPLYER, "申请人ID
USR21~TECHDESC, "申请人姓名
ZWLFLH~ZAPPLYDEPT, "申请部门
ZWLFLH~ZAPPLYDATE, "申请日期
ZWLFLH~ZDATE, "提交日期
ZWLFLH~ZAPPLYREASON, "申请原因
ZWLFLH~ZSTATUS, "审批状态
ZWLFLH~ZMX3, "审批状态描述
ZWLFLH~ZAPPNAM, "审批人
ZWLFLH~ZSPXX, "审批消息
ZWLFLH~ZJYXT, "禁用系统
ZWLFLH~ZJYXTXT, "禁用系统描述
ZWLFLH~ZSFCRM, "是否传输CRM
ZMDMITEM01~ZNO, "行项目
ZMDMITEM01~MATNR,"物料编码
ZMDMITEM01~MAKTX,"物料描述
ZMDMITEM01~WERKS,"工厂
ZMDMITEM01~NAME1,"工厂名称
ZMDMITEM01~MMSTA,"特定工厂的跨物料状态
ZMDMITEM01~MSTAE"跨工厂物料状态
INTO CORRESPONDING FIELDS OF TABLE @GT_OUT
FROM ZWLFLH
LEFT JOIN ZMDMITEM01 ON ZMDMITEM01~ZORDER = ZWLFLH~ZORDER
LEFT JOIN USR21 ON USR21~BNAME = ZWLFLH~ZAPPLYER
WHERE ZMDMITEM01~WERKS IN @S_WERKS
AND ZWLFLH~ZDJLX = 'H'
AND ZWLFLH~ZORDER IN @S_ZORDER
AND ZMDMITEM01~MATNR IN @S_MATNR
AND ZWLFLH~ZWLLB IN @S_MTART
AND ZWLFLH~ZAPPLYER IN @S_ZAPPL
AND ZWLFLH~ZDATE IN @S_ZDATE
AND ZWLFLH~ZAPPLYDATE IN @S_ZAPDA.
SELECT MARA~MATNR,MARA~MATKL,T023T~WGBEZ INTO TABLE @DATA(LT_MATKL) "临时表
FROM MARA
LEFT JOIN T023T ON MARA~MATKL = T023T~MATKL AND T023T~SPRAS = '1' "中英文描述要把技术段SPARS 进行未转换赋值(‘1’代表中文)
FOR ALL ENTRIES IN @GT_OUT WHERE MATNR = @GT_OUT-MATNR.
SORT LT_MATKL BY MATNR.
LOOP AT GT_OUT INTO GS_OUT .
READ TABLE LT_MATKL INTO DATA(LV_MATKL) WITH KEY MATNR = GS_OUT-MATNR BINARY SEARCH. " 二分法
IF SY-SUBRC = 0.
GS_OUT-MATKL = LV_MATKL-MATKL.
GS_OUT-WGBEZ = LV_MATKL-WGBEZ.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = GS_OUT-MATNR
IMPORTING
OUTPUT = GS_OUT-MATNR.
MODIFY GT_OUT FROM GS_OUT.
CLEAR:LV_MATKL.
ENDLOOP.
SORT GT_OUT BY ZORDER ZNO. "默认按照ZODER(先)、ZNO(后)排序
IF S_MATKL[] IS NOT INITIAL .
DELETE GT_OUT WHERE MATKL NOT IN S_MATKL.
ENDIF.
ENDFORM.
代码解释:
讲我们需要获取的数据用SQL语句取出来,存放到我们先头定义的内表GT_OUT中,通过INTO CORRESPONDING FIELD OF 定义表,就会自动显示在对应位置,从主表ZWLFLH读取,关联表ZMDMITEM01、表USR21,循环条件包含响应定义选择屏幕的变量,语句就背住就好,这里不做详细解释,下列代码作额外说明:
因为先头关联出来的表数据是没有物料组MATKL字段数据的,所以需要通过现有的物料编号去与物料表(MARA)去关联,取出表MARA中的物料组(MATKL),再通过物料组(MATKL)关联表T023T,取出物料组描述字段(WGBEZ)存入临时表@DATA(LT_MATKL)中,这里取出的是存在在表GT_OUT中的物料号(MATNR的相关数据)即:
SELECT MARA~MATNR,MARA~MATKL,T023T~WGBEZ INTO TABLE @DATA(LT_MATKL) "临时表
FROM MARA
LEFT JOIN T023T ON MARA~MATKL = T023T~MATKL AND T023T~SPRAS = '1' "中英文描述要把技术段SPARS 进行未转换赋值(‘1’代表中文)
FOR ALL ENTRIES IN @GT_OUT WHERE MATNR = @GT_OUT-MATNR.
。
再通过LOOP循环遍历表LT_MATKL,把表LT_MATKL中的数据通过物料号(MATNR)取出存入临时表LV_MATKL中,并赋给表GS_OUT,最后通过MODIFY操作存入表GT_OUT;
函数:CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_OUTPUT’是为了去除前导零,如果把OUTPUT改成INPUT则是添加前导零。
显示数据:
FORM DISPLAY_H .
DATA : GT_FIELDCAT TYPE LVC_T_FCAT,
GS_FIELDCAT TYPE LVC_S_FCAT,
G_REPID TYPE SY-REPID.
DEFINE M_BUILD_FIELDCAT. "添加显示字段信息
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-scrtext_l = &2.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
CLEAR : GT_FIELDCAT[].
M_BUILD_FIELDCAT 'ZORDER' '申请单号'.
M_BUILD_FIELDCAT 'ZDJLX' '单据类型'.
M_BUILD_FIELDCAT 'ZMX1' '单据类型描述'.
M_BUILD_FIELDCAT 'ZWLLB' '物料类型'.
M_BUILD_FIELDCAT 'ZMX2' '物料类型描述'.
M_BUILD_FIELDCAT 'BTYPE' '业务类别'.
M_BUILD_FIELDCAT ' ' '业务类别描述'.
M_BUILD_FIELDCAT 'ZAPPLYER' '申请人ID'.
M_BUILD_FIELDCAT 'TECHDESC' '申请人姓名'.
M_BUILD_FIELDCAT 'ZAPPLYDEPT' '申请部门'.
M_BUILD_FIELDCAT 'ZAPPLYDATE' '申请日期'.
M_BUILD_FIELDCAT 'ZDATE' '提交日期'.
M_BUILD_FIELDCAT 'ZAPPLYREASON' '申请原因'.
M_BUILD_FIELDCAT 'ZSTATUS' '审批状态'.
M_BUILD_FIELDCAT 'ZMX3' '审批状态描述'.
M_BUILD_FIELDCAT 'ZAPPNAM' '审批人'.
M_BUILD_FIELDCAT 'ZSPXX' '审批消息'.
M_BUILD_FIELDCAT 'ZJYXT' '禁用系统'.
M_BUILD_FIELDCAT 'ZJYXTXT' '禁用系统描述'.
M_BUILD_FIELDCAT 'ZSFCRM' '是否传入CRM'.
M_BUILD_FIELDCAT '' '工厂状态'.
M_BUILD_FIELDCAT 'ZNO' '行项目'.
M_BUILD_FIELDCAT 'MATNR' '物料编号'.
M_BUILD_FIELDCAT 'MAKTX' '物料描述'.
M_BUILD_FIELDCAT 'MATKL' '物料组'.
M_BUILD_FIELDCAT 'WGBEZ' '物料组描述'.
M_BUILD_FIELDCAT 'WERKS' '工厂'.
M_BUILD_FIELDCAT 'NAME1' '工厂名称'.
M_BUILD_FIELDCAT 'MMSTA' '特定工厂的物料状态'.
M_BUILD_FIELDCAT 'MSTAE' '跨工厂物料状态'.
G_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IT_FIELDCAT_LVC = GT_FIELDCAT
I_DEFAULT = 'X'
I_GRID_TITLE = '' "表格标题
TABLES
T_OUTTAB = GT_OUT "输出表
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM.
代码解释:
首先要定义M_BUILD_FIELDCAT来显示添加字段信息,M_BUILD_FIELDCAT ‘ZORDER’ ‘申请单号’,分别对应的是字段数据和表头信息,这一部分主要注意T_OUTTAB 等于前面声明的输出内表,其余的可以直接复制修改字段信息就可以,学习尚浅,目前我还解释不出来,要是有大佬能再评论区解释下的话真的非常感谢!
运行结果:
选择屏幕:
选择单据类型9 物料编码禁用:
选择单据类型H 物料编码禁用及禁用系统:
选择单据类型J 物料编码解禁系统:
最后附上全部代码:
*&---------------------------------------------------------------------*
*& Report ZMMDMR001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZMMDMR001.
TABLES : MARA,ZWLFLH,KLAH,MARC,MAKT,ZMDMITEM03,CDHDR,MVKE,T023,ZTDJLX,ZMMUPDAPPLYITEM.
TYPES : BEGIN OF TY_OUTPUT,
KLART TYPE KLAH-KLART, "类别种类
ZORDER TYPE ZWLFLH-ZORDER, "申请单号
ZDJLX TYPE ZWLFLH-ZDJLX, "单据类型
ZMX1 TYPE ZWLFLH-ZMX1, "单据类型描述
ZWLLB TYPE ZWLFLH-ZWLLB, "物料类型
ZMX2 TYPE ZWLFLH-ZMX2, "物料类型描述
BTYPE TYPE ZWLFLH-BTYPE, "业务类别
ZAPPLYER TYPE ZWLFLH-ZAPPLYER, "申请人ID
TECHDESC TYPE USR21-TECHDESC, "申请人姓名
ZAPPLYDEPT TYPE ZWLFLH-ZAPPLYDEPT, "申请部门
ZAPPLYDATE TYPE ZWLFLH-ZAPPLYDATE, "申请日期
ZDATE TYPE ZWLFLH-ZDATE, "提交日期
ZAPPLYREASON TYPE ZWLFLH-ZAPPLYREASON, "申请原因
ZSTATUS TYPE ZWLFLH-ZSTATUS, "审批状态
ZMX3 TYPE ZWLFLH-ZMX3, "审批状态描述
MATNR TYPE ZMDMITEM01-MATNR, "物料
MAKTX TYPE MAKT-MAKTX, "物料简称
WERKS TYPE ZMDMITEM01-WERKS, "工厂
NAME1 TYPE ZMDMITEM01-NAME1, "工厂名称
MMSTA TYPE ZMDMITEM01-MMSTA, "特定工厂的跨物料状态
MSTAE TYPE ZMDMITEM01-MSTAE, "跨工厂的跨物料状态
ZNO TYPE ZMDMITEM01-ZNO, "行项目
ZAPPNAM TYPE ZWLFLH-ZAPPNAM, "审批人
ZSPXX TYPE ZWLFLH-ZSPXX, "审批消息
ZJYXT TYPE ZWLFLH-ZJYXT, "禁用系统
ZJYXTXT TYPE ZWLFLH-ZJYXTXT, "禁用系统描述
ZSFCRM TYPE ZWLFLH-ZSFCRM, "是否传输CRM
MATKL TYPE MARA-MATKL, "物料组
WGBEZ TYPE T023T-WGBEZ, "物料组描述
VALUE_NEW TYPE ZMDMITEM03-VALUE_NEW, "新值==特定工厂店物料新状态
VALUE_OLD TYPE ZMDMITEM03-VALUE_OLD, "旧值==特定工厂的物料旧状态
VALUE_NEW2 TYPE ZMDMITEM03-VALUE_NEW2, "跨工厂的跨物料新状态
VALUE_OLD2 TYPE ZMDMITEM03-VALUE_OLD2, "跨工厂的跨物料旧状态
VMSTD_OLD TYPE ZMDMITEM04-VMSTD_OLD, "旧状态
VMSTD_NEW TYPE ZMDMITEM04-VMSTD_NEW, "新状态
MSTAE_NEW TYPE ZMDMITEM03-MSTAE_NEW,
MSTAE_OLD TYPE ZMDMITEM03-MSTAE_OLD,
USERNAME TYPE CDHDR-USERNAME, "用户名
UDATE TYPE CDHDR-UDATE, "日期
VKORG TYPE MVKE-VKORG, "销售组织
VTWEG TYPE MVKE-VTWEG, "分销渠道
DWERK TYPE ZMDMITEM02-DWERK, "交货工厂
VMSTA TYPE ZMDMITEM02-VMSTA, "指定分销链的状态
VMSTD TYPE ZMDMITEM02-VMSTD, "有效的日期
ZMMCODE TYPE ZMMUPDAPPLYITEM-ZMMCODE, "9的物料编码
ZMMSNAME TYPE ZMMUPDAPPLYITEM-ZMMSNAME, "9的物料简称
ZWERKS TYPE ZMMUPDAPPLYITEM-WERKS, "9的工厂
ZNAME1 TYPE ZMMUPDAPPLYITEM-NAME1, "9的工厂名称
ZZDATE TYPE ZMMUPDAPPLYITEM-ZDATE, "9的最近修改日期
ZTIME TYPE ZMMUPDAPPLYITEM-ZTIME, "9的最近修改时间
END OF TY_OUTPUT.
DATA : GT_OUT TYPE TABLE OF TY_OUTPUT.
DATA : GS_OUT TYPE TY_OUTPUT.
SELECTION-SCREEN : BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
S_KLART FOR KLAH-KLART, "类别种类
S_ZORDER FOR ZWLFLH-ZORDER. "申请单号
SELECT-OPTIONS:
S_DJLX2 FOR ZTDJLX-ZDJLX1 NO INTERVALS NO-EXTENSION, "单选 且 没有下一步选择 "单据类型,ZTDJLX是新建的表
S_MTART FOR MARA-MTART, "物料类型
S_MATNR FOR MARC-MATNR, "物料
S_MAKTX FOR MAKT-MAKTX, "物料描述
S_MATKL FOR MARA-MATKL, "物料组
S_WERKS FOR MARC-WERKS, "工厂
S_NEW FOR ZMDMITEM03-VALUE_NEW,"新值==特定工厂的物料新状态1
S_OLD FOR ZMDMITEM03-VALUE_OLD,"旧值==特定工厂的物料旧状态1
S_ZAPPL FOR ZWLFLH-ZAPPLYER, "申请人ID
S_ZAPDA FOR ZWLFLH-ZAPPLYDATE, "创建日期
S_ZDATE FOR ZWLFLH-ZDATE, "提交日期
S_UDATE FOR CDHDR-UDATE. "日期
PARAMETERS :
S_VKORG AS CHECKBOX. "销售组织
SELECTION-SCREEN : END OF BLOCK BK1.
START-OF-SELECTION.
PERFORM SELECT_TYPE. "选择单据类型
*&---------------------------------------------------------------------*
*& Form SELECT_TYPE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SELECT_TYPE .
IF S_DJLX2-LOW = 'H'.
PERFORM GETDATA_H.
PERFORM DISPLAY_HH.
ELSEIF S_DJLX2-LOW = '9'.
PERFORM GETDATA_9.
PERFORM DISPLAY_9.
ELSEIF S_DJLX2-LOW = 'J'.
PERFORM GETDATA_J.
PERFORM DISPLAY_JJ.
ENDIF.
ENDFORM.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form GETDATA_J
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM GETDATA_H .
SELECT ZWLFLH~ZORDER, "申请单号
ZWLFLH~ZDJLX, "单据类型
ZWLFLH~ZMX1, "单据类型描述
ZWLFLH~ZWLLB, "物料类型
ZWLFLH~ZMX2, "物料类型描述
ZWLFLH~BTYPE, "业务类别
ZWLFLH~ZAPPLYER, "申请人ID
USR21~TECHDESC, "申请人姓名
ZWLFLH~ZAPPLYDEPT, "申请部门
ZWLFLH~ZAPPLYDATE, "申请日期
ZWLFLH~ZDATE, "提交日期
ZWLFLH~ZAPPLYREASON, "申请原因
ZWLFLH~ZSTATUS, "审批状态
ZWLFLH~ZMX3, "审批状态描述
ZWLFLH~ZAPPNAM, "审批人
ZWLFLH~ZSPXX, "审批消息
ZWLFLH~ZJYXT, "禁用系统
ZWLFLH~ZJYXTXT, "禁用系统描述
ZWLFLH~ZSFCRM, "是否传输CRM
ZMDMITEM01~ZNO, "行项目
ZMDMITEM01~MATNR,"物料编码
ZMDMITEM01~MAKTX,"物料描述
ZMDMITEM01~WERKS,"工厂
ZMDMITEM01~NAME1,"工厂名称
ZMDMITEM01~MMSTA,"特定工厂的跨物料状态
ZMDMITEM01~MSTAE"跨工厂物料状态
INTO CORRESPONDING FIELDS OF TABLE @GT_OUT
FROM ZWLFLH
LEFT JOIN ZMDMITEM01 ON ZMDMITEM01~ZORDER = ZWLFLH~ZORDER
LEFT JOIN USR21 ON USR21~BNAME = ZWLFLH~ZAPPLYER
WHERE ZMDMITEM01~WERKS IN @S_WERKS
AND ZWLFLH~ZDJLX = 'H'
AND ZWLFLH~ZORDER IN @S_ZORDER
AND ZMDMITEM01~MATNR IN @S_MATNR
AND ZWLFLH~ZWLLB IN @S_MTART
AND ZWLFLH~ZAPPLYER IN @S_ZAPPL
AND ZWLFLH~ZDATE IN @S_ZDATE
AND ZWLFLH~ZAPPLYDATE IN @S_ZAPDA.
SELECT MARA~MATNR,MARA~MATKL,T023T~WGBEZ INTO TABLE @DATA(LT_MATKL) "临时表
FROM MARA
LEFT JOIN T023T ON MARA~MATKL = T023T~MATKL AND T023T~SPRAS = '1' "中英文描述要把技术段SPARS 进行未转换赋值(‘1’代表中文)
FOR ALL ENTRIES IN @GT_OUT WHERE MATNR = @GT_OUT-MATNR.
SORT LT_MATKL BY MATNR.
LOOP AT GT_OUT INTO GS_OUT .
READ TABLE LT_MATKL INTO DATA(LV_MATKL) WITH KEY MATNR = GS_OUT-MATNR BINARY SEARCH. " 二分法
IF SY-SUBRC = 0.
GS_OUT-MATKL = LV_MATKL-MATKL.
GS_OUT-WGBEZ = LV_MATKL-WGBEZ.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = GS_OUT-MATNR
IMPORTING
OUTPUT = GS_OUT-MATNR.
MODIFY GT_OUT FROM GS_OUT.
CLEAR:LV_MATKL.
ENDLOOP.
SORT GT_OUT BY ZORDER ZNO. "默认按照ZODER(先)、ZNO(后)排序
IF S_MATKL[] IS NOT INITIAL .
DELETE GT_OUT WHERE MATKL NOT IN S_MATKL.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_HH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM DISPLAY_HH .
DATA : GT_FIELDCAT TYPE LVC_T_FCAT,
GS_FIELDCAT TYPE LVC_S_FCAT,
G_REPID TYPE SY-REPID.
DEFINE M_BUILD_FIELDCAT. "添加显示字段信息
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-scrtext_l = &2.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
CLEAR : GT_FIELDCAT[].
M_BUILD_FIELDCAT 'ZORDER' '申请单号'.
M_BUILD_FIELDCAT 'ZDJLX' '单据类型'.
M_BUILD_FIELDCAT 'ZMX1' '单据类型描述'.
M_BUILD_FIELDCAT 'ZWLLB' '物料类型'.
M_BUILD_FIELDCAT 'ZMX2' '物料类型描述'.
M_BUILD_FIELDCAT 'BTYPE' '业务类别'.
M_BUILD_FIELDCAT ' ' '业务类别描述'.
M_BUILD_FIELDCAT 'ZAPPLYER' '申请人ID'.
M_BUILD_FIELDCAT 'TECHDESC' '申请人姓名'.
M_BUILD_FIELDCAT 'ZAPPLYDEPT' '申请部门'.
M_BUILD_FIELDCAT 'ZAPPLYDATE' '申请日期'.
M_BUILD_FIELDCAT 'ZDATE' '提交日期'.
M_BUILD_FIELDCAT 'ZAPPLYREASON' '申请原因'.
M_BUILD_FIELDCAT 'ZSTATUS' '审批状态'.
M_BUILD_FIELDCAT 'ZMX3' '审批状态描述'.
M_BUILD_FIELDCAT 'ZAPPNAM' '审批人'.
M_BUILD_FIELDCAT 'ZSPXX' '审批消息'.
M_BUILD_FIELDCAT 'ZJYXT' '禁用系统'.
M_BUILD_FIELDCAT 'ZJYXTXT' '禁用系统描述'.
M_BUILD_FIELDCAT 'ZSFCRM' '是否传入CRM'.
M_BUILD_FIELDCAT '' '销售状态'.
M_BUILD_FIELDCAT 'ZNO' '行项目'.
M_BUILD_FIELDCAT 'MATNR' '物料编号'.
M_BUILD_FIELDCAT 'MAKTX' '物料描述'.
M_BUILD_FIELDCAT 'MATKL' '物料组'.
M_BUILD_FIELDCAT 'WGBEZ' '物料组描述'.
M_BUILD_FIELDCAT 'VKORG' '销售组织'.
M_BUILD_FIELDCAT 'VTWEG' '分销渠道'.
M_BUILD_FIELDCAT 'DWERK' '交货工厂'.
M_BUILD_FIELDCAT 'VMSTA' '指定分销的物料状态'.
M_BUILD_FIELDCAT 'VMSTD' '有效的日期'.
G_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IT_FIELDCAT_LVC = GT_FIELDCAT
I_DEFAULT = 'X'
I_GRID_TITLE = '' "表格标题
TABLES
T_OUTTAB = GT_OUT
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GETDATA_9
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM GETDATA_9 .
SELECT
ZWLFLH~ZORDER, "申请单号
ZWLFLH~ZDJLX, "单据类型
ZWLFLH~ZMX1, "单据类型描述
ZWLFLH~ZWLLB, "物料类型
ZWLFLH~ZMX2, "物料类型描述
ZWLFLH~BTYPE, "业务类别
ZWLFLH~ZAPPLYER, "申请人ID
USR21~TECHDESC, "申请人姓名
ZWLFLH~ZAPPLYDATE, "申请日期
ZWLFLH~ZDATE, "提交日期
ZWLFLH~ZAPPLYREASON, "申请原因
ZWLFLH~ZSTATUS, "审批状态
ZWLFLH~ZMX3, "审批状态描述
ZMMUPDAPPLYITEM~ZMMCODE,"物料编码
ZMMUPDAPPLYITEM~ZMMSNAME,"物料简称
ZMMUPDAPPLYITEM~WERKS AS ZWERKS,"工厂
ZMMUPDAPPLYITEM~NAME1 AS ZNAME1,"工厂名称
ZMDMITEM01~MMSTA,"特定工厂的跨物料状态
ZMDMITEM01~MSTAE,"跨工厂物料状态
ZMMUPDAPPLYITEM~ZDATE AS ZZDATE,"最近修改日期 PS:同样字段名在不同的表中显示时,
" 要区别赋值,通过AS 来实现
ZMMUPDAPPLYITEM~ZTIME"最近修改时间
INTO CORRESPONDING FIELDS OF TABLE @GT_OUT
FROM ZWLFLH
LEFT JOIN ZMDMITEM01 ON ZMDMITEM01~ZORDER = ZWLFLH~ZORDER
LEFT JOIN ZMMUPDAPPLYITEM ON ZMMUPDAPPLYITEM~ZORDER = ZWLFLH~ZORDER
LEFT JOIN USR21 ON USR21~BNAME = ZWLFLH~ZAPPLYER
WHERE ZMMUPDAPPLYITEM~WERKS IN @S_WERKS
AND ZWLFLH~ZORDER IN @S_ZORDER
AND ZWLFLH~ZDJLX = '9'
AND ZWLFLH~ZWLLB IN @S_MTART
AND ZMMUPDAPPLYITEM~ZMMCODE IN @S_MATNR
AND ZWLFLH~ZAPPLYER IN @S_ZAPPL
AND ZWLFLH~ZDATE IN @S_ZDATE
AND ZWLFLH~ZAPPLYDATE IN @S_ZAPDA.
SELECT MARA~MATNR,MARA~MATKL,T023T~WGBEZ INTO TABLE @DATA(LT_MATKL) "临时表
FROM MARA
LEFT JOIN T023T ON MARA~MATKL = T023T~MATKL AND T023T~SPRAS = '1' "中英文描述要把技术段SPARS 进行未转换赋值(‘1’代表中文)
FOR ALL ENTRIES IN @GT_OUT WHERE MATNR = @GT_OUT-MATNR.
SORT LT_MATKL BY MATNR.
LOOP AT GT_OUT INTO GS_OUT .
READ TABLE LT_MATKL INTO DATA(LV_MATKL) WITH KEY MATNR = GS_OUT-ZMMCODE BINARY SEARCH. " 二分法
IF SY-SUBRC = 0.
GS_OUT-MATKL = LV_MATKL-MATKL.
GS_OUT-WGBEZ = LV_MATKL-WGBEZ.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = GS_OUT-ZMMCODE
IMPORTING
OUTPUT = GS_OUT-ZMMCODE.
MODIFY GT_OUT FROM GS_OUT.
CLEAR:LV_MATKL.
ENDLOOP.
IF S_MATKL[] IS NOT INITIAL .
DELETE GT_OUT WHERE MATKL NOT IN S_MATKL.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_9
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM DISPLAY_9 .
DATA : GT_FIELDCAT TYPE LVC_T_FCAT,
GS_FIELDCAT TYPE LVC_S_FCAT,
G_REPID TYPE SY-REPID.
DEFINE M_BUILD_FIELDCAT. "添加显示字段信息
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-scrtext_l = &2.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
CLEAR : GT_FIELDCAT[].
M_BUILD_FIELDCAT 'ZORDER' '申请单号'.
M_BUILD_FIELDCAT 'ZDJLX' '单据类型'.
M_BUILD_FIELDCAT 'ZMX1' '单据类型描述'.
M_BUILD_FIELDCAT 'ZWLLB' '物料类型'.
M_BUILD_FIELDCAT 'ZMX2' '物料类型描述'.
M_BUILD_FIELDCAT 'BTYPE' '业务类别'.
M_BUILD_FIELDCAT ' ' '业务类别描述'.
M_BUILD_FIELDCAT 'ZAPPLYER' '申请人ID'.
M_BUILD_FIELDCAT 'TECHDESC' '申请人姓名'.
M_BUILD_FIELDCAT 'ZAPPLYDEPT' '申请部门'.
M_BUILD_FIELDCAT 'ZAPPLYDATE' '申请日期'.
M_BUILD_FIELDCAT 'ZDATE' '提交日期'.
M_BUILD_FIELDCAT 'ZAPPLYREASON' '申请原因'.
M_BUILD_FIELDCAT 'ZSTATUS' '审批状态'.
M_BUILD_FIELDCAT 'ZMX3' '审批状态描述'.
M_BUILD_FIELDCAT 'ZMMCODE' '物料编码'.
M_BUILD_FIELDCAT 'ZMMSNAME' '物料简称'.
M_BUILD_FIELDCAT 'MATKL' '物料组'.
M_BUILD_FIELDCAT 'WGBEZ' '物料组描述'.
M_BUILD_FIELDCAT 'ZWERKS' '工厂'.
M_BUILD_FIELDCAT 'ZNAME1' '工厂名称'.
M_BUILD_FIELDCAT 'MMSTA' '特定工厂的物料状态'.
M_BUILD_FIELDCAT 'MSTAE' '跨工厂物料状态'.
M_BUILD_FIELDCAT 'ZZDATE' '最近修改日期'.
M_BUILD_FIELDCAT 'ZTIME' '最近修改时间'.
G_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IT_FIELDCAT_LVC = GT_FIELDCAT
I_DEFAULT = 'X'
I_GRID_TITLE = '' "表格标题
TABLES
T_OUTTAB = GT_OUT
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GETDATA_J
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM GETDATA_J .
SELECT ZWLFLH~ZORDER, "申请单号
ZWLFLH~ZDJLX, "单据类型
ZWLFLH~ZMX1, "单据类型描述
ZWLFLH~ZWLLB, "物料类型
ZWLFLH~ZMX2, "物料类型描述
ZWLFLH~BTYPE, "业务类别
ZWLFLH~ZAPPLYER, "申请人ID
USR21~TECHDESC, "申请人姓名
ZWLFLH~ZAPPLYDEPT, "申请部门
ZWLFLH~ZAPPLYDATE, "申请日期
ZWLFLH~ZDATE, "提交日期
ZWLFLH~ZAPPLYREASON, "申请原因
ZWLFLH~ZSTATUS, "审批状态
ZWLFLH~ZMX3, "审批状态描述
ZWLFLH~ZAPPNAM, "审批人
ZMDMITEM03~ZNO, "行项目
ZMDMITEM03~MATNR, "物料编码
ZMDMITEM03~MAKTX, "物料描述
ZMDMITEM03~WERKS, "工厂
ZMDMITEM03~NAME1, "工厂名称
ZMDMITEM03~VALUE_OLD, "特定工厂的物料旧状态
ZMDMITEM03~VALUE_NEW, "特定工厂物料新状态
ZMDMITEM03~VALUE_OLD2, "跨工厂物料旧状态
ZMDMITEM03~VALUE_NEW2 "跨工厂物料新状态
INTO CORRESPONDING FIELDS OF TABLE @GT_OUT
FROM ZWLFLH
LEFT JOIN ZMDMITEM03 ON ZMDMITEM03~ZORDER = ZWLFLH~ZORDER
LEFT JOIN USR21 ON USR21~BNAME = ZWLFLH~ZAPPLYER
WHERE ZMDMITEM03~WERKS IN @S_WERKS "工厂
AND ZWLFLH~ZDJLX = 'J' "单据类型
AND ZWLFLH~ZORDER IN @S_ZORDER "申请单号
AND ZMDMITEM03~MATNR IN @S_MATNR
AND ZWLFLH~ZWLLB IN @S_MTART "物料号
AND ZMDMITEM03~VALUE_NEW IN @S_NEW "新值
AND ZMDMITEM03~VALUE_OLD IN @S_OLD "旧值
AND ZWLFLH~ZAPPLYER IN @S_ZAPPL
AND ZWLFLH~ZDATE IN @S_ZDATE
AND ZWLFLH~ZAPPLYDATE IN @S_ZAPDA. "日期
SELECT MARA~MATNR,MARA~MATKL,T023T~WGBEZ INTO TABLE @DATA(LT_MATKL) "临时表
FROM MARA
LEFT JOIN T023T ON MARA~MATKL = T023T~MATKL AND T023T~SPRAS = '1' "中英文描述要把技术段SPARS 进行未转换赋值(‘1’代表中文)
FOR ALL ENTRIES IN @GT_OUT WHERE MATNR = @GT_OUT-MATNR.
SORT LT_MATKL BY MATNR.
LOOP AT GT_OUT INTO GS_OUT .
READ TABLE LT_MATKL INTO DATA(LV_MATKL) WITH KEY MATNR = GS_OUT-MATNR BINARY SEARCH. " 二分法
IF SY-SUBRC = 0.
GS_OUT-MATKL = LV_MATKL-MATKL.
GS_OUT-WGBEZ = LV_MATKL-WGBEZ.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = GS_OUT-MATNR
IMPORTING
OUTPUT = GS_OUT-MATNR.
MODIFY GT_OUT FROM GS_OUT.
CLEAR:LV_MATKL.
ENDLOOP.
SORT GT_OUT BY ZORDER ZNO. "默认按照ZODER(先)、ZNO(后)排序
IF S_MATKL[] IS NOT INITIAL .
DELETE GT_OUT WHERE MATKL NOT IN S_MATKL.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_JJ
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM DISPLAY_JJ .
DATA : GT_FIELDCAT TYPE LVC_T_FCAT,
GS_FIELDCAT TYPE LVC_S_FCAT,
G_REPID TYPE SY-REPID.
DEFINE M_BUILD_FIELDCAT. "添加显示字段信息
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1. "对应第一项
gs_fieldcat-scrtext_l = &2. "对应第二项
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
CLEAR : GT_FIELDCAT[].
M_BUILD_FIELDCAT 'ZORDER' '申请单号'.
M_BUILD_FIELDCAT 'ZDJLX' '单据类型'.
M_BUILD_FIELDCAT 'ZMX1' '单据类型描述'.
M_BUILD_FIELDCAT 'ZWLLB' '物料类型'.
M_BUILD_FIELDCAT 'ZMX2' '物料类型描述'.
M_BUILD_FIELDCAT 'BTYPE' '业务类别'.
M_BUILD_FIELDCAT ' ' '业务类别描述'.
M_BUILD_FIELDCAT 'ZAPPLYER' '申请人ID'.
M_BUILD_FIELDCAT 'TECHDESC' '申请人姓名'.
M_BUILD_FIELDCAT 'ZAPPLYDEPT' '申请部门'.
M_BUILD_FIELDCAT 'ZAPPLYDATE' '申请日期'.
M_BUILD_FIELDCAT 'ZDATE' '提交日期'.
M_BUILD_FIELDCAT 'ZAPPLYREASON' '申请原因'.
M_BUILD_FIELDCAT 'ZSTATUS' '审批状态'.
M_BUILD_FIELDCAT 'ZMX3' '审批状态描述'.
M_BUILD_FIELDCAT 'ZAPPNAM' '审批人'.
M_BUILD_FIELDCAT '' '销售状态'.
M_BUILD_FIELDCAT 'ZNO' '行项目'.
M_BUILD_FIELDCAT 'MATNR' '物料编号'.
M_BUILD_FIELDCAT 'MAKTX' '物料描述'.
M_BUILD_FIELDCAT 'MATKL' '物料组'.
M_BUILD_FIELDCAT 'WGBEZ' '物料组描述'.
M_BUILD_FIELDCAT 'VKORG' '销售组织'.
M_BUILD_FIELDCAT 'VTWEG' '分销渠道'.
M_BUILD_FIELDCAT 'DWERK' '交货工厂'.
M_BUILD_FIELDCAT 'VALUE_OLD' '旧状态'.
M_BUILD_FIELDCAT 'VMSTD_OLD' '旧值禁用生效日期'.
M_BUILD_FIELDCAT 'VALUE_NEW' '新状态'.
M_BUILD_FIELDCAT 'VMSTD_NEW' '新值禁用生效时间'.
G_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IT_FIELDCAT_LVC = GT_FIELDCAT
I_DEFAULT = 'X'
I_GRID_TITLE = '' "表格标题
TABLES
T_OUTTAB = GT_OUT
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM.