Posted: Thu Jul 10, 2008 6:45 pm Post subject: Проблема с MD_POPUP_SHOW_INTERNAL_TABLE
Хочу вывести внутр. таблицу в виде POPUP.
Использую для этого функцию MD_POPUP_SHOW_INTERNAL_TABLE
Но данные почему-то выводятся в таком странном виде как на картинке. Все время происходит какой-то сдвиг в колонках.
Я уже ничего не понимаю.
Собственно, я на этот пример и опирался...
У меня есть таблица такой структуры:
Code:
*-- OUT-Tabelle
TYPES: BEGIN OF wa_out,
num TYPE i,
matnr TYPE a017-matnr,
kbetr TYPE konp-kbetr,
kpein TYPE konp-kpein,
kmein TYPE konp-kmein,
END OF wa_out.
DATA: itab_out TYPE STANDARD TABLE OF wa_out.
DATA: wa TYPE wa_out.
Я вначале пробовал в вызове функции писать
Code:
TABLES
values = itab_out
но программа почему-то вываливалась с ошибкой, что несоответствие чего-то с чем-то...
Тогда я сделал такую таблицу из CHAR:
Code:
DATA: BEGIN OF itab OCCURS 0,
matnr(18) TYPE c,
kbetr(11) TYPE c,
kpein(5) TYPE c,
kmein(3) TYPE c,
END OF itab.
DATA: wapopup LIKE LINE OF itab.
и скопировал данные из itab_out в itab
и затем вывожу ее.
Ошибки уже нет, но я замучался с тем, что в зависимости от длины полей все начинает куда-то сдвигаться.
Вот окончательный код:
Code:
DATA: v_indx LIKE sy-index.
DATA: BEGIN OF icols OCCURS 0.
INCLUDE STRUCTURE help_value.
DATA: END OF icols.
Age: 170 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Fri Jul 11, 2008 4:47 pm Post subject:
Пример накидал, он не падает, но поля типа INT4 отображает неправильно. позиция на экране выставялет правильно. Видимо сама функция так корява работает с не char полями или у меня версия старая. Проверьте у себя.
Проблема вашего примера в том, что хотя во входной таблице вы задали длину полей правильно через char, но внутри функции определение длина поля определяется на основе полей таблицы
KONP-KBETR и KONP-KPEIN. Видимо единственный вариант, создать в словаре Z-структуру с полями типа CHAR нужной длины и скопировать в них описание из элментов данных KBETR, KPEIN.
DATA: BEGIN OF itab OCCURS 0,
num TYPE i,
matnr TYPE a017-matnr,
kbetr TYPE konp-kbetr,
kpein TYPE konp-kpein,
kmein TYPE konp-kmein,
END OF itab.
*-- OUT-Tabelle
DATA: BEGIN OF icols OCCURS 0.
INCLUDE STRUCTURE help_value.
DATA: END OF icols.
DATA v_indx LIKE sy-index.
SELECT-OPTIONS: s_werks FOR a017-werks,
s_matnr FOR a017-matnr.
SELECT * FROM a017
WHERE matnr IN s_matnr
AND werks IN s_werks.
itab-num = sy-tabix.
itab-matnr = a017-matnr.
SELECT SINGLE * FROM konp
WHERE KNUMH = a017-knumh.
itab-kbetr = konp-kbetr.
itab-kpein = konp-kpein.
itab-kmein = konp-kmein.
APPEND itab.
ENDSELECT.
SORT itab BY num.
CALL FUNCTION 'MD_POPUP_SHOW_INTERNAL_TABLE'
EXPORTING
title = 'SELECT A VALUE'
IMPORTING
index = v_indx
TABLES
values = itab
columns = icols
EXCEPTIONS
leave = 1
OTHERS = 2.
IF sy-subrc EQ 0.
READ TABLE itab INDEX v_indx.
WRITE:/ itab-matnr, itab-kbetr.
ENDIF.
Age: 40 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Mon Jul 14, 2008 7:56 pm Post subject:
Может быть стоит вывести таблицу в другом виде? например во всплывающем окне SALV или ALV? код простой и короткий если надо могу выложить. _________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Age: 40 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Tue Jul 15, 2008 10:56 am Post subject:
Какая у вас система? есть класс cl_salv_table, можно проверить через se24 _________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Age: 40 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Tue Jul 15, 2008 11:14 am Post subject:
Code:
"ненужные переменные можно и не объявлять
DATA: salv_table TYPE REF TO cl_salv_table,
salv_events TYPE REF TO cl_salv_events_table,
salv_columns TYPE REF TO cl_salv_columns_table, "columns in alv
salv_column TYPE REF TO cl_salv_column_table, "column
salv_selections TYPE REF TO cl_salv_selections,
salv_display TYPE REF TO cl_salv_display_settings, "display
it_salv_row TYPE salv_t_row,
wa_salv_row LIKE LINE OF it_salv_row.
*возможность делать выбор
CALL METHOD salv_table->get_selections
RECEIVING
value = salv_selections.
*только одной строки
CALL METHOD salv_selections->set_selection_mode
EXPORTING
value = if_salv_c_selection_mode=>single.
*статус
TRY.
CALL METHOD salv_table->set_screen_status
EXPORTING
report = 'ZRGGBS000' "имя программы
pfstatus = 'ZSTATUS' "имя статуса у программы
set_functions = salv_table->c_functions_all.
ENDTRY.
*Перехват события
CREATE OBJECT handler.
salv_events = salv_table->get_event( ).
SET HANDLER handler->added_function FOR salv_events.
*показ ALV
salv_table->display( ). "если будет запускаться в фоновом
"режиме, нужно добавить еще одну строчку
CATCH cx_salv_msg .
ENDTRY.
IF sy-ucomm <> '&OK'.
MESSAGE 'Обработка прервана пользователем' TYPE 'E'.
endif.
_____________________________________________________
*&---------------------------------------------------------------------*
*& Class lcl_handler
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
CLASS lcl_handler_DEFINITION.
PUBLIC SECTION.
METHODS:
added_function
FOR EVENT added_function OF cl_salv_events_table IMPORTING e_salv_function.
PRIVATE SECTION.
DATA: wa_output TYPE t_s_output,
wa_contracts_ext TYPE t_s_contracts_ext,
num_lines TYPE i.
ENDCLASS. "lcl_handler
*&---------------------------------------------------------------------*
*& Class (Implementation) lcl_handler
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
CLASS lcl_handler_ IMPLEMENTATION.
METHOD added_function.
CASE e_salv_function.
*Отмена
WHEN '&CAN'.
CALL METHOD salv_table->close_screen( ) .
WHEN '&OK'.
CALL METHOD salv_selections->get_selected_rows
RECEIVING
value = it_salv_row.
DESCRIBE TABLE it_salv_row LINES num_lines.
*не был выбран договор
IF num_lines = 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = 'Сообщение'
txt1 = 'Выберите один из договоров'
txt2 = ' '.
ELSE.
READ TABLE it_salv_row INTO wa_salv_row INDEX 1.
READ TABLE it_contracts_ext INTO wa_contracts_ext INDEX wa_salv_row.
g_zuonr = wa_contracts_ext-numin.
CALL METHOD salv_table->close_screen( ) .
ENDIF.
ENDCASE.
ENDMETHOD. "ADDED_FUNCTION
и нужно создать в указанной программе статус, который вы указываете в тексте, это делается для добавления кнопки ОК на экран, по умолчанию для всплывающего окна стандартная блокируется, зачем? Хрен его знает, я так и не понял, чем она разработчикам не угодила.
статус будет иметь следующий вид
[/code]
Статус.jpg
Description:
Filesize:
10.52 KB
Viewed:
16803 Time(s)
_________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Age: 40 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Tue Jul 15, 2008 1:41 pm Post subject:
cbw07 wrote:
Спасибо, попробую ваш вариант тоже.
А я еще 1 вариант нашел - REUSE_ALV_POPUP_TO_SELECT
Выводит сразу все без всяких CHAR
да или этим ФМ-ом, тут кто чем больше любит работать. _________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Age: 40 Joined: 01 Feb 2008 Posts: 387 Location: Воронеж
Posted: Tue Jul 15, 2008 1:43 pm Post subject:
cbw07 wrote:
Спасибо, попробую ваш вариант тоже.
А я еще 1 вариант нашел - REUSE_ALV_POPUP_TO_SELECT
Выводит сразу все без всяких CHAR
да или этим ФМ-ом, тут кто чем больше любит работать. _________________ Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.