SAP 采购信息记录BDC实现

SAP采购信息记录,关联方交易销售价格创建BDC实现

    DATA:BEGIN OF ls_data.
      INCLUDE TYPE zsmm029_o.
      INCLUDE TYPE zsmm028.
    DATA END OF ls_data..

  DATA lt_data LIKE TABLE OF ls_data.

  DATA lv_fail TYPE c.

  DATA: o_type_sp TYPE bapi_mtyp,
        o_msg_sp  TYPE bapi_msg,
        o_data_sp TYPE TABLE OF zssd013_o.

  DATA: i_data TYPE zssd013_i,
        i_eina TYPE zssd013_eina.

  IF NOT i_head IS INITIAL.

    "供应商取值
    SELECT SINGLE
      *
      INTO @DATA(ls_ztmm002)
      FROM
        ztmm002
      WHERE
        lifnr = @i_head-lifnr.

    IF NOT ls_ztmm002 IS INITIAL.

      "销售组织取值
      SELECT SINGLE
        *
        INTO @DATA(ls_ztmm002_1)
        FROM
          ztmm002
        WHERE
          werks = @i_head-ekorg.

    ENDIF.

  ENDIF.

  LOOP AT i_item.
    MOVE-CORRESPONDING i_item TO ls_data.
*    ls_data-matnr = |{ i_item-matnr ALPHA = IN }|.
*    ls_data-lifnr = |{ i_head-lifnr ALPHA = IN }|.

    "供应商增加前导零
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = i_head-lifnr
      IMPORTING
        output = ls_data-lifnr.

    "物料增加前导零
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        input  = i_item-matnr
      IMPORTING
        output = ls_data-matnr.

    ls_data-werks = i_head-werks.
    ls_data-ekorg = i_head-ekorg.
    APPEND ls_data TO lt_data.
    CLEAR ls_data.
  ENDLOOP.

  MOVE-CORRESPONDING lt_data TO gt_data.

  LOOP AT lt_data INTO ls_data.

    MOVE-CORRESPONDING ls_data TO gs_data.

    ls_data-lifnr = |{ ls_data-lifnr ALPHA = IN }|.

    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
      EXPORTING
        input          = ls_data-bprme
        language       = sy-langu
      IMPORTING
        output         = ls_data-bprme
      EXCEPTIONS
        unit_not_found = 1
        OTHERS         = 2.

    AT END OF datbi.
      PERFORM frm_bdc.
    ENDAT.


    "物料去除前导零
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
      EXPORTING
        input  = gs_data-matnr
      IMPORTING
        output = gs_data-matnr.

    MOVE-CORRESPONDING gs_data TO o_item.

    "物料增加前导零
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        input  = gs_data-matnr
      IMPORTING
        output = gs_data-matnr.

    IF o_item-ztype = 'E'.
      o_type = 'E'.
      o_msg = '创建失败'.
      lv_fail = 'X'.
    ELSE.

*      "供应商增加前导零
*      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*        EXPORTING
*          input  = i_head-lifnr
*        IMPORTING
*          output = i_head-lifnr.

      "取采购信息记录
      SELECT SINGLE
        eina~matnr,
        eina~lifnr,
        eine~infnr,
        eine~werks,
        eine~ekorg,
        eine~esokz,
        eine~peinh,
        eine~waers,
        eine~netpr,
        a017~knumh,
        konp~kstbm,
        konp~kpein,
        konp~kmein,
        konp~krech,
        konp~kbetr,
        konp~kopos
        INTO CORRESPONDING FIELDS OF @i_eina
        FROM
          eina
        INNER JOIN eine ON eina~infnr EQ eine~infnr
        INNER JOIN a017 ON eina~lifnr EQ a017~lifnr AND
                           eina~matnr EQ a017~matnr AND
                           eine~ekorg EQ a017~ekorg AND
                           eine~werks EQ a017~werks AND
                           eine~esokz EQ a017~esokz
        INNER JOIN konp ON a017~knumh = konp~knumh
        WHERE
          eina~matnr EQ @ls_data-matnr AND
          eina~lifnr EQ @ls_data-lifnr AND
          eine~werks EQ @i_head-werks AND
          eine~ekorg EQ @i_head-ekorg AND
          eine~esokz EQ @ls_data-esokz.

      o_infnr = i_eina-infnr.

      AT END OF matnr.

        MOVE-CORRESPONDING gs_data TO i_data.

        IF NOT ls_ztmm002 IS INITIAL.
          i_data-kunnr = ls_ztmm002-lifnr.
        ENDIF.

        IF NOT ls_ztmm002_1 IS INITIAL.
          i_data-vkorg = ls_ztmm002_1-werks.
        ENDIF.

        "创建销售价格
        CALL FUNCTION 'ZSD_SALES_PRICE_BDC'
          EXPORTING
            i_head = i_head
            i_data = i_data
            i_eina = i_eina
          IMPORTING
            o_type = o_type_sp
            o_msg  = o_msg_sp.

        IF o_type_sp = 'E'.
          o_item-ztype = 'E'.
          o_item-zmsg = '销售价格创建失败'.
          lv_fail = 'X'.
        ELSE.
          o_item-ztype = 'S'.
          o_item-zmsg = '创建成功'.
        ENDIF.

      ENDAT.

*      "供应商去掉前导零
*      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
*        EXPORTING
*          input  = i_head-lifnr
*        IMPORTING
*          output = i_head-lifnr.

    ENDIF.

    APPEND o_item.

    CLEAR:ls_data , gs_data.

  ENDLOOP.

  IF lv_fail IS INITIAL.
    o_type = 'S'.
    o_msg = '创建成功'.
  ENDIF.

  CLEAR lv_fail.

创建采购信息记录以及价格

