业务背景: 没错,就是你想象的那种暂时支出,但又不是真正的支出,属于预付范畴,暂支单属于临时借用,业务完成以后应当及时报帐或用业务提成冲减。
REPORT ZMM017.
TABLES: ZZMM017,EKKO,EKPO.
***********************************************************************
* ALV数据定义
************************************************************************
TYPE-POOLS:SLIS.
DATA: BEGIN OF WA_TAB,
SEL_BOX TYPE CHAR1,
NAME_FIRST TYPE ADRP-NAME_FIRST, "币种
A_EBELN TYPE EKKO-EBELN, "订单号
BEDAT TYPE EKKO-BEDAT, "凭证日期
NAME1 TYPE LFA1-NAME1, "供应商名称
TXZ01 TYPE EKPO-TXZ01, "物料描述
MENGE TYPE EKPO-MENGE, "采购数量
MEINS TYPE EKPO-MEINS, "单位
A_BRTWR TYPE EKPO-BRTWR, "含税金额
B_BRTWR(16) TYPE P DECIMALS 4, "含税金额
LIFNR TYPE EKKO-LIFNR, "供应商
BUKRS TYPE EKKO-LIFNR, "工厂代码
WAERS TYPE EKKO-WAERS, "币种
MATNR TYPE EKPO-MATNR, "物料号
MWSKZ TYPE EKPO-MWSKZ, "税率
ERNAM TYPE EKKO-ERNAM, "创建对象的人员名称
LDANJIA(16) TYPE P DECIMALS 4, "含税单价
ZZSY(250) TYPE C, "暂支事由
A_MENT(3) TYPE N, "付款比例
A_TAX(1) TYPE C, "是否含税
BRTWR TYPE EKPO-BRTWR, "含税金额
NETWR TYPE EKPO-NETWR, "不含税金额
A_NETWR(16) TYPE P DECIMALS 2, "不含税金额
NAME1_T TYPE T001W-NAME1, "工厂描述
KBETR TYPE KBETR_KOND, "税率
DIAOBO TYPE CHAR2, "调拨订单处理
END OF WA_TAB.
DATA:BEGIN OF IT_NAME_FIRST OCCURS 0,
NAME_FIRST TYPE AD_NAMEFIR,
BNAME TYPE XUBNAME,
END OF IT_NAME_FIRST.
DATA:BEGIN OF IT_KBETR OCCURS 0,
MWSKZ TYPE MWSKZ,
KNUMH TYPE KNUMH,
KBETR TYPE KBETR_KOND,
END OF IT_KBETR.
DATA:BEGIN OF WA_TAB_TMP , "用来汇总金额的。
EBELN TYPE EKKO-EBELN, "订单号
BRTWR TYPE EKPO-BRTWR, "含税金额
NETWR TYPE EKPO-NETWR, "不含税金额
END OF WA_TAB_TMP.
*DATA:BEGIN OF IT_TAB_TMP_T OCCURS 0, "用来汇总金额的。
* BRTWR TYPE EKPO-BRTWR, "含税金额
* NETWR TYPE EKPO-NETWR, "不含税金额
* END OF IT_TAB_TMP_T.
DATA:IT_TAB_TMP_T LIKE TABLE OF WA_TAB_TMP WITH HEADER LINE .
DATA:IT_TAB_TMP LIKE TABLE OF WA_TAB_TMP WITH HEADER LINE .
DATA:BEGIN OF IT_TAB01 OCCURS 0,
BRTWR TYPE EKPO-BRTWR, "含税金额
TXZ01 TYPE EKPO-TXZ01, "物料描述
MEINS TYPE EKPO-MEINS, "单位
MENGE TYPE EKPO-MENGE, "采购数量
A_NETWR(16) TYPE P DECIMALS 2, "不含税金额
B_BRTWR(16) TYPE P DECIMALS 2, "含税金额
WAERS TYPE EKKO-WAERS, "币种
NETWR TYPE EKPO-NETWR, "不含税金额
A_TAX(1) TYPE C, "是否含税
ZZSY(250) TYPE C, "暂支事由
END OF IT_TAB01.
"DATA ZZSY(250) TYPE C. "暂支事由
DATA IT_ZMM017 LIKE TABLE OF ZZMM017 WITH HEADER LINE. "存放导入数据的自检表
DATA IT_ZMM017_TMP LIKE TABLE OF ZZMM017 WITH HEADER LINE."存放ALV数据的内表
DATA IT_SELECTED_TMP LIKE TABLE OF ZZMM017 WITH HEADER LINE."存放ALV数据的内表
DATA IT_ZMM017_T LIKE TABLE OF ZZMM017 WITH HEADER LINE. "计算暂支次数
DATA IT_ZMM017_T1 LIKE TABLE OF ZZMM017 WITH HEADER LINE. "计算付款比例不能超过%100
DATA IT_DATA_TMP LIKE TABLE OF WA_TAB WITH HEADER LINE.
DATA IT_SELECTED LIKE TABLE OF WA_TAB WITH HEADER LINE. "创建一个内表,引用同样结构
DATA IT_TAB LIKE TABLE OF WA_TAB WITH HEADER LINE.
DATA IT_TAB02 LIKE TABLE OF ZMM017_T WITH HEADER LINE.
DATA P_NAME TYPE ADRP-NAME_FIRST.
DATA P_BEDAT TYPE EKKO-BEDAT.
DATA P_LIFNR TYPE EKKO-LIFNR.
DATA P_MATNR TYPE EKPO-MATNR.
DATA P_EBELN TYPE EKKO-EBELN.
* Custom Container Instance Reference
DATA: GR_CCONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA: GR_CCONTAINER2 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
* Name of custom control added on the screen.
DATA: GC_CUSTOM_CONTROL_NAME1 TYPE SCRFNAME VALUE 'C001'.
DATA: GC_CUSTOM_CONTROL_NAME2 TYPE SCRFNAME VALUE 'C002'.
* ALV Grid Instance Reference
DATA: GR_ALVGRID1 TYPE REF TO CL_GUI_ALV_GRID.
DATA: GR_ALVGRID2 TYPE REF TO CL_GUI_ALV_GRID.
* Field Catalog table
DATA: GT_FIELDCAT1 TYPE LVC_T_FCAT.
DATA: GT_FIELDCAT2 TYPE LVC_T_FCAT.
* Layout Structure
DATA: GS_LAYOUT1 TYPE LVC_S_LAYO.
DATA: GS_LAYOUT2 TYPE LVC_S_LAYO.
* Toolbar Table
DATA: GT_EXCLUDE TYPE UI_FUNCTIONS.
* Sort Table
DATA: GT_SORT TYPE LVC_T_SORT.
* Filter Table
DATA: GT_FILT TYPE LVC_T_FILT.
* Selected Rows
DATA: GT_ROW_NO TYPE LVC_T_ROID.
* Scroll Status
DATA: ST_ROW_NO TYPE LVC_S_ROID,
GT_COL_INFO TYPE LVC_S_COL.
*----------------------------------------------------------------------*
* CLASS lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER1 DEFINITION.
PUBLIC SECTION.
METHODS:
* To add new functional buttons to the ALV toolbar
HANDLE_TOOLBAR
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT E_INTERACTIVE,
* To implement user commands
HANDLE_USER_COMMAND
FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM.
ENDCLASS. "lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER1 IMPLEMENTATION.
* Handle Toolbar
METHOD HANDLE_TOOLBAR.
PERFORM HANDLE_TOOLBAR1 USING E_OBJECT E_INTERACTIVE.
ENDMETHOD. "handle_toolbar
* Handle User Command
METHOD HANDLE_USER_COMMAND.
PERFORM HANDLE_USER_COMMAND1 USING E_UCOMM.
ENDMETHOD. "handle_user_command
ENDCLASS. "lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER2 DEFINITION.
PUBLIC SECTION.
METHODS:
* To add new functional buttons to the ALV toolbar
HANDLE_TOOLBAR
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT E_INTERACTIVE,
* To implement user commands
HANDLE_USER_COMMAND
FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM.
ENDCLASS. "lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER2 IMPLEMENTATION.
* Handle Toolbar
METHOD HANDLE_TOOLBAR.
PERFORM HANDLE_TOOLBAR2 USING E_OBJECT E_INTERACTIVE.
ENDMETHOD. "handle_toolbar
* Handle User Command
METHOD HANDLE_USER_COMMAND.
PERFORM HANDLE_USER_COMMAND2 USING E_UCOMM.
ENDMETHOD. "handle_user_command
ENDCLASS. "lcl_event_handler IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form HANDLE_TOOLBAR1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_OBJECT text
* -->P_E_INTERACTIVE text
*----------------------------------------------------------------------*
FORM HANDLE_TOOLBAR1 USING P_E_OBJECT TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET
P_E_INTERACTIVE TYPE CHAR01.
DATA LS_TOOLBAR TYPE STB_BUTTON.
CLEAR LS_TOOLBAR.
MOVE 3 TO LS_TOOLBAR-BUTN_TYPE.
APPEND LS_TOOLBAR TO P_E_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
MOVE 'CREATE' TO LS_TOOLBAR-FUNCTION.
MOVE ICON_DISPLAY_TEXT TO LS_TOOLBAR-ICON.
MOVE '新增' TO LS_TOOLBAR-QUICKINFO.
MOVE '新增' TO LS_TOOLBAR-TEXT.
MOVE ' ' TO LS_TOOLBAR-DISABLED.
APPEND LS_TOOLBAR TO P_E_OBJECT->MT_TOOLBAR.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form HANDLE_USER_COMMAND1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_UCOMM text
*----------------------------------------------------------------------*
FORM HANDLE_USER_COMMAND1 USING P_E_UCOMM TYPE SY-UCOMM.
CASE P_E_UCOMM.
WHEN 'CREATE'.
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
FUNCTIONCODE = 'CREATE'
EXCEPTIONS
FUNCTION_NOT_SUPPORTED = 1
OTHERS = 2.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form HANDLE_TOOLBAR2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_OBJECT text
* -->P_E_INTERACTIVE text
*----------------------------------------------------------------------*
FORM HANDLE_TOOLBAR2 USING P_E_OBJECT TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET
P_E_INTERACTIVE TYPE CHAR01.
DATA LS_TOOLBAR TYPE STB_BUTTON.
CLEAR LS_TOOLBAR.
MOVE 3 TO LS_TOOLBAR-BUTN_TYPE.
APPEND LS_TOOLBAR TO P_E_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
MOVE 'PRINT' TO LS_TOOLBAR-FUNCTION.
MOVE ICON_DISPLAY_TEXT TO LS_TOOLBAR-ICON.
MOVE '打印' TO LS_TOOLBAR-QUICKINFO.
MOVE '打印' TO LS_TOOLBAR-TEXT.
MOVE ' ' TO LS_TOOLBAR-DISABLED.
APPEND LS_TOOLBAR TO P_E_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
MOVE 'REPRINT' TO LS_TOOLBAR-FUNCTION.
MOVE ICON_DISPLAY_TEXT TO LS_TOOLBAR-ICON.
MOVE '重置打印' TO LS_TOOLBAR-QUICKINFO.
MOVE '重置打印' TO LS_TOOLBAR-TEXT.
MOVE ' ' TO LS_TOOLBAR-DISABLED.
APPEND LS_TOOLBAR TO P_E_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
MOVE 'DELETE' TO LS_TOOLBAR-FUNCTION.
MOVE ICON_DISPLAY_TEXT TO LS_TOOLBAR-ICON.
MOVE '删除' TO LS_TOOLBAR-QUICKINFO.
MOVE '删除' TO LS_TOOLBAR-TEXT.
MOVE ' ' TO LS_TOOLBAR-DISABLED.
APPEND LS_TOOLBAR TO P_E_OBJECT->MT_TOOLBAR.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form HANDLE_USER_COMMAND2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_UCOMM text
*----------------------------------------------------------------------*
FORM HANDLE_USER_COMMAND2 USING P_E_UCOMM TYPE SY-UCOMM.
CASE P_E_UCOMM.
WHEN 'PRINT'.
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
FUNCTIONCODE = 'PRINT'
EXCEPTIONS
FUNCTION_NOT_SUPPORTED = 1
OTHERS = 2.
WHEN 'REPRINT'.
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
FUNCTIONCODE = 'REPRINT'
EXCEPTIONS
FUNCTION_NOT_SUPPORTED = 1
OTHERS = 2.
WHEN 'DELETE'.
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
FUNCTIONCODE = 'DELETE'
EXCEPTIONS
FUNCTION_NOT_SUPPORTED = 1
OTHERS = 2.
ENDCASE.
ENDFORM.
* ALV Event Handler Reference
DATA: GR_EVENT_HANDLER1 TYPE REF TO LCL_EVENT_HANDLER1.
DATA: GR_EVENT_HANDLER2 TYPE REF TO LCL_EVENT_HANDLER2.
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-001.
PARAMETER: S_NAME LIKE P_NAME DEFAULT SY-UNAME OBLIGATORY .
SELECT-OPTIONS: S_BEDAT FOR P_BEDAT .
SELECT-OPTIONS: S_LIFNR FOR P_LIFNR .
SELECT-OPTIONS: S_MATNR FOR P_MATNR .
SELECT-OPTIONS: S_EBELN FOR P_EBELN .
SELECTION-SCREEN END OF BLOCK BL1.
INITIALIZATION.
AT SELECTION-SCREEN OUTPUT.
AT SELECTION-SCREEN.
START-OF-SELECTION.
IF SY-UNAME <> 'HS_08' AND SY-UNAME <> 'HDX' .
IF S_NAME <> SY-UNAME.
MESSAGE '不允许操作其他采购人员发起的订单' TYPE 'E' DISPLAY LIKE 'I'.
ENDIF.
ENDIF.
PERFORM GET_DATA. "数据提取
PERFORM GET_DATA_TABLS. "自建表数据提取
PERFORM GET_DATA_TMP."数据处理
CALL SCREEN 2000.
END-OF-SELECTION.
FORM GET_DATA.
SELECT
A~BUKRS
A~ERNAM
A~EBELN AS A_EBELN
A~BEDAT
B~MENGE
A~LIFNR
A~WAERS
B~BRTWR AS A_BRTWR
B~NETWR "非含税金额
B~TXZ01
C~NAME1
B~MATNR
B~MWSKZ
B~MEINS
INTO CORRESPONDING FIELDS OF TABLE IT_TAB
FROM EKKO AS A INNER JOIN
EKPO AS B ON A~EBELN = B~EBELN INNER JOIN
LFA1 AS C ON A~LIFNR = C~LIFNR
WHERE A~EBELN IN S_EBELN AND
B~MATNR IN S_MATNR AND
A~LIFNR IN S_LIFNR AND
A~BEDAT IN S_BEDAT .
IF SY-SUBRC = 0.
IT_DATA_TMP[] = IT_TAB[].
SORT IT_DATA_TMP BY ERNAM.
DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING ERNAM.
IF IT_DATA_TMP[] IS NOT INITIAL .
SELECT
B~NAME_FIRST
A~BNAME
INTO CORRESPONDING FIELDS OF TABLE IT_NAME_FIRST
FROM USR21 AS A INNER JOIN
ADRP AS B ON A~PERSNUMBER = B~PERSNUMBER
FOR ALL ENTRIES IN IT_DATA_TMP
WHERE BNAME = IT_DATA_TMP-ERNAM.
IF SY-SUBRC = 0.
LOOP AT IT_TAB .
READ TABLE IT_NAME_FIRST WITH KEY BNAME = IT_TAB-ERNAM.
IF SY-SUBRC = 0.
IT_TAB-NAME_FIRST = IT_NAME_FIRST-NAME_FIRST.
MODIFY IT_TAB.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
IT_DATA_TMP[] = IT_TAB[] .
SORT IT_DATA_TMP BY MWSKZ.
DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING MWSKZ.
IF IT_DATA_TMP[] IS NOT INITIAL .
SELECT
J~KNUMH
K~KBETR
J~MWSKZ
INTO CORRESPONDING FIELDS OF TABLE IT_KBETR
FROM A003 AS J INNER JOIN
KONP AS K ON J~KNUMH = K~KNUMH AND J~MWSKZ = K~MWSK1
FOR ALL ENTRIES IN IT_DATA_TMP
WHERE MWSKZ = IT_DATA_TMP-MWSKZ AND J~KSCHL = 'MWVS' AND J~KAPPL = 'TX' AND J~ALAND = 'CN'.
IF SY-SUBRC = 0.
LOOP AT IT_TAB .
READ TABLE IT_KBETR WITH KEY MWSKZ = IT_TAB-MWSKZ .
IF SY-SUBRC = 0.
IT_TAB-KBETR = IT_KBETR-KBETR.
MODIFY IT_TAB .
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
DELETE IT_TAB WHERE ERNAM <> S_NAME.
LOOP AT IT_TAB.
IT_TAB-B_BRTWR = IT_TAB-A_BRTWR.
DATA: A_BRTWR_T TYPE CHAR50.
IF IT_TAB-WAERS = 'JPY' .
IF IT_TAB-A_TAX = 'X'.
IT_TAB-B_BRTWR = IT_TAB-B_BRTWR * 100. "含税金额
ELSE.
IT_TAB-B_BRTWR = IT_TAB-NETWR * 100. "未税金额
* CONDENSE A_BRTWR_T NO-GAPS.
* IT_TAB-B_BRTWR = A_BRTWR_T.
ENDIF.
ENDIF.
IT_TAB-LDANJIA = IT_TAB-B_BRTWR / IT_TAB-MENGE.
IT_TAB-KBETR = IT_TAB-KBETR / 10. "税率算法
IT_TAB-DIAOBO = IT_TAB-A_EBELN+0(2). "删除移库的订单
MODIFY IT_TAB.
ENDLOOP.
LOOP AT IT_TAB .
MODIFY IT_TAB.
ENDLOOP.
DELETE IT_TAB WHERE DIAOBO = '46'. "删除移库的订单
ENDFORM.
FORM GET_DATA_TABLS. "自建表数据提取
SELECT
LIFNR "供应商
NAME1 "供应商名称
NAME_FIRST "受款人
ZZSY "暂支事由
BRTWR "暂支金额
A_MENT "付款比例
A_TAX "是否含税
EBELN "采购订单号
A_ERNAM "创建人
B_BEDAT "创建日期
A_TIME "创建时间
A_BNAME "修改人
C_MODAT "修改日期
A_TIME1 "修改时间
A_ZANZH "暂支次数
A_BEDAT "暂支日期
A_PRINT "打印状态
WAERS "币种
A_FUKUAN "付款日期
A_BEIZ "付款日期
BUKRS "公司代码
KBETR "税率
INTO CORRESPONDING FIELDS OF TABLE IT_ZMM017_TMP
FROM ZZMM017
WHERE EBELN IN S_EBELN AND
A_BEIZ = ''.
DELETE IT_ZMM017_TMP WHERE A_ERNAM <> S_NAME.
ENDFORM.
FORM CONV_AMOUNT USING VALUE(F_SOURCE) "小写金额转换成大写
CHANGING VALUE(F_RESULT).
DATA: SCR(30) TYPE C, RES(60) TYPE C,FEN(2) TYPE C .
DATA: LEN TYPE I, C1 TYPE I, C2 TYPE I, C3 TYPE I, C4 TYPE I.
DATA: D1(1) TYPE C, D2(1) TYPE C, D3 TYPE I.
DATA: DIGIT(2) TYPE C, WEIGHT(2) TYPE C.
DATA: RULE1(20) TYPE C VALUE '零壹贰叁肆伍陆柒捌玖'.
DATA: RULE2(30) TYPE C VALUE '分角元拾佰仟万拾佰仟亿拾佰仟万'.
SCR = F_SOURCE * 100.
CONDENSE SCR NO-GAPS.
IF SCR = '0'.
RES = '零元'.
ELSE.
LEN = STRLEN( SCR ).
C1 = 0.
D1 = '0'.
CLEAR RES.
DO LEN TIMES.
C1 = C1 + 1.
C2 = LEN - C1.
D2 = SCR+C2(1) .
IF D2 = '0'.
D3 = 0.
ELSE.
D3 = D2.
"d3 = d2 * 2.
ENDIF.
DIGIT = RULE1+D3(1) .
C3 = ( C1 - 1 ) .
WEIGHT = RULE2+C3(1) .
" digit = rule1+d3(2) .
" c3 = ( c1 - 1 ) * 2.
" weight = rule2+c3(2) .
IF D2 = '0'.
IF C1 = 3.
DIGIT = ''.
ELSEIF C1 = 7.
DIGIT = ''.
IF LEN > 10 .
C4 = LEN - 10.
IF SCR+C4(4) = '0000'.
WEIGHT = ''.
ENDIF.
ENDIF.
ELSEIF C1 = 11.
DIGIT = ''.
ELSEIF D1 = '0'.
DIGIT = ''.
WEIGHT = ''.
ELSE.
WEIGHT = ''.
ENDIF.
ENDIF.
CONCATENATE DIGIT WEIGHT RES INTO RES .
D1 = D2.
ENDDO.
ENDIF.
LEN = STRLEN( RES ) - 1.
FEN = RES+LEN(1).
IF FEN <> '分' .
CONCATENATE RES '整' INTO F_RESULT.
ELSE.
F_RESULT = RES.
ENDIF.
ENDFORM.
FORM GET_DATA_TMP."数据处理
LOOP AT IT_TAB .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' "去除前导零
EXPORTING
INPUT = IT_TAB-MATNR
IMPORTING
OUTPUT = IT_TAB-MATNR.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' "去除前导零
EXPORTING
INPUT = IT_TAB-LIFNR
IMPORTING
OUTPUT = IT_TAB-LIFNR.
MODIFY IT_TAB.
ENDLOOP.
ENDFORM.
FORM GET_DATA_XINZENG. "新增操作
LOOP AT IT_SELECTED.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
INPUT = IT_SELECTED-MEINS
LANGUAGE = SY-LANGU
IMPORTING
* LONG_TEXT =
OUTPUT = IT_SELECTED-MEINS
* SHORT_TEXT =
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
DATA C_MENGE(30) TYPE C.
DATA C_LDANJIA(20) TYPE C.
DATA C_BRTWR(30) TYPE C.
C_MENGE = IT_SELECTED-MENGE.
C_LDANJIA = IT_SELECTED-LDANJIA.
C_BRTWR = IT_SELECTED-B_BRTWR.
CONCATENATE IT_SELECTED-TXZ01 ',' '数量:' C_MENGE ',' '单位:' IT_SELECTED-MEINS ',' '单价:' C_LDANJIA ',' '金额:' C_BRTWR INTO IT_SELECTED-ZZSY.
CONDENSE IT_SELECTED-ZZSY NO-GAPS.
IF IT_SELECTED-WAERS <> 'CNY'.
IF IT_SELECTED-A_TAX = 'X'..
MESSAGE '操作失败,外币不存在含税' TYPE 'E'.
ENDIF.
ENDIF.
DATA: B_BEDAT TYPE SY-DATLO.
DATA: A_ERNAM TYPE SY-UNAME.
DATA: A_TIME TYPE SY-TIMLO.
A_ERNAM = SY-UNAME . "当前用户
B_BEDAT = SY-DATLO . "当前日期
A_TIME = SY-TIMLO . "当前时间
IF IT_SELECTED-A_TAX = 'X'.
SELECT
B~EBELN
BRTWR
INTO CORRESPONDING FIELDS OF TABLE IT_TAB_TMP
FROM EKPO AS A INNER JOIN
EKKO AS B ON A~EBELN = B~EBELN
WHERE B~EBELN = IT_SELECTED-A_EBELN.
ELSE.
SELECT
NETWR
B~EBELN
INTO CORRESPONDING FIELDS OF TABLE IT_TAB_TMP
FROM EKPO AS A INNER JOIN
EKKO AS B ON A~EBELN = B~EBELN
WHERE B~EBELN = IT_SELECTED-A_EBELN.
ENDIF.
IF IT_TAB_TMP[] IS NOT INITIAL.
CLEAR IT_TAB_TMP_T[].
LOOP AT IT_TAB_TMP.
COLLECT IT_TAB_TMP INTO IT_TAB_TMP_T.
ENDLOOP.
ENDIF.
LOOP AT IT_TAB_TMP_T WHERE EBELN = IT_SELECTED-A_EBELN.
IF IT_SELECTED-A_TAX = 'X'.
IT_SELECTED-B_BRTWR = IT_TAB_TMP_T-BRTWR.
ELSE.
IT_SELECTED-B_BRTWR = IT_TAB_TMP_T-NETWR.
ENDIF.
MODIFY IT_SELECTED.
ENDLOOP.
IF IT_SELECTED-WAERS = 'JPY' .
IT_SELECTED-B_BRTWR = IT_SELECTED-B_BRTWR * 100. "日元金额
ENDIF.
IT_SELECTED-A_NETWR = IT_SELECTED-B_BRTWR / 100 * IT_SELECTED-A_MENT. "通过比例计算出暂支金额
CLEAR IT_ZMM017_T[].
SELECT
EBELN
A_MENT
FROM ZZMM017
INTO CORRESPONDING FIELDS OF TABLE IT_ZMM017_T
WHERE EBELN = IT_SELECTED-A_EBELN AND A_BEIZ = ''.
DATA LV_CONT(1) TYPE C.
CLEAR LV_CONT.
DESCRIBE TABLE IT_ZMM017_T LINES LV_CONT. "计算条目数
IF LV_CONT >= 0.
LV_CONT = LV_CONT + 1.
ENDIF.
IF LV_CONT > 4.
MESSAGE '此次订单已经暂支超过4次,不允许继续操作' TYPE 'E'.
ENDIF.
IF IT_SELECTED-A_MENT = ''.
MESSAGE '必须填写暂支比例,否则无法新增。' TYPE 'E'.
ENDIF.
CLEAR IT_ZMM017_T1[].
LOOP AT IT_ZMM017_T.
COLLECT IT_ZMM017_T INTO IT_ZMM017_T1.
ENDLOOP.
LOOP AT IT_ZMM017_T1.
DATA SUM TYPE VRKME.
SUM = IT_ZMM017_T1-A_MENT.
ENDLOOP.
SUM = SUM + IT_SELECTED-A_MENT.
IF SUM > 100 .
MESSAGE '暂支比例超过了%100,不允许继续操作' TYPE 'E'.
ELSE.
IT_ZMM017-LIFNR = IT_SELECTED-LIFNR .
IT_ZMM017-NAME1 = IT_SELECTED-NAME1 .
IT_ZMM017-NAME_FIRST = IT_SELECTED-NAME_FIRST.
IT_ZMM017-ZZSY = IT_SELECTED-ZZSY.
IT_ZMM017-BRTWR = IT_SELECTED-A_NETWR.
IT_ZMM017-A_MENT = IT_SELECTED-A_MENT.
IT_ZMM017-A_TAX = IT_SELECTED-A_TAX.
IT_ZMM017-EBELN = IT_SELECTED-A_EBELN.
IT_ZMM017-WAERS = IT_SELECTED-WAERS.
IT_ZMM017-BUKRS = IT_SELECTED-BUKRS.
IT_ZMM017-KBETR = IT_SELECTED-KBETR.
IT_ZMM017-A_ERNAM = A_ERNAM.
IT_ZMM017-B_BEDAT = B_BEDAT.
IT_ZMM017-A_TIME = A_TIME.
IT_ZMM017-A_ZANZH = LV_CONT.
MODIFY ZZMM017 FROM IT_ZMM017.
CLEAR: IT_ZMM017 ,SUM .
MESSAGE '导入数据成功' TYPE 'S'.
ENDIF.
CLEAR: IT_ZMM017_TMP .
IF IT_SELECTED[] IS NOT INITIAL.
IT_SELECTED-SEL_BOX = 'X'.
IT_ZMM017_TMP-LIFNR = IT_SELECTED-LIFNR .
IT_ZMM017_TMP-NAME1 = IT_SELECTED-NAME1 .
IT_ZMM017_TMP-NAME_FIRST = IT_SELECTED-NAME_FIRST.
IT_ZMM017_TMP-ZZSY = IT_SELECTED-ZZSY.
IT_ZMM017_TMP-BRTWR = IT_SELECTED-A_NETWR.
IT_ZMM017_TMP-A_MENT = IT_SELECTED-A_MENT.
IT_ZMM017_TMP-A_TAX = IT_SELECTED-A_TAX.
IT_ZMM017_TMP-EBELN = IT_SELECTED-A_EBELN.
IT_ZMM017_TMP-WAERS = IT_SELECTED-WAERS.
IT_ZMM017_TMP-A_ERNAM = A_ERNAM.
IT_ZMM017_TMP-B_BEDAT = B_BEDAT.
IT_ZMM017_TMP-A_TIME = A_TIME.
IT_ZMM017_TMP-A_ZANZH = LV_CONT.
IT_ZMM017_TMP-SEL_BOX = IT_SELECTED-SEL_BOX.
IT_ZMM017_TMP-A_BEDAT = SY-DATLO.
IT_ZMM017_TMP-BUKRS = IT_SELECTED-BUKRS.
IT_ZMM017_TMP-KBETR = IT_SELECTED-KBETR. "税率
APPEND IT_ZMM017_TMP.
ENDIF.
ENDLOOP.
ENDFORM.
FORM GET_PRINT . "重置打印
LOOP AT IT_SELECTED_TMP.
DATA NUM(1) TYPE C.
DATA DATE(8) TYPE N.
DATA ZDATE(8) TYPE N.
DATA: B_BEDAT TYPE SY-DATLO.
DATA: A_ERNAM TYPE SY-UNAME.
DATA: A_TIME TYPE SY-TIMLO.
A_ERNAM = SY-UNAME . "当前用户
B_BEDAT = SY-DATLO . "当前日期
A_TIME = SY-TIMLO . "当前时间
DATE = IT_SELECTED_TMP-A_BEDAT.
ZDATE = IT_SELECTED_TMP-B_BEDAT.
DATA F_SOURCE LIKE VBAP-KWMENG.
DATA F_RESULT(40) TYPE C.
F_SOURCE = IT_SELECTED_TMP-BRTWR.
PERFORM CONV_AMOUNT USING F_SOURCE
CHANGING F_RESULT.
MOVE F_RESULT TO IT_SELECTED_TMP-A_DAXIE.
MODIFY IT_SELECTED_TMP.
IF IT_SELECTED_TMP-A_BEDAT = 00000000.
MESSAGE '暂支日期不能为空' TYPE 'E'.
ENDIF.
IF IT_SELECTED_TMP-A_FUKUAN = 00000000.
MESSAGE '付款日期不能为空' TYPE 'E'.
ENDIF.
IF IT_SELECTED_TMP-A_BEDAT > IT_SELECTED_TMP-A_FUKUAN.
MESSAGE '付款日期不能早于创建日期' TYPE 'E'.
ENDIF.
IF IT_SELECTED_TMP-A_BEDAT < IT_SELECTED_TMP-B_BEDAT.
MESSAGE '暂支日期不能早于创建日期' TYPE 'E'.
ENDIF.
IF IT_SELECTED_TMP-A_PRINT = ''.
MESSAGE '此订单尚未打印,不需要重置打印' TYPE 'E'.
ENDIF.
IF IT_SELECTED_TMP-A_BEIZ = ''.
MESSAGE '请在备注填写重置打印原因,否则不能重置打印' TYPE 'E'.
ELSE.
* IT_SELECTED_TMP-A_PRINT = 'X'.
IT_ZMM017-EBELN = IT_SELECTED_TMP-EBELN. "订单号
IT_ZMM017-A_BEDAT = IT_SELECTED_TMP-A_BEDAT. "暂支日期
IT_ZMM017-A_PRINT = IT_SELECTED_TMP-A_PRINT. "打印状态
IT_ZMM017-LIFNR = IT_SELECTED_TMP-LIFNR. "供应商
IT_ZMM017-A_ZANZH = IT_SELECTED_TMP-A_ZANZH. "暂支次数
IT_ZMM017-NAME1 = IT_SELECTED_TMP-NAME1. "供应商简称
IT_ZMM017-ZZSY = IT_SELECTED_TMP-ZZSY. "暂支事由
IT_ZMM017-BRTWR = IT_SELECTED_TMP-BRTWR. "暂支金额
IT_ZMM017-A_MENT = IT_SELECTED_TMP-A_MENT. "暂支比例(%)
IT_ZMM017-A_TAX = IT_SELECTED_TMP-A_TAX. "是否含税
IT_ZMM017-WAERS = IT_SELECTED_TMP-WAERS. "币种
IT_ZMM017-A_ERNAM = IT_SELECTED_TMP-A_ERNAM. "创建人
IT_ZMM017-BUKRS = IT_SELECTED_TMP-BUKRS. "公司代码
IT_ZMM017-B_BEDAT = IT_SELECTED_TMP-B_BEDAT. "创建日期
IT_ZMM017-A_TIME = IT_SELECTED_TMP-A_TIME. "创建时间
IT_ZMM017-A_BNAME = A_ERNAM. "修改人
IT_ZMM017-A_TIME1 = A_TIME. "修改时间
IT_ZMM017-C_MODAT = B_BEDAT. "修改日期
IT_ZMM017-NAME_FIRST = IT_SELECTED_TMP-NAME_FIRST."受款人
IT_ZMM017-A_FUKUAN = IT_SELECTED_TMP-A_FUKUAN. "付款日期
IT_ZMM017-A_BEIZ = IT_SELECTED_TMP-A_BEIZ. "备注
IT_ZMM017-KBETR = IT_SELECTED_TMP-KBETR. ""税率
MODIFY ZZMM017 FROM IT_ZMM017.
CLEAR IT_ZMM017.
ENDIF.
ENDLOOP.
DATA:
LW_PATH TYPE RSPOPNAME,
LW_FUNC_NAME TYPE RS38L_FNAM,
T_CONTROL_PARAMETERS TYPE SSFCTRLOP,
T_OUTPUT_OPTIONS TYPE SSFCOMPOP.
***获取SMARTFORMS的Function Module***
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZMM017' "SMARTFORMS的表名
IMPORTING
FM_NAME = LW_FUNC_NAME "功能名称
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
CLEAR:T_CONTROL_PARAMETERS,T_OUTPUT_OPTIONS.
***Smart Forms: 控制结构*****
T_CONTROL_PARAMETERS-PREVIEW = 'X'. "不打印预览,X 则打印预览
T_CONTROL_PARAMETERS-NO_OPEN = 'X'. "新的假脱机请求(必写)
T_CONTROL_PARAMETERS-NO_CLOSE = 'X'. "不关闭新的假脱机请求(必写)
T_CONTROL_PARAMETERS-NO_DIALOG = ' '. "弹出打印设置的对话框,X 则不显示框
T_CONTROL_PARAMETERS-DEVICE = 'PRINTER'. "PRINTER\MAIL\TELEFAX,缺省是PRINTER
***SAP Smart Forms: 智能写作器 (传输) 选项*****
T_OUTPUT_OPTIONS-TDNOPREV = ' '. "是否打印预览,X是不预览。
T_OUTPUT_OPTIONS-TDNOPRINT = ' '. "没有打印预览的打印输出,设置X。
T_OUTPUT_OPTIONS-TDIMMED = ' '. "立即打印标志。
T_OUTPUT_OPTIONS-TDDEST = 'LP01'. "假脱机,输出设备。
***调用SSF_OPEN函数设置打印机,打开输出请求,使用用户打印设置必须调用SSF_OPEN***
CALL FUNCTION 'SSF_OPEN'
EXPORTING
OUTPUT_OPTIONS = T_OUTPUT_OPTIONS
CONTROL_PARAMETERS = T_CONTROL_PARAMETERS
USER_SETTINGS = ' '
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
"循环工作区如果SEL_BOX=X
LOOP AT IT_SELECTED_TMP WHERE SEL_BOX = 'X' .
DATA YEAR(4) TYPE C.
DATA YUE(2) TYPE C.
DATA RI(2) TYPE C.
DATA SHUI(3) TYPE C.
YEAR = IT_SELECTED_TMP-A_BEDAT+0(4).
YUE = IT_SELECTED_TMP-A_BEDAT+4(2).
RI = IT_SELECTED_TMP-A_BEDAT+6(2).
DATA A_YEAR(4) TYPE C.
DATA A_YUE(2) TYPE C.
DATA A_RI(2) TYPE C.
A_YEAR = IT_SELECTED_TMP-A_FUKUAN+0(4).
A_YUE = IT_SELECTED_TMP-A_FUKUAN+4(2).
A_RI = IT_SELECTED_TMP-A_FUKUAN+6(2).
IF IT_SELECTED_TMP-A_TAX = 'X'.
SHUI = '含税'.
ELSE.
SHUI = '未税'.
ENDIF.
DATA C_MENT(3) TYPE C.
DATA C_BEIZHU(250) TYPE C.
DATA C_FUKUAN(8) TYPE C.
DATA C_ZANZH TYPE CHAR1.
C_FUKUAN = IT_SELECTED_TMP-A_FUKUAN.
C_MENT = IT_SELECTED_TMP-A_MENT.
C_ZANZH = IT_SELECTED_TMP-A_ZANZH+3(1).
CONCATENATE SHUI ',' '预付:' C_MENT '%' ',' '付款日期:' A_YEAR '-' A_YUE '-' A_RI ',' '暂支次数:' C_ZANZH '次' INTO C_BEIZHU.
CONDENSE C_BEIZHU NO-GAPS.
SELECT SINGLE NAME1 INTO IT_SELECTED_TMP-NAME1_T FROM T001W WHERE WERKS = IT_SELECTED_TMP-BUKRS.
SELECT
BRTWR
TXZ01
MENGE
WAERS
NETWR
MEINS
INTO CORRESPONDING FIELDS OF TABLE IT_TAB01
FROM EKPO AS A INNER JOIN
EKKO AS B ON A~EBELN = B~EBELN
WHERE A~EBELN = IT_SELECTED_TMP-EBELN.
DATA: LDANJIA(16) TYPE P DECIMALS 4. "含税单价
LOOP AT IT_TAB01.
IF IT_SELECTED_TMP-A_TAX IS NOT INITIAL.
IT_TAB01-A_TAX = IT_SELECTED_TMP-A_TAX.
ENDIF.
IF IT_TAB01-A_TAX = 'X'..
IT_TAB01-B_BRTWR = IT_TAB01-BRTWR.
ELSE.
IT_TAB01-B_BRTWR = IT_TAB01-NETWR.
ENDIF.
IF IT_TAB01-WAERS = 'JPY' .
IT_TAB01-B_BRTWR = IT_TAB01-B_BRTWR * 100. " 日元
ENDIF.
IF IT_TAB01-WAERS = 'JPY'.
LDANJIA = IT_TAB01-B_BRTWR / IT_TAB01-MENGE.
ELSE.
LDANJIA = IT_TAB01-BRTWR / IT_TAB01-MENGE.
ENDIF.
DATA C_MENGE(30) TYPE C.
DATA C_LDANJIA(20) TYPE C.
DATA C_BRTWR(30) TYPE C.
C_MENGE = IT_TAB01-MENGE.
C_LDANJIA = LDANJIA.
IF IT_TAB01-WAERS = 'JPY'.
C_BRTWR = IT_TAB01-B_BRTWR.
ELSE.
C_BRTWR = IT_TAB01-BRTWR.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
INPUT = IT_TAB01-MEINS
LANGUAGE = SY-LANGU
IMPORTING
* LONG_TEXT =
OUTPUT = IT_TAB01-MEINS
* SHORT_TEXT =
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
* CONDENSE C_MENGE NO-GAPS.
* CONCATENATE C_MENGE IT_TAB01-MEINS INTO C_MENGE.
* CONDENSE C_MENGE NO-GAPS.
CONCATENATE IT_TAB01-TXZ01 ',' '数量:' C_MENGE ',' '单位:' IT_TAB01-MEINS ',' '单价:' C_LDANJIA ',' '金额:' C_BRTWR INTO IT_TAB01-ZZSY.
CONDENSE IT_TAB01-ZZSY NO-GAPS.
MODIFY IT_TAB01.
ENDLOOP.
DATA: LNUM TYPE CHAR2.
CLEAR :IT_TAB02[] ,LNUM.
LOOP AT IT_TAB01.
IT_TAB02-ZZSY = IT_TAB01-ZZSY.
LNUM = LNUM + 1.
IT_TAB02-LNUM = LNUM.
APPEND IT_TAB02.
ENDLOOP.
IF IT_SELECTED_TMP-WAERS = 'CNY'.
IF IT_SELECTED_TMP-KBETR IS INITIAL.
SELECT SINGLE MWSKZ INTO IT_SELECTED_TMP-MWSKZ FROM EKPO WHERE EBELN = IT_SELECTED_TMP-EBELN.
SELECT SINGLE B~KBETR INTO IT_SELECTED_TMP-KBETR FROM KONP AS B INNER JOIN
A003 AS A ON A~KNUMH = B~KNUMH AND A~MWSKZ = B~MWSK1
WHERE A~MWSKZ = IT_SELECTED_TMP-MWSKZ AND A~KSCHL = 'MWVS' AND A~KAPPL = 'TX' AND A~ALAND = 'CN'.
IT_SELECTED_TMP-KBETR = IT_SELECTED_TMP-KBETR / 10. "税率算法
ENDIF.
ENDIF.
CALL FUNCTION LW_FUNC_NAME "则循环打印规则
EXPORTING
CONTROL_PARAMETERS = T_CONTROL_PARAMETERS "设置不显示打印确认对话框
OUTPUT_OPTIONS = T_OUTPUT_OPTIONS "默认打印选项设置传输
USER_SETTINGS = SPACE
EBELN = IT_SELECTED_TMP-EBELN "订单号
NAME_FIRST = IT_SELECTED_TMP-NAME_FIRST "受款人
NAME1 = IT_SELECTED_TMP-NAME1 "供应商
ZZSY = IT_SELECTED_TMP-ZZSY "暂支事由
BRTWR = IT_SELECTED_TMP-BRTWR "暂支金额
A_DAXIE = IT_SELECTED_TMP-A_DAXIE "大写金额
C_BEIZHU = C_BEIZHU
YEAR = YEAR
YUE = YUE
RI = RI
BUKRS = IT_SELECTED_TMP-BUKRS
NAME1_T = IT_SELECTED_TMP-NAME1_T
WAERS = IT_SELECTED_TMP-WAERS
KBETR = IT_SELECTED_TMP-KBETR
TABLES
IT_TAB = IT_TAB02
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
ENDLOOP.
IF SY-SUBRC <> 0.
* MESSAGE S008(ZHKTL1) WITH SY-SUBRC DISPLAY LIKE CNS_E.
* LEAVE LIST-PROCESSING.
ENDIF.
***关闭打印机设置***
CALL FUNCTION 'SSF_CLOSE'
* IMPORTING
* JOB_OUTPUT_INFO
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
FORM GET_PRINT1 .
LOOP AT IT_SELECTED_TMP.
DATA NUM(1) TYPE C.
DATA DATE(8) TYPE N.
DATA ZDATE(8) TYPE N.
DATE = IT_SELECTED_TMP-A_BEDAT.
ZDATE = IT_SELECTED_TMP-B_BEDAT.
DATA F_SOURCE LIKE VBAP-KWMENG.
DATA F_RESULT(40) TYPE C.
F_SOURCE = IT_SELECTED_TMP-BRTWR.
PERFORM CONV_AMOUNT USING F_SOURCE
CHANGING F_RESULT.
MOVE F_RESULT TO IT_SELECTED_TMP-A_DAXIE.
MODIFY IT_SELECTED_TMP.
IF IT_SELECTED_TMP-A_BEDAT = 00000000.
MESSAGE '暂支日期不能为空' TYPE 'E'.
ENDIF.
IF IT_SELECTED_TMP-A_FUKUAN = 00000000.
MESSAGE '付款日期不能为空' TYPE 'E'.
ENDIF.
IF IT_SELECTED_TMP-A_BEDAT < IT_SELECTED_TMP-B_BEDAT.
MESSAGE '暂支日期不能早于创建日期' TYPE 'E'.
ENDIF.
IF IT_SELECTED_TMP-A_PRINT = 'X'.
MESSAGE '此暂支单已经打印过,无法继续打印' TYPE 'E'.
ENDIF.
IF IT_SELECTED_TMP-A_BEDAT > IT_SELECTED_TMP-A_FUKUAN.
MESSAGE '付款日期不能早于创建日期' TYPE 'E'.
ELSE.
IT_SELECTED_TMP-A_PRINT = 'X'.
IT_ZMM017-EBELN = IT_SELECTED_TMP-EBELN. "订单号
IT_ZMM017-A_BEDAT = IT_SELECTED_TMP-A_BEDAT. "暂支日期
IT_ZMM017-A_PRINT = IT_SELECTED_TMP-A_PRINT. "打印状态
IT_ZMM017-LIFNR = IT_SELECTED_TMP-LIFNR. "供应商
IT_ZMM017-A_ZANZH = IT_SELECTED_TMP-A_ZANZH. "暂支次数
IT_ZMM017-NAME1 = IT_SELECTED_TMP-NAME1. "供应商简称
IT_ZMM017-ZZSY = IT_SELECTED_TMP-ZZSY. "暂支事由
IT_ZMM017-BRTWR = IT_SELECTED_TMP-BRTWR. "暂支金额
IT_ZMM017-A_MENT = IT_SELECTED_TMP-A_MENT. "暂支比例(%)
IT_ZMM017-A_TAX = IT_SELECTED_TMP-A_TAX. "是否含税
IT_ZMM017-WAERS = IT_SELECTED_TMP-WAERS. "币种
IT_ZMM017-A_ERNAM = IT_SELECTED_TMP-A_ERNAM. "创建人
IT_ZMM017-BUKRS = IT_SELECTED_TMP-BUKRS. "公司代码
IT_ZMM017-B_BEDAT = IT_SELECTED_TMP-B_BEDAT. "创建日期
IT_ZMM017-A_TIME = IT_SELECTED_TMP-A_TIME. "创建时间
IT_ZMM017-A_BNAME = IT_SELECTED_TMP-A_BNAME. "修改人
IT_ZMM017-A_TIME1 = IT_SELECTED_TMP-A_TIME1. "修改时间
IT_ZMM017-C_MODAT = IT_SELECTED_TMP-C_MODAT. "修改日期
IT_ZMM017-NAME_FIRST = IT_SELECTED_TMP-NAME_FIRST."受款人
IT_ZMM017-A_FUKUAN = IT_SELECTED_TMP-A_FUKUAN."付款日期
IT_ZMM017-KBETR = IT_SELECTED_TMP-KBETR. "税率
MODIFY ZZMM017 FROM IT_ZMM017.
CLEAR IT_ZMM017.
ENDIF.
ENDLOOP.
DATA:
LW_PATH TYPE RSPOPNAME,
LW_FUNC_NAME TYPE RS38L_FNAM,
T_CONTROL_PARAMETERS TYPE SSFCTRLOP,
T_OUTPUT_OPTIONS TYPE SSFCOMPOP.
***获取SMARTFORMS的Function Module***
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZMM017' "SMARTFORMS的表名
IMPORTING
FM_NAME = LW_FUNC_NAME "功能名称
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
CLEAR:T_CONTROL_PARAMETERS,T_OUTPUT_OPTIONS.
***Smart Forms: 控制结构*****
T_CONTROL_PARAMETERS-PREVIEW = 'X'. "不打印预览,X 则打印预览
T_CONTROL_PARAMETERS-NO_OPEN = 'X'. "新的假脱机请求(必写)
T_CONTROL_PARAMETERS-NO_CLOSE = 'X'. "不关闭新的假脱机请求(必写)
T_CONTROL_PARAMETERS-NO_DIALOG = ' '. "弹出打印设置的对话框,X 则不显示框
T_CONTROL_PARAMETERS-DEVICE = 'PRINTER'. "PRINTER\MAIL\TELEFAX,缺省是PRINTER
***SAP Smart Forms: 智能写作器 (传输) 选项*****
T_OUTPUT_OPTIONS-TDNOPREV = ' '. "是否打印预览,X是不预览。
T_OUTPUT_OPTIONS-TDNOPRINT = ' '. "没有打印预览的打印输出,设置X。
T_OUTPUT_OPTIONS-TDIMMED = ' '. "立即打印标志。
T_OUTPUT_OPTIONS-TDDEST = 'LP01'. "假脱机,输出设备。
***调用SSF_OPEN函数设置打印机,打开输出请求,使用用户打印设置必须调用SSF_OPEN***
CALL FUNCTION 'SSF_OPEN'
EXPORTING
OUTPUT_OPTIONS = T_OUTPUT_OPTIONS
CONTROL_PARAMETERS = T_CONTROL_PARAMETERS
USER_SETTINGS = ' '
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
"循环工作区如果SEL_BOX=X
LOOP AT IT_SELECTED_TMP WHERE SEL_BOX = 'X' .
DATA YEAR(4) TYPE C.
DATA YUE(2) TYPE C.
DATA RI(2) TYPE C.
DATA SHUI(3) TYPE C.
YEAR = IT_SELECTED_TMP-A_BEDAT+0(4).
YUE = IT_SELECTED_TMP-A_BEDAT+4(2).
RI = IT_SELECTED_TMP-A_BEDAT+6(2).
DATA A_YEAR(4) TYPE C.
DATA A_YUE(2) TYPE C.
DATA A_RI(2) TYPE C.
A_YEAR = IT_SELECTED_TMP-A_FUKUAN+0(4).
A_YUE = IT_SELECTED_TMP-A_FUKUAN+4(2).
A_RI = IT_SELECTED_TMP-A_FUKUAN+6(2).
IF IT_SELECTED_TMP-A_TAX = 'X'.
SHUI = '含税'.
ELSE.
SHUI = '未税'.
ENDIF.
DATA C_MENT(3) TYPE C.
DATA C_BEIZHU(250) TYPE C.
DATA C_FUKUAN(8) TYPE C.
DATA C_ZANZH TYPE CHAR1.
C_FUKUAN = IT_SELECTED_TMP-A_FUKUAN.
C_MENT = IT_SELECTED_TMP-A_MENT.
C_ZANZH = IT_SELECTED_TMP-A_ZANZH+3(1).
CONCATENATE SHUI ',' '预付:' C_MENT '%' ',' '付款日期' A_YEAR '-' A_YUE '-' A_RI ',' '暂支次数' C_ZANZH '次' INTO C_BEIZHU.
CONDENSE C_BEIZHU NO-GAPS.
SELECT SINGLE NAME1 INTO IT_SELECTED_TMP-NAME1_T FROM T001W WHERE WERKS = IT_SELECTED_TMP-BUKRS.
SELECT
BRTWR
TXZ01
MENGE
WAERS
NETWR
MEINS
INTO CORRESPONDING FIELDS OF TABLE IT_TAB01
FROM EKPO AS A INNER JOIN
EKKO AS B ON A~EBELN = B~EBELN
WHERE A~EBELN = IT_SELECTED_TMP-EBELN.
DATA: LDANJIA(16) TYPE P DECIMALS 4. "含税单价
IT_TAB01-A_TAX = IT_SELECTED_TMP-A_TAX.
LOOP AT IT_TAB01.
IF IT_TAB01-A_TAX = 'X'..
IT_TAB01-B_BRTWR = IT_TAB01-BRTWR.
ELSE.
IT_TAB01-B_BRTWR = IT_TAB01-NETWR.
ENDIF.
IF IT_TAB01-WAERS = 'JPY' .
IT_TAB01-B_BRTWR = IT_TAB01-B_BRTWR * 100. " 日元
ENDIF.
IF IT_TAB01-WAERS = 'JPY'.
LDANJIA = IT_TAB01-B_BRTWR / IT_TAB01-MENGE.
ELSE.
LDANJIA = IT_TAB01-BRTWR / IT_TAB01-MENGE.
ENDIF.
DATA C_MENGE(30) TYPE C.
DATA C_LDANJIA(20) TYPE C.
DATA C_BRTWR(30) TYPE C.
C_MENGE = IT_TAB01-MENGE.
C_LDANJIA = LDANJIA.
IF IT_TAB01-WAERS = 'JPY'.
C_BRTWR = IT_TAB01-B_BRTWR.
ELSE.
C_BRTWR = IT_TAB01-BRTWR.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
INPUT = IT_TAB01-MEINS
LANGUAGE = SY-LANGU
IMPORTING
* LONG_TEXT =
OUTPUT = IT_TAB01-MEINS
* SHORT_TEXT =
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
CONCATENATE IT_TAB01-TXZ01 ',' '数量:' C_MENGE ',' '单位:' IT_TAB01-MEINS ',' '单价:' C_LDANJIA ',' '金额:' C_BRTWR INTO IT_TAB01-ZZSY.
CONDENSE IT_TAB01-ZZSY NO-GAPS.
MODIFY IT_TAB01.
ENDLOOP.
DATA: LNUM TYPE CHAR2.
CLEAR :IT_TAB02[] ,LNUM.
LOOP AT IT_TAB01.
IT_TAB02-ZZSY = IT_TAB01-ZZSY.
LNUM = LNUM + 1.
IT_TAB02-LNUM = LNUM.
APPEND IT_TAB02.
ENDLOOP.
IF IT_SELECTED_TMP-WAERS = 'CNY'.
IF IT_SELECTED_TMP-KBETR IS INITIAL.
SELECT SINGLE MWSKZ INTO IT_SELECTED_TMP-MWSKZ FROM EKPO WHERE EBELN = IT_SELECTED_TMP-EBELN.
SELECT SINGLE B~KBETR INTO IT_SELECTED_TMP-KBETR FROM KONP AS B INNER JOIN
A003 AS A ON A~KNUMH = B~KNUMH AND A~MWSKZ = B~MWSK1
WHERE A~MWSKZ = IT_SELECTED_TMP-MWSKZ AND A~KSCHL = 'MWVS' AND A~KAPPL = 'TX' AND A~ALAND = 'CN'.
IT_SELECTED_TMP-KBETR = IT_SELECTED_TMP-KBETR / 10. "税率算法
ENDIF.
ENDIF.
CALL FUNCTION LW_FUNC_NAME "则循环打印规则
EXPORTING
CONTROL_PARAMETERS = T_CONTROL_PARAMETERS "设置不显示打印确认对话框
OUTPUT_OPTIONS = T_OUTPUT_OPTIONS "默认打印选项设置传输
USER_SETTINGS = SPACE
EBELN = IT_SELECTED_TMP-EBELN "订单号
NAME_FIRST = IT_SELECTED_TMP-NAME_FIRST "受款人
NAME1 = IT_SELECTED_TMP-NAME1 "供应商
ZZSY = IT_SELECTED_TMP-ZZSY "暂支事由
BRTWR = IT_SELECTED_TMP-BRTWR "暂支金额
A_DAXIE = IT_SELECTED_TMP-A_DAXIE "大写金额
YEAR = YEAR
YUE = YUE
RI = RI
C_BEIZHU = C_BEIZHU
BUKRS = IT_SELECTED_TMP-BUKRS
NAME1_T = IT_SELECTED_TMP-NAME1_T
WAERS = IT_SELECTED_TMP-WAERS
KBETR = IT_SELECTED_TMP-KBETR
TABLES
IT_TAB = IT_TAB02
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
ENDLOOP.
IF SY-SUBRC <> 0.
* MESSAGE S008(ZHKTL1) WITH SY-SUBRC DISPLAY LIKE CNS_E.
* LEAVE LIST-PROCESSING.
ENDIF.
***关闭打印机设置***
CALL FUNCTION 'SSF_CLOSE'
* IMPORTING
* JOB_OUTPUT_INFO
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT IT_ZMM017_TMP WHERE SEL_BOX = 'X'.
IT_ZMM017_TMP-A_PRINT = 'X'.
MODIFY IT_ZMM017_TMP.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module STATUS_2000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_2000 OUTPUT.
SET PF-STATUS 'ZMM017_A'.
SET TITLEBAR 'TITLE0100'.
PERFORM F_DISPLAY_ALV.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_2000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_2000 INPUT.
DATA:OK_UCOMM TYPE SY-UCOMM.
* RS_SELFIELD TYPE SLIS_SELFIELD.
OK_UCOMM = SY-UCOMM.
CLEAR SY-UCOMM.
CASE OK_UCOMM.
WHEN 'BACK'.
SET SCREEN 0.
WHEN 'CREATE'.
CLEAR IT_SELECTED[].
LOOP AT IT_TAB WHERE SEL_BOX = 'X'.
APPEND IT_TAB TO IT_SELECTED .
ENDLOOP.
DATA LV_CONT_A(1) TYPE C.
CLEAR LV_CONT_A.
DESCRIBE TABLE IT_SELECTED LINES LV_CONT_A.
IF LV_CONT_A > 1.
MESSAGE '错误!不允许同时操作多个订单' TYPE 'E'.
ENDIF.
IF IT_SELECTED[] IS NOT INITIAL.
PERFORM GET_DATA_XINZENG. "则调用定义的模块
ELSE.
MESSAGE '至少选择一个条目' TYPE 'E'.
ENDIF.
WHEN 'PRINT'.
CLEAR IT_SELECTED_TMP[].
LOOP AT IT_ZMM017_TMP WHERE SEL_BOX = 'X'.
APPEND IT_ZMM017_TMP TO IT_SELECTED_TMP .
ENDLOOP.
IF IT_SELECTED_TMP[] IS NOT INITIAL.
PERFORM GET_PRINT1. "则调用定义的模块
ELSE.
MESSAGE '至少选择一个条目' TYPE 'E'.
ENDIF.
WHEN 'REPRINT'.
CLEAR IT_SELECTED_TMP[].
LOOP AT IT_ZMM017_TMP WHERE SEL_BOX = 'X'.
APPEND IT_ZMM017_TMP TO IT_SELECTED_TMP .
ENDLOOP.
IF IT_SELECTED_TMP[] IS NOT INITIAL.
PERFORM GET_PRINT . "则调用定义的模块
ELSE.
MESSAGE '至少选择一个条目' TYPE 'E'.
ENDIF.
WHEN 'DELETE'.
CLEAR IT_SELECTED_TMP[].
LOOP AT IT_ZMM017_TMP WHERE SEL_BOX = 'X'.
APPEND IT_ZMM017_TMP TO IT_SELECTED_TMP .
ENDLOOP.
IF IT_SELECTED_TMP[] IS NOT INITIAL.
PERFORM GET_DELETE . "则调用定义的模块
ELSE.
MESSAGE '至少选择一个条目' TYPE 'E'.
ENDIF.
WHEN OTHERS. "其他的不操作
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form F_DISPLAY_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_DISPLAY_ALV .
PERFORM PREPARE_TOOLBAR CHANGING GT_EXCLUDE.
PERFORM F_ALV1."暂支单发起
PERFORM F_ALV2."暂支单打印
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PREPARE_TOOLBAR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_EXCLUDE text
*----------------------------------------------------------------------*
FORM PREPARE_TOOLBAR CHANGING P_GT_EXCLUDE TYPE UI_FUNCTIONS.
DATA LS_EXCLUDE TYPE UI_FUNC.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_MAXIMUM.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_MINIMUM.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_AVERAGE.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_MB_SUM.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_MB_SUBTOT.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_PRINT.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_PRINT_BACK.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_PRINT_PREV.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_REFRESH.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CHECK.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CHECK.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_INFO.
APPEND LS_EXCLUDE TO P_GT_EXCLUDE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_ALV1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_ALV1 .
IF GR_ALVGRID1 IS INITIAL.
* Creating custom container instance
CREATE OBJECT GR_CCONTAINER1
EXPORTING
CONTAINER_NAME = GC_CUSTOM_CONTROL_NAME1
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
ENDIF.
* Creating ALV Grid instance
CREATE OBJECT GR_ALVGRID1
EXPORTING
I_PARENT = GR_CCONTAINER1
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
ENDIF.
* Preparing field catalog
PERFORM PREPARE_FIELD_CATALOG1." CHANGING gt_fieldcat1.
* Preparing layout structure
PERFORM PREPARE_LAYOUT1." CHANGING gs_layout1.
* Create an instance for the event handler
CREATE OBJECT GR_EVENT_HANDLER1.
* Registering handler methods to handle ALV Grid events
SET HANDLER GR_EVENT_HANDLER1->HANDLE_TOOLBAR FOR GR_ALVGRID1.
SET HANDLER GR_EVENT_HANDLER1->HANDLE_USER_COMMAND FOR GR_ALVGRID1.
CALL METHOD GR_ALVGRID1->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LAYOUT1
IT_TOOLBAR_EXCLUDING = GT_EXCLUDE[]
CHANGING
IT_OUTTAB = IT_TAB[]
IT_FIELDCATALOG = GT_FIELDCAT1
* it_sort = gt_sort[]
* it_filter = gt_filt[]
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
ENDIF.
ELSE.
CALL METHOD GR_ALVGRID1->REFRESH_TABLE_DISPLAY
EXCEPTIONS
FINISHED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
ENDIF.
CALL METHOD GR_ALVGRID1->SET_SELECTED_ROWS
EXPORTING
IT_ROW_NO = GT_ROW_NO.
IF SY-SUBRC <> 0.
ENDIF.
CALL METHOD GR_ALVGRID1->SET_SCROLL_INFO_VIA_ID
EXPORTING
IS_COL_INFO = GT_COL_INFO
IS_ROW_NO = ST_ROW_NO.
IF SY-SUBRC <> 0.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F_ALV2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_ALV2 .
IF GR_ALVGRID2 IS INITIAL.
* Creating custom container instance
CREATE OBJECT GR_CCONTAINER2
EXPORTING
CONTAINER_NAME = GC_CUSTOM_CONTROL_NAME2
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
ENDIF.
* Creating ALV Grid instance
CREATE OBJECT GR_ALVGRID2
EXPORTING
I_PARENT = GR_CCONTAINER2
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
ENDIF.
* Preparing field catalog
PERFORM PREPARE_FIELD_CATALOG2." CHANGING gt_fieldcat1.
* Preparing layout structure
PERFORM PREPARE_LAYOUT2." CHANGING gs_layout1.
* Edit Cell
* PERFORM prepare_editcells1.
*( Create an instance for the event handler
CREATE OBJECT GR_EVENT_HANDLER2.
* Registering handler methods to handle ALV Grid events
SET HANDLER GR_EVENT_HANDLER2->HANDLE_USER_COMMAND FOR GR_ALVGRID2.
SET HANDLER GR_EVENT_HANDLER2->HANDLE_TOOLBAR FOR GR_ALVGRID2.
* SET HANDLER gr_event_handler1->handle_data_changed FOR gr_alvgrid1.
CALL METHOD GR_ALVGRID2->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LAYOUT2
IT_TOOLBAR_EXCLUDING = GT_EXCLUDE[]
CHANGING
IT_OUTTAB = IT_ZMM017_TMP[]
IT_FIELDCATALOG = GT_FIELDCAT2
* it_sort = gt_sort[]
* it_filter = gt_filt[]
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
ENDIF.
* CALL METHOD gr_alvgrid2->set_toolbar_interactive.
* CALL METHOD gr_alvgrid2->set_ready_for_input
* EXPORTING
* i_ready_for_input = 1.
* CALL METHOD gr_alvgrid2->register_edit_event
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_modified.
ELSE.
CALL METHOD GR_ALVGRID2->REFRESH_TABLE_DISPLAY
* exporting
* IS_STABLE = 'X'
* I_SOFT_REFRESH
EXCEPTIONS
FINISHED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
ENDIF.
CALL METHOD GR_ALVGRID2->SET_SELECTED_ROWS
EXPORTING
IT_ROW_NO = GT_ROW_NO.
IF SY-SUBRC <> 0.
ENDIF.
CALL METHOD GR_ALVGRID2->SET_SCROLL_INFO_VIA_ID
EXPORTING
IS_COL_INFO = GT_COL_INFO
IS_ROW_NO = ST_ROW_NO.
IF SY-SUBRC <> 0.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PREPARE_FIELD_CATALOG1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PREPARE_FIELD_CATALOG1 .
DATA LS_FCAT TYPE LVC_S_FCAT.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'SEL_BOX'.
LS_FCAT-COL_POS = 1.
LS_FCAT-CHECKBOX = 'X'.
LS_FCAT-EDIT = 'X'.
LS_FCAT-COLTEXT = '选择'.
LS_FCAT-SELTEXT = '选择'.
APPEND LS_FCAT TO GT_FIELDCAT1.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'A_EBELN'.
LS_FCAT-HOTSPOT = 'X'.
LS_FCAT-REF_TABLE = 'IT_TAB'.
LS_FCAT-COL_POS = 2.
LS_FCAT-COLTEXT = '采购订单号'.
LS_FCAT-SELTEXT = '采购订单号'.
APPEND LS_FCAT TO GT_FIELDCAT1.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'NAME_FIRST'.
LS_FCAT-COL_POS = 3.
LS_FCAT-COLTEXT = '采购人员(受款人)'.
LS_FCAT-SELTEXT = '采购人员(受款人)'.
APPEND LS_FCAT TO GT_FIELDCAT1.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'LIFNR'.
LS_FCAT-COL_POS = 4.
LS_FCAT-COLTEXT = '供应商'.
LS_FCAT-SELTEXT = '供应商'.
APPEND LS_FCAT TO GT_FIELDCAT1.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'NAME1'.
LS_FCAT-COL_POS = 5.
LS_FCAT-COLTEXT = '供应商名称'.
LS_FCAT-SELTEXT = '供应商名称'.
APPEND LS_FCAT TO GT_FIELDCAT1.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'TXZ01'.
LS_FCAT-COL_POS = 6.
LS_FCAT-COLTEXT = '物料描述'.
LS_FCAT-SELTEXT = '物料描述'.
APPEND LS_FCAT TO GT_FIELDCAT1.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'MENGE'.
LS_FCAT-COL_POS = 7.
LS_FCAT-COLTEXT = '采购数量'.
LS_FCAT-SELTEXT = '采购数量'.
APPEND LS_FCAT TO GT_FIELDCAT1.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'MEINS'.
LS_FCAT-COL_POS = 7.
LS_FCAT-REF_TABLE = 'MSEG'.
LS_FCAT-REF_FIELD = 'MEINS'.
LS_FCAT-COLTEXT = '单位'.
LS_FCAT-SELTEXT = '单位'.
APPEND LS_FCAT TO GT_FIELDCAT1.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'LDANJIA'.
LS_FCAT-COL_POS = 9.
LS_FCAT-COLTEXT = '含税单价'.
LS_FCAT-SELTEXT = '含税单价'.
APPEND LS_FCAT TO GT_FIELDCAT1.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'B_BRTWR'.
LS_FCAT-COL_POS = 8.
LS_FCAT-COLTEXT = '含税金额'.
LS_FCAT-SELTEXT = '含税金额'.
APPEND LS_FCAT TO GT_FIELDCAT1.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'WAERS'.
LS_FCAT-COL_POS = 11.
LS_FCAT-COLTEXT = '币种'.
LS_FCAT-SELTEXT = '币种'.
APPEND LS_FCAT TO GT_FIELDCAT1.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'A_MENT'.
LS_FCAT-COL_POS = 12.
LS_FCAT-EDIT = 'X'.
LS_FCAT-COLTEXT = '暂支比例(付款)'.
LS_FCAT-SELTEXT = '暂支比例(付款)'.
APPEND LS_FCAT TO GT_FIELDCAT1.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'A_TAX'.
LS_FCAT-COL_POS = 13.
LS_FCAT-CHECKBOX = 'X'.
LS_FCAT-EDIT = 'X'.
LS_FCAT-COLTEXT = '是否含税'.
LS_FCAT-SELTEXT = '是否含税'.
APPEND LS_FCAT TO GT_FIELDCAT1.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PREPARE_LAYOUT1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PREPARE_LAYOUT1 .
GS_LAYOUT1-ZEBRA = 'X'.
GS_LAYOUT1-CWIDTH_OPT = 'X'.
GS_LAYOUT1-GRID_TITLE = ''.
DATA: DATE TYPE SY-DATUM.
DATA: YUE TYPE SY-DATUM.
DATA: RI TYPE SY-DATUM.
DATE = SY-DATUM+0(4).
YUE = SY-DATUM+4(2).
RI = SY-DATUM+6(2).
DATA: SHI TYPE CHAR2,
FEN TYPE CHAR2,
MIAO TYPE CHAR2.
SHI = SY-UZEIT+0(2).
FEN = SY-UZEIT+2(2).
MIAO = SY-UZEIT+4(2).
DATA LV_CONT_A(10) TYPE C.
CLEAR LV_CONT_A.
DESCRIBE TABLE IT_TAB LINES LV_CONT_A.
CONDENSE LV_CONT_A NO-GAPS.
CONCATENATE '当前用户:' SY-UNAME '当前日期:' DATE '年' YUE '月' RI '日' '显示条目:' LV_CONT_A INTO GS_LAYOUT1-GRID_TITLE SEPARATED BY SPACE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PREPARE_FIELD_CATALOG2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PREPARE_FIELD_CATALOG2 .
DATA LS_FCAT TYPE LVC_S_FCAT.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'SEL_BOX'.
LS_FCAT-COL_POS = 1.
LS_FCAT-CHECKBOX = 'X'.
LS_FCAT-EDIT = 'X'.
LS_FCAT-COLTEXT = '选择'.
LS_FCAT-SELTEXT = '选择'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'EBELN'.
LS_FCAT-COL_POS = 2.
LS_FCAT-COLTEXT = '采购订单号'.
LS_FCAT-SELTEXT = '采购订单号'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'NAME_FIRST'.
LS_FCAT-COL_POS = 3.
LS_FCAT-COLTEXT = '采购人员(受款人)'.
LS_FCAT-SELTEXT = '采购人员(受款人)'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'NAME1'.
LS_FCAT-COL_POS = 4.
LS_FCAT-COLTEXT = '供应商名称'.
LS_FCAT-SELTEXT = '供应商名称'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'A_ZANZH'.
LS_FCAT-COL_POS = 5.
LS_FCAT-COLTEXT = '暂支单次数'.
LS_FCAT-SELTEXT = '暂支单次数'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'ZZSY'.
LS_FCAT-COL_POS = 6.
LS_FCAT-COLTEXT = '暂支事由'.
LS_FCAT-SELTEXT = '暂支事由'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'BRTWR'.
LS_FCAT-COL_POS = 7.
LS_FCAT-COLTEXT = '暂支金额'.
LS_FCAT-SELTEXT = '暂支金额'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'A_MENT'.
LS_FCAT-COL_POS = 8.
LS_FCAT-COLTEXT = '暂支比例(付款)'.
LS_FCAT-SELTEXT = '暂支比例(付款)'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'WAERS'.
LS_FCAT-COL_POS = 9.
LS_FCAT-COLTEXT = '币种'.
LS_FCAT-SELTEXT = '币种'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'A_BEDAT'.
LS_FCAT-COL_POS = 10.
LS_FCAT-EDIT = 'X'.
LS_FCAT-COLTEXT = '暂 支 日 期'.
LS_FCAT-SELTEXT = '暂 支 日 期'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'A_FUKUAN'.
LS_FCAT-COL_POS = 11.
LS_FCAT-EDIT = 'X'.
LS_FCAT-COLTEXT = '付 款 日 期'.
LS_FCAT-SELTEXT = '付款日期'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'A_ERNAM'.
LS_FCAT-COL_POS = 12.
LS_FCAT-COLTEXT = '创建人'.
LS_FCAT-SELTEXT = '创建人'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'B_BEDAT'.
LS_FCAT-COL_POS = 13.
LS_FCAT-COLTEXT = '创建日期'.
LS_FCAT-SELTEXT = '创建日期'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'A_TIME'.
LS_FCAT-COL_POS = 14.
LS_FCAT-COLTEXT = '创建时间'.
LS_FCAT-SELTEXT = '创建时间'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'A_BNAME'.
LS_FCAT-COL_POS = 15.
LS_FCAT-COLTEXT = '修改人'.
LS_FCAT-SELTEXT = '修改人'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'C_MODAT'.
LS_FCAT-COL_POS = 16.
LS_FCAT-COLTEXT = '修改日期'.
LS_FCAT-SELTEXT = '修改日期'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'A_TIME1'.
LS_FCAT-COL_POS = 17.
LS_FCAT-COLTEXT = '修改时间'.
LS_FCAT-SELTEXT = '修改时间'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'A_PRINT'.
LS_FCAT-COL_POS = 18.
LS_FCAT-CHECKBOX = 'X'.
LS_FCAT-COLTEXT = '打印状态'.
LS_FCAT-SELTEXT = '打印状态'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'A_TAX'.
LS_FCAT-COL_POS = 18.
LS_FCAT-CHECKBOX = 'X'.
LS_FCAT-COLTEXT = '是否含税'.
LS_FCAT-SELTEXT = '是否含税'.
APPEND LS_FCAT TO GT_FIELDCAT2.
CLEAR LS_FCAT.
LS_FCAT-FIELDNAME = 'A_BEIZ'.
LS_FCAT-COL_POS = 18.
LS_FCAT-EDIT = 'X'.
LS_FCAT-COLTEXT = '备 注(重置打印,删除必填)'.
LS_FCAT-SELTEXT = '备 注(重置打印,删除必填)'.
APPEND LS_FCAT TO GT_FIELDCAT2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PREPARE_LAYOUT2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PREPARE_LAYOUT2 .
GS_LAYOUT2-ZEBRA = 'X'.
GS_LAYOUT2-CWIDTH_OPT = 'X'.
ENDFORM.
**&---------------------------------------------------------------------*
**& Form F_PRO_UCOMM
**&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
** --> p1 text
** <-- p2 text
**----------------------------------------------------------------------*
*FORM F_PRO_UCOMM .
* CASE SSCRFIELDS-UCOMM.
* WHEN 'ONLI'.
* PERFORM F_UPLOAD_FILE.
* WHEN OTHERS.
* ENDCASE.
*
*ENDFORM.
**&---------------------------------------------------------------------*
**& Form F_UPLOAD_FILE
**&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
** --> p1 text
** <-- p2 text
**----------------------------------------------------------------------*
*FORM F_UPLOAD_FILE .
*IF S_NAME <> SY-UNAME.
*MESSAGE '不允许操作其他采购人员发起的订单' TYPE 'E'.
*ENDIF.
*
*
*ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_DELETE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DELETE .
LOOP AT IT_ZMM017_TMP WHERE SEL_BOX = 'X'.
IF IT_ZMM017_TMP-A_BEIZ IS INITIAL.
MESSAGE '删除条目必须在备注填写理由,否则不能操作' TYPE 'E' DISPLAY LIKE 'I'.
ENDIF.
ENDLOOP.
DELETE IT_ZMM017_TMP WHERE SEL_BOX = 'X'.
LOOP AT IT_SELECTED_TMP.
IT_ZMM017-EBELN = IT_SELECTED_TMP-EBELN. "订单号
IT_ZMM017-A_BEDAT = IT_SELECTED_TMP-A_BEDAT. "暂支日期
IT_ZMM017-A_PRINT = IT_SELECTED_TMP-A_PRINT. "打印状态
IT_ZMM017-LIFNR = IT_SELECTED_TMP-LIFNR. "供应商
IT_ZMM017-A_ZANZH = IT_SELECTED_TMP-A_ZANZH. "暂支次数
IT_ZMM017-NAME1 = IT_SELECTED_TMP-NAME1. "供应商简称
IT_ZMM017-ZZSY = IT_SELECTED_TMP-ZZSY. "暂支事由
IT_ZMM017-BRTWR = IT_SELECTED_TMP-BRTWR. "暂支金额
IT_ZMM017-A_MENT = IT_SELECTED_TMP-A_MENT. "暂支比例(%)
IT_ZMM017-A_TAX = IT_SELECTED_TMP-A_TAX. "是否含税
IT_ZMM017-WAERS = IT_SELECTED_TMP-WAERS. "币种
IT_ZMM017-A_ERNAM = IT_SELECTED_TMP-A_ERNAM. "创建人
IT_ZMM017-BUKRS = IT_SELECTED_TMP-BUKRS. "公司代码
IT_ZMM017-B_BEDAT = IT_SELECTED_TMP-B_BEDAT. "创建日期
IT_ZMM017-A_TIME = IT_SELECTED_TMP-A_TIME. "创建时间
IT_ZMM017-A_BNAME = IT_SELECTED_TMP-A_BNAME. "修改人
IT_ZMM017-A_TIME1 = IT_SELECTED_TMP-A_TIME1. "修改时间
IT_ZMM017-C_MODAT = IT_SELECTED_TMP-C_MODAT. "修改日期
IT_ZMM017-NAME_FIRST = IT_SELECTED_TMP-NAME_FIRST."受款人
IT_ZMM017-A_FUKUAN = IT_SELECTED_TMP-A_FUKUAN. "付款日期
IT_ZMM017-A_BEIZ = IT_SELECTED_TMP-A_BEIZ. "备注
IT_ZMM017-KBETR = IT_SELECTED_TMP-KBETR. "税率
IT_ZMM017-DELETE_T = 'X' . "删除标示
MODIFY ZZMM017 FROM IT_ZMM017.
CLEAR IT_ZMM017.
MESSAGE '删除成功' TYPE 'S'.
ENDLOOP.
ENDFORM.