SAP ABAP 传递内表数据到后台程序

这篇博客介绍了如何在SAP系统中通过内存共享来传递内表数据,实现从A程序到B程序的数据流转。A程序将内表数据导出到内存缓冲区,然后启动后台作业。B程序在后台执行时,从内存缓冲区导入数据并进行处理,如数据筛选、更新和调用函数执行操作。整个过程高效地完成了数据的后台处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一鸣要改一个程序,导入excel文件,放后台去执行,我给他改了一个,用了SAP的内存共享轻松传递了2张内表。

A程序,把内表数据放内存中,启动一个后台作业:

  EXPORT  GT_ALV TO SHARED BUFFER indx(aa) ID  'GT_ALV1'.
  EXPORT  gt_vlc TO SHARED BUFFER indx(bb) ID  'gt_vlc1'.



    "启动一个后台作业
          DATA :
                lv_jobname   TYPE tbtcjob-jobname,
                lv_jobcount      TYPE btcjobcnt.

        lv_jobname = 'ZPDR0037_TSP_BG'.


        CALL FUNCTION 'JOB_OPEN'
          EXPORTING
           JOBNAME                 = lv_jobname
         "  SDLSTRTDT               = lv_newdate
         "  SDLSTRTTM               = lv_newtime
           IMPORTING
            jobcount         = lv_jobcount.

        "调用需要跑JOB的程序
          SUBMIT ZPDR0037_TSP_BG
          USER SY-UNAME
          VIA JOB lv_jobname NUMBER lv_jobcount AND RETURN.

          CALL FUNCTION 'JOB_CLOSE'     "Release 这个Job
            EXPORTING
              jobcount             = lv_jobcount
              jobname              = lv_jobname
              strtimmed            = abap_true  "立即执行
            EXCEPTIONS
              cant_start_immediate = 1
              invalid_startdate    = 2
              jobname_missing      = 3
              job_close_failed     = 4
              job_nosteps          = 5
              job_notex            = 6
              lock_failed          = 7
              OTHERS               = 8.


        message '启动了一个后台作业!' TYPE 'I'."上传文件选择失败

B程序,在后台执行,接收内存中的内表数据,然后处理数据:

*&---------------------------------------------------------------------*
*& Report ZPDR0037_TSP_BG
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZPDR0037_TSP_BG.


DATA:  gt_alv    TYPE TABLE OF zspd0037_alv.
DATA:  gt_vlc    TYPE TABLE OF vlcvehicle.

  DATA:
    lt_vlcdata    TYPE TABLE OF vlcdiavehi,
    ls_vlcactdata TYPE vlcactdata.




  write:/ '处理...' .

      IMPORT GT_ALV  FROM SHARED BUFFER indx(aa) ID  'GT_ALV1'.
      IMPORT gt_vlc  FROM SHARED BUFFER indx(bb) ID  'gt_vlc1'.

      DELETE FROM SHARED BUFFER indx(aa) ID 'GT_ALV1'.
      DELETE FROM SHARED BUFFER indx(bb) ID 'gt_vlc1'.


DATA n TYPE i.

n = lines( gt_alv ).
  write:/ n.


  LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<ls_alv>) WHERE chkbox = 'X' AND id = space.



    READ TABLE gt_vlc INTO DATA(ls_vlc) WITH KEY zz_ordno = <ls_alv>-ordno.
    IF sy-subrc = 0.
      APPEND INITIAL LINE TO lt_vlcdata ASSIGNING FIELD-SYMBOL(<ls_vlcdata>).
      MOVE-CORRESPONDING ls_vlc TO <ls_vlcdata>.

      APPEND INITIAL LINE TO ls_vlcactdata-actdata_item ASSIGNING FIELD-SYMBOL(<ls_item>).
      <ls_item>-vguid = ls_vlc-vguid.
      <ls_item>-pddatu = <ls_alv>-pddatu.
      <ls_item>-vhvin = <ls_alv>-vhvin.
      <ls_item>-vhusg = <ls_alv>-vhusg.
      <ls_item>-vhsar = <ls_alv>-vhsar.
      <ls_item>-shlvl = <ls_alv>-shlvl.

      CALL FUNCTION 'VELO09_SET_ACTION'
        EXPORTING
          incoming_action_iv         = 'Z003'
          commit_iv                  = 'S'
        TABLES
          vlcdiavehi_ct              = lt_vlcdata
*         VLCH_MSSG_ET               =
*         VLCBAPICU_IT               =
        CHANGING
          vlcactdata_cs              = ls_vlcactdata
        EXCEPTIONS
          action_not_defined         = 1
          no_authority               = 2
          interlinked_action_error   = 3
          crea_prepare_failed        = 4
          action_not_performed       = 5
          action_not_compl_performed = 6
          OTHERS                     = 7.
      IF sy-subrc = 0.
        <ls_alv>-id = icon_green_light.
        <ls_alv>-msg = TEXT-e02.

        write:/ <ls_alv>-ordno && '处理完成,' && sy-DATUM && SY-UZEIT  .

      ELSE.
        <ls_alv>-id = icon_red_light.
        <ls_alv>-msg = TEXT-e03.

        write:/ <ls_alv>-ordno && '处理失败,' && sy-DATUM && SY-UZEIT  .

      ENDIF.
    ENDIF.



  ENDLOOP.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刘欣的博客

你将成为第一个打赏博主的人!

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

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

打赏作者

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

抵扣说明:

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

余额充值