*----------------------------------------------------------------------*
***INCLUDE LZRFC07F01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_BDC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_bdc .

  DATA:lv_infnr TYPE eina-infnr.

*  CLEAR gs_data.
*  READ TABLE gs_data INTO gs_data INDEX 1.
*  DATA lv_infnr TYPE eine-infnr.
*  DATA:lv_datbi TYPE a018-datbi,
*       lv_datab TYPE a018-datab.
*  IF gt_data IS NOT INITIAL.

*    SELECT single
*      eine~infnr
*      INTO
*        lv_infnr
*      FROM
*        eine
*      INNER JOIN eina ON eina~infnr = eine~infnr
*      FOR ALL ENTRIES IN @gt_data
*      WHERE
*        eina~matnr = gs_data-matnr AND
*        eina~lifnr = gs_data-lifnr AND
*        eine~ekorg = gs_data-ekorg AND
*        eine~esokz = gs_data-esokz AND
*        eine~werks = gs_data-werks.

    SELECT
      *
    INTO TABLE @DATA(lt_eine)
    FROM
      eine
    INNER JOIN eina ON eina~infnr = eine~infnr
*    FOR ALL ENTRIES IN @gt_data
    WHERE
      eina~matnr = @gs_data-matnr AND
      eine~werks = @gs_data-werks AND
      eina~lifnr = @gs_data-lifnr AND
      eine~esokz = @gs_data-esokz AND
      eine~ekorg = @gs_data-ekorg.

*  ENDIF.


  IF NOT lt_eine IS INITIAL.  "若已存在采购信息记录,跳过
    PERFORM frm_me12.
  ELSE.
    PERFORM frm_me11.
  ENDIF.

*  SELECT eine~*
*  INTO TABLE @DATA(ls_eine)
*        FROM eine
*        JOIN eina ON eina~infnr = eine~infnr
*        WHERE eina~matnr = @gs_data-matnr
*        AND werks = @gs_data-werks
*        AND eina~lifnr = @gs_data-lifnr
*        AND esokz = @gs_data-esokz
*        AND eine~ekorg = @gs_data-ekorg
  .

  IF gv_flag = 'X' AND sy-subrc = '0'.  "创捷或修改条件价格

    PERFORM frm_me12_price.
*    CLEAR:LV_DATBI,
*          LV_DATAB.
*    SELECT SINGLE
*      DATBI
*      DATAB
*    INTO ( LV_DATBI, LV_DATAB )
*    FROM A017
*    WHERE LIFNR = gs_data-LIFNR
*      AND MATNR = gs_data-MATNR
*      AND EKORG = gs_data-EKORG
*      AND ESOKZ = gs_data-ESOKZ
*      AND WERKS = gs_data-WERKS.
*    IF LV_DATBI = gs_data-DATBI AND LV_DATAB = gs_data-DATAB. "有效日期一样 mek2.
*      PERFORM FRM_MEK2.
*    ELSE."否则,mek1 .
*      PERFORM FRM_MEK1.
*    ENDIF.

  ENDIF.

ENDFORM.

*& Form FRM_MEK2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_mek2 .

  DATA: lv_netpr TYPE string,
        lv_kpein TYPE string,
        lv_kstbm TYPE string,
        lv_fnam  TYPE bdcdata-fnam,
        lv_c     TYPE c LENGTH 15,
        lv_num   TYPE n LENGTH 2.

  WRITE gs_data-netpr  TO  lv_c.
  lv_netpr = lv_c.
*  LV_NETPR = gs_data-NETPR .
  lv_kpein = gs_data-peinh.
  WRITE gs_data-datab TO gs_data-datab.
  WRITE gs_data-datbi TO gs_data-datbi.

  PERFORM bdc_dynpro      USING 'SAPMV13A' '0100'.
  PERFORM bdc_field       USING 'RV13A-KSCHL' 'PB00'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.

  PERFORM bdc_dynpro      USING 'SAPLV14A' '0100'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=WEIT'.
  PERFORM bdc_field       USING 'RV130-SELKZ(05)' 'X'.

  PERFORM bdc_dynpro      USING 'RV13A017' '1000'.
  PERFORM bdc_field       USING 'F001' gs_data-lifnr .
  PERFORM bdc_field       USING 'F002' gs_data-matnr.
  PERFORM bdc_field       USING 'F003' gs_data-ekorg.
  PERFORM bdc_field       USING 'F004' gs_data-werks.
  PERFORM bdc_field       USING 'F005-LOW' gs_data-esokz.
  PERFORM bdc_field       USING 'SEL_DATE' gs_data-datab.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'SEL_DATE'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=ONLI'.

*  PERFORM BDC_DYNPRO      USING 'SAPMV13A' '1018'.
*  PERFORM BDC_FIELD       USING 'KONP-KBETR(01)'
*                                 LV_NETPR.
*  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
*                              'KONP-KBETR(01)'.
*  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
*                                '=PSTF'.
*  PERFORM BDC_DYNPRO      USING 'SAPMV13A' '1017'.
*  PERFORM BDC_FIELD       USING 'KONP-KBETR(01)'
*                               LV_NETPR.
*  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
*                            '/00'.

  PERFORM bdc_dynpro      USING 'SAPMV13A' '1017'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=PDAT'.

  PERFORM bdc_dynpro      USING 'SAPMV13A' '0300'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=BACK'.
  PERFORM bdc_field       USING 'KONP-KBETR' lv_netpr.
  PERFORM bdc_field       USING 'KONP-GKWRT' lv_netpr.

  PERFORM bdc_dynpro      USING 'SAPMV13A' '1017'.
