SAP-PR同步到SRM(JOB)

处理代码
*&---------------------------------------------------------------------*
*& Report  ZMMMD001
*&
*&---------------------------------------------------------------------*
*&采购申请传送至SRM:SAP->SRM

*&---------------------------------------------------------------------*

REPORT ZMMMD001.
INCLUDE ZFRM_REPORT_REGISTER.
TABLES:EBAN.

TYPE-POOLS : SLIS.

DATA: BEGIN OF IT_RESULT OCCURS 0,
        LINE(200),  " TYPE BP_TEXT,
      END OF IT_RESULT.

DATA: IT_INBOUND LIKE IT_RESULT OCCURS 0 WITH HEADER LINE.
DATA:  W_FTP_ERROR.
DATA: I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
DATA: I_EVENTS TYPE SLIS_T_EVENT.
DATA: I_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: G_VARIANT LIKE DISVARIANT.
DATA: L_LS_EVENT        TYPE SLIS_ALV_EVENT,
      L_TITLE           TYPE LVC_TITLE,
      L_WINDOW_TITLEBAR LIKE SY-TITLE,
      LS_HYPE           TYPE LVC_S_HYPE,
      GT_HYPETAB        TYPE LVC_T_HYPE,
      P_CHAR,
      I_HEADER          TYPE SLIS_T_LISTHEADER.   "Itab forlistheade..
DATA: GS_SORT TYPE SLIS_SORTINFO_ALV,
      GT_SORT TYPE SLIS_T_SORTINFO_ALV.
DATA: WA_H(60) TYPE C,
      WA_S(60) TYPE C,
      WA_I(60) TYPE C.
DATA: WA_LINE TYPE SLIS_LISTHEADER.

DATA: WFLD1(150) TYPE C,
      WROOT      LIKE WFLD1,
      WFLD3      LIKE WFLD1.

DATA LV_NET TYPE BAPICURR_D.

DEFINE ADD_FIELD.
  i_fieldcat-fieldname = &1.
  i_fieldcat-tabname = &2.
  i_fieldcat-outputlen = &3.
  i_fieldcat-seltext_l = &4.
  i_fieldcat-EDIT = &5.
  i_fieldcat-CHECKBOX = &6.
  IF  i_fieldcat-fieldname = 'SEL'.
   i_fieldcat-ICON = 'X'.
    ENDIF.
*  i_fieldcat-no_zero = &5.
*  i_fieldcat-do_sum = &6.  "汇总字段
*  i_fieldcat-hotspot = p_char.   "该语句在该程式可以省略不写,若需报表点击某一栏位跳入到另一个界面,该语句必写
  append i_fieldcat.
END-OF-DEFINITION.


DATA: W_FTP_HDL      TYPE I,
      W_FTP_HOST(64) TYPE C ,
      W_FTP_USER(30) TYPE C ,
      W_FTP_PWD(30)  TYPE C ,
      W_FTP_KEY      TYPE I VALUE 26101957,
      W_FTP_SLEN     TYPE I,
      W_FTP_DEST     TYPE RFCDES-RFCDEST, "VALUE 'SAPFTP',
      W_FTP_CMD(120).

DEFINE DISPLAY_DATA.
  refresh i_events.
  call function 'REUSE_ALV_EVENTS_GET'
    exporting
      i_list_type = 0
    importing
      et_events   = i_events.

*  l_ls_event-name = 'TOP-OF-PAGE'.
*  l_ls_event-form = 'TOP_OF_PAGE'.
*  append l_ls_event to i_events.

  i_layout-zebra = 'X'.
  i_layout-window_titlebar = l_window_titlebar.
  i_layout-colwidth_optimize = 'X'.
  i_layout-group_change_edit = 'X'.
  i_layout-f2code = &2.
*  i_layout1-no_zero = 'X'.
** Header

  wa_line-typ = 'H'.
  wa_line-info = &4.
  append wa_line to i_header.
  wa_line-typ = 'S'.
  wa_line-info = &5.
  append wa_line to i_header.

*** Header
  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      i_callback_program = sy-repid
      i_callback_pf_status_set = 'SET_PF_STATUS'   "使用工具条
      i_callback_user_command  = 'USER_COMMAND'    "使用工具条命令
      i_save             = 'X'
      is_variant = g_variant
      i_grid_title       = &3
      it_hyperlink = gt_hypetab
      "i_callback_top_of_page      = 'TOP_OF_PAGE'
*      it_events          = i_events
      it_fieldcat        = i_fieldcat[]
      it_sort            = gt_sort[]
      is_layout = i_layout
    tables
      t_outtab           = &1
    exceptions
      program_error = 1
      others = 2.
END-OF-DEFINITION.


*&---------------------------------------------------------------------*
*&      Form  top_of_page
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM TOP_OF_PAGE.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY = I_HEADER.
ENDFORM. "COMMENTARY_WRITE


