2016-07-06 2 views
2

У меня проблема, когда не все строки моего элемента управления таблицами отображаются в ABAP 740 SP13.Управление таблицей не отображает все строки

К примеру, у меня есть таблица с этими двумя строками:

Values of LT_TRANSFER_CONFIRM_TC

Это состояние таблицы, где выполняется этот код:

CALL SCREEN 0300 STARTING AT 10 5 
       ENDING AT 85 16. 

Это идет сразу в мой Процесс до Код выхода:

*----------------------------------------------------------------------* 
*      PROCESS BEFORE OUTPUT       * 
*----------------------------------------------------------------------* 
PROCESS BEFORE OUTPUT. 
    MODULE status_0300. 
    LOOP AT lt_transfer_confirm_tc 
     INTO ls_transfer_confirm_tc 
     WITH CONTROL tc_transfer_confirm 
     CURSOR tc_transfer_confirm-current_line. 
    MODULE tc_transfer_confirm_get_lines. 
    ENDLOOP. 

, гдеявляется:

MODULE status_0300 OUTPUT. 
    SET PF-STATUS 'STATUS_0300'. 
    " Confirm Material Number Count 
    SET TITLEBAR 'T05'. 
ENDMODULE. 

и tc_transfer_confirm_get_lines:

MODULE tc_transfer_confirm_get_lines OUTPUT. 
    g_tc_transfer_confirm_lines = sy-loopc. 
ENDMODULE. 

В конце первой итерации цикла в моем ПБА, значение ls_transfer_confirm_tc совпадает с первой строкой lt_transfer_confirm_tc таблицы, tc_transfer_confirm-current_line является 1 и g_tc_transfer_confirm_linestc_transfer_confirm_get_lines) установлен в 10.

Вторая итерация цикла никогда не обрабатывается. Курсор перескакивает с ENDLOOP (с первой итерации) на строку, указанную CURSOR tc_transfer_confirm-current_line. (так как это конец инструкции LOOP) и, наконец, до ENDLOOP без остановки на линии MODULE tc_transfer_confirm_get_lines. В конце этого цикла ls_transfer_confirm_tc является начальным, tc_transfer_confirm-current_line по-прежнему 1, а g_tc_transfer_confirm_lines по-прежнему 10. Все это время таблица lt_transfer_confirm_tc все еще имеет две строки в ней, как показано на изображении в верхней части этого вопроса.

На данный момент, на экране отображается следующим образом:

Table Control displayed by SCREEN 0300

Я не знаю, почему этот цикл не обрабатывает вторую строку моего стола, и поэтому не отображает его на экране.

Спасибо.

ответ

2

Проблема заключалась в том, что я никогда не устанавливая значение tc_transfer_confirm-lines, так что значение всегда 1.

Следующий код работает успешно:

*----------------------------------------------------------------------* 
*      PROCESS BEFORE OUTPUT       * 
*----------------------------------------------------------------------* 
PROCESS BEFORE OUTPUT. 
    MODULE status_0300. 
    MODULE tc_trnsfr_cnfrm_change_tc_attr. 
    LOOP AT lt_transfer_confirm_tc 
     INTO ls_transfer_confirm_tc 
     WITH CONTROL tc_transfer_confirm 
     CURSOR tc_transfer_confirm-current_line. 
    MODULE tc_transfer_confirm_get_lines. 
    ENDLOOP. 

С новым модулем tc_trnsfr_cnfrm_change_tc_attr:

*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_TRANSFER_CONFIRM'. DO NOT CHANGE THIS LINE! 
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR 
MODULE tc_trnsfr_cnfrm_change_tc_attr OUTPUT. 
    DESCRIBE TABLE lt_transfer_confirm_tc LINES tc_transfer_confirm-lines. 
ENDMODULE. 
Смежные вопросы