Текущее время: Вт, июл 08 2025, 11:46

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: ALV_GRID пересчет сумм и модификация ячеек
СообщениеДобавлено: Вс, дек 27 2009, 13:57 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, авг 24 2007, 11:29
Сообщения: 350
Здравствуйте коллеги.

Ситуация: Есть два CL_GUI_ALV_GRID при изменении ячейки в одном, мне необходимо поменять значение ячейки в другом. Метод REFRESH_TABLE_DISPLAY не использую т.к. он м моем случае работает медленно. При модификации ячейки GRID1 использую событие DATA_CHANGED и метод ER_DATA_CHANGED->MODIFY_CELL. в этом же событии мне необходимо модифицировать ячейку GRID2, ПЫТАЮСЬ сделать это следующим образом, НО ЧТО-ТО НЕ ПОЛУЧАЕТСЯ:
Code:
       DATA : LO_CHANGE TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL,
              LV_TABLE TYPE REF TO DATA,
              MODI_CELL TYPE LVC_S_MODI,
              DD TYPE LVC_T_MSG1.

       FIELD-SYMBOLS : <LT_FS> TYPE STANDARD TABLE.
       
       CREATE OBJECT LO_CHANGE EXPORTING I_CALLING_ALV = GO_GRID2.
       CREATE DATA LO_CHANGE->MP_MOD_ROWS LIKE <GT_LVC_OUTTAB2>.
       ASSIGN LO_CHANGE->MP_MOD_ROWS->* TO <LT_FS>.
       APPEND <LS_TAB1> TO <LT_FS>.
       LO_CHANGE->MT_ROID_FRONT = ER_DATA_CHANGED->MT_ROID_FRONT.
       LO_CHANGE->MT_FIELDCATALOG = GT_FIELDCAT2.
       LO_CHANGE->MODIFY_CELL( EXPORTING I_ROW_ID    = LS_GOOD-ROW_ID
                                         I_TABIX     = LS_GOOD-TABIX
                                         I_FIELDNAME = 'ZRMEND'
                                         I_VALUE     = <LV_OST_END> ).
       LO_CHANGE->MODIFY_PROTOCOL_ENTRY( EXPORTING IT_MSG = DD  ).
       LO_CHANGE->FREE( ).


Вопрос 1 : что я делаю не так или каким образом возможно изменить 1 ячейку GRID2 из события DATA_CHANGED GRID1.
Вопрос 2 : каким образом можно заставить CL_GUI_ALV_GRID пересчитывать суммы после каждого ввода(без метода REFRESH_TABLE_DISPLAY )


Заранее спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV_GRID пересчет сумм и модификация ячеек
СообщениеДобавлено: Вс, дек 27 2009, 21:49 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
slim написал(а):
Метод REFRESH_TABLE_DISPLAY не использую т.к. он м моем случае работает медленно.
Вы работаете на 486DX2 процессоре?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV_GRID пересчет сумм и модификация ячеек
СообщениеДобавлено: Пн, дек 28 2009, 08:14 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, авг 24 2007, 11:29
Сообщения: 350
John Doe написал:
slim написал(а):
Метод REFRESH_TABLE_DISPLAY не использую т.к. он м моем случае работает медленно.
Вы работаете на 486DX2 процессоре?


В любом случае должна быть какая-нибудь альтернатива REFRESH_TABLE_DISPLAY... для того чтобы изменить значение ячеек в GRID1 и GRID2 из GRID1, и пересчитать суммы только по 1 столбцу.

Если кто-нибудь сможет мне подсказать буду очень благодарен.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV_GRID пересчет сумм и модификация ячеек
СообщениеДобавлено: Пн, дек 28 2009, 09:24 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Альтернатива - выйти из программы и зайти заново. Но это Вас не устроит, не думаю что есть какие то способы обновить АЛВ быстрее чем это сделает метод REFRESH_TABLE_DISPLAY.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV_GRID пересчет сумм и модификация ячеек
СообщениеДобавлено: Пн, дек 28 2009, 14:34 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, авг 24 2007, 11:29
Сообщения: 350
По ходу работы появилась еще одна проблема... ALV съедает всю память ПК по мере ввода в него данных.

Каким образом можно это вылечить?

Заранее спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV_GRID пересчет сумм и модификация ячеек
СообщениеДобавлено: Пн, дек 28 2009, 15:08 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
slim написал(а):
По ходу работы появилась еще одна проблема... ALV съедает всю память ПК по мере ввода в него данных.

Каким образом можно это вылечить?

Заранее спасибо.


http://www.sapboard.ru/forum/viewtopic ... 4&start=15 ...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV_GRID пересчет сумм и модификация ячеек
СообщениеДобавлено: Пн, дек 28 2009, 18:40 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, авг 24 2007, 11:29
Сообщения: 350
Besa написал:
slim написал(а):
По ходу работы появилась еще одна проблема... ALV съедает всю память ПК по мере ввода в него данных.
Каким образом можно это вылечить?
Заранее спасибо.

http://www.sapboard.ru/forum/viewtopic ... 4&start=15 ...


Нет, я наверно не правильно объяснил, у меня заканчивается память не сервера приложений а оперативная память ПК у пользователя. Табличка моя не большая, всего 100x50, данные ввожу типа P. При вводе данных запускаю диспетчер задач и смотрю, что при каждом нововведенном значении увеличивается занимаемая память процесса saplogon.exe. Когда оперативная память заканчивается у меня вылетает дамп на ФМ flush(при вызове его самой системой).

Еще хочу добавить, что в основном всю память ест метод REFRESH_TABLE_DISPLAY, если делаю ER_DATA_CHANGED->MODIFY_CELL все работает гораздо быстрее и не забивает память. Из этого можно сделать вывод, что при REFRESH вся наша(визуальная) табличка скидывается в оперативную память ПК(не сервера приложений) и так до тех пора пока эта память не закончиться.

Следовательно возникают вопросы:
1. Возможно не очень корректно, но все же, можно ли как-нибудь очищать память выделяемую под процесс saplogon.exe из ABAP программы?
2. Как пересчитать суммы только по 1 столбцу без REFRESH_TABLE_DISPLAY?

Заранее спасибо!!!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV_GRID пересчет сумм и модификация ячеек
СообщениеДобавлено: Вт, дек 29 2009, 10:48 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
2 slim: наблюдал похожую проблему. Решилось установкой более нового патча на SAPgui. Попробуйте.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV_GRID пересчет сумм и модификация ячеек
СообщениеДобавлено: Вт, дек 29 2009, 12:57 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, авг 24 2007, 11:29
Сообщения: 350
Кодер написал(а):
2 slim: наблюдал похожую проблему. Решилось установкой более нового патча на SAPgui. Попробуйте.


Спасибо огромное :) именно это и помогло, у меня был SAP logon 710 патч 11, установил патч 14 и все заработало.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV_GRID пересчет сумм и модификация ячеек
СообщениеДобавлено: Чт, янв 21 2010, 13:50 
Почетный гуру
Почетный гуру

Зарегистрирован:
Пт, дек 04 2009, 12:52
Сообщения: 219
Была такая же проблема, с переполнением памяти, последний патч-левел все исправил.

Однако, если в гриде несколько тысяч строк и для нахождения доп. информации по строке будем рефрешить весь грид, то даже при "плавном" обновлении:
Code:
stable-row = 'X'.
stable-col = 'X'.
CALL METHOD grid->refresh_table_display( is_stable = stable ))
будет неприятное передергивание всего экрана, даже на мощном компе. Поэтому, правильнее делать нахождение зависимых полей в событии data_changed грида.
Вот пример (при вводе табельного номера, подтягивается ФИО):

Code:
  METHOD handle_data_changed.

    DATA:
      ls_good_cell      TYPE lvc_s_modi,
      l_subrc           TYPE sysubrc,
      l_msg_dummy       TYPE char1,
      l_zzpernr_txt     TYPE char1024.
    FIELD-SYMBOLS:
      <mod_cell>        TYPE lvc_s_modi.


*   обработка изменений ячеек
    LOOP AT er_data_changed->mt_good_cells INTO ls_good_cell.

      READ TABLE er_data_changed->mt_mod_cells ASSIGNING <mod_cell>
            WITH KEY row_id    = ls_good_cell-row_id
                     fieldname = ls_good_cell-fieldname.

      CASE ls_good_cell-fieldname.
        WHEN 'BDATU'.
*         .....

        WHEN 'ZZPERNR'.
*         при изменении табельного номера (ZZPERNR), подтягиваем ФИО (ZZPERNR_TXT)
          PERFORM get_zzpernr_txt USING    ls_good_cell-value
                                  CHANGING l_zzpernr_txt
                                           l_subrc.
          CALL METHOD er_data_changed->modify_cell
            EXPORTING
              i_row_id    = ls_good_cell-row_id
              i_tabix     = space
              i_fieldname = 'ZZPERNR_TXT'
              i_value     = l_zzpernr_txt.

          IF  l_subrc NE 0
          AND ls_good_cell-value NE '00000000'.
            <mod_cell>-error = 'X'.
            MESSAGE e001(00) WITH 'Табельный №' ls_good_cell-value 'не существует' INTO l_msg_dummy.
          ENDIF.

      ENDCASE.

      CHECK <mod_cell>-error NE space.