*  PERFORM BDC_FIELD       USING 'KONP-KBETR(01)'
*                                 LV_NETPR.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'KONP-KBETR(01)'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=PSTF'.
  CLEAR lv_num.

  LOOP AT gt_data INTO DATA(ls_alv) WHERE matnr = gs_data-matnr AND
                                          lifnr = gs_data-lifnr AND
                                          ekorg = gs_data-ekorg AND
                                          esokz = gs_data-esokz AND
                                          kbetr > 0.
  ENDLOOP.

  IF sy-subrc = 0.

    DO 10 TIMES.
      PERFORM bdc_dynpro USING 'SAPMV13A' '0303'.
      PERFORM bdc_field  USING 'BDC_CURSOR' 'KONM-KSTBM(01)'.
      PERFORM bdc_field  USING 'BDC_OKCODE' '=DLIS'.
    ENDDO.

    PERFORM bdc_dynpro      USING 'SAPMV13A' '0303'.

    LOOP AT gt_data INTO ls_alv WHERE matnr = gs_data-matnr AND
    lifnr = gs_data-lifnr AND
    ekorg = gs_data-ekorg AND
    esokz = gs_data-esokz.
*                                        AND DATBI = gs_data-DATBI AND DATAB = gs_data-DATAB.
      lv_num = lv_num + 1.
      lv_fnam = 'KONM-KSTBM(' && lv_num && ')'.
*      LV_KSTBM = LS_ALV-KSTBM.
      CLEAR lv_c.
      WRITE ls_alv-kstbm  TO  lv_c.
      lv_kstbm = lv_c.
      PERFORM bdc_field USING lv_fnam lv_kstbm.
      lv_fnam = 'KONM-KBETR(' && lv_num && ')'.
      CLEAR lv_c.
      WRITE ls_alv-kbetr  TO  lv_c.
      lv_netpr = lv_c.
      PERFORM bdc_field USING lv_fnam lv_netpr.
      CLEAR ls_alv.
    ENDLOOP.

  ENDIF.

  PERFORM bdc_field USING 'BDC_OKCODE' '=SICH'.

  CALL TRANSACTION 'MEK2' USING gt_bdcdata
                          MODE  gv_mode
                          UPDATE gv_update
                          MESSAGES INTO gt_messtab.

  LOOP AT gt_messtab INTO gs_messtab WHERE msgtyp CA 'EAX'.

    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        id        = gs_messtab-msgid
        no        = gs_messtab-msgnr
        v1        = gs_messtab-msgv1
        v2        = gs_messtab-msgv2
        v3        = gs_messtab-msgv3
        v4        = gs_messtab-msgv4
      IMPORTING
        msg       = gv_msg
      EXCEPTIONS
        not_found = 1
        OTHERS    = 2.

    gs_data-ztype = 'E'.
    gs_data-zmsg = gs_data-zmsg && gv_msg.
*    gs_return-type = 'E'.
*    gs_return-message = gv_msg.
*    gs_return-message_v1 = gs_data-lifnr.
*    gs_return-message_v2 = gs_data-matnr.
*    gs_return-message_v3 = gs_data-ekorg.
*    gs_return-message_v4 = gs_data-esokz.

  ENDLOOP.

  IF gs_data-ztype IS INITIAL.

    gs_data-ztype = 'S'.
    gs_data-zmsg = '创建更新成功'.
*    gs_return-type = 'S'.
*    gs_return-message = '创建更新成功'.
*    gs_return-message_v1 = gs_data-lifnr.
*    gs_return-message_v2 = gs_data-matnr.
*    gs_return-message_v3 = gs_data-ekorg.
*    gs_return-message_v4 = gs_data-esokz.

  ENDIF.

  REFRESH: gt_bdcdata,
           gt_messtab.

  CLEAR gv_msg.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_MEK1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_mek1 .

  DATA: lv_netpr TYPE string,
        lv_kstbm TYPE string,
        lv_kpein TYPE string,
        lv_fnam  TYPE bdcdata-fnam,
        lv_num   TYPE n LENGTH 2,
        lv_c     TYPE c LENGTH 15.

  WRITE gs_data-netpr TO lv_c.
  lv_netpr = lv_c.
  lv_kpein = gs_data-peinh.
  WRITE gs_data-datab TO gs_data-datab.
  WRITE gs_data-datbi TO gs_data-datbi.

  PERFORM bdc_dynpro      USING 'SAPMV13A' '0100'.
  PERFORM bdc_field       USING 'RV13A-KSCHL' 'PB00'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.

  PERFORM bdc_dynpro      USING 'SAPLV14A' '0100'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=WEIT'.
  PERFORM bdc_field       USING 'RV130-SELKZ(05)' 'X'.

  PERFORM bdc_dynpro      USING 'SAPMV13A' '1017'.
  PERFORM bdc_field       USING 'KOMG-LIFNR' gs_data-lifnr .
  PERFORM bdc_field       USING 'KOMG-MATNR' gs_data-matnr.
  PERFORM bdc_field       USING 'KOMG-WERKS' gs_data-werks.
  PERFORM bdc_field       USING 'KOMG-EKORG' gs_data-ekorg.
  PERFORM bdc_field       USING 'KOMG-ESOKZ(01)' gs_data-esokz.
  PERFORM bdc_field       USING 'KONP-KBETR(01)' lv_netpr.
  PERFORM bdc_field       USING 'KONP-KONWA(01)' gs_data-waers.
  PERFORM bdc_field       USING 'KONP-KPEIN(01)' lv_kpein.
  PERFORM bdc_field       USING 'KONP-KMEIN(01)' gs_data-bprme.
  PERFORM bdc_field       USING 'RV13A-DATAB(01)' gs_data-datab.
  PERFORM bdc_field       USING 'RV13A-DATBI(01)' gs_data-datbi.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'KONP-KBETR(01)'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=PDAT'
        .
  PERFORM bdc_dynpro      USING 'SAPMV13A' '0300'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.
  PERFORM bdc_field       USING 'KONP-GKWRT' lv_netpr.

  PERFORM bdc_dynpro      USING 'SAPMV13A' '0300'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=BACK'.

  PERFORM bdc_dynpro      USING 'SAPMV13A' '1017'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=PSTF'.
  CLEAR lv_num.

  LOOP AT gt_data INTO DATA(ls_alv) WHERE matnr = gs_data-matnr AND
                                          lifnr = gs_data-lifnr AND
                                          ekorg = gs_data-ekorg AND
                                          esokz = gs_data-esokz AND
                                          kbetr > 0.

  ENDLOOP.

  IF sy-subrc = 0.

    DO 10 TIMES.
      PERFORM bdc_dynpro USING 'SAPMV13A' '0303'.
      PERFORM bdc_field  USING 'BDC_CURSOR' 'KONM-KSTBM(01)'.
      PERFORM bdc_field  USING 'BDC_OKCODE' '=DLIS'.
    ENDDO.

    PERFORM bdc_dynpro USING 'SAPMV13A' '0303'.

    LOOP AT gt_data INTO ls_alv WHERE matnr = gs_data-matnr AND
                                      lifnr = gs_data-lifnr AND
                                      ekorg = gs_data-ekorg AND
                                      esokz = gs_data-esokz.
