BASIS--使用DELETE_USER_ON_DB批量删除用户

本文介绍了一种通过编程方式批量删除数据库中特定用户及其关联表的方法。该过程包括选择匹配条件的用户、删除选定用户并跟踪已删除用户的数量。
REPORT ZDELUSER.
TABLES: USR01, USR02, *USR02, USR04, *USR04.
TABLES: USR03, USR05, USGRP, USR08, USR09, USR30.
TABLES: USR10, USR11, USR12, *USR10, *USR12, USR13, *USR13, USR16.
TABLES: USH04, USH10, USH12, USH02.
TABLES: UST04, UST10C, UST10S, UST12.
TABLES: USRBF.
PARAMETER UGRP LIKE USR03-CLASS.
DATA: BEGIN OF INTUSR02 OCCURS 200,
BNAME LIKE USR02-BNAME,
END OF INTUSR02.
DATA: CNTR TYPE P VALUE 0.
SELECT * FROM USR02 WHERE CLASS = UGRP.
INTUSR02-BNAME = USR02-BNAME.
APPEND INTUSR02.
ENDSELECT.
LOOP AT INTUSR02.
CALL FUNCTION 'DELETE_USER_ON_DB'
EXPORTING USER = INTUSR02-BNAME
EXCEPTIONS OTHERS = 1.
CNTR = CNTR + 1.
ENDLOOP.
WRITE : / 'Users deleted ', CNTR.

Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1755725


