活动介绍

abap bapi_goodsmvt_create委外采购订单

时间: 2025-08-18 21:19:12 浏览: 14
<think>我们正在讨论如何使用ABAP BAPI_GOODSMVT_CREATE创建委外采购订单的收货。根据引用[1]和[2],我们知道BAPI_GOODSMVT_CREATE用于创建货物移动,包括采购订单收货。特别地,引用[2]指出GM_CODE参数为'01'时对应采购订单的过帐收货(TCODE MB01)。委外采购订单的收货也属于采购订单收货的一种,因此我们可以使用相同的BAPI,但需要注意委外加工的特殊性(如消耗的组件和收货的成品)。 委外加工采购订单收货时,通常涉及两个方面的移动: 1. 成品的收货(从委外供应商接收成品) 2. 组件的消耗(消耗发往供应商的组件库存) 在标准SAP中,委外采购订单收货通常使用移动类型101(收货)和相应的反冲移动类型(如543对组件的消耗)。在同一个货物移动中,我们可以同时过账成品的收货和组件的消耗。 使用BAPI_GOODSMVT_CREATE创建委外采购订单收货的步骤: 1. 准备表头数据(GOODSMVT_HEADER) - 必须指定过账日期(PSTNG_DATE)、凭证日期(DOC_DATE)和移动类型(移动类型在行项目中指定,但表头可以指定一些默认值?注意:实际上移动类型在行项目中指定,表头中有一个字段REF_DOC_NO可以填写采购订单号,但并不是必须的,因为行项目会关联采购订单行) - 特别注意:GM_CODE 设置为 '01'(采购订单收货) - 其他字段如BLART(凭证类型)等根据业务需求填写 2. 准备行项目数据(GOODSMVT_ITEM 表) - 对于成品收货: ENTRY_QNT: 收货数量 MOVE_TYPE: 101(标准采购订单收货) PO_NUMBER: 委外采购订单号 PO_ITEM: 采购订单行项目号 MATERIAL: 成品物料号 VENDOR: 供应商(可选,因为采购订单中已有) STGE_LOC: 库存地点(收货) ... 其他必要字段 - 对于组件消耗(反冲): ENTRY_QNT: 消耗数量(负数) MOVE_TYPE: 543(委外加工消耗) MATERIAL: 组件物料号 STGE_LOC: 组件消耗的库存地点(通常为委外加工库存地点) ... 其他必要字段 **注意:** 组件消耗的行需要与成品收货行关联在同一张凭证中,并且需要指定反冲的关联(如通过采购订单行和物料号关联)。在标准委外流程中,组件的消耗是自动根据BOM反冲的,因此我们只需要在BAPI中同时提供这两类行项目即可。 3. 调用BAPI 调用BAPI_GOODSMVT_CREATE,传入表头数据和行项目表,并接收返回的凭证号(MATERIALDOCUMENT)和会计年度(MATDOCUMENTYEAR)。 4. 检查返回值 检查BAPI返回的消息,如果有错误则进行相应处理。 注意:在实际操作中,委外采购订单的收货通常通过移动类型101(收货)和543(消耗)在同一个物料凭证中完成。在调用BAPI时,我们需要为每个移动(成品收货和每个组件的消耗)分别创建一个行项目。 但是,请注意,组件的消耗数量通常由系统根据BOM自动计算。在调用BAPI时,我们是否需要显式指定每个组件的消耗?这取决于系统配置。在标准流程中,我们通常只指定成品的收货数量,系统会自动反冲组件。然而,在BAPI调用中,我们必须明确提供所有行项目(包括组件消耗行)。因此,我们需要在调用BAPI之前计算组件的消耗数量(根据BOM和收货数量)。 另一种做法是使用移动类型101(只针对成品),并让系统自动产生反冲凭证(这通常是在后台配置中设置的)。但根据BAPI_GOODSMVT_CREATE的文档,我们需要在同一个调用中提供所有的行项目,包括组件的消耗行。 因此,步骤总结如下: a. 读取委外采购订单,获取需要收货的成品行项目。 b. 根据BOM计算该成品收货数量对应的组件消耗数量。 c. 构建行项目: - 一行用于成品收货(移动类型101) - 每个组件一行(移动类型543,数量为负,库存地点为委外库存地点) 示例代码结构: ```abap DATA: lt_goodsmvt_item TYPE TABLE OF bapi2017_gm_item_create, ls_goodsmvt_item LIKE LINE OF lt_goodsmvt_item, ls_goodsmvt_header TYPE bapi2017_gm_head_01, ls_goodsmvt_code TYPE bapi2017_gm_code, lv_matdoc TYPE bapi2017_gm_head_ret-mat_doc, lv_matdocyear TYPE bapi2017_gm_head_ret-doc_year, lt_return TYPE TABLE OF bapiret2. * 设置表头数据 ls_goodsmvt_header-pstng_date = sy-datum. "过账日期 ls_goodsmvt_header-doc_date = sy-datum. "凭证日期 ls_goodsmvt_header-ref_doc_no = '委外采购订单号'. "可选 * 设置移动代码(采购订单收货) ls_goodsmvt_code-gm_code = '01'. * 成品收货行 ls_goodsmvt_item-material = '成品物料号'. ls_goodsmvt_item-plant = '工厂'. ls_goodsmvt_item-stge_loc = '库存地点'. "成品收货库存地点 ls_goodsmvt_item-move_type = '101'. "采购订单收货 ls_goodsmvt_item-entry_qnt = 收货数量. ls_goodsmvt_item-po_number = '委外采购订单号'. ls_goodsmvt_item-po_item = '采购订单行项目号'. ls_goodsmvt_item-mvt_ind = 'B'. "采购订单相关移动 APPEND ls_goodsmvt_item TO lt_goodsmvt_item. CLEAR ls_goodsmvt_item. * 组件消耗行(假设有多个组件) LOOP AT 组件列表 INTO 组件. ls_goodsmvt_item-material = 组件-物料号. ls_goodsmvt_item-plant = '工厂'. ls_goodsmvt_item-stge_loc = '组件库存地点'. "通常为委外库存地点 ls_goodsmvt_item-move_type = '543'. "委外加工消耗 ls_goodsmvt_item-entry_qnt = -组件消耗数量. "负数表示消耗 ls_goodsmvt_item-po_number = '委外采购订单号'. ls_goodsmvt_item-po_item = '采购订单行项目号'. "注意:这里通常指向同一个采购订单行(即成品行)?实际上,组件的消耗与成品行关联,但采购订单行项目号应该是成品行的行号。 ls_goodsmvt_item-mvt_ind = 'B'. "采购订单相关移动 APPEND ls_goodsmvt_item TO lt_goodsmvt_item. CLEAR ls_goodsmvt_item. ENDLOOP. * 调用BAPI CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = ls_goodsmvt_header goodsmvt_code = ls_goodsmvt_code IMPORTING goodsmvt_headret = ls_headret materialdocument = lv_matdoc matdocumentyear = lv_matdocyear TABLES goodsmvt_item = lt_goodsmvt_item return = lt_return. * 检查返回值 READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS. IF sy-subrc = 0. "有错误,需要回滚并显示错误 CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. "处理错误消息 ELSE. "提交更改 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. "成功,lv_matdoc和lv_matdocyear包含物料凭证号和年度 ENDIF. ``` 注意:上述代码仅为示例,实际应用中需要根据具体业务调整。特别是组件的消耗数量计算需要根据BOM展开,并且确保采购订单是委外类型(具有组件分配)。 另外,在行项目中,我们通过PO_NUMBER和PO_ITEM关联采购订单,并且移动类型101和543都指向同一个采购订单行(即成品行)。在委外采购订单中,组件分配在采购订单的组件分配标签中,因此系统在收货时会自动反冲,但在BAPI中我们需要显式指定这些行。 关于组件的PO_ITEM:实际上,在采购订单中,组件并不在采购订单行项目中,而是在采购订单的组件分配中(如表RESB)。因此,在行项目中,我们仍然使用成品的采购订单行项目号。系统会根据物料和采购订单行自动匹配组件。 最后,务必注意权限和错误处理。 参考文献: [^1]: SAP_ABAP_MM_BAPI清单案例教程——采购订单收货_BAPI_GOODSMVT_CREATE_MIGO [^2]: SAP ABAP BAPI_GOODSMVT_CREATE 的 GOODSMVT_CODE GM_CODE参数 §§相关问题§§ 1. 如何计算委外加工收货时组件的消耗数量? 2. BAPI_GOODSMVT_CREATE调用时出现错误如何排查? 3. 委外采购订单和普通采购订单在收货BAPI调用上有哪些区别?</think>### 使用ABAP BAPI_GOODSMVT_CREATE创建委外采购订单收货 在SAP系统中,委外加工采购订单的收货操作涉及特殊处理,需要同时记录成品收货和组件消耗。以下是使用`BAPI_GOODSMVT_CREATE`创建委外采购订单收货的详细步骤: #### 核心参数说明 1. **GOODSMVT_HEADER**(表头数据): - `PSTNG_DATE`:过账日期(必填) - `DOC_DATE`:凭证日期(必填) - `REF_DOC_NO`:采购订单号(委外订单号) 2. **GOODSMVT_CODE**(移动类型标识): - `GM_CODE = '01'`:对应采购订单收货(MB01事务码)[^2] 3. **GOODSMVT_ITEM**(行项目数据): - **成品收货行**: - `MATERIAL`:成品物料号 - `MOVE_TYPE = '101'`:标准收货移动类型 - `ENTRY_QNT`:收货数量 - `PO_NUMBER`:采购订单号 - `PO_ITEM`:采购订单行号 - **组件消耗行**: - `MATERIAL`:组件物料号 - `MOVE_TYPE = '543'`:委外加工消耗移动类型 - `ENTRY_QNT`:负消耗数量(例如:-100) - `PO_NUMBER`:采购订单号 - `PO_ITEM`:关联的订单行号 #### ABAP代码示例 ```abap DATA: lt_item TYPE TABLE OF bapi2017_gm_item_create, ls_header TYPE bapi2017_gm_head_01, ls_code TYPE bapi2017_gm_code, lt_return TYPE TABLE OF bapiret2. * 设置表头参数 ls_header-pstng_date = sy-datum. "过账日期 ls_header-doc_date = sy-datum. "凭证日期 ls_header-ref_doc_no = '4500001234'. "委外采购订单号 * 设置移动类型标识 ls_code-gm_code = '01'. "采购订单收货 * 成品收货行(移动类型101) APPEND VALUE #( material = 'F-100' "成品物料 plant = '1000' "工厂 stge_loc = '0001' "库存地点 move_type = '101' "收货移动类型 entry_qnt = 100 "收货数量 po_number = '4500001234' po_item = '00010' "采购订单行号 ) TO lt_item. * 组件消耗行(移动类型543) APPEND VALUE #( material = 'C-200' "组件物料 plant = '1000' "工厂 stge_loc = '5000' "委外库存地点 move_type = '543' "委外消耗移动类型 entry_qnt = -100 "消耗数量(负值) po_number = '4500001234' po_item = '00010' "关联的订单行号 ) TO lt_item. * 调用BAPI创建货物移动 CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = ls_header goodsmvt_code = ls_code IMPORTING materialdocument = lv_matdoc "返回物料凭证号 TABLES goodsmvt_item = lt_item return = lt_return. * 检查执行结果 IF NOT line_exists( lt_return[ type = 'E' ] ). CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true. WRITE: '物料凭证', lv_matdoc, '创建成功'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. "处理错误消息 ENDIF. ``` #### 关键注意事项 1. **组件消耗处理**: - 必须使用移动类型`543`记录组件消耗 - 数量必须为**负值**表示库存减少 - 组件库存地点需设置为委外加工专用库位 2. **凭证一致性**: - 所有行项目的`PO_NUMBER`必须相同 - 组件消耗行的`PO_ITEM`需关联到成品行号 3. **错误处理**: - 始终检查`RETURN`表内的消息 - 错误时调用`BAPI_TRANSACTION_ROLLBACK`回滚 4. **特殊配置**: - 确保工厂的委外加工标识已激活 - 组件物料需维护反冲标志 > 注:委外加工收货需同时处理成品和组件,这与普通采购订单(仅需移动类型101)有本质区别[^1]。
阅读全文

