创建入库交货(内向交货单)VL31N

*&---------------------------------------------------------------------*
*& Report ZMMF024
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZMMF024.

TABLES:SSCRFIELDS.
TYPES: BEGIN OF TY_UPLOAD,
         ZKEY  TYPE STRING, "分组
         LIFNR TYPE STRING, "供应商
         LFDAT TYPE STRING, "交货日期
         EBELN TYPE STRING, "采购订单
         EBELP TYPE STRING, "采购订单行项目
         MATNR TYPE STRING, "物料号
         LFIMG TYPE STRING, "交货数量
         LICHN TYPE STRING, "供应商批次
         ARKTX TYPE STRING, "项目描述

       END OF TY_UPLOAD.

DATA: GS_UPLOAD TYPE          TY_UPLOAD,
      GT_UPLOAD TYPE TABLE OF TY_UPLOAD.

TYPES: BEGIN OF TY_ITAB,
         ZKEY       TYPE CHAR10, "LIPS-POSNR, "分组
         LIFNR      TYPE EKKO-LIFNR, "供应商
         LFDAT      TYPE LIKP-LFDAT, "交货日期
         LIFNR_T    TYPE LFA1-NAME1, "供应商描述
         EBELN      TYPE EKPO-EBELN, "采购订单
         EBELP      TYPE EKPO-EBELP, "采购订单行项目
         MATNR      TYPE LIPS-MATNR, "物料号
         MATNR_T    TYPE MAKT-MAKTX, "物料描述
         LFIMG      TYPE LIPS-LFIMG, "交货数量
         MEINS      TYPE EKPO-MEINS,
         LICHN      TYPE LIPS-LICHN, "供应商批次
         ARKTX      TYPE LIPS-ARKTX, "项目描述

         VBELN      TYPE LIPS-VBELN, "交货单号
         POSNR      TYPE LIPS-POSNR, "交货单行项目


         CHK_LIGHTS TYPE CHAR1, "-- 数据检查指示灯 -
         STATU      TYPE BAPIRET2-TYPE,
         MSG        TYPE BAPIRET2-MESSAGE,

       END OF TY_ITAB.

DATA: GS_ITAB TYPE          TY_ITAB,
      GT_ITAB TYPE TABLE OF TY_ITAB.

FIELD-SYMBOLS: <FS_ITAB> TYPE TY_ITAB.

DATA: GV_ERROR TYPE CHAR1. "错误标识

DATA: GT_FCAT TYPE LVC_T_FCAT,
      GA_FCAT TYPE LVC_S_FCAT,
      GC_GRID TYPE REF TO CL_GUI_ALV_GRID.

DEFINE ADD_FIELDS.
  CLEAR GA_FCAT .
  GA_FCAT-FIELDNAME = &1.   "内表的字段名
  GA_FCAT-SCRTEXT_L = &2.    "字段描述.
  GA_FCAT-REF_TABLE = &3.      "输出数据的内表名
  GA_FCAT-REF_FIELD = &4.          "为key
  GA_FCAT-COLDDICTXT   = 'L'.
  GA_FCAT-CHECKBOX = &5.    "字段描述.
  GA_FCAT-EDIT = &6.    "字段描述.
  GA_FCAT-F4AVAILABL = &7.    "F4
  GA_FCAT-OUTPUTLEN = &8.    "输出长度
  APPEND GA_FCAT TO GT_FCAT.
END-OF-DEFINITION.

DATA : FUNCTXT     TYPE SMP_DYNTXT.
DATA : GV_TEMP     TYPE WWWDATATAB-OBJID VALUE 'ZMM024'."SMW0 对象名

SELECTION-SCREEN BEGIN OF BLOCK BLC_001 WITH FRAME TITLE TEXT-001.
PARAMETERS:P_FILE TYPE RLGRAP-FILENAME."
SELECTION-SCREEN END OF BLOCK BLC_001.
SELECTION-SCREEN: FUNCTION KEY 1.

INITIALIZATION.
  "下载模板按钮
  FUNCTXT-ICON_ID   = ICON_XLS.
  FUNCTXT-ICON_TEXT = '下载模板'.
  SSCRFIELDS-FUNCTXT_01 = FUNCTXT.

*---------------------------------------------------------------------*
*  AT SELECTION-SCREEN                                                *
*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  "Help
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      FIELD_NAME = 'P_FILE'
    IMPORTING
      FILE_NAME  = P_FILE.