# # Copyright 2025 The InfiniFlow Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # from flask import request from flask_login import current_user, login_required from api import settings from api.constants import DATASET_NAME_LIMIT from api.db import StatusEnum from api.db.db_models import DB from api.db.services import duplicate_name from api.db.services.search_service import SearchService from api.db.services.user_service import TenantService, UserTenantService from api.utils import get_uuid from api.utils.api_utils import get_data_error_result, get_json_result, not_allowed_parameters, server_error_response, validate_request @manager.route("/create", methods=["post"]) # noqa: F821 @login_required @validate_request("name") def create(): req = request.get_json() search_name = req["name"] description = req.get("description", "") if not isinstance(search_name, str): return get_data_error_result(message="Search name must be string.") if search_name.strip() == "": return get_data_error_result(message="Search name can't be empty.") if len(search_name.encode("utf-8")) > 255: return get_data_error_result(message=f"Search name length is {len(search_name)} which is large than 255.") e, _ = TenantService.get_by_id(current_user.id) if not e: return get_data_error_result(message="Authorized identity.") search_name = search_name.strip() search_name = duplicate_name(SearchService.query, name=search_name, tenant_id=current_user.id, status=StatusEnum.VALID.value) req["id"] = get_uuid() req["name"] = search_name req["description"] = description req["tenant_id"] = current_user.id req["created_by"] = current_user.id with DB.atomic(): try: if not SearchService.save(**req): return get_data_error_result() return get_json_result(data={"search_id": req["id"]}) except Exception as e: return server_error_response(e) @manager.route("/update", methods=["post"]) # noqa: F821 @login_required @validate_request("search_id", "name", "search_config", "tenant_id") @not_allowed_parameters("id", "created_by", "create_time", "update_time", "create_date", "update_date", "created_by") def update(): req = request.get_json() if not isinstance(req["name"], str): return get_data_error_result(message="Search name must be string.") if req["name"].strip() == "": return get_data_error_result(message="Search name can't be empty.") if len(req["name"].encode("utf-8")) > DATASET_NAME_LIMIT: return get_data_error_result(message=f"Search name length is {len(req['name'])} which is large than {DATASET_NAME_LIMIT}") req["name"] = req["name"].strip() tenant_id = req["tenant_id"] e, _ = TenantService.get_by_id(tenant_id) if not e: return get_data_error_result(message="Authorized identity.") search_id = req["search_id"] if not SearchService.accessible4deletion(search_id, current_user.id): return get_json_result(data=False, message="No authorization.", code=settings.RetCode.AUTHENTICATION_ERROR) try: search_app = SearchService.query(tenant_id=tenant_id, id=search_id)[0] if not search_app: return get_json_result(data=False, message=f"Cannot find search {search_id}", code=settings.RetCode.DATA_ERROR) if req["name"].lower() != search_app.name.lower() and len(SearchService.query(name=req["name"], tenant_id=tenant_id, status=StatusEnum.VALID.value)) >= 1: return get_data_error_result(message="Duplicated search name.") if "search_config" in req: current_config = search_app.search_config or {} new_config = req["search_config"] if not isinstance(new_config, dict): return get_data_error_result(message="search_config must be a JSON object") updated_config = {**current_config, **new_config} req["search_config"] = updated_config req.pop("search_id", None) req.pop("tenant_id", None) updated = SearchService.update_by_id(search_id, req) if not updated: return get_data_error_result(message="Failed to update search") e, updated_search = SearchService.get_by_id(search_id) if not e: return get_data_error_result(message="Failed to fetch updated search") return get_json_result(data=updated_search.to_dict()) except Exception as e: return server_error_response(e) @manager.route("/detail", methods=["GET"]) # noqa: F821 @login_required def detail(): search_id = request.args["search_id"] try: tenants = UserTenantService.query(user_id=current_user.id) for tenant in tenants: if SearchService.query(tenant_id=tenant.tenant_id, id=search_id): break else: return get_json_result(data=False, message="Has no permission for this operation.", code=settings.RetCode.OPERATING_ERROR) search = SearchService.get_detail(search_id) if not search: return get_data_error_result(message="Can't find this Search App!") return get_json_result(data=search) except Exception as e: return server_error_response(e) @manager.route("/list", methods=["POST"]) # noqa: F821 @login_required def list_search_app(): keywords = request.args.get("keywords", "") page_number = int(request.args.get("page", 0)) items_per_page = int(request.args.get("page_size", 0)) orderby = request.args.get("orderby", "create_time") if request.args.get("desc", "true").lower() == "false": desc = False else: desc = True req = request.get_json() owner_ids = req.get("owner_ids", []) try: if not owner_ids: # tenants = TenantService.get_joined_tenants_by_user_id(current_user.id) # tenants = [m["tenant_id"] for m in tenants] tenants = [] search_apps, total = SearchService.get_by_tenant_ids(tenants, current_user.id, page_number, items_per_page, orderby, desc, keywords) else: tenants = owner_ids search_apps, total = SearchService.get_by_tenant_ids(tenants, current_user.id, 0, 0, orderby, desc, keywords) search_apps = [search_app for search_app in search_apps if search_app["tenant_id"] in tenants] total = len(search_apps) if page_number and items_per_page: search_apps = search_apps[(page_number - 1) * items_per_page : page_number * items_per_page] return get_json_result(data={"search_apps": search_apps, "total": total}) except Exception as e: return server_error_response(e) @manager.route("/rm", methods=["post"]) # noqa: F821 @login_required @validate_request("search_id") def rm(): req = request.get_json() search_id = req["search_id"] if not SearchService.accessible4deletion(search_id, current_user.id): return get_json_result(data=False, message="No authorization.", code=settings.RetCode.AUTHENTICATION_ERROR) try: if not SearchService.delete_by_id(search_id): return get_data_error_result(message=f"Failed to delete search App {search_id}") return get_json_result(data=True) except Exception as e: return server_error_response(e) 请把上面的代码每行的功能都做详细的解释
10-01
FUNCTION zmm_oatosap_077. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(IV_OA_NUM) TYPE ZEPP_OA_NUM *" VALUE(IV_ZAFNAM) TYPE AFNAM *" EXPORTING *" VALUE(E_STATUS) TYPE BAPI_MTYPE *" VALUE(E_MESSAGE) TYPE BAPI_MSG *" TABLES *" T_DATA_BASIS STRUCTURE ZSMM_057 *" T_DATA_FACTORY STRUCTURE ZSMM_058 *"---------------------------------------------------------------------- zfmparavalsave1 . zfmparavalsave2 'START'. DATA:ls_headdata TYPE bapimathead, ls_clientdata TYPE bapi_mara, ls_clientdatax TYPE bapi_marax, lt_materialdescription TYPE TABLE OF bapi_makt, ls_materialdescription TYPE bapi_makt, lt_materiallongtext TYPE TABLE OF bapi_mltx , ls_materiallongtext TYPE bapi_mltx , ls_storagelocationdata TYPE bapi_mard, ls_storagelocationdatax TYPE bapi_mardx, ls_return TYPE bapiret2, ls_plantdata TYPE bapi_marc, ls_plantdatax TYPE bapi_marcx, ls_valuationdata TYPE bapi_mbew, ls_valuationdatax TYPE bapi_mbewx, lt_returnmessages TYPE TABLE OF bapi_matreturn2. DATA:ls_bapi_te_mara TYPE bapi_te_mara, ls_bapi_te_maras(960) TYPE c, ls_bapi_te_marax TYPE bapi_te_marax, ls_bapi_te_maraxs(960) TYPE c, ls_extensionin TYPE bapiparex , lt_extensionin TYPE TABLE OF bapiparex, ls_extensioninx TYPE bapiparexx, lt_extensioninx TYPE TABLE OF bapiparexx. DATA:lv_key TYPE bapi1003_key-object, lv_table TYPE bapi1003_key-objecttable VALUE 'MARA', lv_class TYPE bapi1003_key-classnum VALUE 'Z_BATCH_CLASS', lv_class_type TYPE bapi1003_key-classtype VALUE '022', lv_status TYPE bapi1003_key-status, lt_num LIKE bapi1003_alloc_values_num OCCURS 0 WITH HEADER LINE, lt_char LIKE bapi1003_alloc_values_char OCCURS 0 WITH HEADER LINE, lt_curr LIKE bapi1003_alloc_values_curr OCCURS 0 WITH HEADER LINE, lt_ret LIKE bapiret2 OCCURS 0 WITH HEADER LINE. DATA l_object LIKE bapi1003_key-object. DATA ls_mara TYPE mara. TYPES:BEGIN OF ty_class, klart LIKE klah-klart, "类别种类 class LIKE klah-class, "类号 END OF ty_class. DATA: ls_class TYPE ty_class, lt_class TYPE STANDARD TABLE OF ty_class. LOOP AT t_data_basis WHERE status <> 'S'. SELECT matnr INTO TABLE @DATA(lt_mara_check) FROM mara WHERE matnr = @t_data_basis-matnr. IF lt_mara_check IS NOT INITIAL. t_data_basis-status = 'E'. t_data_basis-message = '物料基本视图已经存在!'. MODIFY t_data_basis. EXIT. ENDIF. IF t_data_basis-mtart = 'Z013'. IF t_data_basis-zmatnr IS INITIAL or t_data_basis-zvcode IS INITIAL or t_data_basis-zwafer_type IS INITIAL. t_data_basis-status = 'E'. t_data_basis-message = 'WAFER类物料,WAFER TYPE、物料编码(不含简码)、供应商简码字段必填!' . MODIFY t_data_basis. EXIT. ENDIF. ENDIF. * IF t_data_basis-matkl = 'M013' OR t_data_basis-matkl = 'M014'. * * ENDIF. CLEAR ls_headdata. ls_headdata-material = t_data_basis-matnr."物料号 ls_headdata-ind_sector = t_data_basis-mbrsh."'M'."行业领域 MARA-MBRSH ls_headdata-matl_type = t_data_basis-mtart.".'Z011'."物料类型 MARA-MTART ls_headdata-basic_view = 'X'. ls_headdata-storage_view = 'X'. CLEAR ls_clientdata. ls_clientdata-matl_group = t_data_basis-matkl."'SC01'."物料组MARA-MATKL ls_clientdata-base_uom = t_data_basis-meins. " 基本计量单位MARA-MEINS ls_clientdata-division = t_data_basis-spart. "产品组 MARA-SPART ls_clientdata-qm_procmnt = t_data_basis-qmpur. "产品组 MARA-SPART ls_clientdata-minremlife = t_data_basis-mhdrz."最短剩余货架寿命 MARA-MHDRZ ls_clientdata-shelf_life = t_data_basis-mhdhb."总货架寿命 ls_clientdata-period_ind_expiration_date = t_data_basis-iprkz. " 货架寿命到期日的期间标识 ls_clientdata-old_mat_no = t_data_basis-bismt. "旧物料号 ls_clientdata-po_unit = t_data_basis-bstme. ""采购订单的计量单位 MARA-BSTME ls_clientdata-qm_procmnt = t_data_basis-qmpur. "质量数据 MARA-QMPUR CLEAR ls_clientdatax. ls_clientdatax-matl_group = 'X'."物料组MARA-MATKL ls_clientdatax-base_uom = 'X'. "基本计量单位MARA-MEINS ls_clientdatax-division = 'X'. "产品组 MARA-SPART ls_clientdatax-minremlife = 'X'."最短剩余货架寿命 MARA-MHDRZ ls_clientdatax-shelf_life = 'X'."总货架寿命 ls_clientdatax-period_ind_expiration_date = 'X'."货架寿命到期日的期间标识 ls_clientdatax-old_mat_no = 'X'.""旧物料号 ls_clientdatax-po_unit = 'X'.""旧物料号 ls_clientdatax-qm_procmnt = 'X'.""旧物料号 CLEAR: lt_materialdescription,ls_materialdescription. ls_materialdescription-matl_desc = t_data_basis-maktx_c. "物料描述取text2字段前40位字符 ls_materialdescription-langu = '1'. APPEND ls_materialdescription TO lt_materialdescription. IF t_data_basis-maktx_e IS NOT INITIAL. ls_materialdescription-matl_desc = t_data_basis-maktx_e."英文物料描述MAKT-MAKTX ls_materialdescription-langu = 'E'. APPEND ls_materialdescription TO lt_materialdescription. ENDIF. "物料长文本赋值 CLEAR:lt_materiallongtext,ls_materiallongtext. ls_materiallongtext-applobject = 'MATERIAL'. ls_materiallongtext-text_name = t_data_basis-matnr. ls_materiallongtext-text_id = 'GRUN'. ls_materiallongtext-langu = sy-langu. ls_materiallongtext-format_col = '*'. ls_materiallongtext-text_line = t_data_basis-maktx_c. APPEND ls_materiallongtext TO lt_materiallongtext. CLEAR: ls_extensionin,ls_extensioninx,lt_extensionin,lt_extensioninx, ls_bapi_te_mara,ls_bapi_te_marax,ls_bapi_te_maras,ls_bapi_te_maraxs. ls_bapi_te_mara-material = t_data_basis-matnr. ls_bapi_te_mara-zts = t_data_basis-zts. ls_bapi_te_mara-zwafer_type = t_data_basis-zwafer_type. ls_bapi_te_mara-zmatnr = t_data_basis-zmatnr. ls_bapi_te_mara-zvcode = t_data_basis-zvcode. ls_bapi_te_mara-zwflx = t_data_basis-zwflx. ls_bapi_te_mara-zsfkyr = t_data_basis-zsfkyr. ls_bapi_te_mara-zsfkp = t_data_basis-zsfkp. ls_bapi_te_mara-zgross_die = t_data_basis-zgross_die. ls_bapi_te_marax-material = t_data_basis-matnr. ls_bapi_te_marax-zts = 'X'. ls_bapi_te_marax-zwafer_type = 'X'. ls_bapi_te_marax-zmatnr = 'X'. ls_bapi_te_marax-zvcode = 'X'. ls_bapi_te_marax-zwflx = 'X'. ls_bapi_te_marax-zsfkyr = 'X'. ls_bapi_te_marax-zsfkp = 'X'. ls_bapi_te_marax-zgross_die = 'X'. CALL METHOD cl_abap_container_utilities=>fill_container_c EXPORTING im_value = ls_bapi_te_mara IMPORTING ex_container = ls_bapi_te_maras. ls_extensionin-structure = 'BAPI_TE_MARA'. ls_extensionin-valuepart1 = ls_bapi_te_maras+0(240). ls_extensionin-valuepart2 = ls_bapi_te_maras+240(240). APPEND ls_extensionin TO lt_extensionin. CALL METHOD cl_abap_container_utilities=>fill_container_c EXPORTING im_value = ls_bapi_te_marax IMPORTING ex_container = ls_bapi_te_maraxs. ls_extensioninx-structure = 'BAPI_TE_MARAX'. ls_extensioninx-valuepart1 = ls_bapi_te_maraxs+0(240). ls_extensioninx-valuepart2 = ls_bapi_te_maraxs+240(240). APPEND ls_extensioninx TO lt_extensioninx. CLEAR:ls_return,lt_returnmessages. CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' EXPORTING headdata = ls_headdata clientdata = ls_clientdata clientdatax = ls_clientdatax IMPORTING return = ls_return TABLES materialdescription = lt_materialdescription materiallongtext = lt_materiallongtext returnmessages = lt_returnmessages extensionin = lt_extensionin extensioninx = lt_extensioninx. IF ls_return-type = 'S'. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. t_data_basis-status = 'S'. t_data_basis-message = '物料基本视图创建成功!'. "物料主数据传SRM CLEAR ls_mara. ls_mara-matnr = t_data_basis-matnr. CALL FUNCTION 'ZMM_SAPTOSRM_010' STARTING NEW TASK 'lv_srm_task' EXPORTING i_mara = ls_mara * IV_UPD_MARA = * I_MARC = * IV_UPD_MARC = * IV_UPD_MAKT = * IV_UPD_MARM = iv_zsynchrono = 'Z' * IMPORTING * E_STATUS = * E_MESSAGE = * TABLES * T_MAKT = * T_MARM = . ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. t_data_basis-status = 'E'. t_data_basis-message = ls_return-message && ls_return-message_v1 && ls_return-message_v2 && ls_return-message_v3 && ls_return-message_v4. ENDIF. CLEAR :lt_materialdescription,ls_materialdescription,lt_materiallongtext,ls_materiallongtext,lt_returnmessages, lt_extensionin,ls_extensionin,lt_extensioninx,ls_extensioninx,ls_headdata,ls_clientdata, ls_clientdatax. IF ls_return-type = 'S'. "读取该物料有没扩充分类视图 l_object = t_data_basis-matnr. CALL FUNCTION 'BAPI_OBJCL_GETDETAIL' EXPORTING objectkey = l_object objecttable = 'MARA' classnum = t_data_basis-class classtype = t_data_basis-klart TABLES allocvaluesnum = lt_num allocvalueschar = lt_char allocvaluescurr = lt_curr return = lt_ret. REFRESH:lt_num[], lt_char[], lt_curr[]. CLEAR:lt_num, lt_char, lt_curr. "分类特性 "供应商料号 lt_char-charact = 'VMAT'. lt_char-value_char = t_data_basis-vmat. APPEND lt_char. "供应商 lt_char-charact = 'VENDOR'. lt_char-value_char = t_data_basis-vendor. APPEND lt_char. "专案名称 lt_char-charact = 'CASENAME'. lt_char-value_char = t_data_basis-casename. APPEND lt_char. "是否保税 lt_char-charact = 'BONDED'. lt_char-value_char = t_data_basis-is_bonded. APPEND lt_char. "备注 lt_char-charact = 'REMARK'. lt_char-value_char = t_data_basis-remark. APPEND lt_char. "客户物料号(P/N) lt_char-charact = 'CPARTID'. lt_char-value_char = t_data_basis-cpartid. APPEND lt_char. "封装形式 lt_char-charact = 'PTYPE'. lt_char-value_char = t_data_basis-ptype. APPEND lt_char. "location lt_char-charact = 'LOCAT'. lt_char-value_char = t_data_basis-location. APPEND lt_char. READ TABLE lt_ret WITH KEY type = 'S' id = 'CL' number = 731. "当没有创建的,进入修改模式 IF sy-subrc <> 0. "删除已有分类 REFRESH lt_ret[]. SELECT a~klart "将已有分类与类号从表中取出 a~class INTO TABLE lt_class FROM klah AS a JOIN kssk AS b ON a~clint = b~clint WHERE b~objek = l_object. "一个类号下只允许存在一个种类,所以需要删除该类号下已存在的种类 LOOP AT lt_class INTO ls_class WHERE klart = t_data_basis-klart. CALL FUNCTION 'BAPI_OBJCL_DELETE' "删除已有分类 EXPORTING objectkey = l_object objecttable = 'MARA' classnum = t_data_basis-class classtype = t_data_basis-klart * CHANGENUMBER = * KEYDATE = SY-DATUM TABLES return = lt_ret. READ TABLE lt_ret WITH KEY type = 'E'. IF sy-subrc <> 0. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. REFRESH lt_ret[]. CLEAR: ls_class. ENDLOOP. "分类视图创建 CALL FUNCTION 'BAPI_OBJCL_CREATE' EXPORTING objectkeynew = l_object objecttablenew = 'MARA' classnumnew = t_data_basis-class classtypenew = t_data_basis-klart status = '1' no_default_values = 'X' TABLES allocvaluesnum = lt_num allocvalueschar = lt_char allocvaluescurr = lt_curr return = lt_ret. READ TABLE lt_ret WITH KEY type = 'E'. IF sy-subrc <> 0. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. t_data_basis-status = lt_ret-type. CONCATENATE '物料' t_data_basis-matnr '基本视图维护成功!' INTO t_data_basis-message. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. t_data_basis-status = lt_ret-type. CONCATENATE '物料' t_data_basis-matnr '基本视图维护失败!' INTO t_data_basis-message. ENDIF. ELSE. "修改模式 REFRESH lt_ret[]. CALL FUNCTION 'BAPI_OBJCL_CHANGE' EXPORTING objectkey = l_object objecttable = 'MARA' classnum = t_data_basis-class classtype = t_data_basis-klart no_default_values = 'X' TABLES allocvaluesnumnew = lt_num allocvaluescharnew = lt_char allocvaluescurrnew = lt_curr return = lt_ret. READ TABLE lt_ret WITH KEY type = 'E'. IF sy-subrc <> 0. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. t_data_basis-status = lt_ret-type. CONCATENATE '物料' t_data_basis-matnr '基本视图维护成功!' INTO t_data_basis-message. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. t_data_basis-status = lt_ret-type. CONCATENATE '物料' t_data_basis-matnr '基本视图维护失败!' INTO t_data_basis-message. ENDIF. ENDIF. ELSE. ENDIF. MODIFY t_data_basis. WAIT UP TO '0.1' SECONDS. ENDLOOP. LOOP AT t_data_factory WHERE status <> 'S'. IF t_data_factory-vprsv = 'S' AND t_data_factory-mmsta <> '99'. t_data_factory-status = 'E'. t_data_factory-message = '价格控制为S,物料状态必为99!'. MODIFY t_data_factory. CONTINUE. ENDIF. IF t_data_factory-vprsv = 'V' AND t_data_factory-ncost <> 'X'. t_data_factory-status = 'E'. t_data_factory-message = '价格控制为V时,无成本核算不能为空!'. MODIFY t_data_factory. CONTINUE. ENDIF. SELECT werks, matnr INTO TABLE @DATA(lt_marc_check) FROM marc WHERE matnr = @t_data_factory-matnr AND werks = @t_data_factory-werks. IF lt_marc_check IS NOT INITIAL. t_data_factory-status = 'E'. t_data_factory-message = '物料工厂视图已经存在!'. MODIFY t_data_factory. EXIT. ENDIF. CLEAR :ls_headdata. ls_headdata-material = t_data_factory-matnr."物料号 ls_headdata-work_sched_view = 'X'. ls_headdata-purchase_view = 'X'. ls_headdata-mrp_view = 'X'. ls_headdata-quality_view = 'X'. ls_headdata-storage_view = 'X'. ls_headdata-account_view = 'X'. ls_headdata-cost_view = 'X'. "财务数据 CLEAR ls_valuationdata . ls_valuationdata-val_class = t_data_factory-bklas. " MBEW-BKLAS 评估类 ls_valuationdata-price_ctrl = t_data_factory-vprsv. " MBEW-VPRSV 价格控制指示符 ls_valuationdata-ml_settle = t_data_factory-mlast. " MBEW-MLAST 价格确定 ls_valuationdata-price_unit = t_data_factory-peinh. " MBEW-PEINH 价格单位 ls_valuationdata-qty_struct = t_data_factory-ekalr. " MBEW-EKALR 用QS的成本估算 ls_valuationdata-orig_mat = t_data_factory-hkmat. " MBEW-HKMAT 物料相关的源 ls_valuationdata-overhead_grp = t_data_factory-kosgr. " MBEW-KOSGR 成本核算间接费用组 * valuationdata-plndprice1 = i_data2-zplp1. " MBEW-ZPLP1计划价格 1 * valuationdata-plndprdate1 = i_data2-zpld1. " MBEW-ZPLD1计划价格日期1 ls_valuationdata-val_area = t_data_factory-werks. " 评估范围 * CLEAR ls_valuationdatax . ls_valuationdatax-val_class = 'X'." MBEW-BKLAS 评估类 ls_valuationdatax-price_ctrl = 'X'." MBEW-VPRSV 价格控制指示符 ls_valuationdatax-ml_settle = 'X'." MBEW-MLAST 价格确定 ls_valuationdatax-price_unit = 'X'." MBEW-PEINH 价格单位 ls_valuationdatax-qty_struct = 'X'." MBEW-PEINH 用QS的成本估算 ls_valuationdatax-orig_mat = 'X'." MBEW-HKMAT 物料相关的源 ls_valuationdatax-overhead_grp = 'X'." MBEW-KOSGR 成本核算间接费用组 * valuationdatax-plndprice1 = 'X'." MBEW-ZPLP1 计划价格 1 * valuationdatax-plndprdate1 = 'X'." MBEW-ZPLD1 计划价格日期1 ls_valuationdatax-val_area = t_data_factory-werks."评估范围 CLEAR ls_plantdata . ls_plantdata-plant = t_data_factory-werks. " MARC-WERKS 工厂 ls_plantdata-pur_group = t_data_factory-ekgrp. " MARC-EKGRP 采购组 ls_plantdata-auto_p_ord = t_data_factory-kautb. " MARC-KAUTB 采购数据 ls_plantdata-gr_pr_time = t_data_factory-webaz. " MARC-WEBAZ 收货处理时间 ls_plantdata-batch_mgmt = t_data_factory-xchpf. " MARC-XCHPF 标识:批次管理需求 ls_plantdata-minlotsize = t_data_factory-bstmi."'EX'. " MARC-BSTMI 最小批量大小(BTCI) ls_plantdata-round_val = t_data_factory-bstrf. " MARC-BSTRF 舍入值 ls_plantdata-sloc_exprc = t_data_factory-lgfsb."'SF01'. " MARC-LGFSB 外部采购仓储地点 ls_plantdata-plnd_delry = t_data_factory-plifz. " MARC-PLIFZ 计划交货时间(天数) ls_plantdata-mrp_type = t_data_factory-dismm."'PD'. " MARC-DISMM MRP 类型 * plantdata-reorder_pt = i_data2-minbe. " MARC-MINBE 再订货点 " ls_plantdata-mrp_ctrler = t_data_factory-dispo."'001'. " MARC-DISPO MRP 控制者 ls_plantdata-lotsizekey = t_data_factory-disls."'EX'. " MARC-DISLS 批量大小 * plantdata-assy_scrap = i_data2-ausss. " MARC-AUSSS 装配报废t-text_id = 'GRUN'. IF t_data_factory-beskz IS NOT INITIAL. ls_plantdata-proc_type = t_data_factory-beskz."'E'. " MARC-BESKZ 采购类型 ENDIF. ls_plantdata-spproctype = t_data_factory-sobsl. " MARC-SOBSL 特殊采购类型 ls_plantdata-inhseprodt = t_data_factory-dzeit. " MARC-DZEIT 自制生产时间 * ls_plantdata-safety_stk = t_data_factory-eisbe. " MARC-EISBE 安全库存 ls_plantdata-sm_key = t_data_factory-fhori."'000'. " MARC-FHORI 计划边际码 ls_plantdata-backflush = t_data_factory-rgekz ." MARC-RGEKZ 标识:反冲 ls_plantdata-plan_strgp = t_data_factory-strgr."'40'. " MARC-STRGR 策略组 ls_plantdata-consummode = t_data_factory-vrmod."'2'. " MARC-VRMOD 消耗模式* ls_plantdata-fwd_cons = t_data_factory-vint2."'999'. " MARC-VINT2 向前消耗期间 ls_plantdata-bwd_cons = t_data_factory-vint1."'999'. " MARC-VINT1 逆向消耗期间 ls_plantdata-issue_unit = t_data_factory-ausme. " MARC-AUSME 发料单位 ls_plantdata-issue_unit_iso = t_data_factory-ausme. " MARC-AUSME 发料单位 ls_plantdata-availcheck = t_data_factory-mtvfp."'02'. " MARC-MTVFP 可用性检查 ls_plantdata-dep_req_id = t_data_factory-sbdkz."''. " MARC-SBDKZ 独立/集中 * plantdata-prod_unit = i_data2-frtme. " MARC-FRTME 生产 单位 ls_plantdata-production_scheduler = t_data_factory-fevor."'001'." MARC-FEVOR 生产调度员 IF t_data_factory-fevor IS NOT INITIAL. ls_plantdata-prodprof = '000001'." MARC-SFCPF 生产计划参数文件 ENDIF. ls_plantdata-iss_st_loc = t_data_factory-lgpro."'SF01'. " MARC-LGPRO 生产仓储地点 * plantdata-over_tol = i_data2-ueeto. " MARC-UEETO 过度交货允差 " ls_plantdata-pur_status = t_data_factory-mmsta."'99' ." MARC-MMSTA 工厂特定的物料状态 ls_plantdata-lot_size = t_data_factory-losgr."'1'. " MARC-LOSGR 成本核算单位 ls_plantdata-no_costing = t_data_factory-ncost. " MARC-NCOST 无成本核算 ls_plantdata-variance_key = t_data_factory-awsls."'000001'. " MARC-AWSLS 差异码 ls_plantdata-ind_post_to_insp_stock = t_data_factory-insmk. " MARC-INSMK 活动 ls_plantdata-ctrl_key = '0001'. "QM控制码 CLEAR ls_plantdatax. ls_plantdatax-plant = t_data_factory-werks. " MARC-WERKS 工厂 ls_plantdatax-lot_size = 'X'. " MARC-LOSGR 成本核算单位 ls_plantdatax-issue_unit = 'X'. " MARC-AUSME 发料单位 ls_plantdatax-issue_unit_iso = 'X'. " MARC-AUSME 发料单位 ls_plantdatax-pur_status = 'X' ." MARC-MMSTA 工厂特定的物料状态 ls_plantdatax-variance_key = 'X'. " MARC-AWSLS 差异码 ls_plantdatax-pur_group = 'X'. " MARC-EKGRP 采购组 ls_plantdatax-auto_p_ord = 'X'. " MARC-KAUTB 采购数据 ls_plantdatax-gr_pr_time = 'X'. " MARC-WEBAZ 收货处理时间 ls_plantdatax-batch_mgmt = 'X'. " MARC-XCHPF 标识:批次管理需求 ls_plantdatax-lotsizekey = 'X'. " MARC-DISLS 批量大小 ls_plantdatax-minlotsize = 'X'. " MARC-BSTMI 最小批量大小(BTCI) ls_plantdatax-spproctype = 'X'. " MARC-SOBSL 特殊采购类型 ls_plantdatax-sloc_exprc = 'X'. " MARC-LGFSB 外部采购仓储地点 ls_plantdatax-plnd_delry = 'X'. " MARC-PLIFZ 计划交货时间(天数) * ls_plantdatax-safety_stk = 'X'. " MARC-EISBE 安全库存 ls_plantdatax-mrp_type = 'X'. " MARC-DISMM MRP 类型 * plantdatax-reorder_pt = 'X'. " MARC-MINBE 再订货点 ls_plantdatax-mrp_ctrler = 'X'. " MARC-DISPO MRP 控制者 ls_plantdatax-proc_type = 'X'. " MARC-BESKZ 采购类型 ls_plantdatax-iss_st_loc = 'X'. " MARC-LGPRO 生产仓储地点 ls_plantdatax-sm_key = 'X'. " MARC-FHORI 计划边际码 ls_plantdatax-backflush = 'X' ." MARC-RGEKZ 标识:反冲 ls_plantdatax-plan_strgp = 'X'. " MARC-STRGR 策略组 ls_plantdatax-consummode = 'X'. " MARC-VRMOD 消耗模式 ls_plantdatax-bwd_cons = 'X'. " MARC-VINT1 逆向消耗期间 ls_plantdatax-fwd_cons = 'X'. " MARC-VINT2 向前消耗期间 ls_plantdatax-availcheck = 'X'. " MARC-MTVFP 可用性检查 ls_plantdatax-dep_req_id = 'X'. " MARC-SBDKZ 独立/集中 ls_plantdatax-production_scheduler = 'X'." MARC-FEVOR 生产调度员 IF t_data_factory-fevor IS NOT INITIAL. ls_plantdatax-prodprof = 'X'." MARC-SFCPF 生产计划参数文件 ENDIF. ls_plantdatax-round_val = 'X'. " MARC-BSTRF 舍入值 ls_plantdatax-no_costing = 'X'. " MARC-NCOST 无成本核算 * plantdatax-assy_scrap = 'X'. " MARC-AUSSS 装配报废率 ls_plantdatax-inhseprodt = 'X'. " MARC-DZEIT 自制生产时间 * plantdatax-prod_unit = 'X'. " MARC-FRTME 生产单位 * plantdatax-over_tol = 'X'. " MARC-UEETO 过度交货允差 ls_plantdatax-ind_post_to_insp_stock = 'X'. " MARC-AWSLS 差异码 ls_plantdatax-ctrl_key = 'X'. "QM控制码 "扩充库存地点 CLEAR ls_storagelocationdata. ls_storagelocationdata-plant = t_data_factory-werks. ls_storagelocationdata-stge_loc = t_data_factory-lgfsb. CLEAR ls_storagelocationdatax. ls_storagelocationdatax-plant = t_data_factory-werks. ls_storagelocationdatax-stge_loc = t_data_factory-lgfsb. CLEAR:ls_return,lt_returnmessages. CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' EXPORTING headdata = ls_headdata * clientdata = ls_clientdata * clientdatax = ls_clientdatax plantdata = ls_plantdata plantdatax = ls_plantdatax valuationdata = ls_valuationdata valuationdatax = ls_valuationdatax * salesdata = ls_salesdata * salesdatax = ls_salesdatax storagelocationdata = ls_storagelocationdata storagelocationdatax = ls_storagelocationdatax IMPORTING return = ls_return TABLES materialdescription = lt_materialdescription materiallongtext = lt_materiallongtext returnmessages = lt_returnmessages extensionin = lt_extensionin extensioninx = lt_extensioninx. IF ls_return-type = 'S'. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. t_data_factory-status = 'S'. t_data_factory-message = '物料工厂视图创建成功!'. CLEAR ls_mara. ls_mara-matnr = t_data_factory-matnr. CALL FUNCTION 'ZMM_SAPTOSRM_010' STARTING NEW TASK 'lv_srm_task' EXPORTING i_mara = ls_mara * IV_UPD_MARA = * I_MARC = * IV_UPD_MARC = * IV_UPD_MAKT = * IV_UPD_MARM = iv_zsynchrono = 'Z' * IMPORTING * E_STATUS = * E_MESSAGE = * TABLES * T_MAKT = * T_MARM = . IF t_data_factory-xchpf = 'X'. CLEAR:lv_key. lv_key+0(18) = t_data_factory-matnr. " 物料号 " 删除批次特性 REFRESH lt_ret[]. CALL FUNCTION 'BAPI_OBJCL_DELETE' EXPORTING objectkey = lv_key objecttable = 'MARA' classnum = lv_class classtype = lv_class_type * CHANGENUMBER = * KEYDATE = SY-DATUM * OBJECTKEY_LONG = TABLES return = lt_ret. READ TABLE lt_ret WITH KEY type = 'E'. IF sy-subrc <> 0. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. REFRESH lt_ret[]. "批次特性的新建 CLEAR :lt_num,lt_char,lt_curr,lt_num[],lt_char[],lt_curr[],lt_ret,lt_ret[]. CALL FUNCTION 'BAPI_OBJCL_CREATE' EXPORTING objectkeynew = lv_key objecttablenew = 'MARA' classnumnew = lv_class classtypenew = lv_class_type status = '1' no_default_values = 'X' TABLES allocvaluesnum = lt_num allocvalueschar = lt_char allocvaluescurr = lt_curr return = lt_ret. READ TABLE lt_ret WITH KEY type = 'E'. IF sy-subrc <> 0. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. t_data_factory-status = 'S'. t_data_factory-message = '物料工厂视图维护成功!'. ELSE. t_data_factory-status = 'E'. t_data_factory-message = '物料工厂视图维护失败!'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. ENDIF. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. t_data_factory-status = 'E'. t_data_factory-message = ls_return-message && ls_return-message_v1 && ls_return-message_v2 && ls_return-message_v3 && ls_return-message_v4. ENDIF. MODIFY t_data_factory. WAIT UP TO '0.1' SECONDS. ENDLOOP. READ TABLE t_data_basis WITH KEY status = 'E'. IF sy-subrc = 0. e_status = 'E'. e_message = '基本视图创建失败!'. ENDIF. READ TABLE t_data_factory WITH KEY status = 'E'. IF sy-subrc = 0. e_status = 'E'. e_message = '工厂视图创建失败!'. ENDIF. IF e_status <> 'E'. e_status = 'S'. e_message = '创建成功!'. ENDIF. zfmparavalsave3 'END' e_status e_message. ENDFUNCTION.这段代码我要新增一段逻辑:新定义一个字段zjylx,由OA传输这个字段给我。现在在SAP里已有个自建表ZTMM065,里面存了每个物料组对应的检验类型,我接收到OA传来的料号和物料组和检验类型,用他传来的物料组和检验类型去ztmm065比对表里的物料组是不是传来的检验类型,若不是ztmm065里的检验类型,则把这个料号+zjylx记入另一个自建表ZTMM066,同时记录创建时间和创建人
最新发布
11-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值