分JOB程序

*&---------------------------------------------------------------------*

*& 程序名: 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

猜你喜欢

转载自blog.csdn.net/qq_37968127/article/details/88971202
job