*&---------------------------------------------------------------------*
*& Report ZMMR102
*&---------------------------------------------------------------------*
*& Author : NathanSun
*& Create Date : 2019-06-26
*& Program Type : Report
*& Description : 客户未提货清单
*&---------------------------------------------------------------------*
REPORT ZSDR003.
*&---------------------------------------------------------------------*
*& 包含 YN_TEST02_TOP
*&---------------------------------------------------------------------*
TABLES:VBAK,VBAP,MSKA,MCHB.
TYPE-POOLS:SLIS,T001W.
"定义ALV输出所需变量
DATA: S_LAYOUT TYPE SLIS_LAYOUT_ALV,
GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA:TOPMAT LIKE CSTMAT .
DATA:DSTST LIKE CSDATA-XFELD .
DATA:STB LIKE STPOX OCCURS 0 WITH HEADER LINE .
DATA:MATCAT LIKE CSCMAT OCCURS 0 WITH HEADER LINE .
DATA:GT_MARD LIKE MARD OCCURS 0 WITH HEADER LINE .
DATA:GT_MSKA LIKE MSKA OCCURS 0 WITH HEADER LINE .
DATA:E_MT61D LIKE MT61D .
DATA:E_MDKP LIKE MDKP .
DATA:MDPSX LIKE MDPS OCCURS 0 WITH HEADER LINE .
DATA:MDEZX LIKE MDEZ OCCURS 0 WITH HEADER LINE .
DATA:MDSUX LIKE MDSU OCCURS 0 WITH HEADER LINE .
TYPES: BEGIN OF GTS_DATA,
VBELN TYPE VBAP-VBELN, "销售订单
POSNR TYPE VBAP-POSNR, "销售订单行项目
KUNNR TYPE VBAK-KUNNR, "客户
KUNNF TYPE VBAK-KUNNR, "付款方
VDATU TYPE VBAK-VDATU, "交期
NAME1 TYPE KNA1-NAME1, "客户名称
MATNR TYPE VBAP-MATNR, "物料
MAKTX TYPE MAKT-MAKTX, "物料描述
CMGST TYPE VBAK-CMGST, "信用状态
ABGRU TYPE VBAP-ABGRU, "拒绝原因
LIFSK TYPE VBAK-LIFSK, "交货冻结
LFGSA TYPE VBAP-LFGSA, "项目交货状态
EDATU TYPE VBEP-EDATU, "订单首个交期
KWMENG TYPE VBAP-KWMENG, "订单数量
VRKME TYPE VBAP-VRKME, "单位
ZWQSL TYPE VBAP-KWMENG, "未清数量
MVGR1 TYPE VBAP-MVGR1, "未及时提货客户原因分类
TDLINE2 TYPE CHAR200, "客户未及时提货-内部原因
TDLINE3 TYPE CHAR200, "客户未及时提货-其他原因
ARKTX TYPE VBAP-ARKTX, "项目文本
CHARG TYPE MSKA-CHARG, "批次
WERKS TYPE MSKA-WERKS, "批次工厂
LGORT TYPE MSKA-LGORT, "批次库位
KALAB TYPE MSKA-KALAB, "批次数量(非限制)
MEINS TYPE MARA-MEINS, "批次数量单位
GRACED1 TYPE ZTCNPU-GRACED1, "客户未提宽限天数1
GRACED2 TYPE ZTCNPU-GRACED2, "客户未提宽限天数2
GRACED3 TYPE ZTCNPU-GRACED3, "客户未提宽限天数3
EXDATJ TYPE ZTCNPU-GRACED1, "超过交期天数
EXDATS TYPE ZTCNPU-GRACED1, "超过生产天数
DATUM TYPE DATS, "当天日期
PCDAT TYPE DATS, "批次生产日期
DKDAT TYPE ZTCNPU-GRACED1, "生产到库存天数
FLAG TYPE C , "
END OF GTS_DATA.
DATA: GT_DATA TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_A TYPE TABLE OF GTS_DATA WITH HEADER LINE.
TYPES: BEGIN OF GTS_NDATA,
MATNR TYPE MCHB-MATNR, "物料
MAKTX TYPE MAKT-MAKTX, "物料描述
CHARG TYPE MCHB-CHARG, "批次
PCDAT TYPE DATS, "批次生产日期
DKDAT TYPE ZTCNPU-GRACED1, "生产到库存天数
WERKS TYPE MCHB-WERKS, "批次工厂
LGORT TYPE MCHB-LGORT, "批次库位
CLABS TYPE MCHB-CLABS, "批次数量(非限制)
MEINS TYPE MARA-MEINS, "批次数量单位
GRACED1 TYPE ZTCNPU-GRACED1, "客户未提宽限天数1
GRACED2 TYPE ZTCNPU-GRACED2, "客户未提宽限天数2
GRACED3 TYPE ZTCNPU-GRACED3, "客户未提宽限天数3
EXDATJ TYPE ZTCNPU-GRACED1, "超过交期天数
EXDATS TYPE ZTCNPU-GRACED1, "超过生产天数
DATUM TYPE DATS, "当天日期
END OF GTS_NDATA.
DATA: GT_NDATA TYPE TABLE OF GTS_NDATA WITH HEADER LINE.
DATA: GT_NDATA_A TYPE TABLE OF GTS_NDATA WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS P_RD1 RADIOBUTTON GROUP GP1 DEFAULT 'X' USER-COMMAND MXX."用来隐藏 p_AUFNR
PARAMETERS P_RD2 RADIOBUTTON GROUP GP1 ."用来显示 p_AUFNR
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
SELECT-OPTIONS: S_AUART FOR VBAK-AUART MODIF ID MXX DEFAULT 'KB'. "销售凭证类型
*SELECT-OPTIONS: S_AUART FOR VBAK-AUART MODIF ID MXX DEFAULT 'ZOR1'. "销售凭证类型
SELECT-OPTIONS: S_VBELN FOR VBAK-VBELN MODIF ID MXX . "销售订单
SELECT-OPTIONS: S_KUNNR FOR VBAK-KUNNR MODIF ID MXX . "客户(售达方)
SELECT-OPTIONS: S_KUNNF FOR VBAK-KUNNR MODIF ID MXX . "客户(付款方)
SELECT-OPTIONS: S_MATNR FOR VBAP-MATNR MODIF ID MXX . "物料
SELECT-OPTIONS: S_VKORG FOR VBAK-VKORG MODIF ID MXX . "销售组织
SELECT-OPTIONS: S_LGORT FOR MSKA-LGORT MODIF ID MXX DEFAULT 'FG01'. "库位(批次)
SELECT-OPTIONS: S_WERKS FOR MSKA-WERKS MODIF ID MXX . "工厂(批次)
*SELECT-OPTIONS: S_CHARG FOR MCHB-CHARG MODIF ID MXZ . "批次
SELECTION-SCREEN END OF BLOCK B2.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN .
"控制下拉列表(文本框也是一样)的必输性:外观上打钩,但不自动校验
IF P_RD1 = 'X' AND SCREEN-GROUP1 = 'MXY'.
"显示
SCREEN-ACTIVE = '1'.
* SCREEN-REQUIRED = '2'."外观上打钩,但不自动校验
MODIFY SCREEN.
ELSEIF SCREEN-GROUP1 = 'MXY'. "
"隐藏
SCREEN-ACTIVE = '0'.
* SCREEN-REQUIRED = '2'.
MODIFY SCREEN.
ENDIF.
IF P_RD2 = 'X' AND SCREEN-GROUP1 = 'MXZ'.
"显示
SCREEN-ACTIVE = '1'.
* SCREEN-REQUIRED = '2'."外观上打钩,但不自动校验
MODIFY SCREEN.
ELSEIF SCREEN-GROUP1 = 'MXZ'. "
"隐藏
SCREEN-ACTIVE = '0'.
* SCREEN-REQUIRED = '2'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
DATA E_OBJEK TYPE CUOBN .
DATA E_OBTAB TYPE TABELLE .
DATA E_KLART TYPE KLASSENART .
DATA E_CLASS TYPE KLASSE_D .
DATA OBJECTKEY TYPE BAPI1003_KEY-OBJECT .
DATA ALLOCVALUESNUM TYPE TABLE OF BAPI1003_ALLOC_VALUES_NUM WITH HEADER LINE .
DATA ALLOCVALUESCHAR TYPE TABLE OF BAPI1003_ALLOC_VALUES_CHAR WITH HEADER LINE .
DATA ALLOCVALUESCURR TYPE TABLE OF BAPI1003_ALLOC_VALUES_CURR WITH HEADER LINE .
DATA RETURN TYPE TABLE OF BAPIRET2 WITH HEADER LINE .
DATA LS_MCH1_KEY TYPE ZMCH1_KEY .
DATA GT_BLDAT TYPE TABLE OF MATDOC WITH HEADER LINE .
DATA GT_LIPS TYPE TABLE OF LIPS WITH HEADER LINE .
DATA GS_LIPS TYPE LIPS .
DATA TDID TYPE TABLE OF TDID WITH HEADER LINE .
DATA TLINE TYPE TABLE OF TLINE WITH HEADER LINE .
DATA TDNAME TYPE TDOBNAME .
CLEAR GT_DATA[].
SELECT
VBAP~VBELN
VBAP~POSNR
VBAP~MATNR
VBAP~LFGSA
VBAP~KWMENG
VBAP~VRKME
VBAP~MVGR1
VBAK~KUNNR
VBAK~VDATU
VBAK~CMGST
VBAK~LIFSK
MSKA~CHARG
MSKA~WERKS
MSKA~LGORT
MSKA~KALAB
* VBPA~KUNNR AS KUNNF
INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
FROM VBAP
INNER JOIN MSKA ON VBAP~VBELN = MSKA~VBELN AND VBAP~POSNR = MSKA~POSNR
INNER JOIN VBAK ON VBAP~VBELN = VBAK~VBELN
* LEFT JOIN VBPA ON VBAP~VBELN = VBPA~VBELN AND VBAP~POSNR = VBPA~POSNR AND VBPA~PARVW = 'AG'
WHERE VBAK~AUART IN S_AUART
AND VBAK~KUNNR IN S_KUNNR
AND VBAK~VKORG IN S_VKORG
AND VBAP~MATNR IN S_MATNR
AND MSKA~LGORT IN S_LGORT
AND MSKA~WERKS IN S_WERKS
AND VBAP~VBELN IN S_VBELN
.
LOOP AT GT_DATA .
CLEAR TDID .
CLEAR TDID[] .
TDID = '0002'.
APPEND TDID .
TDID = '0003'.
APPEND TDID .
TDNAME = GT_DATA-VBELN && GT_DATA-POSNR.
LOOP AT TDID.
CLEAR TLINE .
CLEAR TLINE[] .
CALL FUNCTION 'READ_TEXT'
EXPORTING
OBJECT = 'VBBP'
NAME = TDNAME
ID = TDID
LANGUAGE = 'E'
TABLES
LINES = TLINE
EXCEPTIONS
OBJECT = 1
ID = 2
LANGUAGE = 3
NAME = 4
NOT_FOUND = 5
REFERENCE_CHECK = 6.
CASE TDID.
WHEN '0002'.
LOOP AT TLINE.
GT_DATA-TDLINE2 = TLINE-TDLINE .
ENDLOOP.
WHEN '0003'.
LOOP AT TLINE.
GT_DATA-TDLINE3 = TLINE-TDLINE .
ENDLOOP.
WHEN OTHERS.
ENDCASE.
CLEAR TLINE .
ENDLOOP.
SELECT SINGLE KUNNR INTO GT_DATA-KUNNF FROM VBPA
WHERE VBELN = GT_DATA-VBELN
* AND POSNR = GT_DATA-POSNR
AND PARVW = 'AG'
.
GT_DATA-DATUM = SY-DATUM .
SELECT SINGLE NAME1 INTO GT_DATA-NAME1 FROM KNA1
WHERE KUNNR = GT_DATA-KUNNR
.
SELECT SINGLE MAKTX INTO GT_DATA-MAKTX FROM MAKT
WHERE MATNR = GT_DATA-MATNR
.
SELECT SINGLE EDATU INTO GT_DATA-EDATU FROM VBEP
WHERE VBELN = GT_DATA-VBELN
AND POSNR = GT_DATA-POSNR
.
SELECT SINGLE MEINS INTO GT_DATA-MEINS FROM MARA
WHERE MATNR = GT_DATA-MATNR
.
SELECT SINGLE GRACED1 GRACED2 GRACED3 INTO CORRESPONDING FIELDS OF GT_DATA FROM ZTCNPU
WHERE KUNNR = GT_DATA-KUNNR
AND WERKS = GT_DATA-WERKS
.
*批次生产日期
CLEAR E_OBJEK .
CLEAR E_OBTAB .
CLEAR E_KLART .
CLEAR E_CLASS .
CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'
EXPORTING
I_MATNR = GT_DATA-MATNR
I_CHARG = GT_DATA-CHARG
I_WERKS = GT_DATA-WERKS
IMPORTING
E_OBJEK = E_OBJEK
E_OBTAB = E_OBTAB
E_KLART = E_KLART
E_CLASS = E_CLASS.
CLEAR: ALLOCVALUESNUM , ALLOCVALUESNUM[] .
CLEAR: ALLOCVALUESCHAR , ALLOCVALUESCHAR[] .
CLEAR: ALLOCVALUESCURR , ALLOCVALUESCURR[] .
IF GT_DATA-CHARG IS NOT INITIAL.
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
* OBJECTKEY = OBJECTKEY
OBJECTKEY_LONG = E_OBJEK
OBJECTTABLE = E_OBTAB
CLASSNUM = E_CLASS
CLASSTYPE = E_KLART
* KEYDATE = SY-DATUM
* LANGUAGE = SY-LANGU
TABLES
ALLOCVALUESNUM = ALLOCVALUESNUM[]
ALLOCVALUESCHAR = ALLOCVALUESCHAR[]
ALLOCVALUESCURR = ALLOCVALUESCURR[]
RETURN = RETURN[].
ENDIF.
DATA: E_CHAR_FIELD LIKE CHA_CLASS_VIEW-SOLLWERT .
LOOP AT ALLOCVALUESNUM.
IF ALLOCVALUESNUM-CHARACT_DESCR = '生产日期'.
CLEAR E_CHAR_FIELD .
CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION'
EXPORTING
I_NUMBER_OF_DIGITS = '0'
I_FLTP_VALUE = ALLOCVALUESNUM-VALUE_FROM
I_VALUE_NOT_INITIAL_FLAG = 'X'
I_SCREEN_FIELDLENGTH = 16
IMPORTING
E_CHAR_FIELD = E_CHAR_FIELD.
IF E_CHAR_FIELD IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = E_CHAR_FIELD
IMPORTING
OUTPUT = E_CHAR_FIELD.
GT_DATA-PCDAT = E_CHAR_FIELD.
ENDIF.
ENDIF.
CLEAR ALLOCVALUESNUM .
ENDLOOP.
*生产到库存天数:当前日期-批次生产日期
GT_DATA-DKDAT = SY-DATUM - GT_DATA-PCDAT .
*超过交期天数:当天日期 - 订单交期
GT_DATA-EXDATJ = SY-DATUM - GT_DATA-VDATU .
*超过生产天数:当前日期 -(批次生产日期+客户未提宽限天数1 + 客户未提宽限天数2+ 客户未提宽限天数1)
GT_DATA-EXDATS = SY-DATUM - ( GT_DATA-PCDAT + GT_DATA-GRACED1 + GT_DATA-GRACED2 + GT_DATA-GRACED3 ).
*未清数量:销售订单的数量 - sum(销售订单行项目已开具的所有DN单,并且发货过账(LIKP-WBSTK = ’C‘代表已发货过账)的数量)
CLEAR GS_LIPS.
CLEAR GT_LIPS[].
SELECT
LIPS~LFIMG
LIPS~SHKZG
INTO CORRESPONDING FIELDS OF TABLE GT_LIPS[]
FROM LIPS
INNER JOIN LIKP ON LIPS~VBELN = LIKP~VBELN
WHERE LIPS~KDAUF = GT_DATA-VBELN
AND LIPS~KDPOS = GT_DATA-POSNR
AND LIKP~WBSTK = 'C'
.
LOOP AT GT_LIPS.
IF GT_LIPS-SHKZG IS NOT INITIAL.
GT_LIPS-LFIMG = GT_LIPS-LFIMG * -1 .
ENDIF.
GS_LIPS-LFIMG = GS_LIPS-LFIMG + GT_LIPS-LFIMG .
CLEAR GT_LIPS .
ENDLOOP.
GT_DATA-ZWQSL = GT_DATA-KWMENG - GS_LIPS-LFIMG .
MODIFY GT_DATA .
CLEAR GT_DATA .
ENDLOOP.
DELETE GT_DATA[] WHERE KUNNF NOT IN S_KUNNF .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA_N
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA_N .
DATA E_OBJEK TYPE CUOBN .
DATA E_OBTAB TYPE TABELLE .
DATA E_KLART TYPE KLASSENART .
DATA E_CLASS TYPE KLASSE_D .
DATA OBJECTKEY TYPE BAPI1003_KEY-OBJECT .
DATA ALLOCVALUESNUM TYPE TABLE OF BAPI1003_ALLOC_VALUES_NUM WITH HEADER LINE .
DATA ALLOCVALUESCHAR TYPE TABLE OF BAPI1003_ALLOC_VALUES_CHAR WITH HEADER LINE .
DATA ALLOCVALUESCURR TYPE TABLE OF BAPI1003_ALLOC_VALUES_CURR WITH HEADER LINE .
DATA RETURN TYPE TABLE OF BAPIRET2 WITH HEADER LINE .
DATA LS_MCH1_KEY TYPE ZMCH1_KEY .
DATA GT_BLDAT TYPE TABLE OF MATDOC WITH HEADER LINE .
DATA GT_LIPS TYPE TABLE OF LIPS WITH HEADER LINE .
DATA GS_LIPS TYPE LIPS .
DATA TDID TYPE TABLE OF TDID WITH HEADER LINE .
DATA TLINE TYPE TABLE OF TLINE WITH HEADER LINE .
DATA TDNAME TYPE TDOBNAME .
CLEAR GT_NDATA_A[].
SELECT
VBAP~MATNR
INTO CORRESPONDING FIELDS OF TABLE GT_NDATA_A[]
FROM VBAP
* INNER JOIN MSKA ON VBAP~VBELN = MSKA~VBELN AND VBAP~POSNR = MSKA~POSNR
INNER JOIN VBAK ON VBAP~VBELN = VBAK~VBELN
* LEFT JOIN VBPA ON VBAP~VBELN = VBPA~VBELN AND VBAP~POSNR = VBPA~POSNR AND VBPA~PARVW = 'AG'
WHERE VBAK~AUART IN S_AUART
AND VBAK~KUNNR IN S_KUNNR
AND VBAK~VKORG IN S_VKORG
AND VBAP~MATNR IN S_MATNR
AND VBAP~VBELN IN S_VBELN
.
SORT GT_NDATA_A BY MATNR .
DELETE ADJACENT DUPLICATES FROM GT_NDATA_A[] COMPARING MATNR.
IF GT_NDATA_A[] IS NOT INITIAL.
CLEAR GT_NDATA[] .
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_NDATA[] FROM MCHB
FOR ALL ENTRIES IN GT_NDATA_A[]
WHERE MATNR = GT_NDATA_A-MATNR
AND LGORT IN S_LGORT
AND WERKS IN S_WERKS
.
LOOP AT GT_NDATA.
SELECT SINGLE MAKTX INTO GT_NDATA-MAKTX FROM MAKT
WHERE MATNR = GT_NDATA-MATNR
.
SELECT SINGLE MEINS INTO GT_NDATA-MEINS FROM MARA
WHERE MATNR = GT_NDATA-MATNR
.
*批次生产日期
CLEAR E_OBJEK .
CLEAR E_OBTAB .
CLEAR E_KLART .
CLEAR E_CLASS .
CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'
EXPORTING
I_MATNR = GT_NDATA-MATNR
I_CHARG = GT_NDATA-CHARG
I_WERKS = GT_NDATA-WERKS
IMPORTING
E_OBJEK = E_OBJEK
E_OBTAB = E_OBTAB
E_KLART = E_KLART
E_CLASS = E_CLASS.
CLEAR: ALLOCVALUESNUM , ALLOCVALUESNUM[] .
CLEAR: ALLOCVALUESCHAR , ALLOCVALUESCHAR[] .
CLEAR: ALLOCVALUESCURR , ALLOCVALUESCURR[] .
IF GT_NDATA-CHARG IS NOT INITIAL.
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
* OBJECTKEY = OBJECTKEY
OBJECTKEY_LONG = E_OBJEK
OBJECTTABLE = E_OBTAB
CLASSNUM = E_CLASS
CLASSTYPE = E_KLART
* KEYDATE = SY-DATUM
* LANGUAGE = SY-LANGU
TABLES
ALLOCVALUESNUM = ALLOCVALUESNUM[]
ALLOCVALUESCHAR = ALLOCVALUESCHAR[]
ALLOCVALUESCURR = ALLOCVALUESCURR[]
RETURN = RETURN[].
ENDIF.
DATA: E_CHAR_FIELD LIKE CHA_CLASS_VIEW-SOLLWERT .
LOOP AT ALLOCVALUESNUM.
IF ALLOCVALUESNUM-CHARACT_DESCR = '生产日期'.
CLEAR E_CHAR_FIELD .
CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION'
EXPORTING
I_NUMBER_OF_DIGITS = '0'
I_FLTP_VALUE = ALLOCVALUESNUM-VALUE_FROM
I_VALUE_NOT_INITIAL_FLAG = 'X'
I_SCREEN_FIELDLENGTH = 16
IMPORTING
E_CHAR_FIELD = E_CHAR_FIELD.
IF E_CHAR_FIELD IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = E_CHAR_FIELD
IMPORTING
OUTPUT = E_CHAR_FIELD.
GT_NDATA-PCDAT = E_CHAR_FIELD.
ENDIF.
ENDIF.
CLEAR ALLOCVALUESNUM .
ENDLOOP.
GT_NDATA-DATUM = SY-DATUM .
*生产到库存天数:当前日期-批次生产日期
GT_NDATA-DKDAT = SY-DATUM - GT_NDATA-PCDAT .
MODIFY GT_NDATA .
CLEAR GT_NDATA .
ENDLOOP.
ENDIF.
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-INFO_FIELDNAME = 'CLR'. "行颜色代码的字段
* s_layout-box_fieldname = 'BOX'.
PERFORM FRM_FILL_FIELD .
IF P_RD1 IS NOT INITIAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
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_DATA[].
ELSE .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
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_NDATA[].
ENDIF.
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 = 'MSLJH' or wa_fieldcat-fieldname = 'WCBJH'.
* wa_fieldcat-EMPHASIZE = 'C600'. "设置字段的颜色
* ENDIF.
* IF wa_fieldcat-fieldname = 'MSLMB' or wa_fieldcat-fieldname = 'WCBMB'.
* wa_fieldcat-EMPHASIZE = 'C710'. "设置字段的颜色
* ENDIF.
IF wa_fieldcat-fieldname = 'PLNBEZ' OR wa_fieldcat-fieldname = 'MATNR' .
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.
APPEND wa_fieldcat TO gt_fieldcat.
CLEAR wa_fieldcat.
END-OF-DEFINITION.
IF P_RD1 IS NOT INITIAL.
FILL_FIELD :
'VBELN' '销售订单',
'POSNR' '销售订单行项目',
'KUNNR' '客户',
'NAME1' '客户名称',
'KUNNF' '付款方',
'VDATU' '交期',
'MATNR' '物料',
'MAKTX' '物料描述',
'CMGST' '信用状态',
'ABGRU' '拒绝原因',
'LIFSK' '交货冻结',
'LFGSA' '项目交货状态',
'EDATU' '订单首个交期',
'KWMENG' '订单数量',
'VRKME' '单位',
'ZWQSL' '未清数量',
'MVGR1' '未及时提货客户原因分类',
'TDLINE2' '客户未及时提货-内部原因',
'TDLINE3' '客户未及时提货-其他原因',
'ARKTX' '项目文本',
'CHARG' '批次',
'WERKS' '批次工厂',
'LGORT' '批次库位',
'KALAB' '批次数量(非限制)',
'MEINS' '批次数量单位',
'GRACED1' '客户未提宽限天数1',
'GRACED2' '客户未提宽限天数2',
'GRACED3' '客户未提宽限天数3',
'EXDATJ' '超过交期天数',
'EXDATS' '超过生产天数',
'PCDAT' '批次生产日期',
'DKDAT' '生产到库存天数',
'DATUM' '当前日期'.
ELSE .
FILL_FIELD :
'MATNR' '物料',
'MAKTX' '物料描述',
'CHARG' '批次',
'PCDAT' '批次生产日期',
'DKDAT' '生产到库存天数',
'WERKS' '批次工厂',
'LGORT' '批次库位',
'CLABS' '批次数量(非限制)',
'MEINS' '批次数量单位',
* 'GRACED1' '客户未提宽限天数1',
* 'GRACED2' '客户未提宽限天数2',
* 'GRACED3' '客户未提宽限天数3',
* 'EXDATJ' '超过交期天数',
* 'EXDATS' '超过生产天数',
'DATUM' '当前日期'.
ENDIF.
ENDFORM.
FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STANDARD_FULLSCREEN'.
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 '&IC1'."表示双击
IF IS_SELFIELD-FIELDNAME = 'VBELN' .
CHECK IS_SELFIELD-TABINDEX > 0.
CLEAR GT_DATA .
READ TABLE GT_DATA INDEX IS_SELFIELD-TABINDEX.
SET PARAMETER ID 'AUN' FIELD GT_DATA-VBELN.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ELSEIF IS_SELFIELD-FIELDNAME = 'CHARG' .
IF P_RD1 IS NOT INITIAL.
MESSAGE '请选择有效字段!'TYPE 'S' DISPLAY LIKE 'W'.
* CHECK IS_SELFIELD-TABINDEX > 0.
* CLEAR GT_DATA .
* READ TABLE GT_DATA INDEX IS_SELFIELD-TABINDEX.
* SET PARAMETER ID 'MAT' FIELD GT_DATA-MATNR.
* SET PARAMETER ID 'WRK' FIELD GT_DATA-WERKS.
* SET PARAMETER ID 'CHA' FIELD GT_DATA-CHARG.
* SET PARAMETER ID 'LAG' FIELD GT_DATA-LGORT.
* CALL TRANSACTION 'MSC3N' AND SKIP FIRST SCREEN.
ELSE .
CHECK IS_SELFIELD-TABINDEX > 0.
CLEAR GT_NDATA .
READ TABLE GT_NDATA INDEX IS_SELFIELD-TABINDEX.
SET PARAMETER ID 'MAT' FIELD GT_NDATA-MATNR.
SET PARAMETER ID 'WRK' FIELD GT_NDATA-WERKS.
SET PARAMETER ID 'CHA' FIELD GT_NDATA-CHARG.
SET PARAMETER ID 'LAG' FIELD GT_NDATA-LGORT.
CALL TRANSACTION 'MSC3N' AND SKIP FIRST SCREEN.
ENDIF.
ELSE .
MESSAGE '请选择有效字段!'TYPE 'S' DISPLAY LIKE 'W'.
ENDIF .
WHEN 'POST_T'.
ENDCASE.
CALL METHOD REF->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
ENDFORM.
INITIALIZATION .
AT SELECTION-SCREEN.
PERFORM SCREEN_SETTING.
START-OF-SELECTION.
IF P_RD1 IS NOT INITIAL.
PERFORM FOM_GETDATA .
ELSE.
PERFORM FOM_GETDATA_N .
ENDIF.
PERFORM FRM_DISPLAY.
3140

被折叠的 条评论
为什么被折叠?



