MEK1/VK11创建条件记录BAPI

MEK1创建采购信息记录-BAPI 背景:原本用ME11创建采购信息记录,但没有输入制造商的位置,所以改用MEK1创建采购信息记录。 解决方法:(详细步骤参考以下链接,本次选用RV_CONDITION_COPY方法) MEK1/VK11创建条件记录BAPI_DeveloperMrMeng的博客-优快云博客 总结三种创建条件记录的BAPI,均可为SD或者MM创建对应的条件记录,只需更改对应条件表信息及key的信息即可。 1.BAPI_PRICES_CONDITIONS 2.IDOC_INPUT_COND_A 3.RV_CONDIT 阅读详情
AI摘要

本文详细介绍了在SAP系统中管理条件记录的三种BAPI方法:BAPI_PRICES_CONDITIONS、IDOC_INPUT_COND_A和RV_CONDITION_COPY/RV_CONDITION_SAVE/RV_CONDITION_RESET。这些BAPI可用于SD和MM模块,用于创建、更新和删除定价条件记录。通过示例代码展示了如何设置关键字段和操作参数,以及如何处理不同操作(如创建、更改和删除)的条件记录。同时提到了IDOC_INPUT_COND_A会自动处理有效期区间拆分,并且在更新时需要注意的细节,如删除标记的处理。

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

1.BAPI_PRICES_CONDITIONS

2.IDOC_INPUT_COND_A

3.RV_CONDITION_COPY、RV_CONDITION_SAVE、RV_CONDITION_RESET

本例为MM创建条件记录,使用定价类型Z001,定价表为A991,定价所需字段如下:

BAPI_PRICES_CONDITIONS 的使用方式

BAPI通过TABLE_NO参数确定价格信息写入哪张表,通过VARKEY参数将KEY值写入对应字段,以A991为例,根据标准程序对应的传值逻辑可以看到程序是如何将VARKEY赋值给各个定价表的key值字段的(以RV13+表名去查找对应的标准程序,BAPI中会根据表名调用对应程序的DB_UPDATE子例程)。

*&---------------------------------------------------------------------*
*& Report ZTEST_MEK1
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_MEK1.

DATA:
  LT_CONDCT  TYPE STANDARD TABLE OF BAPICONDCT,
  LS_CONDCT  TYPE BAPICONDCT,
  LT_CONDHD  TYPE STANDARD TABLE OF BAPICONDHD,
  LS_CONDHD  TYPE BAPICONDHD,
  LT_CONDIT  TYPE STANDARD TABLE OF BAPICONDIT,
  LS_CONDIT  TYPE BAPICONDIT,
  LT_CONDQS  TYPE STANDARD TABLE OF BAPICONDQS,
  LS_CONDQS  TYPE BAPICONDQS,
  LT_CONDVS  TYPE STANDARD TABLE OF BAPICONDVS,
  LS_CONDVS  TYPE BAPICONDVS,
  LT_RETURN  TYPE STANDARD TABLE OF BAPIRET2,
  LS_RETURN  TYPE BAPIRET2,
  LT_KNUMHS  TYPE STANDARD TABLE OF BAPIKNUMHS,
  LS_KNUMHS  TYPE BAPIKNUMHS,
  LT_INITIAL TYPE STANDARD TABLE OF CND_MEM_INITIAL,
  LS_INITIAL TYPE CND_MEM_INITIAL.

DATA:
  LS_A991 TYPE A991.

*定价信息KEY字段
LS_A991-LIFNR = '1000000005'.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
  EXPORTING
    INPUT        = '10000000309'
  IMPORTING
    OUTPUT       = LS_A991-MATNR
  EXCEPTIONS
    LENGTH_ERROR = 1
    OTHERS       = 2.
LS_A991-EKORG = '1000'.
LS_A991-WERKS = '100A'.
LS_A991-EKKOL = 'M'.
LS_A991-EAN11 = '20210721'.
LS_A991-KFRST = ''.

LS_CONDCT-OPERATION  = '009'.                    "009创建 004更改 003删除
LS_CONDCT-COND_USAGE = 'A'.                      "定价用途
LS_CONDCT-TABLE_NO   = '991'.                    "定价表
LS_CONDCT-APPLICATIO = 'M'.                      "M:采购 V:销售
LS_CONDCT-COND_TYPE  = 'Z001'.                   "条件类型
LS_CONDCT-VALID_FROM = '20210719'.               "有效期开始
LS_CONDCT-VALID_TO   = '20220719'.               "有效期结束
MOVE LS_A991+9(81) TO LS_CONDCT-VARKEY_LONG.     "定价表KEY信息组合
LS_CONDCT-COND_NO    = '$000000001'.             "创建时该字段第一位需要为'$',更新时为条件信息记录编号
APPEND LS_CONDCT TO LT_CONDCT.

