Текущее время: Пт, июн 27 2025, 21:11

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Запись в таблици
СообщениеДобавлено: Пт, июл 08 2005, 11:49 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, ноя 10 2004, 16:39
Сообщения: 72
Пол: Мужской
Добрый день.
Пробую из экзита сделать изменение значения поля, в таблице EQUZ через UPDATE и закрепляю COMMIT WORKом. Да, значение меняю в поле которое находится в последней записи таблице(строке). Все получается но вот есть одна проблема после того как отрабатывает COMMIT основной программы, мое значение затирается старым (которое хранилось до изменения). Я так подозреваю что есть некий буфер из которого и происходит запись COMMITом в таблицу.
Может кто-нибудь сталкивался с похожей задачей, может как то можно получить доступ к структуре которая используется COMMITом для проверки изменений в таблицах или что-нидь подобное.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 08 2005, 12:27 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Значение затирается потому, что после вашего UPDATE срабатывают стандартные модули обновления. Сразу скажу, что прямой update - это нехорошо, но если все-таки очень надо, то в вашем случае следует использовать отложенный update, делается при помощью специальной функции обновления - делаете функциоанльный модуль и на закладке свойств указываете, что он является модулем обновления. Вызывать его надо конструкцией CALL FUNCTION ... IN UPDATE TASK. Чтобы ваш модуль гарантированно отработал после основных модулей обновления, нужно выбрать "Отложенное обновление" на закладке свойств. Хэлп про это здесь

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запись в таблици
СообщениеДобавлено: Пт, июл 08 2005, 12:43 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
FireWare написал:
Добрый день.
Пробую из экзита сделать изменение значения поля, в таблице EQUZ через UPDATE и закрепляю COMMIT WORKом. Да, значение меняю в поле которое находится в последней записи таблице(строке). Все получается но вот есть одна проблема после того как отрабатывает COMMIT основной программы, мое значение затирается старым (которое хранилось до изменения). Я так подозреваю что есть некий буфер из которого и происходит запись COMMITом в таблицу.
Может кто-нибудь сталкивался с похожей задачей, может как то можно получить доступ к структуре которая используется COMMITом для проверки изменений в таблицах или что-нидь подобное.


Ничего е понятно - где и какое значение затирается? Привидите пример кода, а то не описание, а какая-то каша. И не надо никуда лезьть - нужно просто чётко и правильно всё запрограммировать


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запись в таблици
СообщениеДобавлено: Пт, июл 08 2005, 12:48 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 07 2004, 10:39
Сообщения: 610
FireWare написал:
Добрый день.
Пробую из экзита сделать изменение значения поля, в таблице EQUZ через UPDATE и закрепляю COMMIT WORKом. Да, значение меняю в поле которое находится в последней записи таблице(строке). Все получается но вот есть одна проблема после того как отрабатывает COMMIT основной программы, мое значение затирается старым (которое хранилось до изменения). Я так подозреваю что есть некий буфер из которого и происходит запись COMMITом в таблицу.
Может кто-нибудь сталкивался с похожей задачей, может как то можно получить доступ к структуре которая используется COMMITом для проверки изменений в таблицах или что-нидь подобное.

скорее всего текущие значения во время выполнения транзакции хранятся в таблице, что нибудь вроде, XEQUZ, (или др-я буква), попробуй в этой таблице и менять, апдейт оставь самой транзакции

_________________
полный SAPец


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 08 2005, 13:39 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, ноя 10 2004, 16:39
Сообщения: 72
Пол: Мужской
Ок, дело обстоит так.
В таблице EQUZ создана доп. стр-ра в которой определены скажем два поля F1 и F2. EQUZ как известно служит для ведения временных периодов у ЕО (проще говоря отслеживает изменения ЕО, верней отдельных полей). Так вот мне необходимо сделать так, что при изменении одного из таких полей у ЕО, и перед тем как создастся новая запись в EQUZ, изменить значение поля в последней строке таблицы скажем F1 (EQUZ-F1).
Для этого очень удобно использовать экзит EXIT_SAPMIEQ0_001.
Вот тут я и делаю:

Code:
UPDATE EQUZ SET: F1  = 'ABCD'
                 WHERE F2 = '12345'  "Условие нахождения последней
                 and EQUNR = '00001 "строки в EQUZ
                 .
                 COMMIT WORK.

