SD VL06F增强 user-exit V50Q0001

本文详细介绍了一种使用SAP ABAP进行复杂数据处理的方法。通过从多个表中选取数据并进行一系列运算处理,最终得到所需的业务指标。涉及的数据表包括销售凭证头表、销售凭证项表等,并通过循环、条件判断等方式实现数据的整合与计算。

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

*&---------------------------------------------------------------------*
*&  包括                ZXV50QU01
*&---------------------------------------------------------------------*
TABLES: lipov,lips,vbkd,konv,vbap,vbak,tvgrt,likp.
DATA: cs_postab TYPE lipov.

DATA : l_tabix LIKE sy-tabix,
      gt_lips TYPE TABLE OF lips,
      gs_lips TYPE lips,
gt_vbkd TYPE TABLE OF vbkd,
gs_vbkd TYPE vbkd,
  gt_konv   TYPE TABLE OF konv,
            gs_konv   TYPE konv,
              gt_vbap   TYPE TABLE OF vbap ,
            gs_vbap   TYPE vbap ,
                gt_vbak   TYPE TABLE OF vbak ,
            gs_vbak   TYPE vbak ,
              gt_likp TYPE TABLE OF likp,
      gs_likp TYPE likp,
id LIKE sy-repid,
gt_tvgrt TYPE TABLE OF tvgrt,
gs_tvgrt TYPE tvgrt.
******
*DATA z(3) TYPE c.
*LOOP AT ct_postab.
*  AT LAST.
*    z = sy-tabix.
*    MESSAGE z TYPE 'I'.
*        MESSAGE IF_FLAG_INBOUND TYPE 'I'.
*            MESSAGE IF_PROCTYPE TYPE 'I'.
*  ENDAT.
*ENDLOOP.

*data z(5) type c.
*AUTHORITY-CHECK OBJECT 'ZSDOBJ01' ID 'ZVL06F' FIELD 'a'.
*z = sy-subrc.
*MESSAGE z TYPE 'I'.
CHECK sy-subrc = 0.

SELECT FROM lips
  INTO CORRESPONDING FIELDS OF TABLE gt_lips
  FOR ALL ENTRIES IN ct_postab
  WHERE vbeln = ct_postab-vbeln
 and POSNR =  ct_postab-POSNR.

  SELECT FROM liKP
  INTO CORRESPONDING FIELDS OF TABLE gt_liKP
  FOR ALL ENTRIES IN GT_lips
  WHERE vbeln = gt_lips-vbeln.

SELECT FROM tvgrt
  INTO CORRESPONDING FIELDS OF TABLE gt_tvgrt
  FOR ALL ENTRIES IN gt_lips
    WHERE vkgrp = gt_lips-vkgrp.

SELECT FROM vbkd
INTO CORRESPONDING FIELDS OF TABLE gt_vbkd
  FOR ALL ENTRIES IN gt_lips
  WHERE vbeln = gt_lips-vgbel .

SELECT FROM vbap
  INTO CORRESPONDING FIELDS OF TABLE gt_vbap
   FOR ALL ENTRIES IN gt_lips
  WHERE vbeln = gt_lips-vgbel
  AND posnr = gt_lips-VGPOS.





LOOP AT ct_postab INTO cs_postab where s_vgpos NE '0000'.
  l_tabix = sy-tabix.

