vot moi ismenennyi kod, no FM vse ravno idet kek Dialog. Sprosil pro bgRFC skasali chto sami poka tekogo ne delali eshe. Budut dumat. Ishu alternativy dlya Select Count(*). Chto do realnogo razmera, to chtoby bylo tochnee zadaetsya parametr WORKBENCH Size
Code:
*&---------------------------------------------------------------------*
*& Report /GESGTS/SPACECHECK_NEW
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT /gesgts/spacecheck_new_v2_0 MESSAGE-ID /gesgts/compliance.
DATA: s_mandt-high TYPE t000-mandt,
s_mandt-low TYPE t000-mandt,
dd02l_tab LIKE dd02l OCCURS 0 WITH HEADER LINE,
gs_tab TYPE LINE OF /gesgts/tabname_t," /gesgts/tabname,
gt_tab TYPE /gesgts/tabname_t,
gt_tab_q1 TYPE /gesgts/tabname_t,
gt_tab_q2 TYPE /gesgts/tabname_t,
gt_tab_q3 TYPE /gesgts/tabname_t,
gt_tab_q4 TYPE /gesgts/tabname_t,
gt_tab_q5 TYPE /gesgts/tabname_t,
gt_tab_q6 TYPE /gesgts/tabname_t,
gt_tab_q7 TYPE /gesgts/tabname_t,
gt_tab_q8 TYPE /gesgts/tabname_t,
gt_tab_q9 TYPE /gesgts/tabname_t,
gt_tab_q0 TYPE /gesgts/tabname_t,
gt_tab_q11 TYPE /gesgts/tabname_t,
gv_lines TYPE i,
gv_start TYPE sy-timlo,
gv_end TYPE sy-timlo.
DATA new_taskname TYPE /gesgts/sp_job-job_name.
TABLES: t000, dd02l, /gesgts/sp_job.
CONSTANTS:
opcode_arfc_noreq TYPE x VALUE 10.
DATA:
server TYPE msname,
reason TYPE i,
trace TYPE i VALUE 0,
dia_max TYPE i,
dia_free TYPE i,
taskid TYPE i VALUE 0,
taskname(20) TYPE c,
servergroup TYPE rzlli_apcl,
it_wpliste TYPE TABLE OF WPINFO,
wa_wpliste LIKE wpinfo.
PARAMETERS: p_volume TYPE memoryused_long,
p_clust TYPE oax,
p_nol TYPE oax ,
p_noa TYPE oax,
p_proz TYPE i DEFAULT dia_max.
START-OF-SELECTION.
CALL FUNCTION 'TH_GET_WPINFO'
* EXPORTING
* SRVNAME =
* WITH_CPU =
TABLES
wplist = it_wpliste
* EXCEPTIONS
* SEND_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
data: max_batch TYPE i,
free_batch TYPE i.
LOOP AT it_wpliste INTO wa_wpliste.
IF wa_wpliste-wp_typ EQ 'BTC' AND wa_wpliste-wp_status EQ 'wartet'.
ADD 1 TO free_batch.
ENDIF.
ENDLOOP.
SUBTRACT 1 FROM free_batch.
*Anzahl von verfugbaren freie Prozessen ermittlen
*
* CALL 'ThSysInfo' ID 'OPCODE' FIELD opcode_arfc_noreq
* ID 'SERVER' FIELD server
* ID 'NOREQ' FIELD dia_free
* ID 'MAXREQ' FIELD dia_max
* ID 'REASON' FIELD reason
* ID 'TRACE' FIELD trace.
*
* IF dia_free GT 1.
* SUBTRACT 3 FROM dia_free.
* "SUBTRACT 2 FROM dia_max.
* ENDIF.
** Für sicherhet muss 3 Prozessen frei bleiben für stabile Arbeit
* IF dia_free LE 1.
* MESSAGE e000(38)
* WITH 'Not enough processes free'.
* ENDIF.
*
* IF sy-subrc <> 0.
** Implement suitable error handling here
* ENDIF.
*
* IF sy-subrc <> 0.
** Implement suitable error handling here
* ENDIF.
*
* IF dia_free > 10.
* dia_free = 10.
* ENDIF.
*Wenn zu viel Prozesen oder 0 Prozessen ausgewhlt wäre,
* wird maximal Anzahl von Prozessen durchgeführt
IF p_proz = 0 OR p_proz > free_batch.
p_proz = free_batch.
ENDIF.
DELETE FROM /gesgts/sp_check.
UPDATE /gesgts/sp_job SET aktiv = ' '.
*Full alle Tabellennamen
SELECT * INTO TABLE dd02l_tab
FROM dd02l
WHERE as4local = 'A'
AND clidep = 'X'
AND ( tabclass EQ 'TRANSP'
OR tabclass EQ 'POOL'
OR tabclass EQ 'CLUSTER' ).
IF p_clust = 'X'.
DATA: i TYPE i,
tabname TYPE tabname.
LOOP AT dd02l_tab WHERE tabclass EQ 'CLUSTER'.
i = sy-tabix + 1.
dd02l_tab-tabname = dd02l_tab-sqltab.
CLEAR dd02l_tab-sqltab.
CLEAR dd02l_tab-contflag.
dd02l_tab-tabclass = 'TABCLUST'.
MODIFY dd02l_tab.
tabname = dd02l_tab-tabname.
LOOP AT dd02l_tab FROM i
WHERE tabclass EQ 'CLUSTER'
AND sqltab = tabname.
DELETE dd02l_tab.
ENDLOOP.
ENDLOOP.
ENDIF.
SORT dd02l_tab.
DELETE ADJACENT DUPLICATES FROM dd02l_tab COMPARING tabname.
DESCRIBE TABLE dd02l_tab LINES gv_lines.
DATA: teiler TYPE i,
counter TYPE i .
gv_lines = 100. "Nur für Testzwecke
counter = 1.
WHILE counter <= gv_lines.
CLEAR: gs_tab, teiler.
teiler = counter MOD p_proz.
CASE teiler.
WHEN '1'.
READ TABLE dd02l_tab INTO gs_tab INDEX counter.
APPEND gs_tab TO gt_tab_q1.
WHEN '2'.
READ TABLE dd02l_tab INTO gs_tab INDEX counter.
APPEND gs_tab TO gt_tab_q2.
WHEN '3'.
READ TABLE dd02l_tab INTO gs_tab INDEX counter.
APPEND gs_tab TO gt_tab_q3.
WHEN '4'.
READ TABLE dd02l_tab INTO gs_tab INDEX counter.
APPEND gs_tab TO gt_tab_q4.
WHEN '5'.
READ TABLE dd02l_tab INTO gs_tab INDEX counter.
APPEND gs_tab TO gt_tab_q5.
WHEN '6'.
READ TABLE dd02l_tab INTO gs_tab INDEX counter.
APPEND gs_tab TO gt_tab_q6.
WHEN '7'.
READ TABLE dd02l_tab INTO gs_tab INDEX counter.
APPEND gs_tab TO gt_tab_q7.
WHEN '8'.
READ TABLE dd02l_tab INTO gs_tab INDEX counter.
APPEND gs_tab TO gt_tab_q8.
WHEN '9'.
READ TABLE dd02l_tab INTO gs_tab INDEX counter.
APPEND gs_tab TO gt_tab_q9.
WHEN '0'.
READ TABLE dd02l_tab INTO gs_tab INDEX counter.
APPEND gs_tab TO gt_tab_q0.
ENDCASE.
ADD 1 TO counter.
ENDWHILE.
CLEAR gt_tab.
PERFORM read_size.
" ENDIF.
*&---------------------------------------------------------------------*
*& Form READ_SIZE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_FREE text
* -->P_GT_TAB_Q1 text
* -->P_GT_TAB_Q2 text
* -->P_GT_TAB_Q3 text
* -->P_GT_TAB_Q4 text
*----------------------------------------------------------------------*
FORM read_size.
DATA gt_used_tmp TYPE /gesgts/sizetab_t.
DATA q_tab_tmp TYPE /gesgts/tabname_t.
DATA: counter TYPE i,
job_name TYPE TBTCJOB-JOBNAME.
counter = 0.
s_mandt-high = 800.
s_mandt-low = 500.
* Hier sollte jetzt zuerst eine Verarbeitung
* für die Ermittlung der zu verarbeitenden Pakete stehen
* und ein Loop statt der einzelnen Aufrufe
* Aber ! das System prüft ob es überhaupt freie WP
* und die Belastung nicht so hoch wird, ausserdem
* dürfen höchstens 10 Prozesse gestartet werden (ERP2004)
WHILE counter < p_proz.
CASE counter.
WHEN '1'.
new_taskname = 'Prozess_1'.
q_tab_tmp = gt_tab_q1.
WHEN '2'.
new_taskname = 'Prozess_2'.
q_tab_tmp = gt_tab_q2.
WHEN '3'.
new_taskname = 'Prozess_3'.
q_tab_tmp = gt_tab_q3.
WHEN '4'.
new_taskname = 'Prozess_4'.
q_tab_tmp = gt_tab_q4.
WHEN '5'.
new_taskname = 'Prozess_5'.
q_tab_tmp = gt_tab_q5.
WHEN '6'.
new_taskname = 'Prozess_6'.
q_tab_tmp = gt_tab_q6.
WHEN '7'.
new_taskname = 'Prozess_7'.
q_tab_tmp = gt_tab_q7.
WHEN '8'.
new_taskname = 'Prozess_8'.
q_tab_tmp = gt_tab_q8.
WHEN '9'.
new_taskname = 'Prozess_9'.
q_tab_tmp = gt_tab_q9.
WHEN '0'.
new_taskname = 'Prozess_0'.
q_tab_tmp = gt_tab_q0.
ENDCASE.
UPDATE /gesgts/sp_job
SET aktiv = 'X'
WHERE job_name EQ new_taskname.
CALL FUNCTION '/GESGTS/RSTABLESIZE_TAB' IN BACKGROUND TASK
EXPORTING
im_client_low = s_mandt-low
im_client_hi = s_mandt-high
im_noclassl = p_nol
im_noclassa = p_noa
im_tab = q_tab_tmp
im_taskname = new_taskname
* IMPORTING
* EX_SUMTAB = gt_used_q1
EXCEPTIONS
communications_failure = 1
system_failure = 2
OTHERS = 3 .
IF sy-subrc <> 0.
IF sy-subrc = 1.
MESSAGE i046.
ELSEIF sy-subrc = 2.
MESSAGE i047.
ELSEIF sy-subrc = 3.
MESSAGE i048 WITH new_taskname.
ENDIF.
ENDIF.
COMMIT WORK.
CLEAR: q_tab_tmp, new_taskname, job_name.
ADD 1 TO counter.
ENDWHILE.
ENDFORM. "read_size