*                                        AND DATBI = gs_data-DATBI AND DATAB = gs_data-DATAB.
      lv_num = lv_num + 1.
      lv_fnam = 'KONM-KSTBM(' && lv_num && ')'.
*      LV_KSTBM = LS_ALV-KSTBM.
      CLEAR lv_c.
      WRITE ls_alv-kstbm  TO  lv_c.
      lv_kstbm = lv_c.
      PERFORM bdc_field USING lv_fnam lv_kstbm.
      lv_fnam = 'KONM-KBETR(' && lv_num && ')'.
*      LV_NETPR = LS_ALV-KBETR.
      CLEAR lv_c.
      WRITE ls_alv-kbetr  TO  lv_c.
      lv_netpr = lv_c.
      PERFORM bdc_field USING lv_fnam lv_netpr.
      CLEAR ls_alv.

    ENDLOOP.

  ENDIF.

  PERFORM bdc_field USING 'BDC_OKCODE' '=SICH'.

  CALL TRANSACTION 'MEK1'  USING gt_bdcdata
                           MODE  gv_mode
                           UPDATE gv_update
                           MESSAGES INTO gt_messtab.

  LOOP AT gt_messtab INTO gs_messtab WHERE msgtyp CA 'EAX'.

    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        id        = gs_messtab-msgid
        no        = gs_messtab-msgnr
        v1        = gs_messtab-msgv1
        v2        = gs_messtab-msgv2
        v3        = gs_messtab-msgv3
        v4        = gs_messtab-msgv4
      IMPORTING
        msg       = gv_msg
      EXCEPTIONS
        not_found = 1
        OTHERS    = 2.

    gs_data-ztype = 'E'.
    gs_data-zmsg = gs_data-zmsg && gv_msg.
*    gs_return-type = 'E'.
*    gs_return-message = gv_msg.
*    gs_return-message_v1 = gs_data-lifnr.
*    gs_return-message_v2 = gs_data-matnr.
*    gs_return-message_v3 = gs_data-ekorg.
*    gs_return-message_v4 = gs_data-esokz.

  ENDLOOP.

  IF gs_data-ztype IS INITIAL.
    gs_data-ztype = 'S'.
    gs_data-zmsg = gv_msg.
*    gs_return-type = 'S'.
*    gs_return-message = '创建更新成功'.
*    gs_return-message_v1 = gs_data-lifnr.
*    gs_return-message_v2 = gs_data-matnr.
*    gs_return-message_v3 = gs_data-ekorg.
*    gs_return-message_v4 = gs_data-esokz.

  ENDIF.

  REFRESH: gt_bdcdata,
           gt_messtab.

  CLEAR gv_msg.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ME11
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_me11 .

  DATA: lv_netpr TYPE string,
        lv_c     TYPE c LENGTH 15,
        lv_bpumz TYPE string,
        lv_bpumn TYPE string,
        lv_peinh TYPE string,
        lv_norbm TYPE string,
        lv_aplfz TYPE string,
        lv_datbi TYPE sy-datum,
        lv_datab TYPE sy-datum,
        lv_uebto TYPE c LENGTH 5,
        lv_minbm TYPE string.

  WRITE gs_data-netpr TO lv_c.
  lv_netpr = lv_c .
  CLEAR lv_c.
  WRITE gs_data-norbm TO lv_c.
  lv_norbm = lv_c.
  CLEAR lv_c.
*  WRITE gs_data-uebto TO lv_uebto.
*  LV_UEBTO = LV_C.
  lv_bpumz = gs_data-bpumz.
  lv_bpumn = gs_data-bpumn.
  lv_peinh = gs_data-peinh.
  lv_aplfz = gs_data-aplfz.
  lv_minbm = gs_data-minbm.

  WRITE gs_data-datab TO lv_datab.
  WRITE gs_data-datbi TO lv_datbi.

