涉及两个BAPI:录入数量BAPI_MATPHYSINV_COUNT

修改数量:BAPI_MATPHYSINV_CHANGECOUNT

REPORT  ZSC_133 NO STANDARD PAGE HEADING
                       MESSAGE-ID zsc.

TABLES:
  ISEG,IKPF.

type-pools: slis.
DATA:g_variant LIKE disvariant.
DATA: it_alv         TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA gt_fieldcat TYPE lvc_t_fcat .
DATA ls_fcat TYPE lvc_s_fcat .
DATA: g_status_set   TYPE slis_formname,
      g_layout       TYPE slis_layout_alv,           " alv layout
      g_sort         TYPE slis_t_sortinfo_alv,       " ALV sort table
      g_user_command TYPE slis_formname VALUE 'USER_COMMAND',
      g_events       TYPE slis_t_event.
*ALV相关声明
TYPE-POOLS: slis.
DATA: wcl_container TYPE REF TO cl_gui_custom_container, "一个容器
      wcl_alv TYPE REF TO cl_gui_alv_grid. "一个ALV对象
DATA gs_layout TYPE lvc_s_layo .
*data:count type i.
DATA: INPUT TYPE KCDE_INTERN_STRUC OCCURS 100 WITH HEADER LINE.
DATA: begin of t_itab.
        INCLUDE STRUCTURE ISEG.  "atflv
DATA: NAME1 TYPE t001w-NAME1.
DATA: LGOBE TYPE t001l-LGOBE.
DATA: MAKTX TYPE MAKT-MAKTX.
DATA: TDATE(10) TYPE C.
DATA: end of t_itab.
DATA: BEGIN OF T_HEAD.
data: IBLNR LIKE IKPF-IBLNR.
DATA: GJAHR LIKE IKPF-GJAHR.
DATA: ZLDAT LIKE IKPF-ZLDAT.
DATA: END OF T_HEAD.
DATA: gt_output LIKE TABLE OF t_itab.
DATA: gt_head like TABLE OF t_head.
DATA: GT_UP LIKE ISEG OCCURS 0 WITH HEADER LINE.
DATA: GT_UPDATE LIKE ISEG OCCURS 0 WITH HEADER LINE.
DATA: GT_UPHEAD LIKE IKPF OCCURS 0 WITH HEADER LINE.
DATA: T_DATE LIKE ISEG-ZLDAT.
DATA: T_I TYPE I.
data: T_IBLNR LIKE IKPF-IBLNR.
data: T_ZSTAT LIKE IKPF-ZSTAT.
DATA: T_XZAEL LIKE ISEG-XZAEL.
DATA: T_MESSAGE TYPE BAPIRET2-MESSAGE.
data: ITEMS LIKE BAPI_PHYSINV_ITEM OCCURS 0 WITH HEADER LINE.
data: C_ITEMS LIKE BAPI_PHYSINV_COUNT_ITEMS OCCURS 0 WITH HEADER LINE.
DATA: HEAD LIKE BAPI_PHYSINV_HEAD OCCURS 0 WITH HEADER LINE.
DATA: RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
DATA: SERIALNUMBERS LIKE BAPI_PHYSINV_SERIALNUMBERS OCCURS 0.
DATA: T_UNIT TYPE ISEG-ERFME.
DATA: T_P TYPE I.
*****************************
*----------------------------------------------------------------------*
* INTERNAL TABLES AND WORK AREAS                                       *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* GLOBAL VARIABLES                                                     *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* PARAMETERS AND SELECT-OPTIONS                                        *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK rad1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:
  P_IBLNR FOR ISEG-IBLNR,
  P_GJAHR FOR ISEG-GJAHR DEFAULT SY-DATUM+0(4).
PARAMETERS: r1 RADIOBUTTON GROUP rad1 DEFAULT 'X',
            r2 RADIOBUTTON GROUP rad1,
            r3 RADIOBUTTON GROUP rad1 .