相关推荐

FUNCTION /sc1/ftd_mm_migo. *"---------------------------------------------------------------------- *"*"本地接口: *"  TABLES *"      ET_RETURN STRUCTURE  /SC1/FTD_MM_BAPIRET *"      IT_INPUT STRUCTURE  /SC1/S_WIS_INPUT *"----------------------------------------------------------------------   DATA: lt_po          TYPE STANDARD TABLE OF /sc1/s_wis_input,         lt_inbound_do  TYPE STANDARD TABLE OF /sc1/s_wis_input,         lt_outbound_do TYPE STANDARD TABLE OF /sc1/s_wis_input,         lt_tl          TYPE STANDARD TABLE OF /sc1/s_wis_input,"铁笼物料做无采购订单收货         lt_ekpo        TYPE STANDARD TABLE OF ty_ekpo,         lt_return      TYPE STANDARD TABLE OF /sc1/ftd_mm_bapiret,         lt_/sc1/mm_migo_log TYPE STANDARD TABLE OF /sc1/mm_migo_log.   "拆分数据&过滤掉已经收货成功的数据   PERFORM split_data TABLES it_input       "传入参数                             lt_po          "采购订单                             lt_inbound_do  "内向交货                             lt_outbound_do "外向交货                             lt_tl          "铁笼物料                             lt_ekpo.   "采购订单收货   PERFORM action_po TABLES lt_po  lt_ekpo  lt_return lt_/sc1/mm_migo_log.   "内向交货单收货   PERFORM action_inbound_do TABLES lt_inbound_do  lt_return lt_/sc1/mm_migo_log.   "外向交货单收货   PERFORM action_outbound_do TABLES lt_outbound_do  lt_return lt_/sc1/mm_migo_log.   "铁笼物料收货   PERFORM action_tl TABLES lt_tl  lt_return lt_/sc1/mm_migo_log.   "保存日志   PERFORM save_log TABLES lt_return lt_/sc1/mm_migo_log.   "编辑消息   PERFORM edit_msg TABLES lt_return et_return . ENDFUNCTION. *----------------------------------------------------------------------* ***INCLUDE /SC1/LFTD_MM_WISF03. *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *&      Form  GET_DATA_MIO1_NEW *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_ITEM[]  text *      -->P_LS_HEAD  text *      <--P_LT_RETURN1  text *      <--P_LV_EBELN  text *      <--P_LV_VBELN  text *----------------------------------------------------------------------* FORM action_po TABLES   pt_po STRUCTURE /sc1/s_wis_input                         pt_ekpo TYPE ty_t_ekpo                         et_return STRUCTURE /sc1/ftd_mm_bapiret                         et_/sc1/mm_migo_log STRUCTURE /sc1/mm_migo_log.   DATA: lt_po_sh     TYPE STANDARD TABLE OF ty_po_sh.   DATA: ls_po_sh     TYPE ty_po_sh.   DATA: lt_ekbe      TYPE STANDARD TABLE OF ekbe,         lt_ekbe_sum  TYPE STANDARD TABLE OF ekbe,         ls_ekbe_sum  TYPE ekbe,         ls_po        TYPE /sc1/s_wis_input,         lv_menge_temp TYPE ekpo-menge,         lv_end_flg    TYPE char1,         lt_ekpo_temp  TYPE ty_t_ekpo.   DATA:ls_return TYPE /sc1/ftd_mm_bapiret .   FIELD-SYMBOLS:<ls_ekpo> TYPE ty_ekpo,                 <ls_po>   TYPE  /sc1/s_wis_input.   CHECK pt_po[] IS NOT INITIAL.   READ TABLE et_return with KEY type = 'E' TRANSPORTING NO FIELDS .   CHECK sy-subrc <> 0.   "(2)根据上一步获得的信息,获取每个项目当前待入库的剩余量;   "(2)-1:获取采购订单历史数据   IF pt_ekpo[] IS NOT INITIAL.     SELECT ebeln            ebelp            menge            shkzg       FROM ekbe       INTO CORRESPONDING FIELDS OF TABLE lt_ekbe       FOR ALL ENTRIES IN pt_ekpo[]       WHERE ebeln = pt_ekpo-ebeln         AND ebelp = pt_ekpo-ebelp.   ENDIF.   "(2)-2:计算已收货总数量   LOOP AT lt_ekbe ASSIGNING FIELD-SYMBOL(<ls_ekbe>).     IF <ls_ekbe>-shkzg = 'H'.       <ls_ekbe>-menge  = <ls_ekbe>-menge * -1.     ENDIF.     CLEAR <ls_ekbe>-shkzg.     COLLECT <ls_ekbe> INTO lt_ekbe_sum.   ENDLOOP.   "(2)-3:计算每个行项目的剩余库存   LOOP AT pt_ekpo ASSIGNING <ls_ekpo>.     READ TABLE  lt_ekbe_sum INTO ls_ekbe_sum                          WITH KEY ebeln = <ls_ekpo>-ebeln                                   ebelp = <ls_ekpo>-ebelp .     IF sy-subrc = 0."采购订单部分收货       <ls_ekpo>-menge_re =  <ls_ekpo>-menge - ls_ekbe_sum-menge.     ELSE."采购订单没有进行过收货       <ls_ekpo>-menge_re = <ls_ekpo>-menge.     ENDIF.   ENDLOOP.   "(3)(4)入库数量分配   SORT pt_po BY matnr.   LOOP AT pt_po ASSIGNING <ls_po>.     MOVE-CORRESPONDING <ls_po> TO ls_po_sh.     "先本单全收货     LOOP AT pt_ekpo ASSIGNING <ls_ekpo> WHERE matnr = <ls_po>-matnr AND ebeln = <ls_po>-vbeln.       "(本次收货数量 - 采购单剩余数量) 大于0说明采购订单剩余量不够收货用,采购订单剩余收货数量一定为0       IF ( <ls_po>-lfimg - <ls_ekpo>-menge_re ) >= 0.         <ls_ekpo>-menge_sh = <ls_ekpo>-menge_sh + <ls_ekpo>-menge_re.         "SKU入库数量         <ls_po>-lfimg = <ls_po>-lfimg - <ls_ekpo>-menge_re.         ls_po_sh-lfimg = <ls_ekpo>-menge_re."采购订单本次收货数量=采购订单剩余数量 1         <ls_ekpo>-menge_re = 0.             "采购订单剩余收货数量一定为0           2,1和2的赋值顺序不能变         ls_po_sh-ebeln = <ls_ekpo>-ebeln.         ls_po_sh-ebelp = <ls_ekpo>-ebelp.         COLLECT ls_po_sh INTO lt_po_sh.       ELSE."采购订单剩余量>本次收货量         <ls_ekpo>-menge_sh = <ls_ekpo>-menge_sh + <ls_po>-lfimg .         <ls_ekpo>-menge_re = <ls_ekpo>-menge_re - <ls_po>-lfimg.         ls_po_sh-lfimg = <ls_po>-lfimg.  "收货数量         ls_po_sh-ebeln = <ls_ekpo>-ebeln.         ls_po_sh-ebelp = <ls_ekpo>-ebelp.         COLLECT ls_po_sh INTO lt_po_sh.         <ls_po>-lfimg = 0. "待收货数量为0,结束         EXIT.       ENDIF.     ENDLOOP.     "如果本单全收货后还有剩余,则在剩下的po中同物料进行收货     IF <ls_po>-lfimg  > 0."       LOOP AT pt_ekpo ASSIGNING <ls_ekpo> WHERE matnr = <ls_po>-matnr .         IF  <ls_ekpo>-ebeln <> <ls_po>-vbeln.           IF ( <ls_po>-lfimg - <ls_ekpo>-menge_re ) >= 0.             ls_po_sh-lfimg = <ls_ekpo>-menge_re."收货数量           ELSE.             ls_po_sh-lfimg = <ls_po>-lfimg."收货数量           ENDIF.           ls_po_sh-ebeln = <ls_ekpo>-ebeln.           ls_po_sh-ebelp = <ls_ekpo>-ebelp.           COLLECT ls_po_sh INTO lt_po_sh.           "SKU入库数量           <ls_po>-lfimg = <ls_po>-lfimg - <ls_ekpo>-menge_re.           "SKU剩余入库数量           <ls_ekpo>-menge_re = <ls_ekpo>-menge_re - <ls_po>-lfimg.           IF <ls_po>-lfimg <= 0."SKU入库数量已分配完成,结束分配             EXIT.           ELSEIF <ls_po>-lfimg > 0."SKU入库数量未分配完,需要继续分配           ENDIF.         ENDIF.       ENDLOOP.     ENDIF.   ENDLOOP.   SORT pt_ekpo BY matnr.   LOOP AT pt_po INTO ls_po.     IF ls_po-lfimg > 0."没有       ls_return-uuid = ls_po-uuid.       ls_return-type = 'E'.       ls_return-message =  '库存数量不足'.       APPEND ls_return TO et_return.       DELETE  lt_po_sh WHERE matnr = ls_po-matnr.     ENDIF.   ENDLOOP.   "收货   SORT lt_po_sh BY ebeln ebelp.   PERFORM goodsmvt_create_new TABLES et_return  USING lt_po_sh.   PERFORM edit_log TABLES pt_po                           et_return                           et_/sc1/mm_migo_log. ENDFORM.                    " GET_DATA_MIO1_NEW *&---------------------------------------------------------------------* *&      Form  GOODSMVT_CREATE *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *  -->  p1        text *  <--  p2        text *----------------------------------------------------------------------* FORM goodsmvt_create  TABLES et_return STRUCTURE /sc1/ftd_mm_bapiret                       USING pt_ekpo TYPE ty_t_ekpo                            ps_po    TYPE /sc1/s_wis_input.   "BAPI_GOODSMVT_CREATE 用内表 begin   DATA lv_mblnr            TYPE mseg-mblnr.   DATA ls_goodsmvt_header  TYPE bapi2017_gm_head_01.   DATA ls_code             LIKE  bapi2017_gm_code.   DATA ls_goodsmvt_item    TYPE bapi2017_gm_item_create.   DATA lt_goodsmvt_item    TYPE STANDARD TABLE OF  bapi2017_gm_item_create.   DATA lt_return           TYPE STANDARD TABLE OF bapiret2.   DATA ls_return           TYPE bapiret2.   "BAPI_GOODSMVT_CREATE 用内表 end   DATA: ls_ekpo            TYPE ty_ekpo.   DATA: ls_et_return       TYPE /sc1/ftd_mm_bapiret.   LOOP AT pt_ekpo INTO ls_ekpo.     CLEAR ls_goodsmvt_item.     ls_goodsmvt_item-material  = ps_po-matnr.     ls_goodsmvt_item-move_type =  '101'.    "移动类型     ls_goodsmvt_item-mvt_ind   = 'B'.       "移动标识     ls_goodsmvt_item-entry_qnt = ls_ekpo-menge_sh.     ls_goodsmvt_item-entry_uom = ps_po-meins.     ls_goodsmvt_item-plant     = ps_po-werks.     ls_goodsmvt_item-stge_loc  = ps_po-lgort.     ls_goodsmvt_item-batch     = ps_po-charg.     ls_goodsmvt_item-prod_date = ps_po-hsdat."生产日期     ls_goodsmvt_item-expirydate = ps_po-vfdat."货架寿命到期日     ls_goodsmvt_item-vendrbatch = ps_po-licha."供应商批次     ls_goodsmvt_item-stck_type  = ps_po-insmk.     ls_goodsmvt_item-po_number  = ls_ekpo-ebeln.     ls_goodsmvt_item-po_item    = ls_ekpo-ebelp.     IF ls_goodsmvt_item-entry_qnt IS NOT INITIAL.       APPEND ls_goodsmvt_item TO lt_goodsmvt_item.     ENDIF.   ENDLOOP.   ls_goodsmvt_header-pstng_date  = ps_po-wadat_ist."凭证中的过帐日期   ls_goodsmvt_header-doc_date    = sy-datum."凭证中的凭证日期   ls_goodsmvt_header-pr_uname    = sy-datum.    "用户名   ls_goodsmvt_header-ref_doc_no  = ls_ekpo-ebeln.   ls_code-gm_code                = '01'.  "按照采购订单收货   CALL FUNCTION 'BAPI_GOODSMVT_CREATE'     EXPORTING       goodsmvt_header  = ls_goodsmvt_header       goodsmvt_code    = ls_code     IMPORTING       materialdocument = lv_mblnr     TABLES       goodsmvt_item    = lt_goodsmvt_item       return           = lt_return.   READ TABLE lt_return WITH KEY  type = 'E' INTO ls_return.   IF  sy-subrc = 0.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .     ls_et_return-uuid = ps_po-uuid.     ls_et_return-type = 'E'.     LOOP AT lt_return INTO ls_return WHERE type = 'E' .       CONCATENATE ls_et_return-message ls_return-message '|' INTO ls_et_return-message.     ENDLOOP.   ELSE.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'       EXPORTING         wait = 'X'.     ls_et_return-uuid = ps_po-uuid.     ls_et_return-type = 'S'.     ls_et_return-message = ps_po-vbeln && '收货成功'.   ENDIF.   APPEND ls_et_return TO et_return. ENDFORM.                    " GOODSMVT_CREATE *&---------------------------------------------------------------------* *&      Form  ACTION_INBOUND_DO *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_INBOUND_DO  text *      -->P_LT_EKPO  text *      -->P_ET_RETURN  text *----------------------------------------------------------------------* FORM action_inbound_do  TABLES pt_inbound_do STRUCTURE /sc1/s_wis_input                           et_return STRUCTURE /sc1/ftd_mm_bapiret                         et_/sc1/mm_migo_log STRUCTURE /sc1/mm_migo_log.   DATA: lt_do_temp    TYPE STANDARD TABLE OF /sc1/s_wis_input,         ls_inbound_do TYPE /sc1/s_wis_input,         lv_end_flg    TYPE char1,         lv_exec_flg   TYPE char1.   CHECK pt_inbound_do[] IS NOT INITIAL.   READ TABLE et_return with KEY type = 'E' TRANSPORTING NO FIELDS .   CHECK sy-subrc <> 0.   SORT pt_inbound_do BY vbeln posnr.   LOOP AT pt_inbound_do INTO ls_inbound_do.     APPEND ls_inbound_do TO lt_do_temp.     AT END OF vbeln.       lv_end_flg = 'X'.     ENDAT.     IF lv_end_flg = 'X'.       CLEAR: lv_end_flg,lv_exec_flg.       "如果遇出错,剩余数据不进行收货       READ TABLE et_return with KEY type = 'E' TRANSPORTING NO FIELDS.       IF sy-subrc = 0.         CLEAR: lt_do_temp.         CONTINUE.       ENDIF.       "比较接口传入的信息和系统中的内向交货单信息,行项目数或者数量不相同,则进行修改操作       PERFORM inbound_do_update TABLES  lt_do_temp et_return                                CHANGING lv_exec_flg.       "批次拆分       PERFORM inbound_do_batch_split TABLES  lt_do_temp et_return                                    CHANGING lv_exec_flg.       "拣配       PERFORM do_picking TABLES  lt_do_temp et_return                                CHANGING lv_exec_flg.       "过账       PERFORM inbound_do_confirm TABLES  lt_do_temp et_return                                CHANGING lv_exec_flg.       PERFORM edit_log TABLES lt_do_temp                               et_return                               et_/sc1/mm_migo_log.       CLEAR: lt_do_temp,lv_end_flg.     ENDIF.   ENDLOOP. ENDFORM.                    " ACTION_INBOUND_DO *&---------------------------------------------------------------------* *&      Form  ACTION_OUTBOUND_DO *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_INBOUND_DO  text *      -->P_LT_EKPO  text *      -->P_ET_RETURN  text *----------------------------------------------------------------------* FORM action_outbound_do  TABLES pt_outbound_do STRUCTURE /sc1/s_wis_input                           et_return STRUCTURE /sc1/ftd_mm_bapiret                         et_/sc1/mm_migo_log STRUCTURE /sc1/mm_migo_log.   DATA: lt_do_temp  TYPE STANDARD TABLE OF /sc1/s_wis_input,         ls_outbound_do TYPE /sc1/s_wis_input,         lv_end_flg  TYPE char1,         lv_exec_flg TYPE char1.   CHECK pt_outbound_do[] IS NOT INITIAL.   READ TABLE et_return with KEY type = 'E' TRANSPORTING NO FIELDS .   CHECK sy-subrc <> 0.   SORT pt_outbound_do BY vbeln posnr.   "从数据库表获取交货单数量并与传入数量进行对比(以传入数量为准) 在小于等于数据库交货单数量的情况下对交货单进行修改   LOOP AT pt_outbound_do INTO ls_outbound_do.     APPEND ls_outbound_do TO lt_do_temp.     AT END OF vbeln.       lv_end_flg = 'X'.     ENDAT.     IF lv_end_flg = 'X'.       CLEAR: lv_end_flg,lv_exec_flg.       READ TABLE et_return with KEY type = 'E' TRANSPORTING NO FIELDS.       IF sy-subrc = 0.         CLEAR lt_do_temp.         CONTINUE.       ENDIF.       "收货       PERFORM goodsmvt_create_outbound_do TABLES lt_do_temp et_return                                         CHANGING lv_exec_flg.       PERFORM edit_log TABLES lt_do_temp                               et_return                               et_/sc1/mm_migo_log.       CLEAR lt_do_temp.     ENDIF.   ENDLOOP. ENDFORM.                    " ACTION_INBOUND_DO *&---------------------------------------------------------------------* *&      Form  GR_INBOUND_DO *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_DO_TEMP  text *----------------------------------------------------------------------* FORM inbound_do_update   TABLES pt_inbound_do STRUCTURE /sc1/s_wis_input                                  et_return STRUCTURE /sc1/ftd_mm_bapiret                          CHANGING pv_exec_flg      TYPE c.  .   "BAPI_INB_DELIVERY_CHANGE 用变量 begin   DATA:ls_header_data TYPE bapiibdlvhdrchg.   DATA:ls_header_control TYPE bapiibdlvhdrctrlchg.   DATA:ls_delivery TYPE bapiibdlvhdrchg-deliv_numb.   DATA:lt_return  LIKE TABLE OF bapiret2 WITH HEADER LINE.   DATA:ls_return  LIKE bapiret2 .   DATA:ls_item_data TYPE bapiibdlvitemchg,        lt_item_data TYPE STANDARD TABLE OF bapiibdlvitemchg.   DATA:ls_item_control TYPE bapiibdlvitemctrlchg,        lt_item_control TYPE STANDARD TABLE OF bapiibdlvitemctrlchg.   "BAPI_INB_DELIVERY_CHANGE 用变量 end   DATA: lt_lips TYPE STANDARD TABLE OF lips,         ls_lips TYPE lips,         ls_inbound_do TYPE /sc1/s_wis_input,         ls_do   TYPE /sc1/s_wis_input,         lv_end_flg TYPE char1,         lv_msg     TYPE char255,         ls_et_return TYPE /sc1/ftd_mm_bapiret,         lt_inbound_do_temp TYPE STANDARD TABLE OF /sc1/s_wis_input,         ls_inbound_do_temp TYPE /sc1/s_wis_input.   CHECK pv_exec_flg IS  INITIAL.   LOOP AT pt_inbound_do INTO ls_inbound_do.     ls_inbound_do_temp-vbeln = ls_inbound_do-vbeln.     ls_inbound_do_temp-posnr = ls_inbound_do-posnr.     ls_inbound_do_temp-lfimg = ls_inbound_do-lfimg.     COLLECT ls_inbound_do_temp INTO lt_inbound_do_temp.   ENDLOOP.   READ TABLE pt_inbound_do INTO ls_inbound_do INDEX 1.   SELECT * FROM lips     INTO CORRESPONDING FIELDS OF TABLE lt_lips     WHERE vbeln = ls_inbound_do-vbeln.   "1.比较订单行项目数和传入信息一致(接口传入行项目3条,订单4条,修改内向交货的行项目为3条(删除未传入的行项目))   "2.比较行项目数量,同理(数量以接口传入数量为主)   LOOP AT lt_lips INTO ls_lips .     READ TABLE lt_inbound_do_temp INTO ls_inbound_do_temp WITH KEY vbeln = ls_lips-vbeln                                                          posnr = ls_lips-posnr .     IF sy-subrc = 0.       IF ls_lips-lfimg <> ls_inbound_do_temp-lfimg.         CLEAR ls_item_data.         ls_item_data-deliv_numb           =  ls_lips-vbeln. "被拆分DN号         ls_item_data-deliv_item           =  ls_lips-posnr.        "被拆分DN Item         ls_item_data-material             =  ls_lips-matnr.        "物料         ls_item_data-dlv_qty              =  ls_inbound_do_temp-lfimg.  "交货数量,         ls_item_data-dlv_qty_imunit       =  ls_inbound_do_temp-lfimg.         ls_item_data-sales_unit           =  ls_lips-vrkme.        "被拆分DN销售单位         ls_item_data-sales_unit_iso       =  ls_lips-meins.        "被拆分DN基本单位         ls_item_data-fact_unit_nom        =  ls_lips-umvkz.        "销售数量转换成SKU的分子(因子)         ls_item_data-fact_unit_denom      =  ls_lips-umvkn.        "销售数量转换为 SKU 的值(分母)         APPEND ls_item_data TO lt_item_data.         CLEAR ls_item_control.         ls_item_control-deliv_numb        = ls_lips-vbeln.         "被拆分DN号         ls_item_control-deliv_item        = ls_lips-posnr.         "被拆分DN Item         ls_item_control-chg_delqty        = 'X'.                   "数量修改标志         APPEND ls_item_control TO lt_item_control.       ENDIF.     ELSE."如果没有找到对应的行项目,则删除操作       CLEAR:ls_item_data.       ls_item_data-deliv_numb      = ls_lips-vbeln.       ls_item_data-deliv_item      = ls_lips-posnr.       ls_item_data-material        = ls_lips-matnr.       ls_item_data-batch           = ls_lips-charg.       ls_item_data-dlv_qty         = ls_lips-lfimg.       ls_item_data-dlv_qty_imunit  = '0'.       ls_item_data-hieraritem      = ls_lips-posnr.       ls_item_data-usehieritm      = 1.       ls_item_data-fact_unit_nom   = ls_lips-umvkz.       ls_item_data-fact_unit_denom = ls_lips-umvkn.       ls_item_data-base_uom        = ls_lips-meins.       ls_item_data-sales_unit      = ls_lips-vrkme.       APPEND ls_item_data TO lt_item_data.       CLEAR ls_item_data.       ls_item_control-deliv_numb = ls_lips-vbeln.       ls_item_control-deliv_item = ls_lips-posnr.       ls_item_control-del_item   = 'X'.       APPEND ls_item_control TO lt_item_control.     ENDIF.   ENDLOOP.   IF lt_item_data IS NOT INITIAL.     DATA: ls_techn_control TYPE bapidlvcontrol.     ls_header_data-deliv_numb       = ls_inbound_do-vbeln.     ls_header_control-deliv_numb    = ls_inbound_do-vbeln.     ls_delivery                     = ls_inbound_do-vbeln.     ls_techn_control-upd_ind        = 'U'.     CALL FUNCTION 'BAPI_INB_DELIVERY_CHANGE'       EXPORTING         header_data    = ls_header_data         header_control = ls_header_control         delivery       = ls_delivery         techn_control  = ls_techn_control       TABLES         item_data      = lt_item_data         item_control   = lt_item_control         return         = lt_return.     READ TABLE lt_return INTO ls_return WITH KEY  type  = 'E' .     IF sy-subrc = 0.       CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .       LOOP AT lt_return INTO ls_return WHERE type  = 'E'.         CALL FUNCTION 'MESSAGE_TEXT_BUILD'           EXPORTING             msgid               = sy-msgid             msgnr               = sy-msgno             msgv1               = sy-msgv1             msgv2               = sy-msgv2             msgv3               = sy-msgv3             msgv4               = sy-msgv4           IMPORTING             message_text_output = lv_msg.         CLEAR ls_et_return.       ENDLOOP.       ls_et_return-message = '交货单'&& ls_lips-vbeln && lv_msg.       ls_et_return-type = 'E'.       ls_et_return-uuid = ls_inbound_do-uuid.       APPEND ls_et_return TO lt_return.     ELSE.       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'         EXPORTING           wait = 'X'.     ENDIF.   ENDIF. ENDFORM.                    " GR_INBOUND_DO *&---------------------------------------------------------------------* *&      Form  ACTION_TL *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_OUTBOUND_DO  text *      -->P_ET_RETURN  text *----------------------------------------------------------------------* FORM action_tl  TABLES pt_tl STRUCTURE /sc1/s_wis_input                           et_return STRUCTURE /sc1/ftd_mm_bapiret                         et_/sc1/mm_migo_log STRUCTURE /sc1/mm_migo_log.                    .   "BAPI_GOODSMVT_CREATE 用内表 begin   DATA lv_mblnr            TYPE mseg-mblnr.   DATA ls_goodsmvt_header  TYPE bapi2017_gm_head_01.   DATA ls_code             LIKE  bapi2017_gm_code.   DATA ls_goodsmvt_item    TYPE bapi2017_gm_item_create.   DATA lt_goodsmvt_item    TYPE STANDARD TABLE OF  bapi2017_gm_item_create.   DATA lt_return           TYPE STANDARD TABLE OF bapiret2.   DATA ls_return           TYPE bapiret2.   "BAPI_GOODSMVT_CREATE 用内表 end   DATA: ls_tl              TYPE /sc1/s_wis_input.   DATA: ls_et_return       TYPE /sc1/ftd_mm_bapiret.   CHECK pt_tl[] IS NOT INITIAL.   READ TABLE et_return with KEY type = 'E' TRANSPORTING NO FIELDS .   CHECK sy-subrc <> 0.   LOOP AT pt_tl INTO ls_tl.     CLEAR ls_goodsmvt_item.     ls_goodsmvt_item-material  = ls_tl-matnr.     ls_goodsmvt_item-move_type =  '501'.    "无采购订单的收货     ls_goodsmvt_item-mvt_ind   = ''.        "移动标识     ls_goodsmvt_item-entry_qnt = ls_tl-lfimg.     ls_goodsmvt_item-entry_uom = ls_tl-meins.     ls_goodsmvt_item-plant     = ls_tl-werks.     ls_goodsmvt_item-stge_loc  = ls_tl-lgort.     ls_goodsmvt_item-batch     = ls_tl-charg.     ls_goodsmvt_item-prod_date = ls_tl-hsdat."生产日期     ls_goodsmvt_item-expirydate = ls_tl-vfdat."货架寿命到期日     ls_goodsmvt_item-vendrbatch = ls_tl-licha."供应商批次     ls_goodsmvt_item-stck_type  = ls_tl-insmk.     IF ls_goodsmvt_item-entry_qnt IS NOT INITIAL.       APPEND ls_goodsmvt_item TO lt_goodsmvt_item.     ENDIF.   ENDLOOP.   ls_goodsmvt_header-pstng_date  = ls_tl-wadat_ist."凭证中的过帐日期   ls_goodsmvt_header-doc_date    = sy-datum."凭证中的凭证日期   ls_goodsmvt_header-pr_uname    = sy-uname.    "用户名   ls_code-gm_code                = '05'.  "其他   CALL FUNCTION 'BAPI_GOODSMVT_CREATE'     EXPORTING       goodsmvt_header  = ls_goodsmvt_header       goodsmvt_code    = ls_code     IMPORTING       materialdocument = lv_mblnr     TABLES       goodsmvt_item    = lt_goodsmvt_item       return           = lt_return.   READ TABLE lt_return WITH KEY  type = 'E' INTO ls_return.   IF  sy-subrc = 0.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .     ls_et_return-uuid = ls_tl-uuid.     ls_et_return-type = 'E'.     LOOP AT lt_return INTO ls_return WHERE type = 'E' .       CONCATENATE ls_et_return-message ls_return-message '|' INTO ls_et_return-message.     ENDLOOP.   ELSE.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'       EXPORTING         wait = 'X'.     ls_et_return-uuid = ls_tl-uuid.     ls_et_return-type = 'S'.     ls_et_return-message = ls_tl-vbeln && '收货成功'.   ENDIF.   APPEND ls_et_return TO et_return.   PERFORM edit_log TABLES pt_tl                           et_return                           et_/sc1/mm_migo_log. ENDFORM.                    " ACTION_TL *&---------------------------------------------------------------------* *&      Form  INBOUND_DO_PICKING *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_DO_TEMP  text *      -->P_ET_RETURN  text *      -->P_ENDIF  text *----------------------------------------------------------------------* FORM do_picking  TABLES pt_inbound_do STRUCTURE /sc1/s_wis_input                             et_return STRUCTURE /sc1/ftd_mm_bapiret                             CHANGING pv_exec_flg      TYPE c.  .   "BAPI用变量 begin   DATA: lt_vbpok    TYPE TABLE OF vbpok,         ls_vbpok    TYPE vbpok,         lt_prott    TYPE TABLE OF prott,         ls_prott    TYPE prott,         ls_vbkok    TYPE vbkok.   "BAPI用变量 end   DATA: lt_lips       TYPE STANDARD TABLE OF lips,         ls_lips       TYPE lips,         ls_inbound_do TYPE /sc1/s_wis_input,         lv_msg        TYPE char255,         ls_et_return  TYPE /sc1/ftd_mm_bapiret.   CHECK pv_exec_flg IS  INITIAL.   READ TABLE pt_inbound_do INTO ls_inbound_do INDEX 1.   SELECT * FROM lips     INTO CORRESPONDING FIELDS OF TABLE lt_lips     WHERE vbeln = ls_inbound_do-vbeln.   LOOP AT lt_lips INTO ls_lips.     ls_vbpok-vbeln_vl = ls_lips-vbeln.     ls_vbpok-posnr_vl = ls_lips-posnr.     ls_vbpok-vbeln    = ls_lips-vgbel.     ls_vbpok-posnn    = ls_lips-vgpos.     ls_vbpok-meins    = ls_lips-meins.     ls_vbpok-vrkme    = ls_lips-vrkme.     ls_vbpok-pikmg    = ls_lips-lfimg.     ls_vbpok-ndifm    = 0.     ls_vbpok-brgew    = ls_lips-brgew.     ls_vbpok-gewei    = ls_lips-gewei.     ls_vbpok-volum    = ls_lips-volum.     ls_vbpok-voleh    = ls_lips-voleh.     ls_vbpok-charg    = ls_lips-charg.     ls_vbpok-matnr    = ls_lips-matnr.     ls_vbpok-orpos    = 0.     APPEND ls_vbpok TO lt_vbpok.     CLEAR: ls_vbpok.   ENDLOOP.   ls_vbkok-vbeln_vl = ls_inbound_do-vbeln.   CALL FUNCTION 'SD_DELIVERY_UPDATE_PICKING'     EXPORTING       vbkok_wa      = ls_vbkok       synchron      = 'X'     TABLES       vbpok_tab     = lt_vbpok       prot          = lt_prott     EXCEPTIONS       error_message = 1.   LOOP AT lt_prott INTO ls_prott WHERE msgty CA 'EA'.     EXIT.   ENDLOOP.   IF sy-subrc <> 0.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'       EXPORTING         wait = 'X'.   ELSE.     pv_exec_flg = 'E'.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.     CALL FUNCTION 'FORMAT_MESSAGE'       EXPORTING         id        = ls_prott-msgid         no        = ls_prott-msgno         v1        = ls_prott-msgv1         v2        = ls_prott-msgv2         v3        = ls_prott-msgv3         v4        = ls_prott-msgv4       IMPORTING         msg       = lv_msg       EXCEPTIONS         not_found = 1         OTHERS    = 2.     ls_et_return-uuid    = ls_inbound_do-uuid.     ls_et_return-type    = 'E'.     ls_et_return-message = lv_msg.     APPEND ls_et_return TO et_return.   ENDIF. ENDFORM.                    " INBOUND_DO_PICKING *&---------------------------------------------------------------------* *&      Form  INBOUND_DO_CONFIRM *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_DO_TEMP  text *      -->P_ET_RETURN  text *      <--P_LV_EXEC_FLG  text *----------------------------------------------------------------------* FORM inbound_do_confirm  TABLES pt_inbound_do STRUCTURE /sc1/s_wis_input                                  et_return STRUCTURE /sc1/ftd_mm_bapiret                         CHANGING pv_exec_flg      TYPE c.   "bapi 用变量---begin   DATA: ls_header_data      TYPE bapiibdlvhdrcon,         ls_header_control   TYPE bapiibdlvhdrctrlcon,         lw_delivery         TYPE bapiobdlvhdrcon-deliv_numb,         lt_return           TYPE TABLE OF bapiret2 ,         ls_return           TYPE bapiret2.   "bapi 用变量---end   DATA: ls_inbound_do TYPE /sc1/s_wis_input,         ls_et_return  TYPE /sc1/ftd_mm_bapiret,          lv_msg       TYPE char255.   CHECK pv_exec_flg IS INITIAL.   READ TABLE pt_inbound_do INTO ls_inbound_do INDEX 1.   ls_header_data-deliv_numb     = ls_inbound_do-vbeln."交货单号.   ls_header_control-deliv_numb  = ls_inbound_do-vbeln."交货单号.   ls_header_control-post_gi_flg = 'X'   .   lw_delivery                   = ls_inbound_do-vbeln."交货单号.   CALL FUNCTION 'BAPI_INB_DELIVERY_CONFIRM_DEC'     EXPORTING       header_data    = ls_header_data       header_control = ls_header_control       delivery       = lw_delivery     TABLES       return         = lt_return.   LOOP AT lt_return INTO ls_return WHERE type CA 'EA'.     EXIT.   ENDLOOP.   IF sy-subrc <> 0.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'       EXPORTING         wait = 'X'.     ls_et_return-uuid    = ls_inbound_do-uuid.     ls_et_return-type    = 'S'.     ls_et_return-message = '收货成功'.     APPEND ls_et_return TO et_return.   ELSE.     pv_exec_flg = 'E'.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.     CALL FUNCTION 'FORMAT_MESSAGE'       EXPORTING         id        = ls_return-id         no        = ls_return-number         v1        = ls_return-message_v1         v2        = ls_return-message_v2         v3        = ls_return-message_v3         v4        = ls_return-message_v4       IMPORTING         msg       = lv_msg       EXCEPTIONS         not_found = 1         OTHERS    = 2.     ls_et_return-uuid    = ls_inbound_do-uuid.     ls_et_return-type    = 'E'.     ls_et_return-message = lv_msg.     APPEND ls_et_return TO et_return.   ENDIF. ENDFORM.                    " INBOUND_DO_CONFIRM *&---------------------------------------------------------------------* *&      Form  INBOUND_DO_CONFIRM *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_DO_TEMP  text *      -->P_ET_RETURN  text *      <--P_LV_EXEC_FLG  text *----------------------------------------------------------------------* FORM outbound_do_confirm  TABLES pt_inbound_do STRUCTURE /sc1/s_wis_input                                  et_return STRUCTURE /sc1/ftd_mm_bapiret                         CHANGING pv_exec_flg      TYPE c.   "bapi 用变量---begin   DATA: ls_header_data      TYPE bapiobdlvhdrcon,         ls_header_control   TYPE bapiobdlvhdrctrlcon,         lw_delivery         TYPE bapiobdlvhdrcon-deliv_numb,         lt_return           TYPE TABLE OF bapiret2 ,         ls_return           TYPE bapiret2.   "bapi 用变量---end   DATA: ls_inbound_do TYPE /sc1/s_wis_input,         ls_et_return  TYPE /sc1/ftd_mm_bapiret,          lv_msg       TYPE char255.   CHECK pv_exec_flg IS INITIAL.   READ TABLE pt_inbound_do INTO ls_inbound_do INDEX 1.   ls_header_data-deliv_numb     = ls_inbound_do-vbeln."交货单号.   ls_header_control-deliv_numb  = ls_inbound_do-vbeln."交货单号.   ls_header_control-post_gi_flg = 'X'   .   lw_delivery                   = ls_inbound_do-vbeln."交货单号.   CALL FUNCTION 'BAPI_OUTB_DELIVERY_CONFIRM_DEC'     EXPORTING       header_data    = ls_header_data       header_control = ls_header_control       delivery       = lw_delivery     TABLES       return         = lt_return.   LOOP AT lt_return INTO ls_return WHERE type CA 'EA'.     EXIT.   ENDLOOP.   IF sy-subrc <> 0.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'       EXPORTING         wait = 'X'.     ls_et_return-uuid    = ls_inbound_do-uuid.     ls_et_return-type    = 'S'.     ls_et_return-message = '收货成功'.     APPEND ls_et_return TO et_return.   ELSE.     pv_exec_flg = 'E'.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.     CALL FUNCTION 'FORMAT_MESSAGE'       EXPORTING         id        = ls_return-id         no        = ls_return-number         v1        = ls_return-message_v1         v2        = ls_return-message_v2         v3        = ls_return-message_v3         v4        = ls_return-message_v4       IMPORTING         msg       = lv_msg       EXCEPTIONS         not_found = 1         OTHERS    = 2.     ls_et_return-uuid    = ls_inbound_do-uuid.     ls_et_return-type    = 'E'.     ls_et_return-message = lv_msg.     APPEND ls_et_return TO et_return.   ENDIF. ENDFORM.                    " INBOUND_DO_CONFIRM *&---------------------------------------------------------------------* *&      Form  SPLIT_DATA *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_IT_INPUT  text *      -->P_LT_PO  text *      -->P_LT_INBOUND_DO  text *      -->P_LT_OUTBOUND_DO  text *      -->P_LT_TL  text *----------------------------------------------------------------------* FORM split_data  TABLES   pt_input      STRUCTURE /sc1/s_wis_input                           pt_po          STRUCTURE /sc1/s_wis_input                           pt_inbound_do  STRUCTURE /sc1/s_wis_input                           pt_outbound_do STRUCTURE /sc1/s_wis_input                           pt_tl          STRUCTURE /sc1/s_wis_input                           pt_ekpo        TYPE ty_t_ekpo.   DATA: ls_input       TYPE /sc1/s_wis_input,         lv_new_flg     TYPE char1,         lv_action      TYPE char15,         lv_matkl       TYPE mara-matkl,         lt_/sc1/mm_migo_log TYPE STANDARD TABLE OF /sc1/mm_migo_log,         ls_/sc1/mm_migo_log TYPE /sc1/mm_migo_log.   FIELD-SYMBOLS: <ls_input> TYPE /sc1/s_wis_input.   "检查此次需要收货是否有已经处理完成的数据,已完成数据不再处理   IF pt_input[] IS NOT INITIAL.     SELECT * FROM  /sc1/mm_migo_log INTO TABLE lt_/sc1/mm_migo_log       FOR ALL ENTRIES IN pt_input       WHERE uuid = pt_input-uuid.   ENDIF.   SORT pt_input BY action vbeln posnr.   LOOP AT pt_input ASSIGNING <ls_input>.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'       EXPORTING         input  = <ls_input>-vbeln       IMPORTING         output = <ls_input>-vbeln.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'       EXPORTING         input  = <ls_input>-posnr       IMPORTING         output = <ls_input>-posnr.     CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'       EXPORTING         input        = <ls_input>-matnr       IMPORTING         output       = <ls_input>-matnr       EXCEPTIONS         length_error = 1         OTHERS       = 2.   ENDLOOP.   LOOP AT pt_input INTO ls_input.     AT NEW vbeln.       lv_new_flg = 'X'.     ENDAT.     IF lv_new_flg = 'X'.       CLEAR:lv_new_flg.       IF ls_input-action = '1'.         SELECT *           FROM ekpo           APPENDING CORRESPONDING FIELDS OF TABLE pt_ekpo           WHERE ebeln = ls_input-vbeln.         IF sy-subrc = 0.           lv_action = 'PO'.         ELSE.           lv_action = 'INBOUND_DO'.         ENDIF.       ELSEIF ls_input-action = '2'.         lv_action = 'OUTBOUND_DO'.       ENDIF.     ENDIF.     "检查此次需要收货是否有已经处理完成的数据,已完成数据不再处理     READ TABLE lt_/sc1/mm_migo_log INTO ls_/sc1/mm_migo_log with KEY uuid = ls_input-uuid.     IF sy-subrc = 0.       CONTINUE.     ENDIF.     SELECT SINGLE matkl FROM mara INTO lv_matkl       WHERE matnr = ls_input-matnr         AND matkl = 'YS000013'."铁笼     IF sy-subrc = 0.       APPEND ls_input TO pt_tl.       CONTINUE.     ENDIF.     CASE lv_action.       WHEN 'PO'.         APPEND ls_input TO pt_po.       WHEN 'INBOUND_DO'.         APPEND ls_input TO pt_inbound_do.       WHEN 'OUTBOUND_DO'.         APPEND ls_input TO pt_outbound_do.       WHEN OTHERS.     ENDCASE.   ENDLOOP. ENDFORM.                    " SPLIT_DATA *&---------------------------------------------------------------------* *&      Form  INBOUND_DO_BATCH_SPLIT *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *      -->P_LT_DO_TEMP  text *      -->P_ET_RETURN  text *      <--P_LV_EXEC_FLG  text *----------------------------------------------------------------------* FORM inbound_do_batch_split TABLES pt_inbound_do STRUCTURE /sc1/s_wis_input                                  et_return STRUCTURE /sc1/ftd_mm_bapiret                          CHANGING pv_exec_flg      TYPE c.  .   "bapi用变量begin   DATA: ls_header_data     TYPE bapiobdlvhdrchg, "Delivery header         ls_header_control  TYPE bapiobdlvhdrctrlchg, "delivery header control         lt_item_data       TYPE STANDARD TABLE OF  bapiobdlvitemchg,         ls_item_data       TYPE  bapiobdlvitemchg,         lt_item_control    TYPE STANDARD TABLE OF bapiobdlvitemctrlchg,         ls_item_control    TYPE bapiobdlvitemctrlchg,         lt_item_data_spl   TYPE STANDARD TABLE OF /spe/bapiobdlvitemchg,         ls_item_data_spl   TYPE /spe/bapiobdlvitemchg,         ls_techn_control   TYPE bapidlvcontrol,         lt_return          TYPE STANDARD TABLE OF bapiret2,         ls_return          type bapiret2.   DATA: lv_message         TYPE c LENGTH 220.   "bapi用变量end   DATA: ls_inbound_do TYPE /sc1/s_wis_input,         lt_lips            TYPE STANDARD TABLE OF lips,         ls_lips            TYPE lips,         ls_et_teturn       TYPE /sc1/ftd_mm_bapiret,         lv_vbeln_batch     TYPE lips-vbeln..   READ TABLE pt_inbound_do INTO ls_inbound_do INDEX 1.   SELECT *     FROM lips     INTO TABLE lt_lips    WHERE vbeln = ls_inbound_do-vbeln.   lv_vbeln_batch = '900000'.   LOOP AT pt_inbound_do INTO ls_inbound_do.     READ TABLE lt_lips INTO ls_lips WITH KEY vbeln = ls_inbound_do-vbeln                                              posnr = ls_inbound_do-posnr.     "批次拆分出来的新行     CLEAR: ls_item_data.     lv_vbeln_batch = lv_vbeln_batch + 1.     ls_item_data-deliv_numb = ls_inbound_do-vbeln..     ls_item_data-deliv_item =  lv_vbeln_batch.     ls_item_data-hieraritem = ls_inbound_do-posnr.        "项目层次中的高级项目-批次拆分字段     ls_item_data-usehieritm = '1'.                        "使用层次项目-批次拆分字段     ls_item_data-material   = ls_inbound_do-matnr.     ls_item_data-batch      = ls_inbound_do-charg.     ls_item_data-dlv_qty    = ls_inbound_do-lfimg.     ls_item_data-fact_unit_nom   = ls_lips-umvkz.     ls_item_data-fact_unit_denom = ls_lips-umvkn.     APPEND ls_item_data TO lt_item_data.     "批次拆分出来的新行     CLEAR: ls_item_control.     ls_item_control-deliv_numb = ls_inbound_do-vbeln.     ls_item_control-deliv_item = lv_vbeln_batch.     ls_item_control-chg_delqty = 'X'.     APPEND ls_item_control TO lt_item_control.     CLEAR: ls_item_control.     ls_item_data_spl-deliv_numb = ls_inbound_do-vbeln.     ls_item_data_spl-deliv_item = lv_vbeln_batch.     ls_item_data_spl-stge_loc   = ls_inbound_do-lgort."库存地点     APPEND ls_item_data_spl TO lt_item_data_spl.   ENDLOOP.   ls_header_data-deliv_numb    = ls_inbound_do-vbeln.   ls_header_control-deliv_numb = ls_inbound_do-vbeln.   ls_techn_control-upd_ind     = 'U'.   CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'     EXPORTING       header_data    = ls_header_data       header_control = ls_header_control       delivery       = ls_inbound_do-vbeln       techn_control  = ls_techn_control     TABLES       item_data      = lt_item_data       item_control   = lt_item_control       item_data_spl  = lt_item_data_spl       return         = lt_return.   LOOP AT lt_return INTO ls_return WHERE type CA 'EA'.     EXIT.   ENDLOOP.   IF sy-subrc <> 0.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'       EXPORTING         wait = 'X'.   "更改库存地点   CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'     EXPORTING       header_data    = ls_header_data       header_control = ls_header_control       delivery       = ls_inbound_do-vbeln       techn_control  = ls_techn_control     TABLES       item_data      = lt_item_data       item_control   = lt_item_control       item_data_spl  = lt_item_data_spl       return         = lt_return.   ELSE.     pv_exec_flg = 'E'.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.     CALL FUNCTION 'FORMAT_MESSAGE'       EXPORTING         id        = ls_return-id         no        = ls_return-number         v1        = ls_return-message_v1         v2        = ls_return-message_v2         v3        = ls_return-message_v3         v4        = ls_return-message_v4       IMPORTING         msg       = lv_message       EXCEPTIONS         not_found = 1         OTHERS    = 2.     ls_et_teturn-uuid = ls_inbound_do-uuid.     ls_et_teturn-type = 'E'.     ls_et_teturn-message = lv_message.     APPEND ls_et_teturn TO et_return.   ENDIF. ENDFORM.                    " INBOUND_DO_BATCH_SPLIT 帮我分析一下,让你写出这样的代码,你作为顾问应该提怎么样的需求,总结一下

