Текущее время: Вс, июл 27 2025, 23:31

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: повторное считываение ALV
СообщениеДобавлено: Чт, дек 20 2012, 17:39 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2012, 10:08
Сообщения: 128
Уважаемые гуру :) Не могу решить задачку, хелп.
Есть приказ, в каждом несколько человек.
Первый экран 100 - отображает приказы, выбирается приказ чекбоксом, заходим на 101 экран там где люди по приказу. Нажимаем ок, печатается приказ, возвращаемся на 100 экран. Чекбокс обнулён, выбираю второй приказ, нажимаю на просмотр, проваливаюсь в 101, но там пусто. В отладчике табличка в которой отмечается чекбокс, после выбора приказа в pai как бы игнорирует мой чекбокс, ну следственно далее некого и выбрать, т.к. нет приказа. В pai 100 экрана первым делом делаю CALL METHOD _G_GRID->check_changed_data., но как-то не идет. Подскажите в чем бок у меня?

Code:
=====================================================================
  CALL SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'S10'.
  SET TITLEBAR 'S100' with text-t01.
  IF G_CUSTOM_CONTAINER IS INITIAL.
    REFRESH gt_fieldcat.

    CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
      EXPORTING
        i_structure_name = 'ZHURNAL_ORDS'
      CHANGING
        ct_fieldcat      = gt_fieldcat.

    LOOP AT gt_fieldcat INTO ls_fcat.
      if ls_fcat-FIELDNAME = 'Z'.
        ls_fcat-COLTEXT = 'Выбор'.
        ls_fcat-checkbox = 'X'.
        ls_fcat-edit = 'X'.
      elseif ls_fcat-FIELDNAME = 'NUMBR'.
        ls_fcat-COLTEXT = '№№'.
      elseif ls_fcat-FIELDNAME = 'WERKS'.
        ls_fcat-COLTEXT = 'Раздел персонала'.
      elseif ls_fcat-FIELDNAME = 'ORDNU'.
        ls_fcat-COLTEXT = 'Номер приказа'.
      elseif ls_fcat-FIELDNAME = 'ORDDT'.
        ls_fcat-COLTEXT = 'Дата приказа'.
      elseif ls_fcat-FIELDNAME = 'MASSN'.
        ls_fcat-COLTEXT = 'Вид мероприятия'.
      endif.
      MODIFY gt_fieldcat FROM ls_fcat.
    ENDLOOP.
**
    CREATE OBJECT G_CUSTOM_CONTAINER
      EXPORTING
        CONTAINER_NAME = G_CONTAINER.

    CREATE OBJECT g_grid
      EXPORTING
        i_parent = g_custom_container.


    CALL METHOD g_grid->set_table_for_first_display
      EXPORTING
        is_layout       = gs_layout
        I_DEFAULT       = SPACE
      CHANGING
        it_fieldcatalog = gt_fieldcat
        it_outtab       = ZHURNAL[].



*    CALL METHOD G_GRID->set_toolbar_interactive.
  ENDIF.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.

   CALL METHOD G_GRID->check_changed_data.

READ TABLE ZHURNAL INTO CUT_ZHURNAL WITH KEY z = 'X'.
  CASE OK_CODE.
    WHEN 'EXIT'.
      LEAVE TO SCREEN 0.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
** Печать приказов
    WHEN 'PRINT_ORD'.
      PERFORM PRINT_ORDERS.
    WHEN 'LOOK_EMPL'.
      PERFORM LOOK_EMPL.  "просмотр приказа
    WHEN OTHERS.
  ENDCASE.
  CLEAR OK_CODE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT

*&---------------------------------------------------------------------*
*&      Form  LOOK_EMPL
*&---------------------------------------------------------------------*
FORM LOOK_EMPL .

  "READ TABLE CUT_ZHURNAL.
  LOOP AT P_ZHURNAL INTO CUT_P_ZHURNAL WHERE ORDNU eq CUT_ZHURNAL-ORDNU and ORDDT eq CUT_ZHURNAL-ORDDT.
    CUT_P_ZHURNAL-Z = 'X'.
    APPEND CUT_P_ZHURNAL.
  ENDLOOP.
  IF flag is NOT INITIAL.
  CALL METHOD _G_GRID->check_changed_data.
  CALL METHOD _g_grid->REFRESH_TABLE_DISPLAY
     EXPORTING
     IS_STABLE = IS_STABLE.
  ELSE.
    flag = 1.
  ENDIF.
  CALL SCREEN 101.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0101  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
  MODULE STATUS_0101 OUTPUT.
    SET PF-STATUS 'S11'.
    SET TITLEBAR 'S100' with text-t01.
    IF _G_CUSTOM_CONTAINER IS INITIAL.
      REFRESH _gt_fieldcat.

      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name = 'ZZHURNAL_ORDS'
        CHANGING
          ct_fieldcat      = _gt_fieldcat.

      LOOP AT _gt_fieldcat INTO _ls_fcat.
        if _ls_fcat-FIELDNAME = 'Z'.
          _ls_fcat-COLTEXT = 'Выбор'.
          _ls_fcat-checkbox = 'X'.
          _ls_fcat-edit = 'X'.
        elseif _ls_fcat-FIELDNAME = 'ORDNU'.
          _ls_fcat-outputlen = 7.
          _ls_fcat-COLTEXT = 'Номер приказа'.
        elseif _ls_fcat-FIELDNAME = 'NACHN'.
          _ls_fcat-outputlen = 12.
          _ls_fcat-COLTEXT = 'Фамилия'.
        elseif _ls_fcat-FIELDNAME = 'VORNA'.
          _ls_fcat-outputlen = 12.
          _ls_fcat-COLTEXT = 'Имя'.
        elseif _ls_fcat-FIELDNAME = 'MIDNM'.
          _ls_fcat-outputlen = 12.
          _ls_fcat-COLTEXT = 'Отчество'.
        elseif _ls_fcat-FIELDNAME = 'PLANS'.
          _ls_fcat-outputlen = 20.
          _ls_fcat-COLTEXT = 'Должность'.
        elseif _ls_fcat-FIELDNAME = 'ORGEH'.
          _ls_fcat-outputlen = 20.
          _ls_fcat-COLTEXT = 'Орг.единица'.
        elseif _ls_fcat-FIELDNAME = 'ORDDT'.
          _ls_fcat-outputlen = 10.
          _ls_fcat-COLTEXT = 'Дата приказа'.
        elseif _ls_fcat-FIELDNAME = 'MASSN'.
          _ls_fcat-outputlen = 20.
          _ls_fcat-COLTEXT = 'Вид мероприятия'.
        endif.
        MODIFY _gt_fieldcat FROM _ls_fcat.
      ENDLOOP.

      IF _G_CUSTOM_CONTAINER IS NOT BOUND.
        CREATE OBJECT _G_CUSTOM_CONTAINER
          EXPORTING
            CONTAINER_NAME = _G_CONTAINER.

        CREATE OBJECT _g_grid
          EXPORTING
            i_parent = _g_custom_container.
      ENDIF.

      CALL METHOD _g_grid->set_table_for_first_display
        EXPORTING
          is_layout       = _gs_layout
          I_DEFAULT       = SPACE
        CHANGING
          it_fieldcatalog = _gt_fieldcat
          it_outtab       = CUT_P_ZHURNAL[].
      " CALL METHOD _G_GRID->SET_TOOLBAR_INTERACTIVE.
    ENDIF.
  ENDMODULE.                 " STATUS_0101  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0101  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0101 INPUT.
  CALL METHOD cl_gui_cfw=>dispatch.
  CALL METHOD _G_GRID->check_changed_data.

  CASE OK_CODE.
      WHEN 'OK_EXIT'.
        LOOP AT CUT_P_ZHURNAL INTO OUT_P_ZHURNAL WHERE Z eq 'X'.
          APPEND OUT_P_ZHURNAL.
        ENDLOOP.
        PERFORM PRINT_ORDERS.
        LOOP AT ZHURNAL WHERE z = 'X'.
        CLEAR ZHURNAL-Z.
        MODIFY ZHURNAL.
        ENDLOOP.
        CLEAR: G_CUSTOM_CONTAINER, _G_CUSTOM_CONTAINER, CUT_ZHURNAL, CUT_P_ZHURNAL, OUT_P_ZHURNAL, CUT_ZHURNAL[], CUT_P_ZHURNAL[], OUT_P_ZHURNAL[].
        CALL METHOD G_GRID->check_changed_data.
        CALL METHOD g_grid->REFRESH_TABLE_DISPLAY
        EXPORTING
        IS_STABLE = IS_STABLE.
       " CALL METHOD g_custom_container->free.
  "      CALL METHOD cl_gui_cfw=>flush.
        CALL SCREEN 100.
          "CLEAR: CUT_ZHURNAL, CUT_ZHURNAL[].
      WHEN 'BACK'.
        LEAVE TO SCREEN 100.
      WHEN OTHERS.
  ENDCASE.
  CLEAR OK_CODE.