SELECTION-SCREEN      BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:S_BSART  FOR EBAN-BSART ,  "采购申请凭证类型
               S_BANFN  FOR EBAN-BANFN,
               S_LFDAT  FOR EBAN-LFDAT,
               S_MATKL  FOR EBAN-MATKL, "物料组
               S_MATNR  FOR EBAN-MATNR,
               S_DATE   FOR EBAN-ERDAT.
SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS:  S_EKGRP  FOR EBAN-EKGRP,
                 S_WERKS  FOR EBAN-WERKS.
SELECTION-SCREEN END OF BLOCK B2.

DATA:BEGIN OF GT_LIST OCCURS 0,
       SEL             TYPE C,
       APPLICANT       LIKE ADRP-NAME_TEXT,
       DEPT_NAME       TYPE STRING,
       BSART           LIKE T161T-BATXT,
       HEAD_COMMENTS   TYPE STRING,
       SOUR_FROM(3)    TYPE C,
       PROJ_CODE       TYPE STRING,
       PROJ_NAME       TYPE STRING,
       PROJ_START_DATE TYPE STRING,
       PROJ_END_DATE   TYPE STRING,
       PROJ_INTRO      TYPE STRING,

       BANFN           LIKE EBAN-BANFN,
       BUKRS           LIKE T001K-BUKRS,
       BNFPO           LIKE EBAN-BNFPO,
       WERKS           LIKE EBAN-WERKS,
       MATNR           LIKE EBAN-MATNR,
       MAKTX           LIKE EBAN-TXZ01,
       EQUIP_ID        TYPE STRING,
       EQUIP_NAME      TYPE STRING,
       EQUIP_CARD      TYPE STRING,

       MATKL           LIKE EBAN-MATKL,
       MENGE           LIKE EBAN-MENGE,
       MEINS           LIKE EBAN-MEINS,
       BUDGET          LIKE EBAN-PREIS,
       WAERS           LIKE EBAN-WAERS,
       PEINH           LIKE EBAN-PEINH,
       LFDAT           LIKE EBAN-LFDAT,
       EKGRP           LIKE EBAN-EKGRP,
       RFQ_CODE        LIKE T024-TELFX,
       BID_METHOD      TYPE STRING,
       LINE_COMMENTS   TYPE STRING,
     END OF GT_LIST.

DATA:BEGIN OF T_HEAD OCCURS 0,
*       BANFN           LIKE EBAN-BANFN,
       BANFN           TYPE STRING,
       APPLICANT       LIKE ADRP-NAME_TEXT,
       DEPT_NAME       TYPE STRING,
       BSART           LIKE T161T-BATXT,
       EKORG           TYPE T024E-EKORG,"采购组织
       HEAD_COMMENTS   TYPE STRING, "头备注
       PROJ_CODE       TYPE STRING, "项目编码
       PROJ_NAME       TYPE STRING, "项目名称
       PROJ_START_DATE TYPE DATUM,
       PROJ_END_DATE   TYPE DATUM,
       PROJ_INTRO      TYPE STRING,
       SOUR_FROM(3)    TYPE C, "资料来源
     END OF T_HEAD.

DATA:T_HEAD2 LIKE T_HEAD OCCURS 0.

DATA:BEGIN OF T_ITEM OCCURS 0,
*      BANFN         LIKE EBAN-BANFN,"采购申请
       BANFN         TYPE STRING,"采购申请
       BNFPO         LIKE EBAN-BNFPO,"采购申请行项目
       WERKS         LIKE EBAN-WERKS,"工厂
       MATNR         LIKE EBAN-MATNR,"物料编号
       MAKTX         LIKE EBAN-TXZ01,"物料描述
       MATKL         LIKE EBAN-MATKL,"物料组
       MENGE         LIKE EBAN-MENGE,"数量
       MEINS         LIKE EBAN-MEINS,"单位
       BUDGET        LIKE EBAN-PREIS,"预算
       WAERS         LIKE EBAN-WAERS,"币别
       LFDAT         LIKE EBAN-LFDAT,"日期
       EKGRP         LIKE EBAN-EKGRP,"采购组
       RFQ_CODE      LIKE T024-TELFX,"申请人
       BID_METHOD    TYPE STRING,"OPEN
       LINE_COMMENTS TYPE STRING,"行备注
       BUKRS         LIKE T001K-BUKRS,
       EQUIP_ID      TYPE STRING,"设备ID
       EQUIP_NAME    TYPE STRING,"设备名称
       PEINH         LIKE EBAN-PEINH,"价格单位
       EQUIP_CARD    TYPE ANLA-ANLN1,": "在建工程编号"
     END OF T_ITEM.
DATA:T_ITEM2 LIKE T_ITEM OCCURS 0.

DATA:BEGIN OF T_ITEMA OCCURS 0,
       BANFN        LIKE EBAN-BANFN ,
       BNFPO        LIKE EBAN-BNFPO ,
       FILE_NAME    TYPE STRING,
       FILE_ADDRESS TYPE STRING,
     END OF  T_ITEMA.


DATA:BEGIN OF LT_EBAN OCCURS 0,
       BANFN LIKE EBAN-BANFN ,"" 采购申请
       BNFPO LIKE EBAN-BNFPO ,"" 行号
       BSART LIKE EBAN-BSART ,"" 采购申请凭证类型
       LOEKZ LIKE EBAN-LOEKZ ,"" 采购凭证中的删除标识
       ERDAT LIKE EBAN-ERDAT ,"" 更改日期
       ERNAM LIKE EBAN-ERNAM ,"" 创建对象的人员名称
       EKGRP LIKE EBAN-EKGRP ,"" 采购组
       TXZ01 LIKE EBAN-TXZ01 ,"" 短文本
       MATNR LIKE EBAN-MATNR ,"" 物料号
       WERKS LIKE EBAN-WERKS ,"" 工厂
       MATKL LIKE EBAN-MATKL ,"" 物料组
       MENGE LIKE EBAN-MENGE ,"" 采购申请数量
       MEINS LIKE EBAN-MEINS ,"" 采购申请计量单位
       LFDAT LIKE EBAN-LFDAT ,"" 项目交货日期
       PREIS LIKE EBAN-PREIS ,"" 采购申请中的价格
       PEINH LIKE EBAN-PEINH  ,"" 价格单位
       WAERS LIKE EBAN-WAERS ,"" 货币码,
       BEDNR LIKE EBAN-BEDNR, "需求跟踪号,需求部门
     END OF LT_EBAN.

DATA:BEGIN OF LT_ERNAM OCCURS 0,
       BNAME      LIKE USR21-BNAME,
       PERSNUMBER LIKE USR21-PERSNUMBER,
       NAME_TEXT  LIKE ADRP-NAME_TEXT,
     END OF LT_ERNAM.

DATA:BEGIN OF LT_T161T OCCURS 0,
       BSART LIKE T161T-BSART,
       BATXT LIKE T161T-BATXT,
     END OF LT_T161T.

DATA:BEGIN OF LT_T001K OCCURS 0,
       BWKEY LIKE T001K-BWKEY,
       BUKRS LIKE T001K-BUKRS,
     END OF LT_T001K.

DATA:BEGIN OF LT_T024 OCCURS 0,
       EKGRP LIKE T024-EKGRP,
       TELFX LIKE T024-TELFX,
     END OF LT_T024.
DATA:GS_LIST LIKE GT_LIST.

DATA: TEXT1(50).
DATA: BEGIN OF ITB_S18 OCCURS 0.
        INCLUDE STRUCTURE THEAD.
DATA: END OF ITB_S18.
DATA: BEGIN OF FLINES OCCURS 0.
        INCLUDE STRUCTURE TLINE.
DATA: END OF FLINES.
DATA: EBELNKP(15).


START-OF-SELECTION.
  PERFORM SAVE_REPORT_REGISTER.
  PERFORM GET_DATA.
  IF SY-BATCH = 'X'.
  ELSE.
    PERFORM DISPALY_ALV_DATA.
  ENDIF.

END-OF-SELECTION.