AT SELECTION-SCREEN.
  CASE SSCRFIELDS-UCOMM.
    WHEN 'FC01' .
      DATA: G_FILE TYPE SAPB-SAPPFAD.
      DATA: E_ERROR TYPE CHAR255.

      CLEAR E_ERROR.

      PERFORM FRM_DOWNLOAD_EXCEL_FROMSERVER USING GV_TEMP G_FILE
      CHANGING E_ERROR.
      IF E_ERROR IS INITIAL.
        MESSAGE '下载成功!' TYPE 'S'.
      ELSE.
        MESSAGE E_ERROR TYPE 'E'.
      ENDIF.
    WHEN OTHERS.
  ENDCASE.

START-OF-SELECTION.
  IF P_FILE IS INITIAL .
    MESSAGE '请选择导入文件路径' TYPE 'S' DISPLAY LIKE 'E' .
    EXIT.
  ENDIF .
  PERFORM FRM_UPLOAD_DATA.
  PERFORM FRM_CHECK_DATA .
  PERFORM FRM_DISPLAY_ALV.

FORM FRM_DOWNLOAD_EXCEL_FROMSERVER USING P_OBJID LIKE WWWDATATAB-OBJID
      P_FILE   LIKE SAPB-SAPPFAD
CHANGING E_ERROR TYPE CHAR255.
  DATA:LO_OBJDATA     LIKE WWWDATATAB,
       LO_MIME        LIKE W3MIME,
       LS_DESTINATION LIKE RLGRAP-FILENAME,
       LS_OBJNAM      TYPE STRING,
       LI_RC          LIKE SY-SUBRC,
       LS_ERRTXT      TYPE STRING.

  CONCATENATE P_OBJID '.XLSX' INTO LS_OBJNAM.

  SELECT SINGLE RELID OBJID FROM WWWDATA
  INTO CORRESPONDING FIELDS OF LO_OBJDATA
  WHERE SRTF2    = 0
  AND RELID    = 'MI'
  AND OBJID    = P_OBJID.
  IF SY-SUBRC NE 0 OR LO_OBJDATA-OBJID EQ SPACE.
    CONCATENATE '不存在模板' LS_OBJNAM ',请检查' INTO E_ERROR.
    RETURN.
  ENDIF.

  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      DEF_FILENAME     = '内向交货单模板.xlsx'
      MODE             = 'S'
    IMPORTING
      FILENAME         = P_FILE
    EXCEPTIONS
      INV_WINSYS       = 1
      NO_BATCH         = 2
      SELECTION_CANCEL = 3
      SELECTION_ERROR  = 4
      OTHERS           = 5.

  LS_DESTINATION  = P_FILE.
  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      KEY         = LO_OBJDATA
      DESTINATION = LS_DESTINATION
    IMPORTING
      RC          = LI_RC.
  IF LI_RC NE 0.
    CONCATENATE '下载模板' LS_OBJNAM '失败,请检查!' INTO E_ERROR.
  ENDIF.
ENDFORM. "sub_download_excel_fromserver
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_UPLOAD_DATA .
  DATA: LT_DATA  TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'    "读取excel文件中的内容
    EXPORTING
      FILENAME                = P_FILE
      I_BEGIN_COL             = '1'
      I_BEGIN_ROW             = '3'
      I_END_COL               = '59'
      I_END_ROW               = '9999'
    TABLES
      INTERN                  = LT_DATA
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.

  IF SY-SUBRC <> 0.
    MESSAGE S000(OO) WITH 'EXCEL导入失败' DISPLAY LIKE 'E'.
    STOP.
  ENDIF.

  SORT LT_DATA BY ROW COL VALUE.

  DATA: LV_INDEX LIKE SY-INDEX.
  FIELD-SYMBOLS: <FS_EXCEL> TYPE ANY.
  LOOP AT LT_DATA.
    CLEAR LV_INDEX.
    LV_INDEX = LT_DATA-COL+2(2).
    ASSIGN COMPONENT LV_INDEX  OF STRUCTURE GS_UPLOAD TO <FS_EXCEL>.
    IF SY-SUBRC EQ 0.
      <FS_EXCEL> = LT_DATA-VALUE.
    ENDIF.

    AT END OF ROW.
      APPEND GS_UPLOAD TO GT_UPLOAD.
      CLEAR GS_UPLOAD.
    ENDAT.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CHECK_DATA .

  DATA: LV_ZKEY  TYPE LIPS-POSNR.
  DATA: LV_POSNR TYPE LIPS-POSNR.

  IF GT_UPLOAD[] IS INITIAL.
    MESSAGE S000(OO) WITH '没有上传数据' DISPLAY LIKE 'E'.
    STOP.
  ENDIF.

*  LV_ZKEY = 1.

  CLEAR GS_UPLOAD.
  LOOP AT GT_UPLOAD INTO GS_UPLOAD.

*    AT NEW LFDAT.
*      LV_POSNR = 10.
*    ENDAT.
    AT NEW ZKEY.
      LV_POSNR = 10.
    ENDAT.
    CLEAR GS_ITAB.
    MOVE-CORRESPONDING GS_UPLOAD TO GS_ITAB.
*    GS_ITAB-ZKEY  = LV_ZKEY.
    GS_ITAB-POSNR = LV_POSNR.
    LV_POSNR      = LV_POSNR + 10. "行项目号
    "供应商
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = GS_ITAB-LIFNR
      IMPORTING
        OUTPUT = GS_ITAB-LIFNR.

    "采购订单号
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = GS_ITAB-EBELN
      IMPORTING
        OUTPUT = GS_ITAB-EBELN.

    "物料
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        INPUT        = GS_ITAB-MATNR
      IMPORTING
        OUTPUT       = GS_ITAB-MATNR
      EXCEPTIONS
        LENGTH_ERROR = 1
        OTHERS       = 2.


    APPEND GS_ITAB TO GT_ITAB.

    AT END OF LFDAT.
      LV_ZKEY = LV_ZKEY + 1.
    ENDAT.
    CLEAR GS_UPLOAD.
  ENDLOOP.

  CHECK GT_ITAB IS NOT INITIAL.

  DATA: LT_MAKT TYPE TABLE OF MAKT,
        LS_MAKT TYPE          MAKT.

  TYPES: BEGIN OF TY_LFA1,
           LIFNR TYPE LFA1-LIFNR,
           NAME1 TYPE LFA1-NAME1,
         END OF TY_LFA1.

  DATA: LT_LFA1 TYPE TABLE OF TY_LFA1,
        LS_LFA1 TYPE          TY_LFA1.

  REFRESH LT_LFA1.
  SELECT LIFNR NAME1 FROM LFA1 INTO TABLE LT_LFA1.
  SORT LT_LFA1 BY LIFNR.

*  REFRESH LT_MAKT.
*  SELECT * FROM MAKT INTO TABLE LT_MAKT WHERE SPRAS = SY-LANGU.
*  SORT LT_MAKT BY MATNR.

  TYPES: BEGIN OF TY_EKPO,
           EBELN  TYPE EKPO-EBELN,
           EBELP  TYPE EKPO-EBELP,
           LIFNR  TYPE EKKO-LIFNR,
           MEMORY TYPE EKKO-MEMORY,
           FRGRL  TYPE EKKO-FRGRL, "审批状态
           MATNR  TYPE EKPO-MATNR,
           MEINS  TYPE EKPO-MEINS,
           TXZ01  TYPE EKPO-TXZ01,
         END OF TY_EKPO.

  DATA: LT_EKPO TYPE TABLE OF TY_EKPO,
        LS_EKPO TYPE          TY_EKPO.

  REFRESH LT_EKPO.
  SELECT EKPO~EBELN
         EKPO~EBELP
         EKKO~LIFNR
         EKKO~MEMORY
         EKKO~FRGRL
         EKPO~MATNR
         EKPO~MEINS
         EKPO~TXZ01
    FROM EKKO
   INNER JOIN EKPO ON  EKKO~EBELN = EKPO~EBELN
   INTO TABLE LT_EKPO
 FOR ALL ENTRIES IN  GT_ITAB
  WHERE EKPO~EBELN = GT_ITAB-EBELN
   AND  EKPO~EBELP = GT_ITAB-EBELP
   AND  EKPO~LOEKZ EQ ''.

  CLEAR GV_ERROR.
  LOOP AT GT_ITAB ASSIGNING <FS_ITAB>.

    <FS_ITAB>-CHK_LIGHTS = 3. "代表正确  1代表出错,2代表警告