PARAMETERS: P_LFILE LIKE RLGRAP-FILENAME .
SELECTION-SCREEN END OF BLOCK rad1.

************************************************************************
* MAIN PROCESS                                                         *
************************************************************************
*----------------------------------------------------------------------*
* INITIALIZATION                                                       *
*----------------------------------------------------------------------*
*INITIALIZATION.

**----------------------------------------------------------------------
* START-OF-SELECTION                                                   *
*----------------------------------------------------------------------*
*****取数
if r1 = 'X'.
  if P_IBLNR[] is INITIAL or P_GJAHR[] is INITIAL.
    MESSAGE i000 WITH '查询条件:凭证、年度不能为空!'.
    STOP.
  endif.
  PERFORM  get_data.
endif.
***导入
if r2 = 'X'OR r3 = 'X'.
  PERFORM GET_FILENAME USING P_LFILE
                       CHANGING P_LFILE.
  if p_lfile <> ''.
    PERFORM up_data.
  endif.
endif.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .
  select ISEG~IBLNR ISEG~GJAHR
    ISEG~WERKS T001W~NAME1
    ISEG~LGORT t001l~LGOBE
    ISEG~ZEILI ISEG~MATNR MAKT~MAKTX
    ISEG~CHARG ISEG~BSTAR
    ISEG~MENGE ISEG~MEINS ISEG~ERFMG ISEG~ERFME
    ISEG~ZLDAT
    ISEG~XZAEL
*    ISEG~ZLDAT AS TDATE
  INTO CORRESPONDING FIELDS OF TABLE GT_OUTPUT
  FROM ISEG
  JOIN T001W ON ISEG~WERKS = T001W~WERKS
  JOIN T001L ON ISEG~WERKS = T001L~WERKS AND ISEG~LGORT = T001L~LGORT
  JOIN MAKT ON ISEG~MATNR = MAKT~MATNR
  WHERE ISEG~IBLNR IN P_IBLNR AND
        ISEG~GJAHR IN P_GJAHR AND
        MAKT~SPRAS = 1.

LOOP AT GT_OUTPUT INTO T_ITAB.
    IF T_ITAB-ZLDAT <> '' AND T_ITAB-ZLDAT <> '00000000'.
      T_ITAB-TDATE = T_ITAB-ZLDAT.
      replace all occurrences of '-' in T_ITAB-TDATE with space.
      replace all occurrences of '.' in T_ITAB-TDATE with space.
      condense T_ITAB-TDATE no-gaps.
      MODIFY GT_OUTPUT FROM T_ITAB.
    ENDIF.
  ENDLOOP.
***呈现
  PERFORM display_data.

ENDFORM.                    " GET_DATA

FORM display_data.
  IF gt_output[] is INITIAL.
    return.
  ENDIF.
*  sort gt_display by PRUEFLOS MERKNR.
  PERFORM display_alv TABLES gt_output USING '库存盘点信息'.
ENDFORM.                    "DISPLAY_DATA

FORM build_fieldcat.

REFRESH it_alv.
  PERFORM alv_append USING 'IBLNR' '盘点凭证' .
  PERFORM alv_append USING 'GJAHR' '年度' .
  PERFORM alv_append USING 'WERKS' '工厂' .
  PERFORM alv_append USING 'NAME1' '工厂名称' .
  PERFORM alv_append USING 'LGORT' '库存地点' .
  PERFORM alv_append USING 'LGOBE' '库存名称'.
  PERFORM alv_append USING 'ZEILI' '行号'.

PERFORM alv_append USING 'MATNR' '产品代码' .
  PERFORM alv_append USING 'MAKTX' '产品名称' .

PERFORM alv_append USING 'CHARG' '批次' .
  PERFORM alv_append USING 'BSTAR' '存货类型' .
  PERFORM alv_append USING 'ERFMG' '盘点数量' .
  PERFORM alv_append USING 'ERFME' '盘点单位' .