FORM GET_DATA.
  REFRESH:GT_LIST,LT_EBAN,T_HEAD,T_ITEM.
  IF S_DATE IS  INITIAL.
    S_DATE-LOW = SY-DATUM - 1.
    S_DATE-SIGN = 'I'.
    S_DATE-OPTION = 'EQ'.
    APPEND S_DATE.
  ENDIF.

  SELECT BANFN  "" 采购申请
         BNFPO  "" 行号
         BSART  "" 采购申请凭证类型
         LOEKZ  "" 采购凭证中的删除标识
         ERDAT  "" 更改日期
         ERNAM  "" 创建对象的人员名称
         EKGRP  "" 采购组
         TXZ01  "" 短文本
         MATNR  "" 物料号
         WERKS  "" 工厂
         MATKL  "" 物料组
         MENGE  "" 采购申请数量
         MEINS  "" 采购申请计量单位
         LFDAT  "" 项目交货日期
         PREIS  "" 采购申请中的价格
         PEINH  "" 价格单位
         WAERS  "" 货币码
         BEDNR  ""需求跟踪号,需求部门
  INTO CORRESPONDING FIELDS OF TABLE LT_EBAN
    FROM EBAN
    WHERE BSART IN S_BSART
      AND BANFN IN S_BANFN
      AND LFDAT IN S_LFDAT
      AND MATKL IN S_MATKL
      AND MATNR IN S_MATNR
      AND EKGRP IN S_EKGRP
      AND WERKS IN S_WERKS
      AND ERNAM NOT IN ('GVOINTERFACE' , 'ZOA_RFC' )
    AND FRGKZ = 'E'
  AND ERDAT IN S_DATE.

  IF LT_EBAN[] IS NOT INITIAL.
    SELECT USR21~BNAME
           USR21~PERSNUMBER
           ADRP~NAME_TEXT
      INTO CORRESPONDING FIELDS OF TABLE LT_ERNAM
      FROM USR21
      INNER JOIN ADRP
      ON USR21~PERSNUMBER = ADRP~PERSNUMBER
      FOR ALL ENTRIES IN LT_EBAN
    WHERE USR21~BNAME = LT_EBAN-ERNAM.

    SELECT BSART BATXT
      INTO  CORRESPONDING FIELDS OF TABLE LT_T161T
      FROM T161T
    WHERE SPRAS = '1'.

    SELECT BWKEY BUKRS
      INTO CORRESPONDING FIELDS OF TABLE LT_T001K
    FROM T001K.

    SELECT EKGRP  TELFX
      INTO CORRESPONDING FIELDS OF TABLE LT_T024
    FROM T024.
  ENDIF.

  SORT LT_EBAN BY BANFN.

  DATA:GC1 TYPE STRING."EBAN-BANFN.
  DATA:GC2 TYPE STRING."EBAN-ERNAM.
  DATA:GC3 TYPE STRING."EBAN-BEDNR.
  DATA:GC4 TYPE STRING."EBAN-BSART.
  DATA:GC5 TYPE STRING."EBAN-BNFPO.
  LOOP AT  LT_EBAN.
    GC1 = LT_EBAN-BANFN.
    GC2 = LT_EBAN-ERNAM.
    GC3 = LT_EBAN-BEDNR.
    GC4 = LT_EBAN-BSART.
    GC5 = LT_EBAN-BNFPO.
    AT NEW BANFN.
      T_HEAD-BANFN = LT_EBAN-BANFN.
      READ TABLE LT_ERNAM WITH KEY BNAME = GC2.
      IF SY-SUBRC EQ 0.
        T_HEAD-APPLICANT = LT_ERNAM-NAME_TEXT.
      ELSE.
        T_HEAD-APPLICANT = GC2.
      ENDIF.
      T_HEAD-DEPT_NAME = GC3." '需求部门名称'.
      READ TABLE LT_T161T WITH KEY BSART = GC4.
      IF SY-SUBRC EQ 0.
        T_HEAD-BSART = LT_T161T-BATXT."采购申请类型描述
      ENDIF.
      T_HEAD-EKORG = ''."采购组织

      "抬头备注、文本
      SELECT * FROM STXL
     INTO CORRESPONDING FIELDS OF TABLE ITB_S18
     WHERE TDOBJECT = 'EBANH'
     AND   TDNAME = GC1.

      CLEAR TEXT1.
      LOOP AT ITB_S18.
        CLEAR TEXT1.
        PERFORM FRM_READ_TEXT USING 'B01' ITB_S18-TDNAME 'EBANH'
        CHANGING TEXT1 .
      ENDLOOP.

      T_HEAD-HEAD_COMMENTS = ''. "TEXT1." '头备注'.抬头文本不传值

      "T_HEAD-PROJ_CODE = '项目编号'.
      SELECT SINGLE AUFNR INTO T_HEAD-PROJ_CODE FROM EBKN WHERE BANFN
= GC1.
      SELECT SINGLE KTEXT IDAT1 IDAT2 INTO ( T_HEAD-PROJ_NAME,
T_HEAD-PROJ_START_DATE,T_HEAD-PROJ_END_DATE ) FROM COAS WHERE AUFNR
= T_HEAD-PROJ_CODE.

      IF T_HEAD-PROJ_END_DATE  = '00000000'.
        T_HEAD-PROJ_END_DATE  = ''.
      ENDIF.
      IF T_HEAD-PROJ_START_DATE  = '00000000'.
        T_HEAD-PROJ_START_DATE  = ''.
      ENDIF.

      T_HEAD-SOUR_FROM = 'SAP'.
      APPEND T_HEAD.
    ENDAT.

    MOVE-CORRESPONDING LT_EBAN TO T_ITEM.

    "公司别
    READ TABLE LT_T001K WITH KEY BWKEY = LT_EBAN-WERKS.
    IF SY-SUBRC EQ 0.
      T_ITEM-BUKRS = LT_T001K-BUKRS.
    ENDIF.

    READ TABLE LT_T024 WITH KEY EKGRP = LT_EBAN-EKGRP.
    IF SY-SUBRC EQ 0.
      T_ITEM-RFQ_CODE = LT_T024-TELFX .
    ENDIF.

    IF LT_EBAN-LOEKZ = 'X'.
      T_ITEM-MENGE = ''.
      T_ITEM-BUDGET = ''.
      T_ITEM-PEINH = ''.
    ELSE.
      DATA:GC_PREIS TYPE BAPICURR_D.
      GC_PREIS = LT_EBAN-PREIS.
      CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
        EXPORTING
          CURRENCY        = LT_EBAN-WAERS
          AMOUNT_INTERNAL = GC_PREIS
        IMPORTING
          AMOUNT_EXTERNAL = GC_PREIS.

      LT_EBAN-PREIS = GC_PREIS.
      T_ITEM-WAERS = LT_EBAN-WAERS.
      T_ITEM-BUDGET = LT_EBAN-PREIS.
    ENDIF.

    "物料描述
    T_ITEM-MAKTX = LT_EBAN-TXZ01.

    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
      EXPORTING
        INPUT          = LT_EBAN-MEINS
        LANGUAGE       = '1'
      IMPORTING
        OUTPUT         = T_ITEM-MEINS
      EXCEPTIONS
        UNIT_NOT_FOUND = 1
        OTHERS         = 2.

    "物料号
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
      EXPORTING
        INPUT  = LT_EBAN-MATNR
      IMPORTING
        OUTPUT = LT_EBAN-MATNR.
    T_ITEM-MATNR = LT_EBAN-MATNR.

    "行备注
    CONCATENATE GC1 GC5 INTO GC1.
    SELECT * FROM STXL
     INTO CORRESPONDING FIELDS OF TABLE ITB_S18
     WHERE TDOBJECT = 'EBAN'
     AND   TDNAME = GC1.

    CLEAR TEXT1.
    LOOP AT ITB_S18.
      CLEAR TEXT1.
      PERFORM FRM_READ_TEXT USING 'B01' ITB_S18-TDNAME 'EBAN'
      CHANGING TEXT1 .
    ENDLOOP.
    T_ITEM-LINE_COMMENTS = ''."TEXT1.行项目备注不传

    APPEND T_ITEM .
    CLEAR: LT_EBAN, T_HEAD,T_ITEM.
    CLEAR:GC1,GC2,GC3,GC4,GC5.
  ENDLOOP.

  DELETE ADJACENT DUPLICATES FROM T_HEAD COMPARING ALL FIELDS.

  IF LT_EBAN[] IS NOT INITIAL.
    LOOP AT T_ITEM.
      MOVE-CORRESPONDING T_ITEM TO GT_LIST.
      READ TABLE T_HEAD WITH KEY BANFN = T_ITEM-BANFN.
      IF SY-SUBRC EQ 0.
        GT_LIST-APPLICANT = T_HEAD-APPLICANT.
        GT_LIST-BSART = T_HEAD-BSART.
        GT_LIST-SOUR_FROM  = T_HEAD-SOUR_FROM .
        GT_LIST-DEPT_NAME = T_HEAD-DEPT_NAME.
        GT_LIST-HEAD_COMMENTS = T_HEAD-HEAD_COMMENTS.
        GT_LIST-PROJ_CODE = T_HEAD-PROJ_CODE.
        GT_LIST-PROJ_NAME = T_HEAD-PROJ_NAME.
        GT_LIST-PROJ_START_DATE = T_HEAD-PROJ_START_DATE.
        GT_LIST-PROJ_END_DATE = T_HEAD-PROJ_END_DATE.
      ENDIF.
      APPEND GT_LIST.
      CLEAR:GT_LIST,T_ITEM,T_HEAD.
    ENDLOOP.

  ELSE.
    MESSAGE'未发现符合条件的数据,请查证后重新输入条件'
    TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.
  IF SY-BATCH = 'X'.
    PERFORM DATA_TO_SRM.
  ENDIF.

ENDFORM.

FORM FRM_READ_TEXT USING FID FNAME FOBJECT CHANGING TEXT1 .

  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      CLIENT                  = SY-MANDT
      ID                      = FID
      LANGUAGE                = SY-LANGU
      NAME                    = FNAME
      OBJECT                  = FOBJECT
*     ARCHIVE_HANDLE          = 0
*     LOCAL_CAT               = ' '
*   IMPORTING
*     HEADER                  =
    TABLES
      LINES                   = FLINES
    EXCEPTIONS
      ID                      = 1
      LANGUAGE                = 2
      NAME                    = 3
      NOT_FOUND               = 4
      OBJECT                  = 5
      REFERENCE_CHECK         = 6
      WRONG_ACCESS_TO_ARCHIVE = 7
      OTHERS                  = 8.
  IF SY-SUBRC <> 0.
  ENDIF.
  LOOP AT FLINES.
    CONCATENATE TEXT1 FLINES-TDLINE INTO TEXT1 .

  ENDLOOP.
ENDFORM.

FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.

FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
                        RS_SELFIELD TYPE SLIS_SELFIELD .
  DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = G_GRID.
*  CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.
  CALL METHOD G_GRID->CHECK_CHANGED_DATA.
  RS_SELFIELD-REFRESH = 'X'.
  RS_SELFIELD-COL_STABLE = 'X'.
  RS_SELFIELD-ROW_STABLE = 'X'.

  CASE R_UCOMM.
    WHEN 'ZSEND'.
      DELETE GT_LIST WHERE SEL IS INITIAL.
      PERFORM DATA_TO_SRM.
    WHEN OTHERS.
  ENDCASE.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DATA_TO_SRM .