*     CLEAR LS_MAKT.
*     READ TABLE LT_MAKT INTO LS_MAKT WITH KEY MATNR = <FS_ITAB>-MATNR BINARY SEARCH.
*     IF SY-SUBRC NE 0.
*       <FS_ITAB>-CHK_LIGHTS = 1.
*       <FS_ITAB>-MSG = '物料不存在'.
*
*     ENDIF.

    CLEAR LS_LFA1.
    READ TABLE LT_LFA1 INTO LS_LFA1 WITH KEY LIFNR = <FS_ITAB>-LIFNR.
    IF SY-SUBRC EQ 0.
      <FS_ITAB>-LIFNR_T = LS_LFA1-NAME1.
    ENDIF.

    CLEAR LS_EKPO.
    READ TABLE LT_EKPO INTO LS_EKPO WITH KEY EBELN = <FS_ITAB>-EBELN
                                             EBELP = <FS_ITAB>-EBELP.
    IF SY-SUBRC EQ 0.
      <FS_ITAB>-MEINS   = LS_EKPO-MEINS.
      <FS_ITAB>-MATNR_T = LS_EKPO-TXZ01. "短文本

      IF LS_EKPO-MEMORY EQ 'X'.
        <FS_ITAB>-CHK_LIGHTS = 1.
        CONCATENATE <FS_ITAB>-MSG '未完全保存采购订单 - 未创建装运通知' INTO <FS_ITAB>-MSG SEPARATED BY ';'.

      ENDIF.

      IF LS_EKPO-FRGRL EQ 'X'.
        <FS_ITAB>-CHK_LIGHTS = 1.
        CONCATENATE <FS_ITAB>-MSG '采购凭证未批准' INTO <FS_ITAB>-MSG SEPARATED BY ';'.

      ENDIF.

      IF LS_EKPO-MATNR NE <FS_ITAB>-MATNR.
        <FS_ITAB>-CHK_LIGHTS = 1.
        CONCATENATE <FS_ITAB>-MSG '输入的物料与采购订单的物料不一致' INTO <FS_ITAB>-MSG SEPARATED BY ';'.
      ENDIF.

      IF LS_EKPO-LIFNR NE <FS_ITAB>-LIFNR.
        <FS_ITAB>-CHK_LIGHTS = 1.
        CONCATENATE <FS_ITAB>-MSG '输入的物料与采购订单的供应商不一致' INTO <FS_ITAB>-MSG SEPARATED BY ';'.
      ENDIF.

    ELSE.
      <FS_ITAB>-CHK_LIGHTS = 1.
      CONCATENATE <FS_ITAB>-MSG '采购订单及行项目不存在或已经删除' INTO <FS_ITAB>-MSG SEPARATED BY ';'.
    ENDIF.

    IF <FS_ITAB>-MSG IS NOT INITIAL.
      SHIFT <FS_ITAB>-MSG LEFT DELETING LEADING ';'.

    ENDIF.

    IF <FS_ITAB>-CHK_LIGHTS = 1.
      <FS_ITAB>-STATU = 'E'.
      GV_ERROR = 'X'.
    ELSEIF <FS_ITAB>-CHK_LIGHTS = 3.
      <FS_ITAB>-STATU = 'S'.
    ENDIF.

  ENDLOOP.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV .
  DATA: LS_LAYOUT TYPE LVC_S_LAYO,
        LS_REPID  TYPE SY-REPID.

  CLEAR:LS_LAYOUT.
  LS_LAYOUT-ZEBRA      = 'X'.
  LS_LAYOUT-SEL_MODE   = 'A'.
  LS_LAYOUT-EXCP_FNAME = 'CHK_LIGHTS'.
  LS_LAYOUT-CWIDTH_OPT = 'X'.
*  ls_layout-box_fieldname = 'SEL'."不用做选中,直接点前面的行号就代表选中
*  ls_repid = sy-repid.
  PERFORM FRM_GET_FIELDCAT.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
*     i_grid_title             = lv_grid_title
*     I_BUFFER_ACTIVE          = 'X'
      I_DEFAULT                = 'X'
      I_SAVE                   = 'X'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
      I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
      IT_FIELDCAT_LVC          = GT_FCAT[]
      IS_LAYOUT_LVC            = LS_LAYOUT
*     it_events                = lt_event
    TABLES
      T_OUTTAB                 = GT_ITAB
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.

