Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => Тема начата: Паганель от Апрель 09, 2009, 01:13:56 pm

Название: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Паганель от Апрель 09, 2009, 01:13:56 pm
Вообщем ситуация такая: была (и есть  ;-) ) ФМ-ка в которую передавались список позиций для проводки и производился вызов

Код: You are not allowed to view links. Register or Login
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 (http://sapforum.biz/index.php?topic=567.0),
так вот как бы сделать так что бы если в 2-вой части произошла (при втором вызове BAPI_GOODSMVT_CREATE ), отменялись изменения (создание документов материал) сделанные при первом вызове?

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

Где то слышал что есть конструкция, которая позволяет запускать ФМ, транзакции и т.д.
в контексте одной LUW?
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Паганель от Апрель 09, 2009, 01:58:33 pm
Пока сделал после вызова обоих форм
Код: You are not allowed to view links. Register or Login
  IF err = 'X'.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    RAISE er_gm.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      WAIT = 'X'.
  ENDIF.
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Паганель от Апрель 09, 2009, 02:53:10 pm
Что никто не знает?
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Uukrul от Апрель 09, 2009, 04:01:43 pm
You are not allowed to view links. Register or Login
Что никто не знает?
Данная ФМ CALL FUNCTION 'BAPI_GOODSMVT_CREATE', не является повторно вызываемой, так что никак!
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Паганель от Апрель 09, 2009, 04:08:00 pm
You are not allowed to view links. Register or Login
Данная ФМ CALL FUNCTION 'BAPI_GOODSMVT_CREATE', не является повторно вызываемой, так что никак!

А что значит
Цитировать
повторно вызываемой
?
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Dmitriy от Апрель 09, 2009, 04:52:18 pm
You are not allowed to view links. Register or Login
так вот как бы сделать так что бы если в 2-вой части произошла (при втором вызове BAPI_GOODSMVT_CREATE ), отменялись изменения (создание документов материал) сделанные при первом вызове?
Паганель, в следующий раз, когда будешь задавать вопрос, представь, что читать его будет не телепат... ;D ;D ;D
Если я правильно понял, то внутри ФМ у тебя организованы 2 цикла по внутренним таблицам, в каждом из которых осуществляются массовые проводки движения материалов посредством указанного BAPI. Вопрос: зачем 2 цикла, неужели нельзя точно определить, что тебе необходимо провести, а что нет? Как-то не совсем стройный алгоритм в плане здравого смысла и быстродействия: проводим, чтобы потом откатить... ??? 
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Паганель от Апрель 09, 2009, 04:55:16 pm
You are not allowed to view links. Register or Login
Паганель, в следующий раз, когда будешь задавать вопрос, представь, что читать его будет не телепат... ;D ;D ;D

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

You are not allowed to view links. Register or Login
Если я правильно понял, то внутри ФМ у тебя организованы 2 цикла по внутренним таблицам, в каждом из которых осуществляются массовые проводки движения материалов посредством указанного BAPI. Вопрос: зачем 2 цикла, неужели нельзя точно определить, что тебе необходимо провести, а что нет? Как-то не совсем стройный алгоритм в плане здравого смысла и быстродействия: проводим, чтобы потом откатить... ??? 

Такой так сказать, бизнес-процесс, надо сначала провести все Дт, а потом Кт.
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Паганель от Апрель 09, 2009, 04:56:21 pm
Первый цыкл - приходует Готовую продукцию, второй - списывает Сырье.
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Uukrul от Апрель 09, 2009, 05:23:58 pm
You are not allowed to view links. Register or Login
А что значит ?
Это значит, что пока данные будут не откоммичены, повторный вызов этой ФМ невозможен... получишь ошибку. Так что кина не будет, вариант только остается  с логированем выполненных действий, чтобы в случае войны откатить все приходы по которым не получились отпуски.
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Uukrul от Апрель 09, 2009, 05:24:29 pm
Кстати, а что мешает делать в одном документе приход и расход?
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Паганель от Апрель 09, 2009, 05:54:36 pm
точно не скажу, типа получилось что суммы проводок нулевые (типа система видет что делаем + потом -, значит не меняется себестоимость)

короче расспрошу и разберусь отвечу
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Паганель от Апрель 09, 2009, 05:55:47 pm
You are not allowed to view links. Register or Login
Это значит, что пока данные будут не откоммичены, повторный вызов этой ФМ невозможен... получишь ошибку. Так что кина не будет, вариант только остается  с логированем выполненных действий, чтобы в случае войны откатить все приходы по которым не получились отпуски.

ага для полной ж.... счастььььья в смысле  :(, еще не хватало мне делать обратные проводки, такое вылезет, перевое так это себестоимость
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Uukrul от Апрель 09, 2009, 10:35:13 pm
You are not allowed to view links. Register or Login
ага для полной ж.... счастььььья в смысле  :(, еще не хватало мне делать обратные проводки, такое вылезет, перевое так это себестоимость
Куда вылезет и зачем вылезет? Опять же что-то мне подсказывает, что явно у вас с идеологией не в порядке...
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Паганель от Апрель 10, 2009, 09:23:32 am
You are not allowed to view links. Register or Login
Куда вылезет и зачем вылезет? Опять же что-то мне подсказывает, что явно у вас с идеологией не в порядке...
долго рассказывать, потом как то ..... может быть  ;-)
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Uukrul от Апрель 10, 2009, 09:26:01 am
You are not allowed to view links. Register or Login
долго рассказывать, потом как то ..... может быть  ;-)
Тогда как бы не ясен вопрос и дальнейшее развитие темы... а посему значит тема закрывается до снятия завесы секретности с процессов, которые пытаются автоматизировать, на срок как я понимаю минимум 50 лет, а значит мало кто доживет до этих времен!
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Паганель от Май 07, 2009, 02:25:37 pm
You are not allowed to view links. Register or Login
Данная ФМ CALL FUNCTION 'BAPI_GOODSMVT_CREATE', не является повторно вызываемой, так что никак!

Хорошо, а если ФМ все-таки является "повторно вызываемой" то как тогда поступать? Какая языковая конструкция?
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Uukrul от Май 07, 2009, 02:47:46 pm
You are not allowed to view links. Register or Login
Хорошо, а если ФМ все-таки является "повторно вызываемой" то как тогда поступать? Какая языковая конструкция?
call ФМ1
call ФМ1
COMMIT WORK.
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Паганель от Май 07, 2009, 03:30:41 pm
You are not allowed to view links. Register or Login
call ФМ1
call ФМ1
COMMIT WORK.

Просто однако .... хотя если roolback work - то должно все откатится  :)
Название: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Отправлено: Uukrul от Май 07, 2009, 03:35:06 pm
You are not allowed to view links. Register or Login
Просто однако .... хотя если roolback work - то должно все откатится  :)
Ну почему должно... откатиться, фактически это же группа записей вставленная в БД, так что если никакая зараза где-то в теле ФМ не вставили промежуточный COMMIT, то все и откатиться.