ZDN_BLOCK

47 篇文章 0 订阅

*&---------------------------------------------------------------------*
*& Report  ZDN_BLOCK
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zdn_block.

INCLUDE zbdcrecx1.

DATA: gs_vbak LIKE vbak,
      gs_likp LIKE likp,
      p_mode TYPE ctu_mode VALUE 'N',
      l_subrc LIKE sy-subrc,
      l_lifsk LIKE likp-lifsk,
      is_authority,
      is_success.

DATA: BEGIN OF gt_out OCCURS 0,
      msg TYPE c LENGTH 100,
      END OF gt_out.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001 NO INTERVALS.
PARAMETERS: p_vbeln LIKE likp-vbeln.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.
  PERFORM get_data.
  PERFORM process_data.
*  PERFORM display_data.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data .
  SELECT SINGLE vbelv AS vbeln FROM vbfa
    INTO CORRESPONDING FIELDS OF gs_vbak
    WHERE vbtyp_n = 'J'
      AND vbtyp_v = 'C'
      AND vbeln   = p_vbeln.

  SELECT SINGLE vkbur vkgrp INTO CORRESPONDING FIELDS OF gs_vbak
    FROM vbak
    WHERE vbeln = gs_vbak-vbeln.

  SELECT SINGLE lifsk INTO CORRESPONDING FIELDS OF gs_likp
    FROM likp
    WHERE vbeln = p_vbeln.
ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM process_data .
  CLEAR is_authority.
  PERFORM check_authority_pmc CHANGING l_subrc.
  IF l_subrc EQ 0.
    IF gs_likp-lifsk EQ 'Z0'.
      l_lifsk = 'Z1'.
      is_authority = 'X'.
    ELSEIF gs_likp-lifsk EQ 'Z1'.
      l_lifsk = 'Z0'.
      is_authority = 'X'.
    ENDIF.
  ENDIF.
  PERFORM check_authority_pmt CHANGING l_subrc.
  IF l_subrc EQ 0.
    IF gs_likp-lifsk EQ 'Z1'.
      l_lifsk = ''.
      is_authority = 'X'.
    ELSEIF gs_likp-lifsk EQ ''.
      l_lifsk = 'Z1'.
      is_authority = 'X'.
    ENDIF.
  ENDIF.

  IF NOT is_authority IS INITIAL.
    PERFORM bdc_vl02n USING l_lifsk.
  ELSE.
    is_success = 'D'.
    export is_success to MEMORY id 'DN_STATUS'.
  ENDIF.

*  IF l_lifsk IS INITIAL.
*    CONCATENATE 'You can not change the delivery block for DN' p_vbeln
*      INTO gt_out-msg.
*    APPEND gt_out.
*  ENDIF.

ENDFORM.                    " PROCESS_DATA
*&---------------------------------------------------------------------*
*&      Form  BDC_VL02N
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0082   text
*----------------------------------------------------------------------*
FORM bdc_vl02n  USING p_lifsk TYPE likp-lifsk.
  PERFORM bdc_dynpro      USING 'SAPMV50A' '4004'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'LIKP-VBELN'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'LIKP-VBELN'
                                p_vbeln.
  PERFORM bdc_dynpro      USING 'SAPMV50A' '1000'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=HADM_T'.
  PERFORM bdc_dynpro      USING 'SAPMV50A' '2000'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=SICH_T'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'LIKP-LIFSK'.
  PERFORM bdc_field       USING 'LIKP-LIFSK'
                                p_lifsk.
  CALL TRANSACTION 'VL02N'
    USING bdcdata
    MODE p_mode
    UPDATE 'S'
    MESSAGES INTO messtab.
  READ TABLE messtab WITH KEY msgtyp = 'E'.
  IF sy-subrc EQ 0.
*    CONCATENATE 'Change the delivery block for DN' p_vbeln
*      'to' p_lifsk 'failure' INTO gt_out-msg SEPARATED BY space.
*    APPEND gt_out.
    is_success = 'N'.
  ELSE.
    READ TABLE messtab WITH KEY msgid = '00'
                                msgnr = '347'.
    IF sy-subrc eq 0.
      is_success = 'B'.
    ELSE.
      is_success = 'Y'.
      EXPORT p_lifsk TO MEMORY id 'BLOCK_FIELD'.
    ENDIF.
  ENDIF.
  EXPORT is_success TO MEMORY id 'DN_STATUS'.
  REFRESH bdcdata.
ENDFORM.                                                    " BDC_VL02N
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_data .
  LOOP AT gt_out.
    WRITE:/ gt_out-msg.
  ENDLOOP.
ENDFORM.                    " DISPLAY_DATA
*&---------------------------------------------------------------------*
*&      Form  CHECK_AUTHORITY_PMT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_L_SUBRC  text
*----------------------------------------------------------------------*
FORM check_authority_pmt  CHANGING p_subrc TYPE sy-subrc.
  AUTHORITY-CHECK OBJECT 'ZDNAPP01'
               ID 'ACTVT'  FIELD '02'
               ID 'VKBUR' FIELD gs_vbak-vkbur
               ID 'VKGRP' FIELD gs_vbak-vkgrp.
  p_subrc = sy-subrc.
ENDFORM.                    " CHECK_AUTHORITY_PMT
*&---------------------------------------------------------------------*
*&      Form  CHECK_AUTHORITY_PMC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_L_SUBRC  text
*----------------------------------------------------------------------*
FORM check_authority_pmc  CHANGING p_subrc TYPE sy-subrc.
  AUTHORITY-CHECK OBJECT 'ZDNAPP01'
                   ID 'ACTVT'  FIELD '01'
                   ID 'VKBUR' FIELD gs_vbak-vkbur
                   ID 'VKGRP' FIELD gs_vbak-vkgrp.
  p_subrc = sy-subrc.
ENDFORM.                    " CHECK_AUTHORITY_PMC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值