LS_CONDHD-OPERATION  = '009'.
LS_CONDHD-CREATED_BY = SY-UNAME.
LS_CONDHD-CREAT_DATE = SY-DATUM.
LS_CONDHD-COND_USAGE = 'A'.
LS_CONDHD-TABLE_NO   = '991'.
LS_CONDHD-APPLICATIO = 'M'.
LS_CONDHD-COND_TYPE  = 'Z001'.
LS_CONDHD-VALID_FROM = '20210719'.
LS_CONDHD-VALID_TO   = '20220719'.
MOVE LS_A991+9(81) TO LS_CONDHD-VARKEY_LONG.
LS_CONDHD-COND_NO    = '$000000001'.
APPEND LS_CONDHD TO LT_CONDHD.

LS_CONDIT-OPERATION  = '009'.
LS_CONDIT-APPLICATIO = 'M'.
LS_CONDIT-COND_TYPE  = 'Z001'.
LS_CONDIT-COND_NO    = '$000000001'.
LS_CONDIT-COND_COUNT = 01.                       "必须为01
LS_CONDIT-SCALETYPE  = 'A'.
LS_CONDIT-CALCTYPCON = 'C'.
LS_CONDIT-COND_VALUE = '6.00'.
LS_CONDIT-CONDCURR   = 'JPY'.
LS_CONDIT-COND_P_UNT = '1'.
LS_CONDIT-COND_UNIT  = 'ST'.
LS_CONDIT-CONDCURREN = 'JPY'.
LS_CONDIT-COND_UNIT  = 'ST'.
LS_CONDIT-CURRENCY   = 'JPY'.
APPEND LS_CONDIT TO LT_CONDIT.

*条件记录创建
CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
* EXPORTING
*   PI_INITIALMODE             = ' '
*   PI_BLOCKNUMBER             =
*   PI_PHYSICAL_DELETION       =
  TABLES
    TI_BAPICONDCT  = LT_CONDCT
    TI_BAPICONDHD  = LT_CONDHD
    TI_BAPICONDIT  = LT_CONDIT
    TI_BAPICONDQS  = LT_CONDQS
    TI_BAPICONDVS  = LT_CONDVS
    TO_BAPIRET2    = LT_RETURN
    TO_BAPIKNUMHS  = LT_KNUMHS
    TO_MEM_INITIAL = LT_INITIAL
  EXCEPTIONS
    UPDATE_ERROR   = 1
    OTHERS         = 2.

LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE CA 'EAX'.
ENDLOOP.

IF SY-SUBRC <> 0.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
   EXPORTING
     WAIT          = 'X'.
ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.

CL_DEMO_OUTPUT=>DISPLAY( LT_RETURN ).

 如果不知道MEK1前台创建的记录定价底表是哪个,可以按照如下方式去查看

 

 

 以上为创建条件记录的方式,下面看修改和删除;

比如先创建一个条件记录的有效区间为(价格信息在KONH及KONP表中):

2021/07/21~9999/12/31,价格为5 CNY

现在新增一条有效区间为:

2023/07/21~2023/12/31,价格为6 CNY

那么理论上最终结果在A991定价表中应该有三条,分别为:

2021/07/21~2023/07/20,价格为5 CNY

2023/07/21~2023/12/31,价格为6 CNY

2024/01/01~9999/12/31,价格为5 CNY

所以这种场景下,使用BAPI_PRICES_CONDITIONS去更新定价时,应该操作三次数据:

2021/07/21~9999/12/31,价格为5 CNY => 2021/07/21~2023/07/20,价格为5 CNY   更新

2023/07/21~2023/12/31,价格为6 CNY  新增

2024/01/01~9999/12/31,价格为5 CNY  新增

新增传值参考上文,更新传值demo如下:

LS_CONDCT-OPERATION   = '004'.                   "009创建 004更改 003删除
LS_CONDCT-COND_USAGE  = 'A'.                     "定价用途
LS_CONDCT-TABLE_NO    = '991'.                   "定价表
LS_CONDCT-APPLICATIO  = 'M'.                     "M:采购 V:销售
LS_CONDCT-COND_TYPE   = 'ZNN1'.                  "条件类型
LS_CONDCT-VALID_FROM  = '20210721'.              "有效期开始
LS_CONDCT-VALID_TO    = '20231231'.              "有效期结束
LS_CONDCT-VARKEY_LONG = LS_A991+9(81).           "定价表KEY信息组合
LS_CONDCT-COND_NO     = '0000010964'.            "更新时为条件信息记录编号
APPEND LS_CONDCT TO LT_CONDCT.

