SAP批量修改工单BAPI

BAPI_ALM_ORDER_MAINTAIN可以用于批量修改工单。以下是一个示例代码段:

```
DATA: lt_order_changes TYPE TABLE OF bapialmorderchg,
      ls_order_change TYPE bapialmorderchg.

LOOP AT it_input INTO ls_input.
  CLEAR ls_order_change.
  ls_order_change-orderid = ls_input-orderid.
  ls_order_change-operation = 'U'.
  ls_order_change-ordchgparams-updtype = 'U'.
  ls_order_change-orderadmhh = 'X'.
  ls_order_change-maintrequest = 'X'.
  "Set other fields to be changed
  APPEND ls_order_change TO lt_order_changes.
ENDLOOP.

CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
  EXPORTING
    testrun                = abap_true
  IMPORTING
*   RETURN                 =
  TABLES
    orderchanges           = lt_order_changes.
```

在上面的代码中,输入表(it_input)包含需要修改的工单信息,从中创建了一个修改记录(ls_order_change),然后将所有修改记录收集到一个表格(lt_order_changes)中。最后,在BAPI调用中传递此表格。

请注意,此示例代码中使用了testrun = abap_true,这意味着BAPI将不会实际修改工单,而只会返回修改后的状态。要实际更新工单,必须将testrun设置为abap_false。

DATA: it_methods     TYPE TABLE OF bapi_alm_order_method WITH HEADER LINE,
      ls_methods     TYPE TABLE OF bapi_alm_order_method WITH HEADER LINE,
      it_component   TYPE TABLE OF bapi_alm_order_component WITH HEADER LINE,
      it_componentup TYPE TABLE OF bapi_alm_order_component_up WITH HEADER LINE,
      lt_return      TYPE TABLE OF bapiret2,
      ls_return      TYPE bapiret2.

DATA: l_rspos     TYPE i.       "预留行号

DATA: it_component_old TYPE TABLE OF bapi_alm_order_component_e.

*---------------------------------删除旧组件---------------------------------*
CALL FUNCTION 'BAPI_ALM_ORDER_GET_DETAIL'
  EXPORTING
    number        = '000004004946'
  TABLES
    et_components = it_component_old
    return        = lt_return.

it_methods-refnumber  = 1.
it_methods-method = 'SAVE'.
it_methods-objectkey = '000004004946'.
APPEND it_methods.
CLEAR it_methods.

MOVE-CORRESPONDING it_component_old TO it_component[] .

LOOP AT it_component_old ASSIGNING FIELD-SYMBOL(<fs_component_old>).
  l_rspos = l_rspos + 1.
  IF <fs_component_old>-delete_ind = ''.        "跳过被删除的项目
    it_methods-refnumber = l_rspos.                "参照组件编号
    it_methods-objecttype = 'COMPONENT'.
    it_methods-method = 'DELETE'.
    it_methods-objectkey = '000004004946'.          "订单号
    APPEND it_methods.
  ENDIF.
ENDLOOP.

CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
  TABLES
    it_methods   = it_methods[]
*   IT_HEADER_SRV   =
*   IT_HEADER_SRV_UP       =
*   IT_USERSTATUS   =
*   IT_PARTNER   =
*   IT_PARTNER_UP   =
*   IT_OPERATION =
*   IT_OPERATION_UP =
*   IT_RELATION  =
*   IT_RELATION_UP  =
    it_component = it_component[]
*   it_component_up = it_componentup[]
*   IT_TEXT      =
*   IT_TEXT_LINES   =
*   EXTENSION_IN =
    return       = lt_return.

UNASSIGN <fs_component_old>.
CLEAR: l_rspos,it_methods[],it_methods,it_component,it_component[],it_component_old.

IF line_exists( lt_return[ type = 'A' ] ) OR
   line_exists( lt_return[ type = 'E' ] ) OR
   line_exists( lt_return[ type = 'X' ] ).
  ROLLBACK WORK.
  EXIT.
ELSE.
  COMMIT WORK AND WAIT.
ENDIF.

*---------------------------------新增组件---------------------------------*
it_methods-refnumber  = 1.
it_methods-method = 'SAVE'.
it_methods-objectkey = '000004004946'.
APPEND it_methods.
CLEAR it_methods.

DO 2 TIMES.
  l_rspos = l_rspos + 1.