大家在看

recommend-type

doPDF10软件,pdf虚拟打印机

doPDF10,pdf虚拟打印机,word,cad转pdf,虚拟打印转格式
recommend-type

服务器选项与性能估算.pdf

系统部署方案 - 2 - 前 言 1 系统部署方式 1.1 标准方案 现在 IT 的发展趋势是数据集中,数据集中的核心是对服务器进行整合。特 别是一些大型企业,建立企业数据中心,购买高性能的主机,对数据集中管理, 已成为一种潮流。金蝶 EAS 服务器的部署方式推荐集中式。 金蝶 EAS 支持多层架构,客户端既可通过 TCP 连接服务器,也可以通过 标准的 HTTP 协议连接服务器。应用服务器与数据库服务器可以物理上安装在 一台服务器上,基于性能考虑,一般是分开在两台不同的硬件服务器上,也可 以安装在多台服务器集群之中。 1.2 双机互备方案 采用双机互备的部署方式,主要是解决系统的可靠性问题,其中一台服务器出 现故障,另一台就承担应用服务器和数据库服务器的全部任务。 - 3 - 应用服务器与数据服务器通过心跳线连接,互为备份。 1.3 应用级集群部署方案 应用服务器集群主要是解决在大规模并发处理情况下单机以及单实例的性能瓶 颈问题,以及满足客户对系统高可靠性的要求,EAS 实现了一种应用服务器无 关的高可用集群。 由于数据库服务器的集群是采用 Oracle 或 DB2 的系统集群技 术
recommend-type