LS_CONDHD-OPERATION   = '004'.
LS_CONDHD-CREATED_BY  = SY-UNAME.
LS_CONDHD-CREAT_DATE  = SY-DATUM.
LS_CONDHD-COND_USAGE  = 'A'.
LS_CONDHD-TABLE_NO    = '991'.
LS_CONDHD-APPLICATIO  = 'M'.
LS_CONDHD-COND_TYPE   = 'ZNN1'.
LS_CONDHD-VALID_FROM  = '20210721'.
LS_CONDHD-VALID_TO    = '20231231'.
LS_CONDHD-VARKEY_LONG = LS_A991+9(81).
LS_CONDHD-COND_NO     = '0000010964'.
APPEND LS_CONDHD TO LT_CONDHD.

LS_CONDIT-OPERATION  = '004'.
LS_CONDIT-APPLICATIO = 'M'.
LS_CONDIT-COND_TYPE  = 'ZNN1'.
LS_CONDIT-COND_NO    = '0000010964'.
LS_CONDIT-COND_COUNT = 01.                       "必须为01
LS_CONDIT-SCALETYPE  = 'A'.
LS_CONDIT-CALCTYPCON = 'C'.
LS_CONDIT-COND_VALUE = '14.00'.
LS_CONDIT-CONDCURR   = 'CNY'.
LS_CONDIT-COND_P_UNT = '1'.
LS_CONDIT-COND_UNIT  = 'ST'.
LS_CONDIT-CONDCURREN = 'CNY'.
LS_CONDIT-COND_UNIT  = 'ST'.
LS_CONDIT-CURRENCY   = 'CNY'.
APPEND LS_CONDIT TO LT_CONDIT.

另外一种场景,可能会对某个区间的条件记录做删除标记,传值demo如下:

LS_CONDCT-OPERATION   = '003'.                    "009创建 004更改 003删除
LS_CONDCT-COND_USAGE  = 'A'.                      "定价用途
LS_CONDCT-TABLE_NO    = '991'.                    "定价表
LS_CONDCT-APPLICATIO  = 'M'.                      "M:采购 V:销售
LS_CONDCT-COND_TYPE   = 'Z001'.                   "条件类型
LS_CONDCT-VALID_FROM  = '20210721'.               "有效期开始
LS_CONDCT-VALID_TO    = '99991231'.               "有效期结束
LS_CONDCT-VARKEY_LONG = LS_A991+9(81).            "定价表KEY信息组合
LS_CONDCT-COND_NO     = '0000252967'.             "更新时为条件信息记录编号
APPEND LS_CONDCT TO LT_CONDCT.

LS_CONDHD-OPERATION   = '003'.
LS_CONDHD-CREATED_BY  = SY-UNAME.
LS_CONDHD-CREAT_DATE  = SY-DATUM.
LS_CONDHD-COND_USAGE  = 'A'.
LS_CONDHD-TABLE_NO    = '991'.
LS_CONDHD-APPLICATIO  = 'M'.
LS_CONDHD-COND_TYPE   = 'Z001'.
LS_CONDHD-VALID_FROM  = '20210721'.
LS_CONDHD-VALID_TO    = '99991231'.
LS_CONDHD-VARKEY_LONG = LS_A991+9(81).
LS_CONDHD-COND_NO     = '0000252967'.
APPEND LS_CONDHD TO LT_CONDHD.

LS_CONDIT-OPERATION  = '003'.
LS_CONDIT-APPLICATIO = 'M'.
LS_CONDIT-COND_TYPE  = 'Z001'.
LS_CONDIT-COND_NO    = '0000252967'.
LS_CONDIT-COND_COUNT = 01.                       "必须为01
LS_CONDIT-SCALETYPE  = 'A'.
LS_CONDIT-CALCTYPCON = 'C'.
LS_CONDIT-COND_VALUE = '14.00'.
LS_CONDIT-CONDCURR   = 'CNY'.
LS_CONDIT-COND_P_UNT = '1'.
LS_CONDIT-COND_UNIT  = 'ST'.
LS_CONDIT-CONDCURREN = 'CNY'.
LS_CONDIT-COND_UNIT  = 'ST'.
LS_CONDIT-CURRENCY   = 'CNY'.
LS_CONDIT-INDIDELETE = 'X'.                      "删除标记
APPEND LS_CONDIT TO LT_CONDIT.

IDOC_INPUT_COND_A 的使用方式

