Текущее время: Ср, июн 07 2023, 17:45

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Сброс/реинициализация SAPLGLO_FIAA_SCREENS после запуска bapi
СообщениеДобавлено: Пн, дек 26 2022, 21:02 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, июл 28 2016, 17:40
Сообщения: 69
Коллеги, привет!

Я не очень абапер, поэтому могу написать коряво. Простите заранее.
В учете основных средств есть группа функций SAPLGLO_FIAA_SCREENS с экранами полей национальной специфики типа параметров транспортного налога и т.п.
Обращение к полям этих экранов через конструкции типа
Code:
ASSIGN ('(SAPLGLO_FIAA_SCREENS)GLOFAAASSETDATA') TO <gs_asset>.

является достаточно популярный способом реализации проверок/замещений в ОС-ах.

У меня возникает проблема последовательного использования BAPI_FIXEDASSET_CREATE1 и BAPI_FIXEDASSET_CHANGE. Проблема, насколько я понимаю, кроется в том, что после коммита первого bapi в памяти остаются данные созданного ОСа (я вижу это по значениям структур (SAPLGLO_FIAA_SCREENS)GLOFAAASSETDATA и (SAPLGLO_FIAA_SCREENS)GLOFAATMDPNDNT). При работе BAPI_FIXEDASSET_CHANGE данные предыдущего (ранее созданного) ОС-а мешают пройти проверку заполнения обязательных полей (на вход бапи BAPI_FIXEDASSET_CHANGE подается другой объект, а не тот, который только что создали).

Вопрос: как бы мне заставить систему переинициализировать (сбросить) данные в памяти для программ (экранов) SAPLGLO_FIAA_SCREENS и SAPLAIST?

Если вдруг кто-то захочет попробовать воспроизвести, то сначала надо создать карточку ОС с помощью BAPI_FIXEDASSET_CREATE1 в классе, у которого нет обязательного заполнения специфичных для страны полей, и закоммитить его, а потом изменить через BAPI_FIXEDASSET_CHANGE объект, у которого есть обязательные специфичные для страны поля (в моем случае это новая группа амортизации из время-зависимых данных нац. специфики).


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сброс/реинициализация SAPLGLO_FIAA_SCREENS после запуска bapi
СообщениеДобавлено: Вт, дек 27 2022, 11:40 
Специалист
Специалист

Зарегистрирован:
Чт, дек 02 2010, 08:37
Сообщения: 156
Если по-простому, то запускайте эти ФМы в новой сессии.
По идее, все буферы там и останутся.
Только не забывайте про неявный commit.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сброс/реинициализация SAPLGLO_FIAA_SCREENS после запуска bapi
СообщениеДобавлено: Вт, дек 27 2022, 16:32 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, июл 28 2016, 17:40
Сообщения: 69
baboon написал(а):
Если по-простому, то запускайте эти ФМы в новой сессии.

я пробовал запуск BAPI_FIXEDASSET_CHANGE in new task и с destination none. Получаю еще более забавное поведение: сам bapi BAPI_FIXEDASSET_CHANGE нормально отрабатывает, возвращает сообщение, что ос изменено, потом я запускаю там же bapi_transaction_commit, но вот комита не происходит, т.е. возврат нормальный, а записи в БД нет.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сброс/реинициализация SAPLGLO_FIAA_SCREENS после запуска bapi
СообщениеДобавлено: Вт, дек 27 2022, 16:47 
Специалист
Специалист

Зарегистрирован:
Чт, дек 02 2010, 08:37
Сообщения: 156
Ничего удивительного.
ФМ отработал, сессия закрылась, а commit выполняется в другой сессии, вызывающей.
Переносите commit в ту, где выполняется BAPI_FIXEDASSET_CHANGE.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сброс/реинициализация SAPLGLO_FIAA_SCREENS после запуска bapi
СообщениеДобавлено: Ср, дек 28 2022, 12:43 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, июл 28 2016, 17:40
Сообщения: 69
мы так и делали, насколько я понимаю.
Сделали свой ФМ, который запускали в new task. Внутри этого ФМ делали вызов BAPI_FIXEDASSET_CHANGE и потом BAPI_TRANSACTION_COMMIT.
Но БД не обновлялась.

PS Похоже, что ошибка возникает, если во времязависимых данных национальной специфики создаваемой в BAPI_FIXEDASSET_CREATE1 было заполнено хотя бы одно поле и при этом BAPI_FIXEDASSET_CHANGE изменяет карточку, у которой в качестве обязательных есть и другие времязависимые поля нац специфики. Внутри SAPLGLO_FIAA_SCREENS есть проверки, что объекты initial или не Initial, в зависимости от результатов которых срабатывает тот или иной код. После работы BAPI_FIXEDASSET_CREATE1 некоторые объекты остаются не пустыми и не реинициализируются при запуске BAPI_FIXEDASSET_CHANGE, а если бы BAPI_FIXEDASSET_CHANGE запускался отдельно (или первым из двух бапи), то при инициализации поля SAPLGLO_FIAA_SCREENS заполнились бы корректными значениями.

