Sapforum.Biz

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

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


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 ПП
Пока сделал после вызова обоих форм

  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 ПП
Что никто не знает?
Назва: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Відправлено: Uukrul від Квітень 09, 2009, 04:01:43 ПП
Цитата: Паганель від Квітень 09, 2009, 02:53:10 ПП
Что никто не знает?
Данная ФМ CALL FUNCTION 'BAPI_GOODSMVT_CREATE', не является повторно вызываемой, так что никак!
Назва: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Відправлено: Паганель від Квітень 09, 2009, 04:08:00 ПП
Цитата: Uukrul від Квітень 09, 2009, 04:01:43 ПП
Данная ФМ CALL FUNCTION 'BAPI_GOODSMVT_CREATE', не является повторно вызываемой, так что никак!

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

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

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

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

короче расспрошу и разберусь отвечу
Назва: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Відправлено: Паганель від Квітень 09, 2009, 05:55:47 ПП
Цитата: Uukrul від Квітень 09, 2009, 05:23:58 ПП
Это значит, что пока данные будут не откоммичены, повторный вызов этой ФМ невозможен... получишь ошибку. Так что кина не будет, вариант только остается  с логированем выполненных действий, чтобы в случае войны откатить все приходы по которым не получились отпуски.

ага для полной ж.... счастььььья в смысле  :(, еще не хватало мне делать обратные проводки, такое вылезет, перевое так это себестоимость
Назва: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Відправлено: Uukrul від Квітень 09, 2009, 10:35:13 ПП
Цитата: Паганель від Квітень 09, 2009, 05:55:47 ПП
ага для полной ж.... счастььььья в смысле  :(, еще не хватало мне делать обратные проводки, такое вылезет, перевое так это себестоимость
Куда вылезет и зачем вылезет? Опять же что-то мне подсказывает, что явно у вас с идеологией не в порядке...
Назва: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Відправлено: Паганель від Квітень 10, 2009, 09:23:32 ДП
Цитата: Uukrul від Квітень 09, 2009, 10:35:13 ПП
Куда вылезет и зачем вылезет? Опять же что-то мне подсказывает, что явно у вас с идеологией не в порядке...
долго рассказывать, потом как то ..... может быть  ;-)
Назва: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Відправлено: Uukrul від Квітень 10, 2009, 09:26:01 ДП
Цитата: Паганель від Квітень 10, 2009, 09:23:32 ДП
долго рассказывать, потом как то ..... может быть  ;-)
Тогда как бы не ясен вопрос и дальнейшее развитие темы... а посему значит тема закрывается до снятия завесы секретности с процессов, которые пытаются автоматизировать, на срок как я понимаю минимум 50 лет, а значит мало кто доживет до этих времен!
Назва: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Відправлено: Паганель від Травень 07, 2009, 02:25:37 ПП
Цитата: Uukrul від Квітень 09, 2009, 04:01:43 ПП
Данная ФМ CALL FUNCTION 'BAPI_GOODSMVT_CREATE', не является повторно вызываемой, так что никак!

Хорошо, а если ФМ все-таки является "повторно вызываемой" то как тогда поступать? Какая языковая конструкция?
Назва: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Відправлено: Uukrul від Травень 07, 2009, 02:47:46 ПП
Цитата: Паганель від Травень 07, 2009, 02:25:37 ПП
Хорошо, а если ФМ все-таки является "повторно вызываемой" то как тогда поступать? Какая языковая конструкция?
call ФМ1
call ФМ1
COMMIT WORK.
Назва: Re: Вызов 2-х БАПИшек в одной транзакции (контексте)
Відправлено: Паганель від Травень 07, 2009, 03:30:41 ПП
Цитата: Uukrul від Травень 07, 2009, 02:47:46 ПП
call ФМ1
call ФМ1
COMMIT WORK.

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