该函数只支持创建模式,会自动针对于有效期区间去做条件记录的拆分,比如Key值相同的情况下,先创建一条有效区间为2021/07/21~9999/12/31的记录,再创建一条2031/01/01~2024/12/13的记录,会自动拆分产生三条记录,有一点要注意的是,debug时候发现底层varkey映射的时候,针对物料字段,S4系统新的长度为40位,但是字段映射时候是只截取18位的,按照旧的物料字段长度去截取的,所以传值时需要注意。

*&---------------------------------------------------------------------*
*& Report ZTEST_MEK1_IDOC
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_MEK1_IDOC.

DATA:
  LV_INPUT_METHOD       TYPE BDWFAP_PAR-INPUTMETHD,
  LV_MASS_PROCESSING    TYPE BDWFAP_PAR-MASS_PROC,
  LT_IDOC_CONTRL        TYPE STANDARD TABLE OF EDIDC,
  LS_IDOC_CONTRL        TYPE EDIDC,
  LT_IDOC_DATA          TYPE STANDARD TABLE OF EDIDD,
  LS_IDOC_DATA          TYPE EDIDD,
  LT_IDOC_STATUS        TYPE STANDARD TABLE OF BDIDOCSTAT,
  LS_IDOC_STATUS        TYPE BDIDOCSTAT,
  LT_RETURN_VARIABLES   TYPE STANDARD TABLE OF BDWFRETVAR,
  LT_SERIALIZATION_INFO TYPE STANDARD TABLE OF BDI_SER.

DATA:
  LS_KOMG TYPE E1KOMG,
  LS_KONH TYPE E1KONH,
  LS_KONP TYPE E1KONP,
  LS_A991 TYPE A991.

CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
  EXPORTING
    INPUT        = '10000000001'
  IMPORTING
    OUTPUT       = LS_A991-MATNR
  EXCEPTIONS
    LENGTH_ERROR = 1
    OTHERS       = 2.

LS_A991-LIFNR = '1000000005'.
LS_A991-EKORG = '1000'.
LS_A991-WERKS = '100A'.
LS_A991-EKKOL = 'M'.
LS_A991-EAN11 = 'test0721'.
LS_A991-KFRST = ''.

**********************************************************************IDOC HEADER
LS_IDOC_CONTRL-DOCTYP = 'COND_A04'.              "IDOC类型
LS_IDOC_CONTRL-MESTYP = 'COND_A'.                "消息类型
LS_IDOC_CONTRL-DOCREL = '700'.                   "版本

*LS_IDOC_CONTRL-RCVPRT = 'LS'.                    "接收方伙伴类型
*LS_IDOC_CONTRL-RCVPRN = 'SAPSD1'.                "接收方伙伴编号
*LS_IDOC_CONTRL-RCVPOR = 'SD1CLNT300'.            "接收方逻辑系统
*
*LS_IDOC_CONTRL-SNDPRT = 'LS'.                    "发送方伙伴类型
*LS_IDOC_CONTRL-SNDPRN = 'SAPSD1'.                "发送方伙伴编号
*LS_IDOC_CONTRL-SNDPOR = 'SD1CLNT300'.            "发送方逻辑系统
APPEND LS_IDOC_CONTRL TO LT_IDOC_CONTRL.

**********************************************************************KOMG
LS_IDOC_DATA-SEGNUM = '1'.                       "层级
LS_IDOC_DATA-HLEVEL = '1'.                       "层级
LS_IDOC_DATA-SEGNAM = 'E1KOMG'.                  "KEY数据

LS_KOMG-KVEWE      = 'A'.                        "定价用途
LS_KOMG-KOTABNR    = '991'.                      "定价表
LS_KOMG-KAPPL      = 'M'.                        "M:采购 V:销售
LS_KOMG-KSCHL      = 'Z001'.                     "条件类型
LS_KOMG-VAKEY      = |1000000005{ LS_A991-MATNR }{ LS_A991+59(31) }|. "定价表KEY信息组合   注意:物料的key只能放18位进去

LS_IDOC_DATA-SDATA = LS_KOMG.
APPEND LS_IDOC_DATA TO LT_IDOC_DATA.
CLEAR:
  LS_KOMG,
  LS_IDOC_DATA.

**********************************************************************KONH
LS_IDOC_DATA-SEGNUM = '2'.                       "层级
LS_IDOC_DATA-HLEVEL = '2'.                       "层级
LS_IDOC_DATA-SEGNAM = 'E1KONH'.                  "KONH

LS_KONH-KNUMH = '$000000001'.                    "创建
LS_KONH-DATAB = '20210721'.                      "有效期开始
LS_KONH-DATBI = '99991231'.                      "有效期结束

