SAPфорум.RU
https://sapboard.ru/forum/

CALL FUNCTION '' IN UPDATE TASK
https://sapboard.ru/forum/viewtopic.php?f=13&t=13945
Страница 2 из 2

Автор:  trop [ Ср, апр 12 2006, 13:53 ]
Заголовок сообщения:  ку

все просто - commit work [and wait] и rollback work завершают luw.

если commit вызвать внутри ф/м in update task, т.е. "внутри" luw,
текущий luw разделится на два luw-а, и первый всегда будет
завершаться commit-ом.
аналогично с rollback.

проще говоря - вызывающий процесс теряет управление

Автор:  Димкин [ Ср, апр 12 2006, 15:21 ]
Заголовок сообщения: 

А что делать, если в модуле IN UPDATE TASK произошла ошибка?
К примеру пытаемся добавить запись, а с таким ключем уже есть.

Автор:  Loyso [ Ср, апр 12 2006, 15:29 ]
Заголовок сообщения: 

Димкин написал(а):
А что делать, если в модуле IN UPDATE TASK произошла ошибка?
К примеру пытаемся добавить запись, а с таким ключем уже есть.


ИМХО проверять перед тем как добавить

Автор:  Сергей Королев [ Ср, апр 12 2006, 15:37 ]
Заголовок сообщения: 

Димкин написал(а):
А что делать, если в модуле IN UPDATE TASK произошла ошибка?
К примеру пытаемся добавить запись, а с таким ключем уже есть.

Во-первых, пользователю, от имени которого было сделано обновление, придет экспресс сообщение о том, что Update не прошел, во-вторых, информация об ошибочных обновлениях будет отображена в транзакции SM13, оттуда же можно посмотреть дамп.

Автор:  nicky555 [ Чт, апр 13 2006, 07:49 ]
Заголовок сообщения: 

... добавлю, что некоторые обновления можно "дотолкать", исправив ошибку.

Автор:  Димкин [ Чт, апр 13 2006, 09:23 ]
Заголовок сообщения: 

Димкин написал(а):
А что делать, если в модуле IN UPDATE TASK произошла ошибка?
К примеру пытаемся добавить запись, а с таким ключем уже есть.


Я неправильно задал вопрос.
Какой оператор писать. Ведь rollback писать нельзя.
Или достаточно raise и произойдет откат.

Например, как посоветовал Loyso проверяем:

Code:
data key_field_tmp like tab1-key_field.
select single key_field into key_field_tmp from tab1
    where key_field = my_value.
if sy-subrc = 0.
* Такая запись уже есть, где-то раньше произошла ошибка -
* необходимо откатить транзакцию
*ЧТО СЮДА ПИСАТЬ - raise?
endif.
insert ... into tab1.

Автор:  Сергей Королев [ Чт, апр 13 2006, 09:49 ]
Заголовок сообщения: 

Можно RAISE, можно MESSAGE типа E или A.
Кстати, SELECT перед INSERT'ом лишний, можно SY-SUBRC после Insert'а проверить.

Автор:  HanibaL [ Пт, янв 19 2018, 11:21 ]
Заголовок сообщения:  Re: CALL FUNCTION '' IN UPDATE TASK

Добрый день.

В тему обновления таблиц: есть задача по списку ТН обновить кластерную и свою Z-таблицу. Кластерная обновляется через ФМ по одному ТН. Как правильно сделать так, чтобы либо весь список ТН обновился в обеих таблицах, либо весь не обновился. В ФМ обновления кластерной таблицы параметра NO_COMMIT нет.
Думал сделать в цикле обновить кластерную таблицу, и если не одной ошибки не возникло, то сделать обновление z-таблицы через ФМ обновления. Но как-то это некрасиво что ли...

Автор:  Rizor [ Пт, янв 19 2018, 13:42 ]
Заголовок сообщения:  Re: CALL FUNCTION '' IN UPDATE TASK

HanibaL написал(а):
Добрый день.
В тему обновления таблиц: есть задача по списку ТН обновить кластерную и свою Z-таблицу. Кластерная обновляется через ФМ по одному ТН. Как правильно сделать так, чтобы либо весь список ТН обновился в обеих таблицах, либо весь не обновился. В ФМ обновления кластерной таблицы параметра NO_COMMIT нет.
Думал сделать в цикле обновить кластерную таблицу, и если не одной ошибки не возникло, то сделать обновление z-таблицы через ФМ обновления. Но как-то это некрасиво что ли...


Понять, вызывается ли commit work в ФМ-е.
Если да, и это не отключаемо, то о модулях обновления забыть, т.к. в них нельзя вызывать commit. Использовать некрасивый вариант.
Если нет, то обновление через ФМ в цикле пихать в один модуль обновления, обновление z-таблице во второй. При ошибке в любом из них, оба откатятся

Автор:  HanibaL [ Пт, янв 19 2018, 16:57 ]
Заголовок сообщения:  Re: CALL FUNCTION '' IN UPDATE TASK

Rizor написал(а):
HanibaL написал(а):
Добрый день.
В тему обновления таблиц: есть задача по списку ТН обновить кластерную и свою Z-таблицу. Кластерная обновляется через ФМ по одному ТН. Как правильно сделать так, чтобы либо весь список ТН обновился в обеих таблицах, либо весь не обновился. В ФМ обновления кластерной таблицы параметра NO_COMMIT нет.
Думал сделать в цикле обновить кластерную таблицу, и если не одной ошибки не возникло, то сделать обновление z-таблицы через ФМ обновления. Но как-то это некрасиво что ли...


Понять, вызывается ли commit work в ФМ-е.
Если да, и это не отключаемо, то о модулях обновления забыть, т.к. в них нельзя вызывать commit. Использовать некрасивый вариант.
Если нет, то обновление через ФМ в цикле пихать в один модуль обновления, обновление z-таблице во второй. При ошибке в любом из них, оба откатятся


Спасибо!
Буду копать ФМ кластера.

Автор:  Kuranov.Dmitry [ Пт, янв 19 2018, 17:03 ]
Заголовок сообщения:  Re: CALL FUNCTION '' IN UPDATE TASK

Rizor написал(а):
Понять, вызывается ли commit work в ФМ-е.
Если да, и это не отключаемо, то о модулях обновления забыть, т.к. в них нельзя вызывать commit. Использовать некрасивый вариант.

только если в ФМ обновления кластера есть коммит, то как потом в цикле откатить предыдущие вызовы если произошла ошибка обновления очередной записи?

Автор:  HanibaL [ Ср, янв 24 2018, 12:57 ]
Заголовок сообщения:  Re: CALL FUNCTION '' IN UPDATE TASK

Kuranov.Dmitry написал(а):
Rizor написал(а):
Понять, вызывается ли commit work в ФМ-е.
Если да, и это не отключаемо, то о модулях обновления забыть, т.к. в них нельзя вызывать commit. Использовать некрасивый вариант.

только если в ФМ обновления кластера есть коммит, то как потом в цикле откатить предыдущие вызовы если произошла ошибка обновления очередной записи?

В цикле собирать успешные. Если хотя бы один не сработал в ФМ обновления кластера, то вызывать по успешным тоже самое обновление, но только с предыдущими данными.

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/