When you execute a report group, the system terminates and issues error message GR 215:
'Internal error: More than 999 INDX blocks were requested.
The system may terminate when you save an extract or when you execute a report.
The system terminates if you exceed the maximum amount of memory space allowed (approximately 100 MB in the standard system) in the INDX or the GREP, or if you exceed the number of GREP_BLOCKS in the routine EXPORT_OUT2 in the selection program.
You can increase the maximum amount of memory space allowed by increasing the default value of the variable INDX_BLOCK_SIZE in the include FGRWFDS0 (as of Release 4.0: GREP_BLOCK_SIZE). In the standard system, the default value 100,000 is assigned to this variable. The attached correction describes how you can increase the maximum amount of memory space allowed by a factor of 5. To do so, you have to change the default value of the variable INDX_BLOCK_SIZE (or GREP_BLOCK_SIZE) from 100,000 to 500,000. The program lines you have to add or comment out are marked at the end of the line with "'<-ins(H64537)' or "'<-del(H64537)'. After you implement the enhancement, regenerate all affected report groups.
If the value 500,000 is not sufficient, you can increase the value gradually until the system no longer issues the error message after you regenerate the report groups.
IMPORTANT: The value of INDX_BLOCK_SIZE (or GREP_BLOCK_SIZE) must not exceed 999,999.
After you have changed the include FGRWFDS0, use transaction GR55 to regenerate the affected report group.
The maximum amount of memory space allowed (in bytes) is the product of the two variables INDX_BLOCK_SIZE and MAX_N_INDX_BLOCKS. In the standard system, this is 100,000 * 999 bytes. The variable MAX_N_INDX_BLOCKS must not be increased. Therefore, you can increase the maximum amount of memory space allowed only by increasing the variable INDX_BLOCK_SIZE.
The following is a rough description of how you can estimate the amount of memory space (in bytes) that you will probably require. The following assumptions are made:
- The report group contains r reports B(1), ..., B(r).
- For the report B(i) (i = 1 ... r), a total of v(i) reports B(i,1) ... B(i,v(I)) are created using variation of the selection. (If variation of the selection is not active, then v(i) = 1.)
- The report B(i,j) contains l(i,j) report rows (including all suppressed rows). You can suppress report rows in the layout, for example, by means of the local or global summation level, the threshold value conditions or the 'Suppress zero lines' indicator.
If no report of the report group contains more than C data columns, the memory space (in bytes) required for storing the extract should be approximately N = Sum(i=1...r) { Sum(j= 1...v(i)) [ l(i,j)*(50 + 12*C) ] }.
Therefore, you should increase the variable INDX_BLOCK_SIZE to at least the value N / MAX_N_INDX_BLOCKS.
Note that as of Release 4.0A, the variable INDX_BLOCK_SIZE has been replaced by GREP_BLOCK_SIZE. The calculation described above is valid for the replacement variable also.
The memory space is required when you execute a report or when you save an extract. The system may issue the error message, even if you do not save any extracts.
Check whether the problem can be avoided by changing the report definition. As described above, the amount of memory space depends on the number of reports in the report group, the size of the variation hierarchy, the number of report rows and the number of columns.
In many cases, you can greatly reduce the size by dividing a report group that contains several reports or by limiting the variation steps.
The BLOCK_SIZE delivered in the standard system should generally be sufficient. SAP recommends you implement the described modification as an exception only.
The increase of the BLOCK_SIZE described above is a modification and must therefore be reimplemented each time you upgrade the release.