Whenever an ALV grid control program is executed in background, a short dump occurs stating:
Fatal error: GUI cannot be reached
And whenever an ALV grid control program is executed, it tries to create some front-end related objects. But when the same program is executed in background, the above error occurs as it fails to create front-end objects (GUI objects). So in order to rectify this problem, we need to use the docking container instead of our custom container.
The docking container doesn't need any of the custom controls on the screen; instead it attaches an area to any or all of the four edges of the screen (top, left, right or bottom). The behavior of the areas in the container is determined by the sequence in which they are initialized. Docking Containers are attached to the screen from the inside out. This means that when you create a second container, it is attached to the edge of the screen, and the container that was already there is pushed outwards.
Here is a sample code we use in our programs:
data: or_doc type ref to cl_gui_docking_container . if cl_gui_alv_grid=>offline( ) is initial. create object or_custom_container exporting container_name = c_container. create object or_grid exporting i_parent = or_custom_container. else . create object or_grid exporting i_parent = or_doc . endif .
We can use either cl_gui_alv_grid=>offline() or SY-BATCH is 'X' to check if the program is being executed in background or not.