*  WRITE gs_data-DATAB TO gs_data-DATAB.
*  WRITE gs_data-DATBI TO gs_data-DATBI.

  PERFORM bdc_dynpro      USING 'SAPMM06I' '0100'.
  PERFORM bdc_field       USING 'EINA-LIFNR' gs_data-lifnr.
  PERFORM bdc_field       USING 'EINA-MATNR' gs_data-matnr.
  PERFORM bdc_field       USING 'EINE-EKORG' gs_data-ekorg.
  PERFORM bdc_field       USING 'EINE-WERKS' gs_data-werks.
  PERFORM bdc_field       USING 'EINA-INFNR' ''.

  CASE gs_data-esokz.
    WHEN '0'.
      PERFORM: bdc_field USING 'RM06I-NORMB' 'X'.
    WHEN '2'.
      PERFORM: bdc_field USING 'RM06I-KONSI' 'X'.
    WHEN '3'.
      PERFORM: bdc_field USING 'RM06I-LOHNB' 'X'.
    WHEN 'P'.
      PERFORM: bdc_field USING 'RM06I-PIPEL' 'X'.
    WHEN OTHERS.
  ENDCASE.

  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.

  PERFORM bdc_dynpro      USING 'SAPMM06I' '0101'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.

  PERFORM bdc_dynpro      USING 'SAPMM06I' '0102'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=KO'.
  PERFORM bdc_field       USING 'EINE-APLFZ' lv_aplfz.
  PERFORM bdc_field       USING 'EINE-EKGRP' gs_data-ekgrp.
  PERFORM bdc_field       USING 'EINE-NORBM' lv_norbm.
  PERFORM bdc_field       USING 'EINE-MWSKZ' gs_data-mwskz.
  PERFORM bdc_field       USING 'EINE-WEBRE' 'X'.

*  IF gs_data-esokz = '3'.
*    PERFORM bdc_field       USING 'EINE-VERID'
*          gs_data-verid.
*  ENDIF.
  PERFORM bdc_field       USING 'EINE-NETPR' lv_netpr.
*  PERFORM bdc_field       USING 'EINE-UEBTK'
*        gs_data-uebtk.
  PERFORM bdc_field       USING 'EINE-UEBTO' lv_uebto.
  PERFORM bdc_field       USING 'EINE-WAERS' gs_data-waers.
  PERFORM bdc_field       USING 'EINE-PEINH' lv_peinh.
  IF gs_data-bprme IS INITIAL.
    gs_data-bprme = gs_data-meins.
  ENDIF.
  PERFORM bdc_field       USING 'EINE-BPRME' gs_data-bprme.
  PERFORM bdc_field       USING 'EINE-MINBM' lv_minbm.

  IF lv_bpumz  <> 0.
    PERFORM bdc_field     USING 'EINE-BPUMZ' lv_bpumz.
  ENDIF.

  IF lv_bpumn <> 0 .
    PERFORM bdc_field     USING 'EINE-BPUMN' lv_bpumn.
  ENDIF.
  PERFORM bdc_field USING 'MMPUR_INCOTERMS_INFORECORDS-INCO1' gs_data-inco1.
  PERFORM bdc_field USING 'MMPUR_INCOTERMS_INFORECORDS-INCO2_L' gs_data-inco2.

  PERFORM bdc_dynpro      USING 'SAPMV13A' '1017'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.
  PERFORM bdc_field       USING 'RV13A-DATAB(01)' lv_datab.
  PERFORM bdc_field       USING 'RV13A-DATBI(01)' lv_datbi.

  PERFORM bdc_dynpro      USING 'SAPMV13A' '1017'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=SICH'.

  CALL TRANSACTION 'ME11' USING gt_bdcdata
                          MODE gv_mode
                          UPDATE gv_update
                          MESSAGES INTO gt_messtab.

  LOOP AT gt_messtab INTO gs_messtab WHERE msgtyp CA 'EAX'.

    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        id        = gs_messtab-msgid
        no        = gs_messtab-msgnr
        v1        = gs_messtab-msgv1
        v2        = gs_messtab-msgv2
        v3        = gs_messtab-msgv3
        v4        = gs_messtab-msgv4
      IMPORTING
        msg       = gv_msg
      EXCEPTIONS
        not_found = 1
        OTHERS    = 2.

    gs_data-ztype = 'E'.
    gs_data-zmsg = gs_data-zmsg && gv_msg.

*    gs_return-type = 'E'.
*    gs_return-message = gv_msg.
*    gs_return-message_v1 = gs_data-lifnr.
*    gs_return-message_v2 = gs_data-matnr.
*    gs_return-message_v3 = gs_data-ekorg.
*    gs_return-message_v4 = gs_data-esokz.

  ENDLOOP.

  IF gs_data-ztype IS INITIAL.

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.

    gv_flag = 'X'.

  ENDIF.

  REFRESH:gt_bdcdata,
          gt_messtab.

  CLEAR gv_msg.
  .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ME12
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_me12 .

  DATA:lv_netpr TYPE string,
       lv_c     TYPE c LENGTH 15,
       lv_bpumz TYPE string,
       lv_bpumn TYPE string,
       lv_peinh TYPE string,
       lv_norbm TYPE string,
       lv_aplfz TYPE string,
       lv_uebto TYPE c LENGTH 5.

  WRITE gs_data-netpr TO lv_c.
  lv_netpr = lv_c.
  CLEAR lv_c.
  WRITE gs_data-norbm TO lv_c.
  lv_norbm = lv_c.
*  LV_NETPR = gs_data-NETPR.
  lv_bpumz = gs_data-bpumz.
  lv_bpumn = gs_data-bpumn.
  lv_peinh = gs_data-peinh.
*  LV_NORBM = gs_data-NORBM.
  lv_aplfz = gs_data-aplfz.
