Android异常总结---type Status report message HTTP method GET is not supported by this URL

2.type Status report
  message HTTP method GET is not supported by this URL
  description The specified HTTP method is not allowed for the requested resource (HTTP   


method GET is not supported by this URL).


访问时,一直报错:


type: Status report


message: HTTP method GET is not supported by this URL


description: The specified HTTP method is not allowed for the requested resource (HTTP 


method GET is not supported by this URL).
经过上网查询,原因如下:


1,继承自HttpServlet的Servlet没有重写对于请求和响应的处理方法:doGet或doPost等方法;默认调


用父类的doGet或doPost等方法; 


2,父类HttpServlet的doGet或doPost等方法覆盖了你重写的doGet或doPost等方法;


不管是1或2,父类HttpServlet的doGet或doPost等方法的默认实现是返回状态代码为405的HTTP错误表


示//
对于指定资源的请求方法不被允许。
解决方法: 


1,子类重写doGet或doPost等方法;


 2,在你扩展的Servlert中重写doGet或doPost等方法来处理请求和响应时 不要调用父类HttpServlet





doGet或doPost等方法,即去掉super.doGet(request, response)和super.doPost(request, 


response);
代码开发 1)先调用smartform函数获取OTF格式数据 2)后调用函数CONVERT_OTF转换成PDF格式数据 3)再调用GUI_DOWNLOAD函数下载并邮件发送给采购员 ,涉及表 *&---------------------------------------------------------------------* *& 包含 ZNMMX037FA *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form FRM_GET_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_GET_DATA . *modify by songjiaru 20200519 SQL 性能优化 及 更改收件人邮箱取数逻辑 这里默认的是一个PO 只会存在一个工厂的数据 *不然没办法按照采购部的供应商+采购组织+工厂取ZNMMT037A来取数了 SELECT EKKO~EBELN , EKKO~BEDAT , EKKO~EKGRP , EKKO~LIFNR , EKKO~BUKRS , NAST~SPRAS , EKKO~EKORG , EKPO~WERKS INTO CORRESPONDING FIELDS OF TABLE @GT_DATA FROM EKKO INNER JOIN EKPO ON EKKO~EBELN = EKPO~EBELN JOIN NAST ON NAST~OBJKY = EKKO~EBELN WHERE EKKO~EBELN IN @S_EBELN AND EKKO~LIFNR IN @S_LIFNR AND EKKO~EKORG IN @S_EKORG AND EKKO~EKGRP IN @S_EKGRP AND EKKO~BSART IN @S_BSART AND EKKO~BEDAT IN @S_BEDAT AND EKPO~WERKS IN @S_WERKS1 AND EKKO~FRGKE = '7' AND NAST~SPRAS IN @S_SPRAS. SORT GT_DATA BY EBELN. DELETE ADJACENT DUPLICATES FROM GT_DATA COMPARING EBELN. * LOOP AT GT_DATA INTO GS_DATA . * SELECT SINGLE * FROM ZNMMT037 * WHERE EBELN = GS_DATA-EBELN. * IF SY-SUBRC = 0. * IF CK_WFS = 'X'. * DELETE GT_DATA. * CONTINUE. * ENDIF. * GS_DATA-ICON = '@08@'. * GS_DATA-MESSAGE = '已有发送记录'. * GS_DATA-ERDAT = ZNMMT037-ERDAT. * ENDIF. * * SELECT SINGLE NAME1 MCOD1 ADRNR * INTO (GS_DATA-NAME1,GS_DATA-MCOD1,GS_DATA-ADRNR) * FROM LFA1 * WHERE LIFNR = GS_DATA-LIFNR. * * READ TABLE GT_MAIL INTO GS_MAIL WITH KEY ADRNR = GS_DATA-ADRNR BINARY SEARCH. * IF SY-SUBRC NE 0. * SELECT ADDRNUMBER SMTP_ADDR APPENDING TABLE GT_MAIL * FROM ADR6 * WHERE ADDRNUMBER = GS_DATA-ADRNR. * SORT GT_MAIL BY ADRNR. * ENDIF. * * LOOP AT GT_MAIL INTO GS_MAIL WHERE ADRNR = GS_DATA-ADRNR. * IF GS_DATA-SMTP_ADDR IS INITIAL. * GS_DATA-SMTP_ADDR = GS_MAIL-SMTP_ADDR. * ELSE. * GS_DATA-SMTP_ADDR = GS_DATA-SMTP_ADDR && ';' && GS_MAIL-SMTP_ADDR. * ENDIF. * ENDLOOP. * * MODIFY GT_DATA FROM GS_DATA. * ENDLOOP. DATA : LV_TABIX LIKE SY-TABIX. IF GT_DATA IS INITIAL. MESSAGE S322(ZMM) DISPLAY LIKE 'W'. LEAVE LIST-PROCESSING. ENDIF. SELECT * FROM ZNMMT037 FOR ALL ENTRIES IN @GT_DATA WHERE ZNMMT037~EBELN = @GT_DATA-EBELN INTO TABLE @DATA(LT_ZNMMT037). SORT LT_ZNMMT037 BY EBELN. DATA : LS_ZNMMT037 LIKE LINE OF LT_ZNMMT037. SELECT LFA1~LIFNR , LFA1~NAME1 , LFA1~MCOD1 FROM LFA1 WHERE LFA1~LIFNR IN @S_LIFNR INTO TABLE @DATA(LT_LFA1). SORT LT_LFA1 BY LIFNR. DATA : LS_LFA1 LIKE LINE OF LT_LFA1. SELECT ZNMMT037A~LIFNR , ZNMMT037A~EKORG , ZNMMT037A~WERKS ,ZNMMT037A~EKGRP,ZNMMT037A~EMAIL FROM ZNMMT037A FOR ALL ENTRIES IN @GT_DATA WHERE ZNMMT037A~LIFNR = @GT_DATA-LIFNR AND ZNMMT037A~EKORG = @GT_DATA-EKORG INTO TABLE @DATA(LT_ZNMMT037A) . SORT LT_ZNMMT037A BY LIFNR EKORG WERKS EKGRP . DATA : LS_ZNMMT037A LIKE LINE OF LT_ZNMMT037A. LOOP AT GT_DATA ASSIGNING FIELD-SYMBOL(<LFS_DATA>). *------------填充发送记录---------------* CLEAR LS_ZNMMT037. READ TABLE LT_ZNMMT037 INTO LS_ZNMMT037 WITH KEY EBELN = <LFS_DATA>-EBELN BINARY SEARCH. IF SY-SUBRC = 0. IF CK_WFS = 'X'. <LFS_DATA>-FLAG = 'X'. CONTINUE. ENDIF. <LFS_DATA>-ICON = '@08@'. <LFS_DATA>-MESSAGE = TEXT-002. <LFS_DATA>-ERDAT = LS_ZNMMT037-ERDAT. ENDIF. *-----------填充供应商信息名字等等--------* CLEAR LS_LFA1. READ TABLE LT_LFA1 INTO LS_LFA1 WITH KEY LIFNR = <LFS_DATA>-LIFNR BINARY SEARCH. IF SY-SUBRC = 0. <LFS_DATA>-NAME1 = LS_LFA1-NAME1. <LFS_DATA>-MCOD1 = LS_LFA1-MCOD1. ENDIF. *--------填充供应商对应的邮件地址---------* *先根据供应商采购组织工厂采购员找,再根据供应商采购组织工厂找,如果找不到,就根据供应商采购组织找 CLEAR LS_ZNMMT037A. READ TABLE LT_ZNMMT037A INTO LS_ZNMMT037A WITH KEY LIFNR = <LFS_DATA>-LIFNR EKORG = <LFS_DATA>-EKORG WERKS = <LFS_DATA>-WERKS EKGRP = <LFS_DATA>-EKGRP BINARY SEARCH. IF SY-SUBRC = 0. LOOP AT LT_ZNMMT037A INTO LS_ZNMMT037A FROM SY-TABIX. IF LS_ZNMMT037A-LIFNR = <LFS_DATA>-LIFNR AND LS_ZNMMT037A-EKORG = <LFS_DATA>-EKORG AND LS_ZNMMT037A-WERKS = <LFS_DATA>-WERKS AND LS_ZNMMT037A-EKGRP = <LFS_DATA>-EKGRP. IF <LFS_DATA>-SMTP_ADDR IS INITIAL. <LFS_DATA>-SMTP_ADDR = LS_ZNMMT037A-EMAIL && '/'. ELSE. CONCATENATE <LFS_DATA>-SMTP_ADDR LS_ZNMMT037A-EMAIL '/' INTO <LFS_DATA>-SMTP_ADDR. ENDIF. ELSE. EXIT. ENDIF. ENDLOOP. ELSE. READ TABLE LT_ZNMMT037A INTO LS_ZNMMT037A WITH KEY LIFNR = <LFS_DATA>-LIFNR EKORG = <LFS_DATA>-EKORG WERKS = <LFS_DATA>-WERKS BINARY SEARCH. IF SY-SUBRC = 0. LOOP AT LT_ZNMMT037A INTO LS_ZNMMT037A FROM SY-TABIX. IF LS_ZNMMT037A-LIFNR = <LFS_DATA>-LIFNR AND LS_ZNMMT037A-EKORG = <LFS_DATA>-EKORG AND LS_ZNMMT037A-WERKS = <LFS_DATA>-WERKS. IF <LFS_DATA>-SMTP_ADDR IS INITIAL. <LFS_DATA>-SMTP_ADDR = LS_ZNMMT037A-EMAIL && '/'. ELSE. CONCATENATE <LFS_DATA>-SMTP_ADDR LS_ZNMMT037A-EMAIL '/' INTO <LFS_DATA>-SMTP_ADDR. ENDIF. ELSE. EXIT. ENDIF. ENDLOOP. ELSE. CLEAR LS_ZNMMT037A. READ TABLE LT_ZNMMT037A INTO LS_ZNMMT037A WITH KEY LIFNR = <LFS_DATA>-LIFNR EKORG = <LFS_DATA>-EKORG WERKS = '' BINARY SEARCH. IF SY-SUBRC = 0. LOOP AT LT_ZNMMT037A INTO LS_ZNMMT037A FROM SY-TABIX. IF LS_ZNMMT037A-LIFNR = <LFS_DATA>-LIFNR AND LS_ZNMMT037A-EKORG = <LFS_DATA>-EKORG AND LS_ZNMMT037A-WERKS = ''. IF <LFS_DATA>-SMTP_ADDR IS INITIAL. <LFS_DATA>-SMTP_ADDR = LS_ZNMMT037A-EMAIL && '/'. ELSE. CONCATENATE <LFS_DATA>-SMTP_ADDR LS_ZNMMT037A-EMAIL '/' INTO <LFS_DATA>-SMTP_ADDR. ENDIF. ELSE. EXIT. ENDIF. ENDLOOP. ENDIF. ENDIF. ENDIF. ENDLOOP. *end modify ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_OUTPUT_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_OUTPUT_DATA . DEFINE MAC_FCAT. CLEAR gs_fcat. gs_fcat-fieldname = &1. gs_fcat-coltext = &2. gs_fcat-key = &3. gs_fcat-ref_field = &4. gs_fcat-ref_table = &5. gs_fcat-just = &6. * IF &6 = 'R'. * gs_fcat-no_zero = 'X'. * ENDIF. if &1 = 'ICON'. gs_fcat-icon = 'X'. endif. APPEND gs_fcat TO gt_fcat. END-OF-DEFINITION. CLEAR GT_FCAT. IF SY-LANGU EQ '1'. MAC_FCAT 'EBELN' '采购订单号' '' 'EBELN' 'EKKO' ''. MAC_FCAT 'LIFNR' '供应商' '' 'LIFNR' 'LFA1' ''.. MAC_FCAT 'NAME1' '供应商名称' '' '' '' ''.. MAC_FCAT 'BEDAT' '凭证日期' ' ' '' '' ''. MAC_FCAT 'EKGRP' '采购组' ' ' '' '' ''. MAC_FCAT 'MCOD1' '简称' ' ' '' '' ''. MAC_FCAT 'SPRAS' '语言' ' ' 'SPRAS' 'NAST' ''. MAC_FCAT 'SMTP_ADDR' '供应商邮件' ' ' '' '' ''. MAC_FCAT 'ICON' '发送状态' ' ' '' '' ''. MAC_FCAT 'ERDAT' '发送日期' ' ' '' '' ''. MAC_FCAT 'MESSAGE' '消息' ' ' '' '' ''. ELSE. MAC_FCAT 'EBELN' 'PO' '' 'EBELN' 'EKKO' ''. MAC_FCAT 'LIFNR' 'Supplier' '' 'LIFNR' 'LFA1' ''.. MAC_FCAT 'NAME1' 'Supplier Name' '' '' '' ''.. MAC_FCAT 'BEDAT' 'Date' ' ' '' '' ''. MAC_FCAT 'EKGRP' 'Purchase Group' ' ' '' '' ''. MAC_FCAT 'MCOD1' 'Name For Short' ' ' '' '' ''. MAC_FCAT 'SPRAS' 'Language' ' ' 'SPRAS' 'NAST' ''. MAC_FCAT 'SMTP_ADDR' 'Email' ' ' '' '' ''. MAC_FCAT 'ICON' 'Status' ' ' '' '' ''. MAC_FCAT 'ERDAT' 'Send Date' ' ' '' '' ''. MAC_FCAT 'MESSAGE' 'Message' ' ' '' '' ''. ENDIF. GS_LAYOUT-ZEBRA = 'X'. GS_LAYOUT-CWIDTH_OPT = 'X'. GS_LAYOUT-BOX_FNAME = 'BOX'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING I_CALLBACK_PROGRAM = SY-REPID IS_LAYOUT_LVC = GS_LAYOUT IT_FIELDCAT_LVC = GT_FCAT I_SAVE = 'U' I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS' I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND' TABLES T_OUTTAB = GT_DATA EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. 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 FRM_USER_COMMAND *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM FRM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD. DATA:LV_ANSWER TYPE C. DATA LR_GRID TYPE REF TO CL_GUI_ALV_GRID. DATA : LV_CLSS TYPE C . "X 代表发送给供应商和采购员 ''代表发送给采购员 CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' " IMPORTING E_GRID = LR_GRID. CALL METHOD LR_GRID->CHECK_CHANGED_DATA. CASE R_UCOMM. WHEN 'EMAIL'. "保存事件 LV_CLSS = 'X'. LOOP AT GT_DATA INTO GS_DATA WHERE BOX = 'X' AND ICON NE '@08@'. IF GS_DATA-SMTP_ADDR IS NOT INITIAL. PERFORM FRM_SEND_MAIL USING GS_DATA-EBELN GS_DATA-SPRAS GS_DATA-EKGRP GS_DATA-MCOD1 GS_DATA-BUKRS GS_DATA-SMTP_ADDR LV_CLSS CHANGING GS_DATA-ICON GS_DATA-MESSAGE GS_DATA-ERDAT. ELSE. GS_DATA-ICON = '@0A@'. GS_DATA-MESSAGE = TEXT-003 ." ENDIF. MODIFY GT_DATA FROM GS_DATA. ENDLOOP. *ADD BY SONGJIARU 20200519 增加只发送给采购员 WHEN 'EMAIL1'. LV_CLSS = ''. LOOP AT GT_DATA INTO GS_DATA WHERE BOX = 'X' AND ICON NE '@08@'. * IF GS_DATA-SMTP_ADDR IS NOT INITIAL. PERFORM FRM_SEND_MAIL USING GS_DATA-EBELN GS_DATA-SPRAS GS_DATA-EKGRP GS_DATA-MCOD1 * GS_DATA-ADRNR GS_DATA-BUKRS GS_DATA-SMTP_ADDR LV_CLSS CHANGING GS_DATA-ICON GS_DATA-MESSAGE GS_DATA-ERDAT. * ELSE. * GS_DATA-ICON = '@0A@'. * GS_DATA-MESSAGE = '邮件为空,不能发送' ." * ENDIF. MODIFY GT_DATA FROM GS_DATA. ENDLOOP. WHEN 'DOWN'. LOOP AT GT_DATA INTO GS_DATA WHERE BOX = 'X'. PERFORM FRM_DOWN_PDF USING GS_DATA-EBELN GS_DATA-SPRAS. ENDLOOP. WHEN '&IC1'. IF RS_SELFIELD-FIELDNAME = 'EBELN'. READ TABLE GT_DATA INTO GS_DATA INDEX RS_SELFIELD-TABINDEX. IF SY-SUBRC = 0. SET PARAMETER ID 'BES' FIELD GS_DATA-EBELN. CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN. ENDIF. ENDIF. WHEN OTHERS. ENDCASE. RS_SELFIELD-REFRESH = 'X'."刷新ALV报表 RS_SELFIELD-COL_STABLE = 'X'. RS_SELFIELD-ROW_STABLE = 'X'. ENDFORM. "FRM_USER_COMMAND *&---------------------------------------------------------------------* *& Form frm_set_pf_status2 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->RT_EXTAB text *----------------------------------------------------------------------* FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS 'PF_STATUS'. ENDFORM. "FRM_SET_PF_STATUS *&---------------------------------------------------------------------* *& Form FRM_SEND_MAIL *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> GS_DATA_EBELN *& --> GS_DATA_SPRAS *& <-- GS_DATA_ICON *& <-- GS_DATA_MESSAGE *& <-- ELSE *&---------------------------------------------------------------------* FORM FRM_SEND_MAIL USING P_EBELN P_SPRAS P_EKGRP P_MCOD1 P_BUKRS P_EMAIL P_CLSS CHANGING P_ICON P_MESSAGE P_ERDAT. DATA:LS_ZT37 LIKE ZNMMT037. DATA:LV_BUTXT LIKE T001-BUTXT. DATA:LT_CONTENT_BIN TYPE SOLIX_TAB. DATA: CL_SEND_REQUEST TYPE REF TO CL_BCS, CL_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS, CL_BCS_EXCEPTION TYPE REF TO CX_BCS, CL_SENDER TYPE REF TO IF_SENDER_BCS, CL_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS. DATA: LT_MAIN_TEXT TYPE BCSY_TEXT, LS_MAIN_TEXT LIKE LINE OF LT_MAIN_TEXT, LV_TITLE TYPE SO_OBJ_DES, LV_BOOL TYPE OS_BOOLEAN. DATA:LV_PATH TYPE STRING. DATA:LT_BIN TYPE TABLE OF TBL1024. DATA LV_CONTENT TYPE XSTRING. DATA LV_VLINE TYPE I. DATA : BEGIN OF LS_RECIEVE, EMAIL TYPE AD_SMTPADR, END OF LS_RECIEVE. DATA : LT_RECIEVE LIKE TABLE OF LS_RECIEVE. DATA : LV_INDEX1 TYPE I. DATA : LV_INDEX2 TYPE I. DATA : LV_INDEX3 TYPE I. LV_PATH = 'C:\PO\' && P_EBELN && '_' && SY-UZEIT && '.PDF'. PERFORM FRM_GET_PDF USING P_EBELN P_SPRAS LV_PATH CHANGING P_ICON P_MESSAGE. IF P_ICON IS INITIAL. CALL FUNCTION 'GUI_UPLOAD' EXPORTING FILENAME = LV_PATH FILETYPE = 'BIN' IMPORTING FILELENGTH = LV_VLINE TABLES DATA_TAB = LT_BIN[]. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING INPUT_LENGTH = LV_VLINE IMPORTING BUFFER = LV_CONTENT TABLES BINARY_TAB = LT_BIN EXCEPTIONS FAILED = 1 OTHERS = 2. CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING BUFFER = LV_CONTENT IMPORTING OUTPUT_LENGTH = LV_VLINE TABLES BINARY_TAB = LT_CONTENT_BIN. TRY. * 创建发送请求 CL_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ). SELECT SINGLE BUTXT INTO LV_BUTXT FROM T001 WHERE BUKRS = P_BUKRS. **处理标题头内容 CONCATENATE LV_BUTXT P_EBELN P_MCOD1 P_EKGRP INTO LV_TITLE SEPARATED BY SPACE. **处理邮件内容 *DG01 要求加上客制化描述 * IF P_BUKRS EQ 'DG01'. * IF SY-LANGU EQ '1'. * LS_MAIN_TEXT = * '附件是东莞长城开发新订单,请收到订单后邮件回复确认给采购员,并于3个工作日内在供应商平台上确认订单交期。供应商平台网址:https://sp.kaifa.cn '. * ELSE. * DATA(LV_STR) = 'The attachment is the new PO of Dongguan Kaifa Technology Co.,Ltd,' * && 'Please reply to the buyer after receiving the PO, and confirm the order delivery date on the supplier portal within 3 working days.' * && 'Supplier portal website(URL): https://sp.kaifa.cn '. * LS_MAIN_TEXT = LV_STR. * ENDIF. * APPEND LS_MAIN_TEXT TO LT_MAIN_TEXT. * ENDIF. * 创建整理发送内容 CL_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT( I_TYPE = 'RAW' I_TEXT = LT_MAIN_TEXT I_SUBJECT = LV_TITLE ). * 添加附件 DATA:L_OBJTP TYPE SOODK-OBJTP. DATA:L_OBJDES TYPE SOOD-OBJDES. L_OBJTP = 'PDF'. * l_objdes = p_ebeln && p_mcod1. CONCATENATE LV_BUTXT P_EBELN P_MCOD1 P_EKGRP INTO L_OBJDES SEPARATED BY SPACE. CALL METHOD CL_DOCUMENT->ADD_ATTACHMENT EXPORTING I_ATTACHMENT_TYPE = L_OBJTP I_ATTACHMENT_SUBJECT = L_OBJDES I_ATT_CONTENT_HEX = LT_CONTENT_BIN. * 添加邮件内容到发送请求 CL_SEND_REQUEST->SET_DOCUMENT( CL_DOCUMENT ). * 指定邮件发件人为采购员邮箱 * data:lv_sendtype type SX_ADDRTYP value '*', * lv_address_string type string value 'yuli@kaifa.cn', * lv_address_name type string value 'Yuli'. * cl_sender->ADDRESS_TYPE( lv_sendtype ). * cl_sender->ADDRESS_STRING( EXPORTING result = lv_address_string ). * cl_sender->ADDRESS_NAME( EXPORTING result = lv_address_name ). * cl_send_request->set_sender( cl_sender ). * data: sender type ref to cl_sapuser_bcs, * lv_uname type sy-uname value 'DTANG.IS'. * sender = cl_sapuser_bcs=>create( lv_uname ). * call method cl_send_request->set_sender * exporting * i_sender = sender. *modify by songjiaru 20200519 *----------------指定发件人----------------------------* CLEAR GS_MAIL-SMTP_ADDR. SELECT SINGLE SMTP_ADDR INTO GS_MAIL-SMTP_ADDR FROM T024 WHERE EKGRP = P_EKGRP. DATA(LO_SENDER) = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( I_ADDRESS_STRING = GS_MAIL-SMTP_ADDR I_ADDRESS_NAME = GS_MAIL-SMTP_ADDR ). CALL METHOD CL_SEND_REQUEST->SET_SENDER EXPORTING I_SENDER = LO_SENDER. * "指定邮件接收人 * LOOP AT GT_MAIL INTO GS_MAIL WHERE ADRNR = P_ADRNR. * CL_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( GS_MAIL-SMTP_ADDR ). * CL_SEND_REQUEST->ADD_RECIPIENT( CL_RECIPIENT ). * ENDLOOP. IF GS_MAIL-SMTP_ADDR IS NOT INITIAL. CL_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( GS_MAIL-SMTP_ADDR ). CL_SEND_REQUEST->ADD_RECIPIENT( CL_RECIPIENT ). ENDIF. IF P_CLSS = 'X'. * CLEAR GS_MAIL-SMTP_ADDR. * SELECT SINGLE SMTP_ADDR INTO GS_MAIL-SMTP_ADDR * FROM T024 * WHERE EKGRP = P_EKGRP. LV_INDEX1 = 0. LV_INDEX2 = 0. LV_INDEX3 = 1. CLEAR LT_RECIEVE. WHILE ( LV_INDEX3 <= STRLEN( P_EMAIL ) ). LV_INDEX2 = LV_INDEX2 + 1. LV_INDEX3 = LV_INDEX3 + 1. IF P_EMAIL+LV_INDEX1(LV_INDEX2) CA '/'. LV_INDEX2 = LV_INDEX2 - 1 . LS_RECIEVE-EMAIL = P_EMAIL+LV_INDEX1(LV_INDEX2). APPEND LS_RECIEVE TO LT_RECIEVE. CLEAR LS_RECIEVE. LV_INDEX1 = LV_INDEX3 - 1. LV_INDEX2 = 0. ENDIF. ENDWHILE. LOOP AT LT_RECIEVE INTO LS_RECIEVE. CL_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( LS_RECIEVE-EMAIL ). CL_SEND_REQUEST->ADD_RECIPIENT( CL_RECIPIENT ). ENDLOOP. ENDIF. ** 正式发送并提交作业 CLEAR LV_BOOL. "将邮件置于发件箱,可以在工作台outbox查看邮件的发送状态及内容 CL_SEND_REQUEST->SEND_REQUEST->SET_LINK_TO_OUTBOX( 'X' ). CALL METHOD CL_SEND_REQUEST->SEND_REQUEST->SETU_REQUESTED_STATUS EXPORTING I_REQUESTED_STATUS = 'N'. CALL METHOD CL_SEND_REQUEST->SEND_REQUEST->SETU_STATUS_MAIL EXPORTING I_STATUS_MAIL = 'A'. CL_SEND_REQUEST->SET_SEND_IMMEDIATELY( 'X' ). LV_BOOL = CL_SEND_REQUEST->SEND( I_WITH_ERROR_SCREEN = 'X'). IF LV_BOOL = 'X'. COMMIT WORK. * submit rsconn01 with mode = 'INT' and return. IF LT_CONTENT_BIN IS INITIAL. P_ICON = '@0A@'. P_MESSAGE = TEXT-004. "默认导入成功 ELSE. P_ICON = '@08@'. P_MESSAGE = TEXT-005. "默认导入成功 P_ERDAT = SY-DATUM. CLEAR LS_ZT37. LS_ZT37-EBELN = P_EBELN. LS_ZT37-ERDAT = SY-DATUM. LS_ZT37-ERTIM = SY-UZEIT. LS_ZT37-ERNAM = SY-UNAME. MODIFY ZNMMT037 FROM LS_ZT37. ENDIF. ELSE. P_ICON = '@0A@'. P_MESSAGE = TEXT-006. "默认导入成功 ROLLBACK WORK. ENDIF. CATCH CX_BCS INTO CL_BCS_EXCEPTION. P_ICON = '@0A@'. P_MESSAGE = TEXT-006 && CL_BCS_EXCEPTION->ERROR_TYPE.. "默认导入成功 ENDTRY. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_DOWN_PDF *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> GS_DATA_EBELN *& --> GS_DATA_SPRAS *& --> GS_DATA_TDSPOOLID *&---------------------------------------------------------------------* FORM FRM_DOWN_PDF USING P_EBELN P_SPRAS. DATA:LV_ICON TYPE ICON-NAME, LV_MESSAGE TYPE C LENGTH 120. PERFORM FRM_GET_PDF USING P_EBELN P_SPRAS '' CHANGING LV_ICON LV_MESSAGE. IF LV_ICON NE ''. LV_MESSAGE = P_EBELN && LV_MESSAGE. MESSAGE LV_MESSAGE TYPE 'E' . ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_PDF *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> P_EBELN *& --> P_SPRAS *& <-- P_ICON *& <-- P_MESSAGE *&---------------------------------------------------------------------* FORM FRM_GET_PDF USING P_EBELN P_SPRAS P_PATH CHANGING P_ICON P_MESSAGE. DATA:LT_PDF LIKE TLINE OCCURS 0 WITH HEADER LINE, LS_PDF LIKE TLINE. DATA:LS_NAST LIKE NAST, LV_SUBRC TYPE SY-SUBRC, LV_VLINE TYPE I, LV_SMARTFORM_NAME TYPE RS38L_FNAM VALUE 'ZPO_FORM', " 请替换为实际的Smart Form名称 LV_TEMPLATE TYPE STXH-TDNAME VALUE 'ZPO_FORM'. " 请替换为实际的模板名称 FIELD-SYMBOLS <FS_VALUE> TYPE ITCPP. SELECT SINGLE * INTO LS_NAST FROM NAST WHERE OBJKY = P_EBELN AND SPRAS = P_SPRAS. CALL FUNCTION 'WFMC_MESSAGE_SINGLE' EXPORTING PI_NAST = LS_NAST IMPORTING PE_RCODE = LV_SUBRC. IF LV_SUBRC = 0. ASSIGN ('(SAPLMEDRUCK)RESULT') TO <FS_VALUE>. IF <FS_VALUE>-TDSPOOLID IS NOT INITIAL. CLEAR LT_PDF. " 使用Smart Forms函数替代原函数 CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING FORMNAME = ZPO_FORM IMPORTING FM_NAME = LV_FM_NAME EXCEPTIONS NO_FORM = 1 NO_FUNCTION_MODULE = 2 OTHERS = 3. IF SY-SUBRC <> 0. P_ICON = '@0A@'. P_MESSAGE = '获取Smart Forms函数失败'. EXIT. ENDIF. " 动态调用Smart Forms函数 CALL FUNCTION LV_FM_NAME EXPORTING EXPORTING = 'X' TEMPLATE = LV_TEMPLATE OUTPUT_OPTIONS = LS_OUTPUT_OPTIONS IMPORTING JOB_OUTPUT_INFO = LS_JOB_OUTPUT_INFO TABLES LINES = LT_PDF EXCEPTIONS FORMATTING_ERROR = 1 INTERNAL_ERROR = 2 SEND_ERROR = 3 USER_CANCELED = 4 OTHERS = 5. IF SY-SUBRC <> 0. P_ICON = '@0A@'. P_MESSAGE = '执行ZPO_FORM函数失败'. EXIT. ENDIF. " 计算PDF字节数 LV_VLINE = LINES( LT_PDF ). IF LT_PDF[] IS NOT INITIAL. "先下载到本地,再上载做为附件 IF P_PATH IS NOT INITIAL. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING BIN_FILESIZE = LV_VLINE FILENAME = P_PATH FILETYPE = 'BIN' TABLES DATA_TAB = LT_PDF EXCEPTIONS FILE_WRITE_ERROR = 1 NO_BATCH = 2 GUI_REFUSE_FILETRANSFER = 3 INVALID_TYPE = 4 NO_AUTHORITY = 5 UNKNOWN_ERROR = 6. ELSE. DATA:LV_FILE TYPE STRING. PERFORM FRM_GET_PATH USING LV_FILE. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING BIN_FILESIZE = LV_VLINE FILENAME = LV_FILE FILETYPE = 'BIN' TABLES DATA_TAB = LT_PDF EXCEPTIONS FILE_WRITE_ERROR = 1 NO_BATCH = 2 GUI_REFUSE_FILETRANSFER = 3 INVALID_TYPE = 4 NO_AUTHORITY = 5 UNKNOWN_ERROR = 6. ENDIF. ELSE. P_ICON = '@0A@'. P_MESSAGE = TEXT-007. "默认导入成功 ENDIF. ELSE. P_ICON = '@0A@'. P_MESSAGE = TEXT-008. "默认导入成功 ENDIF. ELSE. P_ICON = '@0A@'. P_MESSAGE = TEXT-009. "默认导入成功 ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_PATH *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> LV_PATH *&---------------------------------------------------------------------* FORM FRM_GET_PATH USING P_FILE. DATA: L_V_FILE_FILTER TYPE STRING. DATA: L_V_FILETABLE TYPE FILE_TABLE, L_T_FILETABLE TYPE FILETABLE. DATA: L_V_RC TYPE I. DATA: L_V_USER_ACTION TYPE I. * l_v_file_filter = '(*.xlsx;*.xls)|*.xlsx;*.xls|'. L_V_FILE_FILTER = '(*.PDF)|*.PDF|'. CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG( EXPORTING WINDOW_TITLE = '选择文件' FILE_FILTER = L_V_FILE_FILTER CHANGING FILE_TABLE = L_T_FILETABLE RC = L_V_RC USER_ACTION = L_V_USER_ACTION ). CHECK L_V_USER_ACTION EQ 0. CHECK L_T_FILETABLE[] IS NOT INITIAL. READ TABLE L_T_FILETABLE INTO L_V_FILETABLE INDEX 1. P_FILE = L_V_FILETABLE-FILENAME. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_MOD_SCREEN *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_MOD_SCREEN . LOOP AT SCREEN. IF SCREEN-GROUP1 = 'M1'. IF R1 = 'X'. SCREEN-ACTIVE = 1. ELSE. SCREEN-ACTIVE = 0. ENDIF. ENDIF. IF SCREEN-GROUP1 = 'M2'. IF R2 = 'X'. SCREEN-ACTIVE = 1. ELSE. SCREEN-ACTIVE = 0. ENDIF. ENDIF. IF SCREEN-GROUP1 = 'M3'. IF R3 = 'X'. SCREEN-ACTIVE = 1. ELSE. SCREEN-ACTIVE = 0. ENDIF. ENDIF. MODIFY SCREEN. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_DOWN_TEMPLATE *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_DOWN_TEMPLATE . CREATE OBJECT V_EXCEL 'EXCEL.APPLICATION'. SET PROPERTY OF V_EXCEL 'VISIBLE' = 1. CALL METHOD OF V_EXCEL 'WORKBOOKS' = V_BOOK . CALL METHOD OF V_BOOK 'ADD'. IF SY-LANGU EQ '1'. PERFORM FRM_FILL_CELL USING: 1 1 '供应商代码(必填)' 40 0 10, "行号,列号,值,单元格颜色,是否加粗,字体尺寸" 1 2 '采购组织(必填)' 40 0 10, "行号,列号,值,单元格颜色,是否加粗,字体尺寸" 1 3 '工厂(选填)' 40 0 10, 1 4 '采购员(选填)' 40 0 10, 1 5 '订单发送邮箱(必填)' 40 0 10. ELSE. PERFORM FRM_FILL_CELL USING: 1 1 'Vendor Code(Required)' 40 0 10, "行号,列号,值,单元格颜色,是否加粗,字体尺寸" 1 2 'Purchase Organization(Required)' 40 0 10, "行号,列号,值,单元格颜色,是否加粗,字体尺寸" 1 3 'Plant' 40 0 10, 1 4 'Buyer.Code' 40 0 10, " add buyer code 20210413 wahkenlee 1 5 'Email' 40 0 10. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_FILL_CELL *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> P_1 *& --> P_1 *& --> P_ *& --> P_40 *& --> P_0 *& --> P_10 *&---------------------------------------------------------------------* FORM FRM_FILL_CELL USING FU_ROW FU_COLUMN FU_VALUE FU_COLOR FU_BOLD FU_SIZE. DATA: L_CELL TYPE OLE2_OBJECT, L_COLOR TYPE OLE2_OBJECT, L_BOLD TYPE OLE2_OBJECT, L_COLUMN TYPE OLE2_OBJECT. CALL METHOD OF V_EXCEL 'CELLS' = L_CELL EXPORTING #1 = FU_ROW #2 = FU_COLUMN. SET PROPERTY OF L_CELL 'Value' = FU_VALUE. "赋值。" * call method of L_CELL 'INTERIOR' = int. GET PROPERTY OF L_CELL 'Interior' = L_COLOR. SET PROPERTY OF L_COLOR 'ColorIndex' = FU_COLOR. "根据值 显示对应的颜色。 GET PROPERTY OF L_CELL 'Font' = L_BOLD. SET PROPERTY OF L_BOLD 'Bold' = FU_BOLD. "1是加粗,0是不加粗" SET PROPERTY OF L_BOLD 'SIZE' = FU_SIZE. "设置字体大小。" CALL METHOD OF V_EXCEL 'Columns' = L_COLUMN " 选定列 EXPORTING #1 = FU_COLUMN . SET PROPERTY OF L_COLUMN 'ColumnWidth' = 20. " 定义列宽 SET PROPERTY OF L_COLUMN 'rowheight' = 24. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_MAINTAIN_EMAIL *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_MAINTAIN_EMAIL . PERFORM FRM_CHECK_AUTH. PERFORM FRM_UPLOAD_DATA. PERFORM FRM_CHECK_DATA. PERFORM FRM_UPDATE_DATA. PERFORM FRM_ALV. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_UPLOAD_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_UPLOAD_DATA . CLEAR : GS_ITEM ,GT_ITEM. CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING FILENAME = GV_FILE I_BEGIN_COL = 1 I_BEGIN_ROW = 2 I_END_COL = 5 I_END_ROW = 65535 TABLES INTERN = GT_ALSM EXCEPTIONS INCONSISTENT_PARAMETERS = 1 UPLOAD_OLE = 2 OTHERS = 3. IF SY-SUBRC <> 0. MESSAGE S000(ZMM) WITH TEXT-010 DISPLAY LIKE 'W'. LEAVE LIST-PROCESSING. ENDIF. * 转换数据 LOOP AT GT_ALSM. ASSIGN COMPONENT GT_ALSM-COL OF STRUCTURE GS_ITEM TO <GFS_DATA>. TRANSLATE GT_ALSM-VALUE TO UPPER CASE. <GFS_DATA> = GT_ALSM-VALUE. AT END OF ROW. APPEND GS_ITEM TO GT_ITEM. CLEAR GS_ITEM. ENDAT. ENDLOOP. LOOP AT GT_ITEM ASSIGNING FIELD-SYMBOL(<LFS_ITEM>). CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = <LFS_ITEM>-LIFNR IMPORTING OUTPUT = <LFS_ITEM>-LIFNR. ENDLOOP. IF GT_ITEM IS INITIAL. MESSAGE S000(ZMM) WITH TEXT-011 DISPLAY LIKE 'W'. LEAVE LIST-PROCESSING. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_CHECK_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_CHECK_DATA . DATA LV_NAME TYPE STRING . data:ls_email_stru type SX_ADDRESS, ls_email_stru_out type SX_ADDRESS. *前面已经判断过gt_item 不为空 SELECT LFA1~LIFNR , LFA1~NAME1 INTO TABLE @GT_LFA1 FROM LFA1 FOR ALL ENTRIES IN @GT_ITEM WHERE LFA1~LIFNR = @GT_ITEM-LIFNR. SORT GT_LFA1 BY LIFNR . SELECT T024E~EKORG , T001K~BWKEY FROM T024E INNER JOIN T001K ON T024E~BUKRS = T001K~BUKRS FOR ALL ENTRIES IN @GT_ITEM WHERE T024E~EKORG = @GT_ITEM-EKORG INTO TABLE @DATA(LT_T024E). SELECT T024~EKGRP FROM T024 FOR ALL ENTRIES IN @GT_ITEM WHERE T024~EKGRP = @GT_ITEM-EKGRP INTO TABLE @DATA(LT_T024). SORT LT_T024E BY EKORG BWKEY. SORT LT_T024 BY EKGRP. DATA LS_T024E LIKE LINE OF LT_T024E. DATA LS_T024 LIKE LINE OF LT_T024. LOOP AT GT_ITEM INTO GS_ITEM. MOVE-CORRESPONDING GS_ITEM TO GS_MESSAGE. CLEAR GS_LFA1. READ TABLE GT_LFA1 INTO GS_LFA1 WITH KEY LIFNR = GS_ITEM-LIFNR BINARY SEARCH . IF SY-SUBRC <> 0. GS_MESSAGE-MESSAGE = TEXT-012. GS_MESSAGE-FLAG = 'X'. ELSE. GS_MESSAGE-NAME1 = GS_LFA1-NAME1. ENDIF. IF GS_ITEM-EKORG IS INITIAL. CONCATENATE GS_MESSAGE-MESSAGE TEXT-013 INTO GS_MESSAGE-MESSAGE. GS_MESSAGE-FLAG = 'X'. ENDIF. IF GS_ITEM-WERKS IS NOT INITIAL AND GS_ITEM-EKORG IS NOT INITIAL. CLEAR LS_T024E. READ TABLE LT_T024E INTO LS_T024E WITH KEY EKORG = GS_ITEM-EKORG BWKEY = GS_ITEM-WERKS BINARY SEARCH. IF SY-SUBRC <> 0. CONCATENATE GS_MESSAGE-MESSAGE TEXT-014 INTO GS_MESSAGE-MESSAGE. GS_MESSAGE-FLAG = 'X'. ENDIF. ENDIF. IF GS_ITEM-EMAIL IS INITIAL. CONCATENATE GS_MESSAGE-MESSAGE '' INTO GS_MESSAGE-MESSAGE. GS_MESSAGE-FLAG = 'X'. ELSE. "校验导入邮箱的格式 ls_email_stru-type = 'INT'. ls_email_stru-address = gs_item-email. CALL FUNCTION 'SX_INTERNET_ADDRESS_TO_NORMAL' EXPORTING ADDRESS_UNSTRUCT = ls_email_stru IMPORTING ADDRESS_NORMAL = ls_email_stru_out EXCEPTIONS ERROR_ADDRESS_TYPE = 1 ERROR_ADDRESS = 2 ERROR_GROUP_ADDRESS = 3 OTHERS = 4. if ls_email_stru is INITIAL. CONCATENATE GS_MESSAGE-MESSAGE TEXT-025 INTO GS_MESSAGE-MESSAGE. GS_MESSAGE-FLAG = 'X'. endif. ENDIF. CALL FUNCTION 'ZMM_GET_DOMAIN' IMPORTING DOMAIN_NAME = LV_NAME. IF LV_NAME IS INITIAL. CONCATENATE GS_MESSAGE-MESSAGE TEXT-016 INTO GS_MESSAGE-MESSAGE. GS_MESSAGE-FLAG = 'X'. ELSE. GS_MESSAGE-UNAME = LV_NAME. ENDIF. IF GS_ITEM-EKGRP IS NOT INITIAL. CLEAR:LS_T024. READ TABLE LT_T024 INTO LS_T024 WITH KEY EKGRP = GS_ITEM-EKGRP. IF SY-SUBRC <> 0. CONCATENATE GS_MESSAGE-MESSAGE TEXT-024 INTO GS_MESSAGE-MESSAGE. GS_MESSAGE-FLAG = 'X'. ENDIF. ENDIF. IF GS_MESSAGE-FLAG <> 'X'. CONCATENATE TEXT-017 SY-DATUM+0(4) '/' SY-DATUM+4(2) '/' SY-DATUM+6(2) TEXT-018 SYST-UZEIT+0(2) ':' SYST-UZEIT+2(2) ':' SYST-UZEIT+4(2) INTO GS_MESSAGE-MESSAGE. ENDIF. APPEND GS_MESSAGE TO GT_MESSAGE. CLEAR GS_MESSAGE. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_UPDATE_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_UPDATE_DATA . DATA : LT_ZNMMT037A TYPE TABLE OF ZNMMT037A. DATA : LS_ZNMMT037A LIKE LINE OF LT_ZNMMT037A. LOOP AT GT_MESSAGE INTO GS_MESSAGE WHERE FLAG <> 'X'. MOVE-CORRESPONDING GS_MESSAGE TO LS_ZNMMT037A. APPEND LS_ZNMMT037A TO LT_ZNMMT037A. CLEAR LS_ZNMMT037A. ENDLOOP. IF LT_ZNMMT037A IS NOT INITIAL. MODIFY ZNMMT037A FROM TABLE LT_ZNMMT037A. IF SY-DBCNT <> 0. COMMIT WORK. ENDIF. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_ALV *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_ALV . CLEAR GT_FIELDCAT. CLEAR GS_FIELDCAT. CLEAR GT_EVENTS. CLEAR GS_EVENTS. CLEAR GS_LAYOUT1. MOVE-CORRESPONDING GT_MESSAGE TO GT_EMAIL_ALV. IF SY-LANGU EQ '1'. GMRC_INITIAL_FIELD '供应商代码' 'LIFNR' 'X'. GMRC_INITIAL_FIELD '供应商名称' 'NAME1' 'X'. GMRC_INITIAL_FIELD '采购组织' 'EKORG' 'X'. GMRC_INITIAL_FIELD '工厂' 'WERKS' 'X'. GMRC_INITIAL_FIELD '采购员' 'EKGRP' 'X'. GMRC_INITIAL_FIELD '订单发送邮箱' 'EMAIL' 'X'. GMRC_INITIAL_FIELD '用户域名' 'UNAME' 'X'. GMRC_INITIAL_FIELD '信息' 'MESSAGE' ''. ELSE. GMRC_INITIAL_FIELD 'Supplier Code' 'LIFNR' 'X'. GMRC_INITIAL_FIELD 'Supplier Name' 'NAME1' 'X'. GMRC_INITIAL_FIELD 'Purchase Organization' 'EKORG' 'X'. GMRC_INITIAL_FIELD 'Plant' 'WERKS' 'X'. GMRC_INITIAL_FIELD 'Buyer.Code' 'EKGRP' 'X'. GMRC_INITIAL_FIELD 'Email' 'EMAIL' 'X'. GMRC_INITIAL_FIELD 'Domain' 'UNAME' 'X'. GMRC_INITIAL_FIELD 'Message' 'MESSAGE' ''. ENDIF. GS_LAYOUT1-COLWIDTH_OPTIMIZE = 'X'. GS_LAYOUT1-ZEBRA = 'X'. MOVE 'PF_STATUS_SET' TO GS_EVENTS-NAME. MOVE 'FRM_SET_PF_STATUS1' TO GS_EVENTS-FORM. APPEND GS_EVENTS TO GT_EVENTS. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING * I_INTERFACE_CHECK = ' ' * I_BYPASSING_BUFFER = ' ' * I_BUFFER_ACTIVE = ' ' I_CALLBACK_PROGRAM = SY-REPID * I_CALLBACK_PF_STATUS_SET = '' I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND2' * I_CALLBACK_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_END_OF_LIST = ' ' * I_STRUCTURE_NAME = * I_BACKGROUND_ID = ' ' * I_GRID_TITLE = * I_GRID_SETTINGS = IS_LAYOUT = GS_LAYOUT1 IT_FIELDCAT = GT_FIELDCAT * IT_EXCLUDING = * IT_SPECIAL_GROUPS = * IT_SORT = * IT_FILTER = * IS_SEL_HIDE = I_DEFAULT = 'X' * I_SAVE = 'A ' * IS_VARIANT = IT_EVENTS = GT_EVENTS * IT_EVENT_EXIT = * IS_PRINT = * IS_REPREP_ID = * I_SCREEN_START_COLUMN = 0 * I_SCREEN_START_LINE = 0 * I_SCREEN_END_COLUMN = 0 * I_SCREEN_END_LINE = 0 * I_HTML_HEIGHT_TOP = 0 * I_HTML_HEIGHT_END = 0 * IT_ALV_GRAPHICS = * IT_HYPERLINK = * IT_ADD_FIELDCAT = * IT_EXCEPT_QINFO = * IR_SALV_FULLSCREEN_ADAPTER = * O_PREVIOUS_SRAL_HANDLER = * IMPORTING * E_EXIT_CAUSED_BY_CALLER = * ES_EXIT_CAUSED_BY_USER = TABLES T_OUTTAB = GT_EMAIL_ALV EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. 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 FRM_SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS'0100' . ENDFORM. FORM FRM_SET_PF_STATUS1 USING RT_EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS'0200' . ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_QUERY *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_QUERY . CLEAR : GT_QUERY_ALV. CLEAR : GS_QUERY_ALV. CLEAR GT_FIELDCAT. CLEAR GS_FIELDCAT. CLEAR GT_EVENTS. CLEAR GS_EVENTS. CLEAR GS_LAYOUT1. SELECT ZNMMT037A~LIFNR , ZNMMT037A~NAME1 , ZNMMT037A~EKORG , ZNMMT037A~WERKS , ZNMMT037A~EMAIL , ZNMMT037A~UNAME , ZNMMT037A~MESSAGE , ZNMMT037A~EKGRP FROM ZNMMT037A WHERE ZNMMT037A~LIFNR IN @S_LIFNR1 AND ZNMMT037A~EKORG IN @S_EKORG1 AND ZNMMT037A~WERKS IN @S_WERKS INTO TABLE @DATA(LT_ZNMMT037A) . MOVE-CORRESPONDING LT_ZNMMT037A TO GT_QUERY_ALV. IF SY-LANGU EQ '1'. GMRC_INITIAL_FIELD '供应商代码' 'LIFNR' 'X'. GMRC_INITIAL_FIELD '供应商名称' 'NAME1' 'X'. GMRC_INITIAL_FIELD '采购组织' 'EKORG' 'X'. GMRC_INITIAL_FIELD '工厂' 'WERKS' 'X'. GMRC_INITIAL_FIELD '采购员' 'EKGRP' 'X'. GMRC_INITIAL_FIELD '订单发送邮箱' 'EMAIL' 'X'. GMRC_INITIAL_FIELD '用户域名' 'UNAME' 'X'. GMRC_INITIAL_FIELD '信息' 'MESSAGE' ''. ELSE. GMRC_INITIAL_FIELD 'Supplier Code' 'LIFNR' 'X'. GMRC_INITIAL_FIELD 'Supplier Name' 'NAME1' 'X'. GMRC_INITIAL_FIELD 'Purchase Organization' 'EKORG' 'X'. GMRC_INITIAL_FIELD 'Plant' 'WERKS' 'X'. GMRC_INITIAL_FIELD 'Buyer.Code' 'EKGRP' 'X'. GMRC_INITIAL_FIELD 'Email' 'EMAIL' 'X'. GMRC_INITIAL_FIELD 'DOMAIN_NAME' 'UNAME' 'X'. GMRC_INITIAL_FIELD 'Message' 'MESSAGE' ''. ENDIF. GS_LAYOUT1-COLWIDTH_OPTIMIZE = 'X'. GS_LAYOUT1-ZEBRA = 'X'. GS_LAYOUT1-BOX_FIELDNAME = 'BOX'. MOVE 'PF_STATUS_SET' TO GS_EVENTS-NAME. MOVE 'FRM_SET_PF_STATUS' TO GS_EVENTS-FORM. APPEND GS_EVENTS TO GT_EVENTS. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING * I_INTERFACE_CHECK = ' ' * I_BYPASSING_BUFFER = ' ' * I_BUFFER_ACTIVE = ' ' I_CALLBACK_PROGRAM = SY-REPID * I_CALLBACK_PF_STATUS_SET = '' I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND1' * I_CALLBACK_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_END_OF_LIST = ' ' * I_STRUCTURE_NAME = * I_BACKGROUND_ID = ' ' * I_GRID_TITLE = * I_GRID_SETTINGS = IS_LAYOUT = GS_LAYOUT1 IT_FIELDCAT = GT_FIELDCAT * IT_EXCLUDING = * IT_SPECIAL_GROUPS = * IT_SORT = * IT_FILTER = * IS_SEL_HIDE = I_DEFAULT = 'X' * I_SAVE = 'A ' * IS_VARIANT = IT_EVENTS = GT_EVENTS * IT_EVENT_EXIT = * IS_PRINT = * IS_REPREP_ID = * I_SCREEN_START_COLUMN = 0 * I_SCREEN_START_LINE = 0 * I_SCREEN_END_COLUMN = 0 * I_SCREEN_END_LINE = 0 * I_HTML_HEIGHT_TOP = 0 * I_HTML_HEIGHT_END = 0 * IT_ALV_GRAPHICS = * IT_HYPERLINK = * IT_ADD_FIELDCAT = * IT_EXCEPT_QINFO = * IR_SALV_FULLSCREEN_ADAPTER = * O_PREVIOUS_SRAL_HANDLER = * IMPORTING * E_EXIT_CAUSED_BY_CALLER = * ES_EXIT_CAUSED_BY_USER = TABLES T_OUTTAB = GT_QUERY_ALV EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. 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 FRM_USER_COMMAND1 USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD. CASE R_UCOMM. WHEN 'BACK' OR 'CANCEL' OR 'EXIT'. DATA : LV_SELTAB TYPE TABLE OF RSPARAMS. CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS' "获取当前的选择屏幕元素 EXPORTING CURR_REPORT = SY-REPID * IMPORTING * SP = TABLES SELECTION_TABLE = LV_SELTAB * SELECTION_TABLE_255 = EXCEPTIONS NOT_FOUND = 1 NO_REPORT = 2 OTHERS = 3. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. "使用获取到的屏幕元素跳转初始界面 SUBMIT ZNMMR037 WITH SELECTION-TABLE LV_SELTAB VIA SELECTION-SCREEN. WHEN 'DELETE'. IF R2 = 'X'. PERFORM FRM_DELETE_DATA. ENDIF. WHEN OTHERS. ENDCASE. ENDFORM. FORM FRM_USER_COMMAND2 USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD. CASE R_UCOMM. WHEN 'BACK' OR 'CANCEL' OR 'EXIT'. LEAVE TO SCREEN 0. WHEN OTHERS. ENDCASE. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_DELETE_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_DELETE_DATA . DATA : LS_COUNT TYPE I VALUE 0."删除记录的条数 DATA : LT_ZNMMT037A TYPE TABLE OF ZNMMT037A. DATA : LS_ZNMMT037A TYPE ZNMMT037A. DATA : LT_ALV LIKE GT_QUERY_ALV. DATA : LS_ALV LIKE LINE OF LT_ALV. CLEAR : LT_ZNMMT037A, LS_ZNMMT037A, LT_ALV, LS_ALV. LOOP AT GT_QUERY_ALV INTO GS_QUERY_ALV. IF GS_QUERY_ALV-BOX EQ 'X'. MOVE-CORRESPONDING GS_QUERY_ALV TO LS_ALV. APPEND LS_ALV TO LT_ALV. CLEAR LS_ALV. LS_ZNMMT037A-LIFNR = GS_QUERY_ALV-LIFNR. LS_ZNMMT037A-EKORG = GS_QUERY_ALV-EKORG. LS_ZNMMT037A-WERKS = GS_QUERY_ALV-WERKS. LS_ZNMMT037A-EMAIL = GS_QUERY_ALV-EMAIL. LS_ZNMMT037A-EKGRP = GS_QUERY_ALV-EKGRP. APPEND LS_ZNMMT037A TO LT_ZNMMT037A. CLEAR LS_ZNMMT037A. ENDIF. ENDLOOP. IF LT_ZNMMT037A IS INITIAL. MESSAGE E322(ZMM) DISPLAY LIKE 'W'. ENDIF. DELETE ZNMMT037A FROM TABLE LT_ZNMMT037A. IF SY-SUBRC EQ 0. COMMIT WORK AND WAIT. LOOP AT LT_ALV INTO LS_ALV. DELETE TABLE GT_QUERY_ALV FROM LS_ALV. LS_COUNT = LS_COUNT + 1. ENDLOOP. MESSAGE S104(ZMM) WITH LS_COUNT. DATA: LV_REF_GRID TYPE REF TO CL_GUI_ALV_GRID, LV_VALID TYPE C. IF LV_REF_GRID IS INITIAL. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING E_GRID = LV_REF_GRID. ENDIF. IF NOT LV_REF_GRID IS INITIAL. LV_REF_GRID->CHECK_CHANGED_DATA( IMPORTING E_VALID = LV_VALID ). ENDIF. IF LV_VALID IS NOT INITIAL. LV_REF_GRID->REFRESH_TABLE_DISPLAY( ) . ENDIF. ELSE. ROLLBACK WORK. MESSAGE E105(ZMM). ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_CHECK_AUTH *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_CHECK_AUTH . DATA LV_NAME TYPE STRING . CALL FUNCTION 'ZMM_GET_DOMAIN' IMPORTING DOMAIN_NAME = LV_NAME. SELECT SINGLE ZNMMT037B~DOMAIN_USER INTO @DATA(LV_DOMAIN) FROM ZNMMT037B WHERE ZPROGRAM = 'ZNMMR037' AND DOMAIN_USER = @LV_NAME. SELECT SINGLE ZNMMT037B~UNAME INTO @DATA(LV_UNAME) FROM ZNMMT037B WHERE ZPROGRAM = 'ZNMMR037' AND UNAME = @SY-UNAME. IF LV_DOMAIN IS INITIAL AND LV_UNAME IS INITIAL. MESSAGE S000(ZMM) WITH TEXT-019 DISPLAY LIKE 'W'. LEAVE LIST-PROCESSING. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_CHECK *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_CHECK . DATA: LV_STRING TYPE STRING. DATA : LV_NAME TYPE STRING. FIELD-SYMBOLS : <LFS_WERKS> LIKE GS_WERKS. CLEAR GT_WERKS. CLEAR GS_WERKS. IF S_WERKS1[] IS INITIAL. MESSAGE S000(ZMM) WITH TEXT-023. LEAVE LIST-PROCESSING. ELSE. CALL FUNCTION 'ZMM_GET_DOMAIN' IMPORTING DOMAIN_NAME = LV_NAME. SELECT ZME2M_PLANT~UNAME , ZME2M_PLANT~USER_DOMAIN ,ZME2M_PLANT~WERKS_LIST FROM ZME2M_PLANT WHERE ZME2M_PLANT~USER_DOMAIN = @LV_NAME INTO TABLE @DATA(LT_PLANT). SORT LT_PLANT BY WERKS_LIST. SELECT T001W~WERKS FROM T001W WHERE T001W~WERKS IN @S_WERKS1 INTO CORRESPONDING FIELDS OF TABLE @GT_WERKS. SORT GT_WERKS BY WERKS. IF GT_WERKS IS INITIAL. MESSAGE S000(ZMM) WITH TEXT-022 DISPLAY LIKE 'W'. LEAVE LIST-PROCESSING. ENDIF. IF LT_PLANT IS NOT INITIAL."在单点登录权限里面的用户在需要检查,不在里面的不需要检查 LOOP AT LT_PLANT INTO DATA(LS_PLANT). READ TABLE GT_WERKS WITH KEY WERKS = LS_PLANT-WERKS_LIST TRANSPORTING NO FIELDS BINARY SEARCH. IF SY-SUBRC <> 0. DELETE GT_WERKS WHERE WERKS = LS_PLANT-WERKS_LIST. ENDIF. ENDLOOP. ENDIF. IF GT_WERKS IS INITIAL. MESSAGE S000(ZMM) WITH TEXT-021. LEAVE LIST-PROCESSING . ENDIF. LOOP AT GT_WERKS ASSIGNING <LFS_WERKS> . AUTHORITY-CHECK OBJECT 'M_BEST_WRK' ID 'ACTVT' FIELD '03' ID 'WERKS' FIELD <LFS_WERKS>-WERKS. IF SY-SUBRC <> 0. <LFS_WERKS>-FLAG = 'X'. ENDIF. ENDLOOP. DELETE GT_WERKS WHERE FLAG = 'X'. IF GT_WERKS IS INITIAL. MESSAGE S000(ZMM) WITH TEXT-020 DISPLAY LIKE 'W'. LEAVE LIST-PROCESSING . ENDIF. ENDIF. CLEAR S_WERKS1[]. CLEAR S_WERKS1. LOOP AT GT_WERKS INTO GS_WERKS. S_WERKS1-SIGN = 'I'. S_WERKS1-OPTION = 'EQ'. S_WERKS1-LOW = GS_WERKS-WERKS. APPEND S_WERKS1. CLEAR S_WERKS1. ENDLOOP. ENDFORM.
05-16
**&--------------------------------------------------------------------* **---------------------------------------------------------------------* ** PROGRAM ID :ZMMR0006 * ** DESCRIPTION :采购计划协议批导 * ** APPLICATION NAME :MM * ** TRANSACTION :N/A * ** DEVELOPMENT CLAS@5B@ :ZMIND001 * ** AUTHOR : * ** REQ DATE : * **---------------------------------------------------------------------* **=====================================================================* ** MODIFICATIONS * **---------------------------------------------------------------------* ** DATE CHANGE BY DESCRIPTION TR NO. * **---------------------------------------------------------------------* ** 20241229 采购计划协议批导 DS4K900065 * **---------------------------------------------------------------------* REPORT zmmr0006. *&---------------------------------------------------------------------* *& 包含 ZMMR0006_TOP *&---------------------------------------------------------------------* TYPE-POOLS: slis,icon,truxs. TABLES: sscrfields. DATA: functxt TYPE smp_dyntxt. *导入模板 DATA: BEGIN OF i_data, zxh(4) TYPE n, bsart TYPE string, "计划协议类型 ebeln TYPE string, "协议编号 bukrs TYPE string, "公司代码 * bstyp TYPE string, "凭证类别 lifnr TYPE string, "供应商 waers TYPE string, "货币 ekorg TYPE string, "采购组织 ekgrp TYPE string, "采购组 kdatb TYPE string, "有效起始日期 kdate TYPE string, "有效截至日期 aedat TYPE string, "协议日期 unsez TYPE string, " 我方参考 * ebelp TYPE string, "行项目 pstyp TYPE string, "项目类别 ematn TYPE string, "物料编码 txz01 TYPE string, "短文本 ktmng TYPE string, "目标数量 meins TYPE string, "订单单位 netpr TYPE string, "净价 peinh TYPE string, "价格单位 bprme TYPE string, "订单价格单位(采购) * matkl TYPE string, "物料组 werks TYPE string, "工厂 lgort TYPE string, "库存地点 * bstae TYPE string, "确认控制默认0001 uebtk TYPE string, "无限制过量交货 etfz1 TYPE string, "确定域 etfz2 TYPE string, "平衡域 kzstu TYPE string, "捆绑在MRP * loekz TYPE string , "删除标识 light(4) TYPE c, "执行情况 message TYPE string, "消息 END OF i_data. DATA: t_data LIKE TABLE OF i_data, "ALV显示 w_data LIKE LINE OF t_data. DATA: BEGIN OF l_data2 OCCURS 0, zxh(4) TYPE n, bsart TYPE ekko-bsart, "计划协议类型 ebeln TYPE ekko-ebeln, "协议编号 bukrs TYPE ekko-bukrs, "公司代码 * bstyp TYPE ekko-bstyp, "凭证类别 lifnr TYPE ekko-lifnr, "供应商 waers TYPE ekko-waers, "货币 ekorg TYPE ekko-ekorg, "采购组织 ekgrp TYPE ekko-ekgrp, "采购组 kdatb TYPE ekko-kdatb, "有效起始日期 kdate TYPE ekko-kdate, "有效截至日期 aedat TYPE ekko-aedat, "协议日期 unsez TYPE ekko-unsez, " 我方参考 * ebelp TYPE ekpo-ebelp, "行项目 pstyp TYPE ekpo-pstyp, "项目类别 ematn TYPE ekpo-ematn, "物料编码 txz01 TYPE ekpo-txz01, "短文本 ktmng TYPE ekpo-ktmng, "目标数量 meins TYPE ekpo-meins, "订单单位 netpr TYPE ekpo-netpr, "净价 peinh TYPE ekpo-peinh, "价格单位 bprme TYPE ekpo-bprme, "订单价格单位(采购) * matkl TYPE ekpo-matkl, "物料组 werks TYPE ekpo-werks, "工厂 lgort TYPE ekpo-lgort, "库存地点 * bstae TYPE ekpo-bstae, "确认控制默认0001 uebtk TYPE ekpo-uebtk, "无限制过量交货 etfz1 TYPE ekpo-etfz1, "确定域 etfz2 TYPE ekpo-etfz2, "平衡域 kzstu TYPE ekpo-kzstu, "捆绑在MRP * loekz TYPE ekpo-loekz , "删除标识 light(4) TYPE c, "执行情况 message TYPE string, "消息 END OF l_data2. DATA:ls_data2 LIKE l_data2, t_data_dl LIKE TABLE OF l_data2. "ALV显示 DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE, gd_tab_group TYPE slis_t_sp_group_alv, gd_layout TYPE slis_layout_alv, gd_repid LIKE sy-repid. DATA lv_c1(10) TYPE c. DATA lv_n1(2) TYPE n. DATA lv_ebelp TYPE ebelp. SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-901. "单选按钮 PARAMETERS: p_dwload RADIOBUTTON GROUP ch DEFAULT 'X' USER-COMMAND a, p_upload RADIOBUTTON GROUP ch. SELECTION-SCREEN: FUNCTION KEY 1. PARAMETERS: p_file LIKE rlgrap-filename MODIF ID lo. "文件路径 SELECTION-SCREEN END OF BLOCK blk1. INITIALIZATION. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. PERFORM select_path. AT SELECTION-SCREEN OUTPUT. IF p_dwload = 'X'. LOOP AT SCREEN. IF screen-group1 = 'LO'. screen-active = '0'. ENDIF . IF screen-group1 = 'X'. screen-active = '0'. ENDIF. MODIFY SCREEN. ENDLOOP. ELSEIF p_upload = 'X'. LOOP AT SCREEN. IF screen-group1 = 'LO'. screen-active = '1'. ENDIF. IF screen-group1 = 'X'. screen-active = '1'. ENDIF. MODIFY SCREEN. ENDLOOP. ENDIF. START-OF-SELECTION. IF p_dwload = 'X'. * 下载模板 PERFORM temp_excel_get USING sy-repid. ELSE. IF NOT p_file IS INITIAL. CLEAR: t_data[]. * 数据导入 PERFORM upload_material_data. PERFORM get_data_pd. * FIELDCAT PERFORM build_fieldcatalog. * LAYOUT PERFORM build_layout. * ALV展示 PERFORM display_alv_report. ELSE. MESSAGE '请输入文件路径!' TYPE '@5B@' DISPLAY LIKE '@5C@'. LEAVE LIST-PROCESSING. ENDIF. ENDIF. *&---------------------------------------------------------------------* *& 包含 ZMMR0003_FORM *&---------------------------------------------------------------------* FORM temp_excel_get USING p_objid TYPE wwwdata-objid. "-----检查系统是否纯在模板 DATA: lv_objname TYPE wwwdata-objid. DATA: ls_objdata TYPE wwwdatatab. DATA:lv_ret TYPE abap_bool, lv_answer. "-----弹出选择存放的路径. DATA: lv_window_title TYPE string VALUE '文件下载', lv_default_extension TYPE string VALUE 'XLS', "缺省文件类型 lv_default_file_name TYPE string, lv_file_filter TYPE string VALUE 'EXCEL 文件 (*.XLS)|*.XLS|EXCEL 文件 (*.XLSX)|*.XLSX|所有文件 (*.*)|*.*|', lv_filename TYPE string, lv_path TYPE string, lv_fullpath TYPE string, lv_user_action TYPE i. DATA: lv_key TYPE wwwdatatab, lv_destination TYPE rlgrap-filename, lv_rc TYPE i, lv_temp TYPE c. "****---------------------------------------------- CLEAR:ls_objdata. *从SAP服务器中下载EXCEL模板 SELECT SINGLE relid objid text FROM wwwdata "存对象模板的表 INTO CORRESPONDING FIELDS OF ls_objdata WHERE srtf2 = 0 AND relid = 'MI' "有三种类型 HT MI IT AND objid = p_objid. "MONTLYSTOCK IF sy-subrc <> 0. MESSAGE 'EXCEL 模板不存在,请用TCODE:SMW0进行加载' TYPE '@5C@'. RETURN. ENDIF. IF ls_objdata-objid = space . MESSAGE 'EXCEL 模板不存在,请用TCODE:SMW0进行加载' TYPE '@5C@'. RETURN. ENDIF. lv_default_file_name = ls_objdata-text && sy-datum && '.XLS'."模板名称=系统中模板描述 "---检查模板是否存在 CALL METHOD cl_gui_frontend_services=>file_exist EXPORTING file = lv_default_file_name RECEIVING result = lv_ret EXCEPTIONS cntl_error = 1 error_no_gui = 2 wrong_parameter = 3 not_supported_by_gui = 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. EXIT. ENDIF. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = lv_window_title default_extension = lv_default_extension default_file_name = lv_default_file_name file_filter = lv_file_filter CHANGING filename = lv_filename "获得用户输入文件名 path = lv_path "获得用户所选路径 fullpath = lv_fullpath "路径加文件名 user_action = lv_user_action EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 invalid_default_file_name = 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. ELSE. IF lv_user_action = ( cl_gui_frontend_services=>action_ok ). * 下载模板 SELECT SINGLE * INTO CORRESPONDING FIELDS OF lv_key FROM wwwdata WHERE objid = p_objid . lv_destination = lv_fullpath. CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING key = lv_key destination = lv_destination IMPORTING rc = lv_rc CHANGING temp = lv_temp. IF lv_rc <> 0. MESSAGE '下载EXCEL模板出错' TYPE '@5C@'. STOP. ENDIF. ELSE. MESSAGE '已取消选择下载文件!' TYPE '@5B@'. ENDIF. ENDIF. ENDFORM. " TEMP_EXCEL_GET FORM upload_material_data . DATA: lt_intern TYPE TABLE OF zalsmex_tabline, lw_intern TYPE zalsmex_tabline. DATA : ld_index TYPE i. FIELD-SYMBOLS: <fs>. *EXCEL导入 CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = p_file i_begin_col = 1 i_begin_row = 4 i_end_col = 26 i_end_row = 65535 TABLES intern = lt_intern EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE 'EXCEL数据导入失败!' TYPE '@5C@'. ENDIF. * 数据保存到内表 LOOP AT lt_intern INTO lw_intern. MOVE lw_intern-col TO ld_index. ASSIGN COMPONENT ld_index OF STRUCTURE w_data TO <fs>. MOVE lw_intern-value TO <fs>. AT END OF row. APPEND w_data TO t_data. CLEAR w_data. ENDAT. ENDLOOP. LOOP AT t_data ASSIGNING FIELD-SYMBOL(<fs_t_data>). MOVE-CORRESPONDING <fs_t_data> TO ls_data2. APPEND ls_data2 TO l_data2. ENDLOOP. t_data_dl[] = l_data2[]. SORT t_data_dl BY zxh. DELETE ADJACENT DUPLICATES FROM t_data_dl COMPARING zxh. ENDFORM. FORM select_path . DATA v_matnr LIKE rlgrap-filename. CALL FUNCTION 'WS_FILENAME_GET' EXPORTING mask = ',*.* ,*.*.' mode = 'O' title = '请选择要上传的信息文件' IMPORTING filename = v_matnr EXCEPTIONS inv_winsys = 1 no_batch = 2 selection_cancel = 3 selection_error = 4 OTHERS = 5. p_file = v_matnr. ENDFORM. " SELECT_PATH FORM build_fieldcatalog. CLEAR: fieldcatalog. DEFINE build_fieldcat. fieldcatalog-fieldname = &1. fieldcatalog-seltext_m = &2. fieldcatalog-outputlen = &3. IF fieldcatalog-fieldname = 'LIGHT'. fieldcatalog-key = 'X'. ENDIF. IF fieldcatalog-fieldname = 'MESSAGE'. fieldcatalog-emphasize = 'X'. fieldcatalog-key = 'X'. ENDIF. IF fieldcatalog-fieldname = 'EBELN'. fieldcatalog-key = 'X'. ENDIF. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. END-OF-DEFINITION. build_fieldcat 'ZXH' '序号' 10. build_fieldcat 'BSART' '计划协议类型' 10. build_fieldcat 'EBELN' '协议编号' 4. build_fieldcat 'BUKRS' '公司代码' 1. * build_fieldcat 'BSTYP' '凭证类别' 10. build_fieldcat 'LIFNR' '供应商' 4. build_fieldcat 'WAERS' '货币' 5. build_fieldcat 'EKORG' '采购组织' 4. build_fieldcat 'EKGRP' '采购组' 8. build_fieldcat 'KDATB' '有效起始日期' 8. build_fieldcat 'KDATE' '有效截至日期' 8. build_fieldcat 'AEDAT' '协议日期' 8. build_fieldcat 'UNSEZ' '我方参考' 8. * build_fieldcat 'EBELP' '行项目' 3. build_fieldcat 'PSTYP' '项目类别' 1. build_fieldcat 'EMATN' '物料编码' 40. build_fieldcat 'TXZ01' '短文本' 40. build_fieldcat 'KTMNG' '目标数量' 28. build_fieldcat 'MEINS' '订单单位' 3. build_fieldcat 'NETPR' '净价' 9. build_fieldcat 'PEINH' '价格单位' 4. build_fieldcat 'BPRME' '订单价格单位(采购)' 3. build_fieldcat 'WERKS' '工厂' 4. build_fieldcat 'LGORT' '库存地点' 4. * build_fieldcat 'BSTAE' '确认控制' 4. build_fieldcat 'UEBTK' '无限制过量交货' 1. build_fieldcat 'ETFZ1' '确定域' 3. build_fieldcat 'ETFZ2' '平衡域' 3. build_fieldcat 'KZSTU' '捆绑在MRP' 1. * build_fieldcat 'KZSTU' '捆绑在MRP' 1. build_fieldcat 'LIGHT' '执行情况' 1. build_fieldcat 'MESSAGE' '消息' 1. ENDFORM. "BUILD_FIELDCATALOG *&---------------------------------------------------------------------* *& FORM BUILD_LAYOUT *&---------------------------------------------------------------------* * LAYOUT *----------------------------------------------------------------------* FORM build_layout. gd_layout-colwidth_optimize = 'X'. gd_layout-zebra = 'X'. gd_layout-header_text = '库存期初批导'. ENDFORM. "BUILD_LAYOUT *&---------------------------------------------------------------------* *& FORM DISPLAY_ALV_REPORT *&---------------------------------------------------------------------* * ALV 展示 *----------------------------------------------------------------------* FORM display_alv_report. gd_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = gd_repid i_callback_pf_status_set = 'ALV_STATUS_SET' i_callback_user_command = 'FRM_USER_COMMAND' is_layout = gd_layout it_fieldcat = fieldcatalog[] i_save = 'A' TABLES t_outtab = l_data2[] EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. "DISPLAY_ALV_REPORT FORM alv_status_set USING rt_extab TYPE slis_t_extab. SET PF-STATUS 'ZALV_STATUS' . ENDFORM. FORM frm_user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. "实时更新内表数据 DATA:ref_grid TYPE REF TO cl_gui_alv_grid. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = ref_grid. " 获取全局变量 CALL METHOD ref_grid->check_changed_data. " 获取响应事件 rs_selfield-refresh = 'X'. CASE r_ucomm. WHEN 'ZXZ'. PERFORM set_alv_data. ENDCASE. "刷新ALV CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = ref_grid. " 获取全局变量 CALL METHOD ref_grid->check_changed_data. " 获取响应事件 rs_selfield-refresh = 'X'. ENDFORM. FORM set_alv_data. TYPES: BEGIN OF ty_header, line(50) TYPE c, END OF ty_header. DATA: lv_filename TYPE string, lv_path TYPE string, lv_fullpath TYPE string, lv_destination LIKE rlgrap-filename, ls_objdata LIKE wwwdatatab, lv_objid TYPE wwwdatatab-objid, lv_fname TYPE string. DATA: lt_header TYPE STANDARD TABLE OF ty_header, " 内表 ls_header LIKE LINE OF lt_header. " 结构体 LOOP AT fieldcatalog ASSIGNING FIELD-SYMBOL(<fs_cat>). ls_header-line = <fs_cat>-seltext_m. APPEND ls_header TO lt_header. ENDLOOP. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING default_file_name = lv_fname window_title = '另存为:' default_extension = 'xls' "默认保存的类型 file_filter = '.xls' "选择要另存的文件类型 CHANGING filename = lv_filename path = lv_path fullpath = lv_fullpath EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. CALL FUNCTION 'GUI_DOWNLOAD' " 使用GUI_DOWNLOAD函数将内表数据导入到Excel文件中 EXPORTING filename = lv_filename filetype = 'DAT' TABLES data_tab = t_data fieldnames = lt_header EXCEPTIONS file_write_error = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5 unknown_error = 6 header_not_allowed = 7 separator_not_allowed = 8 filesize_not_allowed = 9 header_too_long = 10 dp_error_create = 11 dp_error_send = 12 dp_error_write = 13 unknown_dp_error = 14 access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 OTHERS = 22. ENDFORM. FORM get_file_name USING p_extension p_file_filter CHANGING p_fullpath. DATA: l_filename TYPE string, l_path TYPE string, l_fullpath TYPE string, l_titile TYPE string, l_init_dir TYPE string. CLEAR p_fullpath. l_titile = '采购计划协议批导'. l_init_dir = TEXT-t03. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = l_titile default_extension = '.XLSX' initial_directory = l_init_dir prompt_on_overwrite = 'X' file_filter = p_file_filter CHANGING filename = l_filename path = l_path fullpath = l_fullpath EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. p_fullpath = l_fullpath. ENDFORM. "GET_FILE_NAME FORM get_data_pd . DATA: ls_header TYPE bapimeoutheader, ls_headerx TYPE bapimeoutheaderx, ls_item TYPE bapimeoutitem, lt_item TYPE bapimeout_t_item, ls_itemx TYPE bapimeoutitemx, lt_itemx TYPE bapimeout_t_itemx, ls_item_con TYPE bapimeoutcondition, lt_item_con TYPE TABLE OF bapimeoutcondition, ls_item_conx TYPE bapimeoutconditionx, lt_item_conx TYPE TABLE OF bapimeoutconditionx, lt_validity TYPE TABLE OF bapimeoutvalidity, "条件的有效期间 ls_validity TYPE bapimeoutvalidity, lt_validityx TYPE TABLE OF bapimeoutvalidityx, "更改参数 - 条件的有效期间 ls_validityx TYPE bapimeoutvalidityx, ls_schedule TYPE bapimeoutschedule, lt_schedule TYPE bapimeout_t_schedule, ls_schedulex TYPE bapimeoutschedulex, lt_schedulex TYPE bapimeout_t_schedulex, l_ebeln TYPE bapimeoutheader-number, lt_return TYPE bapiret2_t, ls_return TYPE bapiret2. LOOP AT t_data_dl ASSIGNING FIELD-SYMBOL(<fs_dl>). ls_header-vendor = |{ <fs_dl>-lifnr ALPHA = IN } |."供应商 ls_header-number = <fs_dl>-ebeln. "采购凭证编号 ls_header-doc_type = <fs_dl>-bsart. "计划协议类型 ls_header-comp_code = <fs_dl>-bukrs. "公司代码 ls_header-purch_org = <fs_dl>-ekorg. "采购组织 ls_header-pur_group = <fs_dl>-ekgrp. "采购组 ls_header-vper_start = <fs_dl>-kdatb. "有效起始日期 ls_header-vper_end = <fs_dl>-kdate. "有效截至日期 ls_header-doc_date = <fs_dl>-aedat. "采购凭证日期 ls_header-our_ref = <fs_dl>-unsez. "我方参考 IF <fs_dl>-waers IS INITIAL. SELECT SINGLE lifnr,ekorg,waers FROM lfm1 INTO @DATA(ls_lfmi) WHERE lifnr = @<fs_dl>-lifnr. IF sy-subrc = 0. ls_header-currency = ls_lfmi-waers. "货币 ENDIF. ELSE. ls_header-currency = <fs_dl>-waers. "货币 ENDIF. ls_headerx-vendor = 'X'. "供应商 ls_headerx-doc_type = <fs_dl>-bsart. "公司代码 ls_headerx-number = 'X'. "采购凭证编号 ls_headerx-comp_code = 'X'. "公司代码 * ls_headerx-doc_type = 'X'. "采购凭证类型 ls_headerx-purch_org = 'X'. "采购组织 ls_headerx-pur_group = 'X'. "采购组 ls_headerx-vper_start = 'X'. "有效起始日期 ls_headerx-vper_end = 'X'. "有效截至日期 ls_headerx-doc_date = 'X'. "采购凭证日期 ls_headerx-our_ref = 'X'. "我方参考 ls_headerx-currency = 'X'. "货币 CLEAR: lt_item[],lt_itemx[],lt_schedule[],lt_schedulex[],ls_item_con,lt_item_con[]. CLEAR:lt_validityx,lt_validity. CLEAR: ls_item,ls_itemx. CLEAR: lv_c1, lv_n1,lv_ebelp. LOOP AT l_data2 ASSIGNING FIELD-SYMBOL(<fs_data2>) WHERE zxh = <fs_dl>-zxh. SELECT SINGLE matnr ,spras,maktx FROM makt INTO @DATA(ls_makt) WHERE matnr = @<fs_data2>-ematn AND spras = '1'. lv_ebelp = lv_ebelp + 10. "项目类别 ls_item-item_no = lv_ebelp. * IF sy-subrc = 0. lv_c1 = lv_c1 + 1. lv_n1 = lv_n1 + 1. CLEAR:ls_item_con,ls_item_conx. ls_item_con-item_no = lv_ebelp. ls_item_con-serial_id = lv_c1. ls_item_con-cond_count = lv_n1."'01'. ls_item_con-cond_type = 'PB00'. ls_item_con-cond_value = <fs_data2>-netpr."净价 ls_item_con-currency = ls_lfmi-waers."'RMB'."货币码 ls_item_con-cond_unit = <fs_data2>-meins."'EA'. ls_item_con-cond_p_unt = 1. ls_item_con-calctypcon = 'C'. APPEND ls_item_con TO lt_item_con. ls_item_conx-item_no = lv_ebelp. ls_item_conx-serial_id = lv_c1. ls_item_conx-cond_count = lv_n1."'01'. ls_item_conx-item_nox = 'X'. ls_item_conx-serial_idx = 'X'. ls_item_conx-cond_countx = 'X'. ls_item_conx-cond_type = 'X'. ls_item_conx-cond_value = 'X'. ls_item_conx-currency = 'X'. ls_item_conx-cond_unit = 'X'. ls_item_conx-cond_p_unt = 'X'. ls_item_conx-calctypcon = 'X'. APPEND ls_item_conx TO lt_item_conx. CLEAR:ls_validity,ls_validityx. ls_validity-item_no = lv_ebelp. ls_validity-serial_id = lv_c1. ls_validity-valid_from = <fs_dl>-kdatb. ls_validity-valid_to = <fs_dl>-kdate. APPEND ls_validity TO lt_validity. ls_validityx-item_no = lv_ebelp. ls_validityx-serial_id = lv_c1. ls_validityx-valid_from = 'X'. ls_validityx-valid_to = 'X'. APPEND ls_validityx TO lt_validityx. * ENDIF. ls_item-ematerial_long = <fs_data2>-ematn. "物料编号 ls_item-plant = <fs_data2>-werks. "工厂 ls_item-stge_loc = <fs_data2>-lgort. "存储地点 ls_item-net_price = <fs_data2>-netpr. "净价 ls_item-po_unit = <fs_data2>-meins. "采购订单计量单位 ls_item-short_text = ls_makt-maktx. "短文本 ls_item-target_qty = <fs_data2>-ktmng. "目标数量 ls_item-price_unit = <fs_data2>-peinh. "价格单位 ls_item-orderpr_un = <fs_data2>-bprme. "订单价格单位(采购) * ls_item-matl_group = <fs_data2>-matkl. "物料组 ls_item-item_cat = <fs_data2>-pstyp. "物料组 ls_item-conf_ctrl = '0001'. "确认控制 ls_item-unlimited_dlv = <fs_data2>-uebtk. "无限制过量交货 ls_item-firm_zone = <fs_data2>-etfz1. "确定的域 ls_item-trade_off = <fs_data2>-etfz2. "平衡区域 ls_item-binding_mrp = <fs_data2>-kzstu. "捆绑在MRP. * ls_item-delete_ind = <fs_input>-loekz. "删除标识. ls_item-info_upd = 'C'. "删除标识. APPEND ls_item TO lt_item. ls_itemx-item_no = lv_ebelp. "项目类别 ls_itemx-item_nox = 'X'. " ls_itemx-ematerial_long = 'X'. "物料编号 ls_itemx-plant = 'X'. "工厂 ls_itemx-stge_loc = 'X'. "存储地点 ls_itemx-net_price = 'X'. "净价 ls_itemx-po_unit = 'X'. "采购订单计量单位 ls_itemx-short_text = 'X'. "短文本 ls_itemx-target_qty = 'X'. "目标数量 ls_itemx-price_unit = 'X'. "价格单位 ls_itemx-orderpr_un = 'X'. "订单价格单位(采购) * ls_itemx-matl_group = 'X'. "物料组 ls_itemx-item_cat = 'X'. "采购凭证中的项目类别 ls_itemx-conf_ctrl = 'X'. "确认控制 ls_itemx-unlimited_dlv = 'X'. "无限制过量交货 ls_itemx-firm_zone = 'X'. "确定的域 ls_itemx-trade_off = 'X'. "平衡区域 ls_itemx-binding_mrp = 'X'. "捆绑在MRP. * ls_itemx-delete_ind = 'X'. "删除标识 ls_itemx-info_upd = 'X'. "删除标识 APPEND ls_itemx TO lt_itemx. ENDLOOP. IF <fs_dl>-ebeln IS INITIAL. IF l_data2-light NE '@5C@'. CALL FUNCTION 'BAPI_SAG_CREATE' EXPORTING header = ls_header headerx = ls_headerx IMPORTING purchasingdocument = l_ebeln TABLES return = lt_return item = lt_item itemx = lt_itemx item_cond_validity = lt_validity item_cond_validityx = lt_validityx item_condition = lt_item_con item_conditionx = lt_item_conx. ELSE. <fs_dl>-light = l_data2-light. <fs_dl>-message = l_data2-message. <fs_dl>-unsez = l_ebeln. ENDIF. ELSE. CALL FUNCTION 'BAPI_SAG_CHANGE' EXPORTING purchasingdocument = <fs_dl>-ebeln header = ls_header headerx = ls_headerx TABLES return = lt_return item = lt_item itemx = lt_itemx item_cond_validity = lt_validity item_cond_validityx = lt_validityx item_condition = lt_item_con item_conditionx = lt_item_conx. ENDIF. LOOP AT lt_return INTO ls_return WHERE type CA 'EA'. IF <fs_dl>-message IS INITIAL. <fs_dl>-message = ls_return-message. ELSE. <fs_dl>-message = |{ l_data2-message },{ ls_return-message }|. ENDIF. ENDLOOP. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. <fs_dl>-light = '@5C@'. ELSE. LOOP AT lt_return INTO ls_return . IF ls_return-type = 'S'. <fs_dl>-message = ls_return-message. ENDIF. ENDLOOP. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true. <fs_dl>-light = '@5B@'. <fs_dl>-unsez = l_ebeln. ENDIF. CLEAR: ls_header,ls_headerx,l_ebeln,lt_return[],lt_item[],lt_itemx[],lt_validity[],lt_validityx[],lt_item_con[],lt_item_conx. ENDLOOP. SORT t_data_dl BY zxh. LOOP AT l_data2 ASSIGNING FIELD-SYMBOL(<fs_data>). READ TABLE t_data_dl INTO DATA(ls_data_dl) WITH KEY zxh = <fs_data>-zxh BINARY SEARCH. IF sy-subrc = 0. <fs_data>-unsez = ls_data_dl-unsez. <fs_data>-light = ls_data_dl-light. <fs_data>-message = ls_data_dl-message. ENDIF. ENDLOOP. ENDFORM.此代码中价格单位维护1000 但是me33l前台显示1 为什么 怎么解决
最新发布
09-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

添柴程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值