*  PERFORM alv_append USING 'ZLDAT' '盘点日期'.
  PERFORM alv_append USING 'TDATE' '盘点日期'.
  PERFORM alv_append USING 'XZAEL' '盘点标记'.
*  PERFORM alv_append USING 'MENGE' '基本数量' .
*  PERFORM alv_append USING 'MEINS' '基本单位'.
ENDFORM.                    " file_upload

*&---------------------------------------------------------------------*
*&  incluede FORM display_ALV                                          *
*&---------------------------------------------------------------------*
FORM display_ALV TABLES it_data USING title.

PERFORM build_fieldcat.
  g_layout-colwidth_optimize = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = sy-repid
      it_fieldcat        = it_alv[]
      is_variant         = g_variant
      i_save             = 'X'
      is_layout          = g_layout
      i_grid_title       = title
    TABLES
      t_outtab           = it_data
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.

ENDFORM.

*&--------------------------------------------------------------------*
*&      Form  alv_append
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->FIELDNAME  text
*      -->SELTEXT_1  text
*---------------------------------------------------------------------*
FORM alv_append USING fieldname seltext_1.
  CLEAR it_alv.
  it_alv-fieldname   = fieldname.
  it_alv-seltext_l   = seltext_1.
  APPEND it_alv.
ENDFORM.                    "alv_append
*&---------------------------------------------------------------------*
*&      Form  UP_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UP_DATA .
  CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
    EXPORTING
      FILENAME                = P_LFILE
      I_BEGIN_COL             = 1
      I_BEGIN_ROW             = 1
      I_END_COL               = 256
      I_END_ROW               = 65536
    TABLES
      INTERN                  = INPUT
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.
  IF SY-SUBRC <> 0.
    MESSAGE E000(zsc) WITH '文件路径有误!'.
  ENDIF.

LOOP AT INPUT.
    IF input-row = '0001'.
      CONTINUE.             "第一行是字段名,直接跳过
    ELSE.

CASE INPUT-COL.
        WHEN '0001'.
          GT_UP-IBLNR = INPUT-VALUE.  "盘点凭证
        WHEN '0002'.
          GT_UP-GJAHR = INPUT-VALUE.  "年度
        WHEN '003'.
          GT_UP-WERKS = INPUT-VALUE.
        WHEN '005'.
          GT_UP-LGORT = INPUT-VALUE.
        WHEN '0007'.
          GT_UP-ZEILI = INPUT-VALUE.  "行号
        WHEN '0008'.
          GT_UP-MATNR = INPUT-VALUE.  "
        WHEN '0010'.
          GT_UP-CHARG = INPUT-VALUE.  "
        WHEN '0012'.
          GT_UP-ERFMG = INPUT-VALUE.  "盘点数量
          GT_UP-MENGE = INPUT-VALUE.  "基本数量
        WHEN '0014'.
          GT_UP-ZLDAT = INPUT-VALUE.  "盘点日期
      ENDCASE.

AT END OF ROW.
        APPEND GT_UP.
        CLEAR GT_UP.
      ENDAT.

ENDIF.

ENDLOOP.
***做处理
  CLEAR:GT_UPDATE.
  CLEAR:ITEMS.
  T_I = 0.
  LOOP AT GT_UP.
****盘点标记
    SELECT SINGLE DSTAT
    INTO T_ZSTAT
    FROM IKPF
    WHERE IKPF~IBLNR = GT_UP-IBLNR AND
          IKPF~GJAHR = GT_UP-GJAHR .
    IF T_ZSTAT = 'X'.
      CONCATENATE '凭证号:' GT_UP-IBLNR '年度:' GT_UP-GJAHR '提示:已经全部过账,不允许再导入!'  INTO T_MESSAGE.
      CONDENSE T_MESSAGE.
      MESSAGE I000(zsc) WITH T_MESSAGE.
      STOP.
    ENDIF.