*  CHECK GT_LIST IS NOT INITIAL.  20190917
  IF GT_LIST[] IS  INITIAL.
    MESSAGE '无数据' TYPE 'I'.
  ENDIF.
  SORT GT_LIST BY BANFN BNFPO.
  SORT T_ITEM BY BANFN BNFPO.
  SORT T_HEAD BY BANFN.

  DATA:CL_ESB        TYPE REF TO ZSRMCO_VXG_195_SRM_PRSYN_SERVI,
       "ABAP NAME
       CL_ESB_INPUT  TYPE        ZSRMVXG_195_SRM_PRSYN_SERVICE1, "INPUT
       CL_ESB_OUTPUT TYPE        ZSRMVXG_195_SRM_PRSYN_SERVICE.  "OUTPUT

  "异常收集参数
  DATA: G_SYS_EXCEPTION  TYPE REF TO CX_AI_SYSTEM_FAULT,
        G_APP_EXCEPTION  TYPE REF TO CX_AI_APPLICATION_FAULT,
        L_RESULT         TYPE        STRING,
        XML_STRING_INPUT TYPE        STRING.

  DATA:GT_RETURN TYPE TABLE OF BAPIRET2,
       GS_RETURN TYPE          BAPIRET2.


  DATA:GO_JSON TYPE REF TO CL_SXML_STRING_WRITER.
  DATA:GO_JSON_HEAD TYPE REF TO CL_SXML_STRING_WRITER.
  DATA:GV_JSON_HEAD TYPE STRING.
  DATA:GV_JSON_HEAD_ESB TYPE STRING.
  DATA:GV_LENGTH_HEAD TYPE I.

  DATA:GO_JSON_ITEM TYPE REF TO CL_SXML_STRING_WRITER.
  DATA:GV_JSON_ITEM TYPE STRING.
  DATA:GV_JSON_ITEM_ESB TYPE STRING.
  DATA:GV_LENGTH_ITEM TYPE I.

  DATA:GV_JSON_ESB TYPE STRING.
  DATA:GV_TITLE_LGORT TYPE STRING.
  DATA:LV_OUTPUT_STR_UTF16 TYPE XSTRING.
  DATA:LV_OUTPUT_STR_UTF8 TYPE STRING.
  DATA:LS_HEAD TYPE ZOSB_HEAD.

  DATA:LS_ERROR TYPE ZOSB_RETURN.

  TYPES:BEGIN OF TY_RETURN,
          RETURN TYPE STRING,
        END OF TY_RETURN.

  DATA:LS_RETURN TYPE TY_RETURN.

  TYPES:BEGIN OF TY_LINE,
          DATAINFO TYPE STRING,
        END OF TY_LINE.

  DATA:LS_LGORT TYPE TY_LINE."库位


  CLEAR:LS_HEAD,LS_LGORT.
  CALL FUNCTION 'ZMM_GETBIZTRANSACTIONID_SRM'
    EXPORTING
      I_MODULE           = 'MM'
      I_INTERFACE        = 'XSD'
    IMPORTING
      E_BIZTRANSACTIONID = LS_HEAD-BIZTRANSACTIONID.

  DESCRIBE TABLE GT_LIST LINES   LS_HEAD-COUNT .

  LS_HEAD-ACCOUNT = 'userSAP'.
  LS_HEAD-PASSWORD = 'P@ss0rd'.
  LS_HEAD-CONSUMER = 'SAP'.

