SAP LT01创建转储 L_TO_CREATE_MULTIPLE 及前台操作

目录

LT01 转储前台操作

用L_TO_CREATE_MULTIPLE做转储

数据的传参

 TRY-CATCH 异常捕获

代码展示 


LT01 转储前台操作

首先输入T-CODE LT01 进入一下界面

如图所示输入必输项(数据用自个的)   然后回车

 回车后会进入下面的界面输入从.......到目的地的数据,数量也要输

 然后在点击回车,回车之后会返回到创建转储单:初始屏幕 

然后屏幕左下角会显示转储订单号

到这里就已经转储成功了 

用L_TO_CREATE_MULTIPLE做转储

 我们已经熟悉了前台操作,接下用代码(这个函数模块:L_TO_CREATE_MULTIPLE)实现他的转储就容易许多了.因为我们在做前台操作时所输入的数据就是我们要传进L_TO_CREATE_MULTIPLE函数模块的值.

本篇博客做的是接口,所以大家可以参考web service 接口操作,再次之前最好看一下SAP Web Service接口测试及数据传输问题 “顺便吐槽一下国庆假期. 这篇博客讲的有一些细节性的问题,可以提供给大家做参考.

我先一段一段的分析代码最后把完整代码放在最后

数据的传参

 151~152行他的意思是将穿过来的目的仓储区和目的仓位转换成大写再赋值.

为什么要这样做?

因为我在postman测试传入小写,返回数据是错的.可以参考:SAP Web Service接口测试及数据传输问题 “顺便吐槽一下国庆假期

右面的这些数据就是我在前台操作时输入的数据,只不过,不需要我们输入了,而是需要在接口的输入和数据库中查询出来数据,然后再传进去

 TRY-CATCH 异常捕获

为什么要进行TEY-CATCH ?

因为我们如果输入了一些错误的数据,导致转储失败,但不知道哪里出现错误了,也不知道是哪个字段出现的错误,因此我们要对他进行TRY-CATCH捕获,并且把他用接口输出出去,给用户一个提示.

注意:如果代码执行到了CATCH就说明他一定出现错误,(前提是你不需要其他操作了)所以一定要在后面加上EXIT退出程序,要不然后面的代码代码会继续执行下去,而且SY-SUBRC = 0

我这里添加是因为我只需要做转储,不需要其他的操作,转储失败就直接退出.

 如果不晓得他的异常类是什么,你就在postman或soapUI中测试一下,在到SAP中使用SRT_LOG中查看他的异常类

用接口输出的异常消息就是你SE91查看到的消息

代码展示 

以下代码仅提供大家做参考 .欢迎评论区留言

FUNCTION zpp_shifting_001 .
*"----------------------------------------------------------------------
*"*"本地接口:
*"  EXPORTING
*"     VALUE(MSGTYPE) TYPE  STRING
*"     VALUE(MESSAGE) TYPE  STRING
*"  TABLES
*"      INT_DATA STRUCTURE  ZPP_SHIF0003 OPTIONAL
*"      OUT_DATA STRUCTURE  ZPP_SHIF0001 OPTIONAL
*"----------------------------------------------------------------------
  TYPES:BEGIN OF ty_data,
          aufnr TYPE afpo-aufnr,
          matnr TYPE afpo-matnr,
          dwerk TYPE afpo-dwerk,
          vltyp TYPE ltap-vltyp,
          lgort TYPE ltap-lgort,
          lgnum TYPE ltap-lgnum,
          werks TYPE ltap-werks,
          mblnr TYPE mseg-mblnr,
          nlpla TYPE ltap-nlpla,
          nlber TYPE ltap-nlber,
        END OF ty_data.

  DATA:lt_data TYPE TABLE OF ty_data,
       ls_data TYPE ty_data.

  DATA:gt_data TYPE TABLE OF zpp_shif0003,
       gs_data TYPE zpp_shif0003.

  DATA: iv_lgnum TYPE ltak-lgnum, "仓库号
        iv_bwlvs TYPE ltak-bwlvs, "移动类型
        iv_tanum TYPE ltak-tanum. "转储单号

  DATA: it_ltap_creat TYPE TABLE OF ltap_creat,
        is_ltap_creat TYPE ltap_creat.

  DATA:return TYPE  TABLE OF bapiret2  WITH HEADER LINE.
  DATA:catch_error TYPE REF TO cx_sy_message_in_plugin_mode.

  LOOP AT int_data.
    int_data-aufnr = |{ int_data-aufnr ALPHA = IN }|.
    MODIFY int_data.
  ENDLOOP.

  IF NOT int_data[] IS INITIAL.

     SELECT mseg~mblnr
      FROM mseg
      LEFT JOIN afpo ON afpo~aufnr = mseg~aufnr
      INTO TABLE @DATA(lv_mblnr)
      FOR ALL ENTRIES IN @int_data
      WHERE mseg~aufnr = @int_data-aufnr.
    IF lv_mblnr IS   NOT INITIAL.
      SELECT
        ltap~vltyp,
        ltap~lgort,
        ltap~lgnum,
        ltap~werks,
        ltap~nistm,
        ltap~nlpla,
        ltap~wenum,
        ltap~nltyp,
        ltap~nlber,
        ltap~vlpla,
        ltap~matnr,
        ltap~vlenr,
        ltap~meins,
        ltap~sobkz,
        ltap~sonum,
        ltap~vlber,
        afpo~aufnr
        INTO  TABLE @DATA(lt_ltap)
        FROM afpo
        LEFT JOIN ltap ON afpo~matnr = ltap~matnr
                       AND afpo~dwerk = ltap~werks
        FOR ALL ENTRIES IN @lv_mblnr
        WHERE afpo~aufnr = @int_data-aufnr
        AND ltap~wenum = @lv_mblnr-mblnr
        AND ltap~nltyp = 'Z01'
        AND ltap~lgort = '1001'
        AND ltap~werks IN ( 3110 , 3210 ,3310 ) .

    ENDIF.

  ELSE.
    msgtype = 'E'.
    message = '输入表为空,请检查输入!'.
  ENDIF..

  SORT lt_ltap BY wenum.
  iv_bwlvs = '999'. "移动类型

  LOOP AT lt_ltap INTO DATA(ls_ltap).
    iv_lgnum = ls_ltap-lgnum. "仓库号
    is_ltap_creat-vltyp = ls_ltap-nltyp."源仓储类型
    is_ltap_creat-vlber = ls_ltap-nlber."源发地仓储区
    is_ltap_creat-vlpla = ls_ltap-nlpla."源发地仓储位

    READ TABLE int_data INTO DATA(ls_int_data) WITH  KEY aufnr = ls_ltap-aufnr.
    is_ltap_creat-nltyp = 'Z01'."目的地仓储类型
    is_ltap_creat-nlber = to_upper( ls_int_data-nlber ) ."目的地仓储区
    is_ltap_creat-nlpla = to_upper( ls_int_data-nlpla )."目的地仓位

    is_ltap_creat-matnr = ls_ltap-matnr."物料编号
    is_ltap_creat-werks = ls_ltap-werks."工厂
    is_ltap_creat-lgort = ls_ltap-lgort."存储地点
    is_ltap_creat-vlenr = ls_ltap-vlenr."源发地仓储单位编号
    is_ltap_creat-altme = ls_ltap-meins."数量计量单位
    is_ltap_creat-anfme = ls_ltap-nistm."数量
    is_ltap_creat-sobkz = ls_ltap-sobkz."特殊库存标识
    is_ltap_creat-sonum = ls_ltap-sonum."特殊库存编号
    APPEND is_ltap_creat TO it_ltap_creat.
    CLEAR:is_ltap_creat.

  ENDLOOP.
  TRY.

      CALL FUNCTION 'L_TO_CREATE_MULTIPLE'
        EXPORTING
          i_lgnum                = iv_lgnum "
          i_bwlvs                = iv_bwlvs "
          i_commit_work          = 'X'
          i_bname                = sy-uname
        IMPORTING
          e_tanum                = iv_tanum
        TABLES
          t_ltap_creat           = it_ltap_creat
        EXCEPTIONS
          no_to_created          = 1
          bwlvs_wrong            = 2
          betyp_wrong            = 3
          benum_missing          = 4
          betyp_missing          = 5
          foreign_lock           = 6
          vltyp_wrong            = 7
          vlpla_wrong            = 8
          vltyp_missing          = 9
          nltyp_wrong            = 10
          nlpla_wrong            = 11
          nltyp_missing          = 12
          rltyp_wrong            = 13
          rlpla_wrong            = 14
          rltyp_missing          = 15
          squit_forbidden        = 16
          manual_to_forbidden    = 17
          letyp_wrong            = 18
          vlpla_missing          = 19
          nlpla_missing          = 20
          sobkz_wrong            = 21
          sobkz_missing          = 22
          sonum_missing          = 23
          bestq_wrong            = 24
          lgber_wrong            = 25
          xfeld_wrong            = 26
          date_wrong             = 27
          drukz_wrong            = 28
          ldest_wrong            = 29
          update_without_commit  = 30
          no_authority           = 31
          material_not_found     = 32
          lenum_wrong            = 33
          matnr_missing          = 34
          werks_missing          = 35
          anfme_missing          = 36
          altme_missing          = 37
          lgort_wrong_or_missing = 38
                                   OTHERS.
    CATCH cx_sy_message_in_plugin_mode INTO catch_error.
      msgtype = 'E'.
      MESSAGE ID     sy-msgid
              TYPE   sy-msgty
              NUMBER sy-msgno
              INTO   message.
     EXIT.
  ENDTRY.
  IF sy-subrc <> 0 .
    msgtype = 'E'.
    MESSAGE ID     sy-msgid
            TYPE   sy-msgty
            NUMBER sy-msgno
            WITH   sy-msgv1
                   sy-msgv2
            INTO   message.

    EXIT.
  ELSE.
    out_data-tanum = iv_tanum. "转储单号
    APPEND  out_data.
    msgtype = 'S'.
    message = '转储' && iv_tanum  && '成功'.
    RETURN-type = 'S'.
    MESSAGE ID     sy-msgid
            TYPE   sy-msgty
            NUMBER sy-msgno
            WITH   sy-msgv1
                   sy-msgv2
            INTO   return-message  .

  ENDIF.

ENDFUNCTION.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

雨天行舟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值