SELECT SINGLE XDIFF
    INTO T_XZAEL
    FROM ISEG
    WHERE ISEG~IBLNR = GT_UP-IBLNR AND
          ISEG~GJAHR = GT_UP-GJAHR AND
          ISEG~ZEILI = GT_UP-ZEILI.
    IF T_XZAEL = 'X'.
      CONCATENATE '凭证号:' GT_UP-IBLNR '年度:' GT_UP-GJAHR '项目号:' GT_UP-ZEILI '提示:已经过账,不允许再导入!'  INTO T_MESSAGE.
      CONDENSE T_MESSAGE.
      MESSAGE I000(zsc) WITH T_MESSAGE.
      STOP.
    ENDIF.

***检测日期
*    replace all occurrences of '-' in GT_UP-ZLDAT with space.
*    condense GT_UP-ZLDAT no-gaps.
    IF GT_UP-ZLDAT = ''OR GT_UP-ZLDAT = '00000000'.
      MESSAGE I000(zsc) WITH '盘点日期不能为空,请核对导入文件!'.
      STOP.
    ENDIF.
    IF T_I = 0.
      T_DATE = GT_UP-ZLDAT.
      T_I = T_I + 1.
    ELSE.
      IF GT_UP-ZLDAT <> T_DATE.
        MESSAGE I000(zsc) WITH '盘点日期不一致,请核对导入文件!'.
        STOP.
      ENDIF.
    ENDIF.
    SELECT *
    INTO CORRESPONDING FIELDS OF GT_UPDATE
    FROM ISEG
    WHERE ISEG~IBLNR = GT_UP-IBLNR AND
          ISEG~GJAHR = GT_UP-GJAHR AND
          ISEG~ZEILI = GT_UP-ZEILI.
    ENDSELECT.

IF SY-SUBRC = 0.
      IF R2 = 'X' AND GT_UPDATE-XZAEL = 'X'.
        CONCATENATE '凭证号:' GT_UP-IBLNR '年度:' GT_UP-GJAHR '项目号:' GT_UP-ZEILI '提示:已经盘点过,请选择批量修改!'  INTO T_MESSAGE.
        CONDENSE T_MESSAGE.
        MESSAGE I000(zsc) WITH T_MESSAGE.
        STOP.
      ENDIF.
      IF R3 = 'X' AND GT_UPDATE-XZAEL = ''.
        CONCATENATE '凭证号:' GT_UP-IBLNR '年度:' GT_UP-GJAHR '项目号:' GT_UP-ZEILI '提示:还未盘点,请选择批量输入!'  INTO T_MESSAGE.
        CONDENSE T_MESSAGE.
        MESSAGE I000(zsc) WITH T_MESSAGE.
        STOP.
      ENDIF.
***检测明细项目
      if GT_UP-MATNR = GT_UPDATE-MATNR AND GT_UP-WERKS = GT_UPDATE-WERKS AND GT_UPDATE-LGORT = GT_UP-LGORT AND GT_UP-CHARG = GT_UPDATE-CHARG.

ELSE.
        CONCATENATE '凭证号:' GT_UP-IBLNR '年度:' GT_UP-GJAHR '项目号:' GT_UP-ZEILI '提示:物料、工厂、库存、批次有不对,请核对!'  INTO T_MESSAGE.
        CONDENSE T_MESSAGE.
        MESSAGE I000(zsc) WITH T_MESSAGE.
        STOP.
      ENDIF.