KISSsoft全实例中文教程

本教程一共361页,是一本十分完整的教程。同时其内容也非常丰富,包含各种齿轮的分析计算方法以及出各种数据报告等等。KISSsoft是一款专业的齿轮分析软件,对需要的人有极大帮助!
recommend-type

开心小闹钟 V2.8 Beta 3 注册版

开心小闹钟 V2.8 Beta 3 注册版 个人觉得这款电脑闹钟是我用过最好的一个闹钟软件 最牛X的是你可以任意修改它的界面 已经注册好了 不用麻烦了
recommend-type

ipmitool v1.8.18 for windows

服务器BMC访问控制工具,windows版,自己编译的,用着还不错。基于github最新版1.8.18编译。

最新推荐

recommend-type

电力电子领域Boost单闭环仿真模型对电压阶跃变化与负载突变的稳定控制研究 电力电子 最新版

Boost单闭环仿真模型在电力电子领域的应用,特别是在目标输出电压阶跃变化和负载突变这两种极端工况下的稳定闭环控制效果。首先简述了Boost单闭环仿真模型的基本构造及其工作原理,接着深入探讨了在不同条件下(如电压阶跃变化和负载突变)如何利用闭环控制系统实现快速响应和平稳过渡。文中还提出了几种提升系统稳定性的方法,包括优化控制系统设计、引入误差调节和补偿机制、合理配置参数以及增强抗干扰能力。最后强调了该模型的重要性和潜在的应用前景。 适合人群:从事电力电子相关工作的工程师和技术人员,尤其是关注电源转换效率和稳定性的专业人士。 使用场景及目标:适用于需要评估或改进现有电源管理系统稳定性的场合,旨在帮助技术人员理解和掌握Boost单闭环仿真模型的工作机理,从而更好地应对实际工程中的挑战。 其他说明:随着电力电子技术的进步,Boost单闭环仿真模型有望在未来发挥更大的作用,推动工业生产和技术革新。
recommend-type

