REPORT ZMMR025.
INCLUDE ZMMR025_F01.
START-OF-SELECTION.
PERFORM GET_ALV_DATA."数据处理
PERFORM FIELD_OUTPUT."调用屏幕显示字段方法
***********************************************************************
*结束时间
PERFORM RUN_LOG.
***********************************************************************
END-OF-SELECTION.
PERFORM DATA_OUTPUT."调用屏幕输出设置方法
*&---------------------------------------------------------------------*
*& 包含 ZMMR025_T01
*&---------------------------------------------------------------------*
TABLES:EBAN.
TYPES:BEGIN OF TY_SEL,
SEL(1), "复选框
LIGHT TYPE C LENGTH 10, "红路灯接收
MSG TYPE STRING,
STYL TYPE LVC_T_STYL,
END OF TY_SEL.
TYPES:BEGIN OF TY_TAB.
INCLUDE TYPE TY_SEL.
TYPES:BANFN TYPE EBAN-BANFN,
EBAKZ TYPE EBAN-EBAKZ,
MATNR TYPE EBAN-MATNR,
TXZ01 TYPE EBAN-TXZ01,
WERKS TYPE EBAN-WERKS,
BADAT TYPE EBAN-BADAT,
AFNAM TYPE EBAN-AFNAM,
BNFPO TYPE EBAN-BNFPO,
MENGE_PR TYPE EBAN-MENGE,
BSMNG TYPE EBAN-BSMNG,
MEINS TYPE EBAN-MEINS,
EBELN TYPE EKET-EBELN,
EBELP TYPE EKET-EBELP,
MENGE TYPE EKET-MENGE,
LOEKZ TYPE EKPO-LOEKZ,
EBELN_PO TYPE EKET-EBELN,
EBELP_PO TYPE EKET-EBELP,
MENGE_PO TYPE EKET-MENGE,
NAME1 TYPE T001W-NAME1,
AEDAT TYPE EKKO-AEDAT,
LIFNR TYPE EKKO-LIFNR,
EKGRP TYPE EKKO-EKGRP,
NAME2 TYPE LFA1-NAME1,
EKNAM TYPE T024-EKNAM,
ZWQSL TYPE EBAN-MENGE,
END OF TY_TAB.
DATA:GT_TAB TYPE TABLE OF TY_TAB,
OUT_TAB TYPE TABLE OF TY_TAB,
GW_TAB TYPE TY_TAB.
FIELD-SYMBOLS <FS_TAB> TYPE TY_TAB.
" 引入宏方式添加屏幕显示字段
DEFINE ADD_FIELD.
WA_FIELD-FIELDNAME = &1.
WA_FIELD-COLTEXT = &2.
WA_FIELD-EDIT = &3. "设置可编辑
WA_FIELD-CHECKBOX = &4. "设置是否选择框
APPEND WA_FIELD TO IT_FIELD.
END-OF-DEFINITION.
" 声明屏幕显示字段需要的变量
DATA: IT_FIELD TYPE LVC_T_FCAT,
WA_FIELD TYPE LVC_S_FCAT,
STYLELIN TYPE LVC_S_STYL.
*-----------------------
*选择屏幕
*-----------------------
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:S_WERKS FOR EBAN-WERKS,
S_MATNR FOR EBAN-MATNR,
S_BANFN FOR EBAN-BANFN,
S_AFNAM FOR EBAN-AFNAM NO INTERVALS,
S_BADAT FOR EBAN-BADAT.
SELECTION-SCREEN: END OF BLOCK B1.
PARAMETERS P_RFQ AS CHECKBOX. "修改询价单
*自定义帮助选择事件
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_AFNAM-LOW.
PERFORM FRM_F4_S_SQZ USING 'S_AFNAM-LOW'.
*&---------------------------------------------------------------------*
*& Form FRM_F4_S_SQZ
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_
*&---------------------------------------------------------------------*
FORM FRM_F4_S_SQZ USING P_SENAME.
DATA:LT_RETURN TYPE STANDARD TABLE OF DDSHRETVAL WITH HEADER LINE.
DATA:LV_RETFIELD TYPE HELP_INFO-DYNPROFLD.
LV_RETFIELD = P_SENAME.
SELECT DISTINCT AFNAM
FROM EBAN
ORDER BY AFNAM
INTO TABLE @DATA(LT_EBAN).
DELETE LT_EBAN WHERE AFNAM IS INITIAL.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'ZFL'
DYNPPROG = SY-CPROG
DYNPNR = SY-DYNNR
DYNPROFIELD = LV_RETFIELD
VALUE_ORG = 'S'
TABLES
VALUE_TAB = LT_EBAN[]
RETURN_TAB = LT_RETURN.
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含 ZMMR025_F01
*&---------------------------------------------------------------------*
FORM GET_ALV_DATA .
SELECT DISTINCT
EBAN~BANFN,
EBAN~EBAKZ,
EBAN~MATNR,
EBAN~TXZ01,
EBAN~WERKS,
EBAN~BADAT,
EBAN~AFNAM,
EBAN~BNFPO,
EBAN~MENGE AS MENGE_PR,
EBAN~BSMNG,
EBAN~MEINS,
EKET~EBELN,
EKET~EBELP,
EKET~MENGE,
ZEKPO~LOEKZ,
EKPO~EBELN AS EBELN_PO,
EKPO~EBELP AS EBELP_PO,
EKPO~MENGE AS MENGE_PO,
T001W~NAME1,
EKKO~AEDAT,
EKKO~LIFNR,
EKKO~EKGRP,
LFA1~NAME1 AS NAME2,
T024~EKNAM,
EBAN~MENGE - EBAN~BSMNG AS ZWQSL
FROM EBAN
LEFT JOIN EKET ON EKET~BANFN EQ EBAN~BANFN
AND EKET~BNFPO EQ EBAN~BNFPO
AND EKET~ELDAT IS INITIAL
LEFT JOIN EKPO AS ZEKPO
ON ZEKPO~EBELN EQ EKET~EBELN
AND ZEKPO~EBELP EQ EKET~EBELP
LEFT JOIN EKPO ON EKPO~ANFNR EQ EKET~EBELN
AND EKPO~ANFPS EQ EKET~EBELP
LEFT JOIN T001W ON T001W~WERKS EQ EBAN~WERKS
LEFT JOIN EKKO ON EKKO~EBELN EQ EKPO~EBELN
LEFT JOIN LFA1 ON LFA1~LIFNR EQ EKKO~LIFNR
LEFT JOIN T024 ON T024~EKGRP EQ EKKO~EKGRP
WHERE EBAN~WERKS IN @S_WERKS
AND EBAN~MATNR IN @S_MATNR
AND EBAN~BANFN IN @S_BANFN
AND EBAN~AFNAM IN @S_AFNAM
AND EBAN~BADAT IN @S_BADAT
ORDER BY EBAN~BANFN,EBAN~BNFPO,EKET~EBELN,EKET~EBELP",B~EBELN,B~EBELP
INTO CORRESPONDING FIELDS OF TABLE @GT_TAB.
IF SY-SUBRC EQ 0.
DELETE GT_TAB WHERE LOEKZ EQ 'L'.
LOOP AT GT_TAB ASSIGNING <FS_TAB>.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
INPUT = <FS_TAB>-MEINS
* LANGUAGE = SY-LANGU
IMPORTING
* LONG_TEXT =
OUTPUT = <FS_TAB>-MEINS
* SHORT_TEXT =
* EXCEPTIONS
* UNIT_NOT_FOUND = 1
* OTHERS = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
*没有关闭标识的采购申请不允许勾选
IF P_RFQ IS NOT INITIAL AND ( <FS_TAB>-EBAKZ IS INITIAL OR <FS_TAB>-MENGE_PO EQ <FS_TAB>-MENGE_PR ).
CLEAR <FS_TAB>-STYL.
<FS_TAB>-SEL = ''.
STYLELIN-FIELDNAME = 'SEL'. " 需要编辑的列名
STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 设置为不可编辑状态
APPEND STYLELIN TO <FS_TAB>-STYL.
CLEAR STYLELIN.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.
FORM FIELD_OUTPUT.
CLEAR:WA_FIELD,IT_FIELD.
IF P_RFQ IS NOT INITIAL.
ADD_FIELD 'SEL' '选择框' 'X' 'X'.
ADD_FIELD 'LIGHT' '状态' '' ''.
ADD_FIELD 'MSG' '消息' '' ''.
ENDIF.
ADD_FIELD 'BANFN' '采购申请' '' ''.
ADD_FIELD 'BNFPO' '申请申请行项' '' ''.
ADD_FIELD 'EBAKZ' '关闭状态' '' ''.
ADD_FIELD 'BADAT' '申请日期' '' ''.
ADD_FIELD 'AFNAM' '申请者' '' ''.
ADD_FIELD 'WERKS' '工厂' '' ''.
ADD_FIELD 'NAME1' '工厂名称' '' ''.
ADD_FIELD 'MATNR' '物料编码' '' ''.
ADD_FIELD 'TXZ01' '物料描述' '' ''.
ADD_FIELD 'MEINS' '申请单位' '' ''.
ADD_FIELD 'MENGE_PR' '申请申请数量' '' ''.
ADD_FIELD 'BSMNG' '订货数量' '' ''.
ADD_FIELD 'ZWQSL' '未清数量' '' ''.
ADD_FIELD 'EBELN' '报价邀请' '' ''.
ADD_FIELD 'EBELP' '报价邀请行号' '' ''.
ADD_FIELD 'MENGE' '报价邀请数量' '' ''.
ADD_FIELD 'EBELN_PO' '采购订单' '' ''.
ADD_FIELD 'EBELP_PO' '采购订单行项' '' ''.
ADD_FIELD 'MENGE_PO' '采购订单数量' '' ''.
ADD_FIELD 'AEDAT' '采购订单日期' '' ''.
ADD_FIELD 'LIFNR' '供应商' '' ''.
ADD_FIELD 'NAME2' '供应商名称' '' ''.
ADD_FIELD 'EKGRP' '采购组' '' ''.
ADD_FIELD 'EKNAM' '采购组描述' '' ''.
ENDFORM.
FORM DATA_OUTPUT.
"定义ALV输入时宽度自动适应
DATA: WA_LAYOUT TYPE LVC_S_LAYO. "设置输出格式,自适应等
WA_LAYOUT-CWIDTH_OPT = 'X'. "设置宽度自适应
WA_LAYOUT-CWIDTH_OPT = 'X'. "设置宽度自适应
WA_LAYOUT-BOX_FNAME = 'SEL'. "设置复选框字段
WA_LAYOUT-STYLEFNAME = 'STYL'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' " 调用函数
EXPORTING
IT_FIELDCAT_LVC = IT_FIELD
IS_LAYOUT_LVC = WA_LAYOUT " 设置表单格式
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
I_SAVE = 'U'
TABLES
T_OUTTAB = GT_TAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PF_STATUS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
IF P_RFQ IS NOT INITIAL.
SET PF-STATUS 'ZSTATUS'.
ELSE.
SET PF-STATUS 'STATUS'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM"屏幕流
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = LR_GRID.
CALL METHOD LR_GRID->CHECK_CHANGED_DATA .
CALL METHOD LR_GRID->REFRESH_TABLE_DISPLAY.
CASE R_UCOMM.
WHEN 'ALL'."全选
LOOP AT GT_TAB ASSIGNING <FS_TAB>.
IF <FS_TAB>-LIGHT NE '@08@'.
<FS_TAB>-SEL = 'X'.
ENDIF.
ENDLOOP.
WHEN 'SAL'."取消全选
LOOP AT GT_TAB ASSIGNING <FS_TAB>.
<FS_TAB>-SEL = ''.
ENDLOOP.
WHEN 'CHANGE'.
IF NOT LINE_EXISTS( GT_TAB[ SEL = 'X' ] ).
MESSAGE I001(00) WITH '请选择需要提交的数据!'.
RETURN.
ENDIF.
PERFORM CHANGE_RFQ.
ENDCASE.
"刷新ALV
CALL METHOD LR_GRID->REFRESH_TABLE_DISPLAY .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CHANGE_RFQ
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM CHANGE_RFQ .
DATA(LT_TAB) = GT_TAB[].
DELETE LT_TAB WHERE EBAKZ IS INITIAL.
SORT LT_TAB BY BANFN.
DELETE ADJACENT DUPLICATES FROM LT_TAB COMPARING BANFN.
DATA:E_CODE TYPE CHAR1,
E_MSG TYPE STRING.
LOOP AT LT_TAB INTO GW_TAB.
CALL FUNCTION 'ZFM_MM_CHANGE_ENQUERY'
EXPORTING
I_BANFN = GW_TAB-BANFN
IMPORTING
E_CODE = E_CODE
E_MSG = E_MSG.
LOOP AT GT_TAB ASSIGNING <FS_TAB> WHERE BANFN EQ GW_TAB-BANFN.
CLEAR <FS_TAB>-STYL.
<FS_TAB>-MSG = E_MSG.
IF E_CODE EQ 'S'.
<FS_TAB>-LIGHT = '@08@'." Green light; Go; OK
<FS_TAB>-SEL = ''.
STYLELIN-FIELDNAME = 'SEL'. " 需要编辑的列名
STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 设置为不可编辑状态
APPEND STYLELIN TO <FS_TAB>-STYL.
CLEAR STYLELIN.
ELSE.
<FS_TAB>-LIGHT = '@0A@'." Green light; Go; NO
ENDIF.
ENDLOOP.
CLEAR:GW_TAB,E_CODE,E_MSG.
ENDLOOP.
ENDFORM.
网友评论