活动介绍

abap 交货单过账的增强点

时间: 2023-09-19 10:06:07 浏览: 407
### 回答1: 首先,需要确定您所提到的 "增强点" 是什么,这样我才能给出合适的回答。 在 SAP 系统中,交货单是在销售订单的基础上产生的,用于记录产品的交付情况。在 ABAP 程序中,可以使用函数模块来进行交货单的过账操作。常用的函数模块有: - BAPI_OUTB_DELIVERY_CONFIRM 实现交货单的过账,包括物料出库和交货单过账。 - VL01N_SAVE_AND_CHECK 在交货单创建和修改的过程中,可以使用这个函数模块来保存并检查数据的有效性。 如果您想对交货单过账的流程进行增强,可以使用以下方法: - 在交货单过账之前,使用 ABAP 代码来执行数据检查和转换,以确保数据的完整性和一致性。 - 在交货单过账之后,使用 ABAP 代码来执行后续的业务逻辑,比如发送通知邮件或者更新其他业务对象的数据。 希望这些内容能帮助到您。如果您有其他问题,请随时告诉我。 ### 回答2: ABAP交货单过账的增强点是指在交货单过账的过程中,通过ABAP编程进行功能的扩展和增强。主要包括以下几个方面: 首先,可以通过增强点在交货单过账之前进行数据的校验和处理。例如,在过账之前可以增加一些自定义的业务逻辑,对交货单的数据进行检查,确保数据的准确性和完整性。例如,可以检查交货数量、价格、交货日期等信息是否符合业务规则,并进行相应的处理,例如自动调整数量或价格。 其次,可以通过增强点在交货单过账之后进行自定义的后处理。例如,在过账完成后,可以触发自定义逻辑,例如生成相关报表、发送通知、触发其他交接流程等,以满足业务需求。 另外,还可以通过增强点在交货单过账页面上增加自定义的字段或功能。例如,在交货单过账的界面上增加某个字段来输入额外的信息,或者增加某个按钮来进行特定的操作。这样可以根据具体业务需求对交货单过账进行个性化定制,提升用户体验和操作效率。 总之,ABAP交货单过账的增强点提供了一种灵活、自定义的方式,通过编程进行交货单过账功能的扩展和增强,在满足业务需求的同时提升系统的灵活性和用户体验。 ### 回答3: ABAP语言是一种在SAP系统中进行编程和开发的语言。在交货单过账功能中,可以通过使用ABAP语言来进行增强。 ABAP交货单过账的增强点包括以下几个方面: 1. 自定义报表:可以使用ABAP语言编写代码,自定义交货单过账后的报表输出。通过对交货单数据的处理和计算,生成符合业务需求的报表格式,提供更精准和实用的数据展示。 2. 增加校验逻辑:借助ABAP语言的强大功能,可以对交货单的数据进行更严格的校验。例如,可以添加代码来验证交货数量是否超过库存数量,或者检查交货日期是否在有效范围内。通过增加校验逻辑,可以避免输入错误或不合规的交货数据被过账,提高数据的准确性和完整性。 3. 业务流程扩展:通过在交货单过账功能中增加ABAP代码,可以对业务流程进行扩展。例如,在交货单过账后自动触发其他相关的处理逻辑,如更新相应的库存信息或生成相应的财务凭证。这样可以实现整个交货流程的自动化和高效化。 4. 输出界面定制:利用ABAP语言的特性,可以定制交货单过账时的输出界面。可以根据具体业务需求,调整界面布局、添加额外的字段或标签,使界面更加符合用户的习惯和实际操作需求。 总之,使用ABAP语言对交货单过账功能进行增强,可以根据具体需求对报表、校验逻辑、业务流程和界面进行定制和扩展,提高功能的灵活性、效率和用户体验。
阅读全文

相关推荐

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

C# Socket通信源码:多连接支持与断线重连功能的物联网解决方案