破解dex2jar: Android应用反编译与分析指南

标题中的“dex2jar”指的是一个用于将Android应用程序中的DEX文件(Dalvik可执行文件)转换成Java JAR文件的工具。这个过程被称为“DEX转JAR”,是一个逆向工程的过程,它允许开发者查看和分析Android应用程序的原始Java代码,这通常用于学习、测试和安全分析目的。破解一词在此上下文中可能用于描述不正当手段获取程序的源代码以进行修改或绕过安全机制等行为,但请注意,任何未经授权的修改和使用都可能违反法律和版权。 描述部分提供了使用dex2jar工具的基本步骤。dex2jar通常是一个批处理文件(dex2jar.bat),用于在Windows环境下执行操作。它将DEX文件(classes.dex)作为输入,并生成对应的JAR文件。这个过程需要用户已经下载并解压了dex2jar的压缩包,并将其中的dex2jar.bat文件放在一个可以访问的目录中。然后,用户需要将目标Android应用程序中的classes.dex文件复制到该目录下,并在命令行界面中运行以下命令: dex2jar.bat classes.dex 执行完毕后,会在同一目录下生成名为classes.dex.dex2jar.jar的文件。这个JAR文件实质上是将DEX文件中的类转换成了Java的.class文件,并打包成了JAR格式,供后续的分析或修改使用。 【标签】中的“Android 破解”可能被误解为破解Android应用程序的安全机制,实际上,这个标签更准确的意义是分析和理解Android应用程序的工作原理。而“jar dex”则是指JAR文件与DEX文件之间的转换关系。 【压缩包子文件的文件名称列表】中列举了几个文件名,其中“使用说明.txt”很可能是该工具的官方使用指南,提供更详细的使用说明、安装步骤和常见问题的解答。“dex2jar最新版下载dex2jar下载 2.0官方版_ - pc6下载站.url”则是一个指向PC6下载站上dex2jar工具下载页面的网页链接。“dex2jar-2.0”可能是指特定版本号的dex2jar工具压缩包。 总结以上信息,dex2jar是一个专门用于Android应用安全分析和逆向工程的工具,它将DEX文件转换成Java的JAR文件以便进行代码的查看和分析。尽管这个过程在安全研究和教育目的下是合法且有价值的,但任何使用这一工具的非法破解、侵犯版权或进行恶意行为都是不可接受的。
recommend-type