*    it_component-reserv_no = ''.                  "预留号
  it_component-res_item = l_rspos.                 "预留项目
  it_component-material = '000000010000000010'.    "物料编码
  it_component-requirement_quantity = '10'.
  it_component-requirement_quantity_unit = 'EA'.
*    it_component-withdrawn = abap_true.           "完成标识
  APPEND it_component.

  it_componentup-material = 'X'.                  "物料编码
  it_componentup-requirement_quantity = 'X'.
  it_componentup-requirement_quantity_unit = 'X'.
*  it_componentup-withdrawn = abap_true.
  APPEND it_componentup.

  it_methods-refnumber = l_rspos.                "参照组件编号
  it_methods-objecttype = 'COMPONENT'.
  it_methods-method = 'CREATE'.
  it_methods-objectkey = '000004004946'.          "订单号
  APPEND it_methods.
  CLEAR it_methods.

ENDDO.

CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
  TABLES
    it_methods      = it_methods[]
*   IT_HEADER_SRV   =
*   IT_HEADER_SRV_UP       =
*   IT_USERSTATUS   =
*   IT_PARTNER      =
*   IT_PARTNER_UP   =
*   IT_OPERATION    =
*   IT_OPERATION_UP =
*   IT_RELATION     =
*   IT_RELATION_UP  =
    it_component    = it_component[]
    it_component_up = it_componentup[]
*   IT_TEXT         =
*   IT_TEXT_LINES   =
*   EXTENSION_IN    =
    return          = lt_return.

IF line_exists( lt_return[ type = 'A' ] ) OR
   line_exists( lt_return[ type = 'E' ] ) OR
   line_exists( lt_return[ type = 'X' ] ).
  ROLLBACK WORK.

ELSE.
  COMMIT WORK AND WAIT.
ENDIF.
 

IW32可查看工单状态

### 如何确保 SAP 工单 BOM 需求数量为整数值 在 SAP 生产计划 (PP) 中,物料清单 (BOM) 的需求数量可以通过多种方式控制其精度和单位。如果希望确保工单中的 BOM 需求数量始终为整数,则可以从以下几个方面入手: #### 1. **通过 Lot Size Calculation 设置** SAP 提供了批量计算功能来调整生产订单的数量以满足特定条件。可以配置批量大小规则以强制生成整数的需求量。例如,在创建生产订单时启用 `Lot size rounding` 功能,该功能会将最终的需求数量四舍五入到最接近的整数[^1]。 #### 2. **利用 Material Master 数据中的 Quantity Fields** 在物料主数据中定义最小采购/生产数量(Minimum Order Quantity),并将其设为大于等于 1 的值。这样可以在源头上防止非整数需求的发生。此外,还可以设置固定批量(Fixed Batch Size)或者动态批量策略(Dynamic Batch Sizing Strategy),这些都可以帮助实现整数化的目标[^3]。 #### 3. **借助 Net Requirements Calculation 调整** 在净需求计算阶段引入安全库存和其他参数时,应考虑如何影响最终所需材料的数量。适当增加或减少安全库存水平可能会间接促使系统推荐更贴近于整数的结果。然而需要注意的是,这种方法更多依赖于业务逻辑而非技术手段。 #### 4. **自定义 ABAP 编程解决特殊场景** 对于某些复杂情况可能无法仅靠标准事务码完成全部定制工作,则可通过编写ABAP程序进一步干预整个流程。比如修改Z类增强点处的标准算法使其支持只返回整型变量作为输出结果之一;又或者是开发新的用户退出(User Exit)/BAPI接口用于拦截不符合要求的数据项并重新校验后再提交给下游模块继续处理下去[^2]. ```abap DATA: lv_rounded_value TYPE i. lv_rounded_value = ROUND( val = p_decimal_number dec = 0 ). ``` 上述代码片段展示了如何使用ABAP内置函数ROUND()来进行向上取整操作,其中val代表待转换的小数,pdecimalnumber则是实际传入的具体数值. --- ### 总结 综上所述,SAP提供了多方面的机制用来保障工单bom需求数字成为整数形式,既包括前端配置选项也涵盖了后台编程扩展可能性.具体采用哪种方案取决于企业内部的实际应用场景以及现有it架构现状等因素共同决定.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值