内容概要:本文介绍了一套基于C#编写的Socket服务器与客户端通信源码,源自商业级物联网项目。这套代码实现了双Socket机制、多连接支持以及断线重连功能,适用于各类C#项目(如MVC、Winform、控制台、Webform)。它通过简单的静态类调用即可获取客户端传输的数据,并内置了接收和发送数据缓冲队列,确保数据传输的稳定性。此外,代码提供了数据读取接口,但不涉及具体的数据处理逻辑。文中详细展示了服务端和客户端的基本配置与使用方法,强调了在实际应用中需要注意的问题,如避免主线程执行耗时操作以防内存膨胀。 适合人群:具备基本C#编程能力的研发人员,尤其是对Socket通信有一定了解并希望快速集成相关功能到现有项目中的开发者。 使用场景及目标:① 需要在短时间内为C#项目增加稳定的Socket通信功能;② 实现多设备间的数据交换,特别是对于智能家居、工业传感器等物联网应用场景。 其他说明:虽然该代码能够满足大多数中小型项目的通信需求,但对于需要高性能、低延迟的金融级交易系统则不太合适。同时,代码并未采用异步技术,因此在面对海量连接时可能需要进一步优化。
recommend-type

STM32CubeIDE 1.10.1代码自动提示补全功能

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 STM32CubeIDE 1.10.1代码自动提示补全功能
recommend-type

掌握XFireSpring整合技术:HELLOworld原代码使用教程

标题:“xfirespring整合使用原代码”中提到的“xfirespring”是指将XFire和Spring框架进行整合使用。XFire是一个基于SOAP的Web服务框架,而Spring是一个轻量级的Java/Java EE全功能栈的应用程序框架。在Web服务开发中,将XFire与Spring整合能够发挥两者的优势,例如Spring的依赖注入、事务管理等特性,与XFire的简洁的Web服务开发模型相结合。 描述:“xfirespring整合使用HELLOworld原代码”说明了在这个整合过程中实现了一个非常基本的Web服务示例,即“HELLOworld”。这通常意味着创建了一个能够返回"HELLO world"字符串作为响应的Web服务方法。这个简单的例子用来展示如何设置环境、编写服务类、定义Web服务接口以及部署和测试整合后的应用程序。 标签:“xfirespring”表明文档、代码示例或者讨论集中于XFire和Spring的整合技术。 文件列表中的“index.jsp”通常是一个Web应用程序的入口点,它可能用于提供一个用户界面,通过这个界面调用Web服务或者展示Web服务的调用结果。“WEB-INF”是Java Web应用中的一个特殊目录,它存放了应用服务器加载的Servlet类文件和相关的配置文件,例如web.xml。web.xml文件中定义了Web应用程序的配置信息,如Servlet映射、初始化参数、安全约束等。“META-INF”目录包含了元数据信息,这些信息通常由部署工具使用,用于描述应用的元数据,如manifest文件,它记录了归档文件中的包信息以及相关的依赖关系。 整合XFire和Spring框架,具体知识点可以分为以下几个部分: 1. XFire框架概述 XFire是一个开源的Web服务框架,它是基于SOAP协议的,提供了一种简化的方式来创建、部署和调用Web服务。XFire支持多种数据绑定,包括XML、JSON和Java数据对象等。开发人员可以使用注解或者基于XML的配置来定义服务接口和服务实现。 2. Spring框架概述 Spring是一个全面的企业应用开发框架,它提供了丰富的功能,包括但不限于依赖注入、面向切面编程(AOP)、数据访问/集成、消息传递、事务管理等。Spring的核心特性是依赖注入,通过依赖注入能够将应用程序的组件解耦合,从而提高应用程序的灵活性和可测试性。 3. XFire和Spring整合的目的 整合这两个框架的目的是为了利用各自的优势。XFire可以用来创建Web服务,而Spring可以管理这些Web服务的生命周期,提供企业级服务,如事务管理、安全性、数据访问等。整合后,开发者可以享受Spring的依赖注入、事务管理等企业级功能,同时利用XFire的简洁的Web服务开发模型。 4. XFire与Spring整合的基本步骤 整合的基本步骤可能包括添加必要的依赖到项目中,配置Spring的applicationContext.xml,以包括XFire特定的bean配置。比如,需要配置XFire的ServiceExporter和ServicePublisher beans,使得Spring可以管理XFire的Web服务。同时,需要定义服务接口以及服务实现类,并通过注解或者XML配置将其关联起来。 5. Web服务实现示例:“HELLOworld” 实现一个Web服务通常涉及到定义服务接口和服务实现类。服务接口定义了服务的方法,而服务实现类则提供了这些方法的具体实现。在XFire和Spring整合的上下文中,“HELLOworld”示例可能包含一个接口定义,比如`HelloWorldService`,和一个实现类`HelloWorldServiceImpl`,该类有一个`sayHello`方法返回"HELLO world"字符串。 6. 部署和测试 部署Web服务时,需要将应用程序打包成WAR文件,并部署到支持Servlet 2.3及以上版本的Web应用服务器上。部署后,可以通过客户端或浏览器测试Web服务的功能,例如通过访问XFire提供的服务描述页面(WSDL)来了解如何调用服务。 7. JSP与Web服务交互 如果在应用程序中使用了JSP页面,那么JSP可以用来作为用户与Web服务交互的界面。例如,JSP可以包含JavaScript代码来发送异步的AJAX请求到Web服务,并展示返回的结果给用户。在这个过程中,JSP页面可能使用XMLHttpRequest对象或者现代的Fetch API与Web服务进行通信。 8. 项目配置文件说明 项目配置文件如web.xml和applicationContext.xml分别在Web应用和服务配置中扮演关键角色。web.xml负责定义Web组件,比如Servlet、过滤器和监听器,而applicationContext.xml则负责定义Spring容器中的bean,包括数据源、事务管理器、业务逻辑组件和服务访问器等。 总之,通过上述整合使用原代码的知识点,可以深入理解XFire与Spring框架的结合使用,以及如何开发和部署基本的Web服务。这些技术知识有助于进行更高层次的Web服务开发,以及在复杂的IT环境中灵活运用各种框架和工具。
recommend-type

【Unity2018汉化大揭秘】:一步到位优化中文用户体验

# 摘要 本论文详细介绍了Unity2018汉化项目的实施过程,从理论准备到实践步骤,再到后期的测试与优化,最终分享了汉化经验和心得。首先,强调了汉化项目对于用户体验提升和产品国际化的重要性,并分析了汉化资源的分类、识别与管理方法。接着,详细阐述了汉化工具的选择、脚本编写、资源手动调整等实践步骤,以及汉化质量测试、体验优化和项目维护更新的重要性。论文最后通过案例研究,分析了汉化中的挑战和应对策略,并预测了汉化技术未来的发展方向。整个汉化过程不仅涉及技术层面的操作,还包含了深入的理论研究和实践心得分享,对提升汉化项目的效率和质量具有指导意义。 # 关键字 Unity汉化;用户体验;国际化;资源
recommend-type

iPhone

<think>我们注意到用户意图不明确,但提到了“照片提取”和“其他功能帮助”。因此,我们需要通过搜索来获取关于iPhone照片提取的常见方法以及其他可能的功能帮助。由于用户问题比较宽泛,我们将重点放在照片提取上,因为这是明确提到的关键词。同时,我们也会考虑一些其他常用功能的帮助。首先,针对照片提取,可能涉及从iPhone导出照片、从备份中提取照片、或者从损坏的设备中恢复照片等。我们将搜索这些方面的信息。其次,关于其他功能帮助,我们可以提供一些常见问题的快速指南,如电池优化、屏幕时间管理等。根据要求,我们需要将答案组织为多个方法或步骤,并在每个步骤间换行。同时,避免使用第一人称和步骤词汇。由于
recommend-type

驾校一点通软件:提升驾驶证考试通过率

标题“驾校一点通”指向的是一款专门为学员考取驾驶证提供帮助的软件,该软件强调其辅助性质,旨在为学员提供便捷的学习方式和复习资料。从描述中可以推断出,“驾校一点通”是一个与驾驶考试相关的应用软件,这类软件一般包含驾驶理论学习、模拟考试、交通法规解释等内容。 文件标题中的“2007”这个年份标签很可能意味着软件的最初发布时间或版本更新年份,这说明了软件具有一定的历史背景和可能经过了多次更新,以适应不断变化的驾驶考试要求。 压缩包子文件的文件名称列表中,有以下几个文件类型值得关注: 1. images.dat:这个文件名表明,这是一个包含图像数据的文件,很可能包含了用于软件界面展示的图片,如各种标志、道路场景等图形。在驾照学习软件中,这类图片通常用于帮助用户认识和记忆不同交通标志、信号灯以及驾驶过程中需要注意的各种道路情况。 2. library.dat:这个文件名暗示它是一个包含了大量信息的库文件,可能包含了法规、驾驶知识、考试题库等数据。这类文件是提供给用户学习驾驶理论知识和准备科目一理论考试的重要资源。 3. 驾校一点通小型汽车专用.exe:这是一个可执行文件,是软件的主要安装程序。根据标题推测,这款软件主要是针对小型汽车驾照考试的学员设计的。通常,小型汽车(C1类驾照)需要学习包括车辆构造、基础驾驶技能、安全行车常识、交通法规等内容。 4. 使用说明.html:这个文件是软件使用说明的文档,通常以网页格式存在,用户可以通过浏览器阅读。使用说明应该会详细介绍软件的安装流程、功能介绍、如何使用软件的各种模块以及如何通过软件来帮助自己更好地准备考试。 综合以上信息,我们可以挖掘出以下几个相关知识点: - 软件类型:辅助学习软件,专门针对驾驶考试设计。 - 应用领域:主要用于帮助驾考学员准备理论和实践考试。 - 文件类型:包括图片文件(images.dat)、库文件(library.dat)、可执行文件(.exe)和网页格式的说明文件(.html)。 - 功能内容:可能包含交通法规知识学习、交通标志识别、驾驶理论学习、模拟考试、考试题库练习等功能。 - 版本信息:软件很可能最早发布于2007年,后续可能有多个版本更新。 - 用户群体:主要面向小型汽车驾照考生,即C1类驾照学员。 - 使用方式:用户需要将.exe安装文件进行安装,然后根据.html格式的使用说明来熟悉软件操作,从而利用images.dat和library.dat中的资源来辅助学习。 以上知识点为从给定文件信息中提炼出来的重点,这些内容对于了解“驾校一点通”这款软件的功能、作用、使用方法以及它的发展历史都有重要的指导意义。
recommend-type

【DFLauncher自动化教程】:简化游戏启动流程,让游戏体验更流畅

# 摘要 DFLauncher是一个功能丰富的游戏启动和管理平台,本论文将介绍其安装、基础使用、高级设置、社区互动以及插件开发等方面。通过对配置文件的解析、界面定制、自动化功能的实现、高级配置选项、安全性和性能监控的详细讨论,本文阐述了DFLauncher如何帮助用户更高效地管理和优化游戏环境。此外,本文还探讨了DFLauncher社区的资源分享、教育教程和插件开发等内容,
recommend-type

自适应卡尔曼滤波是什么意思

<think>嗯,用户这次想深入了解自适应卡尔曼滤波(AKF)的概念和原理。从对话历史看,用户之前研究过相机自动对焦系统的降噪技术,其中提到过自适应卡尔曼滤波的应用场景。用户可能是个工程师或研究者,正在探索信号处理在具体场景的实现细节。 用户提供的三篇参考文献很有价值:[1]是基础理论综述,[2]聚焦多传感器场景,[3]讨论噪声协方差自适应方法。需要特别注意相机AF系统的特殊需求——实时性要求高(每秒数十次对焦计算)、噪声环境复杂(机械振动/弱光干扰),这些在解释原理时要结合具体案例。 技术要点需要分层解析:先明确标准卡尔曼滤波的局限(固定噪声参数),再展开自适应机制。对于相机AF场景,重
recommend-type

EIA-CEA 861B标准深入解析:时间与EDID技术