ENDMODULE.                 " USER_COMMAND_0101  INPUT

_________________
Бог умер (с) Ницше
Ницше умер (с) Бог
Хах.. (с) Смерть


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: повторное считываение ALV
СообщениеДобавлено: Пт, дек 21 2012, 08:19 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 14 2011, 10:05
Сообщения: 17
Если вы возвращаетесь со 101 экрана на 100, то необходимо вместо

Code:
MODULE USER_COMMAND_0101 INPUT.
...
CASE OK_CODE.
      WHEN 'OK_EXIT'.
          ....
          CALL SCREEN 100.



надо использовать LEAVE TO SCREEN 100. Иначе переполните стек экранов.

При повторном просмотре пользователей у вас не обновляется grid в 101 экране. И двойная проверка зачем то
Code:
    IF _G_CUSTOM_CONTAINER IS INITIAL.
        ...

      IF _G_CUSTOM_CONTAINER IS NOT BOUND.
        ....
      ENDIF.

    ENDIF.


Попробуйте так
Code:
IF _G_CUSTOM_CONTAINER IS NOT BOUND. " первый запуск, создание грида и его отображение
        ....

    CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
      EXPORTING
        i_structure_name = 'ZHURNAL_ORDS'
      CHANGING
        ct_fieldcat      = gt_fieldcat.
     
        ....
    CREATE OBJECT G_CUSTOM_CONTAINER
      EXPORTING
        CONTAINER_NAME = G_CONTAINER.

    CREATE OBJECT g_grid
      EXPORTING
        i_parent = g_custom_container.


    CALL METHOD g_grid->set_table_for_first_display
      EXPORTING
        is_layout       = gs_layout
        I_DEFAULT       = SPACE
      CHANGING
        it_fieldcatalog = gt_fieldcat
        it_outtab       = ZHURNAL[].

  ELSE.  " Повторный запуск, обновляем содержимое грида
        ....
        CALL METHOD g_grid->REFRESH_TABLE_DISPLAY.
  ENDIF.




Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: повторное считываение ALV
СообщениеДобавлено: Пт, дек 21 2012, 09:51 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2012, 10:08
Сообщения: 128
Спасибо, получилось. Профессиональный совет + утро вечера мудренее.
Вот код, если кому пригодится.
Code:
  CALL SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'S10'.
  SET TITLEBAR 'S100' with text-t01.
  IF G_CUSTOM_CONTAINER IS NOT BOUND.
    REFRESH gt_fieldcat.

    CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
      EXPORTING
        i_structure_name = 'ZHURNAL_ORDS'
      CHANGING
        ct_fieldcat      = gt_fieldcat.

    LOOP AT gt_fieldcat INTO ls_fcat.
      if ls_fcat-FIELDNAME = 'Z'.
        ls_fcat-COLTEXT = 'Выбор'.
        ls_fcat-checkbox = 'X'.
        ls_fcat-edit = 'X'.
      elseif ls_fcat-FIELDNAME = 'NUMBR'.
        ls_fcat-COLTEXT = '№№'.
      elseif ls_fcat-FIELDNAME = 'WERKS'.
        ls_fcat-COLTEXT = 'Раздел персонала'.
      elseif ls_fcat-FIELDNAME = 'ORDNU'.
        ls_fcat-COLTEXT = 'Номер приказа'.
      elseif ls_fcat-FIELDNAME = 'ORDDT'.
        ls_fcat-COLTEXT = 'Дата приказа'.
      elseif ls_fcat-FIELDNAME = 'MASSN'.
        ls_fcat-COLTEXT = 'Вид мероприятия'.
      endif.
      MODIFY gt_fieldcat FROM ls_fcat.
    ENDLOOP.
**

    CREATE OBJECT G_CUSTOM_CONTAINER
      EXPORTING
        CONTAINER_NAME = G_CONTAINER.

    CREATE OBJECT g_grid
      EXPORTING
        i_parent = g_custom_container.

    CALL METHOD g_grid->set_table_for_first_display
      EXPORTING
        is_layout       = gs_layout
        I_DEFAULT       = SPACE
      CHANGING
        it_fieldcatalog = gt_fieldcat
        it_outtab       = ZHURNAL[].

  ENDIF.

ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CALL METHOD G_GRID->check_changed_data.
READ TABLE ZHURNAL INTO CUT_ZHURNAL WITH KEY z = 'X'.
  CASE OK_CODE.
    WHEN 'EXIT'.
      LEAVE TO SCREEN 0.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
** Печать приказов
    WHEN 'PRINT_ORD'.
      PERFORM PRINT_ORDERS.
    WHEN 'LOOK_EMPL'.
      PERFORM LOOK_EMPL.  "просмотр приказа
    WHEN OTHERS.
  ENDCASE.
  CLEAR OK_CODE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT

*&---------------------------------------------------------------------*
*&      Form  LOOK_EMPL
*&---------------------------------------------------------------------*
FORM LOOK_EMPL .
  LOOP AT P_ZHURNAL INTO CUT_P_ZHURNAL WHERE ORDNU eq CUT_ZHURNAL-ORDNU and ORDDT eq CUT_ZHURNAL-ORDDT.
    CUT_P_ZHURNAL-Z = 'X'.
    APPEND CUT_P_ZHURNAL.
  ENDLOOP.
  IF flag is NOT INITIAL.
    CALL METHOD cl_gui_cfw=>dispatch.
    CALL METHOD _G_GRID->check_changed_data.
    CALL METHOD _G_GRID->REGISTER_EDIT_EVENT
     EXPORTING
       i_event_id = cl_gui_alv_grid=>mc_evt_modified.
  CALL METHOD _g_grid->REFRESH_TABLE_DISPLAY
     EXPORTING
     IS_STABLE = IS_STABLE.
  ELSE.
    flag = 1.
  ENDIF.
  CALL SCREEN 101.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0101  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
  MODULE STATUS_0101 OUTPUT.
    SET PF-STATUS 'S11'.
    SET TITLEBAR 'S100' with text-t01.

    IF _G_CUSTOM_CONTAINER IS NOT BOUND.
      REFRESH _gt_fieldcat.

      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name = 'ZZHURNAL_ORDS'
        CHANGING
          ct_fieldcat      = _gt_fieldcat.

      LOOP AT _gt_fieldcat INTO _ls_fcat.
        if _ls_fcat-FIELDNAME = 'Z'.
          _ls_fcat-COLTEXT = 'Выбор'.
          _ls_fcat-checkbox = 'X'.
          _ls_fcat-edit = 'X'.
        elseif _ls_fcat-FIELDNAME = 'ORDNU'.
          _ls_fcat-outputlen = 7.
          _ls_fcat-COLTEXT = 'Номер приказа'.
        elseif _ls_fcat-FIELDNAME = 'NACHN'.
          _ls_fcat-outputlen = 12.
          _ls_fcat-COLTEXT = 'Фамилия'.
        elseif _ls_fcat-FIELDNAME = 'VORNA'.
          _ls_fcat-outputlen = 12.
          _ls_fcat-COLTEXT = 'Имя'.
        elseif _ls_fcat-FIELDNAME = 'MIDNM'.
          _ls_fcat-outputlen = 12.
          _ls_fcat-COLTEXT = 'Отчество'.
        elseif _ls_fcat-FIELDNAME = 'PLANS'.
          _ls_fcat-outputlen = 20.
          _ls_fcat-COLTEXT = 'Должность'.
        elseif _ls_fcat-FIELDNAME = 'ORGEH'.
          _ls_fcat-outputlen = 20.
          _ls_fcat-COLTEXT = 'Орг.единица'.
        elseif _ls_fcat-FIELDNAME = 'ORDDT'.
          _ls_fcat-outputlen = 10.
          _ls_fcat-COLTEXT = 'Дата приказа'.
        elseif _ls_fcat-FIELDNAME = 'MASSN'.
          _ls_fcat-outputlen = 20.
          _ls_fcat-COLTEXT = 'Вид мероприятия'.
        endif.
        MODIFY _gt_fieldcat FROM _ls_fcat.
      ENDLOOP.

        CREATE OBJECT _G_CUSTOM_CONTAINER
          EXPORTING
            CONTAINER_NAME = _G_CONTAINER.

        CREATE OBJECT _g_grid
          EXPORTING
            i_parent = _g_custom_container.

      CALL METHOD _g_grid->set_table_for_first_display
        EXPORTING
          is_layout       = _gs_layout
          I_DEFAULT       = SPACE
        CHANGING
          it_fieldcatalog = _gt_fieldcat
          it_outtab       = CUT_P_ZHURNAL[].
      ELSE.
        CALL METHOD g_grid->REFRESH_TABLE_DISPLAY.
    ENDIF.
  ENDMODULE.                 " STATUS_0101  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0101  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0101 INPUT.
  CALL METHOD _G_GRID->check_changed_data.
  CASE OK_CODE.
      WHEN 'OK_EXIT'.
        LOOP AT CUT_P_ZHURNAL INTO OUT_P_ZHURNAL WHERE Z eq 'X'.
          APPEND OUT_P_ZHURNAL.
        ENDLOOP.
        "PERFORM PRINT_ORDERS.
        LOOP AT ZHURNAL WHERE z = 'X'.
        CLEAR ZHURNAL-Z.
        MODIFY ZHURNAL.
        ENDLOOP.
        CLEAR:  CUT_ZHURNAL, CUT_P_ZHURNAL, OUT_P_ZHURNAL, CUT_ZHURNAL[], CUT_P_ZHURNAL[], OUT_P_ZHURNAL[].
        CALL METHOD G_GRID->check_changed_data.
        CALL METHOD g_grid->REFRESH_TABLE_DISPLAY
        EXPORTING
        IS_STABLE = IS_STABLE.
        LEAVE TO SCREEN 100.
      WHEN 'BACK'.
        LEAVE TO SCREEN 100.
      WHEN OTHERS.
  ENDCASE.
  CLEAR OK_CODE.
ENDMODULE.                 " USER_COMMAND_0101  INPUT

_________________
Бог умер (с) Ницше
Ницше умер (с) Бог
Хах.. (с) Смерть


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB