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

OO ALV dump TABLE_FREE_IN_LOOP



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
murka
Участник
Участник


Age: 41
Joined: 03 Jul 2009
Posts: 10
Location: Lithuania

PostPosted: Fri Jul 03, 2009 2:43 pm    Post subject: OO ALV dump TABLE_FREE_IN_LOOP Reply with quote

Всем привет !
Создала редактируемый ALV greed. На Меню evente SAVE, есть проверка:

CALL METHOD v_alv_grid_0204->check_changed_data
IMPORTING
e_valid = l_valid
CHANGING
c_refresh = l_refresh.

Поля прописаны так:

wa_fld_cat-dtel_name = 'MATNR'.
wa_fld_cat-fld_name = 'FL1S'.
wa_fld_cat-edit = 'X'.
wa_fld_cat-f4availabl = 'X'.
wa_fld_cat-ref_field = 'MATNR'.
wa_fld_cat-ref_table = 'MARA'.
wa_fld_cat-checktable = 'MARA'.

Так вот, когда стираю значение в клетке 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 ничего не нарыла Sad

Вся надежда на вас. Rolling Eyes

Есть идеи ?

_________________
Если долго мучиться, что-нибудь получится
Back to top
View user's profile Send private message
vga
Мастер
Мастер


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

PostPosted: Fri Jul 03, 2009 4:50 pm    Post subject: Reply with quote

Здравствуйте!
Чтобы не разбираться с дампами при неправильном постороении fieldcatalog, рекомендую создать струкруту в словаре и на ее основе
заполнять fieldcatalog, используя:

Code:
DATA:  gt_fcat TYPE lvc_t_fcat.

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
       EXPORTING
            i_structure_name = 'Z_MY_STRUCT'
       CHANGING
            ct_fieldcat      = gt_fcat
       EXCEPTIONS
            OTHERS           = 0.
Back to top
View user's profile Send private message Blog Visit poster's website
murka
Участник
Участник


Age: 41
Joined: 03 Jul 2009
Posts: 10
Location: Lithuania

PostPosted: Tue Jul 07, 2009 2:28 pm    Post subject: Reply with quote

Не грешу на fieldcatalog - данные таким образом заполняю давно и все OK.
Заметила, что дамп получается только если в PAI была валидация с warning msg, a далее нажата F4. Когда пробую валидацию сделать в handle data_changed, дампа нет, но мне это решение не подходит.
Также если был warning и не было F4, а значение ввели руками, всё OK.

Буду искать новые места для валидаций и warningov.

И конечно буду благодарна за новые идеи.

_________________
Если долго мучиться, что-нибудь получится
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Tue Jul 07, 2009 7:54 pm    Post subject: Reply with quote

murka wrote:
Когда пробую валидацию сделать в handle data_changed, дампа нет, но мне это решение не подходит.

А почему не подходит? Surprised

ЗЫ: Неплохо бы побольше кусочек дампа увидеть

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
murka
Участник
Участник


Age: 41
Joined: 03 Jul 2009
Posts: 10
Location: Lithuania

PostPosted: Wed Jul 08, 2009 10:28 am    Post subject: Reply with quote

Удав wrote:
murka wrote:
Когда пробую валидацию сделать в handle data_changed, дампа нет, но мне это решение не подходит.

А почему не подходит? Surprised

ЗЫ: Неплохо бы побольше кусочек дампа увидеть


А потому, что надо проверить данные перед сохранением, а не когда юзер нажимает '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" "TABLE_FREE_IN_LOOP"

"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 и дампа нету. Если ничего не наиду лучше, то это и будет моей обходной дорогой. Эх.. Crying or Very sad

_________________
Если долго мучиться, что-нибудь получится
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Wed Jul 08, 2009 12:12 pm    Post subject: Reply with quote

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" "TABLE_FREE_IN_LOOP"

"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.

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
murka
Участник
Участник


Age: 41
Joined: 03 Jul 2009
Posts: 10
Location: Lithuania

PostPosted: Wed Jul 08, 2009 12:36 pm    Post subject: Reply with quote

Удав wrote:
murka wrote:
А потому, что надо проверить данные перед сохранением, а не когда юзер нажимает '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 Question


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" "TABLE_FREE_IN_LOOP"

"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.

CREATE OBJECT v_rf_event_recv_0204
EXPORTING
itp_grid_num = 1
itp_screen_num = 0204.

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( ).

ELSE .
CALL METHOD v_alv_grid_0204->refresh_table_display.
CALL METHOD cl_gui_cfw=>flush.
ENDIF.

PBO

CASE save_ok.
when 'SAVE'.

...

CALL METHOD v_alv_grid_0204->check_changed_data
IMPORTING
e_valid =
l_valid
CHANGING
c_refresh = l_refresh.


....
MESSAGE w019.
return.

....

endcase.

.....

handle_data_changed

пусто

----------------------------------------------------------


Если включить debug, то получиться:

стираю значение, жму SAVE -> handle_data_changed -> PAI SAVE -> message W -> жму F4 и выбираю значение -> handle_data_changed -> dump

_________________
Если долго мучиться, что-нибудь получится
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Wed Jul 08, 2009 12:53 pm    Post subject: Reply with quote

Вместо message w сделайте заполнение протокола в handle_data_changed - см. программу BCALV_EDIT_03
_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
murka
Участник
Участник


Age: 41
Joined: 03 Jul 2009
Posts: 10
Location: Lithuania

PostPosted: Wed Jul 08, 2009 2:19 pm    Post subject: Reply with quote

Удав wrote:
Вместо message w сделайте заполнение протокола в handle_data_changed - см. программу BCALV_EDIT_03


Спасибо, буду разбираться. Smile

_________________
Если долго мучиться, что-нибудь получится
Back to top
View user's profile Send private message
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.