EIA-CEA 861B标准是美国电子工业联盟(Electronic Industries Alliance, EIA)和消费电子协会(Consumer Electronics Association, CEA)联合制定的一个技术规范,该规范详细规定了视频显示设备和系统之间的通信协议,特别是关于视频显示设备的时间信息(timing)和扩展显示识别数据(Extended Display Identification Data,简称EDID)的结构与内容。 在视频显示技术领域,确保不同品牌、不同型号的显示设备之间能够正确交换信息是至关重要的,而这正是EIA-CEA 861B标准所解决的问题。它为制造商提供了一个统一的标准,以便设备能够互相识别和兼容。该标准对于确保设备能够正确配置分辨率、刷新率等参数至关重要。 ### 知识点详解 #### EIA-CEA 861B标准的历史和重要性 EIA-CEA 861B标准是随着数字视频接口(Digital Visual Interface,DVI)和后来的高带宽数字内容保护(High-bandwidth Digital Content Protection,HDCP)等技术的发展而出现的。该标准之所以重要,是因为它定义了电视、显示器和其他显示设备之间如何交互时间参数和显示能力信息。这有助于避免兼容性问题,并确保消费者能有较好的体验。 #### Timing信息 Timing信息指的是关于视频信号时序的信息,包括分辨率、水平频率、垂直频率、像素时钟频率等。这些参数决定了视频信号的同步性和刷新率。正确配置这些参数对于视频播放的稳定性和清晰度至关重要。EIA-CEA 861B标准规定了多种推荐的视频模式(如VESA标准模式)和特定的时序信息格式,使得设备制造商可以参照这些标准来设计产品。 #### EDID EDID是显示设备向计算机或其他视频源发送的数据结构,包含了关于显示设备能力的信息,如制造商、型号、支持的分辨率列表、支持的视频格式、屏幕尺寸等。这种信息交流机制允许视频源设备能够“了解”连接的显示设备,并自动设置最佳的输出分辨率和刷新率,实现即插即用(plug and play)功能。 EDID的结构包含了一系列的块(block),其中定义了包括基本显示参数、色彩特性、名称和序列号等在内的信息。该标准确保了这些信息能以一种标准的方式被传输和解释,从而简化了显示设置的过程。 #### EIA-CEA 861B标准的应用 EIA-CEA 861B标准不仅适用于DVI接口,还适用于HDMI(High-Definition Multimedia Interface)和DisplayPort等数字视频接口。这些接口技术都必须遵循EDID的通信协议,以保证设备间正确交换信息。由于标准的广泛采用,它已经成为现代视频信号传输和显示设备设计的基础。 #### EIA-CEA 861B标准的更新 随着技术的进步,EIA-CEA 861B标准也在不断地更新和修订。例如,随着4K分辨率和更高刷新率的显示技术的发展,该标准已经扩展以包括支持这些新技术的时序和EDID信息。任何显示设备制造商在设计新产品时,都必须考虑最新的EIA-CEA 861B标准,以确保兼容性。 #### 结论 EIA-CEA 861B标准是电子显示领域的一个重要规范,它详细定义了视频显示设备在通信时所使用的信号时序和设备信息的格式。该标准的存在,使得不同厂商生产的显示设备可以无缝连接和集成,极大地增强了用户体验。对于IT专业人士而言,了解和遵守EIA-CEA 861B标准是进行视频系统设计、故障诊断及设备兼容性测试的重要基础。
recommend-type

【DFLauncher应用实战】:如何将DFLauncher融入矮人要塞并提升效率

# 摘要 DFLauncher是一款功能全面的游戏管理工具,旨在简化游戏安装、启动和维护过程。本文介绍了DFLauncher的基本使用方法,详细解析了其核心功能,包括游戏库管理、游戏配置优化、更新机制等。同时,文章探讨了DFLauncher在特定游戏“矮人要塞”中的集成应用,以及通过插件和脚本进行的高级定制。故障诊断与系统优化章节提供了实用的诊断方法和性能提升技巧。最后,本文展望了DFLauncher的未来发展方向,并鼓励社区贡献和用户反馈,以满足不断变化的用户需求。 # 关键字 DFLauncher;游戏管理工具;安装配置;性能优化;故障诊断;社区贡献;定制化扩展;网络功能集成 参考资源