共享内存与共识算法详解

### 共享内存与共识算法详解 在分布式系统中,共享内存和共识算法是两个核心的概念。共享内存涉及到多个进程对同一数据的读写操作,而共识算法则帮助多个进程在可能存在故障的情况下达成一致的决策。下面将详细介绍这两个方面的相关知识。 #### 共享内存 共享内存的寄存器规范由Lamport在多篇论文中引入,同时定义了安全、规则和原子三种语义。 - **安全寄存器**:在三种寄存器语义中,安全寄存器提供的保证最弱。当读操作与写操作并发时,安全寄存器可能返回任意值,甚至可能是从未被写入或尝试写入的值。在多处理器机器中,进程可能并发访问实现寄存器抽象的底层硬件位置,从而导致返回任意值。在任意故障模型中
recommend-type

计算机专业本科生和研究生就业薪资待遇

<think>好的,我需要回答用户关于计算机专业本科和研究生就业薪资对比的问题。首先,我得先看看用户提供的引用资料,看看里面有没有相关的数据。 引用[4]提到,2019届计算机类本科毕业生的平均月收入是6858元,而高职是4883元。这应该可以作为本科生的参考数据。至于研究生,引用[1]指出重庆大学的计算机和软件硕士就业情况良好,薪资高于行业平均水平,但没有具体数字。不过引用[3]提到,前20名的高校多为985/211,尤其是理工类院校的毕业生薪资更高。这里可能需要结合其他信息来推断研究生的薪资水平。 另外,引用[2]提到计算机专业毕业生薪资一般在万元以上,但不确定这是否特指研究生还是包括
recommend-type

