無名经验总结与分享(SAP)            十年树木,百年树人

WMS函数组:11.交货单取金额

FUNCTION ZRFC_WMS_GET_PRICE.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(PARAMS) TYPE  STRING OPTIONAL
*"  TABLES
*"      ITAB STRUCTURE  ZGET_PRICE OPTIONAL
*"      ITH STRUCTURE  ZGET_PRICE_H OPTIONAL
*"----------------------------------------------------------------------
DATA: BEGIN OF IPARAM OCCURS 10,
          VBELN TYPE LIPS-VBELN,
END OF IPARAM.
SPLIT PARAMS AT ',' INTO TABLE IPARAM.
*  DATA:
*  BEGIN OF ITAB OCCURS 0,
*    EBELN LIKE EKPO-EBELN,
*    EBELP LIKE EKPO-EBELP,
*    VBELN LIKE VBAP-VBELN,
*    POSNR LIKE VBAP-POSNR,
*    KNUMV LIKE VBAK-KNUMV,
*    AUART LIKE VBAK-AUART,
*    MPRICE LIKE VBAP-NETWR,
*    VBELN2 LIKE LIPS-VBELN,
*    POSNR2 LIKE LIPS-POSNR,
*    JE LIKE VBAP-NETWR,
*    LFIMG LIKE LIPS-LFIMG,
*    VGBEL  LIKE LIPS-VGBEL,
*    VGPOS LIKE LIPS-VGPOS,
*  END OF ITAB.
DATA:
    TMP_NETWR TYPE NETWR,
    TMP_KSCHL TYPE KSCHL,
    TMP_KPEIN TYPE KPEIN.
DATA: TVBELN TYPE VBELN.
*-----------CHA JWY_20170811
SORT IPARAM.
*-----------CHA JWY_20170811
LOOP AT IPARAM.
PERFORM F_ADD_ZERO  USING IPARAM-VBELN.
MODIFY IPARAM.
ENDLOOP.
"==============change by damon at 20171207===================
DATA: GT_LIPS TYPE STANDARD TABLE OF LIPS,
        GS_LIPS TYPE LIPS.
SELECT
  MATNR
  VGBEL
  VGPOS
  VBELN
  POSNR
  LFIMG
  UECHA
APPENDING CORRESPONDING FIELDS OF TABLE  GT_LIPS
FROM LIPS AS P
FOR ALL ENTRIES IN IPARAM
WHERE VBELN = IPARAM-VBELN.
SORT GT_LIPS.
LOOP AT GT_LIPS INTO GS_LIPS.
    ITAB-MATNR = GS_LIPS-MATNR.
    ITAB-VGBEL = GS_LIPS-VGBEL.
    ITAB-VGPOS = GS_LIPS-VGPOS.
    ITAB-VBELN2 = GS_LIPS-VBELN.
*      ITAB-POSNR2 = GS_LIPS-POSNR.
    ITAB-LFIMG = GS_LIPS-LFIMG.
IF GS_LIPS-UECHA IS NOT INITIAL .
      ITAB-POSNR2 = GS_LIPS-UECHA.
ELSE.
      ITAB-POSNR2 = GS_LIPS-POSNR.
ENDIF.
COLLECT ITAB.
ENDLOOP.
****   取参考号
*  SELECT
*  MATNR
*  VGBEL
*  VGPOS
*  VBELN AS VBELN2
*  POSNR AS POSNR2
*  LFIMG
*  APPENDING CORRESPONDING FIELDS OF TABLE  ITAB
*  FROM LIPS AS P
*  FOR ALL ENTRIES IN IPARAM
*  WHERE VBELN = IPARAM-VBELN.
"==============end of change by damon at 20171207===================
*-----------CHA JWY_20170811
SORT ITAB.
*-----------CHA JWY_20170811
LOOP AT ITAB.
IF ITAB-VGBEL+0(2) = '00'.
      ITAB-VBELN = ITAB-VGBEL.
      ITAB-POSNR = ITAB-VGPOS.
SELECT SINGLE AUART KNUMV "KWMENG
INTO (ITAB-AUART,ITAB-KNUMV)
FROM VBAK
*      JOIN VBAP ON VBAK~VBELN = VBAP~VBELN
WHERE VBAK~VBELN = ITAB-VBELN.
ELSE.
      ITAB-EBELN = ITAB-VGBEL.
      ITAB-EBELP = ITAB-VGPOS.
SELECT SINGLE BSART KNUMV "MENGE
INTO (ITAB-AUART,ITAB-KNUMV)
FROM EKKO
*      JOIN EKPO on EKKO~EBELN = EKPO~EBELN
WHERE EKKO~EBELN = ITAB-EBELN.
ENDIF.
IF ITAB-AUART = 'UB'.
SELECT   KBETR
                 KPEIN
                KSCHL
INTO (TMP_NETWR,
               TMP_KPEIN,
               TMP_KSCHL)
FROM KONV
WHERE KNUMV = ITAB-KNUMV AND
               KPOSN = ITAB-EBELP.
IF TMP_KSCHL = 'PI01'.
          ITAB-MPRICE = TMP_NETWR / TMP_KPEIN.
ELSEIF TMP_KSCHL = 'ZPB2'.
          ITAB-MPRICE = TMP_NETWR / TMP_KPEIN.
ELSE.
          ITAB-MPRICE = TMP_NETWR / TMP_KPEIN.
ENDIF.
        ITAB-MPRICE2 = ITAB-MPRICE.
ENDSELECT.
ELSE.
CLEAR :TMP_NETWR,    TMP_KPEIN,  TMP_KSCHL.
DATA: TAX_RATE LIKE TMP_NETWR.
DATA: TAX_KBERT LIKE TMP_NETWR.
SELECT SINGLE
      KAWRT
      KBETR
INTO (TMP_NETWR,
*                   TMP_KPEIN,
             TAX_KBERT)
FROM KONV
WHERE KNUMV = ITAB-KNUMV AND
             KPOSN = ITAB-POSNR
AND KSCHL =  'MWST'.
IF SY-SUBRC = 0.
        TAX_RATE = ( 1000 + TAX_KBERT ) / 1000.
IF TAX_KBERT > 0.
          ITAB-MPRICE2 = TMP_NETWR  * TAX_RATE   .
ENDIF.
ENDIF.
SELECT  KWERT
                KSCHL
INTO (TMP_NETWR,
*                   TMP_KPEIN,
                   TMP_KSCHL)
FROM KONV
WHERE KNUMV = ITAB-KNUMV AND
                   KPOSN = ITAB-POSNR
AND KSCHL IN ('ZPR2','ZPR0') .
*        IF TMP_KSCHL = 'MWST'.
*
*        ENDIF.
IF TMP_KSCHL = 'ZPR2'.
          ITAB-MPRICE = TMP_NETWR * TAX_RATE  .
ENDIF.
IF TMP_KSCHL = 'ZPR0' AND  ITAB-MPRICE IS INITIAL.
          ITAB-MPRICE = TMP_NETWR * TAX_RATE  .
ENDIF.
ENDSELECT.
IF ITAB-MPRICE IS INITIAL.
        ITAB-MPRICE = ITAB-MPRICE2.
ENDIF.
IF ITAB-MPRICE2 IS INITIAL.
        ITAB-MPRICE2 = ITAB-MPRICE.
ENDIF.
ENDIF.
*    IF ITAB-AUART = 'ZOR' OR ITAB-AUART = 'ZPRD'.   "折前单价
*      SELECT SINGLE  KBETR
*                     KPEIN
*             INTO (TMP_NETWR,
*                   TMP_KPEIN)
*             FROM KONV
*             WHERE KNUMV = ITAB-KNUMV AND
*                   KPOSN = ITAB-POSNR AND
*                   KSCHL = 'ZPR0'.
*      ITAB-MPRICE = TMP_NETWR * '1.17' / TMP_KPEIN.
*      ITAB-MPRICE = TMP_NETWR * '1.17' / TMP_KPEIN.
*
*    ELSEIF ITAB-AUART = 'ZOR1'.
*      SELECT SINGLE  KBETR
*               KPEIN
*       INTO (TMP_NETWR,
*             TMP_KPEIN)
*       FROM KONV
*       WHERE KNUMV = ITAB-KNUMV AND
*             KPOSN = ITAB-POSNR AND
*             KSCHL = 'ZPR2'.
*      ITAB-MPRICE = TMP_NETWR * '1.17' / TMP_KPEIN.
*    ELSEIF ITAB-AUART = 'UB'.
*          SELECT SINGLE  KBETR
*                     KPEIN
*             INTO (TMP_NETWR,
*                   TMP_KPEIN)
*             FROM KONV
*             WHERE KNUMV = ITAB-KNUMV AND
*                   KPOSN = ITAB-EBELP AND
*                   KSCHL = 'P101'.
*      ITAB-MPRICE = TMP_NETWR / TMP_KPEIN.
*
*    ELSE.
*
*
*      "折前单价
*      SELECT SINGLE  KBETR
*                     KPEIN
*             INTO (TMP_NETWR,
*                   TMP_KPEIN)
*             FROM KONV
*             WHERE KNUMV = ITAB-KNUMV AND
*                   KPOSN = ITAB-EBELP AND
*                   KSCHL = 'ZPB2'.
*      ITAB-MPRICE = TMP_NETWR / TMP_KPEIN.
*    ENDIF.
IF ITAB-AUART = 'UB'.
      ITAB-JE = ITAB-MPRICE * ITAB-LFIMG .
      ITAB-JE2 = ITAB-MPRICE2 * ITAB-LFIMG .
ELSE.
SELECT  KWMENG INTO ITAB-KWMENG FROM VBAP
WHERE VBELN = ITAB-VBELN AND POSNR = ITAB-POSNR .
        ITAB-JE = ITAB-MPRICE * ITAB-LFIMG / ITAB-KWMENG .
        ITAB-JE2 = ITAB-MPRICE2 * ITAB-LFIMG / ITAB-KWMENG.
ENDSELECT.
ENDIF.
MODIFY ITAB.
    ITH-VBELN  = ITAB-VBELN2.
    ITH-JE = ITAB-JE.
    ITH-JE2 = ITAB-JE2.
COLLECT ITH.
ENDLOOP.
DATA:
  IL_TLINE TYPE ZTEXT_LINE OCCURS 0 WITH HEADER LINE.
CALL FUNCTION 'ZRFC_WMS_READTEXT'
EXPORTING
      PARAMS  = PARAMS
TABLES
      IT_LINE = IL_TLINE.
*-----------CHA JWY_20170811
SORT ITH.
*-----------CHA JWY_20170811
LOOP AT ITH.
PERFORM F_CUT_ZERO  USING   ITH-VBELN.
READ  TABLE IL_TLINE WITH KEY TNO_LINE =  ITH-VBELN.
IF SY-SUBRC = 0.
      ITH-TDLINE =  IL_TLINE-TDLINE.
MODIFY ITH.
ENDIF.
ENDLOOP.
ENDFUNCTION.


image

image

posted @ 2021-01-25 21:04  無名  阅读(93)  评论(0编辑  收藏  举报
Twttafku@163.com
十年树木,百年树人