ENDFORM.
FORM FRM_GET_FIELDCAT .

  ADD_FIELDS 'STATU'   '状态' '' '' '' '' '' ''.
  ADD_FIELDS 'MSG'     '消息' '' '' '' '' '' ''.
  ADD_FIELDS 'VBELN      '   '交货单号 ' 'LIPS' 'VBELN' '' '' '' ''.
  ADD_FIELDS 'ZKEY       '   '组号 ' 'LIPS' 'POSNR' '' '' '' ''.
  ADD_FIELDS 'POSNR      '   '行项目 ' 'LIPS' 'POSNR' '' '' '' ''.
  ADD_FIELDS 'LIFNR      '   '供应商 ' 'LFA1' 'LIFNR' '' '' '' ''.
  ADD_FIELDS 'LIFNR_T      '   '供应商描述 ' '' '' '' '' '' ''.
  ADD_FIELDS 'LFDAT      '   '交货日期 ' 'LIKP' 'LFDAT' '' '' '' ''.
  ADD_FIELDS 'EBELN      '   '采购订单 ' 'EKPO' 'EBELN' '' '' '' ''.
  ADD_FIELDS 'EBELP      '   '采购订单行项目 ' 'EKPO' 'EBELP' '' '' '' ''.
  ADD_FIELDS 'MATNR      '   '物料编码 ' 'LIPS' 'MATNR' '' '' '' ''.
  ADD_FIELDS 'MATNR_T      '   '物料描述 ' '' '' '' '' '' ''.
  ADD_FIELDS 'LFIMG      '   '交货数量 ' 'LIPS' 'LFIMG' '' '' '' ''.
  ADD_FIELDS 'MEINS      '   '单位 ' 'LIPS' 'MEINS' '' '' '' ''.
  ADD_FIELDS 'LICHN      '   '供应商批次 ' 'LIPS' 'LICHN' '' '' '' ''.
  ADD_FIELDS 'ARKTX      '   '项目描述 ' '' '' '' '' '' ''.

ENDFORM.
FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB."调用SAP标准功能的工具栏图标,例排序、筛选、小计等功能
  SET PF-STATUS 'ZMMF024'.   "双击单引号里面的,新建一个同名的状态,也可以去在别的reportcopy一个标准的
  "                "再加上自己定义的按钮。比如program name :   RM07MLBS
ENDFORM.


FORM USER_COMMAND  USING R_UCOMM LIKE SY-UCOMM
               RS_SELFIELD TYPE SLIS_SELFIELD.

*  DATA: LV_EBELN TYPE EBELN.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = GC_GRID.
  CALL METHOD GC_GRID->CHECK_CHANGED_DATA.
  RS_SELFIELD-REFRESH = 'X'.

  CASE R_UCOMM.
    WHEN 'UPLOAD'.
      IF GV_ERROR EQ 'X'.
        MESSAGE '存在错误数据请纠正后再导入' TYPE 'E'.
      ELSE.
        PERFORM FRM_CREAT_VL31N.
      ENDIF.

*    WHEN '&IC1'.
*      CASE RS_SELFIELD-FIELDNAME.
*        WHEN 'EBELN'.
*          LV_EBELN = RS_SELFIELD-VALUE.
*          SET PARAMETER ID 'BES' FIELD  LV_EBELN.
*          CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
*
*      ENDCASE.

  ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREAT_MD12
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CREAT_VL31N .
  DATA: LS_ITAB   TYPE          TY_ITAB,
        LS_ITAB_1 TYPE          TY_ITAB,
        LT_ITAB   TYPE TABLE OF TY_ITAB.

  DATA: LV_POSNR TYPE LIPS-POSNR.

  DATA:DEL_HEADER LIKE BBP_INBD_L.
  DATA:DEL_TAB    LIKE BBP_INBD_D OCCURS 0 WITH HEADER LINE.
  DATA:DEL_RET    LIKE BAPIRETURN OCCURS 0 WITH HEADER LINE.
  DATA:DEL_NO     TYPE VBELN_VL.

  CLEAR LS_ITAB.
  LOOP AT GT_ITAB INTO LS_ITAB_1.
    CLEAR LS_ITAB.
    MOVE-CORRESPONDING LS_ITAB_1 TO LS_ITAB.

    AT NEW ZKEY.
      REFRESH: DEL_TAB[],
               DEL_RET[].
      CLEAR DEL_HEADER.
      DEL_HEADER-DELIV_DATE = LS_ITAB-LFDAT.
