Так вот, когда стираю значение в клетке greeda (cell),
жму SAVE, который вызывает check_changed_data,
далее с F4 выбираю новое значение, получаю DUMP :
TABLE_FREE_IN_LOOP
вот тут:
"CL_GUI_ALV_GRID===============CP"
"CL_GUI_ALV_GRID===============CM02Y"
"DELTA_REFRESH"
В SAP Notes и на SDN ничего не нарыла
Вся надежда на вас.
Есть идеи ? _________________ Если долго мучиться, что-нибудь получится
Age: 165 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Fri Jul 03, 2009 4:50 pm Post subject:
Здравствуйте!
Чтобы не разбираться с дампами при неправильном постороении fieldcatalog, рекомендую создать струкруту в словаре и на ее основе
заполнять fieldcatalog, используя:
Не грешу на fieldcatalog - данные таким образом заполняю давно и все OK.
Заметила, что дамп получается только если в PAI была валидация с warning msg, a далее нажата F4. Когда пробую валидацию сделать в handle data_changed, дампа нет, но мне это решение не подходит.
Также если был warning и не было F4, а значение ввели руками, всё OK.
Буду искать новые места для валидаций и warningov.
И конечно буду благодарна за новые идеи. _________________ Если долго мучиться, что-нибудь получится
Когда пробую валидацию сделать в handle data_changed, дампа нет, но мне это решение не подходит.
А почему не подходит?
ЗЫ: Неплохо бы побольше кусочек дампа увидеть
А потому, что надо проверить данные перед сохранением, а не когда юзер нажимает 'new entry' и пошагово заполняет.
А вот кусочек дампа:
-------------------------------------------------------------------------------
Runtime Errors TABLE_FREE_IN_LOOP
At a LOOP over an internal table, it is not allowed to be changed.
At a LOOP over an internal table, the table is not allowed to be changed
in the loop tail as a whole.
SORT, MOVE, REFRESH, CLEAR are, for example, not allowed.
"CL_GUI_ALV_GRID===============CP" or "CL_GUI_ALV_GRID===============CM02Y"
"DELTA_REFRESH"
Information on where terminated
Termination occurred in the ABAP program "CL_GUI_ALV_GRID===============CP" -
in "DELTA_REFRESH".
The main program was "ZREP_AUTOCARD ".
In the source code you have the termination point in line 267
of the (Include) program "CL_GUI_ALV_GRID===============CM02Y".
место кода, где происходит дамп:
261 loop at mt_roid_front into ls_row_no
262 where not sub_row_id is initial.
263 insert ls_row_no into lt_row_no_new index sy-tabix.
264 endloop.
265
266 clear ct_deleted_rows.
>>>>> <tab1> = <tab2>.
268
Заменила message на фм POPUP_TO_INFORM и дампа нету. Если ничего не наиду лучше, то это и будет моей обходной дорогой. Эх.. _________________ Если долго мучиться, что-нибудь получится
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Wed Jul 08, 2009 12:12 pm Post subject:
murka wrote:
А потому, что надо проверить данные перед сохранением, а не когда юзер нажимает 'new entry' и пошагово заполняет.
Эта проблема решается вводом глобальной переменной, например CHECK_ALLOWED.
Изначально она будет пустая, а перед выполнением метода check_changed_data можно присвоить ей значение 'X'.
И в handle_data_changed реализовать проверку только в том случае, если CHECK_ALLOWED = 'X'
murka wrote:
А вот кусочек дампа:
-------------------------------------------------------------------------------
Runtime Errors TABLE_FREE_IN_LOOP
At a LOOP over an internal table, it is not allowed to be changed.
At a LOOP over an internal table, the table is not allowed to be changed
in the loop tail as a whole.
SORT, MOVE, REFRESH, CLEAR are, for example, not allowed.
"CL_GUI_ALV_GRID===============CP" or "CL_GUI_ALV_GRID===============CM02Y"
"DELTA_REFRESH"
Information on where terminated
Termination occurred in the ABAP program "CL_GUI_ALV_GRID===============CP" -
in "DELTA_REFRESH".
The main program was "ZREP_AUTOCARD ".
In the source code you have the termination point in line 267
of the (Include) program "CL_GUI_ALV_GRID===============CM02Y".
место кода, где происходит дамп:
261 loop at mt_roid_front into ls_row_no
262 where not sub_row_id is initial.
263 insert ls_row_no into lt_row_no_new index sy-tabix.
264 endloop.
265
266 clear ct_deleted_rows.
>>>>> <tab1> = <tab2>.
268
Можно еще иерархию вызовов привести? Важно посмотреть, откуда вызвался метод DELTA_REFRESH. _________________ С уважением,
Удав.
А потому, что надо проверить данные перед сохранением, а не когда юзер нажимает 'new entry' и пошагово заполняет.
Эта проблема решается вводом глобальной переменной, например CHECK_ALLOWED.
Изначально она будет пустая, а перед выполнением метода check_changed_data можно присвоить ей значение 'X'.
И в handle_data_changed реализовать проверку только в том случае, если CHECK_ALLOWED = 'X'
Quote:
Пробовала так делать перед написанием этого поста. Проблема в том, что при вводе данных несколько раз вызывается handle changed_data и только после жмётся SAVE и handle changed_data больше не вызывается. Вот если бы как то вызвать после SAVE handle changed_data
murka wrote:
А вот кусочек дампа:
-------------------------------------------------------------------------------
Runtime Errors TABLE_FREE_IN_LOOP
At a LOOP over an internal table, it is not allowed to be changed.
At a LOOP over an internal table, the table is not allowed to be changed
in the loop tail as a whole.
SORT, MOVE, REFRESH, CLEAR are, for example, not allowed.
"CL_GUI_ALV_GRID===============CP" or "CL_GUI_ALV_GRID===============CM02Y"
"DELTA_REFRESH"
Information on where terminated
Termination occurred in the ABAP program "CL_GUI_ALV_GRID===============CP" -
in "DELTA_REFRESH".
The main program was "ZREP_AUTOCARD ".
In the source code you have the termination point in line 267
of the (Include) program "CL_GUI_ALV_GRID===============CM02Y".
место кода, где происходит дамп:
261 loop at mt_roid_front into ls_row_no
262 where not sub_row_id is initial.
263 insert ls_row_no into lt_row_no_new index sy-tabix.
264 endloop.
265
266 clear ct_deleted_rows.
>>>>> <tab1> = <tab2>.
268
Можно еще иерархию вызовов привести? Важно посмотреть, откуда вызвался метод DELTA_REFRESH.
PAIрисуется ALV greed
IF v_alv_container_0204 IS INITIAL.
....
CALL METHOD v_alv_grid_0204->set_table_for_first_display
....
CALL METHOD v_alv_grid_0204->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified. "mc_evt_enter.
SET HANDLER v_rf_event_recv_0204->handle_data_changed FOR v_alv_grid_0204.
SET HANDLER v_rf_event_recv_0204->handle_toolbar FOR v_alv_grid_0204.
v_alv_grid_0204->set_toolbar_interactive( ).
стираю значение, жму SAVE -> handle_data_changed -> PAI SAVE -> message W -> жму F4 и выбираю значение -> handle_data_changed -> dump _________________ Если долго мучиться, что-нибудь получится
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.