*      IF GT_UP-ERFMG <> ''.
***    调BAPI 2013.4.19 jwy add
*        ITEMS-PHYSINVENTORY = GT_UPDATE-IBLNR.
*        ITEMS-FISCALYEAR = GT_UPDATE-GJAHR.
*        ITEMS-ITEM = GT_UPDATE-ZEILI.
*        ITEMS-MATERIAL = GT_UPDATE-MATNR.
*        ITEMS-PLANT = GT_UPDATE-WERKS.
*        ITEMS-STGE_LOC = GT_UPDATE-LGORT.
*        ITEMS-BATCH = GT_UPDATE-CHARG.
*        ITEMS-SPEC_STOCK = GT_UPDATE-SOBKZ.
*        ITEMS-STOCK_TYPE = GT_UPDATE-BSTAR.
*        ITEMS-SALES_ORD = GT_UPDATE-KDAUF.
*        ITEMS-S_ORD_ITEM = GT_UPDATE-KDPOS.
*        ITEMS-SCHED_LINE = GT_UPDATE-KDEIN.
*        ITEMS-VENDOR = GT_UPDATE-LIFNR.
*        ITEMS-CUSTOMER = GT_UPDATE-KUNNR.
*        ITEMS-PRODBINLOC = GT_UPDATE-

GT_UPDATE-ERFMG = GT_UP-ERFMG.
      GT_UPDATE-MENGE = GT_UP-MENGE.
      GT_UPDATE-USNAZ = SY-UNAME.
      GT_UPDATE-ZLDAT = GT_UP-ZLDAT.
      GT_UPDATE-XZAEL = 'X'.

T_HEAD-IBLNR = GT_UP-IBLNR.
      T_HEAD-GJAHR = GT_UP-GJAHR.
      T_HEAD-ZLDAT = GT_UP-ZLDAT.
      APPEND T_HEAD TO GT_HEAD.
      CLEAR T_HEAD.

APPEND GT_UPDATE.
      CLEAR:GT_UPDATE.
*      ENDIF.
*      MODIFY GT_UPDATE.
    ENDIF.
  ENDLOOP.

***处理抬头
  T_P = 0.
  CLEAR:GT_UPHEAD.
  sort GT_HEAD by IBLNR GJAHR.
  DELETE ADJACENT DUPLICATES FROM GT_HEAD COMPARING ALL FIELDS.
  CLEAR:HEAD,ITEMS,C_ITEMS.
*** 2013.4.19 取盘点项目数据
  LOOP AT GT_HEAD INTO T_HEAD.
    T_I = 0.
    CALL FUNCTION 'BAPI_MATPHYSINV_GETDETAIL'
      EXPORTING
        PHYSINVENTORY = T_HEAD-IBLNR
        FISCALYEAR    = T_HEAD-GJAHR
      IMPORTING
        HEAD          = HEAD
      TABLES
        ITEMS         = ITEMS
        RETURN        = RETURN
      EXCEPTIONS
        OTHERS        = 01.

if SY-SUBRC <> 0.
      MESSAGE I000(zsc) WITH '取数失败!'.
      STOP.
    endif.

****处理
    REFRESH C_ITEMS.
    CLEAR:C_ITEMS.
    LOOP AT GT_UPDATE WHERE IBLNR = T_HEAD-IBLNR AND GJAHR = T_HEAD-GJAHR.
*        READ TABLE ITEMS WITH KEY PHYSINVENTORY = GT_UPDATE-IBLNR AND FISCALYEAR = GT_UPDATE-
      C_ITEMS-ITEM = GT_UPDATE-ZEILI.
      C_ITEMS-MATERIAL = GT_UPDATE-MATNR.
      C_ITEMS-BATCH = GT_UPDATE-CHARG.
      C_ITEMS-ENTRY_QNT = GT_UPDATE-ERFMG.
      C_ITEMS-ENTRY_UOM = GT_UPDATE-ERFME.
      if GT_UPDATE-ERFMG = 0.
        C_ITEMS-ZERO_COUNT = 'X'.
      endif.
****单位转换
      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
        EXPORTING
          INPUT          = T_UNIT
          LANGUAGE       = sy-langu
        IMPORTING
          OUTPUT         = GT_UPDATE-ERFME
        EXCEPTIONS
          UNIT_NOT_FOUND = 1
          OTHERS         = 2.

