SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Проблема с MD_POPUP_SHOW_INTERNAL_TABLE



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
cbw07
Старший специалист
Старший специалист



Joined: 30 Nov 2007
Posts: 127

PostPosted: Thu Jul 10, 2008 6:45 pm    Post subject: Проблема с MD_POPUP_SHOW_INTERNAL_TABLE Reply with quote

Хочу вывести внутр. таблицу в виде POPUP.
Использую для этого функцию MD_POPUP_SHOW_INTERNAL_TABLE
Но данные почему-то выводятся в таком странном виде как на картинке. Все время происходит какой-то сдвиг в колонках.
Я уже ничего не понимаю.



12.jpg
 Description:
 Filesize:  10.36 KB
 Viewed:  15257 Time(s)

12.jpg


Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 200
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Thu Jul 10, 2008 10:52 pm    Post subject: Reply with quote

Ваш код можно посмотреть?

Пример использования этой функции есть на сайте
http://www.sapnet.ru/viewtopic.php?t=116
Back to top
View user's profile Send private message Blog Visit poster's website
cbw07
Старший специалист
Старший специалист



Joined: 30 Nov 2007
Posts: 127

PostPosted: Fri Jul 11, 2008 10:10 am    Post subject: Reply with quote

Собственно, я на этот пример и опирался...
У меня есть таблица такой структуры:

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.

icols-tabname = 'A017'.
icols-fieldname = 'MATNR'.
icols-selectflag = 'X'.
APPEND icols.

icols-tabname = 'KONP'.
icols-fieldname = 'KBETR'.
APPEND icols.

icols-tabname = 'KONP'.
icols-fieldname = 'KPEIN'.
APPEND icols.

icols-tabname = 'KONP'.
icols-fieldname = 'KMEIN'.
APPEND icols.

CALL FUNCTION 'MD_POPUP_SHOW_INTERNAL_TABLE'
  EXPORTING
    title   = 'Konsignation'
  IMPORTING
    index   = v_indx
  TABLES
    values  = itab
    columns = icols
  EXCEPTIONS
    leave   = 1
    OTHERS  = 2.


Я никак не пойму, как правильно поставить размерность данных, чтобы ничто никуда не уползало
Back to top
View user's profile Send private message
cbw07
Старший специалист
Старший специалист



Joined: 30 Nov 2007
Posts: 127

PostPosted: Fri Jul 11, 2008 1:06 pm    Post subject: Reply with quote

сделал вроде методом подбора.
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 200
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Fri Jul 11, 2008 4:47 pm    Post subject: Reply with quote

Пример накидал, он не падает, но поля типа INT4 отображает неправильно. позиция на экране выставялет правильно. Видимо сама функция так корява работает с не char полями или у меня версия старая. Проверьте у себя.

Проблема вашего примера в том, что хотя во входной таблице вы задали длину полей правильно через char, но внутри функции определение длина поля определяется на основе полей таблицы
KONP-KBETR и KONP-KPEIN. Видимо единственный вариант, создать в словаре Z-структуру с полями типа CHAR нужной длины и скопировать в них описание из элментов данных KBETR, KPEIN.

и задавать так:

Code:
icols-tabname = 'ZKONP'.
icols-fieldname = 'KBETR'.
APPEND icols.

icols-tabname = 'ZKONP'.
icols-fieldname = 'KPEIN'.
APPEND icols.



Мой пример

Code:
TABLES: konp, a017.

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.

icols-tabname = 'SYST'.
icols-fieldname = 'INDEX'.
icols-selectflag = 'X'.
APPEND icols.
icols-tabname = 'A017'.
icols-fieldname = 'MATNR'.
APPEND icols.
icols-tabname = 'KONP'.
icols-fieldname = 'KBETR'.
APPEND icols.
icols-tabname = 'KONP'.
icols-fieldname = 'KPEIN'.
APPEND icols.
icols-tabname = 'KONP'.
icols-fieldname = 'KMEIN'.
APPEND icols.

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.
Back to top
View user's profile Send private message Blog Visit poster's website
cbw07
Старший специалист
Старший специалист



Joined: 30 Nov 2007
Posts: 127

PostPosted: Mon Jul 14, 2008 4:51 pm    Post subject: Reply with quote

почему-то этот пример тоже вылетает с ошибкой.
Похоже, что остается только ручной подбор длины Char. Sad
Back to top
View user's profile Send private message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Mon Jul 14, 2008 7:56 pm    Post subject: Reply with quote

Может быть стоит вывести таблицу в другом виде? например во всплывающем окне SALV или ALV? код простой и короткий если надо могу выложить.
_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
cbw07
Старший специалист
Старший специалист



Joined: 30 Nov 2007
Posts: 127

PostPosted: Tue Jul 15, 2008 9:51 am    Post subject: Reply with quote

можно попробовать. Выложите код, пож-та
Back to top
View user's profile Send private message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Tue Jul 15, 2008 10:56 am    Post subject: Reply with quote

Какая у вас система? есть класс cl_salv_table, можно проверить через se24
_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Tue Jul 15, 2008 11:14 am    Post subject: Reply with quote

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.

CLASS lcl_handler DEFINITION DEFERRED.

DATA: handler TYPE REF TO lcl_handler.


  TRY.
      CALL METHOD cl_salv_table=>factory
        IMPORTING
          r_salv_table = salv_table
        CHANGING
          t_table      = it_contracts_ext[]."таблица с данными

*Всплывающее окно
      CALL METHOD salv_table->set_screen_popup
        EXPORTING
          start_column = 5
          end_column   = 148
          start_line   = 5
          end_line     = 15.

*возможность делать выбор
      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


ENDCLASS.               "lcl_handler

__________________________________________________________

и нужно создать в указанной программе статус, который вы указываете в тексте, это делается для добавления кнопки ОК на экран, по умолчанию для всплывающего окна стандартная блокируется, зачем? Хрен его знает, я так и не понял, чем она разработчикам не угодила.

статус будет иметь следующий вид



[/code]



Статус.jpg
 Description:
 Filesize:  10.52 KB
 Viewed:  15074 Time(s)

Статус.jpg



_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
cbw07
Старший специалист
Старший специалист



Joined: 30 Nov 2007
Posts: 127

PostPosted: Tue Jul 15, 2008 1:36 pm    Post subject: Reply with quote

Спасибо, попробую ваш вариант тоже.
А я еще 1 вариант нашел - REUSE_ALV_POPUP_TO_SELECT
Выводит сразу все без всяких CHAR
Back to top
View user's profile Send private message
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Tue Jul 15, 2008 1:41 pm    Post subject: Reply with quote

cbw07 wrote:
Спасибо, попробую ваш вариант тоже.
А я еще 1 вариант нашел - REUSE_ALV_POPUP_TO_SELECT
Выводит сразу все без всяких CHAR

да или этим ФМ-ом, тут кто чем больше любит работать.

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
XXX_:)
Аналитик
Аналитик


Age: 40
Joined: 01 Feb 2008
Posts: 387
Location: Воронеж

PostPosted: Tue Jul 15, 2008 1:43 pm    Post subject: Reply with quote

cbw07 wrote:
Спасибо, попробую ваш вариант тоже.
А я еще 1 вариант нашел - REUSE_ALV_POPUP_TO_SELECT
Выводит сразу все без всяких CHAR

да или этим ФМ-ом, тут кто чем больше любит работать.

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем
Back to top
View user's profile Send private message Blog
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
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.