*  WRITE gs_data-uebto TO lv_uebto.

  PERFORM bdc_dynpro      USING 'SAPMM06I' '0100'.
  PERFORM bdc_field       USING 'EINA-LIFNR' gs_data-lifnr.
  PERFORM bdc_field       USING 'EINA-MATNR' gs_data-matnr.
  PERFORM bdc_field       USING 'EINE-EKORG' gs_data-ekorg.
  PERFORM bdc_field       USING 'EINE-WERKS' gs_data-werks.
  PERFORM bdc_field       USING 'EINA-INFNR' ''.

  CASE gs_data-esokz.
    WHEN '0'.
      PERFORM: bdc_field USING 'RM06I-NORMB' 'X'.
    WHEN '2'.
      PERFORM: bdc_field USING 'RM06I-KONSI' 'X'.
    WHEN '3'.
      PERFORM: bdc_field USING 'RM06I-LOHNB' 'X'.
    WHEN 'P'.
      PERFORM: bdc_field USING 'RM06I-PIPEL' 'X'.
    WHEN OTHERS.
  ENDCASE.

  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.

  PERFORM bdc_dynpro      USING 'SAPMM06I' '0101'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=EINE'.

  PERFORM bdc_dynpro      USING 'SAPMM06I' '0102'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=BU'.
  PERFORM bdc_field       USING 'EINE-APLFZ' lv_aplfz.
  PERFORM bdc_field       USING 'EINE-EKGRP' gs_data-ekgrp.
  PERFORM bdc_field       USING 'EINE-NORBM' lv_norbm.
  PERFORM bdc_field       USING 'EINE-WEBRE' 'X'.

*  PERFORM bdc_field       USING 'EINE-UEBTK'
*        gs_data-uebtk.
*  PERFORM bdc_field       USING 'EINE-UEBTO'
*        lv_uebto.
*  IF gs_data-esokz = '3'.
*    PERFORM bdc_field       USING 'EINE-VERID'
*          gs_data-verid.
*  ENDIF.
  PERFORM bdc_field       USING 'EINE-MWSKZ' gs_data-mwskz.

  CALL TRANSACTION 'ME12' USING gt_bdcdata
                          MODE  gv_mode
                          UPDATE gv_update
                          MESSAGES INTO gt_messtab.

  LOOP AT gt_messtab INTO gs_messtab WHERE msgtyp CA 'EAX'.

    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        id        = gs_messtab-msgid
        no        = gs_messtab-msgnr
        v1        = gs_messtab-msgv1
        v2        = gs_messtab-msgv2
        v3        = gs_messtab-msgv3
        v4        = gs_messtab-msgv4
      IMPORTING
        msg       = gv_msg
      EXCEPTIONS
        not_found = 1
        OTHERS    = 2.
    gs_data-ztype = 'E'.
    gs_data-zmsg = gs_data-zmsg && gv_msg.
*    gs_return-message_v1 = gs_data-lifnr.
*    gs_return-message_v2 = gs_data-matnr.
*    gs_return-message_v3 = gs_data-ekorg.
*    gs_return-message_v4 = gs_data-esokz.

  ENDLOOP.

  IF gs_data-ztype IS INITIAL.

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    gs_data-ztype = 'S'.
    gs_data-zmsg = '修改成功'.
    gv_flag = 'X'.

  ENDIF.

  REFRESH: gt_bdcdata , gt_messtab.

  CLEAR gv_msg.

ENDFORM.

FORM frm_me12_price.

  DATA: lv_netpr TYPE string,
        lv_kstbm TYPE string,
        lv_kpein TYPE string,
        lv_fnam  TYPE bdcdata-fnam,
        lv_num   TYPE n LENGTH 2,
        lv_c     TYPE c LENGTH 15.

  WRITE gs_data-netpr TO lv_c.
  lv_netpr = lv_c .
*  WRITE gs_data-NETPR TO LV_NETPR.
*  WRITE gs_data-PEINH TO LV_C.
*  LV_KPEIN = LV_C .
  lv_kpein = gs_data-peinh.
*  WRITE  gs_data-PEINH TO LV_KPEIN.
*  LV_NETPR = gs_data-NETPR.
*  LV_KPEIN = gs_data-PEINH.


  PERFORM bdc_dynpro      USING 'SAPMM06I' '0100'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.
  PERFORM bdc_field       USING 'EINA-LIFNR' gs_data-lifnr.
  PERFORM bdc_field       USING 'EINA-MATNR' gs_data-matnr.
  PERFORM bdc_field       USING 'EINE-EKORG' gs_data-ekorg.
  PERFORM bdc_field       USING 'EINE-WERKS' gs_data-werks.

  CASE gs_data-esokz.
    WHEN '0'.
      PERFORM: bdc_field USING 'RM06I-NORMB' 'X'. " 标准
    WHEN '2'.
      PERFORM: bdc_field USING 'RM06I-KONSI' 'X'. " 寄售
    WHEN '3'.
      PERFORM: bdc_field USING 'RM06I-LOHNB' 'X'. " 外协加工
    WHEN 'P'.
      PERFORM: bdc_field USING 'RM06I-PIPEL' 'X'. " 管道
    WHEN OTHERS.
  ENDCASE.

  PERFORM bdc_dynpro      USING 'SAPMM06I' '0101'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=EINE'.

  " 条件按钮
  PERFORM bdc_dynpro      USING 'SAPMM06I' '0102'.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'EINE-UEBTO'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=KO'.

  " 新的有效期按钮
*  PERFORM BDC_DYNPRO      USING 'SAPLV14A' '0102'.
*  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
*                                '=NEWD'.

  PERFORM bdc_dynpro      USING 'SAPLV14A' '0102'.
*  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
*                                'VAKE-DATAB(01)'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=NEWD'.
  " 新的有效期按钮