*     добавляем сообщение в лог
      CALL METHOD er_data_changed->add_protocol_entry
        EXPORTING
          i_msgid     = sy-msgid
          i_msgty     = sy-msgty
          i_msgno     = sy-msgno
          i_msgv1     = sy-msgv1
          i_msgv2     = sy-msgv2
          i_msgv3     = sy-msgv3
          i_msgv4     = sy-msgv4
          i_fieldname = ls_good_cell-fieldname
          i_row_id    = ls_good_cell-row_id
          i_tabix     = space.
    ENDLOOP.

  ENDMETHOD.                    "handle_data_changed


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ALV_GRID пересчет сумм и модификация ячеек
СообщениеДобавлено: Чт, янв 21 2010, 14:10 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Бородин Игорь написал(а):
Была такая же проблема, с переполнением памяти, последний патч-левел все исправил.

Однако, если в гриде несколько тысяч строк и для нахождения доп. информации по строке будем рефрешить весь грид, то даже при "плавном" обновлении:
Code:
stable-row = 'X'.
stable-col = 'X'.
CALL METHOD grid->refresh_table_display( is_stable = stable ))
будет неприятное передергивание всего экрана, даже на мощном компе. Поэтому, правильнее делать нахождение зависимых полей в событии data_changed грида.
Вот пример (при вводе табельного номера, подтягивается ФИО):
[/code]


Мда..организовывать ввод данных в ALV с большИм количеством данных - вы не находите, что это сам по себе неправильный подход для R/3? :?

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV_GRID пересчет сумм и модификация ячеек
СообщениеДобавлено: Чт, янв 21 2010, 14:29 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, авг 24 2007, 11:29
Сообщения: 350
Спасибо за ответы :)

Удав написал(а):
Мда..организовывать ввод данных в ALV с большИм количеством данных - вы не находите, что это сам по себе неправильный подход для R/3? :?


А если есть такая необходимость, какие есть альтернативы? На экранных таблицах делать не очень красиво.
Темболее в ALV с большим объемом данных не обязательно же вводить все поля. Просто разработчик предоставляет быстрое и удобное изменение данных.

Свои проблемы решил:
1. Обновление ячейки grid1 из data_chenge grid1 реализовал аналогично как "Бородин Игорь"
2. Обновление ячейки grid2 из data_chenge grid1

Code:
        REFRESH LT_MODI.
        LS_MODI-ROW_ID = LS_GOOD-ROW_ID.
        LS_MODI-FIELDNAME = 'ZRMEND'.
        LS_MODI-VALUE = <LV_OST_END>.
        APPEND LS_MODI TO LT_MODI.

        GO_GRID2->CHANGE_DATA_FROM_INSIDE( EXPORTING  IT_STYLE_CELLS  = LT_MODI
                                           IMPORTING  ET_BAD_CELLS    = LT_MODI_IM
                                                      ET_MSG          = LT_MSG_IM ).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV_GRID пересчет сумм и модификация ячеек
СообщениеДобавлено: Чт, янв 21 2010, 15:06 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Цитата:
А если есть такая необходимость, какие есть альтернативы?

В чем заключается необходимость выбирать кучу данных, чтобы редактировать одну строку?
Для выбора нужного документа существует понятие "Средство поиска". :rtfm:
Цитата:
На экранных таблицах делать не очень красиво.

Зато быстродействие намного выше и нет проблем с памятью.

Цитата:
Просто разработчик предоставляет быстрое и удобное изменение данных.

особенно понравилось "быстрое" :)

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV_GRID пересчет сумм и модификация ячеек
СообщениеДобавлено: Чт, янв 21 2010, 15:27 
Почетный гуру
Почетный гуру

Зарегистрирован:
Пт, дек 04 2009, 12:52
Сообщения: 219
Цитата:
В чем заключается необходимость выбирать кучу данных, чтобы редактировать одну строку?

Как говорится, Се-ля-ви... есть ТЗ и возражения не принимаются...
а пример из жизни - пожалуйста... в грид выбирается несколько тысяч ТАП-ов, пользователь корректирует в них, скажем, код назначения платежа и др.реквизиты (при этом, для наглядности, в соотв.поле строки должно подтягиваться его наименование)... редактировать основную массу строк можно, выделив их маркерами в левой части грида, и применив к ним выбранное на специальном экране значение, а уже после этого, точечно, в отдельных строках, поменять на другое значение (вот этом случае и необходимо текст для кодов подтягивать в data_changed, иначе подтормаживает грид)... затем, когда необходимые корректировки сделаны, требуемые строки выделяются и массово отправляются в другую обработку, скажем, в программу платежей :roll:


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

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Работает у нас такая задача.
REFRESH_TABLE_DISPLAY нужно вызывать только один раз - когда данные массово изменены, переданы в программу платежей, или даже уже обработаны в ней.
Никаких неудобств от "передергивания" экрана пользователи не испытывают. Намного больше времени занимают сама обработка данных ;)

Ну и пользователей нужно обучать заполнять критерии выбора на 1-м экране.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

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


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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