***********************************************************************
* Report : YTST_RAINY_MM2 *
* Application : MM   *
* Subject : PO list *
* Requested by : Rainy *
* Execution : Online when required *
* Ref no: : *
* Author : *
* Req Date : 20140722 *
***********************************************************************
*     采购单审批信息查询 *
***********************************************************************
*     设计主要逻辑与原理说明 *
***********************************************************************
*1.取数:根据用户的输入单据编号、交货单类型、计划发货日期、实际发货日期*
* *
***********************************************************************
* MODIFICATIONS *
* ------------------------------------------------------------------- *
* REL DATE NAME (COMPANY) DESCRIPTION TASK-NO *
* --- ---- ---- --------- ----------- ------- *
***********************************************************************
REPORT YMM3 NO STANDARD PAGE HEADING MESSAGE-ID Z001. *----------------------------------------------------------------------
* TYPE-POOLS
*----------------------------------------------------------------------
TYPE-POOLS: SLIS. "ALV TABLES:EKKO,
EKPO,
LFA1,
MAKT. *&------------------------------------------------------------------*
*& Internal Table Definition
*&------------------------------------------------------------------*
*&3000000004
DATA:BEGIN OF GT_ALL OCCURS 0,
EBELN LIKE EKKO-EBELN,"SAP-PO
LIFNR LIKE EKKO-LIFNR,"SAP廠商編號
WAERS LIKE EKKO-WAERS,"交易幣別
* TXJCD LIKE EKKO-TXJCD,"交易稅別
STCEG LIKE EKKO-STCEG,"交易税别
EBELP LIKE EKPO-EBELP, "项目号
MATNR LIKE EKPO-MATNR, "材料编号
MENGE LIKE EKPO-MENGE, "訂購數量
NETPR LIKE EKPO-NETPR, "单价
KZWI LIKE EKPO-KZWI5, "金额
PLIFZ LIKE EKPO-PLIFZ, "預定交期 NAME1 LIKE LFA1-NAME1,"廠商簡稱
TELF1 LIKE LFA1-TELF1,"公司電話
TELFX LIKE LFA1-TELFX,"公司傳真
NAME2 LIKE LFA1-NAME2,"聯絡人
SPERZ LIKE LFA1-SPERZ,"付款方式 (付款冻结)
ADRNR LIKE LFA1-ADRNR,"联系地址
YUNSW TYPE STRING, "运送方式
TEXT(100) TYPE C, "抬头備註 MAKTX LIKE MAKT-MAKTX, "材料规格
MEINS LIKE MARA-MEINS, "单位 TEXTL(100) TYPE C, "项目備註
SEL TYPE C,
LIN TYPE I, END OF GT_ALL. *PO list
DATA:BEGIN OF GT_PO OCCURS 0,
LIFNR LIKE EKKO-LIFNR,"SAP廠商編號
NAME1 LIKE LFA1-NAME1,"廠商簡稱
EBELN LIKE EKKO-EBELN,"SAP-PO
TELF1 LIKE LFA1-TELF1,"公司電話
TELFX LIKE LFA1-TELFX,"公司傳真
NAME2 LIKE LFA1-NAME2,"聯絡人
WAERS LIKE EKKO-WAERS,"交易幣別
SPERZ LIKE LFA1-SPERZ,"付款方式 (付款冻结)
* TXJCD LIKE EKPO-TXJCD,"交易稅別
STCEG LIKE EKKO-STCEG,"交易税别
YUNSW TYPE STRING, "运送方式
ADRNR LIKE LFA1-ADRNR,"联系地址
TEXT(100) TYPE C, "抬头備註
*&add
EBELP LIKE EKPO-EBELP, "项目号
MATNR LIKE EKPO-MATNR, "材料编号
MAKTX LIKE MAKT-MAKTX, "材料规格
MEINS LIKE MARA-MEINS, "单位
MENGE LIKE EKPO-MENGE, "訂購數量
NETPR LIKE EKPO-NETPR, "单价
KZWI LIKE EKPO-KZWI5, "金额
PLIFZ LIKE EKPO-PLIFZ, "預定交期
TEXTL(100) TYPE C, "项目備註
SEL TYPE C,
LIN TYPE I,
END OF GT_PO. TYPES:BEGIN OF TY_ITEM,
EBELP LIKE EKPO-EBELP, "项目号
MATNR LIKE EKPO-MATNR, "材料编号
MAKTX LIKE MAKT-MAKTX, "材料规格
MEINS LIKE MARA-MEINS, "单位
MENGE LIKE EKPO-MENGE, "訂購數量
NETPR LIKE EKPO-NETPR, "单价
KZWI LIKE EKPO-KZWI5, "金额
PLIFZ LIKE EKPO-PLIFZ, "預定交期
TEXTL(100) TYPE C, "项目備註S
END OF TY_ITEM.
TYPES:IT_ITEM TYPE STANDARD TABLE OF TY_ITEM WITH DEFAULT KEY.
DATA: IT_LINE TYPE STANDARD TABLE OF TY_ITEM WITH HEADER LINE,
WA_LINE1 LIKE IT_LINE. TYPES:BEGIN OF TY_PO,
LIFNR LIKE EKKO-LIFNR,"SAP廠商編號
NAME1 LIKE LFA1-NAME1,"廠商簡稱
EBELN LIKE EKKO-EBELN,"SAP-PO
TELF1 LIKE LFA1-TELF1,"公司電話
TELFX LIKE LFA1-TELFX,"公司傳真
NAME2 LIKE LFA1-NAME2,"聯絡人
WAERS LIKE EKKO-WAERS,"交易幣別
SPERZ LIKE LFA1-SPERZ,"付款方式 (付款冻结)
* TXJCD LIKE EKPO-TXJCD,"交易稅別
STCEG LIKE EKKO-STCEG,"交易税别
YUNSW TYPE STRING, "运送方式
ADRNR LIKE LFA1-ADRNR,"联系地址
TEXT(100) TYPE C, "抬头備註
ITEM TYPE IT_ITEM,
END OF TY_PO.
DATA:IT_PO TYPE STANDARD TABLE OF TY_PO WITH HEADER LINE,
WA_PO LIKE IT_PO.
DATA:TMP_EBELN LIKE EKKO-EBELN. TYPES:BEGIN OF TY_HEAD,
LIFNR LIKE EKKO-LIFNR,"SAP廠商編號
NAME1 LIKE LFA1-NAME1,"廠商簡稱
EBELN LIKE EKKO-EBELN,"SAP-PO
TELF1 LIKE LFA1-TELF1,"公司電話
TELFX LIKE LFA1-TELFX,"公司傳真
NAME2 LIKE LFA1-NAME2,"聯絡人
WAERS LIKE EKKO-WAERS,"交易幣別
SPERZ LIKE LFA1-SPERZ,"付款方式 (付款冻结)
* TXJCD LIKE EKPO-TXJCD,"交易稅別
STCEG LIKE EKKO-STCEG,"交易税别
YUNSW TYPE STRING, "运送方式
ADRNR LIKE LFA1-ADRNR,"联系地址
TEXT(100) TYPE C, "抬头備註
END OF TY_HEAD.
DATA:IT_HEAD TYPE STANDARD TABLE OF TY_HEAD WITH HEADER LINE. DATA:BEGIN OF TT_HEAD, LIFN1 TYPE STRING VALUE 'field1',
LIFN2 TYPE STRING VALUE 'LIFNR',
LIFN3 TYPE STRING VALUE 'SAP廠商編號',
LIFNR LIKE EKKO-LIFNR,"SAP廠商編號
NAM1 TYPE STRING VALUE 'field3',
NAM2 TYPE STRING VALUE 'NAME1',
NAM3 TYPE STRING VALUE '廠商簡稱',
NAME1 LIKE LFA1-NAME1,"廠商簡稱
EBEL1 TYPE STRING VALUE 'field6',
EBEL2 TYPE STRING VALUE 'EBELN',
EBEL3 TYPE STRING VALUE 'SAP-PO',
EBELN LIKE EKKO-EBELN,"SAP-PO
TEL1 TYPE STRING VALUE 'field5',
TEL2 TYPE STRING VALUE 'TELF1',
TEL3 TYPE STRING VALUE '公司電話',
TELF1 LIKE LFA1-TELF1,"公司電話
TEF1 TYPE STRING VALUE 'field7',
TEF2 TYPE STRING VALUE 'TELFX',
TEF3 TYPE STRING VALUE '公司傳真',
TELFX LIKE LFA1-TELFX,"公司傳真
NAM6 TYPE STRING VALUE 'field8',
NAM7 TYPE STRING VALUE 'NAME2',
NAM8 TYPE STRING VALUE '聯絡人',
NAME2 LIKE LFA1-NAME2,"聯絡人 WAER1 TYPE STRING VALUE 'field9',
WAER2 TYPE STRING VALUE 'WAERS',
WAER3 TYPE STRING VALUE '交易幣別',
WAERS LIKE EKKO-WAERS,"交易幣別 SPER1 TYPE STRING VALUE 'field10',
SPER2 TYPE STRING VALUE 'SPER3',
SPER3 TYPE STRING VALUE '付款方式',
SPERZ LIKE LFA1-SPERZ,"付款方式 (付款冻结)
* TXJCD LIKE EKPO-TXJCD,"交易稅別
STCE1 TYPE STRING VALUE 'field11',
STCE2 TYPE STRING VALUE 'STCEG',
STCE3 TYPE STRING VALUE '交易稅別',
STCEG LIKE EKKO-STCEG,"交易税别 YUNS1 TYPE STRING VALUE 'field12',
YUNS2 TYPE STRING VALUE 'YUNSW',
YUNS3 TYPE STRING VALUE '運送方式',
YUNSW TYPE STRING, "运送方式 ADRN1 TYPE STRING VALUE 'field13',
ADRN2 TYPE STRING VALUE 'ADRNR',
ADRN3 TYPE STRING VALUE '聯繫地址',
ADRNR LIKE LFA1-ADRNR,"联系地址 TEXT1 TYPE STRING VALUE 'field14',
TEXT2 TYPE STRING VALUE 'TEXT',
TEXT3 TYPE STRING VALUE '備註',
TEXT(100) TYPE C, "抬头備註 *&附件
FJIAN1 TYPE STRING,
FJIAN2 TYPE STRING,
FJIAN3 TYPE STRING,
FJIAN4 TYPE STRING,
*&BPM固定格式抬头部分信息
ID TYPE STRING,
APP TYPE STRING,
START TYPE STRING,
FINISH TYPE STRING,
DATE TYPE STRING, END OF TT_HEAD.
DATA:ST_HEAD LIKE TABLE OF TT_HEAD,
WA_HEAD LIKE LINE OF ST_HEAD. DATA:BEGIN OF TT_LINE, EBEL1 TYPE STRING VALUE 'field99',
EBEL2 TYPE STRING VALUE 'EBELP',
EBEL3 TYPE STRING VALUE '项目',
EBELP LIKE EKPO-EBELP, "项目号 MATN1 TYPE STRING VALUE 'field1',
MATN2 TYPE STRING VALUE 'MATNR',
MATN3 TYPE STRING VALUE '材料編碼',
MATNR LIKE EKPO-MATNR, "材料编号 MAKT1 TYPE STRING VALUE 'field2',
MAKT2 TYPE STRING VALUE 'MAKTX',
MAKT3 TYPE STRING VALUE '材料規格',
MAKTX LIKE MAKT-MAKTX, "材料规格 MEIN1 TYPE STRING VALUE 'field3',
MEIN2 TYPE STRING VALUE 'MEINS',
MEIN3 TYPE STRING VALUE '單位',
MEINS LIKE MARA-MEINS, "单位 MENG1 TYPE STRING VALUE 'field4',
MENG2 TYPE STRING VALUE 'MENGE',
MENG3 TYPE STRING VALUE '訂購數量',
MENGE LIKE EKPO-MENGE, "訂購數量 NETP1 TYPE STRING VALUE 'field5',
NETP2 TYPE STRING VALUE 'NETPR',
NETP3 TYPE STRING VALUE '单价',
NETPR LIKE EKPO-NETPR, "单价 KZWI1 TYPE STRING VALUE 'field6',
KZWI2 TYPE STRING VALUE 'KZWI',
KZWI3 TYPE STRING VALUE '金额',
KZWI LIKE EKPO-KZWI5, "金额 PLIF1 TYPE STRING VALUE 'field7',
PLIF2 TYPE STRING VALUE 'PLIFZ',
PLIF3 TYPE STRING VALUE '預定交期',
PLIFZ LIKE EKPO-PLIFZ, "預定交期 TET1 TYPE STRING VALUE 'field8',
TET2 TYPE STRING VALUE 'TEXTL',
TET3 TYPE STRING VALUE '项目備註',
TEXTL(100) TYPE C, "项目備註S END OF TT_LINE.
DATA:ST_LINE LIKE TABLE OF TT_LINE,
WA_LINE LIKE LINE OF ST_LINE. *&item data
DATA:BEGIN OF GT_ITEM OCCURS 0,
EBELP LIKE EKPO-EBELP, "项目号
MATNR LIKE EKPO-MATNR, "材料编号
MAKTX LIKE MAKT-MAKTX, "材料规格
MEINS LIKE MARA-MEINS, "单位
MENGE LIKE EKPO-MENGE, "訂購數量
NETPR LIKE EKPO-NETPR, "单价
KZWI LIKE EKPO-KZWI5, "金额
PLIFZ LIKE EKPO-PLIFZ, "預定交期
TEXTL(100) TYPE C, "项目備註
END OF GT_ITEM. *&for XML
TYPES: BEGIN OF XML_LINE,
DATA(256) TYPE X,
END OF XML_LINE.
DATA: XML_TABLE TYPE TABLE OF XML_LINE,
IN_TABLE TYPE TABLE OF XML_LINE,
WA_TABLE LIKE LINE OF IN_TABLE,
XML_SIZE TYPE I.
DATA:BEGIN OF GT_FILES OCCURS 0,
HEAD TYPE STRING,
ITEM TYPE STRING,
END OF GT_FILES. DATA: L_RVAL TYPE I.
DATA: STR TYPE STRING .
DATA: TMPEBELN LIKE EKKO-EBELN.
DATA: L_IXML TYPE REF TO IF_IXML,
L_ENCODING TYPE REF TO IF_IXML_ENCODING,
L_COMMENT TYPE REF TO IF_IXML_COMMENT,
L_DOC TYPE REF TO IF_IXML_DOCUMENT,
L_ROOT TYPE REF TO IF_IXML_ELEMENT,
L_PO TYPE REF TO IF_IXML_ELEMENT,
L_POHEAD TYPE REF TO IF_IXML_ELEMENT,
L_ITEM TYPE REF TO IF_IXML_ELEMENT,
L_ELEMENT TYPE REF TO IF_IXML_ELEMENT,
L_ATTRIBUTE TYPE REF TO IF_IXML_ATTRIBUTE,
L_OSTREAM TYPE REF TO IF_IXML_OSTREAM,
L_FACTORY TYPE REF TO IF_IXML_STREAM_FACTORY. *&Variant
DATA:G_LEN TYPE I.
DATA:S_SFILE LIKE RLGRAP-FILENAME. DATA: W_XML TYPE STRING,
W_LEN TYPE I,
XML_STRING TYPE STRING.
DATA:BEGIN OF IT_XML OCCURS 0,
LINE(100) TYPE C,
END OF IT_XML.
DATA:RESULT_XML TYPE STANDARD TABLE OF SMUM_XMLTB,
RETURN TYPE STANDARD TABLE OF BAPIRET2,
WA_XML TYPE SMUM_XMLTB. *&------------------------------------------------------------------*
*& Global Variants Definition
*&------------------------------------------------------------------*
*DATA:GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
* GS_FIELDCAT TYPE LINE OF SLIS_T_FIELDCAT_ALV.
*&------------------------------------------------------------------*
*& ALV
*&------------------------------------------------------------------*
DATA:LS_LAYOUT TYPE SLIS_LAYOUT_ALV,
LV_TITLE TYPE LVC_TITLE.
DATA:G_PROGRAM TYPE SY-REPID,
GW_LAYOUT TYPE SLIS_LAYOUT_ALV,
GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
GT_EVENT TYPE SLIS_T_EVENT,
WA_EVENT TYPE SLIS_ALV_EVENT. ************************************************************************
* Select Screen *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME. SELECT-OPTIONS:S_EBELN FOR EKPO-EBELN OBLIGATORY,
S_LIFNR FOR LFA1-LIFNR. SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME. PARAMETERS:P_BD AS CHECKBOX DEFAULT 'X',
P_FW AS CHECKBOX,
P_FILE TYPE STRING DEFAULT 'C:\Users\ThinkPad\Desktop\生成文件\xml\'. "NO-DISPLAY."RLGRAP-FILENAME. PARAMETERS:P_SFILE LIKE RLGRAP-FILENAME DEFAULT '/tmp/job/in/',
P_SFILE1 TYPE RLGRAP-FILENAME DEFAULT '/tmp/job/return/'. SELECTION-SCREEN END OF BLOCK BLK2. SELECTION-SCREEN END OF BLOCK BLK1. AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
*& 选择文件F4
PERFORM FRM_FILE_OPEN_DIALOG CHANGING P_FILE. INITIALIZATION. AT SELECTION-SCREEN.
* LOOP AT S_EKGRP WHERE SIGN = 'I'.
* IF S_EKGRP-LOW(1) = 'P' OR S_EKGRP-HIGH(1) = 'P'.
* MESSAGE E011 WITH '此输入不合条件。'.
* ENDIF.
* ENDLOOP. START-OF-SELECTION.
*&查询
PERFORM FRM_GET_DATA. IF P_BD EQ 'X'.
*&显示
PERFORM FRM_ALV_DISPLAY.
ELSE.
PERFORM FRM_DOWN_XML.
ENDIF. END-OF-SELECTION. *&---------------------------------------------------------------------*
*& Form FRM_FILE_OPEN_DIALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_P_FILE text
*----------------------------------------------------------------------*
FORM FRM_FILE_OPEN_DIALOG CHANGING P_FILE TYPE STRING. DATA: LT_FILE TYPE TABLE OF FILE_TABLE,
LS_FILE TYPE FILE_TABLE.
DATA: LV_RC TYPE I,
LV_TITLE TYPE STRING. LV_TITLE = SY-TITLE. *& 文件的F4
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = LV_TITLE
FILE_FILTER = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
CHANGING
FILE_TABLE = LT_FILE
RC = LV_RC
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
*--open file failed, show error message
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
*--open file successful, get file name
READ TABLE LT_FILE INTO LS_FILE INDEX 1.
IF SY-SUBRC = 0 .
P_FILE = LS_FILE-FILENAME.
ENDIF.
ENDIF. ENDFORM. " FRM_FILE_OPEN_DIALOG *&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA . DATA:LT_LINE LIKE STANDARD TABLE OF TLINE,
LWA_LINE LIKE LINE OF LT_LINE,
LV_NAME LIKE THEAD-TDNAME,
L_JHTXT TYPE STRING.
*C~YUNSW *&取数据:
SELECT A~EBELN
A~LIFNR
A~WAERS
A~STCEG
B~EBELP
B~MATNR
B~MENGE
B~NETPR
B~KZWI5 AS KZWI
B~PLIFZ
C~NAME1
C~TELF1
C~TELFX
C~NAME2
C~SPERZ
C~ADRNR INTO CORRESPONDING FIELDS OF TABLE GT_PO
FROM EKKO AS A
JOIN EKPO AS B
ON A~EBELN EQ B~EBELN
JOIN LFA1 AS C
ON A~LIFNR EQ C~LIFNR
WHERE A~EBELN IN S_EBELN
AND A~LIFNR IN S_LIFNR. G_LEN = LINES( GT_PO[] ).
IF G_LEN EQ 0.
MESSAGE S001 WITH '找不到数据!'.
ENDIF. SORT GT_PO BY EBELN EBELP.
LOOP AT GT_PO.
GT_PO-LIN = SY-TABIX. * GT_PO-TEXT = 'PO head text'.
* GT_PO-TEXTL = 'PO_item text'. CLEAR LV_NAME.
MOVE GT_PO-EBELN TO LV_NAME.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = 'F01'
LANGUAGE = SY-LANGU
NAME = LV_NAME "GT_PO-EBELN
OBJECT = 'EKKO'
TABLES
LINES = LT_LINE
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8. LOOP AT LT_LINE INTO LWA_LINE.
SHIFT LWA_LINE-TDLINE LEFT DELETING LEADING ''.
CONCATENATE LWA_LINE-TDLINE L_JHTXT INTO GT_PO-TEXT."l_jhtxt.
ENDLOOP.
IF GT_PO-TEXT IS INITIAL.
GT_PO-TEXT = '抬头无备注'.
ENDIF. CLEAR LV_NAME.
CONCATENATE GT_PO-EBELN GT_PO-EBELP INTO LV_NAME. CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = 'F02'
LANGUAGE = SY-LANGU
NAME = LV_NAME
OBJECT = 'EKPO'
TABLES
LINES = LT_LINE
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8. LOOP AT LT_LINE INTO LWA_LINE.
SHIFT LWA_LINE-TDLINE LEFT DELETING LEADING ''.
CONCATENATE LWA_LINE-TDLINE L_JHTXT INTO GT_PO-TEXTL.
ENDLOOP.
IF GT_PO-TEXTL IS INITIAL.
GT_PO-TEXTL = '项目无备注'.
ENDIF. GT_PO-YUNSW = '物流确认'. *&取物料描述
SELECT SINGLE MAKTX
INTO GT_PO-MAKTX
FROM MAKT
WHERE MATNR EQ GT_PO-MATNR.
*&取物料单位
SELECT SINGLE MEINS
INTO GT_PO-MEINS
FROM MARA
WHERE MATNR EQ GT_PO-MATNR.
MODIFY GT_PO.
CLEAR GT_PO. ENDLOOP. ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ALV_DISPLAY .
* PERFORM FRM_BUILD_FIELDCAT.
DATA: L_NN TYPE I. DEFINE ADD_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = &1.
WA_FIELDCAT-SELTEXT_L = &2.
WA_FIELDCAT-KEY = &3.
WA_FIELDCAT-COL_POS = L_NN + 1.
WA_FIELDCAT-JUST = &4.
WA_FIELDCAT-OUTPUTLEN = &5.
WA_FIELDCAT-FIX_COLUMN = &6.
WA_FIELDCAT-NO_ZERO = &7.
WA_FIELDCAT-EDIT = &8.
APPEND WA_FIELDCAT TO GT_FIELDCAT.
END-OF-DEFINITION. CLEAR GT_FIELDCAT.
REFRESH GT_FIELDCAT. ADD_FIELDCAT 'LIN' '序号' '' '' '' '' '' ''. ADD_FIELDCAT 'EBELN' '采购订单' '' '' '' '' '' ''.
ADD_FIELDCAT 'LIFNR' '廠商編號' '' '' '' '' '' ''.
ADD_FIELDCAT 'WAERS' '交易幣別' '' '' '' '' '' ''.
ADD_FIELDCAT 'STCEG' '交易税别' '' '' '' '' '' ''.
ADD_FIELDCAT 'EBELP' '项目号' '' '' '' '' '' ''.
ADD_FIELDCAT 'MATNR' '材料编号' '' '' '' '' '' ''.
ADD_FIELDCAT 'MENGE' '訂購數量' '' '' '' '' '' ''.
ADD_FIELDCAT 'NETPR' '单价' '' '' '' '' '' ''.
ADD_FIELDCAT 'KZWI ' '金额' '' '' '' '' '' ''.
ADD_FIELDCAT 'PLIFZ' '预定交期' '' '' '' '' '' ''.
ADD_FIELDCAT 'NAME1' '廠商簡稱' '' '' '' '' '' ''.
ADD_FIELDCAT 'TELF1' '公司電話' '' '' '' '' '' ''.
ADD_FIELDCAT 'TELFX' '公司傳真' '' '' '' '' '' ''.
ADD_FIELDCAT 'NAME2' '聯絡人' '' '' '' '' '' ''.
ADD_FIELDCAT 'SPERZ' '付款方式' '' '' '' '' '' ''.
ADD_FIELDCAT 'ADRNR' '联系地址' '' '' '' '' '' ''.
ADD_FIELDCAT 'YUNSW' '运送方式' '' '' '' '' '' ''.
ADD_FIELDCAT 'TEXT' '抬头備註' '' '' '' '' '' ''.
ADD_FIELDCAT 'MAKTX' '材料规格' '' '' '' '' '' ''.
ADD_FIELDCAT 'MEINS' '单位' '' '' '' '' '' ''.
ADD_FIELDCAT 'TEXTL' '项目备注' '' '' '' '' '' ''. GW_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
GW_LAYOUT-BOX_FIELDNAME = 'SEL'. *&ALV输出
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_GRID_TITLE = LV_TITLE
I_CALLBACK_PF_STATUS_SET = 'FRM_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
IS_LAYOUT = GW_LAYOUT
IT_FIELDCAT = GT_FIELDCAT
I_SAVE = 'A'
TABLES
T_OUTTAB = GT_PO
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2. ENDFORM. " FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
*& Form FRM_DOWN_XML
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DOWN_XML . ENDFORM. " FRM_DOWN_XMLS
*&--------------------------------------------------------------------*
*& 界面的功能按钮定义
*&--------------------------------------------------------------------*
FORM FRM_PF_STATUS USING EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS 'STANDARD' EXCLUDING EXTAB. ENDFORM. "SET_PF_STATUS
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD. DATA: LT_SORT TYPE SLIS_T_SORTINFO_ALV,
LS_SORT TYPE LINE OF SLIS_T_SORTINFO_ALV. CASE R_UCOMM.
WHEN '&XML_01'.
*&形成PO item数据表
PERFORM FRM_GET_ITEM.
*&WAY1
* PERFORM FRM_GET_XML01.
*&WAY2
* PERFORM FRM_GET_XML02.
PERFORM FRM_GET_XML03. *&生成XML文件(传服务器)
* PERFORM DOWNLOAD. WHEN '&XML_02'.
* PERFORM FRM_READ_XML.
*&下载解析
PERFORM FRM_UPLOAD. WHEN OTHERS. ENDCASE.
ENDFORM. "FRM_USER_COMMAND *&---------------------------------------------------------------------*
*& Form FRM_GET_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_ITEM . * DATA:BEGIN OF GT_PO OCCURS 0,
* LIFNR LIKE EKKO-LIFNR,"SAP廠商編號
* NAME1 LIKE LFA1-NAME1,"廠商簡稱
* EBELN LIKE EKKO-EBELN,"SAP-PO
* TELF1 LIKE LFA1-TELF1,"公司電話
* TELFX LIKE LFA1-TELFX,"公司傳真
* NAME2 LIKE LFA1-NAME2,"聯絡人
* WAERS LIKE EKKO-WAERS,"交易幣別
* SPERZ LIKE LFA1-SPERZ,"付款方式 (付款冻结)
** TXJCD LIKE EKPO-TXJCD,"交易稅別
* STCEG LIKE EKKO-STCEG,"交易税别
* YUNSW TYPE STRING, "运送方式
* ADRNR LIKE LFA1-ADRNR,"联系地址
* TEXT(100) TYPE C, "抬头備註
**&add
* EBELP LIKE EKPO-EBELP, "项目号
* MATNR LIKE EKPO-MATNR, "材料编号
* MAKTX LIKE MAKT-MAKTX, "材料规格
* MEINS LIKE MARA-MEINS, "单位
* MENGE LIKE EKPO-MENGE, "訂購數量
* NETPR LIKE EKPO-NETPR, "单价
* KZWI LIKE EKPO-KZWI5, "金额
* PLIFZ LIKE EKPO-PLIFZ, "預定交期
* TEXTL(100) TYPE C, "项目備註
* SEL TYPE C,
* LIN TYPE I,
* END OF GT_PO. *&表头和表体数据分开
LOOP AT GT_PO.
ON CHANGE OF GT_PO-EBELN. CLEAR IT_PO-ITEM.
TMP_EBELN = GT_PO-EBELN. LOOP AT GT_PO WHERE EBELN = TMP_EBELN.
WA_LINE-EBELP = GT_PO-EBELP.
WA_LINE-MATNR = GT_PO-MATNR.
WA_LINE-MAKTX = GT_PO-MAKTX.
WA_LINE-MEINS = GT_PO-MEINS.
WA_LINE-MENGE = GT_PO-MENGE.
WA_LINE-NETPR = GT_PO-NETPR.
WA_LINE-KZWI = GT_PO-KZWI.
WA_LINE-PLIFZ = GT_PO-PLIFZ.
WA_LINE-TEXTL = GT_PO-TEXTL.
APPEND WA_LINE1 TO IT_PO-ITEM.
ENDLOOP. SORT IT_PO-ITEM BY EBELP.
IT_PO-EBELN = GT_PO-EBELN. IT_PO-LIFNR = GT_PO-LIFNR."SAP廠商編號
IT_PO-NAME1 = GT_PO-NAME1."廠商簡稱
IT_PO-TELF1 = GT_PO-TELF1."公司電話
IT_PO-TELFX = GT_PO-TELFX."公司傳真
IT_PO-NAME2 = GT_PO-NAME2."聯絡人
IT_PO-WAERS = GT_PO-WAERS."交易幣別
IT_PO-SPERZ = GT_PO-SPERZ."付款方式 (付款冻结)
* TXJCD LIKE EKPO-TXJCD,"交易稅別
IT_PO-STCEG = GT_PO-STCEG."交易税别
IT_PO-YUNSW = GT_PO-YUNSW."运送方式
IT_PO-ADRNR = GT_PO-ADRNR."联系地址
IT_PO-TEXT = GT_PO-TEXT. "抬头備註
APPEND IT_PO.
ENDON. ENDLOOP. ENDFORM. " FRM_GET_ITEM
*&---------------------------------------------------------------------*
*& Form FRM_GET_XML
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_XML01 .
*&Way1. CALL METHOD(写节点) L_IXML. BREAK RAINY.
* L_POHEAD TYPE REF TO IF_IXML_ELEMENT,
DATA:L_FIELD TYPE REF TO IF_IXML_ELEMENT,
L_TYPE TYPE REF TO IF_IXML_ELEMENT,
L_DATA TYPE REF TO IF_IXML_ELEMENT.
* L_DATA TYPE REF TO IF_IXML_ELEMENT,
* L_DATA TYPE REF TO IF_IXML_ELEMENT,
* L_DATA TYPE REF TO IF_IXML_ELEMENT. CLASS CL_IXML DEFINITION LOAD.
L_IXML = CL_IXML=>CREATE( ). CALL METHOD L_IXML->CREATE_ENCODING
EXPORTING
BYTE_ORDER = 0
CHARACTER_SET = 'UTF-8'
RECEIVING
RVAL = L_ENCODING. CALL METHOD L_IXML->CREATE_DOCUMENT
RECEIVING
RVAL = L_DOC. CALL METHOD L_DOC->SET_ENCODING
EXPORTING
ENCODING = L_ENCODING.
CALL METHOD L_DOC->CREATE_SIMPLE_ELEMENT
EXPORTING
NAME = 'cpel'
PARENT = L_DOC
RECEIVING
RVAL = L_ROOT.
CALL METHOD L_ROOT->SET_ATTRIBUTE
EXPORTING
NAME = 'ATTRIBUTE' "ATTRIBUTE
VALUE = 'sample'"sample
RECEIVING
RVAL = L_RVAL.
CALL METHOD L_DOC->CREATE_COMMENT
EXPORTING
COMMENT = '''SAP產出此文件存在至corepress伺服器D:\Job\in\'''
RECEIVING
RVAL = L_COMMENT.
CLEAR L_RVAL. * L_RVAL = '111'.
* L_COMMENT = 'cpml_id'.
CALL METHOD L_ROOT->APPEND_CHILD
EXPORTING
NEW_CHILD = L_COMMENT
RECEIVING
RVAL = L_RVAL. LOOP AT IT_PO.
CALL METHOD L_DOC->CREATE_SIMPLE_ELEMENT
EXPORTING
NAME = 'job-datas'
PARENT = L_ROOT
RECEIVING
RVAL = L_PO. CALL METHOD L_DOC->CREATE_SIMPLE_ELEMENT
EXPORTING
NAME = 'job-data'
PARENT = L_PO
RECEIVING
RVAL = L_POHEAD. * STR = 'field6' .
* CALL METHOD L_DOC->CREATE_SIMPLE_ELEMENT
* EXPORTING
* NAME = 'field'
* PARENT = L_POHEAD
* VALUE = str
* RECEIVING
* RVAL = L_FIELD.
*
* STR = 'EBELN' .
* CALL METHOD L_DOC->CREATE_SIMPLE_ELEMENT
* EXPORTING
* NAME = 'type'
* PARENT = L_FIELD
* VALUE = str
* RECEIVING
* RVAL = L_TYPE.
*
* STR = 'SAP-PO' .
* CALL METHOD L_DOC->CREATE_SIMPLE_ELEMENT
* EXPORTING
* NAME = 'name'
* PARENT = L_FIELD
* VALUE = str
* RECEIVING
* RVAL = L_TYPE.
*
* CALL METHOD L_DOC->CREATE_SIMPLE_ELEMENT
* EXPORTING
* NAME = 'data'
* PARENT = L_TYPE
* RECEIVING
* RVAL = L_DATA. STR = IT_PO-EBELN .
CALL METHOD L_DOC->CREATE_SIMPLE_ELEMENT
EXPORTING
NAME = 'ponumber'
PARENT = L_POHEAD
VALUE = STR
RECEIVING
RVAL = L_ELEMENT. STR = IT_PO-LIFNR.
CALL METHOD L_DOC->CREATE_SIMPLE_ELEMENT
EXPORTING
NAME = 'LIFNR'
PARENT = L_POHEAD
VALUE = STR
RECEIVING
RVAL = L_ELEMENT. PERFORM FILL_ITAB2XML TABLES IT_PO-ITEM
USING 'pobody'
'poitem'
L_PO.
ENDLOOP. CALL METHOD L_IXML->CREATE_STREAM_FACTORY
RECEIVING
RVAL = L_FACTORY.
CALL METHOD L_FACTORY->CREATE_OSTREAM_ITABLE
EXPORTING
TABLE = XML_TABLE
RECEIVING
RVAL = L_OSTREAM.
CALL METHOD L_DOC->RENDER
EXPORTING
OSTREAM = L_OSTREAM
RECURSIVE = 'X'.
CALL METHOD L_OSTREAM->GET_NUM_WRITTEN_RAW
RECEIVING
RVAL = XML_SIZE. *&Down 本机
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
BIN_FILESIZE = XML_SIZE
FILENAME = P_FILE
FILETYPE = 'BIN'
TABLES
DATA_TAB = XML_TABLE. ENDFORM. " FRM_GET_XML01 *&---------------------------------------------------------------------*
*& Form FILL_ITAB2XML
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_PO_ITEM text
* -->P_1768 text
* -->P_1769 text
* -->P_L_PO text
*----------------------------------------------------------------------*
FORM FILL_ITAB2XML TABLES INTAB
"插入正确名称 <...>
USING NODE1NAME TYPE STRING
NODE2NAME TYPE STRING
L_PARENT TYPE REF TO IF_IXML_ELEMENT. DATA: BEGIN OF HEADTAB OCCURS 0 ,
LENGTH TYPE I ,
DECIMALS TYPE I,
TYPE_KIND TYPE C,
NAME(30) TYPE C,
END OF HEADTAB.
DATA DESCR_REF TYPE REF TO CL_ABAP_STRUCTDESCR.
FIELD-SYMBOLS: <COMP_WA> TYPE ABAP_COMPDESCR ,
<F_FIELD> ,
<F_INTAB> TYPE ANY .
DATA: N TYPE I ,
STR TYPE STRING ,
ITEMNAME TYPE STRING ,
TEXT1 TYPE C ,
L_NODE TYPE REF TO IF_IXML_ELEMENT ,
L_ITEM TYPE REF TO IF_IXML_ELEMENT . DESCR_REF ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( INTAB ).
LOOP AT DESCR_REF->COMPONENTS ASSIGNING <COMP_WA>.
MOVE-CORRESPONDING <COMP_WA> TO HEADTAB.
APPEND HEADTAB.
ENDLOOP. CALL METHOD L_DOC->CREATE_SIMPLE_ELEMENT
EXPORTING
NAME = NODE1NAME
PARENT = L_PARENT
RECEIVING
RVAL = L_NODE.
DESCRIBE TABLE HEADTAB LINES N. LOOP AT INTAB ASSIGNING <F_INTAB>.
CALL METHOD L_DOC->CREATE_SIMPLE_ELEMENT
EXPORTING
NAME = NODE2NAME
PARENT = L_NODE
RECEIVING
RVAL = L_ITEM. DO N TIMES.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE <F_INTAB> TO <F_FIELD>.
STR = <F_FIELD>.
READ TABLE HEADTAB INDEX SY-INDEX.
IF HEADTAB-TYPE_KIND = 'I' OR HEADTAB-TYPE_KIND = 'P'
OR HEADTAB-TYPE_KIND = 'F'.
SEARCH STR FOR '-'.
IF SY-SUBRC = 0 AND SY-FDPOS <> 0.
SPLIT STR AT '-' INTO STR TEXT1.
CONDENSE STR.
CONCATENATE '-' STR INTO STR.
ELSE.
CONDENSE STR.
ENDIF.
ELSE.
* SHIFT str LEFT DELETING LEADING '0' .
ENDIF.
ITEMNAME = HEADTAB-NAME .
CALL METHOD L_DOC->CREATE_SIMPLE_ELEMENT
EXPORTING
NAME = ITEMNAME
PARENT = L_ITEM
VALUE = STR
RECEIVING
RVAL = L_ELEMENT.
ENDDO.
ENDLOOP. ENDFORM. " FILL_ITAB2XML
*&---------------------------------------------------------------------*
*& Form FRM_GET_XML0
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_XML02 .
*&CALL Function to get XML.
DATA:M_DOCUMENT TYPE REF TO IF_IXML_DOCUMENT,
W_STRING TYPE XSTRING,
W_SIZE TYPE I,
IT_XML TYPE DCXMLLINES.
DATA: L_DOM TYPE REF TO IF_IXML_ELEMENT,
G_IXML TYPE REF TO IF_IXML,
W_RESULT TYPE I,
W_LINE TYPE STRING,
S_XML LIKE LINE OF IT_XML,
W_RC LIKE SY-SUBRC.
DATA:XML TYPE DCXMLLINES.
DATA:RC TYPE SY-SUBRC,
BEGIN OF XML_TAB OCCURS 0,
D LIKE LINE OF XML,
END OF XML_TAB. BREAK RAINY. *&加载XML
CLASS CL_IXML DEFINITION LOAD.
G_IXML = CL_IXML=>CREATE( ). CHECK NOT G_IXML IS INITIAL.
M_DOCUMENT = G_IXML->CREATE_DOCUMENT( ). CHECK NOT M_DOCUMENT IS INITIAL.
WRITE: / 'Converting DATA TO DOM 1:'. CALL FUNCTION 'SDIXML_DATA_TO_DOM'
EXPORTING
NAME = 'it_po'
DATAOBJECT = IT_PO[]"GT_PO[]
IMPORTING
DATA_AS_DOM = L_DOM
CHANGING
DOCUMENT = M_DOCUMENT
EXCEPTIONS
ILLEGAL_NAME = 1
OTHERS = 2.
IF SY-SUBRC = 0.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
SY-SUBRC.
ENDIF. CHECK NOT L_DOM IS INITIAL.
W_RC = M_DOCUMENT->APPEND_CHILD( NEW_CHILD = L_DOM ).
IF W_RC IS INITIAL.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
W_RC.
ENDIF.
*&函数生成 XML 格式文件字符串
CALL FUNCTION 'SDIXML_DOM_TO_XML'
EXPORTING
DOCUMENT = M_DOCUMENT
IMPORTING
XML_AS_STRING = W_STRING
SIZE = W_SIZE
TABLES
XML_AS_TABLE = IT_XML
EXCEPTIONS
NO_DOCUMENT = 1
OTHERS = 2.
IF SY-SUBRC = 0.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
SY-SUBRC.
ENDIF. *&生成供本地下载内表
LOOP AT IT_XML INTO XML_TAB-D.
APPEND XML_TAB.
ENDLOOP. *&G1.将xml数据导出到本地
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
EXPORTING
BIN_FILESIZE = W_SIZE
FILENAME = P_FILE "'C:\Users\ThinkPad\Desktop\生成文件\get_xml_02.xml' "P_FILE
FILETYPE = 'BIN'
CHANGING
DATA_TAB = IT_XML"XML_TABLE
EXCEPTIONS
OTHERS = 24. IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF. BREAK RAINY.
*&G2.上传服务器
*CONCATENATE P_SFILE S_EBELN-LOW 'P0 list.xml' INTO S_SFILE.
CONCATENATE '/tmp/job/in/' SY-DATUM SY-UZEIT 'P0 list.xml' INTO S_SFILE.
OPEN DATASET S_SFILE FOR OUTPUT IN BINARY MODE.
IF SY-SUBRC EQ 0.
TRANSFER W_STRING TO S_SFILE LENGTH W_SIZE.
CLOSE DATASET S_SFILE.
IF SY-SUBRC EQ 0.
MESSAGE S001 WITH '文件处理成功!'.
ENDIF.
ELSE.
MESSAGE 'OPEN ERROR!' TYPE 'E'.
STOP.
ENDIF. ENDFORM. " FRM_GET_XML02
*&---------------------------------------------------------------------*
*& Form FRM_GET_XML03
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_XML03 .
*&CALL TRANSFORMATION -》XML
BREAK RAINY. LOOP AT GT_PO. WA_HEAD-ID = 'ab2c7f034c814175b1975cc099a2e583'.
WA_HEAD-APP = 'admin'.
WA_HEAD-START = '0'.
WA_HEAD-FINISH = '72'.
WA_HEAD-DATE = '1'. WA_HEAD-LIFN1 = 'field1'.
WA_HEAD-LIFN2 = 'LIFNR'.
WA_HEAD-LIFN3 = 'SAP廠商編號'.
WA_HEAD-NAM1 = 'field3'.
WA_HEAD-NAM2 = 'NAME1'.
WA_HEAD-NAM3 = '廠商簡稱'.
WA_HEAD-EBEL1 = 'field6'.
WA_HEAD-EBEL2 = 'EBELN'.
WA_HEAD-EBEL3 = 'SAP-PO'. WA_HEAD-TEL1 = 'field5'.
WA_HEAD-TEL2 = 'TELF1'.
WA_HEAD-TEL3 = '公司電話'.
WA_HEAD-TEF1 = 'field7'.
WA_HEAD-TEF2 = 'TELFX'.
WA_HEAD-TEF3 = '公司傳真'.
WA_HEAD-NAM6 = 'field8'.
WA_HEAD-NAM7 = 'NAME2'.
WA_HEAD-NAM8 = '聯絡人'. WA_HEAD-WAER1 = 'field9'.
WA_HEAD-WAER2 = 'WAERS'.
WA_HEAD-WAER3 = '交易幣別'.
WA_HEAD-SPER1 = 'field10'.
WA_HEAD-SPER2 = 'SPER3'.
WA_HEAD-SPER3 = '付款方式'.
WA_HEAD-STCE1 = 'field11'.
WA_HEAD-STCE2 = 'STCEG'.
WA_HEAD-STCE3 = '交易稅別'. WA_HEAD-YUNS1 = 'field12'.
WA_HEAD-YUNS2 = 'YUNSW'.
WA_HEAD-YUNS3 = '運送方式'.
WA_HEAD-ADRN1 = 'field13'.
WA_HEAD-ADRN2 = 'ADRNR'.
WA_HEAD-ADRN3 = '聯繫地址'.
WA_HEAD-TEXT1 = 'field14'.
WA_HEAD-TEXT2 = 'TEXT'.
WA_HEAD-TEXT3 = '備註'. WA_HEAD-FJIAN1 = 'field16'.
WA_HEAD-FJIAN2 = 'string'.
WA_HEAD-FJIAN3 = '附件'.
WA_HEAD-FJIAN4 = 'www.sap.com.'.
MOVE-CORRESPONDING GT_PO TO WA_HEAD.
COLLECT WA_HEAD INTO ST_HEAD. WA_LINE-EBEL1 = 'field99'.
WA_LINE-EBEL2 = 'EBELP'.
WA_LINE-EBEL3 = '项目'.
WA_LINE-MATN1 = 'field1'.
WA_LINE-MATN2 = 'MATNR'.
WA_LINE-MATN3 = '材料編碼'.
WA_LINE-MAKT1 = 'field2'.
WA_LINE-MAKT2 = 'MAKTX'.
WA_LINE-MAKT3 = '材料規格'. WA_LINE-MEIN1 = 'field3'.
WA_LINE-MEIN2 = 'MEINS'.
WA_LINE-MEIN3 = '單位'.
WA_LINE-MENG1 = 'field4'.
WA_LINE-MENG2 = 'MENGE'.
WA_LINE-MENG3 = '訂購數量'.
WA_LINE-NETP1 = 'field5'.
WA_LINE-NETP2 = 'NETPR'.
WA_LINE-NETP3 = '单价'. WA_LINE-KZWI1 = 'field6'.
WA_LINE-KZWI2 = 'KZWI'.
WA_LINE-KZWI3 = '金额'.
WA_LINE-PLIF1 = 'field7'.
WA_LINE-PLIF2 = 'PLIFZ'.
WA_LINE-PLIF3 = '預定交期'.
WA_LINE-TET1 ='field8'.
WA_LINE-TET2 ='TEXTL'.
WA_LINE-TET3 ='项目備註'. MOVE-CORRESPONDING GT_PO TO WA_LINE.
APPEND WA_LINE TO ST_LINE.
ENDLOOP. BREAK RAINY.
*&call transformation to xml
CALL TRANSFORMATION ZMM3
SOURCE CPEL = ST_HEAD "ITAB_MATNR
ET-DATA-LIST = ST_LINE"ITAB_CLASS
RESULT XML W_XML.
*&xml string to it_XML
CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
EXPORTING
TEXT = W_XML
IMPORTING
LENGTH = W_LEN
TABLES
FTEXT_TAB = IT_XML.
*&1.DOWNloan local.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = P_FILE
FILETYPE = 'BIN'
IMPORTING
FILELENGTH = W_LEN
TABLES
DATA_TAB = IT_XML.
*&xml tab->string
* CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
* EXPORTING
* INPUT_LENGTH = W_LEN
* IMPORTING
* BUFFER = XML_STRING
* TABLES
* BINARY_TAB = IT_XML. *&2.上传服务器
*CONCATENATE P_SFILE S_EBELN-LOW 'P0 list.xml' INTO S_SFILE.
CONCATENATE P_SFILE SY-DATUM '001.xml' INTO S_SFILE.
OPEN DATASET S_SFILE FOR OUTPUT IN BINARY MODE.
IF SY-SUBRC EQ 0.
TRANSFER W_XML TO S_SFILE. " LENGTH W_SIZE."W_STRING
CLOSE DATASET S_SFILE.
IF SY-SUBRC EQ 0.
MESSAGE S001 WITH '文件处理成功!'.
ENDIF.
ELSE.
MESSAGE 'OPEN ERROR!' TYPE 'E'.
STOP.
ENDIF. ENDFORM. " FRM_GET_XML03 *&---------------------------------------------------------------------*
*& Form FRM_WRITE_OUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_WRITE_OUT .
DATA: L_NN TYPE I. DEFINE ADD_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = &1.
WA_FIELDCAT-SELTEXT_L = &2.
WA_FIELDCAT-KEY = &3.
WA_FIELDCAT-COL_POS = L_NN + 1.
WA_FIELDCAT-JUST = &4.
WA_FIELDCAT-OUTPUTLEN = &5.
WA_FIELDCAT-FIX_COLUMN = &6.
WA_FIELDCAT-NO_ZERO = &7.
WA_FIELDCAT-EDIT = &8.
APPEND WA_FIELDCAT TO GT_FIELDCAT.
END-OF-DEFINITION. CLEAR GT_FIELDCAT.
REFRESH GT_FIELDCAT. ADD_FIELDCAT 'LIN' '序号' '' '' '' '' '' ''. ADD_FIELDCAT 'EBELN' '采购订单' '' '' '' '' '' ''.
ADD_FIELDCAT 'LIFNR' '廠商編號' '' '' '' '' '' ''.
ADD_FIELDCAT 'WAERS' '交易幣別' '' '' '' '' '' ''.
ADD_FIELDCAT 'STCEG' '交易税别' '' '' '' '' '' ''.
ADD_FIELDCAT 'EBELP' '项目号' '' '' '' '' '' ''.
ADD_FIELDCAT 'MATNR' '材料编号' '' '' '' '' '' ''.
ADD_FIELDCAT 'MENGE' '訂購數量' '' '' '' '' '' ''.
ADD_FIELDCAT 'NETPR' '单价' '' '' '' '' '' ''.
ADD_FIELDCAT 'KZWI ' '金额' '' '' '' '' '' ''.
ADD_FIELDCAT 'PLIFZ' '预定交期' '' '' '' '' '' ''.
ADD_FIELDCAT 'NAME1' '廠商簡稱' '' '' '' '' '' ''.
ADD_FIELDCAT 'TELF1' '公司電話' '' '' '' '' '' ''.
ADD_FIELDCAT 'TELFX' '公司傳真' '' '' '' '' '' ''.
ADD_FIELDCAT 'NAME2' '聯絡人' '' '' '' '' '' ''.
ADD_FIELDCAT 'SPERZ' '付款方式' '' '' '' '' '' ''.
ADD_FIELDCAT 'ADRNR' '联系地址' '' '' '' '' '' ''.
ADD_FIELDCAT 'YUNSW' '运送方式' '' '' '' '' '' ''.
ADD_FIELDCAT 'TEXT' '抬头備註' '' '' '' '' '' ''.
ADD_FIELDCAT 'MAKTX' '材料规格' '' '' '' '' '' ''.
ADD_FIELDCAT 'MEINS' '单位' '' '' '' '' '' ''.
ADD_FIELDCAT 'TEXTL' '项目备注' '' '' '' '' '' ''. GW_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
GW_LAYOUT-BOX_FIELDNAME = 'SEL'. *&ALV输出
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_GRID_TITLE = LV_TITLE
* I_CALLBACK_PF_STATUS_SET = 'FRM_PF_STATUS'
* I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
IS_LAYOUT = GW_LAYOUT
IT_FIELDCAT = GT_FIELDCAT
I_SAVE = 'A'
TABLES
T_OUTTAB = IT_PO
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2. ENDFORM. " FRM_WRITE_OUT
*&---------------------------------------------------------------------*
*& Form FRM_ALV_XMLTAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ALV_XMLTAB .
DATA:GT_XM TYPE SLIS_T_FIELDCAT_ALV,
WA_XM TYPE SLIS_FIELDCAT_ALV,
XM_LAYOUT TYPE SLIS_LAYOUT_ALV. DATA: L_NN TYPE I. DEFINE ADD_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-FIELDNAME = &1.
WA_FIELDCAT-SELTEXT_L = &2.
WA_FIELDCAT-KEY = &3.
WA_FIELDCAT-COL_POS = L_NN + 1.
WA_FIELDCAT-JUST = &4.
WA_FIELDCAT-OUTPUTLEN = &5.
WA_FIELDCAT-FIX_COLUMN = &6.
WA_FIELDCAT-NO_ZERO = &7.
WA_FIELDCAT-EDIT = &8.
APPEND WA_XM TO GT_XM.
END-OF-DEFINITION. CLEAR GT_XM.
REFRESH GT_XM. ADD_FIELDCAT 'CNAME' '栏位' '' '' '' '' '' ''.
ADD_FIELDCAT 'CVALUE' '值' '' '' '' '' '' ''. XM_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_STRUCTURE_NAME = 'SMUM_XMLTB'
* I_GRID_TITLE = LV_TITLE
** I_CALLBACK_PF_STATUS_SET = 'FRM_PF_STATUS'
** I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
IS_LAYOUT = XM_LAYOUT
* IT_FIELDCAT = GT_XM
* I_SAVE = 'A'
TABLES
T_OUTTAB = RESULT_XML[]
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2. ENDFORM. " FRM_ALV_XMLTAB
*&---------------------------------------------------------------------*
*& Form FRM_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DYNAMIC_TABLE .
FIELD-SYMBOLS:<DYN_TABLE> TYPE STANDARD TABLE,
<DYN_WA>,
<DYN_FIELD>.
DATA: DY_TABLE TYPE REF TO DATA,
DY_LINE TYPE REF TO DATA,
IT_STRUCTURE TYPE LVC_T_FCAT,
WA_STR TYPE LVC_S_FCAT.
DATA:WA_NEW_LINE TYPE REF TO DATA.
DATA:LS_LAYOUT TYPE LVC_S_LAYO.
DATA:L_GET TYPE I. *CNAME
*CVALUE
* FIELDNAME
* CFIELDNAME
LOOP AT RESULT_XML INTO WA_XML.
CLEAR L_GET.
WA_STR-COL_POS = SY-TABIX.
L_GET = WA_STR-COL_POS MOD 2. IF L_GET NE 0.
WA_STR-TABNAME = 'X'.
ENDIF.
IF WA_XML-CNAME = 'type'.
WA_STR-FIELDNAME = WA_XML-CVALUE.
ENDIF. IF WA_XML-CNAME = 'data'.
WA_STR-CFIELDNAME = WA_XML-CVALUE.
ENDIF.
APPEND WA_STR TO IT_STRUCTURE.
CLEAR WA_STR-TABNAME.
ENDLOOP. DELETE IT_STRUCTURE WHERE TABNAME EQ 'X'. *&转化动态内表
"表类型指针 <dyn_table> 指向 数据对象的内容.
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = IT_STRUCTURE
IMPORTING
EP_TABLE = DY_TABLE.
ASSIGN DY_TABLE->* TO <DYN_TABLE>. CREATE DATA WA_NEW_LINE LIKE LINE OF <DYN_TABLE>.
*建立一个与动态内表结构相同的数据对象,且数据对象为是一个结构
"用<dyn_wa>指针指向该结构
ASSIGN WA_NEW_LINE->* TO <DYN_WA>. BREAK RAINY. LOOP AT IT_STRUCTURE INTO WA_STR.
* J = J + 1.
ASSIGN COMPONENT WA_STR-FIELDNAME OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
IF SY-SUBRC EQ 0.
<DYN_FIELD> = WA_STR-CFIELDNAME.
ENDIF.
* " 用指针<DYN_FIELD>指向工作区<DYN_WA>中的一个字段,字段名为WA_STRUCTURE-FIELDNAME.
* CONCATENATE I J INTO <DYN_FIELD>." 给指针指向的字段赋值
APPEND <DYN_WA> TO <DYN_TABLE>. ENDLOOP. * 栏位信息
* PERFORM frm_build_fieldcat. * 格式信息
LS_LAYOUT-ZEBRA = 'X'.
LS_LAYOUT-CWIDTH_OPT = 'X'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT_LVC = LS_LAYOUT
IT_FIELDCAT_LVC = GT_FIELDCAT
I_SAVE = 'A'
TABLES
T_OUTTAB = <DYN_TABLE>
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2. ENDFORM. " FRM_DYNAMIC_TABLE *&---------------------------------------------------------------------*
*& Form FRM_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_UPLOAD .
DATA XMLBIN_TAB TYPE TABLE OF X255.
DATA: XML_XSTR TYPE XSTRING,
XML_STR TYPE STRING.
DATA: LEN TYPE I,
LENTH TYPE I. *&上传文件:
*&=========================================
*&文件上传
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = P_FILE
FILETYPE = 'BIN'
IMPORTING
FILELENGTH = LEN
TABLES
DATA_TAB = XMLBIN_TAB.
*&XML格式转化string
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
INPUT_LENGTH = LEN
IMPORTING
BUFFER = XML_XSTR
TABLES
BINARY_TAB = XMLBIN_TAB.
*&得到结果内表
CALL FUNCTION 'SMUM_XML_PARSE'
EXPORTING
XML_INPUT = XML_XSTR
TABLES
XML_TABLE = RESULT_XML
RETURN = RETURN. *&XConvert XSTRING to STRING
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING:
BUFFER = XML_XSTR
IMPORTING
OUTPUT_LENGTH = LEN
TABLES
BINARY_TAB = XMLBIN_TAB. CALL FUNCTION 'SCMS_BINARY_TO_STRING'
EXPORTING
INPUT_LENGTH = LEN
IMPORTING
TEXT_BUFFER = XML_STR
OUTPUT_LENGTH = LENTH
TABLES
BINARY_TAB = XMLBIN_TAB. DELETE RESULT_XML WHERE TYPE NE 'V'.
DELETE RESULT_XML WHERE CNAME NE 'type' AND CNAME NE 'data'.
DELETE RESULT_XML WHERE CVALUE EQ ''. BREAK RAINY.
*&==========================================
*将 XML 文件转化成SAP内表数据
CALL TRANSFORMATION ZMM3_R
SOURCE XML XML_STR"XML_XSTR
RESULT CPEL = ST_HEAD
ET-DATA-LIST = ST_LINE. *&dynamic table处理得数据表 ENDFORM. " FRM_UPLOAD

PO 审批及生成xml文件的更多相关文章

  1. Android 解析XML文件和生成XML文件

    解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...

  2. Java生成XML文件

    我们在数据库中的数据可以将其提取出来生成XML文件,方便传输.例如数据库中有Admin这张表: 我们写一个java类表示admin数据: package xmlDom.vo; import java. ...

  3. Android 使用xml序列化器生成xml文件

    在<Android 生成xml文件>一文中使用流的形式写入xml格式文件,但是存在一定的问题,那就是在短信内容中不能出现<>之类的括号,本文使用xml序列化器来解决 xml序列 ...

  4. C# 生成xml文件

    本篇文章旨在.net环境下生成xml文件,以控制台应用程序为例进行说明. 1.在vs中新建控制台应用程序CreateXml 2.CreateXmlFile:主要生成xml的函数 public void ...

  5. 视频播放实时记录日志并生成XML文件

    需求描述: 在JWPlayer视频播放过程中,要求实时记录视频观看者播放.暂停的时间,并记录从暂停到下一次播放时所经过的时间.将所有记录保存为XML文件,以方便数据库的后续使用. 实现过程: 尝试1: ...

  6. 使用XML序列化器生成XML文件和利用pull解析XML文件

    首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...

  7. LINQ to XML 从逗号分隔值 (CSV) 文件生成 XML 文件

    参考:http://msdn.microsoft.com/zh-cn/library/bb387090.aspx 本示例演示如何使用 语言集成查询 (LINQ) 和 LINQ to XML 从逗号分隔 ...

  8. 生成XML文件,通过实体生成XML文件

    实体 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Xm ...

  9. PHP中的生成XML文件的4种方法(转)

    <?xml version="1.0" encoding="utf-8"?> <article> <item> <ti ...

随机推荐

  1. Linux 之 网络相关设置

    网络相关设置 参考教程:[千峰教育] 命令: ping: 作用:通常用于检测网络设备的连通性. 格式:ping IP/域名 选项:-c,指定方式测试数据包的次数 实例:ping www.baidu.c ...

  2. 微信小程序 使用HMACSHA1和md5为登陆注册报文添加指纹验证签名

    对接口请求报文作指纹验证签名相信在开发中经常碰到, 这次在与java后端一起开发小程序时,就碰到需求对登陆注册请求报文添加指纹验证签名来防止信息被修改 先来看下我们与后端定制签名规则 2.4. 签名规 ...

  3. 总结 Eclipse 编程常用的快捷键

    Eclipse 常用快捷键Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 1. [ALT+/] 此快捷键为用户编 ...

  4. BZOJ2527Meteors

    BZOJ2527 整体二分模板题 整体二分: 主要用于解决第K大问题 #include<cstdio> #include<cctype> #include<vector& ...

  5. Java使用logback记录日志时分级别保存文件

    说明:一般情况下logback可以指定类使用什么样的级别显示输出日志,并且同一类可以指定不能级别,然后对应级别进行输出日志. 第一种配置: <?xml version="1.0&quo ...

  6. 品质与合身 无须昂贵 | Tailorwoods在线男装定制

    品质与合身 无须昂贵 | Tailorwoods在线男装定制 北京市朝阳区姚家园北一路八月照相馆2F

  7. SpringUtils写法

    @Componentpublic class SpringUtils implements ApplicationContextAware { @Override public void setApp ...

  8. ios等待ualertview弹出动画完成后再跳转至其他页面

    [self performSelector:@selector(popView:) withObject:nil afterDelay:2.0];

  9. lstm作的第一首诗,纪念

    黄獐春风见破黛,十道奇昌犹自劳. 开领秦都色偏早,未知长柳是来恩. 争时欲下花木湿,早打红筵枝上香. 酣质矫胶麦已暮,丝窗瑞佩满含龙. 感觉有点意思哈,花木对应枝上,还有点对仗的意味. 于是接着又弄了 ...

  10. procomm plus

    procomm plus这是查看串口数据的软件.