*  PERFORM bdc_dynpro      USING 'SAPLV14A' '0102'.
*  PERFORM bdc_field       USING 'BDC_CURSOR' 'VAKE-DATAB(01)'.
*  PERFORM bdc_field       USING 'BDC_OKCODE' '=NEWD'.

  " 等级

  PERFORM bdc_dynpro      USING 'SAPMV13A' '1017'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'KONP-KBETR(01)'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=PDAT'.
  PERFORM bdc_field       USING 'KONP-KBETR(01)' lv_netpr.
  PERFORM bdc_field       USING 'KONP-KONWA(01)' gs_data-waers.
  PERFORM bdc_field       USING 'KONP-KPEIN(01)' lv_kpein.
  PERFORM bdc_field       USING 'KONP-KMEIN(01)' gs_data-bprme.
  PERFORM bdc_field       USING 'RV13A-DATAB(01)' gs_data-datab.
  PERFORM bdc_field       USING 'RV13A-DATBI(01)' gs_data-datbi.

  PERFORM bdc_dynpro      USING 'SAPMV13A' '0300'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.
  PERFORM bdc_field       USING 'KONP-GKWRT' lv_netpr.

  PERFORM bdc_dynpro      USING 'SAPMV13A' '0300'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=BACK'.

  IF gs_data-bpumz <> gs_data-bpumn .
    PERFORM bdc_dynpro      USING 'SAPMV13A' '1017'.
    PERFORM bdc_field       USING 'BDC_OKCODE' '=UMRE'.

    PERFORM bdc_dynpro      USING 'SAPMV13A' '0122'.
    PERFORM bdc_field       USING 'BDC_CURSOR' 'KONP-KUMNE'.
    PERFORM bdc_field       USING 'BDC_OKCODE' '=WEIT'.
    PERFORM bdc_field       USING 'KONP-KUMNE' gs_data-bpumn. "分母
    PERFORM bdc_field       USING 'KONP-KUMZA' gs_data-bpumz. "分子
  ENDIF.


  PERFORM bdc_dynpro      USING 'SAPMV13A' '1017'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=PSTF'.

  CLEAR lv_num.

  LOOP AT gt_data INTO DATA(ls_alv) WHERE matnr = gs_data-matnr AND
                                          lifnr = gs_data-lifnr AND
                                          ekorg = gs_data-ekorg AND
                                          esokz = gs_data-esokz AND
                                          kbetr > 0.

  ENDLOOP.

  IF sy-subrc = 0.

    PERFORM bdc_dynpro      USING 'SAPMV13A' '0303'.

    LOOP AT gt_data INTO ls_alv WHERE matnr = gs_data-matnr AND
    lifnr = gs_data-lifnr AND
    ekorg = gs_data-ekorg AND
    esokz = gs_data-esokz
    .
      lv_num = lv_num + 1.
      lv_fnam = 'KONM-KSTBM(' && lv_num && ')'.
*      LV_KSTBM = LS_ALV-KSTBM.
      CLEAR lv_c.
      WRITE ls_alv-kstbm  TO  lv_c.
      lv_kstbm = lv_c.
      PERFORM bdc_field       USING lv_fnam lv_kstbm.
      lv_fnam = 'KONM-KBETR(' && lv_num && ')'.
*      LV_NETPR = LS_ALV-KBETR.
      CLEAR lv_c.
      WRITE ls_alv-kbetr  TO  lv_c.
      lv_netpr = lv_c.
      PERFORM bdc_field       USING lv_fnam lv_netpr.
      CLEAR ls_alv.
    ENDLOOP.

  ENDIF.

  PERFORM bdc_field       USING 'BDC_OKCODE' '=SICH'.

*  PERFORM bdc_dynpro      USING 'SAPMV13A' '1017'. "CHANGE BY 11146 20.07.2021 15:12:19
*  PERFORM bdc_field       USING 'BDC_CURSOR' 'KONP-KBETR(01)'.
*  PERFORM bdc_field       USING 'BDC_OKCODE' '=SICH'.

  CALL TRANSACTION 'ME12 ' USING gt_bdcdata
                           MODE gv_mode
                           UPDATE gv_update
                           MESSAGES INTO gt_messtab.

  LOOP AT gt_messtab INTO gs_messtab WHERE msgtyp CA 'EAX'.

    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        id        = gs_messtab-msgid
        no        = gs_messtab-msgnr
        v1        = gs_messtab-msgv1
        v2        = gs_messtab-msgv2
        v3        = gs_messtab-msgv3
        v4        = gs_messtab-msgv4
      IMPORTING
        msg       = gv_msg
      EXCEPTIONS
        not_found = 1
        OTHERS    = 2.

    gs_data-ztype = 'E'.
    gs_data-zmsg = gs_data-zmsg && gv_msg.
*    gs_return-message_v1 = gs_data-lifnr.
*    gs_return-message_v2 = gs_data-matnr.
*    gs_return-message_v3 = gs_data-ekorg.
*    gs_return-message_v4 = gs_data-esokz.

  ENDLOOP.

  IF gs_data-ztype IS INITIAL.

    gs_data-ztype = 'S'.
    gs_data-zmsg = '创建更新成功'.

*    gs_return-type = 'S'.
*    gs_return-message = '创建更新成功'.
*    gs_return-message_v1 = gs_data-lifnr.
*    gs_return-message_v2 = gs_data-matnr.
*    gs_return-message_v3 = gs_data-ekorg.
*    gs_return-message_v4 = gs_data-esokz.

  ENDIF.

  REFRESH: gt_bdcdata,
           gt_messtab.

  CLEAR gv_msg.

ENDFORM.

关联方创建销售价格

  DATA lt_ftaxp LIKE TABLE OF ftaxp.

  DATA lv_kbetr TYPE konp-kbetr.

  "获取税率
  CALL FUNCTION 'GET_TAX_PERCENTAGE'
    EXPORTING
      aland   = 'CN'
      datab   = i_data-datab
      mwskz   = i_data-mwskz
      txjcd   = ''
    TABLES
      t_ftaxp = lt_ftaxp.

  READ TABLE lt_ftaxp INTO DATA(ls_ftaxp) WITH KEY kschl = 'MWVS'.

  lv_kbetr = i_eina-kbetr * ( 1 + ( ls_ftaxp-kbetr / 1000 ) ).

  PERFORM bdc_dynpro      USING 'SAPMV13A' '0100'.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'RV13A-KSCHL'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.