LS_IDOC_DATA-SDATA = LS_KONH.
APPEND LS_IDOC_DATA TO LT_IDOC_DATA.
CLEAR:
  LS_KOMG,
  LS_IDOC_DATA.

**********************************************************************KONP
LS_IDOC_DATA-SEGNUM = '3'.                       "层级
LS_IDOC_DATA-HLEVEL = '3'.                       "层级
LS_IDOC_DATA-SEGNAM = 'E1KONP'.                  "KONP

LS_KONP-KSCHL = 'Z001'.                          "条件类型
LS_KONP-KBETR = '500'.                           "价格
LS_KONP-KRECH = 'C'.                             "条件计算类型
LS_KONP-STFKZ = 'A'.
LS_KONP-KPEIN = '1'.                             "单位
LS_KONP-KMEIN = 'PCE'.                           "物料单位,例单位为PC,这里赋值为T006-MSEHI = 'ST' 去取得的ISOCODE,即PCE
LS_KONP-KONWA = 'JPY'.                           "货币
LS_KONP-LOEVM_KO = 'X'.                          "要删除时只需要打上该标记,其余字段传值不变

LS_IDOC_DATA-SDATA = LS_KONP.

LS_IDOC_DATA-SDATA = LS_KONP.
APPEND LS_IDOC_DATA TO LT_IDOC_DATA.
CLEAR:
  LS_KOMG,
  LS_IDOC_DATA.

CALL FUNCTION 'IDOC_INPUT_COND_A'
  EXPORTING
    INPUT_METHOD          = LV_INPUT_METHOD
    MASS_PROCESSING       = LV_MASS_PROCESSING
* IMPORTING
*   WORKFLOW_RESULT       =
*   APPLICATION_VARIABLE  =
*   IN_UPDATE_TASK        =
*   CALL_TRANSACTION_DONE =
  TABLES
    IDOC_CONTRL           = LT_IDOC_CONTRL
    IDOC_DATA             = LT_IDOC_DATA
    IDOC_STATUS           = LT_IDOC_STATUS
    RETURN_VARIABLES      = LT_RETURN_VARIABLES
    SERIALIZATION_INFO    = LT_SERIALIZATION_INFO
  EXCEPTIONS
    WRONG_FUNCTION_CALLED = 1
    OTHERS                = 2.

IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

CL_DEMO_OUTPUT=>NEW( )->WRITE_DATA( LT_IDOC_STATUS
                     )->WRITE_DATA( LT_RETURN_VARIABLES
                     )->DISPLAY( ).

 RV_CONDITION_COPY、RV_CONDITION_SAVE、RV_CONDITION_RESET 的使用方式

该方法会自动拆分创建条件记录,底层调用的是跟前台一样的逻辑,IDOC_INPUT_COND_A函数里面调用的就是该方法,所以也会自动拆分条件记录。

创建demo如下,需要注意的是,KEEP_OLD_RECORDS参数需要打上 'X' ,因为实际测试中发现假如上一条记录为更新删除标记,后面调用此方法创建出来的记录都会打上删除标记(即KONP-LOEVM_KO = 'X'),KEEP_OLD_RECORDS设置为 'X' 可以保证创建出来的新纪录不会打上删除标记。

*&---------------------------------------------------------------------*
*& Report ZTEST_MEK1_BAPI
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_MEK1_BAPI.

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.

" key fields
LS_KEY_FIELDS-LIFNR = '1000000006'.
LS_KEY_FIELDS-EKORG = '1000'.
LS_KEY_FIELDS-MATNR = '000000010000000017'.
LS_KEY_FIELDS-WERKS = '100A'.
LS_KEY_FIELDS-EKKOL = 'S'.
LS_KEY_FIELDS-EAN11 = 'TESTBAPI_9'.
LS_KEY_FIELDS-KFRST = ''.

CLEAR LS_COPY_RECORDS.
" condtion fields
LS_COPY_RECORDS-KOPOS = '01'.
LS_COPY_RECORDS-KSCHL = 'Z001'.
LS_COPY_RECORDS-KAPPL = 'M'.
LS_COPY_RECORDS-WAERS = 'JPY'.
LS_COPY_RECORDS-KMEIN = 'ST'.
LS_COPY_RECORDS-KBETR = '30'.
LS_COPY_RECORDS-KPEIN = '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             = '991'
    CONDITION_TYPE              = 'Z001'
    DATE_FROM                   = '20210721'
    DATE_TO                     = '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.
ELSE.
  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

更新demo如下,需要注意的是,更新时需要指定LS_COPY_RECORDS-KNUMH为要更新的条件记录编号、传入参数的SELECTION_DATE设置为起始日期、MAINTAIN_MODE设置为 'B';