*JSON格式转换
  "GV_TITLE_LGORT = '['.""TYPE":"RATE","iary":'.

  TRANSLATE GV_TITLE_LGORT TO UPPER CASE.

  "清空数据
  CLEAR: GO_JSON,GV_JSON_HEAD,GV_JSON_ITEM.
  CLEAR:GV_JSON_HEAD_ESB,GV_JSON_ITEM_ESB.
  CLEAR:GV_LENGTH_HEAD.
  CLEAR: LV_OUTPUT_STR_UTF16.

  DATA:GN_LINE TYPE NUMC3.
  DATA:GN_LINE_ALL TYPE NUMC3.
  GN_LINE_ALL = LINES( T_HEAD ).
  GN_LINE = 0.

  DATA:TEXT1 TYPE STRING.
  LOOP AT T_HEAD.
    LOOP AT T_ITEM WHERE BANFN = T_HEAD-BANFN.
      CLEAR TEXT1.
      CONCATENATE  T_ITEM-BUKRS  '-' T_ITEM-BANFN INTO T_ITEM-BANFN.
      MODIFY T_ITEM.
      CLEAR TEXT1.
      MOVE:T_ITEM-BUKRS TO TEXT1.
      MODIFY T_ITEM.
    ENDLOOP.
    CONCATENATE TEXT1 '-' T_HEAD-BANFN INTO T_HEAD-BANFN.
    MODIFY T_HEAD.
  ENDLOOP.

  LOOP AT T_HEAD.

    GN_LINE = GN_LINE + 1.

    APPEND T_HEAD TO T_HEAD2[].

    GO_JSON_HEAD = CL_SXML_STRING_WRITER=>CREATE( IF_SXML=>CO_XT_JSON ).
    CALL TRANSFORMATION ID
      SOURCE
        DATA     = T_HEAD2[]
      RESULT XML
        GO_JSON_HEAD.
    GV_JSON_HEAD = CL_ABAP_CODEPAGE=>CONVERT_FROM(
  GO_JSON_HEAD->GET_OUTPUT( ) ).

    LOOP AT T_ITEM WHERE BANFN = T_HEAD-BANFN."+0(10).
      APPEND T_ITEM TO T_ITEM2[].
    ENDLOOP.

    GO_JSON_ITEM = CL_SXML_STRING_WRITER=>CREATE( IF_SXML=>CO_XT_JSON ).
    CALL TRANSFORMATION ID
      SOURCE
        DATA     = T_ITEM2[]
      RESULT XML
        GO_JSON_ITEM.
    GV_JSON_ITEM = CL_ABAP_CODEPAGE=>CONVERT_FROM(
  GO_JSON_ITEM->GET_OUTPUT( ) ).

    IF GN_LINE = 1.
      GV_LENGTH_HEAD = STRLEN( GV_JSON_HEAD ).
      GV_LENGTH_HEAD = GV_LENGTH_HEAD - 11.
      GV_JSON_HEAD_ESB = GV_JSON_HEAD+8(GV_LENGTH_HEAD).
    ELSE.
      GV_LENGTH_HEAD = STRLEN( GV_JSON_HEAD ).
      GV_LENGTH_HEAD = GV_LENGTH_HEAD - 12.
      GV_JSON_HEAD_ESB = GV_JSON_HEAD+9(GV_LENGTH_HEAD).
    ENDIF.

    GV_LENGTH_ITEM = STRLEN( GV_JSON_ITEM ).
    GV_LENGTH_ITEM = GV_LENGTH_ITEM - 9.
    GV_JSON_ITEM_ESB = GV_JSON_ITEM+8(GV_LENGTH_ITEM).

    CONCATENATE GV_JSON_ESB GV_TITLE_LGORT
    GV_JSON_HEAD_ESB
    ',"PUR_LINES": ' GV_JSON_ITEM_ESB " ']'
  INTO GV_JSON_ESB .

    IF GN_LINE < GN_LINE_ALL.
      CONCATENATE GV_JSON_ESB  '},'
        INTO GV_JSON_ESB .
    ENDIF.

    CLEAR:GV_LENGTH_HEAD,GV_JSON_HEAD_ESB,GV_LENGTH_ITEM,
    GV_JSON_ITEM_ESB.
    CLEAR:T_HEAD.
    REFRESH:T_HEAD2,T_ITEM2.
  ENDLOOP.
  CLEAR:GN_LINE,GN_LINE_ALL.

*出来的格式是:
*{"DATA":实际数据}
*转换下即可
  CONCATENATE GV_JSON_ESB '}]' INTO GV_JSON_ESB .


  LS_LGORT-DATAINFO = GV_JSON_ESB.

*XML转换
  CALL TRANSFORMATION ZMM_O_SAPTOSRM
  SOURCE HEAD = LS_HEAD
         ITEM = LS_LGORT
  RESULT XML LV_OUTPUT_STR_UTF16.

  " 之所以要有这个转换,是因为UTF16的格式java端那边解析不了
  CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
    EXPORTING
      IM_XSTRING  = LV_OUTPUT_STR_UTF16
      IM_ENCODING = 'UTF-8'
    IMPORTING
      EX_STRING   = LV_OUTPUT_STR_UTF8.

  TRY.
      CREATE OBJECT CL_ESB
        EXPORTING
          LOGICAL_PORT_NAME = 'xsd'.

      CL_ESB_INPUT-DATA = LV_OUTPUT_STR_UTF8.

      CALL METHOD CL_ESB->VXG_195_SRM_PRSYN_SERVICE
        EXPORTING
          INPUT  = CL_ESB_INPUT
        IMPORTING
          OUTPUT = CL_ESB_OUTPUT.

      IF CL_ESB_OUTPUT-SIGN = 'E' AND CL_ESB_OUTPUT-MESSAGE <> ''.
        CALL TRANSFORMATION  ZMM_RETURN_ESB
            SOURCE XML  CL_ESB_OUTPUT-MESSAGE
            RESULT
              HEAD     = LS_ERROR
              ITEM     = LS_RETURN.

        GS_RETURN-TYPE = LS_ERROR-ERRORCODE.
        GS_RETURN-MESSAGE = LS_RETURN-RETURN.
        APPEND GS_RETURN TO GT_RETURN.
        CLEAR GS_RETURN.
      ENDIF.

    CATCH CX_AI_APPLICATION_FAULT INTO G_APP_EXCEPTION.
      IF G_APP_EXCEPTION IS NOT INITIAL.

        CALL METHOD G_APP_EXCEPTION->GET_TEXT
          RECEIVING
            RESULT = GS_RETURN-MESSAGE.
        GS_RETURN-TYPE = 'E'.
        APPEND GS_RETURN TO GT_RETURN.
        CLEAR GS_RETURN.
      ENDIF.