*  PERFORM bdc_field       USING 'RV13A-KSCHL' i_data-kschl.
  PERFORM bdc_field       USING 'RV13A-KSCHL' 'ZP01'.
  PERFORM bdc_dynpro      USING 'SAPLV14A' '0100'.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'RV130-SELKZ(01)'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=WEIT'.
  PERFORM bdc_dynpro      USING 'SAPMV13A' '1305'.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'KONP-KONWA(01)'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.
  PERFORM bdc_field       USING 'KOMG-VKORG' i_data-vkorg.
*  PERFORM bdc_field       USING 'KOMG-VTWEG' i_data-vtweg.
  PERFORM bdc_field       USING 'KOMG-VTWEG' '00'.
  PERFORM bdc_field       USING 'KOMG-KUNNR' i_data-kunnr.
  PERFORM bdc_field       USING 'KOMG-MATNR(01)' i_data-matnr.
  PERFORM bdc_field       USING 'KONP-KBETR(01)' lv_kbetr.
  PERFORM bdc_field       USING 'RV13A-DATAB(01)' i_data-datab.
  PERFORM bdc_field       USING 'RV13A-DATBI(01)' i_data-datbi.
  PERFORM bdc_dynpro      USING 'SAPMV13A' '1305'.
  PERFORM bdc_field       USING 'BDC_CURSOR' 'KOMG-MATNR(01)'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=SICH'.


  CALL TRANSACTION 'VK11' USING gt_bdcdata
                          MODE  gv_mode
                          UPDATE gv_update
                          MESSAGES INTO gt_messtab.

  LOOP AT gt_messtab INTO gs_messtab WHERE msgtyp CA 'EAX'.

    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        id        = gs_messtab-msgid
        no        = gs_messtab-msgnr
        v1        = gs_messtab-msgv1
        v2        = gs_messtab-msgv2
        v3        = gs_messtab-msgv3
        v4        = gs_messtab-msgv4
      IMPORTING
        msg       = gv_msg
      EXCEPTIONS
        not_found = 1
        OTHERS    = 2.

    o_type = 'E'.
    o_msg = o_msg && gv_msg.

    CLEAR gs_messtab.
  ENDLOOP.

  IF o_type IS INITIAL.
    o_type = 'S'.
    o_msg = '创建成功'.
  ENDIF.
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个简单的 ABAP Report BDC 实现创建采购合同的示例: 1. 创建一个自定义的屏幕布局,包含需要输入的采购合同信息。 2. 使用 TCODE SHDB 记录一个标准的采购合同创建过程的 BDC 数据。 3. 通过 ABAP 代码将该 BDC 数据读入内存中,并替换其中需要输入的信息为用户在屏幕上输入的信息。 4. 执行 BDC 事务,创建采购合同。 以下是一个示例 ABAP Report 代码: ``` REPORT z_create_purchase_contract. DATA: BEGIN OF bdcdata OCCURS 0, program LIKE sy-repid, dynpro LIKE sy-dynnr, dynbegin(1) TYPE c, fnam LIKE bdcdata-fnam, fval LIKE bdcdata-fval, END OF bdcdata. DATA: v_ebeln TYPE ekko-ebeln, v_bsart TYPE ekko-bsart, v_bukrs TYPE ekko-bukrs, v_lifnr TYPE ekko-lifnr, v_waers TYPE ekko-waers. PARAMETERS: p_ebeln TYPE ekko-ebeln, p_bsart TYPE ekko-bsart, p_bukrs TYPE ekko-bukrs, p_lifnr TYPE ekko-lifnr, p_waers TYPE ekko-waers. v_ebeln = p_ebeln. v_bsart = p_bsart. v_bukrs = p_bukrs. v_lifnr = p_lifnr. v_waers = p_waers. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = v_ebeln IMPORTING output = v_ebeln. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0100'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_SELECT-EKGRP'. bdcdata-fval = v_bsart. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0101'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_SELECT-BUKRS'. bdcdata-fval = v_bukrs. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0102'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_SELECT-LIFNR'. bdcdata-fval = v_lifnr. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0103'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_SELECT-WAERS'. bdcdata-fval = v_waers. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-EBELN'. bdcdata-fval = v_ebeln. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-EKORG'. bdcdata-fval = '1000'. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-BSART'. bdcdata-fval = v_bsart. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-BUKRS'. bdcdata-fval = v_bukrs. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-LIFNR'. bdcdata-fval = v_lifnr. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-WAERS'. bdcdata-fval = v_waers. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-ABSAK'. bdcdata-fval = 'X'. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-BEDAT'. bdcdata-fval = sy-datum. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-ERNAM'. bdcdata-fval = sy-uname. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-LOEKZ'. bdcdata-fval = 'X'. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0210'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-EBELN'. bdcdata-fval = v_ebeln. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0211'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-EBELN'. bdcdata-fval = v_ebeln. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0211'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-PO_TEXT'. bdcdata-fval = '采购合同文本'. APPEND bdcdata. CALL FUNCTION 'BDC_INSERT' EXPORTING program = bdcdata-program dynpro = bdcdata-dynpro dynbegin = bdcdata-dynbegin TABLES bdcdata = bdcdata. CALL FUNCTION 'BDC_TRANSACTION' EXPORTING update_task = 'S' EXCEPTIONS OTHERS = 1. ``` 在该示例中,我们使用了 PARAMETERS 语句定义了用户需要输入的采购合同信息,然后将这些信息替换到 BDC 数据中。最后通过调用 BDC_INSERT 和 BDC_TRANSACTION 函数执行 BDC 事务,创建采购合同。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值