Все классно, поле принимает нужное мне значение, а вот дальше получается, когда выходим в основную программу (SAPMIEQ0 - [FORM EQUIPMENT_SAVE] ) и когда отрабатывает COMMIT WORK там:
- как и должно быть, происходит добавление новой строки в EQUZ,
- но при этом та строка в которой я делал изменения затирается такой-же только в первоначальном виде.
Елси этот CОMMIT проходить в отладчике по F5 то поподаем в очень интересную форму BUF_SAVE, где много интересного, тут и структура GLOBAL_EQUZ_BEF_TAB - так назовем первоначальные данные(той самой последней записи в EQUZe) и соответственно новая GLOBAL_EQUZ_AFT_TAB, вот какраз в старой стр-ре и хранится значение которое мне надо изменить, только вот как к ней добраться :(

Сорри если что за коломбур, вот как мог изложил свою проблемму, буду рад любому совету.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запись в таблици
СообщениеДобавлено: Пт, июл 08 2005, 13:44 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, ноя 10 2004, 16:39
Сообщения: 72
Пол: Мужской
slash написал(а):
скорее всего текущие значения во время выполнения транзакции хранятся в таблице, что нибудь вроде, XEQUZ, (или др-я буква), попробуй в этой таблице и менять, апдейт оставь самой транзакции


Да конечно на шел две структуры подозрительных называются:
*EQUZ и OLD_VEQUI
руками менял значение на то которое мне надо, но без результатно :roll:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запись в таблици
СообщениеДобавлено: Пт, июл 08 2005, 13:53 
Директор
Директор

Зарегистрирован:
Чт, май 12 2005, 11:10
Сообщения: 1038
Пол: Мужской
FireWare написал:
slash написал(а):
скорее всего текущие значения во время выполнения транзакции хранятся в таблице, что нибудь вроде, XEQUZ, (или др-я буква), попробуй в этой таблице и менять, апдейт оставь самой транзакции


Да конечно на шел две структуры подозрительных называются:
*EQUZ и OLD_VEQUI
руками менял значение на то которое мне надо, но без результатно :roll:


Помоему очень часто бывает так, что x<var_name> это старое значение, а y<var_name> это новое значение. Нет там таких?

Еще момент - это экзит вызван из какогото контекста. В том контексте переменные наверное остались со старыми значениями и меняться не собираются. Их можно "поправить" через
ASSIGN( (<имя_модуля_другого_контекста>)<имя_переменной_в_том_модуле>), на форуме были примеры.
Но это варварский способ.

Пример с IN UPDATE TASK наверное должен сработать, и он мне больше нравится.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 08 2005, 14:03 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, ноя 10 2004, 16:39
Сообщения: 72
Пол: Мужской
:) Пасиб, как раз над ним и тружусь...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 08 2005, 14:22 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
FireWare написал:
Ок, дело обстоит так.
В таблице EQUZ создана доп. стр-ра в которой определены скажем два поля F1 и F2. EQUZ как известно служит для ведения временных периодов у ЕО (проще говоря отслеживает изменения ЕО, верней отдельных полей). Так вот мне необходимо сделать так, что при изменении одного из таких полей у ЕО, и перед тем как создастся новая запись в EQUZ, изменить значение поля в последней строке таблицы скажем F1 (EQUZ-F1).
Для этого очень удобно использовать экзит EXIT_SAPMIEQ0_001.
Вот тут я и делаю:

Code:
UPDATE EQUZ SET: F1  = 'ABCD'
                 WHERE F2 = '12345'  "Условие нахождения последней
                 and EQUNR = '00001 "строки в EQUZ
                 .
                 COMMIT WORK.

...


Проблема в том, что UPDATE обновляет содержимое таблицы БД.
Программа же продолжает работать с переменной(рабочей областью, определённой оператором tables), содержащей старые значения и ничего не знает о том, что БД изменилась.
Как изменить EQUZ в главной програме - предложено в предыдущих сообщениях.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 08 2005, 14:27 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 01 2004, 07:44
Сообщения: 174
Цитата:
Для этого очень удобно использовать экзит EXIT_SAPMIEQ0_001.
Вот тут я и делаю:

Код:
UPDATE EQUZ SET: F1 = 'ABCD'
WHERE F2 = '12345' "Условие нахождения последней
and EQUNR = '00001 "строки в EQUZ
.
COMMIT WORK.


ну вы блин даете :shock:
только in update task


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB