Редактирование записей в Z* таблице

Автор Валентина, Березень 27, 2015, 09:00:06 ДП

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

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

Валентина

Уважаемые абаперы! Изучать ABAP я начала не так давно, поэтому не обессудьте. Проблема вот какая. Несколько пользователей одновременно используют z* таблицу для изменения данных. Одна и та же запись одновременно оказаться у разных пользователей не может. Когда изменения во внутренней таблицы произведены, происходит изменение z* таблицы. Для наглядности:
UPDATE zelzvi FROM TABLE lt_zelzvi.
      IF sy-subrc = 0.
          COMMIT WORK   AND WAIT.
          MESSAGE s055.
        ELSE.
          ROLLBACK WORK.
        ENDIF.

lt_zelzvi - внутренняя таблица с измененными данными. Проблема в том, что не все записи изменяются. И от чего это зависит не могу понять. И ситуацию такую сделать не могу, потому как не могу понять почему! Помогите кто чем может!

Uukrul

Цитата: Валентина від Березень 27, 2015, 09:00:06 ДП
lt_zelzvi - внутренняя таблица с измененными данными. Проблема в том, что не все записи изменяются. И от чего это зависит не могу понять. И ситуацию такую сделать не могу, потому как не могу понять почему! Помогите кто чем может!
Ну раз разные пользователи, то хотелось бы узнать каким образом вы разным пользователям не даете менять одну и туже запись. Т.е. показывайте свой механизм выбора записей во внутреннюю таблицу lt_zelzvi для изменений.

Валентина

select-ом выбираю данные из таблицы по введенным параметрам на селекционном экране
SELECT *
  INTO CORRESPONDING FIELDS OF TABLE lt_zelzvi
  FROM zelzvi
  WHERE
  dispo IN so_dispo AND
  werks = p_werks AND
  status IN s_status AND
  elzvblnr IN s_elznr AND
  matnr IN s_matnr AND
  fevor IN s_fevor AND
  gstrs_f IN s_gstrs.


И выкидываю блокированные позиции
CALL FUNCTION 'ENQUEUE_EZZELZVI'
*     EXPORTING   ELZVBLNR = ls_zelzvi-ELZVBLNR
*     EXCEPTIONS  FOREIGN_LOCK   = 1
*                 SYSTEM_FAILURE = 2.


ELZVBLNR - уникальный ключ

Uukrul

Цитата: Валентина від Березень 30, 2015, 01:51:12 ПП
CALL FUNCTION 'ENQUEUE_EZZELZVI'
*     EXPORTING   ELZVBLNR = ls_zelzvi-ELZVBLNR
*     EXCEPTIONS  FOREIGN_LOCK   = 1
*                 SYSTEM_FAILURE = 2.

А это вы из кода брали? Тогда не ясно почему у вас строки закомментированны, там где ключ и остальное. Вот этот символ * показывает что строка коментирована

Валентина

да, из кода, я пробовала уже несколько вариаций, в том числе и эту. Не помогло. Вернула обратно. Боюсь совсем сломать

Uukrul

Цитата: Валентина від Березень 31, 2015, 07:41:20 ДП
да, из кода, я пробовала уже несколько вариаций, в том числе и эту. Не помогло. Вернула обратно. Боюсь совсем сломать
Мда, ну раз вы вообще не понимаете что и как написано в программе, то могу только посочувствовать. Вы не правильной используете блокирование записей, поэтому затягиваете во внутреннюю таблицу данные которые изменяются другими пользователями, вот и происходит перезапись данных друг другом. Вообще очень советую начать читать с этой книги: http://sapforum.biz/index.php/topic,117.0.html иначе толку от вашего программирования будет очень мало  :-\