另外,如果需要更新删除标记字段,除了设置LS_COPY_RECORDS-LOEVM_KO = 'X',还需要将KEEP_OLD_RECORDS = '',否则不会更新删除标记字段。

*&---------------------------------------------------------------------*
*& Report ZTEST_MEK1_BAPI
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_MEK1_BAPI.

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.

" key fields
LS_KEY_FIELDS-LIFNR = '1000000006'.
LS_KEY_FIELDS-EKORG = '1000'.
LS_KEY_FIELDS-MATNR = '000000010000000017'.
LS_KEY_FIELDS-WERKS = '100A'.
LS_KEY_FIELDS-EKKOL = 'S'.
LS_KEY_FIELDS-EAN11 = 'TESTBAPI_9'.
LS_KEY_FIELDS-KFRST = ''.

CLEAR LS_COPY_RECORDS.
" condtion fields
LS_COPY_RECORDS-KNUMH = '0000253006'.
LS_COPY_RECORDS-KOPOS = '01'.
LS_COPY_RECORDS-KSCHL = 'Z001'.
LS_COPY_RECORDS-KAPPL = 'M'.
LS_COPY_RECORDS-WAERS = 'JPY'.
LS_COPY_RECORDS-KMEIN = 'ST'.
LS_COPY_RECORDS-KBETR = '30'.
LS_COPY_RECORDS-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             = '991'
    CONDITION_TYPE              = 'Z001'
    DATE_FROM                   = '20210721'
    DATE_TO                     = '99991231'
    KEY_FIELDS                  = LS_KEY_FIELDS
    MAINTAIN_MODE               = 'B'
    OVERLAP_CONFIRMED           = 'X'
    USED_BY_IDOC                = 'X'
*    KEEP_OLD_RECORDS            = 'X'
    SELECTION_DATE              = '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.

以上。

ABAP实战:RV_CONDITION_COPY函数在VK11/VK12销售价格批量处理中的关键技巧 本文深入解析了ABAP中RV_CONDITION_COPY函数在VK11/VK12销售价格批量处理中的关键技巧,包括基础参数配置、跨月价格修改、默认值设置及异常处理等实战经验。通过优化调用方式和性能技巧,显著提升销售价格维护效率,适用于SAP定价体系中的各类复杂场景。 阅读详情

相关推荐

SAP MM采购定价实战:用BAPI_PRICES_CONDITIONS批量创建条件记录(含完整ABAP代码)

本文深入解析SAP MM模块中BAPI_PRICES_CONDITIONS的批量创建条件记录技术,提供完整的ABAP代码实现和优化策略。通过实战案例展示如何高效处理采购定价条件记录,替代传统MEK1/VK11事务码操作,显著提升供应链管理效率。

weixin_30340617的博客 394

ABAP 条件价格 BAPI_PRICES_CONDITIONS 没有修改记录,RV_CONDITION_COPY产生修改记录了

我正在尝试使用来自 excel 文件的数据更新 A* 定价条件表的 DATBI 字段。我尝试了以下方法但无法更新条目,因为 DATBI 是关键字段。它创建新记录而不是更新现有记录。实际使用中发现 BAPI_PRICES_CONDITIONS 这个是没有产生修改记录的 即没有写入修改记录数据到cdhdr 和cdpos的。而用 RV_CONDITION_COPY 实际产生了修改记录。

GAVIN 1877

SAP采购信息记录实战:MEK1与ME11对比及BAPI选择指南

本文深入解析SAP采购模块中MEK1与ME11两种创建采购信息记录的核心差异,并提供BAPI选型策略。通过对比后台表结构、适用场景及性能优化建议,帮助用户高效处理制造商信息缺失、价格条件重复等问题,提升供应链管理效率。

weixin_29201313的博客 395

RV_CONDITION_COPY VK11创建、更新销售价格条件

创建和更新 MODE A创建时:如果输入的日期和已有的条件日期重叠了,会修改已有条件的有效截止日期。所以创建的时候可以写截止到9999 如果没有维护物料的 销售组织会弹出个 stop的 message,可以在掉函数之前手动检查下 functionzfm_vk11. *"---------------------------------------------------------------------- *"*"本地接口: *"IMPORTING *"VALUE(AP...

盈于心胸,充塞天地 5043

MEK1与BAPI实战:高效创建采购信息记录的三种方法解析

本文深入解析了在SAP MM模块中创建包含制造商字段的采购信息记录的三种BAPI方法。针对标准事务码ME11无法满足制造商信息录入的场景,重点介绍了通过RV_CONDITION_COPY系列函数模拟MEK1前台操作的核心逻辑与代码实现,并对比了BAPI_PRICES_CONDITIONS与IDOC_INPUT_COND_A的适用场景,为开发者提供了高效、可靠的自动化解决方案。

weixin_29237635的博客 313

SAP批量价格维护:BAPI_PRICES_CONDITIONS函数详解与实战

在SAP ERP系统中,物料价格维护是销售与分销(SD)和物料管理(MM)模块的核心业务操作。其底层依赖于SAP的条件技术,该技术通过条件类型、条件表和条件编号等核心元素,将价格、折扣等业务数据抽象为结构化的条件记录。理解这一原理是进行高效、自动化数据处理的基础。从技术价值看,直接调用BAPI(业务应用程序编程接口)相较于手动操作或直接修改数据库表,能确保业务逻辑校验的完整性、维护数据一致性,并生成标准的变更日志,是实现业务流程自动化与系统集成的安全桥梁。在应用场景上,它尤其适用于从CRM、电商平台等外部系

weixin_33831673的博客 413

ME11/ME12采购信息记录及条件记录创建及更新BAPI:ME_INFORECORD_MAINTAIN_MULTI

使用ME_INFORECORD_MAINTAIN_MULTI函数进行采购信息记录及条件记录的创建以及更新,单独进行条件价格信息的创建及变更可以参照下面另一个帖子 MEK1/VK11创建条件记录BAPIhttps://blog.youkuaiyun.com/DeveloperMrMeng/article/details/118896458?spm=1001.2014.3001.5501 *****************************************************************

DeveloperMrMeng的博客 1万+

避坑指南:用RV_CONDITION_COPY函数组处理SAP定价条件记录时,如何避免删除标记(LOEVM_KO)的意外传播?

本文深入探讨了SAP系统中使用RV_CONDITION_COPY函数组处理定价条件记录时,删除标记(LOEVM_KO)意外传播的问题。通过分析问题根源和底层机制,提供了包括参数设置、前置检查、批量处理优化等完整解决方案,帮助开发者避免数据异常,确保业务流畅运行。

weixin_30628801的博客 623

ABAP MEK1/VK11创建条件价格

MEK1/VK11创建条件价格。

IamRunjiang的博客 721

SAP-下载SE78图片内容

通过创建附件中代码实现下载SAP系统中SE78事务中的图片内容

科研智能体平台搭建与实战:大模型如何驱动科研自动化

大模型技术的快速发展,正推动AI智能体从单纯对话工具向主动执行任务的科研伙伴演进。智能体的核心原理在于整合模型调用、工具使用、知识库检索与工作流编排,使其能够自主拆解目标、执行操作并迭代优化。在科研场景中,这一技术价值尤为突出:文献初筛、实验数据清洗、代码调试、结果汇总等高频重复劳动均可实现自动化,大幅释放研究者精力。从基础组件配置到多智能体协同,从平台选型到提示词调优,实际落地需要关注模型匹配、工具稳定性、记忆管理与人机校验机制。本文基于真实工程经验,系统梳理科研智能体平台的搭建路径、应用案例与高频问题排

weixin_32597009的博客 282

VK11\VK12\VK13 价格间隔拆分问题

BAPI_PRICES_CONDITIONS 修改价格存在BUG 不会自动拆分时间间隔,而是插入新的一条,导致有效期内存在多条记录,VK13debug, 在这里插入图片描述 网上查了一下资料,有说明要开发自动拆分间隔,感觉比较麻烦 原文链接 [添加链接描述] 实践发现,当存在价格记录时,前台TCODE:VK11 创建会自动根据已有时间间隔拆分多间隔.价格创建修改都可以通过录屏VK11实现,但要注意建议如果起止日期一致,前台会多出一个确认的屏幕,所有最好提前进行校验,一致不触发更改 测试源码如下 REPO

西柚的博客 2156

从一根USB线缆说起:深入浅出聊聊那些影响信号完整性和EMC性能的‘小细节’(双绞、屏蔽、360度搭接全解析)

本文深入探讨了USB线缆中影响信号完整性和EMC性能的关键细节,包括双绞线绞距、屏蔽层设计和360度搭接工艺。通过实验数据和实用技巧,揭示了这些‘小细节’如何显著影响高频信号质量和电磁兼容性,为工程师提供了从选购到系统设计的全面指南。

weixin_30824479的博客 437

SAP ABAP VK11 创建客户阶梯价 BAPI_PRICES_CONDITIONS

【代码】SAP ABAP VK11 创建客户阶梯价 BAPI_PRICES_CONDITIONS。

