Вызов 2-х БАПИшек в одной транзакции (контексте)

Автор Паганель, Квітень 09, 2009, 01:13:56 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Паганель

Вообщем ситуация такая: была (и есть  ;-) ) ФМ-ка в которую передавались список позиций для проводки и производился вызов


IF gtitem[] IS NOT INITIAL.
    CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
     EXPORTING
      ......
     TABLES
       goodsmvt_item    = gitem
       return           = gt_bapiret2.

     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
     EXPORTING
       wait = 'X'.

....
Теперь приходится разделять данную ФМ на 2 цикла с вызовом BAPI_GOODSMVT_CREATE  см. http://sapforum.biz/index.php?topic=567.0,
так вот как бы сделать так что бы если в 2-вой части произошла (при втором вызове BAPI_GOODSMVT_CREATE ), отменялись изменения (создание документов материал) сделанные при первом вызове?

Достаточно ли будет только после обоих вызовов сделать
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' или еще какие то телодвижения нужны?

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

Паганель

Пока сделал после вызова обоих форм

  IF err = 'X'.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    RAISE er_gm.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      WAIT = 'X'.
  ENDIF.


Uukrul

Цитата: Паганель від Квітень 09, 2009, 02:53:10 ПП
Что никто не знает?
Данная ФМ CALL FUNCTION 'BAPI_GOODSMVT_CREATE', не является повторно вызываемой, так что никак!

Паганель

Цитата: Uukrul від Квітень 09, 2009, 04:01:43 ПП
Данная ФМ CALL FUNCTION 'BAPI_GOODSMVT_CREATE', не является повторно вызываемой, так что никак!

А что значит
Цитатаповторно вызываемой
?

Dmitriy

Цитата: Паганель від Квітень 09, 2009, 01:13:56 ПП
так вот как бы сделать так что бы если в 2-вой части произошла (при втором вызове BAPI_GOODSMVT_CREATE ), отменялись изменения (создание документов материал) сделанные при первом вызове?
Паганель, в следующий раз, когда будешь задавать вопрос, представь, что читать его будет не телепат... ;D ;D ;D
Если я правильно понял, то внутри ФМ у тебя организованы 2 цикла по внутренним таблицам, в каждом из которых осуществляются массовые проводки движения материалов посредством указанного BAPI. Вопрос: зачем 2 цикла, неужели нельзя точно определить, что тебе необходимо провести, а что нет? Как-то не совсем стройный алгоритм в плане здравого смысла и быстродействия: проводим, чтобы потом откатить... ??? 

Паганель

Цитата: Dmitriy від Квітень 09, 2009, 04:52:18 ПП
Паганель, в следующий раз, когда будешь задавать вопрос, представь, что читать его будет не телепат... ;D ;D ;D

Да вроде бы понятно написал, ну ладно, буду старатся, ссори  :)

Цитата: Dmitriy від Квітень 09, 2009, 04:52:18 ПП
Если я правильно понял, то внутри ФМ у тебя организованы 2 цикла по внутренним таблицам, в каждом из которых осуществляются массовые проводки движения материалов посредством указанного BAPI. Вопрос: зачем 2 цикла, неужели нельзя точно определить, что тебе необходимо провести, а что нет? Как-то не совсем стройный алгоритм в плане здравого смысла и быстродействия: проводим, чтобы потом откатить... ??? 

Такой так сказать, бизнес-процесс, надо сначала провести все Дт, а потом Кт.

Паганель

Первый цыкл - приходует Готовую продукцию, второй - списывает Сырье.

Uukrul

Цитата: Паганель від Квітень 09, 2009, 04:08:00 ПП
А что значит ?
Это значит, что пока данные будут не откоммичены, повторный вызов этой ФМ невозможен... получишь ошибку. Так что кина не будет, вариант только остается  с логированем выполненных действий, чтобы в случае войны откатить все приходы по которым не получились отпуски.

Uukrul

Кстати, а что мешает делать в одном документе приход и расход?

Паганель

точно не скажу, типа получилось что суммы проводок нулевые (типа система видет что делаем + потом -, значит не меняется себестоимость)

короче расспрошу и разберусь отвечу

Паганель

Цитата: Uukrul від Квітень 09, 2009, 05:23:58 ПП
Это значит, что пока данные будут не откоммичены, повторный вызов этой ФМ невозможен... получишь ошибку. Так что кина не будет, вариант только остается  с логированем выполненных действий, чтобы в случае войны откатить все приходы по которым не получились отпуски.

ага для полной ж.... счастььььья в смысле  :(, еще не хватало мне делать обратные проводки, такое вылезет, перевое так это себестоимость

Uukrul

Цитата: Паганель від Квітень 09, 2009, 05:55:47 ПП
ага для полной ж.... счастььььья в смысле  :(, еще не хватало мне делать обратные проводки, такое вылезет, перевое так это себестоимость
Куда вылезет и зачем вылезет? Опять же что-то мне подсказывает, что явно у вас с идеологией не в порядке...

Паганель

Цитата: Uukrul від Квітень 09, 2009, 10:35:13 ПП
Куда вылезет и зачем вылезет? Опять же что-то мне подсказывает, что явно у вас с идеологией не в порядке...
долго рассказывать, потом как то ..... может быть  ;-)

Uukrul

Цитата: Паганель від Квітень 10, 2009, 09:23:32 ДП
долго рассказывать, потом как то ..... может быть  ;-)
Тогда как бы не ясен вопрос и дальнейшее развитие темы... а посему значит тема закрывается до снятия завесы секретности с процессов, которые пытаются автоматизировать, на срок как я понимаю минимум 50 лет, а значит мало кто доживет до этих времен!

Паганель

Цитата: Uukrul від Квітень 09, 2009, 04:01:43 ПП
Данная ФМ CALL FUNCTION 'BAPI_GOODSMVT_CREATE', не является повторно вызываемой, так что никак!

Хорошо, а если ФМ все-таки является "повторно вызываемой" то как тогда поступать? Какая языковая конструкция?

Uukrul

Цитата: Паганель від Травень 07, 2009, 02:25:37 ПП
Хорошо, а если ФМ все-таки является "повторно вызываемой" то как тогда поступать? Какая языковая конструкция?
call ФМ1
call ФМ1
COMMIT WORK.


Uukrul

Цитата: Паганель від Травень 07, 2009, 03:30:41 ПП
Просто однако .... хотя если roolback work - то должно все откатится  :)
Ну почему должно... откатиться, фактически это же группа записей вставленная в БД, так что если никакая зараза где-то в теле ФМ не вставили промежуточный COMMIT, то все и откатиться.

SMF spam blocked by CleanTalk