*  CHECK cs_postab-s_vgpos NE '0000'.
  READ TABLE gt_lips INTO gs_lips WITH KEY vbeln = cs_postab-vbeln   POSNR = cs_postab-POSNR.
  cs_postab-kdmat = gs_lips-kdmat.

 READ TABLE gt_likp INTO gs_likp WITH KEY vbeln = gs_lips-vbeln   .
  cs_postab-ZWADAT = gs_likp-WADAT_IST.

  READ TABLE gt_tvgrt INTO gs_tvgrt WITH KEY  vkgrp = gs_lips-vkgrp.
  cs_postab-zbezei = gs_tvgrt-bezei.

  READ TABLE gt_vbkd INTO gs_vbkd WITH KEY vbeln = gs_lips-vgbel  .
  cs_postab-zbstkd = gs_vbkd-bstkd.

  READ TABLE gt_vbap INTO gs_vbap WITH KEY vbeln =  gs_lips-vgbel   posnr = gs_lips-VGPOS.
   cs_postab-zkwmeng = gs_vbap-kwmeng.
   AUTHORITY-CHECK OBJECT 'ZSDOBJ01' ID 'ZVL06F' FIELD 'a'.
  IF sy-subrc = 0.
    SELECT SINGLE FROM vbak
    INTO  gs_vbak
    WHERE vbeln = gs_vbap-vbeln.

    SELECT INTO TABLE gt_konv
    FROM konv
    WHERE knumv = gs_vbak-knumv
    AND kposn = gs_vbap-posnr.

    IF sy-subrc = 0.
      READ TABLE gt_konv INTO gs_konv WITH KEY kschl = 'PR00'.
      IF sy-subrc = 0.
        cs_postab-zpr00 = gs_konv-kbetr  .
      ENDIF.
*      CLEAR gs_konv.
      READ TABLE gt_konv INTO gs_konv WITH KEY kschl = 'PR01'.
      IF sy-subrc = 0.
        cs_postab-zpr01 = gs_konv-kbetr .
      ENDIF.
    ENDIF.
  ENDIF.

  cs_postab-zkzwi6 = gs_vbap-kzwi6.

  IF gs_lips-gewei = 'G'.
    cs_postab-ntgew = cs_postab-ntgew / 1000.
    cs_postab-gewei = 'KG'.

  ENDIF.
  cs_postab-zkmein = gs_vbap-kmein.
  cs_postab-zKURSK = gs_vbkd-kursk.
*  cs_postab-vrkme = gs_lips-vrkme.
*
*  IF cs_postab-zkmein = gs_lips-vrkme  AND gs_lips-vgpos = gs_vbap-posnr .
**    if gs_vbap-waerk = 'CNY'.
*
*    cs_postab-zamount = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 / 100 ) * cs_postab-lfimg / gs_vbap-KPEIN .
**  ELSE.
**    cs_postab-zamount = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 / 100 ) * cs_postab-lfimg .
*  ENDIF.
* ENDIF.
*
* if cs_postab-zkmein <> gs_lips-vrkme .
*   cs_postab-zamount = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 / 100 ) * cs_postab-ntgew / gs_vbap-KPEIN.
*   endif.

  IF cs_postab-zkmein = gs_lips-vrkme  AND gs_lips-vgpos = gs_vbap-posnr .
*    if gs_vbap-waerk = 'CNY'.

    cs_postab-ZDMBTR = ( cs_postab-zpr00 + cs_postab-zpr01 * 100 117 ) * cs_postab-lfimg * cs_postab-zKURSK / gs_vbap-KPEIN + cs_postab-zkzwi6 .
*  ELSE.
*    cs_postab-zamount = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 / 100 ) * cs_postab-lfimg .
*  ENDIF.
 ENDIF.

 if cs_postab-zkmein <> gs_lips-vrkme .
   cs_postab-ZDMBTR = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 100 ) * cs_postab-ntgew / gs_vbap-KPEIN * cs_postab-zKURSK + cs_postab-zkzwi6 .
   endif.
* if gs_vbap-waerk <> 'CNY'.
*   clear cs_postab-zamount .
*   cs_postab-zweishui = cs_postab-zpr00  * cs_postab-lfimg / gs_vbap-KPEIN + cs_postab-zkzwi6.
*endif.

  cs_postab-zwaerk = gs_vbap-waerk.
*  cs_postab-zkwmeng = gs_vbap-kwmeng.

*  cs_postab-vrkme = gs_lips-vrkme.
  MODIFY ct_postab INDEX l_tabix FROM cs_postab  TRANSPORTING kdmat  zbezei zbstkd zpr00 zpr01 zamount zwaerk zkmein zkwmeng  ntgew gewei zkzwi6 ZWEISHUI  zKURSK ZDMBTR ZWADAT.
  CLEAR: gs_lips, gs_vbkd , gs_konv,gs_vbap,gs_vbak, cs_postab.
*    ENDIF.

ENDLOOP.
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值