服务确定(服务类收货ML81N)

时间:2021-06-27 10:36:44
FUNCTION zrfc_mm005.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(CALLNO) TYPE ZCALLNO
*" VALUE(PO_NUMBER) LIKE BAPIESSRC-PO_NUMBER
*" VALUE(PO_ITEM) LIKE BAPIESSRC-PO_ITEM
*" VALUE(SHORT_TEXT) LIKE BAPIESSRC-SHORT_TEXT
*" VALUE(POST_DATE) LIKE BAPIESSRC-POST_DATE DEFAULT SY-DATUM
*" VALUE(DOC_DATE) LIKE BAPIESSRC-DOC_DATE DEFAULT SY-DATUM
*" EXPORTING
*" VALUE(ENTRYSHEET) LIKE BAPIESSR-SHEET_NO
*" VALUE(FLAG) LIKE BAPIRET2-TYPE
*" VALUE(MESSAGE) LIKE BAPIRET2-MESSAGE
*" TABLES
*" ZENTRYSHEET01 STRUCTURE ZENTRYSHEET01
*"----------------------------------------------------------------------
DATA: ls_heetheader LIKE bapiessrc,
lt_sheetservices LIKE TABLE OF bapiesllc,
ls_sheetservices LIKE bapiesllc,
ls_zentrysheet01 TYPE zentrysheet01,
lv_pckg_no LIKE bapiesllc-pckg_no VALUE '',
lv_line_no LIKE bapiesllc-line_no VALUE '',
lv_entrysheet LIKE bapiessr-sheet_no,
lv_message LIKE bapiret2-message.
DATA lv_datano TYPE zdatano.
DATA: lt_zmms003 TYPE TABLE OF zmms003,
ls_zmms003 TYPE zmms003. DATA: lt_zmmt002 TYPE TABLE OF zmmt002, "记录会计凭证
ls_zmmt002 TYPE zmmt002,
lv_awkey TYPE awkey,
lv_mblnr TYPE mseg-mblnr, "物料凭证
lv_mjahr TYPE mseg-mjahr, "年度
lv_bukrs TYPE bkpf-bukrs, "公司代码
lv_belnr TYPE bkpf-belnr, "会计凭证号
lv_gjahrs TYPE bkpf-gjahr, "会计年度号
lv_blart TYPE bkpf-blart. "会计凭证类型 *服务确定抬头数据
ls_heetheader-pckg_no = lv_pckg_no. "软件包编号
ls_heetheader-po_number = po_number. "PO编号
ls_heetheader-po_item = po_item. "PO项目编号
ls_heetheader-short_text = short_text. "预算号)
ls_heetheader-acceptance = g_flag. "接受服务确认标识
ls_heetheader-post_date = post_date. "凭证中的凭证日期
ls_heetheader-doc_date = doc_date. "凭证中的过帐日期 *服务确定行项目数据
ls_sheetservices-pckg_no = lv_pckg_no. "软件包编号
ls_sheetservices-line_no = lv_line_no. "内部行编号
ls_sheetservices-subpckg_no = lv_pckg_no + . "分包编号
ls_sheetservices-outl_no = g_flag. "标识符:概要行
APPEND ls_sheetservices TO lt_sheetservices.
CLEAR: ls_sheetservices,lv_entrysheet. lv_pckg_no = lv_pckg_no + .
LOOP AT zentrysheet01 INTO ls_zentrysheet01.
lv_line_no = lv_line_no + .
ls_sheetservices-pckg_no = lv_pckg_no.
ls_sheetservices-line_no = lv_line_no.
ls_sheetservices-ext_line = ls_zentrysheet01-ext_line. "服务确认行项目编号
ls_sheetservices-quantity = ls_zentrysheet01-quantity. "数量
ls_sheetservices-base_uom = ls_zentrysheet01-base_uom. "单位
ls_sheetservices-gr_price = ls_zentrysheet01-gr_price. "总价
ls_sheetservices-short_text = ls_zentrysheet01-short_text. "短文本
APPEND ls_sheetservices TO lt_sheetservices. ls_zmms003-bstnr = po_number.
ls_zmms003-ebelp = po_item.
ls_zmms003-xref2 = ls_zentrysheet01-xref2. "参考码2(预算)
ls_zmms003-zuonr = ls_zentrysheet01-zuonr. "分配号(ECM单号)
APPEND ls_zmms003 TO lt_zmms003.
CLEAR: ls_zentrysheet01,ls_zentrysheet01,ls_zmms003.
ENDLOOP. *---贷方分配编号借方预算号
EXPORT zrfc_mm003 = lt_zmms003 TO MEMORY ID 'ZRFC_MM003'. CLEAR: gt_return ,gs_return .
CALL FUNCTION 'BAPI_ENTRYSHEET_CREATE'
EXPORTING
entrysheetheader = ls_heetheader
IMPORTING
entrysheet = lv_entrysheet
TABLES
entrysheetservices = lt_sheetservices
return = gt_return. READ TABLE gt_return INTO gs_return WITH KEY type = 'E'.
IF sy-subrc NE .
flag = 'S'.
entrysheet = lv_entrysheet.
CONCATENATE '生成服务编号:' lv_entrysheet INTO message..
ELSE.
LOOP AT gt_return INTO gs_return WHERE type CA 'AEX'.
MESSAGE ID gs_return-id
TYPE gs_return-type
NUMBER gs_return-number
WITH gs_return-message_v1 gs_return-message_v2
gs_return-message_v3 gs_return-message_v4
INTO lv_message.
CONCATENATE message lv_message INTO message SEPARATED BY '|'.
ENDLOOP.
SHIFT message LEFT DELETING LEADING '|'.
flag = 'E'.
ENDIF. *----记录会计凭证
CLEAR: lt_zmmt002, ls_zmmt002, lv_awkey, lv_mblnr, lv_mjahr,
lv_bukrs, lv_belnr, lv_gjahrs, lv_blart. SELECT SINGLE mblnr mjahr INTO (lv_mblnr,lv_mjahr) "物料凭证
FROM mseg
WHERE lfbja = sy-datum+()
AND lfbnr = lv_entrysheet. CONCATENATE lv_mblnr lv_mjahr INTO lv_awkey.
IF lv_awkey IS NOT INITIAL.
SELECT SINGLE bukrs belnr gjahr blart INTO (lv_bukrs,lv_belnr,lv_gjahrs,lv_blart) "会计凭证
FROM bkpf WHERE awtyp = 'MKPF'
AND awkey = lv_awkey.
ENDIF. SELECT bukrs belnr gjahr buzei zuonr sgtxt xref1 xref2 xref3 "会计凭信息
INTO CORRESPONDING FIELDS OF TABLE lt_zmmt002
FROM bseg
WHERE bukrs = lv_bukrs
AND belnr = lv_belnr
AND gjahr = lv_gjahrs. ls_zmmt002-blart = lv_blart. "会计凭证类型
MODIFY lt_zmmt002 FROM ls_zmmt002 TRANSPORTING blart WHERE blart IS INITIAL . INSERT zmmt002 FROM TABLE lt_zmmt002. "写入客制数据表
IF sy-subrc = .
COMMIT WORK AND WAIT.
ELSE.
ROLLBACK WORK.
ENDIF. *----记录日志
DATA: quantity(),
gr_price().
CLEAR:gt_log,gs_log,ls_zentrysheet01. LOOP AT zentrysheet01 INTO ls_zentrysheet01.
lv_datano = lv_datano + .
gs_log-datano = lv_datano.
gs_log-name = 'ZRFC_MM005'.
gs_log-cdate = sy-datum.
GET TIME.
gs_log-ctime = sy-uzeit.
gs_log-callno = callno.
gs_log-flag = flag.
gs_log-log = message.
quantity = ls_zentrysheet01-quantity.
gr_price = ls_zentrysheet01-gr_price.
CONCATENATE po_number po_item short_text post_date doc_date
ls_zentrysheet01-ext_line quantity ls_zentrysheet01-base_uom
gr_price ls_zentrysheet01-short_text
ls_zentrysheet01-xref2
ls_zentrysheet01-zuonr
entrysheet
INTO gs_log-content.
CONDENSE gs_log-content NO-GAPS.
gs_log-length = STRLEN( gs_log-content ).
APPEND gs_log TO gt_log.
CLEAR: gs_log,quantity,gr_price,ls_zentrysheet01.
ENDLOOP. IF gt_log IS NOT INITIAL.
INSERT zrfc_mm01in_log FROM TABLE gt_log.
IF sy-subrc = .
COMMIT WORK.
ENDIF.
ENDIF. ENDFUNCTION.