*&---------------------------------------------------------------------*
*& Report ZMMR102
*&---------------------------------------------------------------------*
*& Author : NathanSun
*& Create Date : 2019-05-23
*& Program Type : Report
*& Description : 往来供应商对帐明细表
*&---------------------------------------------------------------------*
REPORT ZMMR102.
*&---------------------------------------------------------------------*
*& 包含 YN_TEST02_TOP
*&---------------------------------------------------------------------*
TABLES:TVKO,MARC,EKKO,VBAP,MATDOC.
TYPE-POOLS:SLIS.
"定义ALV输出所需变量
DATA: S_LAYOUT TYPE SLIS_LAYOUT_ALV,
GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
TYPES: BEGIN OF GTS_DATA,
VLFAG TYPE C, "标记字段
SMBLN TYPE MATDOC-SMBLN, "物料凭证编号
SMBLP TYPE MATDOC-SMBLP, "物料凭证中的项目
BUDAT TYPE MATDOC-BUDAT, "入库日期
WERKS TYPE MATDOC-WERKS, "工厂
BWART TYPE MATDOC-BWART, "移动类型
NAME1 TYPE T001W-NAME1, "工厂名称
EKGRP TYPE EKKO-EKGRP, "采购组
DISPO TYPE MARC-DISPO, "MRP控制员
EBELN TYPE MATDOC-EBELN, "采购订单
EBELP TYPE MATDOC-EBELP, "项目号
BSART TYPE EKKO-BSART, "采购订单类型编码
BATXT TYPE T161T-BATXT, "采购订单类型
LIFNR TYPE MATDOC-LIFNR, "供应商编码
NAME1_L TYPE LFA1-NAME1, "供应商名称1
NAME2_L TYPE LFA1-NAME2, "供应商名称2
NAME_L TYPE LFA1-NAME2, "供应商名称
MATNR TYPE MATDOC-MATNR, "物料编码
MAKTX TYPE MAKT-MAKTX, "物料描述
BSTMG TYPE MATDOC-BSTMG, "数量
BSTME TYPE MATDOC-BSTME, "单位
ZDDJE TYPE ZDDJE, "订单单价
ZWSJE TYPE EKPO-NETPR, "未税金额
NETPR TYPE EKPO-NETPR, "采购凭证中的净价(以凭证货币计)
PEINH TYPE EKPO-PEINH, "价格单位
MWSKZ TYPE EKPO-MWSKZ, "销售税/采购税代码
LAND1 TYPE T001W-LAND1, "国家/地区代码
KBETR TYPE KBETR, "条件金额或百分比
SHUIL TYPE CHAR10, "税率
SHUIJ TYPE EKPO-NETPR, "税金
ZONGJ TYPE EKPO-NETPR, "总金额
WAERS TYPE EKKO-WAERS, "币别
ZTERM TYPE EKKO-ZTERM, "付款条件
TTEXT TYPE TTEXT, "付款方式
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.
DATA: GV_TOP TYPE SDYDO_TEXT_ELEMENT.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
SELECT-OPTIONS: S_LIFNR FOR MATDOC-LIFNR MODIF ID C1, "供应商
S_EKGRP FOR EKKO-EKGRP MODIF ID C1, "采购组
S_DISPO FOR MARC-DISPO MODIF ID C1, "MRP 控制员
S_WERKS FOR MATDOC-WERKS MODIF ID C1, "工厂
S_MATNR FOR MATDOC-MATNR MODIF ID C1, "物料编码
S_BUDAT FOR MATDOC-BUDAT MODIF ID C1 OBLIGATORY. "入库日期
SELECTION-SCREEN END OF BLOCK B1.
*&---------------------------------------------------------------------*
*& 包含 YN_TEST02_FOM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& 包含 ZFIR092_FOM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_EXCLUDE_OPTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_EXCLUDE_OPTION .
** Define the object to be passed to the RESTRICTION parameter
*DATA RESTRICT TYPE SSCR_RESTRICT.
*
** Auxiliary objects for filling RESTRICT
*DATA : OPTLIST TYPE SSCR_OPT_LIST,
* ASS TYPE SSCR_ASS.
*
** 限制MATNR参数只能使用‘EQ’ 和‘BT’.
* OPTLIST-NAME = 'OBJECTKEY1'.
* OPTLIST-OPTIONS-EQ = 'X'.
* OPTLIST-OPTIONS-BT = 'X'.
* APPEND OPTLIST TO RESTRICT-OPT_LIST_TAB.
*
* ASS-KIND = 'S'.
* ASS-NAME = 'S_MONAT'.
* ASS-SG_MAIN = 'I'.
* ASS-SG_ADDY = SPACE.
* ASS-OP_MAIN = 'OBJECTKEY1'.
* APPEND ASS TO RESTRICT-ASS_TAB.
*
* CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
* EXPORTING
* RESTRICTION = RESTRICT
* EXCEPTIONS
* TOO_LATE = 1
* REPEATED = 2
* SELOPT_WITHOUT_OPTIONS = 3
* SELOPT_WITHOUT_SIGNS = 4
* INVALID_SIGN = 5
* EMPTY_OPTION_LIST = 6
* INVALID_KIND = 7
* REPEATED_KIND_A = 8
* OTHERS = 9
* .
*
* 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.
*&---------------------------------------------------------------------*
*& Form SCREEN_OUTPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SCREEN_OUTPUT .
LOOP AT SCREEN.
CASE SCREEN-GROUP1.
WHEN 'M1'.
SCREEN-INPUT = '0'.
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .
* AUTHORITY-CHECK OBJECT 'M_MATE_WRK'
* ID 'WERKS' FIELD P_WERKS.
* IF SY-SUBRC <> 0.
* MESSAGE '您没有工厂:'&& P_WERKS && ' 的权限!' TYPE 'E' .
* ENDIF.
DATA: GT_T001W TYPE TABLE OF T001W WITH HEADER LINE.
DATA LV_FLAG TYPE C.
CLEAR LV_FLAG .
CLEAR GT_T001W[].
SELECT WERKS INTO CORRESPONDING FIELDS OF TABLE GT_T001W[] FROM T001W
WHERE WERKS IN S_WERKS .
LOOP AT GT_T001W.
AUTHORITY-CHECK OBJECT 'M_MSEG_WMB'
ID 'WERKS' FIELD GT_T001W-WERKS.
IF SY-SUBRC <> 0.
LV_FLAG = 'X' .
EXIT .
ENDIF.
CLEAR GT_T001W .
ENDLOOP.
IF LV_FLAG IS NOT INITIAL.
MESSAGE '您没有工厂:'&& GT_T001W-WERKS && ' 的权限!' TYPE 'E' .
ENDIF.
*入库日期
IF S_BUDAT-HIGH IS INITIAL.
MESSAGE '请选择入库日期的上限!' TYPE 'E' .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
CLEAR GV_TOP .
GV_TOP = '对账日期: ' && S_BUDAT-LOW(4) && '年' && S_BUDAT-LOW+4(2) && '月' && S_BUDAT-LOW+6(2) && '日'
&& ' 至 ' && S_BUDAT-HIGH(4) && '年' && S_BUDAT-HIGH+4(2) && '月' && S_BUDAT-HIGH+6(2) && '日' .
CLEAR:GT_DATA[].
SELECT
MATDOC~SMBLN
MATDOC~SMBLP
MATDOC~BWART
MATDOC~BUDAT
MATDOC~WERKS
MATDOC~EBELN
MATDOC~EBELP
MATDOC~LIFNR
MATDOC~MATNR
MATDOC~BSTMG
MATDOC~BSTME
EKKO~EKGRP
EKKO~BSART
EKKO~WAERS
EKKO~ZTERM
EKPO~NETPR
EKPO~PEINH
EKPO~MWSKZ
MARC~DISPO
INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
FROM MATDOC
INNER JOIN EKPO ON MATDOC~EBELN = EKPO~EBELN AND MATDOC~EBELP = EKPO~EBELP
INNER JOIN EKKO ON MATDOC~EBELN = EKKO~EBELN
INNER JOIN MARC ON MATDOC~MATNR = MARC~MATNR AND MATDOC~WERKS = MARC~WERKS
WHERE MATDOC~BWART IN ( '101','102','122','161','162' )
AND MATDOC~EBELN <> ''
AND MATDOC~LIFNR IN S_LIFNR
AND MATDOC~WERKS IN S_WERKS
AND MATDOC~MATNR IN S_MATNR
AND MATDOC~BUDAT IN S_BUDAT
AND EKKO~EKGRP IN S_EKGRP
AND MARC~DISPO IN S_DISPO
.
IF GT_DATA[] IS NOT INITIAL .
LOOP AT GT_DATA.
SELECT SINGLE NAME1 LAND1 INTO ( GT_DATA-NAME1 , GT_DATA-LAND1 ) FROM T001W
WHERE WERKS = GT_DATA-WERKS
.
SELECT SINGLE BATXT INTO GT_DATA-BATXT FROM T161T
WHERE BSART = GT_DATA-BSART
AND SPRAS = 1
.
SELECT SINGLE NAME1 NAME2 INTO ( GT_DATA-NAME1_L , GT_DATA-NAME2_L ) FROM LFA1
WHERE LIFNR = GT_DATA-LIFNR
AND SPRAS = 1
.
GT_DATA-NAME_L = GT_DATA-NAME1_L && GT_DATA-NAME2_L .
SELECT SINGLE MAKTX INTO GT_DATA-MAKTX FROM MAKT
WHERE MATNR = GT_DATA-MATNR
AND SPRAS = 1
.
MODIFY GT_DATA .
CLEAR GT_DATA .
ENDLOOP.
ENDIF.
SORT GT_DATA[] BY EBELN EBELP .
GT_DATA_A[] = GT_DATA[] .
DELETE ADJACENT DUPLICATES FROM GT_DATA[] COMPARING EBELN EBELP.
LOOP AT GT_DATA.
CLEAR GT_DATA-BSTMG.
LOOP AT GT_DATA_A WHERE EBELN = GT_DATA-EBELN AND EBELP = GT_DATA-EBELP.
CASE GT_DATA_A-BWART.
WHEN '101'.
GT_DATA-BSTMG = GT_DATA-BSTMG + GT_DATA_A-BSTMG .
WHEN '102'.
GT_DATA-BSTMG = GT_DATA-BSTMG - GT_DATA_A-BSTMG .
WHEN '122'.
GT_DATA-BSTMG = GT_DATA-BSTMG - GT_DATA_A-BSTMG .
WHEN '161'.
GT_DATA-BSTMG = GT_DATA-BSTMG + GT_DATA_A-BSTMG .
WHEN '162'.
GT_DATA-BSTMG = GT_DATA-BSTMG - GT_DATA_A-BSTMG .
WHEN OTHERS.
ENDCASE.
CLEAR GT_DATA_A .
ENDLOOP.
MODIFY GT_DATA.
CLEAR GT_DATA.
ENDLOOP.
DATA T_FTAXP TYPE TABLE OF FTAXP WITH HEADER LINE .
DATA T_ZTEXT TYPE TABLE OF TTEXT WITH HEADER LINE .
DATA GV_T052 TYPE T052 .
LOOP AT GT_DATA.
GT_DATA-ZDDJE = GT_DATA-NETPR / GT_DATA-PEINH .
GT_DATA-ZWSJE = GT_DATA-ZDDJE * GT_DATA-BSTMG .
CLEAR T_FTAXP[] .
CALL FUNCTION 'GET_TAX_PERCENTAGE'
EXPORTING
ALAND = GT_DATA-LAND1
DATAB = GT_DATA-BUDAT
MWSKZ = GT_DATA-MWSKZ
TXJCD = ''
* EXPORT = ' '
TABLES
T_FTAXP = T_FTAXP[].
CLEAR T_FTAXP .
READ TABLE T_FTAXP INDEX 1.
GT_DATA-KBETR = T_FTAXP-KBETR / 10.
IF T_FTAXP-KBETR IS NOT INITIAL.
GT_DATA-SHUIL = GT_DATA-KBETR && '%'.
GT_DATA-SHUIJ = GT_DATA-KBETR * GT_DATA-ZWSJE .
ELSE.
GT_DATA-SHUIL = 0 .
ENDIF.
GT_DATA-ZONGJ = GT_DATA-ZWSJE + GT_DATA-SHUIJ .
CLEAR GV_T052 .
SELECT SINGLE * INTO GV_T052 FROM T052
WHERE ZTERM = GT_DATA-ZTERM
* AND ZTAGG = GT_DATA-ZTAGG
.
CLEAR T_ZTEXT[] .
CALL FUNCTION 'FI_TEXT_ZTERM'
EXPORTING
I_T052 = GV_T052
TABLES
T_ZTEXT = T_ZTEXT[].
CLEAR T_ZTEXT .
READ TABLE T_ZTEXT INDEX 1.
GT_DATA-TTEXT = T_ZTEXT-TEXT1 .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = GT_DATA-LIFNR
IMPORTING
OUTPUT = GT_DATA-LIFNR.
MODIFY GT_DATA.
CLEAR GT_DATA.
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-box_fieldname = 'BOX'.
PERFORM FRM_FILL_FIELD .
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'
I_CALLBACK_HTML_TOP_OF_PAGE = 'F_HTML_TOP_OF_PAGE'
I_HTML_HEIGHT_TOP = 12 "指定ALV表头宽度
TABLES
T_OUTTAB = GT_DATA[].
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.
FILL_FIELD :
'BUDAT' '入库日期',
'WERKS' '工厂',
* 'SMBLN' '物料凭证编号',
* 'SMBLP' '物料凭证中的项目',
* 'BWART' '移动类型',
'NAME1' '工厂名称',
'EKGRP' '采购组',
'DISPO' 'MRP控制员',
'EBELN' '采购订单',
'EBELP' '项目号',
'BSART' '采购订单类型编码',
'BATXT' '采购订单类型',
'LIFNR' '供应商编码',
'NAME_L' '供应商名称',
'MATNR' '物料编码',
'MAKTX' '物料描述',
'BSTMG' '数量',
'BSTME' '单位',
'ZDDJE' '订单单价',
'ZWSJE' '未税金额',
'SHUIL' '税率',
'SHUIJ' '税金',
'ZONGJ' '总金额',
'WAERS' '币别',
'ZTERM' '付款条件',
'TTEXT' '付款方式'.
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 = 'EBELN' .
CHECK IS_SELFIELD-TABINDEX > 0.
CLEAR GT_DATA .
READ TABLE GT_DATA INDEX IS_SELFIELD-TABINDEX.
CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
EXPORTING
I_EBELN = GT_DATA-EBELN
EXCEPTIONS
NOT_FOUND =
1
NO_AUTHORITY = 2
INVALID_CALL = 3
PREVIEW_NOT_POSSIBLE = 4
OTHERS = 5.
IF SY-SUBRC
<> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER
SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
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.
FORM F_HTML_TOP_OF_PAGE USING PR_DOCUMENT TYPE REF TO CL_DD_DOCUMENT.
CALL METHOD PR_DOCUMENT->ADD_TEXT(
TEXT = '往来供应商对帐明细表序开发功能说明书'
SAP_STYLE = CL_DD_DOCUMENT=>HEADING ).
CALL METHOD PR_DOCUMENT->NEW_LINE( ).
CALL METHOD PR_DOCUMENT->ADD_TEXT(
TEXT = GV_TOP
SAP_STYLE = CL_DD_DOCUMENT=>HEADING ).
* CALL METHOD PR_DOCUMENT->ADD_GAP( WIDTH = 2 ).
* CALL METHOD PR_DOCUMENT->ADD_LINK(
* NAME = '163'
* URL = 'www.163.com'
* TEXT = 'netease' ).
ENDFORM. "f_html_top_of_page
INITIALIZATION .
PERFORM FRM_EXCLUDE_OPTION.
AT SELECTION-SCREEN OUTPUT.
PERFORM SCREEN_OUTPUT.
AT SELECTION-SCREEN.
PERFORM SCREEN_SETTING.
START-OF-SELECTION.
PERFORM FOM_GETDATA .
PERFORM FRM_DISPLAY.
ABAP开发笔记-往来供应商对帐明细表
最新推荐文章于 2024-03-28 11:47:31 发布