专注 SAP ABAP 开发,5 年一线项目经验 博客记录日常开发踩坑、语法实践、性能优化、实战案例。 分享可复用的代码片段、排错思路,持续沉淀 SAP 开发干货。 提供远程技术支持与项目开发服务。 2779

最大似然估计、梯度下降、EM算法、坐标上升

主要讲解的是机器学习中参数学习算法之间的区别,以及应用的场景。 最大似然估计: 其中目标函数是对数似然函数。为了求目标函数取最大值时的theta。有两个关机键步骤,第一个是对目标函数进行求导,第二个是另导数等于0,求解后直接得到最优theta。两个步骤缺一不可。 梯度下降: 对目标函数进行求导,利用导函数提供的梯度信息,使参数往梯度下降最快的方向移动一小步,来更新参数。为什

tzl2093的博客 5141

WSOLA原理及matlab仿真

WSOLA原理 对于 OLA 算法来说,常常无法保持原信号中的周期性结构,在帧裁剪的过程中,不能保证每一个帧都能覆盖完整周期并保证其相位对齐,会产生相位跳跃失真。 为保证**基频不变**,就要使用 WSOLA 算法。 WSOLA 并不直接在 Ha 处找一帧进行直接拼接,而是在一个区间内寻找与理想帧最接近的一帧进行叠加。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/8a234f4fde104fc69a9f3ddb7bcf3014.png?x-oss-process=ima

ManiacLook的博客 3214

ABAP:RV_CONDITION_COPY、VK11/VK12创建/修改销售价格注意点-----------血泪

ABAP:RV_CONDITION_COPY、VK11/VK12创建/修改销售价格注意点

FQHX_116的博客 5384

RT-DETR模型应用过程中的报错处理及疑问解答,涉及环境搭建、模型训练、模块改进、论文写作

本文记录了RT-DETR模型的这一系列过程中可能发生的问题,以及大家非常关心的问题,这里统一做了一个记录和解答。

Limiiiing的博客 1764

BAPI_PRICES_CONDITIONS

FM: ZBAPI_PRICES_CONDITIONS Tables     TI_BAPICONDCT     TI_BAPICONDHD     TI_BAPICONDIT     TI_BAPICONDQS     TI_BAPICONDVS     TO_BAPIRET2     TO_BAPIKNUMHS     TO_MEM_INITIAL . --------------------

森林木的博客 5361

基于Python的FTA协定内容爬虫实战:从数据抓取到智能分析

本文将详细介绍如何使用Python构建一个高效的FTA(自由贸易协定)内容爬虫,涵盖最新技术如Playwright、异步IO、智能解析等。通过本教程,您将学会如何从各类政府网站和国际组织平台抓取结构化FTA数据,并对其进行清洗、存储和分析。文章包含完整的代码实现和最佳实践指南,适合中高级Python开发者学习网络爬虫开发。

2201_76125261的博客 992

3.详解Labview串口通讯--从串口线连接到串口通讯保姆级教程

本文非常详细的介绍了使用Labview实现串口通讯,读完题主这篇文章,即使你是今天刚下载的Labview,也能熟练的连接并驱动串口执行,接下来和我一起学习下,记得关注并点赞不迷路

关注我,更多技术问题欢迎私聊~ 1万+

python if else三元_python-三元运算和if...else

三元运算result = 值1 if 条件 else 值2如果条件为真:result =值1如果条件为假:result =值2如:a,b,c = 1,3,5d = a if a > b else cprint(d)if...elseif-else_username='alex'_password='abc123'username=input("username:")password=inpu...

weixin_39574869的博客 280

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SAP中VK11中的bapi BAPI_PRICES_CONDITIONS

链接:http://blog.sina.com.cn/s/blog_c0978c9b0102vkzv.html *&---------------------------------------------------------------------* *&ReportZGRIR *& *&---------------------------------------------------------------------* *& *& *&a...

yujiaji的博客 3807

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

耐心思考

今天独自解决了两个比较棘手的问题1,BAPI_MATERIAL_SAVEDATA无法更改移动平均价的问题,通过参考MR21的源代码改为用 PRICES_CHANGE , PRICES_POST, BAPI_TRANSACTION_COMMIT 问题解决2,信息记录条件价格的更改无法使用别人推荐的 ME_MAINTAIN_INFORECORD解决,后通过 ME_UPDATE_INFORE

2517

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 不使用DEBUG实现对SAP底表的编辑更改
下一篇: CPI中Exchange Property和 Write Variables控件的使用
DeveloperMrMeng
博客等级 码龄5年 1767粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeveloperMrMeng

觉得有用的佛系投币哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值