SAP-ABAP之bdc技术call f-65
2016-01-10 17:23
603 查看
以下是一个经典的SAP例程序,通过bdc技术生成fi凭证。
REPORT ZTEST_F65.
DATA: LSBL3(10) .
data HS1 TYPE I.
TYPES: BEGIN OF tp_out.
TYPES: YGMC TYPE KNA1-NAME1.
TYPES: BM TYPE CSKT-KTEXT. "部门
INCLUDE TYPE ZFIT_GZYSJ01.
TYPES: YFXJ TYPE ZFIT_GZYSJ01-SJ1.
"应发小计
TYPES: END OF tp_out.
DATA:
gt_out TYPE TABLE OF tp_out WITH HEADER LINE.
DATA gt_wa like line of gt_out.
DATA: gt_outHB TYPE TABLE OF tp_out WITH HEADER LINE.
data wb type char20.
**********定义一个BDC内表***********************
DATA g_itb_bdcdata TYPE TABLE OF bdcdata.
DATA g_wa_bdcdata LIKE LINE OF g_itb_bdcdata.
data p_BUKRS LIKE ZFIT_GZYSJ02-BUKRS
.
data p_GJAHR LIKE ZFIT_GZYSJ02-GJAHR .
data p_MONAT LIKE ZFIT_GZYSJ02-MONAT.
p_BUKRS = '1000'.
p_GJAHR = '2009'.
p_MONAT = '10'.
perFORM frm_post_fp.
*&---------------------------------------------------------------------*
*& Form frm_bdc_input
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P1 text
* -->P2 text
* -->P3 text
*----------------------------------------------------------------------*
FORM frm_bdc_input USING p1 p2 p3.
CLEAR g_wa_bdcdata.
IF p1 = 'X'.
g_wa_bdcdata-program = p2.
g_wa_bdcdata-dynpro = p3.
g_wa_bdcdata-dynbegin = p1.
APPEND g_wa_bdcdata TO g_itb_bdcdata.
ELSE.
g_wa_bdcdata-fnam = p2.
g_wa_bdcdata-fval = p3.
APPEND g_wa_bdcdata TO g_itb_bdcdata.
ENDIF.
ENDFORM. "frm_bdc_input
*&---------------------------------------------------------------------*
*& Form frm_post_fp
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_post_fp.
DATA l_itb_message TYPE TABLE OF bdcmsgcoll.
DATA l_wa_message LIKE LINE OF l_itb_message.
DATA l_message TYPE char100.
DATA l_date TYPE bkpf-budat.
DATA l_wrbtr TYPE char16.
DATA l_str TYPE string.
DATA l_mode TYPE c VALUE 'N'.
* DATA l_mode TYPE c VALUE 'A'.
* DATA l_mode TYPE c VALUE 'E'.
DATA: l_datum TYPE datum.
CONCATENATE '这是' p_MONAT '月的凭证' into wb.
l_datum+0(4) = p_GJAHR.
l_datum+4(2) = p_MONAT.
l_datum+6(2) = '15'.
IF GT_outhb[] IS INITIAL.
CLEAR:g_wa_bdcdata,g_itb_bdcdata.
*先设置科目编码
LSBL3 = '6601050000'."记住科目编码的状态变式非常重要
l_wrbtr = '100.00'.
PERFORM frm_bdc_input USING: 'X' 'SAPLF040' '0100',
'' 'BDC_OKCODE' '/00',
'' 'BKPF-BLDAT' l_datum,
'' 'BKPF-BLART' 'SA',
'' 'BKPF-BUKRS' p_BUKRS, "输入公司代码
'' 'BKPF-BUDAT' l_datum, "日期
'' 'BKPF-WAERS' 'RMB',
'' 'BKPF-BKTXT' wb , "文本抬头
'' 'VBKPF-XBWAE' 'X',
'' 'FS006-DOCID' '*'.
PERFORM frm_bdc_input USING: '' 'RF05V-NEWBS' '40'.
PERFORM frm_bdc_input USING: '' 'RF05V-NEWKO' LSBL3. "科目编码
PERFORM frm_bdc_input USING: 'X' 'SAPLF040' '0300',
'' 'BDC_OKCODE' '=ZK',
'' 'BSEG-WRBTR' l_wrbtr, "金额为文本格式
'X' 'SAPLKACB' '0002',
'' 'BDC_OKCODE' '/EESC',
'' 'BDC_CURSOR' 'COBL-KOSTL',
'X' 'SAPLF040' '0330',
'' 'BDC_CURSOR' 'BSEG-VBUND',
'' 'BDC_OKCODE' '=ZK',
'X' 'SAPLF040' '0300',
'' 'BDC_OKCODE' '=ZK',
'X' 'SAPLKACB' '0002',
'' 'BDC_OKCODE' '=ENTE',
'' 'COBL-KOSTL' '1000002' , "成本中心
'X' 'SAPLF040' '0330',
'' 'BDC_OKCODE' '=S+',
*按员工核算则BSEG-XREF2不为空
* '' 'BSEG-XREF2' gt_wa_out-kunnr.
'' 'BSEG-XREF2' ''.
PERFORM frm_bdc_input USING: '' 'RF05V-NEWBS' '50',
'' 'RF05V-NEWKO' '2211030101',
'X' 'SAPLF040' '0300',
'' 'BDC_OKCODE' '=AB',
'' 'BSEG-WRBTR' '*',
'X' 'SAPLKACB' '0002',
'' 'BDC_OKCODE' '=ENTE',
'X' 'SAPLF040' '0700',
'' 'BDC_CURSOR' 'BKPF-XBLNR',
'' 'BDC_OKCODE' '=PBBP'.
"break-point.
CALL TRANSACTION 'F-65' USING g_itb_bdcdata MODE l_mode MESSAGES INTO l_itb_message.
READ TABLE l_itb_message INTO l_wa_message WITH KEY msgtyp = 'S' msgid = 'FP' msgnr = '001'.
DATA: l_msg TYPE string.
IF sy-subrc = 0.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = l_wa_message-msgid
lang = '1'
no = l_wa_message-msgnr
v1 = l_wa_message-msgv1
v2 = l_wa_message-msgv2
v3 = l_wa_message-msgv3
v4 = l_wa_message-msgv4
IMPORTING
msg = l_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
WRITE:/ l_msg.
ELSE.
LOOP AT l_itb_message INTO l_wa_message WHERE msgtyp = 'E' OR msgtyp = 'A'.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = l_wa_message-msgid
lang = '1'
no = l_wa_message-msgnr
v1 = l_wa_message-msgv1
v2 = l_wa_message-msgv2
v3 = l_wa_message-msgv3
v4 = l_wa_message-msgv4
IMPORTING
msg = l_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
WRITE:/ l_msg.
ENDLOOP.
ENDIF.
ELSE.
WRITE:/ '没有需要结转的数据'.
ENDIF.
REPORT ZTEST_F65.
DATA: LSBL3(10) .
data HS1 TYPE I.
TYPES: BEGIN OF tp_out.
TYPES: YGMC TYPE KNA1-NAME1.
TYPES: BM TYPE CSKT-KTEXT. "部门
INCLUDE TYPE ZFIT_GZYSJ01.
TYPES: YFXJ TYPE ZFIT_GZYSJ01-SJ1.
"应发小计
TYPES: END OF tp_out.
DATA:
gt_out TYPE TABLE OF tp_out WITH HEADER LINE.
DATA gt_wa like line of gt_out.
DATA: gt_outHB TYPE TABLE OF tp_out WITH HEADER LINE.
data wb type char20.
**********定义一个BDC内表***********************
DATA g_itb_bdcdata TYPE TABLE OF bdcdata.
DATA g_wa_bdcdata LIKE LINE OF g_itb_bdcdata.
data p_BUKRS LIKE ZFIT_GZYSJ02-BUKRS
.
data p_GJAHR LIKE ZFIT_GZYSJ02-GJAHR .
data p_MONAT LIKE ZFIT_GZYSJ02-MONAT.
p_BUKRS = '1000'.
p_GJAHR = '2009'.
p_MONAT = '10'.
perFORM frm_post_fp.
*&---------------------------------------------------------------------*
*& Form frm_bdc_input
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P1 text
* -->P2 text
* -->P3 text
*----------------------------------------------------------------------*
FORM frm_bdc_input USING p1 p2 p3.
CLEAR g_wa_bdcdata.
IF p1 = 'X'.
g_wa_bdcdata-program = p2.
g_wa_bdcdata-dynpro = p3.
g_wa_bdcdata-dynbegin = p1.
APPEND g_wa_bdcdata TO g_itb_bdcdata.
ELSE.
g_wa_bdcdata-fnam = p2.
g_wa_bdcdata-fval = p3.
APPEND g_wa_bdcdata TO g_itb_bdcdata.
ENDIF.
ENDFORM. "frm_bdc_input
*&---------------------------------------------------------------------*
*& Form frm_post_fp
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_post_fp.
DATA l_itb_message TYPE TABLE OF bdcmsgcoll.
DATA l_wa_message LIKE LINE OF l_itb_message.
DATA l_message TYPE char100.
DATA l_date TYPE bkpf-budat.
DATA l_wrbtr TYPE char16.
DATA l_str TYPE string.
DATA l_mode TYPE c VALUE 'N'.
* DATA l_mode TYPE c VALUE 'A'.
* DATA l_mode TYPE c VALUE 'E'.
DATA: l_datum TYPE datum.
CONCATENATE '这是' p_MONAT '月的凭证' into wb.
l_datum+0(4) = p_GJAHR.
l_datum+4(2) = p_MONAT.
l_datum+6(2) = '15'.
IF GT_outhb[] IS INITIAL.
CLEAR:g_wa_bdcdata,g_itb_bdcdata.
*先设置科目编码
LSBL3 = '6601050000'."记住科目编码的状态变式非常重要
l_wrbtr = '100.00'.
PERFORM frm_bdc_input USING: 'X' 'SAPLF040' '0100',
'' 'BDC_OKCODE' '/00',
'' 'BKPF-BLDAT' l_datum,
'' 'BKPF-BLART' 'SA',
'' 'BKPF-BUKRS' p_BUKRS, "输入公司代码
'' 'BKPF-BUDAT' l_datum, "日期
'' 'BKPF-WAERS' 'RMB',
'' 'BKPF-BKTXT' wb , "文本抬头
'' 'VBKPF-XBWAE' 'X',
'' 'FS006-DOCID' '*'.
PERFORM frm_bdc_input USING: '' 'RF05V-NEWBS' '40'.
PERFORM frm_bdc_input USING: '' 'RF05V-NEWKO' LSBL3. "科目编码
PERFORM frm_bdc_input USING: 'X' 'SAPLF040' '0300',
'' 'BDC_OKCODE' '=ZK',
'' 'BSEG-WRBTR' l_wrbtr, "金额为文本格式
'X' 'SAPLKACB' '0002',
'' 'BDC_OKCODE' '/EESC',
'' 'BDC_CURSOR' 'COBL-KOSTL',
'X' 'SAPLF040' '0330',
'' 'BDC_CURSOR' 'BSEG-VBUND',
'' 'BDC_OKCODE' '=ZK',
'X' 'SAPLF040' '0300',
'' 'BDC_OKCODE' '=ZK',
'X' 'SAPLKACB' '0002',
'' 'BDC_OKCODE' '=ENTE',
'' 'COBL-KOSTL' '1000002' , "成本中心
'X' 'SAPLF040' '0330',
'' 'BDC_OKCODE' '=S+',
*按员工核算则BSEG-XREF2不为空
* '' 'BSEG-XREF2' gt_wa_out-kunnr.
'' 'BSEG-XREF2' ''.
PERFORM frm_bdc_input USING: '' 'RF05V-NEWBS' '50',
'' 'RF05V-NEWKO' '2211030101',
'X' 'SAPLF040' '0300',
'' 'BDC_OKCODE' '=AB',
'' 'BSEG-WRBTR' '*',
'X' 'SAPLKACB' '0002',
'' 'BDC_OKCODE' '=ENTE',
'X' 'SAPLF040' '0700',
'' 'BDC_CURSOR' 'BKPF-XBLNR',
'' 'BDC_OKCODE' '=PBBP'.
"break-point.
CALL TRANSACTION 'F-65' USING g_itb_bdcdata MODE l_mode MESSAGES INTO l_itb_message.
READ TABLE l_itb_message INTO l_wa_message WITH KEY msgtyp = 'S' msgid = 'FP' msgnr = '001'.
DATA: l_msg TYPE string.
IF sy-subrc = 0.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = l_wa_message-msgid
lang = '1'
no = l_wa_message-msgnr
v1 = l_wa_message-msgv1
v2 = l_wa_message-msgv2
v3 = l_wa_message-msgv3
v4 = l_wa_message-msgv4
IMPORTING
msg = l_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
WRITE:/ l_msg.
ELSE.
LOOP AT l_itb_message INTO l_wa_message WHERE msgtyp = 'E' OR msgtyp = 'A'.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = l_wa_message-msgid
lang = '1'
no = l_wa_message-msgnr
v1 = l_wa_message-msgv1
v2 = l_wa_message-msgv2
v3 = l_wa_message-msgv3
v4 = l_wa_message-msgv4
IMPORTING
msg = l_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
WRITE:/ l_msg.
ENDLOOP.
ENDIF.
ELSE.
WRITE:/ '没有需要结转的数据'.
ENDIF.
相关文章推荐
- 关于SAP BW中删除标准DSO中已经激活的请求
- 整理硬盘发现几个以前做的视频,分享下
- SAP R3 Oracle 9i ORA-06413 连接未打开错误
- SAP BASIS常用T-CODE
- sap RFC Trusted/Trusting (权限)
- SAP学习手册-1
- About SAP XI
- 国家电网SAP 烂尾悬疑
- “画皮SAP事件”的进展与争论!
- 某大型SAP系统升级改造解决方案___备份
- 浙江省电力公司SAP、OA信息系统应急演练取得圆满成功
- 恩墨科技为某企业SAP数据库提供紧急援助服务
- SAP BASIS主要工作职责(转自倍思博SAP)
- SAP产品介绍
- SAP公布2006年度初步业绩报告
- absolute relative fixed static inherit
- 在SAP R3 IDES中恢复SAP*密码
- SAP IDES需要输入access key破解
- 朗泽SAP:SAP在中国已进入高速时代
- 基于事件驱动过程链理论的SAP项目实施