*      LV_POSNR = 10.
    ENDAT.

    CLEAR DEL_TAB.
    DEL_TAB-DELIV_ITEM = LS_ITAB-POSNR.
    DEL_TAB-DELIV_QTY  = LS_ITAB-LFIMG.
    DEL_TAB-MATERIAL   = LS_ITAB-MATNR.
*    DEL_TAB-MATL_DESC  = LS_ITAB-ARKTX.
    DEL_TAB-UNIT       = LS_ITAB-MEINS.
    DEL_TAB-PO_NUMBER  = LS_ITAB-EBELN.
    DEL_TAB-PO_ITEM    = LS_ITAB-EBELP.
    APPEND DEL_TAB.

    AT END OF ZKEY.
      CALL FUNCTION 'BBP_INB_DELIVERY_CREATE'
        EXPORTING
          IS_INB_DELIVERY_HEADER = DEL_HEADER
        IMPORTING
          EF_DELIVERY            = DEL_NO
        TABLES
          IT_INB_DELIVERY_DETAIL = DEL_TAB[]
          RETURN                 = DEL_RET[].

      IF SY-SUBRC = 0 AND DEL_NO <> ''.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            WAIT = 'X'.

        LOOP AT GT_ITAB ASSIGNING <FS_ITAB> WHERE ZKEY = LS_ITAB_1-ZKEY.
          IF <FS_ITAB>-LICHN IS NOT INITIAL.

            UPDATE LIPS SET  LICHN = <FS_ITAB>-LICHN
*                             ARKTX = <FS_ITAB>-ARKTX
                       WHERE VBELN = DEL_NO
                        AND  POSNR = <FS_ITAB>-POSNR.

          ENDIF.

          IF <FS_ITAB>-ARKTX IS NOT INITIAL.
            UPDATE LIPS SET  ARKTX = <FS_ITAB>-ARKTX
                       WHERE VBELN = DEL_NO
                        AND  POSNR = <FS_ITAB>-POSNR.

          ENDIF.

          IF SY-SUBRC EQ 0.
            COMMIT WORK.
            <FS_ITAB>-VBELN = DEL_NO.
          ENDIF.

          <FS_ITAB>-STATU = 'S'.
          <FS_ITAB>-CHK_LIGHTS = 3.
          <FS_ITAB>-MSG = '创建成功'.

        ENDLOOP.
      ELSE.

        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

        LOOP AT GT_ITAB ASSIGNING <FS_ITAB> WHERE ZKEY = LS_ITAB_1-ZKEY.
          <FS_ITAB>-STATU = 'E'.
          <FS_ITAB>-CHK_LIGHTS = 1.
          <FS_ITAB>-MSG = '创建内项交货失败'.
        ENDLOOP.

*        LS_RETURN-EBELN = LS_ITAB_1-EBELN.
*        LS_RETURN-TYPE = 'E'.
*        LS_RETURN-MESSAGE = '创建内项交货失败'.

      ENDIF.

    ENDAT.

*    LV_POSNR = LV_POSNR + 10.

    CLEAR LS_ITAB.
  ENDLOOP.

*  DATA: LT_ROW_INDEX TYPE LVC_T_ROW,
*        LT_ROW_NO    TYPE LVC_T_ROID,
*        LS_ROW_NO    TYPE LVC_S_ROID,
*        LV_LINES     TYPE I.

*  CALL METHOD GC_GRID->GET_SELECTED_ROWS
*    IMPORTING
**     ET_INDEX_ROWS = LT_ROW_INDEX
*      ET_ROW_NO = LT_ROW_NO.
*
*  DESCRIBE TABLE LT_ROW_NO LINES LV_LINES.
*  IF LV_LINES EQ 0.
*    MESSAGE '请选择需要导入的条目' TYPE 'E'.
*    EXIT.
*  ENDIF.

*  LOOP AT LT_ROW_NO INTO LS_ROW_NO.
*    READ TABLE GT_ITAB INTO LS_ITAB INDEX LS_ROW_NO-ROW_ID.
*    IF SY-SUBRC = 0.
*      APPEND LS_ITAB TO LT_ITAB.
*    ENDIF.
*  ENDLOOP.
*
*  LOOP AT LT_ITAB INTO LS_ITAB.
**    PERFORM FRM_CALL_VK12 USING LS_ITAB.
*  ENDLOOP.

ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值