*&---------------------------------------------------------------------*
*& 程序名: ZYSFI_031 *
*& *
*&---------------------------------------------------------------------*
*& 抬头 : 创建客户主数据调用后台功能 *
*& 模块 : FI *
*& 作者 : ZHANGS *
*& 创建日期 : 2018/09/13 *
*& 程序类型 : 报表/表单/批导入/后台作业 *
*& 消息类 : ZMG_SD *
*& 描述 : 描述报表的作用 *
*& *
*& 修改记录 : *
*& 日期 修改人 修改内容 *
*& YYYY/MM/DD 修改人员名 说明 *
*&---------------------------------------------------------------------*
REPORT zysfi_031 MESSAGE-ID zmg_sd.
*&---------------------------------------------------------------------*
*& INCLUDE
*&---------------------------------------------------------------------*
INCLUDE zysfi_031_top. "Type/Data
*INCLUDE zxxxxxxxx_class. "Class
INCLUDE zysfi_031_selscr. "Selection screen
INCLUDE zysfi_031_form. "Form
*INCLUDE zxxxxxxxx_module. "Module
*&---------------------------------------------------------------------*
*& 初始化处理
*&---------------------------------------------------------------------*
INITIALIZATION.
*&---------------------------------------------------------------------*
*& 选择屏幕控制
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
* PERFORM xxxxxxx.
*&---------------------------------------------------------------------*
*& 参数输入检查
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
* PERFORM xxxxxxx.
*&---------------------------------------------------------------------*
*& 程序开始处理
*&---------------------------------------------------------------------*
START-OF-SELECTION.
IF sy-batch <> 'X'.
MESSAGE '请使用后台执行' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
PERFORM f_get_data. "取数逻辑
PERFORM f_pro_data. "处理逻辑
*&---------------------------------------------------------------------*
*& 程序结束处理
*&---------------------------------------------------------------------*
END-OF-SELECTION.
* PERFORM xxxxxxx.
*&---------------------------------------------------------------------*
*& 包含 ZYSFI_031_TOP
*&---------------------------------------------------------------------*
TYPE-POOLS:slis.
TABLES:zfit015,zfit016.
DATA: BEGIN OF ty_kunnr,
kunnr TYPE zfit015-kunnr,
END OF ty_kunnr.
DATA:gt_kunnr LIKE TABLE OF ty_kunnr,
gs_kunnr LIKE ty_kunnr.
DATA lt_temp LIKE TABLE OF ty_kunnr WITH HEADER LINE.
DATA:gt_kunnr1 LIKE TABLE OF ty_kunnr,
gs_kunnr1 LIKE ty_kunnr.
DATA lt_temp1 LIKE TABLE OF ty_kunnr WITH HEADER LINE.
DATA gr_kunnr TYPE RANGE OF zfit015-kunnr WITH HEADER LINE.
DATA:g_jobs TYPE i, "最大JOB数
g_job_lines TYPE i,
g_time TYPE i. "间隔秒数
*&---------------------------------------------------------------------*
*& 包含 ZYSFI_031_SELSCR
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-001..
SELECT-OPTIONS: s_kunnr FOR zfit015-kunnr,
s_dat FOR sy-datum.
SELECTION-SCREEN END OF BLOCK b01.
*&---------------------------------------------------------------------*
*& 包含 ZYSFI_031_FORM
*&---------------------------------------------------------------------*
FORM f_get_data .
SELECT kunnr
INTO CORRESPONDING FIELDS OF TABLE gt_kunnr
FROM zfit015
WHERE kunnr IN s_kunnr
AND zstatus NE 'S'
AND zaccdate IN s_dat.
SELECT kunnr
APPENDING TABLE gt_kunnr
FROM zfit016
WHERE kunnr IN s_kunnr
AND zstatus NE 'S'
AND zaccdate IN s_dat.
SORT gt_kunnr BY kunnr.
DELETE ADJACENT DUPLICATES FROM gt_kunnr COMPARING kunnr.
IF gt_kunnr[] IS INITIAL.
MESSAGE s001 WITH '没有找到数据' DISPLAY LIKE 'E'.
LEAVE TO LIST-PROCESSING.
ENDIF.
ENDFORM.
FORM f_pro_data .
* 暂定写死
g_jobs = '20'.
g_job_lines = '2000'.
g_time = '5'.
WHILE gt_kunnr IS NOT INITIAL.
REFRESH lt_temp.
APPEND LINES OF gt_kunnr FROM 1 TO 500 TO lt_temp.
PERFORM f_set_jobs.
* WAIT UP TO 10 SECONDS.
DELETE gt_kunnr FROM 1 TO 500.
ENDWHILE.
ENDFORM.
FORM f_set_jobs .
DATA:l_job_name TYPE tbtco-jobname, "作业名
l_jobname TYPE tbtco-jobname, "作业名(取数条件用)
l_job_num TYPE tbtco-jobcount, "作业号
l_program TYPE tbtco-jobname, "程序名
print_parameters TYPE pri_params, "SUBMIT参数
l_count_job TYPE i,
lt_tbtco TYPE STANDARD TABLE OF tbtco.
REFRESH gr_kunnr[].
LOOP AT lt_temp.
CLEAR:gr_kunnr.
gr_kunnr-sign = 'I'.
gr_kunnr-option = 'EQ'.
gr_kunnr-low = lt_temp-kunnr.
APPEND gr_kunnr.
ENDLOOP.
l_jobname = 'ZYSFI_004_%'.
DO.
SELECT *
FROM tbtco
INTO CORRESPONDING FIELDS OF TABLE lt_tbtco
WHERE jobname LIKE l_jobname.
DELETE lt_tbtco WHERE status <> 'R' AND status <> 'S'.
DESCRIBE TABLE lt_tbtco LINES l_count_job.
IF l_count_job < g_jobs.
EXIT.
ELSE.
WAIT UP TO g_time SECONDS.
ENDIF.
ENDDO.
GET TIME."获取当前时间
CONCATENATE 'ZYSFI_004_' sy-datum+4(4) sy-uzeit INTO l_job_name.
* OPEN JOB
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = l_job_name
IMPORTING
jobcount = l_job_num
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF sy-subrc = 0.
l_program = 'ZYSFI_004'.
SUBMIT (l_program) TO SAP-SPOOL
SPOOL PARAMETERS print_parameters WITHOUT SPOOL DYNPRO
WITH s_kunnr IN gr_kunnr[]
WITH s_date IN s_dat
USER sy-uname
VIA JOB l_job_name
NUMBER l_job_num
AND RETURN.
IF sy-subrc = 0.
WRITE:/'后台JOB:', l_job_name,'提交成功'.
ELSE.
WRITE:/'后台JOB:', l_job_name,'提交失败'.
ENDIF.
* 关闭JOB
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = l_job_num
jobname = l_job_name
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
invalid_target = 8
OTHERS = 9.
IF sy-subrc <> 0.
WRITE:/ '后台JOB:' ,l_job_name ,'关闭失败,请关注' COLOR 6.
ENDIF.
ELSE.
WRITE:/ '后台JOB:' ,l_job_name ,'启动失败!!!' COLOR 6.
ENDIF.
ENDFORM. " F_SET_JOBS