二维码

[BAPI] VLPOD交货单客户签收POD确认

Twilight发表于 2025-09-23 17:50Twilight 最后回复于 2025-09-23 17:50 [复制链接] 90 0

  1. FUNCTION zsdfm056.
  2. *"----------------------------------------------------------------------
  3. *"*"本地接口
  4. *"  IMPORTING
  5. *"     VALUE(I_VBELN) TYPE  VBELN_VL
  6. *"     VALUE(I_PODAT) TYPE  PODAT OPTIONAL
  7. *"     VALUE(I_POTIM) TYPE  POTIM OPTIONAL
  8. *"     VALUE(I_STYPE) TYPE  ZDESTYPE OPTIONAL
  9. *"  EXPORTING
  10. *"     VALUE(E_MESSAGE) TYPE  ZOTS001
  11. *"----------------------------------------------------------------------
  12.   DATA:ls_vbkok_wa  TYPE vbkok.
  13.   DATA:ls_vbpok_tab TYPE vbpok.
  14.   DATA:lt_vbpok_tab TYPE TABLE OF vbpok.
  15.   DATA:lt_prot      TYPE TABLE OF prott WITH HEADER LINE.
  16.   DATA:lv_pdstk     TYPE likp-pdstk.
  17.   DATA:lv_message   TYPE bapiret2-message.

  18. *-->初始化
  19.   i_vbeln = |{ i_vbeln ALPHA = IN }|.

  20. *-->检查
  21.   IF i_vbeln IS INITIAL.
  22.     e_message-type = 'E'.
  23.     e_message-message = '交货单号必填'.
  24.     EXIT.
  25.   ENDIF.

  26.   SELECT SINGLE pdstk INTO lv_pdstk FROM likp WHERE vbeln = i_vbeln.
  27.   IF lv_pdstk = 'C'.
  28.     e_message-type = 'S'.
  29.     e_message-message = 'POD已经确认,无需再次确认'.
  30.     EXIT.
  31.   ELSEIF lv_pdstk = ''.
  32.     e_message-type = 'S'.
  33.     e_message-message = '交货单' && i_vbeln && '未启用POD,无需POD确认'.
  34.     EXIT.
  35.   ENDIF.

  36. *-->BAPI赋值
  37.   "抬头
  38.   ls_vbkok_wa-vbeln_vl = i_vbeln.
  39.   ls_vbkok_wa-vbtyp_vl = 'J'.
  40.   IF i_podat IS NOT INITIAL.
  41.     ls_vbkok_wa-podat = i_podat.
  42.   ELSE.
  43.     ls_vbkok_wa-podat = sy-datum.
  44.   ENDIF.
  45.   IF i_potim IS NOT INITIAL.
  46.     ls_vbkok_wa-potim = i_potim.
  47.   ELSE.
  48.     ls_vbkok_wa-potim = sy-uzeit.
  49.   ENDIF.
  50.   ls_vbkok_wa-kzpod = 'B'."D/B
  51.   ls_vbkok_wa-wabuc = 'X'.

  52.   "行项目
  53.   SELECT vbeln,
  54.          posnr,
  55.          matnr,
  56.          charg,
  57.          lfimg,
  58.          vrkme,
  59.          lgmng,
  60.          meins
  61.     FROM lips
  62.     WHERE vbeln = @i_vbeln
  63.     INTO TABLE @DATA(lt_lips).

  64.   LOOP AT lt_lips INTO DATA(ls_lips).
  65.     CLEAR:ls_vbpok_tab.
  66.     ls_vbpok_tab-vbeln_vl = ls_lips-vbeln.
  67.     ls_vbpok_tab-posnr_vl = ls_lips-posnr.
  68.     ls_vbpok_tab-matnr    = ls_lips-matnr.
  69.     ls_vbpok_tab-charg    = ls_lips-charg.
  70.     ls_vbpok_tab-lfimg    = ls_lips-lfimg.
  71.     ls_vbpok_tab-vrkme    = ls_lips-vrkme.
  72.     ls_vbpok_tab-lgmng    = ls_lips-lgmng.
  73.     ls_vbpok_tab-meins    = ls_lips-meins.
  74.     APPEND ls_vbpok_tab TO lt_vbpok_tab.
  75.   ENDLOOP.

  76. *-->BAPI调用
  77.   CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
  78.     EXPORTING
  79.       vbkok_wa  = ls_vbkok_wa
  80.       delivery  = i_vbeln
  81.     TABLES
  82.       vbpok_tab = lt_vbpok_tab
  83.       prot      = lt_prot.

  84.   LOOP AT lt_prot WHERE msgty CA 'AEX'.
  85.     CLEAR:lv_message.
  86.     CALL FUNCTION 'MESSAGE_TEXT_BUILD'
  87.       EXPORTING
  88.         msgid               = lt_prot-msgid
  89.         msgnr               = lt_prot-msgno
  90.         msgv1               = lt_prot-msgv1
  91.         msgv2               = lt_prot-msgv2
  92.         msgv3               = lt_prot-msgv3
  93.         msgv4               = lt_prot-msgv4
  94.       IMPORTING
  95.         message_text_output = lv_message.
  96.     IF e_message-message IS INITIAL.
  97.       e_message-message = lv_message.
  98.     ELSE.
  99.       e_message-message = e_message-message && '/' && lv_message.
  100.     ENDIF.
  101.   ENDLOOP.
  102.   IF sy-subrc = 0.
  103.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  104.     e_message-type    = 'E'.
  105.   ELSE.
  106.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  107.       EXPORTING
  108.         wait = 'X'.

  109. *记录签收日期
  110.     SELECT SINGLE vbrp~vbeln INTO @DATA(lv_vbeln_vf) FROM vbrp WHERE vbrp~vgbel = @i_vbeln.
  111.     IF sy-subrc = 0.
  112.       SELECT SINGLE * INTO @DATA(ls_zsdt023) FROM zsdt023 WHERE vbeln_vf = @lv_vbeln_vf.
  113.       IF sy-subrc = 0.
  114.         IF ls_vbkok_wa-podat IS NOT INITIAL.
  115.           ls_zsdt023-sdate    = ls_vbkok_wa-podat.
  116.         ENDIF.
  117.         IF i_stype IS NOT INITIAL.
  118.           ls_zsdt023-stype    = i_stype.
  119.         ENDIF.
  120.         ls_zsdt023-erdat = sy-datum.
  121.         ls_zsdt023-erzet = sy-uzeit.
  122.         ls_zsdt023-ernam = sy-uname.
  123.       ELSE.
  124.         ls_zsdt023-vbeln_vf = lv_vbeln_vf.
  125.         ls_zsdt023-vbeln_vl = i_vbeln.
  126.         ls_zsdt023-sdate    = ls_vbkok_wa-podat.
  127.         ls_zsdt023-stype    = i_stype.
  128.         ls_zsdt023-erdat = sy-datum.
  129.         ls_zsdt023-erzet = sy-uzeit.
  130.         ls_zsdt023-ernam = sy-uname.
  131.       ENDIF.
  132.       MODIFY zsdt023 FROM ls_zsdt023.
  133.       COMMIT WORK AND WAIT.
  134.     ENDIF.

  135.     e_message-type    = 'S'.
  136.     e_message-message = 'POD确认成功!'.
  137.   ENDIF.

  138. ENDFUNCTION.
复制代码
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表