1) Основная проблема
Возможно, вы сталкиваетесь с тем, что несколько элементов управления пользовательского интерфейса назначены одному и тому же контейнеру интерфейса пользователя, отображается только первый назначенный элемент управления.
Чтобы избежать этой проблемы, вы должны освободить дополнительные элементы управления, чтобы каждому контейнеру оставался только один элемент управления.
В вашем случае у вас есть 2 сетки ALV, назначенные одному и тому же фиктивному контейнеру DEFAULT_SCREEN
;ваш элемент управления является экземпляром класса CL_GUI_ALV_GRID
, вы можете вызвать метод FREE
для его освобождения.
2) В вашем коде есть другая проблема
Решение, приведенное выше, должно решить вашу непосредственную проблему, но это создаст другую, потому что вам придется повторно создавать экземпляр ALV Grid при возвращении к экрану 7000, и это сбросит положение прокрутки и т. Д.
Вы можете избежать этого, изменив что-то еще в своем коде, как я объясню ниже.
Dynpro (экран ABAP) содержит элементы пользовательского интерфейса, но если вы назначаете элемент управления «фиктивному экрану» (любому изстатические атрибуты *SCREEN*
из CL_GUI_CONTAINER
), этот элемент управления будет отображаться поверх dynpro (элементы пользовательского интерфейса dynpro не отображаются вообще, кроме панели инструментов).
Вместо использования фиктивных экранов, вы должны определить настраиваемую область управления в вашем dynpro, дать ей имя, а затем в PBO создать настраиваемый контейнер (класс CL_GUI_CUSTOM_CONTAINER
), указав название области и назначив сетку ALV этому контейнеру.
Если вы сделаете это на двух экранах, у вас будет только одна сетка ALV на контейнер, и вы выиграете 'на каждом шаге навигации требуется освободить и восстановить экземпляры элементов управления.