IF SY-SUBRC <> 0.
        C_ITEMS-ENTRY_UOM = T_UNIT.
      ELSE.
*         MESSAGE I000(zsc) WITH '单位转换出错!'.
*         STOP.
      ENDIF.
      APPEND C_ITEMS.
      CLEAR: C_ITEMS.
    ENDLOOP.
****单位转换

****修改数量MI05
*    CALL FUNCTION 'BAPI_MATPHYSINV_CHANGECOUNT'
*    EXPORTING
*      PERCENTAGE_VARIANCE = T_HEAD-IBLNR
*      FISCALYEAR = T_HEAD-GJAHR
**      PHYSINVENTORY = OBJECT-KEY-PHYSINVENTORY
*    TABLES
*      ITEMS = C_ITEMS
*      RETURN = RETURN
*      SERIALNUMBERS = SERIALNUMBERS
*    EXCEPTIONS
*      OTHERS = 01.
****录入数量MI04
    if r2 = 'X'.
      CALL FUNCTION 'BAPI_MATPHYSINV_COUNT'
        EXPORTING
          PHYSINVENTORY       = T_HEAD-IBLNR
          FISCALYEAR          = T_HEAD-GJAHR
*         PERCENTAGE_VARIANCE = PERCENTAGE_VARIANCE
          COUNT_DATE          = T_HEAD-ZLDAT
        TABLES
          ITEMS               = C_ITEMS
          RETURN              = RETURN
*         SERIALNUMBERS       = SERIALNUMBERS
*         EXTENSIONIN         = EXTENSIONIN
        EXCEPTIONS
          OTHERS              = 1.
    endif.
    if r3 = 'X'.
      CALL FUNCTION 'BAPI_MATPHYSINV_CHANGECOUNT'
        EXPORTING
          PHYSINVENTORY       = T_HEAD-IBLNR
          FISCALYEAR          = T_HEAD-GJAHR
*         PERCENTAGE_VARIANCE = PERCENTAGE_VARIANCE
        TABLES
          ITEMS               = C_ITEMS
          RETURN              = RETURN
*         SERIALNUMBERS       = SERIALNUMBERS
*         EXTENSIONIN         = EXTENSIONIN
        EXCEPTIONS
          OTHERS              = 1.
    endif.

LOOP AT RETURN WHERE TYPE = 'E'.
      CONCATENATE T_MESSAGE ',' RETURN-MESSAGE INTO T_MESSAGE.
      CONDENSE T_MESSAGE.
      T_I = 1.
    ENDLOOP.
    IF T_I = 0.
      COMMIT WORK.
      IF SY-SUBRC = 0.
        T_P = 1.
*        MESSAGE S000(zsc) WITH '数据上传成功!'.
      ELSE.
        MESSAGE S000(zsc) WITH '数据上传失败!'.
        STOP.
      ENDIF.
    ELSE.
      MESSAGE I000(zsc) WITH T_MESSAGE.
      STOP.
    ENDIF.
    REFRESH return.
    CLEAR:return.
  ENDLOOP.
  IF T_P = 1.
    MESSAGE S000(zsc) WITH '数据上传成功!'.
  ENDIF.