eWebEditor 10.3最新版特性与安全升级指南

从提供的信息来看,我们需要深入了解和探讨的内容主要集中在“eWebEditor最新版”这一主题上。eWebEditor是一款流行的在线HTML编辑器,它支持ASP和ASP.NET环境,并广泛用于Web内容管理。通过给出的标题和描述,以及标签和文件名称列表,我们可以推导出一系列相关的知识点。 ### 标题知识点解析 #### eWebEditor的定义与功能 “eWebEditor最新版”中提到的“eWebEditor”指的是在线HTML编辑器产品,它被广泛应用于需要在线编辑和发布网页内容的场合。编辑器通常包含许多功能,比如文本格式化、图像插入、链接管理等,提供用户友好和接近桌面程序的编辑体验。eWebEditor产品以ASP和ASP.NET作为其主要的技术平台。 #### “最新版”更新内容 “最新版”表明我们正在讨论的是eWebEditor的最新版本更新,该版本很可能是为了增加新功能、提升性能、修复已知问题或改善安全性能。一般来说,软件的更新也可能会引入对新操作系统或浏览器的兼容性,以及对现有API或开发环境的新支持。 ### 描述知识点解析 #### “亲测可用”的含义 从“亲测 可用”的描述中我们可以推断出,发布者可能已经对“eWebEditor最新版”进行了测试,并验证了其在实际使用中的性能和稳定性。该短语传递出一个积极的信号,即该版本值得信赖,用户可以期待它将正常工作,无需担心兼容性或功能缺失的问题。 ### 标签知识点解析 #### eWebEditor的版本标识 “eWebEditor ASPX 10.3 最新版”中的标签指出我们讨论的版本号为10.3,这是一个具体的产品版本,意味着它可能包含了一些特定的更新或新增特性。通过版本号,我们可以推断产品已经经过了多次迭代和改进。 #### ASPX技术框架 在标签中提到的“ASPX”,这表明eWebEditor最新版支持ASP.NET Web Forms技术,ASPX是ASP.NET网页的标准文件扩展名。这一信息指出编辑器适合使用.NET框架的网站开发环境。 ### 文件名称列表知识点解析 #### “升级说明.txt”文件 “升级说明.txt”是一个文本文件,它可能包含了eWebEditor从上一版本升级到最新版本时的变化说明,例如新增功能、改进的地方以及需要注意的变更。开发者或维护人员在升级时应该仔细阅读这些说明,以便于平滑过渡到新版本,并最大化地利用新功能。 #### “安全说明.txt”文件 “安全说明.txt”文件通常提供了关于软件安全性的相关信息,这可能包括了针对最新版的安全补丁、修复的安全漏洞列表以及安全最佳实践的建议。特别是对于在线编辑器这类直接参与网页内容生成的工具,安全尤为重要,因此,安全说明文件对于确保编辑器和整个网站的安全运行至关重要。 #### “ewebeditor”文件夹或组件 “ewebeditor”可能是实际包含eWebEditor编辑器文件的文件夹名称。通常,这类文件夹内会包含用于前端的JavaScript文件、用于后端处理的服务器端代码(ASP.NET或ASP代码),以及相关的样式文件和资源文件。对于开发者来说,了解这些文件和组件的组织结构对于集成和配置编辑器至关重要。 综合以上信息,我们可以了解到eWebEditor的最新版本更新了很多内容,可能包含性能和安全性的提升,并可能对特定的技术平台如ASP.NET提供了更好的支持。用户应该参考升级和安全说明文件,以便正确理解和应用这些更新。对于开发者而言,掌握如何在项目中部署和配置eWebEditor编辑器也是一个重要的技能点。
recommend-type