*END WXB

    CATCH CX_AI_SYSTEM_FAULT INTO G_SYS_EXCEPTION.
      IF G_SYS_EXCEPTION IS NOT INITIAL.
        CALL METHOD G_SYS_EXCEPTION->GET_TEXT
          RECEIVING
            RESULT = GS_RETURN-MESSAGE.
        GS_RETURN-TYPE = 'E'.
        APPEND GS_RETURN TO GT_RETURN.
        CLEAR GS_RETURN.
      ENDIF.

  ENDTRY.

  IF CL_ESB_OUTPUT-SIGN = 'S'.

    CONCATENATE CL_ESB_OUTPUT-SIGN SPACE CL_ESB_OUTPUT-MESSAGE SPACE
'传输成功' INTO CL_ESB_OUTPUT-MESSAGE.
  ELSE.
    CONCATENATE CL_ESB_OUTPUT-SIGN SPACE CL_ESB_OUTPUT-MESSAGE SPACE
'传输失败' INTO CL_ESB_OUTPUT-MESSAGE.
  ENDIF.

  MESSAGE CL_ESB_OUTPUT-MESSAGE TYPE 'I'.

  IF SY-BATCH <> 'X'.                                 

    PERFORM GET_DATA.
  ENDIF.

ENDFORM.                    " FS

FORM DISPALY_ALV_DATA .

  DATA:V_TEXT TYPE STRING.
  DATA:V_TEXT1 TYPE STRING.
  DATA:V_TEXT2 TYPE STRING,
       V_TEXT3 TYPE STRING.

  ADD_FIELD:
   'SEL'                     'GT_LIST'   '' 'SEL'  'X' 'X' ,
   'APPLICANT'               'GT_LIST'   '' '完整的人员名称' '' '' ,
   'DEPT_NAME'               'GT_LIST'   '' '需求部门名称' '' '',
   'BSART'                   'GT_LIST'   '' '采购申请凭证类型' '' '',
   'HEAD_COMMENTS'           'GT_LIST'   '' '头备注' '' '',
   'SOUR_FROM'               'GT_LIST'   '' '资料来源' '' '',
   'PROJ_CODE'               'GT_LIST'   '' '项目编码' '' '',
   'PROJ_NAME'               'GT_LIST'   '' '项目名称' '' '',
   'PROJ_START_DATE'         'GT_LIST'   '' '项目开始时间' '' '',
   'PROJ_END_DATE'           'GT_LIST'   '' '项目结束时间' '' '',
   'PROJ_INTRO'              'GT_LIST'   '' '项目概况介绍' '' '',
   'BANFN'                   'GT_LIST'   '' '采购申请编号' '' '',
   'BUKRS'                   'GT_LIST'   '' '公司代码' '' '',
   'BNFPO'                   'GT_LIST'   '' '采购申请的项目编号' '' '',
   'WERKS'                   'GT_LIST'   '' '工厂' '' '',
   'MATNR'                   'GT_LIST'   '' '物料编码' '' '',
   'MAKTX'                   'GT_LIST'   '' '短文本' '' '',
   'EQUIP_ID'                'GT_LIST'   '' '设备ID' '' '',
   'EQUIP_NAME'              'GT_LIST'   '' '设备名称' '' '',
   'EQUIP_CARD'              'GT_LIST'   '' '在建工程编号' '' '',
   'MATKL'                   'GT_LIST'   '' '物料组' '' '',
   'MENGE'                   'GT_LIST'   '' '数量' '' '',
   'MEINS'                   'GT_LIST'   '' '单位' '' '',
   'BUDGET'                  'GT_LIST'   '' '采购申请中的价格' '' '',
   'WAERS'                   'GT_LIST'   '' '货币码' '' '',
   'PEINH'                   'GT_LIST'   '' '价格单位' '' '',
   'LFDAT'                   'GT_LIST'   '' '项目交货日期' '' '',
   'EKGRP'                   'GT_LIST'   '' '采购组' '' '',
   'RFQ_CODE'                'GT_LIST'   '' '采购(购买者)组的传真号' '' '',
   'BID_METHOD'              'GT_LIST'   '' 'OPEN' '' '',
   'LINE_COMMENTS'           'GT_LIST'   '' '行备注' '' ''.

  DISPLAY_DATA GT_LIST '' ''  V_TEXT1  V_TEXT.

ENDFORM.                    " DISPALY_ALV_DATA

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小啊曼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值