*  IF GT_UPDATE[] IS INITIAL.
*    MESSAGE I000(zsc) WITH '不存在需要修改的记录行,请核对导入文件!'.
*  ELSE.
*    MODIFY ISEG FROM TABLE GT_UPDATE.
*
*    IF SY-SUBRC = 0.
**      MESSAGE S000(zsc) WITH '数据上传成功!'.
*    ELSE.
*      MESSAGE E000(zsc) WITH '数据上传失败!'.
*    ENDIF.
*  ENDIF.
*  LOOP AT GT_HEAD INTO T_HEAD.
*    SELECT *
*    INTO CORRESPONDING FIELDS OF GT_UPHEAD
*    FROM IKPF
*    WHERE IKPF~IBLNR = T_HEAD-IBLNR AND
*          IKPF~GJAHR = T_HEAD-GJAHR .
*    ENDSELECT.
*    IF SY-SUBRC = 0.
*      GT_UPHEAD-ZLDAT = T_HEAD-ZLDAT.
*****判断是否全部盘点
*      SELECT SINGLE IBLNR INTO T_IBLNR
*      FROM ISEG
*      WHERE ISEG~IBLNR = T_HEAD-IBLNR AND
*        ISEG~GJAHR = T_HEAD-GJAHR AND
*        ISEG~XZAEL <> 'X'.
*      IF SY-SUBRC = 0.
*        GT_UPHEAD-ZSTAT = 'A'.
*      ELSE.
*        GT_UPHEAD-ZSTAT = 'X'.
*      ENDIF.
*      APPEND GT_UPHEAD.
*      CLEAR:GT_UPHEAD.
*    ENDIF.
*  ENDLOOP.
*
*  IF GT_UPHEAD[] IS INITIAL.
*    MESSAGE I000(zsc) WITH '不存在需要修改的记录行,请核对导入文件!'.
*  ELSE.
*    MODIFY IKPF FROM TABLE GT_UPHEAD.
*    IF SY-SUBRC = 0.
*      MESSAGE S000(zsc) WITH '数据上传成功!'.
*    ELSE.
*      MESSAGE E000(zsc) WITH '数据上传失败!'.
*      STOP.
*    ENDIF.
*  ENDIF.
****
*  PERFORM  get_data.
ENDFORM.                    " UP_DATA

*&---------------------------------------------------------------------*
*&      Form  get_filename
*&---------------------------------------------------------------------*
FORM GET_FILENAME   USING  P_PATH    LIKE RLGRAP-FILENAME
                        CHANGING P_FILE  LIKE RLGRAP-FILENAME.
  DATA:L_WRK_FILENAME LIKE RLGRAP-FILENAME,
       L_WRK_MASK     LIKE LGRWO-EXP_FILE.
* mask
  L_WRK_MASK = ',*.xls,*.xls.'.

* get file name
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      DEF_PATH         = P_FILE
      MASK             = L_WRK_MASK
      MODE             = 'O'
    IMPORTING
      FILENAME         = L_WRK_FILENAME
    EXCEPTIONS
      INV_WINSYS       = 01
      NO_BATCH         = 02
      SELECTION_CANCEL = 03
      SELECTION_ERROR  = 04
      OTHERS           = 05.

IF SY-SUBRC = 0.
    P_FILE = L_WRK_FILENAME.
  ELSE.
  ENDIF.
ENDFORM.                    " get_filename

物料批量盘点,调用其中两个BAPI BAPI_MATPHYSINV_COUNT BAPI_MATPHYSINV_CHANGECOUNT的更多相关文章

  1. SQLServer 批量插入数据的两种方法

    SQLServer 批量插入数据的两种方法-发布:dxy 字体:[增加 减小] 类型:转载 在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Ins ...

  2. 利用jQuery扩展接口为jQuery框架定义了两个自定义函数,然后调用这两个函数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. DLL调用的两种方式(IDE:VC6.0,C++)

    原文:http://www.cnblogs.com/Pickuper/articles/2050409.html DLL调用有两种方式,一种是静态调用,另外一种是动态调用 (一)静态调用 静态调用是一 ...

  4. fork()函数,一次调用,两次返回

    参考自:http://blog.csdn.net/dog_in_yellow/archive/2008/01/13/2041079.aspx 以前一直迷惑,什么叫一次调用,两次返回.通过上网搜索,终于 ...

  5. Qt 学习之路 2(19):事件的接受与忽略(当重写事件回调函数时,时刻注意是否需要通过调用父类的同名函数来确保原有实现仍能进行!有好几个例子。为什么要这么做?而不是自己去手动调用这两个函数呢?因为我们无法确认父类中的这个处理函数有没有额外的操作)

    版本: 2012-09-29 2013-04-23 更新有关accept()和ignore()函数的相关内容. 2013-12-02 增加有关accept()和ignore()函数的示例. 上一章我们 ...

  6. java SWing事件调用的两种机制

      Java(91)  /** * java swing中事件调用的两种机制: * (一)响应机制 * (二)回调机制 */ package test; import java.awt.*; impo ...

  7. 用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat

    用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat 摘自:https://zhidao.baidu.com/question/492732911.html @echo off ...

  8. neo4j批量导入数据的两种解决方案

    neo4j批量导入数据有两种方法,第一种是使用cypher语法中的LOAD CSV,第二种是使用neo4j自带的工具neo4j-admin import. LOAD CSV 导入的文件必须是csv文件 ...

  9. sql server中批量插入与更新两种解决方案分享

    若只是需要大批量插入数据使用bcp是最好的,若同时需要插入.删除.更新建议使用SqlDataAdapter我测试过有很高的效率,一般情况下这两种就满足需求了 bcp方式 复制代码 代码如下: /// ...

随机推荐

  1. oracle删除临时表空间一直处于等待状态

    现象: 新建一个临时表空间mytemp 然后将其改为默认临时表空间后,执行一条带order by的查询语句,查询出结构后, 修改默认临时表空间为原来的temp,然后执行 drop tablespace ...

  2. 洛谷P3370 && 字符串哈希讲解

    字符串哈希 寻找长度为n的主串s中的的匹配串T(长度为m)出现的位置或者次数问题属于字符串匹配问题. 朴素(一般)的想法就是从一个字符串的头开始for循环查找,当查找的一个字符与匹配串首字符相同时,往 ...

  3. 处理并解决mysql8.0 caching-sha2-password问题,开启远程访问

    原文:https://blog.csdn.net/u010026255/article/details/80062153 启动mysql服务:service mysqld start ALTER US ...

  4. Eclipse中SVN分支与合并

    一.创建分支 Eclipse中利用svn插件创建分支,如下图 分支创建完毕,查看svn资源库中可以看到,分支信息: 二.分支合并主干 1.切换到分支,如图 切换: 2.修改分支信息 在pojo中新增T ...

  5. Python 正则表达式Ⅲ

    re.match与re.search的区别 re.match只匹配字符串的开始,如果字符串开始https://www.xuanhe.net/不符合正则表达式,则匹配失败,函数返回None:而re.se ...

  6. 对数据劫持 OR 数据代理 的研究------------引用

    数据劫持,也叫数据代理. 所谓数据劫持,指的是在访问或者修改对象的某个属性时,通过一段代码拦截这个行为,进行额外的操作或者修改返回结果.比较典型的是 Object.defineProperty() 和 ...

  7. Java多线程和并发(十一),CAS(Compare and Swap)

    目录 1.CAS简介 2.CAS多数情况下对开发者来说是透明的 3.CAS缺点 十一.CAS(Compare and Swap) Synchronized直观意义上是一种悲观锁 cas则是乐观锁的一种 ...

  8. Java多线程和并发(一),进程与线程的区别

    目录 1.进程和线程的由来 2.进程和线程的定义 3.进程和线程的区别 一.进程和线程的区别 1.进程和线程的由来 2.进程和线程的定义 进程是资源分配的最小单位,线程是CPU调度的最小单位 3.进程 ...

  9. CF D. Number Of Permutations 排列

    挺水的一道题~ 拿全排列随便乘一下就好了. #include <cstdio> #include <algorithm> #define N 300004 #define ll ...

  10. 【UTR #3】量子破碎

    一道有趣的题. 看到按位的矩阵运算,如果对FWT比较熟悉的话,会比较容易地想到. 这种形式也就FWT等转移里面有吧--就算有其他的也难构造出来. 然而FWT的矩阵并不是酉矩阵(也就是满足 \(AA^T ...