MEK1创建采购信息记录-BAPI

这篇博客介绍了如何在SAP中使用RV_CONDITION_COPY函数来创建和更新采购信息记录。文章详细展示了MEK1和MEK2两个形式,分别用于创建和更新条件记录,涉及关键字段设置、数据复制和保存等步骤,适用于SD和MM模块。
摘要由CSDN通过智能技术生成

背景:原本用ME11创建采购信息记录,但没有输入制造商的位置,所以改用MEK1创建采购信息记录。

解决方法:(详细步骤参考以下链接,本次选用RV_CONDITION_COPY方法

MEK1/VK11创建条件记录BAPI_DeveloperMrMeng的博客-CSDN博客

总结三种创建条件记录的BAPI,均可为SD或者MM创建对应的条件记录,只需更改对应条件表信息及key的信息即可。

1.BAPI_PRICES_CONDITIONS

2.IDOC_INPUT_COND_A

3.RV_CONDITION_COPY、RV_CONDITION_SAVE、RV_CONDITION_RESET

具体代码步骤:

1、后台表A952是业务配置提供的

2、代码

(1)MEK1,创建数据

FORM frm_mek1_c1 USING pt_item TYPE zsrm_s_zfmmmsrm015 CHANGING pv_type pv_msg.


  DATA:
    ls_key_fields   TYPE komg,
    lt_copy_records TYPE TABLE OF komv,
    ls_copy_records TYPE komv,
    lt_copy_staffel TYPE TABLE OF condscale,
    ls_copy_staffel TYPE condscale,
    lt_knumh_comp   TYPE TABLE OF knumh_comp,
    ls_knumh_comp   TYPE knumh_comp,
    ls_komk         TYPE komk,
    ls_komp         TYPE komp,
    lv_record       TYPE konh-knumh,
    ls_a952         TYPE STANDARD TABLE OF a952 WITH HEADER LINE,
    ls_a951         TYPE STANDARD TABLE OF a951 WITH HEADER LINE,
    lt_ztmm033      TYPE STANDARD TABLE OF ztmm033 WITH HEADER LINE.
  DATA: lv_tab TYPE kotabnr.



  "定价表
  IF pt_item-remark01 = '01'.  "采购组织层级
    lv_tab = '952'.
    "若条件信息完全一致,返回报错消息:价格条件已存在!
    SELECT
      SINGLE * INTO ls_a952
      FROM a952
      WHERE lifnr = pt_item-lifnr
      AND   matnr = pt_item-matnr
      AND   ekorg = pt_item-ekorg
      AND   esokz = pt_item-esokz
      AND   emlif = pt_item-mfrnr
      AND   datab = pt_item-datab
      AND   datbi = pt_item-datbi.

    IF ls_a952 IS NOT INITIAL.
      pv_msg = '价格条件已存在!'.
      CLEAR ls_a952.
      EXIT.
    ENDIF.

  ELSEIF pt_item-remark01 = 'S'.  "工厂层级
    lv_tab = '951'.
    "若条件信息完全一致,返回报错消息:价格条件已存在!
    SELECT
      SINGLE * INTO ls_a951
      FROM a951
      WHERE lifnr = pt_item-lifnr
      AND   matnr = pt_item-matnr
      AND   ekorg = pt_item-ekorg
      AND   werks = pt_item-werks
      AND   esokz = pt_item-esokz
      AND   emlif = pt_item-mfrnr
      AND   datab = pt_item-datab
      AND   datbi = pt_item-datbi.

    IF ls_a951 IS NOT INITIAL.
      pv_msg = '价格条件已存在!'.
      CLEAR ls_a951.
      EXIT.
    ENDIF.

  ENDIF.

  " key fields
  ls_key_fields-lifnr = pt_item-lifnr. "'1000000006'.
  ls_key_fields-ekorg = pt_item-ekorg. "'1000'.
  ls_key_fields-matnr = pt_item-matnr. "'000000010000000017'.

  IF pt_item-remark01 = 'S'.
    ls_key_fields-werks = pt_item-werks. "'100A'.
  ENDIF.

  ls_key_fields-ekkol = 'S'. "'S'.
  ls_key_fields-ean11 = 'TESTBAPI_9'.
  ls_key_fields-kfrst = ''.
  ls_key_fields-esokz = pt_item-esokz. "'0'.
  ls_key_fields-emlif = pt_item-mfrnr.

  CLEAR ls_copy_records.
  " condtion fields
  ls_copy_records-kopos = '01'.
  ls_copy_records-kschl = pt_item-kschl. "'PB00'.
  ls_copy_records-kappl = 'M'.
  ls_copy_records-waers = pt_item-waers. "'JPY'.
  ls_copy_records-kmein = pt_item-meins. "pt_item-kmein. "'ST'.
  ls_copy_records-kbetr = pt_item-netpr. "pt_item-netpr.
  ls_copy_records-kpein = pt_item-peinh. "'1'.
*  ls_copy_records-kzbzg = 'C'.
*  ls_copy_records-stfkz = 'A'.
  APPEND ls_copy_records TO lt_copy_records.
  CLEAR ls_copy_records.

  CALL FUNCTION 'RV_CONDITION_RESET'.

  CALL FUNCTION 'RV_CONDITION_COPY'
    EXPORTING
      application                 = 'M'
      condition_table             = lv_tab
      condition_type              = pt_item-kschl "'PB00'
      date_from                   = pt_item-datab "'20220304'
      date_to                     = pt_item-datbi "'99991231'
      key_fields                  = ls_key_fields
      maintain_mode               = 'A'              "A:创建  B:更新
      overlap_confirmed           = 'X'
*     used_by_idoc                = 'X'
      keep_old_records            = 'X'
    IMPORTING
      e_komk                      = ls_komk
      e_komp                      = ls_komp
      new_record                  = lv_record
    TABLES
      copy_records                = lt_copy_records
      copy_staffel                = lt_copy_staffel
    EXCEPTIONS
      enqueue_on_record           = 1
      invalid_application         = 2
      invalid_condition_number    = 3
      invalid_condition_type      = 4
      no_authority_ekorg          = 5
      no_authority_kschl          = 6
      no_authority_vkorg          = 7
      no_selection                = 8
      table_not_valid             = 9
      no_material_for_settlement  = 10
      no_unit_for_period_cond     = 11
      no_unit_reference_magnitude = 12
      invalid_condition_table     = 13
      OTHERS                      = 14.

  IF sy-subrc = 0.
    " commit and get condition NO.
    CALL FUNCTION 'RV_CONDITION_SAVE'
      TABLES
        knumh_map = lt_knumh_comp.

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

    CALL FUNCTION 'RV_CONDITION_RESET'.

    READ TABLE lt_knumh_comp INTO ls_knumh_comp INDEX 1.
    IF sy-subrc = 0 AND ls_knumh_comp-knumh_new IS NOT INITIAL.
      MESSAGE ls_knumh_comp-knumh_new TYPE 'S'.
    ELSE.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    pv_type = 'S'.
    pv_msg  = ''.


  ELSE.
    pv_type = 'E'.
    pv_msg  = ''.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.


ENDFORM.


(2)MEK2,更新数据(更新删除标识)

FORM frm_mek2_update1 USING pt_item TYPE zsrm_s_zfmmmsrm015 CHANGING pv_type pv_msg.


  DATA: BEGIN OF bdcdata OCCURS 0.
          INCLUDE STRUCTURE bdcdata.
        DATA: END OF bdcdata.
  DATA:lt_message LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
  DATA: lt_bapireturn TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE .
  DATA:lv_mode  TYPE c VALUE 'N'.

  DATA: lv_netpr     TYPE p DECIMALS 2,
        ls_a951      TYPE a951,
        ls_a952      TYPE a952,
        lv_string    TYPE vakey_long,
        lv_knumh     TYPE i,
        lv_str       TYPE c LENGTH 10,
        lv_knumh_str TYPE a952-knumh.

  DATA: BEGIN OF lt_a95tab OCCURS 0,
          lifnr TYPE a952-lifnr,
          matnr TYPE a952-matnr,
          ekorg TYPE a952-ekorg,
          esokz TYPE a952-esokz,
          emlif TYPE a952-emlif,
          datbi TYPE a952-datbi,
          datab TYPE a952-datab,
          knumh TYPE a952-knumh,
          werks TYPE a951-werks,
          kbetr TYPE konp-kbetr,
          kpein TYPE konp-kpein,
          kmein TYPE konp-kmein,
          konwa TYPE konp-konwa,
        END OF lt_a95tab.

  DATA: lt_ztmm033 TYPE STANDARD TABLE OF ztmm033 WITH HEADER LINE .

  DATA:
    ls_key_fields   TYPE komg,
    lt_copy_records TYPE TABLE OF komv,
    ls_copy_records TYPE komv,
    lt_copy_staffel TYPE TABLE OF condscale,
    ls_copy_staffel TYPE condscale,
    lt_knumh_comp   TYPE TABLE OF knumh_comp,
    ls_knumh_comp   TYPE knumh_comp,
    ls_komk         TYPE komk,
    ls_komp         TYPE komp,
    lv_record       TYPE konh-knumh.
  DATA: lv_tab TYPE kotabnr.

  "定价表
  IF pt_item-remark01 = '01'.  "采购组织层级
    lv_tab = '952'.
    SELECT
      a~lifnr a~matnr a~ekorg a~esokz a~emlif a~datbi a~datab a~knumh
      b~kbetr b~kpein b~kmein b~konwa
      INTO CORRESPONDING FIELDS OF TABLE lt_a95tab
      FROM a952 AS a
      INNER JOIN konp AS b
      ON a~knumh = b~knumh
      WHERE a~lifnr = pt_item-lifnr
      AND   a~matnr = pt_item-matnr
      AND   a~ekorg = pt_item-ekorg
      AND   a~esokz = pt_item-esokz
      AND   a~emlif = pt_item-mfrnr
*      AND   datab = pt_item-datab
      AND   a~datbi > pt_item-datbi
      AND   b~loevm_ko NE 'X'
      .

  ELSEIF pt_item-remark01 = 'S'.  "工厂层级
    lv_tab = '951'.
    SELECT
      a~lifnr a~matnr a~ekorg a~werks a~esokz a~emlif a~datbi a~datab a~knumh
      b~kbetr b~kpein b~kmein b~konwa
      INTO CORRESPONDING FIELDS OF TABLE lt_a95tab
      FROM a951 AS a
      INNER JOIN konp AS b
      ON a~knumh = b~knumh
      WHERE a~lifnr = pt_item-lifnr
      AND   a~matnr = pt_item-matnr
      AND   a~ekorg = pt_item-ekorg
      AND   a~werks = pt_item-werks
      AND   a~esokz = pt_item-esokz
      AND   a~emlif = pt_item-mfrnr
*      AND   datab = pt_item-datab
      AND   a~datbi > pt_item-datbi
      AND   b~loevm_ko NE 'X'
      .

  ENDIF.


  IF lt_a95tab[] IS NOT INITIAL.
    READ TABLE lt_a95tab INDEX 1.
    " key fields
    ls_key_fields-lifnr = lt_a95tab-lifnr. "'1000000006'.
    ls_key_fields-ekorg = lt_a95tab-ekorg. "'1000'.
    ls_key_fields-matnr = lt_a95tab-matnr. "'000000010000000017'
    .
    IF pt_item-remark01 = 'S'.  "工厂层级.
      ls_key_fields-werks = lt_a95tab-werks. "'100A'.
    ENDIF.

*    ls_key_fields-ekkol = 'S'. "'S'.
    ls_key_fields-ean11 = 'TESTBAPI_9'.
    ls_key_fields-kfrst = ''.
    ls_key_fields-esokz = lt_a95tab-esokz. "'0'.
    ls_key_fields-emlif = lt_a95tab-emlif.


    CLEAR ls_copy_records.
    " condtion fields
    ls_copy_records-knumh = lt_a95tab-knumh. "'0000253006'.
    ls_copy_records-kopos = '01'.
    ls_copy_records-kschl = pt_item-kschl. "'Z001'.
    ls_copy_records-kappl = 'M'.
    ls_copy_records-waers = lt_a95tab-konwa.  "pt_item-waers. "'JPY'.
    ls_copy_records-kmein = lt_a95tab-kmein. "pt_item-kmein. "'ST'.
    ls_copy_records-kbetr = lt_a95tab-kbetr. "pt_item-netpr.
    ls_copy_records-kpein = lt_a95tab-kpein. "'1'.
*    ls_copy_records-kzbzg = 'C'.
*    ls_copy_records-stfkz = 'A'.
    ls_copy_records-loevm_ko = 'X'.

    APPEND ls_copy_records TO lt_copy_records.
    CLEAR ls_copy_records.

    CALL FUNCTION 'RV_CONDITION_RESET'.

    CALL FUNCTION 'RV_CONDITION_COPY'
      EXPORTING
        application                 = 'M'
        condition_table             = lv_tab
        condition_type              = pt_item-kschl "'PB00'
        date_from                   = lt_a95tab-datab "'20220304'
        date_to                     = lt_a95tab-datbi "'99991231'
        key_fields                  = ls_key_fields
        maintain_mode               = 'B'              "A:创建  B:更新
        overlap_confirmed           = 'X'
        used_by_idoc                = 'X'
        keep_old_records            = ''
        selection_date              = lt_a95tab-datab "'20230721'
      IMPORTING
        e_komk                      = ls_komk
        e_komp                      = ls_komp
        new_record                  = lv_record
      TABLES
        copy_records                = lt_copy_records
        copy_staffel                = lt_copy_staffel
      EXCEPTIONS
        enqueue_on_record           = 1
        invalid_application         = 2
        invalid_condition_number    = 3
        invalid_condition_type      = 4
        no_authority_ekorg          = 5
        no_authority_kschl          = 6
        no_authority_vkorg          = 7
        no_selection                = 8
        table_not_valid             = 9
        no_material_for_settlement  = 10
        no_unit_for_period_cond     = 11
        no_unit_reference_magnitude = 12
        invalid_condition_table     = 13
        OTHERS                      = 14.

    IF sy-subrc = 0.
      " commit and get condition NO.
      CALL FUNCTION 'RV_CONDITION_SAVE'
        TABLES
          knumh_map = lt_knumh_comp.

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

      CALL FUNCTION 'RV_CONDITION_RESET'.

      READ TABLE lt_knumh_comp INTO ls_knumh_comp INDEX 1.
      IF sy-subrc = 0 AND ls_knumh_comp-knumh_new IS NOT INITIAL.
        MESSAGE ls_knumh_comp-knumh_new TYPE 'S'.
      ELSE.
*    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ELSE.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.





    "成功后存储表ztmm033
    lt_ztmm033-lifnr    = pt_item-lifnr.
    lt_ztmm033-matnr    = pt_item-matnr.
    lt_ztmm033-ekorg    = pt_item-ekorg.
    lt_ztmm033-remark01 = pt_item-remark01.
    lt_ztmm033-esokz    = pt_item-esokz.
    lt_ztmm033-emlif    = pt_item-mfrnr.
    lt_ztmm033-wglif    = pt_item-wglif.
    lt_ztmm033-bstma    = pt_item-bstma.
    lt_ztmm033-zdate    = sy-datum.
    lt_ztmm033-ztime    = sy-uzeit.

    APPEND lt_ztmm033.
    MODIFY ztmm033 FROM TABLE lt_ztmm033[].
    COMMIT WORK.
    CLEAR:lt_ztmm033,lt_ztmm033[].
  ENDIF.

ENDFORM.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,烧录imx8mp的Android系统可以按照以下步骤进行: 1. 首先,校准DDR,确保没有问题。如果校准DDR后没有问题,可以将文件拷贝到对应的目录下。在《Android_User’s_Guide.pdf》的第50页有对应的说明,请仔细阅读。关键的两步是: - 将`${MY_ANDROID}/vendor/nxp/fsl-proprietary/uboot-firmware/imx8q/board-imx8qxp.c`拷贝到`scfw_export_mx8qx_b0/platform/board/mx8qx_mek/board.c` - 将`build_mx8qx_b0/scfw_tcm.bin`拷贝到`${MY_ANDROID}/vendor/nxp/fsl-proprietary/uboot-firmware/imx8q/mx8qx-scfw-tcm.bin` 2. 使用uuu + bootloader(等同于uuu + SDP)进行烧录。可以下载适用于imx6/imx7/imx8qxp的bootloader,并将其下载到内部RAM中。然后使用以下命令进行烧录: ``` uuu uboot.imx uuu flash.bin ``` 3. 最后,使用内建的烧录脚本来完成烧录过程。 请注意,以上步骤仅供参考,具体的烧录过程可能因为不同的环境和要求而有所不同。建议参考相关文档或咨询相关技术支持以获取更准确的指导。 #### 引用[.reference_title] - *1* [NXP(imx8qxp)系列DDR校准以及android镜像烧录](https://blog.csdn.net/weixin_51178981/article/details/123995811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [imx8 uuu烧录](https://blog.csdn.net/weixin_39951217/article/details/110260043)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值