原本是通过PO接口退给OA系统,但后来改了,直接写入OA系统。
首先要在ST04配置链接外部数据库
*&---------------------------------------------------------------------*
*& Report ZHRR035
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zhrr035.
DATA: gw_dbs TYPE dbcon-con_name VALUE 'OA'."ST04连接名
DATA:g_obj_sqldb TYPE REF TO cx_sy_native_sql_error,g_error_text TYPE string.
DATA:lt_item TYPE TABLE OF zhrs028_item.
DATA:ls_item TYPE zhrs028_item.
DATA:ls_sql TYPE zhrs028_item.
DATA:lv_gjahr TYPE gjahr,
lv_poper TYPE month,
num TYPE string,
lv_orgeh TYPE char6,
lv_i TYPE i.
lv_gjahr = sy-datum+0(4).
lv_poper = sy-datum+4(2) - 1.
INITIALIZATION.
*如果是1月份
IF sy-datum+4(2) = '01'.
lv_gjahr = lv_gjahr - 1.
lv_poper = '12'.
ENDIF.
START-OF-SELECTION.
*取工资表数据
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_item
FROM zhrt009
WHERE gjahr = lv_gjahr AND poper = lv_poper.
END-OF-SELECTION.
TRY. "连接数据库
EXEC SQL.
CONNECT TO :GW_DBS
ENDEXEC.
CATCH cx_sy_native_sql_error INTO g_obj_sqldb.
CALL METHOD g_obj_sqldb->get_text
RECEIVING
result = g_error_text.
ENDTRY.
IF g_error_text IS INITIAL.
*设置连接
EXEC SQL.
SET CONNECTION 'OA'
ENDEXEC.
LOOP AT lt_item INTO ls_item.
TRY .
EXEC SQL.
SELECT *
FROM sap_hrgz
INTO :ls_sql
WHERE GJAHR = :ls_item-GJAHR
AND ZMONTH = :ls_item-POPER
AND PERNR = :ls_item-PERNR
ENDEXEC.
*查到有存在的数据就更新,没有就插入新的
IF sy-subrc = 0.
PERFORM frm_update.
ELSE.
PERFORM frm_insert.
ENDIF.
CATCH cx_sy_native_sql_error INTO g_obj_sqldb.
CALL METHOD g_obj_sqldb->get_text
RECEIVING
result = g_error_text.
ENDTRY.
*提交
EXEC SQL.
COMMIT
ENDEXEC.
CLEAR:lv_i,lv_orgeh.
ENDLOOP.
ELSE.
MESSAGE s899(mm) WITH g_error_text.
ENDIF.
*断开
EXEC SQL.
DISCONNECT :gw_dbs
ENDEXEC.
*&---------------------------------------------------------------------*
*& Form appenddata
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_update .
lv_i = ls_item-orgeh.
WRITE lv_i TO lv_orgeh LEFT-JUSTIFIED NO-GROUPING. "外部数据库要求去掉前导0
EXEC SQL.
UPDATE sap_hrgz
SET GJAHR = :ls_item-GJAHR,
ZMONTH = :ls_item-POPER,
PERNR = :ls_item-PERNR,
ENAME = :ls_item-ENAME,
ABKRS = :ls_item-ABKRS,
ATEXT = :ls_item-ATEXT,
ZZGSLB = :ls_item-ZZGSLB,
ORGEH = :lv_orgeh,
ORGTX = :ls_item-ORGTX,
PERSG = :ls_item-PERSG,
PTEXT = :ls_item-PTEXT,
PLANS = :ls_item-PLANS,
PLSTX = :ls_item-PLSTX,
PERSK = :ls_item-PERSK,
ZTEXT = :ls_item-ZTEXT,
ZSBTS = :ls_item-ZSBTS,
ZJBGZ = :ls_item-ZJBGZ,
ZKHGZ = :ls_item-ZKHGZ,
ZZJBGZ = :ls_item-ZZJBGZ,
ZYWTC = :ls_item-ZYWTC,
ZCT = :ls_item-ZCT,
ZGLJ = :ls_item-ZGLJ,
ZQQJ = :ls_item-ZQQJ,
ZQTJL = :ls_item-ZQTJL,
ZGWF = :ls_item-ZGWF,
ZTXBT = :ls_item-ZTXBT,
ZZQBT = :ls_item-ZZQBT,
ZZFBT = :ls_item-ZZFBT,
ZJTBT = :ls_item-ZJTBT,
ZYGJSF = :ls_item-ZYGJSF,
ZQTFL = :ls_item-ZQTFL,
ZKK1 = :ls_item-ZKK1,
ZQT1 = :ls_item-ZQT1,
ZQT3 = :ls_item-ZQT3,
ZQT4 = :ls_item-ZQT4,
ZQT5 = :ls_item-ZQT5,
ZQQKK = :ls_item-ZQQKK,
ZYF = :ls_item-ZYF,
ZYLJ = :ls_item-ZYLJ,
ZYLF = :ls_item-ZYLF,
ZSYJ = :ls_item-ZSYJ,
ZGJJ = :ls_item-ZGJJ,
ZDBHZBX = :ls_item-ZDBHZBX,
ZZSSDF = :ls_item-ZZSSDF,
ZDKS = :ls_item-ZDKS,
ZQT2 = :ls_item-ZQT2,
ZCJH = :ls_item-ZCJH,
ZSFJE = :ls_item-ZSFJE
WHERE GJAHR = :ls_item-GJAHR
AND ZMONTH = :ls_item-POPER
AND PERNR = :ls_item-PERNR
ENDEXEC.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form appenddata
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_insert .
lv_i = ls_item-orgeh.
WRITE lv_i TO lv_orgeh LEFT-JUSTIFIED NO-GROUPING.
PERFORM frm_add_kauid CHANGING num."获取编号,外部数据库设了ID为主键,自增。事务码SNRO
ls_item-id = num.
EXEC SQL.
INSERT INTO sap_hrgz
(ID,
GJAHR,
ZMONTH,
PERNR,
ENAME,
ABKRS,
ATEXT,
ZZGSLB,
ORGEH,
ORGTX,
PERSG,
PTEXT,
PLANS,
PLSTX,
PERSK,
ZTEXT,
ZSBTS,
ZJBGZ,
ZKHGZ,
ZZJBGZ,
ZYWTC,
ZCT,
ZGLJ,
ZQQJ,
ZQTJL,
ZGWF,
ZTXBT,
ZZQBT,
ZZFBT,
ZJTBT,
ZYGJSF,
ZQTFL,
ZKK1,
ZQT1,
ZQT3,
ZQT4,
ZQT5,
ZQQKK,
ZYF,
ZYLJ,
ZYLF,
ZSYJ,
ZGJJ,
ZDBHZBX,
ZZSSDF,
ZDKS,
ZQT2,
ZCJH,
ZSFJE
)
VALUES
(:ls_item-ID,
:ls_item-GJAHR,
:ls_item-POPER,
:ls_item-PERNR,
:ls_item-ENAME,
:ls_item-ABKRS,
:ls_item-ATEXT,
:ls_item-ZZGSLB,
:lv_orgeh,
:ls_item-ORGTX,
:ls_item-PERSG,
:ls_item-PTEXT,
:ls_item-PLANS,
:ls_item-PLSTX,
:ls_item-PERSK,
:ls_item-ZTEXT,
:ls_item-ZSBTS,
:ls_item-ZJBGZ,
:ls_item-ZKHGZ,
:ls_item-ZZJBGZ,
:ls_item-ZYWTC,
:ls_item-ZCT,
:ls_item-ZGLJ,
:ls_item-ZQQJ,
:ls_item-ZQTJL,
:ls_item-ZGWF,
:ls_item-ZTXBT,
:ls_item-ZZQBT,
:ls_item-ZZFBT,
:ls_item-ZJTBT,
:ls_item-ZYGJSF,
:ls_item-ZQTFL,
:ls_item-ZKK1,
:ls_item-ZQT1,
:ls_item-ZQT3,
:ls_item-ZQT4,
:ls_item-ZQT5,
:ls_item-ZQQKK,
:ls_item-ZYF,
:ls_item-ZYLJ,
:ls_item-ZYLF,
:ls_item-ZSYJ,
:ls_item-ZGJJ,
:ls_item-ZDBHZBX,
:ls_item-ZZSSDF,
:ls_item-ZDKS,
:ls_item-ZQT2,
:ls_item-ZCJH,
:ls_item-ZSFJE
)
ENDEXEC.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_add_kauid
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- NUM
*&---------------------------------------------------------------------*
FORM frm_add_kauid CHANGING num.
CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'
EXPORTING
object = 'ZHRWAGES' "流水号对象
EXCEPTIONS
foreign_lock = 1
object_not_found = 2
system_failure = 3
OTHERS = 4.
IF sy-subrc EQ 0.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '1' "维护的间隔号
object = 'ZHRWAGES' "流水号对象
* QUANTITY = '1'
* SUBOBJECT = ' '
* TOYEAR = '0000'
* IGNORE_BUFFER = ' '
IMPORTING
number = num "获得的流水号
* QUANTITY =
* RETURNCODE =
EXCEPTIONS
interval_not_found = 1
number_range_not_intern = 2
object_not_found = 3
quantity_is_0 = 4
quantity_is_not_1 = 5
interval_overflow = 6
buffer_overflow = 7
OTHERS = 8.
* * ***将号码累加
CALL FUNCTION 'NUMBER_RANGE_DEQUEUE '
EXPORTING
object = 'ZHRWAGES'
EXCEPTIONS
object_not_found = 1
OTHERS = 2.
ELSE.
MESSAGE '未获取到流水号' TYPE 'E'.
ENDIF.
ENDFORM.