调用类为了测试bdc
report z_hd_test.
data(lcl) = new ZCL_HTTP_P0ST_003( ).
data lv_json type string.
data lv_resp type string.
lv_json = '{ "ZSRMPO" : "1111",'&&
'"EBELN" :"",'&&
'"INFNR" :"",'&&
'"LIFNR" :"200525",'&&
'"MATNR" :"8102009996",'&&
'"MATKL" :"100000",'&&
'"EKORG" :"1000", '&&
'"ESOKZ" :"0", '&&
'"EKGRP" :"009", '&&
'"MWSKZ" :"J9", '&&
'"WAERS" :"CNY", '&&
'"PEINH" :"1", '&&
'"APLFZ" :"10", '&&
'"SORTL" :"100000", '&&
'"NORBM" :"1", '&&
'"MINBM" :"", '&&
'"BSTAE" :"", '&&
'"UNTTO" :"", '&&
'"UEBTO" :"", '&&
'"UEBTK" :"", '&&
'"IDNLF" :"", '&&
'"WGLIF" :"", '&&
'"NETPR" :"100", '&&
'"WEBRE" :"X", '&&
'"TXZ01" :"123", '&&
'"MEINS" :"PC", '&&
'"UMREN" :"1", '&&
'"UMREZ" :"1", '&&
'"BPRME" :"PC", '&&
'"BPUMZ" :"1", '&&
'"BPUMN" :"1", '&&
'"DATAB" :"20241111", '&&
'"DATBI" :"99991231", '&&
'"KONWA" :"CNY", '&&
'"KPEIN" :"1", '&&
'"KBETR" :"8", '&&
'"KMEIN" :"PC", '&&
'"LONG_TXT" :"", '&&
'"ZDEL" :"", '&&
'"CONDITION" :[{'&&
' "KSTBM":"1",'&&
' "KBETR":"30"'&&
'}'&&
']'&&
'}'.
lv_resp = lcl->post( lv_json ).
BREAK-POINT.
发布成url
method if_http_extension~handle_request.
data lv_json type string.
data lv_resp type string.
lv_json = server->request->get_cdata( ).
if lv_json is initial.
server->response->set_status(
exporting
code = 404 " HTTP STATUS CODE
reason = '未解析到BODY参数,请检查' " HTTP STATUS DESCRIPTION
).
return.
endif.
*---获取 调用方法 GET or post
data(lv_method) = server->request->get_method( ).
case lv_method.
when 'GET'.
me->get( server ).
when 'POST'.
lv_resp = me->post( lv_json ).
server->response->set_cdata( lv_resp ).
*&----设置成功得返回状态
server->response->set_status(
exporting
code = 200 " HTTP STATUS CODE
reason = 'OK' " HTTP STATUS DESCRIPTION
).
*------设置返回参数排列形式 [{"TYPE":"S","MESSAGE":"SUCCESS"}] 这种返回形式看着不方便
server->response->set_content_type( content_type = 'APPLICATION/JSON;CHARSET=UTF-8' ).
when others.
server->response->set_status( code = 405 reason = '请求方法不支持,请联系管理员' ).
endcase.
endmethod.
METHOD POST.
DATA:I_REQ TYPE ZMMS_005_IN,
O_RESP TYPE ZMMS_005_OUT,
LV_JSON TYPE STRING,
ZFLAG TYPE C,
ZLOEKZ TYPE C.
DATA: LV_MEINS TYPE MARA-MEINS,
LV_MSG TYPE BAPI_MSG,
LV_INFNR TYPE EINA-INFNR.
DATA: BEGIN OF LS_WERKS_SET,
WERKS TYPE WERKS_D,
END OF LS_WERKS_SET,
LT_WERKS_SET LIKE TABLE OF LS_WERKS_SET.
* BAPI创建参数
DATA:LT_EINA TYPE MEWIEINA_T, "一般数据
LS_EINA TYPE MEWIEINA, "一般数据
LT_EINAX TYPE MEWIEINAX_T,
LS_EINAX TYPE MEWIEINAX_TY,
LT_EINE TYPE MEWIEINE_T, "采购组织数据
LS_EINE TYPE MEWIEINE_TY, "采购组织数据
LT_EINEX TYPE MEWIEINEX_T,
LS_EINEX TYPE MEWIEINEX_TY,
LT_COND_VALIDITY TYPE MEWIVALIDITY_TT, "条件有效期
LS_COND_VALIDITY TYPE MEWIVALIDITY_TY, "条件有效期
LT_CONDITION TYPE MEWICONDITION_TT, "条件明细
LS_CONDITION TYPE MEWICONDITION_TY, "条件明细
LT_PIRTEXT TYPE MEWIPIRTEXT_TT, "文本
LS_PIRTEXT TYPE MEWIPIRTEXT_TY,
LT_EINA_E TYPE MEWIEINA_T, "创建返回-一般数据
LT_EINE_E TYPE MEWIEINE_T, "创建返回-采购组织数据
LT_RETURN TYPE MEWI_TT_RETURN, "FS4MIG_T_BAPIRET2. "创建返回消息
LT_QUAN TYPE MEWISCALEQUAN_TT,
LS_QUAN TYPE MEWISCALEQUAN_TY.
* lv_number TYPE i.
*&---分割文本
DATA:LV_TXT TYPE STRING,
LV_LENGTH TYPE N LENGTH 4,
LV_NUM TYPE N LENGTH 4,
LV_COUNT TYPE N LENGTH 4,
LV_INDEX TYPE N LENGTH 2,
LV_START TYPE N LENGTH 4.
DATA:LV_STATUS TYPE BAPI_MTYPE.
DEFINE MESSAEG.
*&------内表逻辑处理 ---------
e_json = /ui2/cl_json=>serialize(
data = &1
compress = abap_true "返回参数为空的情况就不展示
pretty_name = 'X' "大写:'' 小写:'L' 遇到下划线得第一个字母变大写,并且下划线消失,其他情况是小写:'X'
).
END-OF-DEFINITION.
LV_JSON = I_JSON.
DATA:LV_CHAR(10) TYPE C.
LV_CHAR = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB. "09 TAB符
REPLACE ALL OCCURRENCES OF LV_CHAR IN LV_JSON WITH ''.
LV_CHAR = CL_ABAP_CHAR_UTILITIES=>CR_LF. "0D0A 回车换行
REPLACE ALL OCCURRENCES OF LV_CHAR IN LV_JSON WITH ''.
LV_CHAR = CL_ABAP_CHAR_UTILITIES=>VERTICAL_TAB. "0B 垂直制表符
REPLACE ALL OCCURRENCES OF LV_CHAR IN LV_JSON WITH ''.
LV_CHAR = CL_ABAP_CHAR_UTILITIES=>NEWLINE. "0A 换行
REPLACE ALL OCCURRENCES OF LV_CHAR IN LV_JSON WITH ''.
LV_CHAR = CL_ABAP_CHAR_UTILITIES=>FORM_FEED. "0C 换页
REPLACE ALL OCCURRENCES OF LV_CHAR IN LV_JSON WITH ''.
LV_CHAR = CL_ABAP_CHAR_UTILITIES=>BACKSPACE. "08 退格符
REPLACE ALL OCCURRENCES OF LV_CHAR IN LV_JSON WITH ''.
LV_CHAR = CL_ABAP_CHAR_UTILITIES=>BYTE_ORDER_MARK_LITTLE. "(UTF-16LE)的文件头
REPLACE ALL OCCURRENCES OF LV_CHAR IN LV_JSON WITH ''.
LV_CHAR = CL_ABAP_CHAR_UTILITIES=>BYTE_ORDER_MARK_UTF8. "(UTF-8)的文件头
REPLACE ALL OCCURRENCES OF LV_CHAR IN LV_JSON WITH ''.
*----日志RES写入
* SELECT SINGLE URL INTO @DATA(LV_URL) FROM ZTSRM_URL WHERE IF_ID = 'ZSRM003' AND HOST = @SY-HOST.
SELECT SINGLE * FROM ZTCOM_IF_LIST INTO @DATA(LS_LIST) WHERE IF_ID = 'ZSRM003'.
DATA(LV_URL) = LS_LIST-IF_HOST && LS_LIST-IF_URL.
IF LS_LIST-IF_LOG_ACTIVE = 'X'. "->Create Log Start
TRY.
CL_SYSTEM_UUID=>IF_SYSTEM_UUID_STATIC~CREATE_UUID_X16( RECEIVING UUID = DATA(LV_GUID) ).
CATCH CX_UUID_ERROR INTO DATA(LO_ERR).
ENDTRY.
ENDIF.
IF LS_LIST-IF_LOG_ACTIVE = 'X'.
DATA(LO_TOOLKIT) = NEW ZCL_TOOLKIT( ).
LO_TOOLKIT->CREATE_IF_LOG( EXPORTING IV_GUID = LV_GUID IV_IFID = 'ZSRM003' IV_DATA = LV_JSON IV_STEP = 'REQ' IV_METHOD = 'POST' IV_URL = CONV #( LV_URL ) ).
ENDIF.
*&------将JSON转换成内表
/UI2/CL_JSON=>DESERIALIZE(
EXPORTING
JSON = LV_JSON
CHANGING
DATA = I_REQ
).
*&------内表逻辑处理 STRAT-------
"前导0
I_REQ-LIFNR = |{ I_REQ-LIFNR ALPHA = IN }|.
"前导0
I_REQ-BSTAE = |{ I_REQ-BSTAE ALPHA = IN }|.
IF I_REQ-MATNR IS NOT INITIAL.
"物料前导零
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
INPUT = I_REQ-MATNR
IMPORTING
OUTPUT = I_REQ-MATNR
EXCEPTIONS
LENGTH_ERROR = 1
OTHERS = 2.
*&-----如果有物料就扩marc上面的,如果没有物料就扩1002 1012
SELECT WERKS INTO TABLE @LT_WERKS_SET FROM MARC WHERE MATNR = @I_REQ-MATNR AND WERKS IN ( '1002' , '1012' ).
ELSE.
IF I_REQ-INFNR IS INITIAL ."增加信息记录号必传校验
SELECT SINGLE * INTO @DATA(LS_INFNR) FROM EINA WHERE MATKL = @I_REQ-MATKL AND LIFNR = @I_REQ-LIFNR AND TXZ01 = @I_REQ-TXZ01.
IF SY-SUBRC = 0.
O_RESP-MSGTY = 'E'.
O_RESP-MSGTX = '无物料价格修改的请输入原有采购信息记录号'.
MESSAEG O_RESP.
EXIT.
ENDIF.
ENDIF.
LT_WERKS_SET = VALUE #(
( WERKS = '1002' )
( WERKS = '1012' )
).
ENDIF.
LOOP AT LT_WERKS_SET INTO LS_WERKS_SET.
IF O_RESP-MSGTY = 'E'.
MESSAEG O_RESP.
EXIT.
ENDIF.
CLEAR:LV_MSG,LS_EINA,LS_EINAX,LS_EINE,LS_EINEX, LS_COND_VALIDITY,LS_CONDITION,LS_PIRTEXT,LS_QUAN.
REFRESH :LT_EINA,LT_EINAX,LT_EINE,LT_EINEX,LT_COND_VALIDITY,LT_CONDITION,LT_PIRTEXT,LT_EINA_E,LT_EINE_E, LT_RETURN,LT_QUAN.
I_REQ-WERKS = LS_WERKS_SET-WERKS.
IF I_REQ-MATNR IS NOT INITIAL.
"获取历史采购信息记录
SELECT A~INFNR,
A~MATNR, "物料
A~LIFNR, "供应商
B~EKORG, "采购组织
B~ESOKZ, "信息类别
B~WERKS, "工厂
B~LOEKZ, "采购组织数据是否删除
A~LOEKZ AS LOEKZ_Y "一般数据是否删除
INTO TABLE @DATA(LT_INFOREC_OLD)
FROM EINA AS A
LEFT JOIN EINE AS B ON A~INFNR = B~INFNR
WHERE A~MATNR = @I_REQ-MATNR
AND A~LIFNR = @I_REQ-LIFNR.
ENDIF.
SORT LT_INFOREC_OLD BY MATNR LIFNR EKORG ESOKZ WERKS.
IF I_REQ-ZDEL IS INITIAL.
CALL FUNCTION 'ZFM_DEL_BDC'
EXPORTING
I_REQ = I_REQ
IMPORTING
O_RESP = O_RESP.
ENDIF.
IF I_REQ-MATNR IS NOT INITIAL.
"判断走bdc原来是否存在条件(无物料:A025 有物料:A017)
SELECT A~LIFNR, "供应商
A~MATNR, "物料
A~EKORG, "采购组织
A~WERKS, "工厂
A~ESOKZ, "信息类型
A~DATAB, "有效期自
A~DATBI, "有效期至
A~KNUMH "条件记录编号
INTO TABLE @DATA(LG_A017)
FROM A017 AS A
WHERE A~MATNR = @I_REQ-MATNR
AND A~LIFNR = @I_REQ-LIFNR
AND A~EKORG = @I_REQ-EKORG
AND A~ESOKZ = @I_REQ-ESOKZ
AND A~WERKS = @I_REQ-WERKS
AND A~KSCHL = 'PB00'.
IF LG_A017 IS NOT INITIAL.
ZFLAG = 'X'.
ENDIF.
ENDIF.
"<<--采购信息记录删除
IF I_REQ-ZDEL IS NOT INITIAL.
LS_EINA-DELETE_IND = 'X'.
LS_EINAX-DELETE_IND = ABAP_TRUE.
LS_EINE-DELETE_IND = 'X'.
LS_EINEX-DELETE_IND = ABAP_TRUE.
LS_CONDITION-DELETION_IND = 'X'.
ENDIF.
"-->>采购信息记录删除
IF I_REQ-INFNR IS NOT INITIAL.
"更新-基本数据
LS_EINA-INFO_REC = I_REQ-INFNR. "采购信息记录编号
LS_EINAX-INFO_RECN = I_REQ-INFNR. "采购信息记录编号
LS_EINAX-INFO_REC = 'X'. "采购信息记录编号
"更新-采购数据
LS_EINE-INFO_REC = I_REQ-INFNR. "采购信息记录编号
LS_EINEX-INFO_RECN = I_REQ-INFNR. "采购信息记录编号
LS_EINEX-INFO_REC = 'X'. "采购信息记录编号
ELSE.
"判断是否存在历史采购信息记录(有物料的,无物料走bdc)
READ TABLE LT_INFOREC_OLD INTO DATA(LS_INFOREC_OLD) WITH KEY MATNR = I_REQ-MATNR
LIFNR = I_REQ-LIFNR
* EKORG = I_REQ-EKORG
* ESOKZ = I_REQ-ESOKZ
* WERKS = I_REQ-WERKS
BINARY SEARCH.
IF SY-SUBRC = 0.
"更新-基本数据
LS_EINA-INFO_REC = LS_INFOREC_OLD-INFNR. "采购信息记录编号
LS_EINAX-INFO_RECN = LS_INFOREC_OLD-INFNR. "采购信息记录编号
LS_EINAX-INFO_REC = 'X'. "采购信息记录编号
"更新-采购数据
LS_EINE-INFO_REC = LS_INFOREC_OLD-INFNR. "采购信息记录编号
LS_EINEX-INFO_RECN = LS_INFOREC_OLD-INFNR. "采购信息记录编号
LS_EINEX-INFO_REC = 'X'. "采购信息记录编号
"更新-条件价格有效期
* LS_COND_VALIDITY-INFO_REC = LS_INFOREC_OLD-INFNR. "采购信息记录编号
"更新-条件价格信息
* LS_CONDITION-INFO_REC = LS_INFOREC_OLD-INFNR. "采购信息记录编号
"更新-文本信息
LS_PIRTEXT-INFO_REC = LS_INFOREC_OLD-INFNR. "采购信息记录编号
LV_INFNR = LS_INFOREC_OLD-INFNR.
I_REQ-INFNR = LS_INFOREC_OLD-INFNR.
ENDIF.
ENDIF.
"创建&更新-基本数据
IF I_REQ-MATNR IS NOT INITIAL.
LS_EINA-MATERIAL = I_REQ-MATNR. "物料号
LS_EINAX-MATERIAL = 'X'.
ENDIF.
IF I_REQ-LIFNR IS NOT INITIAL.
LS_EINA-VENDOR = I_REQ-LIFNR. "供应商
LS_EINAX-VENDOR = 'X'.
ENDIF.
*&---采购信息记录的短文本
IF I_REQ-TXZ01 IS NOT INITIAL.
LS_EINA-SHORT_TEXT = I_REQ-TXZ01.
LS_EINAX-SHORT_TEXT = 'X'.
ENDIF.
*&---供应商物料编号
IF I_REQ-IDNLF IS NOT INITIAL.
LS_EINA-VEND_MAT = I_REQ-IDNLF.
LS_EINAX-VEND_MAT = 'X'.
ENDIF.
*&---物料组
IF I_REQ-MATKL IS NOT INITIAL.
LS_EINA-MAT_GRP = I_REQ-MATKL.
LS_EINAX-MAT_GRP = 'X'.
ENDIF.
*&---排序字段
IF I_REQ-SORTL IS NOT INITIAL.
LS_EINA-SORTED_BY = I_REQ-SORTL.
LS_EINAX-SORTED_BY = 'X'.
ENDIF.
*&---供应商物料组
IF I_REQ-WGLIF IS NOT INITIAL.
LS_EINA-VEND_MATG = I_REQ-WGLIF.
LS_EINAX-VEND_MATG = 'X'.
ENDIF.
IF I_REQ-MATNR IS NOT INITIAL.
*&---价格转换分母
IF I_REQ-UMREN IS NOT INITIAL.
LS_EINA-CONV_DEN1 = I_REQ-UMREN.
LS_EINAX-CONV_DEN1 = 'X'.
ENDIF.
IF I_REQ-UMREZ IS NOT INITIAL.
*&---价格转换分子
LS_EINA-CONV_NUM1 = I_REQ-UMREZ.
LS_EINAX-CONV_NUM1 = 'X'.
ENDIF.
ENDIF.
*&---单位
IF I_REQ-MEINS IS NOT INITIAL.
CLEAR:LV_MEINS.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
INPUT = I_REQ-MEINS
IMPORTING
OUTPUT = LV_MEINS
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
* LS_EINA-BASE_UOM = LV_MEINS.
* LS_EINAX-BASE_UOM = 'X'.
LS_EINA-PO_UNIT = LV_MEINS.
LS_EINAX-PO_UNIT = 'X'.
ENDIF.
APPEND LS_EINA TO LT_EINA.
APPEND LS_EINAX TO LT_EINAX.
*&=====================================================&*
*& 采购组织数据1 &*
*&=====================================================&*
IF I_REQ-EKORG IS NOT INITIAL.
LS_EINE-EINE_INDX = '01'. "顺序编号
LS_EINEX-EINE_INDX = '01'.
IF I_REQ-EKORG IS NOT INITIAL.
LS_EINE-PURCH_ORG = I_REQ-EKORG. "采购组织
LS_EINEX-PURCH_ORG = ABAP_TRUE.
ENDIF.
IF I_REQ-ESOKZ IS NOT INITIAL.
LS_EINE-INFO_TYPE = I_REQ-ESOKZ. "采购信息记录分类
LS_EINEX-INFO_TYPE = ABAP_TRUE.
ENDIF.
IF I_REQ-WERKS IS NOT INITIAL.
LS_EINE-PLANT = I_REQ-WERKS. "工厂
LS_EINEX-PLANT = ABAP_TRUE.
ENDIF.
"计划交货时间(天)
IF I_REQ-APLFZ IS NOT INITIAL.
LS_EINE-PLND_DELRY = I_REQ-APLFZ.
LS_EINEX-PLND_DELRY = ABAP_TRUE.
ENDIF.
"采购组
IF I_REQ-EKGRP IS NOT INITIAL.
LS_EINE-PUR_GROUP = I_REQ-EKGRP.
LS_EINEX-PUR_GROUP = ABAP_TRUE.
ENDIF.
"标准数量
IF I_REQ-NORBM IS NOT INITIAL.
LS_EINE-NRM_PO_QTY = I_REQ-NORBM.
LS_EINEX-NRM_PO_QTY = ABAP_TRUE.
ENDIF.
"最小采购订单数量
IF I_REQ-MINBM IS NOT INITIAL.
LS_EINE-MIN_PO_QTY = I_REQ-MINBM.
LS_EINEX-MIN_PO_QTY = ABAP_TRUE.
ENDIF.
"控制代码
IF I_REQ-BSTAE IS NOT INITIAL.
LS_EINE-CONF_CTRL = I_REQ-BSTAE.
LS_EINEX-CONF_CTRL = ABAP_TRUE.
ENDIF.
"基于收货的发票校验
IF I_REQ-WEBRE IS NOT INITIAL.
LS_EINE-GR_BASEDIV = I_REQ-WEBRE.
LS_EINEX-GR_BASEDIV = ABAP_TRUE.
ENDIF.
"税码
IF I_REQ-MWSKZ IS NOT INITIAL.
LS_EINE-TAX_CODE = I_REQ-MWSKZ.
LS_EINEX-TAX_CODE = ABAP_TRUE.
ENDIF.
"净价
IF I_REQ-NETPR IS NOT INITIAL.
LS_EINE-NET_PRICE = I_REQ-NETPR.
LS_EINEX-NET_PRICE = ABAP_TRUE.
ENDIF.
"货币码
* IF I_REQ-WAERS IS NOT INITIAL.
* LS_EINE-CURRENCY = I_REQ-WAERS.
* LS_EINEX-CURRENCY = ABAP_TRUE.
* ENDIF.
"价格单位
IF I_REQ-PEINH IS NOT INITIAL.
LS_EINE-PRICE_UNIT = I_REQ-PEINH.
LS_EINEX-PRICE_UNIT = ABAP_TRUE.
ENDIF.
"订单价格单位(采购)
IF I_REQ-BPRME IS NOT INITIAL.
CLEAR:LV_MEINS.
*&---价格单位
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
INPUT = I_REQ-BPRME
IMPORTING
OUTPUT = LV_MEINS
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
LS_EINE-ORDERPR_UN = LV_MEINS.
LS_EINEX-ORDERPR_UN = ABAP_TRUE.
"价格单位与采购订单单位的转换分子
* IF I_REQ-BPUMZ IS NOT INITIAL.
* LS_EINE-CONV_NUM1 = I_REQ-BPUMZ.
* LS_EINEX-CONV_NUM1 = ABAP_TRUE.
* ENDIF.
* "价格单位与采购订单单位的转换分母
* IF I_REQ-BPUMN IS NOT INITIAL.
* LS_EINE-CONV_DEN1 = I_REQ-BPUMN.
* LS_EINEX-CONV_DEN1 = ABAP_TRUE.
* ENDIF.
ENDIF.
*是否自动溯源
IF I_REQ-AUT_SOURCE IS NOT INITIAL.
LS_EINE-AUTO_SOURCE = I_REQ-AUT_SOURCE.
LS_EINEX-AUTO_SOURCE = ABAP_TRUE.
ENDIF.
APPEND LS_EINE TO LT_EINE.
APPEND LS_EINEX TO LT_EINEX.
ENDIF.
*&=====================================================&*
*& 条件 &*
*&=====================================================&*
* IF I_REQ-ZDEL IS INITIAL.
*
* LS_COND_VALIDITY-EINE_INDX = '01'. "顺序编号
* LS_COND_VALIDITY-PLANT = I_REQ-WERKS. "工厂
* LS_COND_VALIDITY-VALID_FROM = I_REQ-DATAB. "有效期从
* LS_COND_VALIDITY-VALID_TO = I_REQ-DATBI. "有效期至
* APPEND LS_COND_VALIDITY TO LT_COND_VALIDITY.
** 创建&更新-条件明细
* LS_CONDITION-EINE_INDX = '01'. "顺序编号
* LS_CONDITION-COND_TYPE = 'PB00'. "条件类型
* LS_CONDITION-COND_VALUE = I_REQ-KBETR. "净价
* LS_CONDITION-CURRENCY = I_REQ-KONWA."货币码
* IF I_REQ-KONWA IS INITIAL.
* LS_CONDITION-CURRENCY = 'CNY'."货币码
* ENDIF.
* LS_CONDITION-COND_P_UNT = I_REQ-KPEIN."条件定价单位
* IF I_REQ-KMEIN IS NOT INITIAL.
* CLEAR:LV_MEINS.
**&---价格单位
* CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
* EXPORTING
* INPUT = I_REQ-KMEIN
* IMPORTING
* OUTPUT = LV_MEINS
* EXCEPTIONS
* UNIT_NOT_FOUND = 1
* OTHERS = 2.
* LS_CONDITION-COND_UNIT = LV_MEINS."条件单位
* ENDIF.
* APPEND LS_CONDITION TO LT_CONDITION.
* ENDIF.
*&=====================================================&*
*& 长文本 &*
*&=====================================================&*
IF I_REQ-LONG_TXT IS NOT INITIAL.
CLEAR:LV_LENGTH,LV_NUM,LV_COUNT,LV_START,LV_TXT.
"获取抬头字段文本总长度
LV_LENGTH = STRLEN( I_REQ-LONG_TXT ).
"每132字符分割,需要分割多少整数次
LV_NUM = LV_LENGTH DIV 132.
LV_NUM = LV_NUM + 1.
DO LV_NUM TIMES.
CLEAR: LV_TXT.
LV_COUNT = LV_COUNT + 1.
LV_INDEX = LV_INDEX + 1.
LV_START = ( LV_COUNT - 1 ) * 132 .
IF LV_LENGTH = 0.
EXIT.
ENDIF.
IF LV_NUM = LV_COUNT.
LV_TXT = I_REQ-LONG_TXT+LV_START(LV_LENGTH).
ELSE.
LV_LENGTH = LV_LENGTH - 132.
LV_TXT = I_REQ-LONG_TXT+LV_START(132).
ENDIF.
IF LV_INFNR IS NOT INITIAL.
LS_PIRTEXT-INFO_REC = LV_INFNR.
ENDIF.
LS_PIRTEXT-TDLINE = LV_TXT.
LS_PIRTEXT-TDOBJECT = 'EINA'.
LS_PIRTEXT-TDSPRAS = SY-LANGU.
LS_PIRTEXT-TDFORMAT = '*'.
APPEND LS_PIRTEXT TO LT_PIRTEXT.
CLEAR LS_PIRTEXT.
ENDDO.
ENDIF.
DATA:LINE TYPE KLFN1 VALUE 0001.
LOOP AT I_REQ-CONDITION INTO DATA(LW_CONDITION).
LS_QUAN-INFO_REC = LS_INFOREC_OLD-INFNR.
LS_QUAN-EINE_INDX = '01'.
* LS_QUAN-COND_COUNT = '01'.
LS_QUAN-LINE_NO = LINE .
LS_QUAN-SCALE_BASE_QTY = LW_CONDITION-KSTBM.
LS_QUAN-COND_VALUE = LW_CONDITION-KBETR.
APPEND LS_QUAN TO LT_QUAN.
CLEAR:LS_QUAN.
LINE = LINE + 1.
ENDLOOP.
IF I_REQ-MATNR IS NOT INITIAL .
CALL FUNCTION 'ME_INFORECORD_MAINTAIN_MULTI'
IMPORTING
ET_EINA = LT_EINA_E
ET_EINE = LT_EINE_E
TABLES
T_EINA = LT_EINA
T_EINAX = LT_EINAX
T_EINE = LT_EINE
T_EINEX = LT_EINEX
TXT_LINES = LT_PIRTEXT
RETURN = LT_RETURN.
LOOP AT LT_RETURN INTO DATA(LS_RETURN) WHERE TYPE CA 'EXA'.
LV_MSG = ` ` && LV_MSG && ` ` && LS_RETURN-MESSAGE .
ENDLOOP.
IF SY-SUBRC <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
O_RESP-MSGTY = 'S'.
O_RESP-MSGTX = '信息记录成功'.
READ TABLE LT_EINA_E INTO DATA(LS_EINA_E) INDEX 1.
O_RESP-INFNR = |{ LS_EINA_E-INFO_REC ALPHA = OUT }|.
I_REQ-INFNR = |{ LS_EINA_E-INFO_REC ALPHA = IN }|.
IF ZFLAG <> 'X'.
*-----记录日志
LV_STATUS = 'S'.
IF LS_LIST-IF_LOG_ACTIVE = 'X'. "->Create Log End
LO_TOOLKIT->CREATE_IF_LOG( EXPORTING IV_GUID = LV_GUID IV_IFID = 'ZSRM003'
IV_DATA = /UI2/CL_JSON=>SERIALIZE(
DATA = O_RESP
COMPRESS = ABAP_TRUE "返回参数为空的情况就不展示
PRETTY_NAME = 'X' "大写:'' 小写:'L' 遇到下划线得第一个字母变大写,并且下划线消失,其他情况是小写:'X'
)
IV_STEP = 'RSP' IV_STATUS = LV_STATUS ).
ENDIF.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
O_RESP-MSGTY = 'E'.
O_RESP-MSGTX = I_REQ-WERKS && '工厂信息记录失败' && LV_MSG.
*-----记录日志
LV_STATUS = 'E'.
IF LS_LIST-IF_LOG_ACTIVE = 'X'. "->Create Log End
LO_TOOLKIT->CREATE_IF_LOG( EXPORTING IV_GUID = LV_GUID IV_IFID = 'ZSRM003'
IV_DATA = /UI2/CL_JSON=>SERIALIZE(
DATA = O_RESP
COMPRESS = ABAP_TRUE "返回参数为空的情况就不展示
PRETTY_NAME = 'X' "大写:'' 小写:'L' 遇到下划线得第一个字母变大写,并且下划线消失,其他情况是小写:'X'
)
IV_STEP = 'RSP' IV_STATUS = LV_STATUS ).
ENDIF.
CONTINUE.
ENDIF.
ELSE.
IF I_REQ-ZDEL IS NOT INITIAL.."删除ME15
CALL FUNCTION 'ZFM_DEL_BDC_NOMATNR'
EXPORTING
I_REQ = I_REQ
IMPORTING
O_RESP = O_RESP.
O_RESP-INFNR = I_REQ-INFNR.
ELSE.
SELECT SINGLE * FROM EINE INTO @DATA(LW_EINE) WHERE INFNR = @I_REQ-INFNR AND EKORG = @I_REQ-EKORG AND ESOKZ = @I_REQ-ESOKZ AND WERKS = @I_REQ-WERKS.
IF SY-SUBRC <> 0 .
CALL FUNCTION 'ZFM_BASIS_BDC'
EXPORTING
I_REQ = I_REQ
IMPORTING
O_RESP = O_RESP.
I_REQ-INFNR = O_RESP-INFNR.
ELSE.
CALL FUNCTION 'ZFM_CHANGE_BDC'
EXPORTING
I_REQ = I_REQ
IMPORTING
O_RESP = O_RESP.
ENDIF.
"判断走bdc原来是否存在条件(无物料:A025 有物料:A017)
SELECT *
INTO TABLE @DATA(LG_A025)
FROM A025 AS A
WHERE A~INFNR = @I_REQ-INFNR
AND A~LIFNR = @I_REQ-LIFNR
AND A~EKORG = @I_REQ-EKORG
AND A~ESOKZ = @I_REQ-ESOKZ
AND A~WERKS = @I_REQ-WERKS
AND A~MATKL = @I_REQ-MATKL
AND A~KSCHL = 'PB00'
AND A~KAPPL = 'M'.
IF LG_A025 IS NOT INITIAL.
ZFLAG = 'X'.
ENDIF.
ENDIF.
ENDIF.
*-------------修改条件价格
IF I_REQ-ZDEL IS INITIAL.."排除删除标记
CALL FUNCTION 'ZFM_CONDITION_BDC'
EXPORTING
I_REQ = I_REQ
I_FLAG = ZFLAG
IMPORTING
O_RESP = O_RESP.
ENDIF.
*----日志RESP写入
LV_STATUS = O_RESP-MSGTY.
IF LS_LIST-IF_LOG_ACTIVE = 'X'. "->Create Log End
LO_TOOLKIT->CREATE_IF_LOG( EXPORTING IV_GUID = LV_GUID IV_IFID = 'ZSRM003'
IV_DATA = /UI2/CL_JSON=>SERIALIZE(
DATA = O_RESP
COMPRESS = ABAP_TRUE "返回参数为空的情况就不展示
PRETTY_NAME = 'X' "大写:'' 小写:'L' 遇到下划线得第一个字母变大写,并且下划线消失,其他情况是小写:'X'
)
IV_STEP = 'RSP' IV_STATUS = LV_STATUS ).
ENDIF.
CLEAR:ZFLAG .
REFRESH :LT_INFOREC_OLD,LG_A017.
CLEAR:LS_INFOREC_OLD.
ENDLOOP."endloop at gt_werks_set
MESSAEG O_RESP.
ENDMETHOD.
去掉删除标记BDC:
FUNCTION ZFM_DEL_BDC.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_REQ) TYPE ZMMS_005_IN OPTIONAL
*" EXPORTING
*" VALUE(O_RESP) TYPE ZMMS_005_OUT
*"----------------------------------------------------------------------
CONSTANTS:
CNS_MODE TYPE C VALUE 'N',
CNS_UPDATE TYPE C VALUE 'S',
CNS_TCODE TYPE TCODE VALUE 'ME15'.
DATA: BDCDATA TYPE TABLE OF BDCDATA WITH HEADER LINE,
BDCMSGCOLL TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE,
MSG TYPE TABLE OF BAPIRETURN WITH HEADER LINE.
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMM06I'
'0100'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-LIFNR'
I_REQ-LIFNR.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-MATNR'
I_REQ-MATNR.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-EKORG'
I_REQ-EKORG.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-WERKS'
I_REQ-WERKS.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-INFNR'
I_REQ-INFNR.
IF I_REQ-ESOKZ = 0."标准
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-NORMB'
'X'.
ELSEIF I_REQ-ESOKZ = 2."寄售
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-KONSI'
'X'.
ELSEIF I_REQ-ESOKZ = 3."外协(分包)
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-LOHNB'
'X'.
ENDIF.
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMM06I'
'0104'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'=BU'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-LOEKZ'
''.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-LOEKZ'
''.
CALL TRANSACTION CNS_TCODE USING BDCDATA[]
MODE CNS_MODE
UPDATE CNS_UPDATE
MESSAGES INTO BDCMSGCOLL[].
LOOP AT BDCMSGCOLL.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = BDCMSGCOLL-MSGID
MSGNR = BDCMSGCOLL-MSGNR
MSGV1 = BDCMSGCOLL-MSGV1
MSGV2 = BDCMSGCOLL-MSGV2
MSGV3 = BDCMSGCOLL-MSGV3
MSGV4 = BDCMSGCOLL-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = MSG-MESSAGE.
IF BDCMSGCOLL-MSGTYP CA 'EXA' .
O_RESP-MSGTX = ` ` && MSG-MESSAGE && ` ` && O_RESP-MSGTX..
O_RESP-MSGTY = 'E'.
ENDIF.
ENDLOOP.
IF O_RESP-MSGTY <> 'E'.
O_RESP-MSGTY = 'S'.
O_RESP-MSGTX = '信息记录更新成功'..
ENDIF.
ENDFUNCTION.
无物料打上删除标记BDC:
FUNCTION ZFM_DEL_BDC_NOMATNR.
*"--------------------------------------------------------------------
*"*"局部接口:
*" IMPORTING
*" VALUE(I_REQ) TYPE ZMMS_005_IN OPTIONAL
*" EXPORTING
*" VALUE(O_RESP) TYPE ZMMS_005_OUT
*"--------------------------------------------------------------------
CONSTANTS:
CNS_MODE TYPE C VALUE 'N',
CNS_UPDATE TYPE C VALUE 'S',
CNS_TCODE TYPE TCODE VALUE 'ME15'.
DATA: BDCDATA TYPE TABLE OF BDCDATA WITH HEADER LINE,
BDCMSGCOLL TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE,
MSG TYPE TABLE OF BAPIRETURN WITH HEADER LINE.
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMM06I'
'0100'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-LIFNR'
I_REQ-LIFNR.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-INFNR'
I_REQ-INFNR.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-EKORG'
I_REQ-EKORG.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-WERKS'
I_REQ-WERKS.
IF I_REQ-ESOKZ = 0."标准
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-NORMB'
'X'.
ELSEIF I_REQ-ESOKZ = 2."寄售
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-KONSI'
'X'.
ELSEIF I_REQ-ESOKZ = 3."外协(分包)
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-LOHNB'
'X'.
ENDIF.
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMM06I'
'0104'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'=BU'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-LOEKZ'
'X'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-LOEKZ'
'X'.
CALL TRANSACTION CNS_TCODE USING BDCDATA[]
MODE CNS_MODE
UPDATE CNS_UPDATE
MESSAGES INTO BDCMSGCOLL[].
LOOP AT BDCMSGCOLL.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = BDCMSGCOLL-MSGID
MSGNR = BDCMSGCOLL-MSGNR
MSGV1 = BDCMSGCOLL-MSGV1
MSGV2 = BDCMSGCOLL-MSGV2
MSGV3 = BDCMSGCOLL-MSGV3
MSGV4 = BDCMSGCOLL-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = MSG-MESSAGE.
IF BDCMSGCOLL-MSGTYP CA 'EXA' .
O_RESP-MSGTX = ` ` && MSG-MESSAGE && ` ` && O_RESP-MSGTX..
O_RESP-MSGTY = 'E'.
ENDIF.
ENDLOOP.
IF O_RESP-MSGTY <> 'E'.
O_RESP-MSGTY = 'S'.
O_RESP-MSGTX = '信息记录更新成功'..
ENDIF.
ENDFUNCTION.
无物料基础数据:
FUNCTION ZFM_BASIS_BDC.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_REQ) TYPE ZMMS_005_IN OPTIONAL
*" EXPORTING
*" VALUE(O_RESP) TYPE ZMMS_005_OUT
*"----------------------------------------------------------------------
CONSTANTS:
CNS_MODE TYPE C VALUE 'N',
CNS_UPDATE TYPE C VALUE 'S',
CNS_TCODE TYPE TCODE VALUE 'ME11'.
DATA: BDCDATA TYPE TABLE OF BDCDATA WITH HEADER LINE,
BDCMSGCOLL TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE,
MSG TYPE TABLE OF BAPIRETURN WITH HEADER LINE.
DATA:APLFZ(30) TYPE C,
NORBM(30) TYPE C,
NETPR(30) TYPE C,
* PEINH(30) TYPE C,
ZPEINH(30) TYPE C.
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMM06I'
'0100'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-LIFNR'
I_REQ-LIFNR.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-EKORG'
I_REQ-EKORG.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-WERKS'
I_REQ-WERKS.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-INFNR'
I_REQ-INFNR.
IF I_REQ-ESOKZ = 0."标准
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-NORMB'
'X'.
ELSEIF I_REQ-ESOKZ = 2."寄售
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-KONSI'
'X'.
ELSEIF I_REQ-ESOKZ = 3."外协(分包)
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-LOHNB'
'X'.
ENDIF.
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMM06I'
'0101'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-TXZ01'
I_REQ-TXZ01.
IF I_REQ-INFNR IS INITIAL.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-MATKL'
I_REQ-MATKL.
ENDIF.
* PERFORM BDC_FIELD TABLES BDCDATA
* USING 'EINA-URZLA'
* 'CN'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-MEINS'
I_REQ-MEINS.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-SORTL'
I_REQ-SORTL.
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMM06I'
'0102'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'=KO'.
APLFZ = I_REQ-APLFZ.
CONDENSE APLFZ.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-APLFZ'
APLFZ.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-EKGRP'
I_REQ-EKGRP.
NORBM = I_REQ-NORBM.
CONDENSE NORBM.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-NORBM'
NORBM.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-AUT_SOURCE'
I_REQ-AUT_SOURCE.
***-- modify Start by lmq 04.12.2024 16:03:37 Start—
NETPR = I_REQ-NETPR.
CONDENSE NETPR.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-NETPR'
NETPR.
***--modify End by lmq 04.12.2024 16:03:37 End—
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-WEBRE'
I_REQ-WEBRE.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-MWSKZ'
I_REQ-MWSKZ.
* PERFORM BDC_FIELD TABLES BDCDATA
* USING 'EINE-IPRKZ'
* 'D'.
***-- modify Start by lmq 08.12.2024 15:24:43 Start—//如果不加这段会出现默认为当前时间到9999.12.81的情况
ZPEINH = I_REQ-PEINH.
CONDENSE zpeinh.
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMV13A'
'1025'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'=SICH'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONP-KONWA(01)'
I_REQ-WAERS.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONP-KPEIN(01)'
ZPEINH.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONP-KMEIN(01)'
I_REQ-BPRME."采购单位
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RV13A-DATAB(01)'
I_REQ-DATAB.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RV13A-DATBI(01)'
I_REQ-DATBI.
***--modify End by lmq 08.12.2024 15:24:43 End—
CALL TRANSACTION CNS_TCODE USING BDCDATA[]
MODE CNS_MODE
UPDATE CNS_UPDATE
MESSAGES INTO BDCMSGCOLL[].
LOOP AT BDCMSGCOLL.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = BDCMSGCOLL-MSGID
MSGNR = BDCMSGCOLL-MSGNR
MSGV1 = BDCMSGCOLL-MSGV1
MSGV2 = BDCMSGCOLL-MSGV2
MSGV3 = BDCMSGCOLL-MSGV3
MSGV4 = BDCMSGCOLL-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = MSG-MESSAGE.
IF BDCMSGCOLL-MSGTYP CA 'EXA' .
O_RESP-MSGTX = ` ` && MSG-MESSAGE && ` ` && O_RESP-MSGTX..
O_RESP-MSGTY = 'E'.
ENDIF.
ENDLOOP.
IF O_RESP-MSGTY <> 'E'.
O_RESP-INFNR = SY-MSGV1.
O_RESP-MSGTY = 'S'.
O_RESP-MSGTX = '信息记录创建成功'..
ENDIF.
ENDFUNCTION.
无物料改变bdc:
FUNCTION ZFM_CHANGE_BDC.
*"--------------------------------------------------------------------
*"*"局部接口:
*" IMPORTING
*" VALUE(I_REQ) TYPE ZMMS_005_IN OPTIONAL
*" EXPORTING
*" VALUE(O_RESP) TYPE ZMMS_005_OUT
*"--------------------------------------------------------------------
CONSTANTS:
CNS_MODE TYPE C VALUE 'N',
CNS_UPDATE TYPE C VALUE 'S',
CNS_TCODE TYPE TCODE VALUE 'ME12'.
DATA: BDCDATA TYPE TABLE OF BDCDATA WITH HEADER LINE,
BDCMSGCOLL TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE,
MSG TYPE TABLE OF BAPIRETURN WITH HEADER LINE.
DATA:APLFZ(30) TYPE C,
NORBM(30) TYPE C.
* NETPR(30) TYPE C,
* PEINH(30) TYPE C.
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMM06I'
'0100'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-LIFNR'
I_REQ-LIFNR.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-EKORG'
I_REQ-EKORG.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-WERKS'
I_REQ-WERKS.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-INFNR'
I_REQ-INFNR.
IF I_REQ-ESOKZ = 0."标准
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-NORMB'
'X'.
ELSEIF I_REQ-ESOKZ = 2."寄售
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-KONSI'
'X'.
ELSEIF I_REQ-ESOKZ = 3."外协(分包)
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-LOHNB'
'X'.
ENDIF.
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMM06I'
'0101'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-TXZ01'
I_REQ-TXZ01.
* PERFORM BDC_FIELD TABLES BDCDATA
* USING 'EINA-URZLA'
* 'CN'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-MEINS'
I_REQ-MEINS.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-SORTL'
I_REQ-SORTL.
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMM06I'
'0102'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'=BU'.
APLFZ = I_REQ-APLFZ.
CONDENSE APLFZ.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-APLFZ'
APLFZ.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-EKGRP'
I_REQ-EKGRP.
NORBM = I_REQ-NORBM.
CONDENSE NORBM.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-NORBM'
NORBM.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-WEBRE'
I_REQ-WEBRE.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-MWSKZ'
I_REQ-MWSKZ.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-AUT_SOURCE'
I_REQ-AUT_SOURCE.
* PERFORM BDC_FIELD TABLES BDCDATA
* USING 'EINE-IPRKZ'
* 'D'.
CALL TRANSACTION CNS_TCODE USING BDCDATA[]
MODE CNS_MODE
UPDATE CNS_UPDATE
MESSAGES INTO BDCMSGCOLL[].
LOOP AT BDCMSGCOLL.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = BDCMSGCOLL-MSGID
MSGNR = BDCMSGCOLL-MSGNR
MSGV1 = BDCMSGCOLL-MSGV1
MSGV2 = BDCMSGCOLL-MSGV2
MSGV3 = BDCMSGCOLL-MSGV3
MSGV4 = BDCMSGCOLL-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = MSG-MESSAGE.
IF BDCMSGCOLL-MSGTYP CA 'EXA' .
O_RESP-MSGTX = ` ` && MSG-MESSAGE && ` ` && O_RESP-MSGTX..
O_RESP-MSGTY = 'E'.
ENDIF.
ENDLOOP.
IF O_RESP-MSGTY <> 'E'.
O_RESP-INFNR = SY-MSGV1.
O_RESP-MSGTY = 'S'.
O_RESP-MSGTX = '信息记录修改成功'..
ENDIF.
ENDFUNCTION.
阶梯价格 增加 BDC:
FUNCTION ZFM_CONDITION_BDC.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_REQ) TYPE ZMMS_005_IN OPTIONAL
*" VALUE(I_FLAG) TYPE ESOKZ OPTIONAL
*" EXPORTING
*" VALUE(O_RESP) TYPE ZMMS_005_OUT
*"----------------------------------------------------------------------
DATA:CNS_MODE TYPE C VALUE 'N'.
CONSTANTS:
* CNS_MODE TYPE C VALUE 'N',
CNS_UPDATE TYPE C VALUE 'S',
CNS_TCODE TYPE TCODE VALUE 'ME12'.
DATA: BDCDATA TYPE TABLE OF BDCDATA WITH HEADER LINE,
BDCMSGCOLL TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE,
MSG TYPE TABLE OF BAPIRETURN WITH HEADER LINE,
NUM(8) TYPE I,
ZKBETR(30) TYPE C,
ZKSTBM(30) TYPE C,
ZPEINH(30) TYPE C.
DATA(LINE) = LINES( I_REQ-CONDITION ).
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMM06I'
'0100'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-LIFNR'
I_REQ-LIFNR.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-EKORG'
I_REQ-EKORG.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINE-WERKS'
I_REQ-WERKS.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-MATNR'
I_REQ-MATNR.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'EINA-INFNR'
I_REQ-INFNR.
IF I_REQ-ESOKZ = 0."标准
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-NORMB'
'X'.
ELSEIF I_REQ-ESOKZ = 2."寄售
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-KONSI'
'X'.
ELSEIF I_REQ-ESOKZ = 3."外协(分包)
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RM06I-LOHNB'
'X'.
ENDIF.
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMM06I'
'0101'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'=KO'.
* PERFORM BDC_FIELD TABLES BDCDATA
* USING 'EINA-URZLA'
* 'CN'.
* PERFORM BDC_FIELD TABLES BDCDATA
* USING 'EINA-MEINS'
* 'PC'.
IF I_REQ-MATNR IS NOT INITIAL.
* PERFORM BDC_FIELD TABLES BDCDATA
* USING 'EINA-UMREZ'
* '1'.
* PERFORM BDC_FIELD TABLES BDCDATA
* USING 'EINA-UMREN'
* '1'.
ELSE.
* PERFORM BDC_FIELD TABLES BDCDATA
* USING 'EINA-SORTL'
* I_REQ-MATKL.
ENDIF.
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
IF I_FLAG = 'X'.
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPLV14A'
'0102'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'=NEWD'.
ENDIF.
*---------------------------------------------------------------------*
ZPEINH = I_REQ-PEINH.
CONDENSE ZPEINH.
ZKBETR = I_REQ-NETPR.
CONDENSE ZKBETR.
IF I_REQ-MATNR IS NOT INITIAL.
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMV13A'
'1017'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'/00'.
* PERFORM BDC_FIELD TABLES BDCDATA
* USING 'BDC_OKCODE'
* '=SICH'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONP-KBETR(01)'
ZKBETR.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONP-KONWA(01)'
I_REQ-WAERS.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RV13A-DATAB(01)'
I_REQ-DATAB.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RV13A-DATBI(01)'
I_REQ-DATBI.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONP-KPEIN(01)'
ZPEINH.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONP-KMEIN(01)'
I_REQ-BPRME.
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMV13A'
'1017'.
IF I_REQ-CONDITION[] IS NOT INITIAL.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'=PSTF'.
ELSE.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'=SICH'.
ENDIF.
ELSE.
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMV13A'
'1025'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONP-KBETR(01)'
ZKBETR.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONP-KONWA(01)'
I_REQ-WAERS.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONP-KPEIN(01)'
ZPEINH.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONP-KMEIN(01)'
I_REQ-BPRME.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RV13A-DATAB(01)'
I_REQ-DATAB.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RV13A-DATBI(01)'
I_REQ-DATBI.
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMV13A'
'1025'.
IF I_REQ-CONDITION[] IS NOT INITIAL.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'=PSTF'.
ELSE.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'=SICH'.
ENDIF.
ENDIF.
*---------------------------------------------------------------------*
DATA(LV_TABIX) = LINES( I_REQ-CONDITION ).
LOOP AT I_REQ-CONDITION INTO DATA(LS_CONDITION).
NUM = NUM + 1.
ZKBETR = LS_CONDITION-KBETR.
ZKSTBM = LS_CONDITION-KSTBM.
CONDENSE ZKBETR NO-GAPS.
CONDENSE ZKSTBM NO-GAPS.
IF NUM = 1.
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMV13A'
'0303'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'=EINF'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RV13A-DATAB'
I_REQ-DATAB.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RV13A-DATBI'
I_REQ-DATBI.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONM-KSTBM(01)'
ZKSTBM.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONM-KBETR(01)'
ZKBETR.
ELSE.
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMV13A'
'0303'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RV13A-DATAB'
I_REQ-DATAB.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RV13A-DATBI'
I_REQ-DATBI.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONM-KSTBM(01)'
ZKSTBM.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'KONM-KBETR(01)'
ZKBETR.
ENDIF.
IF NUM <> 1 AND NUM <> LINE OR ( LV_TABIX = 1 AND ZKSTBM = '0.000' ).
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMV13A'
'0303'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'=EINF'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RV13A-DATAB'
I_REQ-DATAB.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RV13A-DATBI'
I_REQ-DATBI.
ENDIF.
ENDLOOP.
CLEAR:NUM.
*---------------------------------------------------------------------*
PERFORM BDC_DYNPRO TABLES BDCDATA
USING 'SAPMV13A'
'0303'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'BDC_OKCODE'
'=SICH'.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RV13A-DATAB'
I_REQ-DATAB.
PERFORM BDC_FIELD TABLES BDCDATA
USING 'RV13A-DATBI'
I_REQ-DATBI.
* PERFORM BDC_DYNPRO TABLES BDCDATA
* USING 'SAPMV13A'
* '0121'.
* PERFORM BDC_FIELD TABLES BDCDATA
* USING 'BDC_OKCODE'
* '= /5'.
CALL TRANSACTION CNS_TCODE USING BDCDATA[]
MODE CNS_MODE
UPDATE CNS_UPDATE
MESSAGES INTO BDCMSGCOLL[].
LOOP AT BDCMSGCOLL.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = BDCMSGCOLL-MSGID
MSGNR = BDCMSGCOLL-MSGNR
MSGV1 = BDCMSGCOLL-MSGV1
MSGV2 = BDCMSGCOLL-MSGV2
MSGV3 = BDCMSGCOLL-MSGV3
MSGV4 = BDCMSGCOLL-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = MSG-MESSAGE.
IF BDCMSGCOLL-MSGTYP CA 'EXA' OR ( BDCMSGCOLL-MSGID = '00' AND BDCMSGCOLL-MSGNR = '344' ).
O_RESP-MSGTX = ` ` && MSG-MESSAGE && ` ` && O_RESP-MSGTX..
O_RESP-MSGTY = 'E'.
ENDIF.
ENDLOOP.
IF O_RESP-MSGTY <> 'E'.
O_RESP-MSGTY = 'S'.
O_RESP-MSGTX = '信息记录更新成功'..
ENDIF.
O_RESP-INFNR = I_REQ-INFNR.
ENDFUNCTION.
*&---------------------------------------------------------------------*
*& Form bdc_dynpro
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->BDCDATA text
* -->PROGRAM text
* -->DYNPRO text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO TABLES BDCDATA STRUCTURE BDCDATA
USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM. "bdc_dynpro
*&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->BDCDATA text
* -->FNAM text
* -->FVAL text
*----------------------------------------------------------------------*
FORM BDC_FIELD TABLES BDCDATA STRUCTURE BDCDATA
USING FNAM FVAL.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDFORM. "bdc_field