PPS вообще кажется, что это очевидный баг стандарта, но у меня просто нет возможности выставить сообщение в поддержку. А через полторы недели такой возможности не будет в России ни у кого, как я понимаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сброс/реинициализация SAPLGLO_FIAA_SCREENS после запуска bapi
СообщениеДобавлено: Ср, дек 28 2022, 13:38 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 177
Тоже сталкивался с такой проблемой, но, к сожалению, доступа к системе больше нет.
Но какие-то исходники остались. Попробуйте попробовать как-нибудь так:
Code:
    call function 'ASSET_MASTERRECORD_REFRESH'
      exporting
        i_flg_all = abap_true.

    sy-batch = abap_true.
    call function 'BAPI_FIXEDASSET_CHANGE'.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сброс/реинициализация SAPLGLO_FIAA_SCREENS после запуска bapi
СообщениеДобавлено: Чт, дек 29 2022, 14:16 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, июл 28 2016, 17:40
Сообщения: 69
UKY
не помогло((
я перепробовал, кажется, все ФМ со словом refresh в группах функций AIST и GLO_FIAA_SCREENS, надеясь, что хоть одна из них сбросит экраны SAPLGLO_FIAA_SCREENS, но нет.
Помогает, кстати, простое очищение через CLEAR структур SAPLGLO_FIAA_SCREENS, но для этого надо assign делать, а мой разработчик говорит, что это плохая техника.
Еще помогает передача в BAPI_FIXEDASSET_CHANGE обязательных полей, но это уже мне не нравится, т.к. надо или вообще все поля передавать, или постоянно править код, когда новые обязательные поля добавятся (ну или делать сложный код, который будет читать обязательность полей и подсовывать в change обязательные поля).


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сброс/реинициализация SAPLGLO_FIAA_SCREENS после запуска bapi
СообщениеДобавлено: Чт, дек 29 2022, 15:16 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4829
Откуда: Москва
Пол: Мужской
Ну, если в потрохах не удается найти что именно чистить в памяти, то остается BAPI вызывать по RFC через CALL FUNCTION Destination none, чтобы был отдельный контекст.
Вроде ровно это выше и советовали.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сброс/реинициализация SAPLGLO_FIAA_SCREENS после запуска bapi
СообщениеДобавлено: Пт, дек 30 2022, 11:21 
Специалист
Специалист

Зарегистрирован:
Чт, дек 02 2010, 08:37
Сообщения: 156
Если ничего не поможет, хотя очень странно, что отдельная сессия не работает, то
останется только заэнхансить новый параметр в ФМ и обрабатывать его, опять же,
через энхансмент внутри, очищая то, что требуется очистить.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сброс/реинициализация SAPLGLO_FIAA_SCREENS после запуска bapi
СообщениеДобавлено: Пн, янв 02 2023, 13:15 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 177
t337co написал(а):
Помогает, кстати, простое очищение через CLEAR структур SAPLGLO_FIAA_SCREENS, но для этого надо assign делать, а мой разработчик говорит, что это плохая техника.

Почему-то мне кажется, что я именно так и делал - очищал структуру в enhancement для ASSET_MASTERRECORD_REFRESH, но проверить уже не могу, т.к. доступа нет.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сброс/реинициализация SAPLGLO_FIAA_SCREENS после запуска bapi
СообщениеДобавлено: Сб, янв 07 2023, 21:05 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3064
Откуда: Москва
t337co написал(а):
а мой разработчик говорит, что это плохая техника.

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

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сброс/реинициализация SAPLGLO_FIAA_SCREENS после запуска bapi
СообщениеДобавлено: Чт, мар 30 2023, 06:31 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, ноя 10 2004, 11:33
Сообщения: 87
Здравствуйте. У нас такое реализовано по следующей схеме.
1. BAPI_FIXEDASSET_CREATE1.
2. Проверка что в return нет сообщений типа E. Далее вызываем ФМ GLO_UPDATE_ASSET_DATA_S.

CALL FUNCTION 'GLO_UPDATE_ASSET_DATA_S'
EXPORTING
is_asset_data = структура
id_operation = 'I'.

После этого BAPI_TRANSACTION_COMMIT. Все работает как надо.
Если требуется обновлять данные в зависимости от даты, то вызываем ФМ GLO_UPDATE_TIMEDPNDNT_AMD_T


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

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


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

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


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

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