STO业务无法创建DN的解决方法

STO业务无法创建DN的解决方法

对于一些STO或公司间交易的业务,有时会出现无法为PO创建交货的情况,原因可能是在PO中修改了交货日期、物料、工厂等信息后表VETVG(库存调拔的交货到期索引)的相关条目可能会发生丢失,解决的方法是运行一个由SAP官方提供的程序,其代码如下:

*&---------------------------------------------------------------------*
*& Report ZKORVETV
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Report  ZKORVETV                                                    *
*&                                                                     *
*&---------------------------------------------------------------------*
*& Rebuild VETVG-entries according to note 61148                       *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT ZKORVETV.

TABLESekpoekkoekpvvetvg.

DATABEGIN OF xekpv OCCURS 10.
        INCLUDE STRUCTURE ekpv.
DATAEND OF xekpv.
DATABEGIN OF xvetvg OCCURS 10.
        INCLUDE STRUCTURE vetvg.
DATA:   ledatn LIKE vetvg-ledat,
      END OF xvetvg.
DATABEGIN OF tvetvg OCCURS 10.
        INCLUDE STRUCTURE vetvg.
DATAEND OF tvetvg.
DATABEGIN OF vetvgkey,
        mandt LIKE vetvg-mandt,
        vstel LIKE vetvg-vstel,
        ledat LIKE vetvg-ledat,
        lprio LIKE vetvg-lprio,
        route LIKE vetvg-route,
        spdnr LIKE vetvg-spdnr,
        wadat LIKE vetvg-wadat,
        kunwe LIKE vetvg-kunwe,
        vbeln LIKE vetvg-vbeln,
      END OF vetvgkey.

PARAMETERSi_ebeln LIKE ekpo-ebeln.
PARAMETERSdb_upd.

CHECK i_ebeln NE space.

SELECT FROM ekpv APPENDING TABLE xekpv WHERE ebeln EQ i_ebeln.

CHECK sy-subrc EQ 0.
SORT xekpv BY ebeln ebelp.

*- aufbauen index vetvg
LOOP AT xekpv.
  CHECK xekpv-ledat NE 0.
  SELECT SINGLE FROM ekko WHERE ebeln EQ xekpv-ebeln.
  CHECK sy-subrc EQ 0.

  SELECT SINGLE FROM ekpo WHERE ebeln EQ xekpv-ebeln
                            
AND   ebelp EQ xekpv-ebelp.
  CHECK sy-subrc EQ 0.
  CHECK ekpo-loekz NE 'L'.
  CHECK ekpo-elikz EQ space.

  MOVE-CORRESPONDING xekpv TO vetvgkey.
  vetvgkey-vbeln xekpv-ebeln.
  vetvgkey-kunwe xekpv-kunnr.
  CLEAR vetvgkey-ledat.

*- prüfen, ob eintrag mit gleichem datenteil bereits vorhanden
  READ TABLE xvetvg WITH KEY vetvgkey BINARY SEARCH.

  CASE sy-subrc.
**- eintrag vorhanden
    WHEN 0.
**- ledat neu versorgen, wenn kleiner
      IF xekpv-ledat LT xvetvg-ledatn.
        xvetvg-ledatn xekpv-ledat.
        MODIFY xvetvg INDEX sy-tabix.
      ENDIF.

**   eintrag noch nicht vorhanden
    WHEN 4.
      MOVE-CORRESPONDING xekpv TO xvetvg.
      xvetvg-vbeln  xekpv-ebeln.
      xvetvg-kunwe  xekpv-kunnr.
      xvetvg-kunnr  xekpv-kunag.
      xvetvg-ledatn xekpv-ledat.
      xvetvg-auart  ekko-bsart.
      xvetvg-reswk  ekko-reswk.
      CLEAR xvetvg-ledat.
      INSERT xvetvg INDEX sy-tabix.

    WHEN 8.
      MOVE-CORRESPONDING xekpv TO xvetvg.
      xvetvg-vbeln  xekpv-ebeln.
      xvetvg-kunwe  xekpv-kunnr.
      xvetvg-kunnr  xekpv-kunag.
      xvetvg-ledatn xekpv-ledat.
      xvetvg-auart  ekko-bsart.
      xvetvg-reswk  ekko-reswk.
      CLEAR xvetvg-ledat.
      APPEND xvetvg.
  ENDCASE.

ENDLOOP.

WRITE'old records of table VETVG'.
ULINE.

SELECT FROM vetvg WHERE vbeln EQ i_ebeln.
  WRITE/ vetvg-vstel,
         vetvg-ledat,
         vetvg-lprio,
         vetvg-route,
         vetvg-spdnr,
         vetvg-wadat,
         vetvg-kunwe,
         vetvg-vbeln,
         vetvg-vkorg,
         vetvg-vtweg,
         vetvg-spart,
         vetvg-auart,
         vetvg-reswk.
  IF db_upd NE space.
    DELETE vetvg.
  ENDIF.
ENDSELECT.

SKIP 2.
WRITE'new records of table VETVG'.
ULINE.

LOOP AT xvetvg.
  CHECK xvetvg-ledatn NE 0.
  MOVE xvetvg TO tvetvg.
  tvetvg-ledat xvetvg-ledatn.
  APPEND tvetvg.
  MOVE tvetvg TO vetvg.
  WRITE/ vetvg-vstel,
         vetvg-ledat,
         vetvg-lprio,
         vetvg-route,
         vetvg-spdnr,
         vetvg-wadat,
         vetvg-kunwe,
         vetvg-vbeln,
         vetvg-vkorg,
         vetvg-vtweg,
         vetvg-spart,
         vetvg-auart,
         vetvg-reswk.
  IF db_upd NE space.
    INSERT vetvg.                                           "wegen 2.2
  ENDIF.
ENDLOOP.

执行即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值