分布式系统中的时间抽象与故障处理

### 分布式系统中的时间抽象与故障处理 #### 1. 故障检测概述 在分布式系统中,存在三种不同的系统假设:异步系统假设、同步系统假设和部分同步系统假设。异步系统不包含任何时间假设,我们的进程和链路抽象直接体现了这一点。然而,这些抽象不足以定义同步和部分同步系统。 为了添加时间假设,一种方法是用时间保证来扩展进程和链路抽象,但这会导致规范过于复杂。因此,我们引入了故障检测器的抽象概念,它能提供关于哪些进程崩溃、哪些进程正常的信息,不过这些信息不一定准确。 故障检测器抽象相较于直接对进程和链路做时间假设具有以下两个优势: - 减轻了用时间假设扩展进程和链路抽象的需求,保留了这些抽象的简
recommend-type

我发一份参考课程设计目录

<think>好的,用户之前问过关于高校实验室安排系统的数据库课程设计,现在他需要一份参考的课程设计目录。首先,我需要回顾之前的对话,确保目录结构和他之前的问题相关,并且覆盖他提到的核心需求、ER模型、表结构、业务逻辑等内容。 用户现在要目录,可能是在进行课程设计的结构规划,需要明确的章节安排。我需要考虑课程设计通常包含的部分,比如需求分析、系统设计、数据库设计、实现、测试等。同时,结合之前给出的内容,比如ER图、表结构、冲突检测算法等,确保这些部分在目录中有体现。 还要注意用户可能希望目录足够详细,包含各个关键部分,比如摘要、需求分析、数据库设计(包括概念结构、逻辑结构、物理结构)、系统
recommend-type

惠普AMTBrand深度解析与技术特点

标题和描述中提到的“惠普AMTBrand”,可能是指惠普(Hewlett-Packard,简称HP)公司旗下的AMTBrand相关产品或技术。然而,由于给出的信息非常有限,我们可以先从惠普公司以及AMT(Active Management Technology,主动管理技术)两个方面进行展开。惠普是全球知名的IT企业,提供多种计算机硬件、软件、云服务和解决方案,而AMT是英特尔(Intel)研发的一种硬件级别的远程管理技术。 首先,我们来了解惠普公司: 惠普(Hewlett-Packard Enterprise,简称HPE),是全球领先的信息技术解决方案提供商。成立于1939年,由Bill Hewlett和David Packard在一间车库里创立,如今已经成为全球范围内提供广泛IT产品与服务的企业。惠普的产品和服务包括但不限于个人计算机(PC)、打印设备、工作站、服务器、网络设备、存储解决方案以及软件和服务。 惠普在IT服务管理、云计算、大数据和分析等领域均有涉猎,并为各种规模的企业提供从基础架构到应用管理的全方位解决方案。随着数字化转型的不断深入,惠普也在不断地通过研发新技术和收购相关企业来拓展其产品和服务的范围。 接着,我们探索AMT技术: AMT是英特尔推出的一种基于硬件的管理解决方案,它允许IT部门远程管理企业中的个人计算机和其他设备。AMT是一种集成在商用英特尔处理器中的技术,能够在个人电脑关机或者操作系统失效的情况下,提供网络访问以及硬件级别的远程管理功能。这项技术最初由英特尔在2006年发布,历经数代更新,为IT运维人员提供了众多功能,如远程开机、远程维护、软件部署、系统监控等。 AMT的优势主要体现在以下几个方面: 1. 远程访问:即使目标设备没有开机或操作系统出现故障,AMT也可以实现远程访问和管理。 2. 安全性:它提供比传统软件解决方案更为深入的硬件级别安全机制,确保数据传输的安全。 3. 节约成本:通过减少现场支持的需要,AMT能够帮助公司节约维护成本。 4. 提高效率:快速远程解决问题,从而提高IT部门的工作效率和响应速度。 然而,由于AMT技术基于特定的硬件和软件,这意味着用户需要购买带有AMT功能的英特尔处理器和相应的支持软件,同时可能需要来自惠普或其他OEM厂商的相应硬件。 最后,提到“压缩包子文件的文件名称列表”中的“AMTBrand”,这可能意味着提供或关联惠普AMTBrand技术的文件压缩包。考虑到文件名称的单一性和没有其他文件描述提供进一步信息,不能确定这个压缩包内具体包含哪些内容。不过,可以推测该压缩包内可能包含了介绍惠普AMTBrand技术的文档、演示、驱动程序、更新或管理工具等。 综合来看,文件中提到的“惠普AMTBrand”可能是指惠普公司与英特尔AMT技术结合后形成的产品或服务品牌,旨在为用户提供更为高效和安全的远程管理解决方案。考虑到惠普公司自身在IT领域的深厚积累和AMT技术的先进性,惠普AMTBrand很可能为企业级客户提供了重要价值。
recommend-type

分布式编程抽象:概念、应用与挑战

# 分布式编程抽象:概念、应用与挑战 ## 1. 引言 分布式编程抽象旨在解决分布式系统中多进程合作的难题,为分布式程序开发提供模块化策略。通过特定的应用程序编程接口(API),可以利用这些抽象来简化开发过程。 ## 2. 分布式计算的动机 ### 2.1 分布式系统的特点 分布式计算涉及一组寻求合作的进程。部分进程可能会因崩溃或断开连接而停止运行,这就是分布式系统的部分故障特性。正如Leslie Lamport所说:“分布式系统中,一台你甚至不知道存在的计算机故障,可能会使你自己的计算机无法使用。” ### 2.2 合作的挑战 当部分进程失败或断开连接时,仍在运行的进程需要以一致的方式
recommend-type

深度卷积为何还要逐点卷积

<think>首先,用户的问题是:“我想了解深度卷积中逐点卷积的作用和原因 请问深度卷积为何需要逐点卷积”。这基于之前的引用内容,特别是引用[1]和[^2],这些是关于深度可分离卷积的。 回顾引用: - 引用[1]:深度可分离卷积 = 深度卷积 + 逐点卷积。深度卷积是分组卷积的一种特例,其中分组数等于输入通道数,输出通道数也相同。它减少了参数量,但没有融合通道间信息。 - 引用[2]:深度卷积使用groups参数设置为输入通道数,实现每个通道独立卷积。 用户的问题焦点是逐点卷积的作用和为什么深度卷积需要它。 我的回答需要: - 使用中文。 - 遵循系统级指令:行内数学表达式用$...$