Текущее время: Ср, июл 23 2025, 22:00

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 31 2007, 11:16 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Vadim написал(а):
Спасибо!!! Но... Ведь все уже передано в FI, и после этого уже нет никаких USER-EXITов и т.п. Они уже все отработали. Или я не прав?

Не знаю: не так силён в функционале. Я бы поискал.

Если это так и все изменения vbrk на момент open fi уже лежат в update-модулях, то всё равно нужно в open fi возвращать номер созданного документа исключительно для проверки на ошибки, а ZZBELNR_D заполнять уже асинхронно, подождав пока отработает стандартный update-процесс.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 31 2007, 13:54 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Vadim написал(а):
vga написал(а):
Если Вы не хотите "извратнуться" и написать асинхронный ФМ,
запускаемый после успешного создания фин. документа прямо в open-fi, который будет ожидать снятие блокировки с VBRK и только после этого делать Update VBRK ;-)
то конечно, искать нужный exit.


В OPEN-FI запись в VBRK блокирована с самого начала и до конца.


Ключевое слово - асинхронный FM, такой же как у Вас
CALL FUNCTION 'ZSD_ACC_DOC_POST_BILLING_DOC'
STARTING NEW TASK 'ACC_POST', только он должен проверять в лупе, не снялась ли блокирока с VBRK и если снялась, делать UPDATE vbrk. Он будет жить и после отработки Open-FI.


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

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
vga написал(а):
не снялась ли блокирока с VBRK и если снялась, делать UPDATE vbrk.

Лучше всё-таки ждать окончания update-процесса, поскольку блокировку может успеть раньше нас кто-то другой поставить.


Но если на момент выполнения open fi вся vbrk лежит в update-модуле, почему бы не добавить в open fi свой update-модуль с обновлением z-поля? Они же по-порядку выполняются.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 31 2007, 14:32 
Специалист
Специалист

Зарегистрирован:
Пн, дек 04 2006, 10:51
Сообщения: 173
Мужчины, спасибо!!! Все заработало!! ))
Сделал так, как предлагал SIBRIN.
ОГРОМНОЕ СПАСИБО за помощь!!!


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

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
sibrin написал:
Но если на момент выполнения open fi вся vbrk лежит в update-модуле, почему бы не добавить в open fi свой update-модуль с обновлением z-поля? Они же по-порядку выполняются.


Думал об этом, а если выскочит какой-то промежуточный commit, но того, как главная программа обновит vbrk. Может же такое случиться, кто-то добавит свою обработку в промежуточном user-exit или событии open_fi.


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

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Можно утверждать, что commit'а не должно быть по той причине, что изменение фактуры и финансового документа должны проходить в одном LUW согласно Принципу SAP.

Если кто-то в юзер-экзите поломает этот механизм, то проблемы будут более глобальные, чем простое необновление Z-поля. Более того, необновление z-поля будет как раз индикатором того, что что-то не так.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 31 2007, 16:17 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
sibrin написал:
Можно утверждать, что commit'а не должно быть по той причине, что изменение фактуры и финансового документа должны проходить в одном LUW согласно Принципу SAP.


Тогда все, что делалось в этом топике - нарушает принцип SAP. Независимые асинхронные update выходят за рамки одного LUW.
Об чем тогда речь, это надо было написать во втором сообщении и прикрыть тему.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 01 2007, 07:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
vga написал(а):
Тогда все, что делалось в этом топике - нарушает принцип SAP.

Под "принцип SAP" я имел в виду только то, что деблокирование фактуры и создание финансового документа проходит в рамках одного LUW и на это можно надеяться в будущем. Т.е. можно рассчитывать, что не "выскочит какой-то промежуточный commit".

Конечно, в SAPе есть Post Processing Framework, RWIN, Workflow и очень много чего происходит асинхронно.

Более того, SAP очень часто нарушает принцип транзакционности в силу кривости реализации своих LUW и групп функций. С переходом на рельсы ООП эти проблемы снимаются.

vga написал(а):
Независимые асинхронные update выходят за рамки одного LUW.

Да, конечно, это ненадёжно по очень простой причине.
Между тем, как закончится первый процесс и начнётся второй всегда может вклинится любой другой процесс и прочитать/изменить неконсистентное состояние. Если не ставить в цикле задержки wait up to 1 seconds, то в однопроцессорном приближении наш цикл ожидания не будет давать возможности выполняться родительскому процессу. Процессоров на сервере, конечно, много, но в продуктиве они тоже не скучают. А сделать задержку меньше 1 секунды проблематично.


Последний раз редактировалось sibrin Чт, авг 09 2007, 11:43, всего редактировалось 2 раз(а).

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 01 2007, 09:47 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Конкретно для данного топика, в случае неудачного создания основного фин. документа, второй фин. документ тоже не должен создаваться. Данная реализация нарушает принцип целостности данных. Поэтому не стоит использовать событие 00001025, в котором первый фин. документ еще не создан.


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

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
vga написал(а):
Поэтому не стоит использовать событие 00001025, в котором первый фин. документ еще не создан.

Событие 00001025 тут ни при чём. Второй фин. документ должен создаваться в том же самом LUW, что и первый. Причём не важно в каком событии или экзите.

Но это, видимо, не получается, т.к. идёт конфликт по глобальной памяти используемых ф.м. Поэтому приходится второй документ создавать в параллельном процессе как можно ближе к концу родительского LUW. 1030 - уже процесс обновления, так что там поздно. Так что 1025 выбрано грамотно, после всех проверок.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 01 2007, 11:55 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
vga написал(а):
Поэтому более разумно использовать события 1030, 1050 или иные, срабатывающе уже после создания документа.


В.С. Высоцкий написал(а):
Доктор мой большой педант,
Сдержан он и осторожен,
Да, вы правы, но возможен
И обратный вариант.


Т.е. для автора топика, видимо, важнее, чтобы перый документ не создался, если не создастся первый. :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 01 2007, 11:57 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
sibrin написал:
Второй фин. документ должен создаваться в том же самом LUW, что и первый. Причём не важно в каком событии или экзите.

Абсолютно с этим согласен.

sibrin написал:
Но это, видимо, не получается, т.к. идёт конфликт по глобальной памяти используемых ф.м. Поэтому приходится второй документ создавать в параллельном процессе как можно ближе к концу родительского LUW.

А вот из-за таких допущений как-раз и возникают трудно отлавливаемые ошибки, появление непонятных документов и тд.

sibrin написал:
Так что 1025 выбрано грамотно, после всех проверок.


Вот именно, что 1025 - это процесс проверки. Во первых обработчиков события 1025 может быть несколько и в каждом из-них проверка может закончиться неудачно, будет выведено предупреждающее сообщение с предложением исправить данные.

В данной же реализации произойдет создание стольких вторичных документов, сколько раз эта проверка была вызвана.

Поэтому более разумно использовать события 1030, 1050 или иные, срабатывающе уже после создания документа.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 01 2007, 11:58 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
сорри, чет намудрил с сообщениями ;-) Предудущее должно быть выше на одно.


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

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
vga написал(а):
Вот именно, что 1025 - это процесс проверки.
Это final check, т.е. после всех проверок.

vga написал(а):
Во первых обработчиков события 1025 может быть несколько и в каждом из-них проверка может закончиться неудачно,
Универсальной защиты от дураков нет.

vga написал(а):
Поэтому более разумно использовать события 1030, 1050 или иные, срабатывающе уже после создания документа.

1030 ещё до сохранения, in update task. Но, боюсь, что из него нельзя вызвать асинхронный процесс и дождаться завершения. Но если даже можно, то не убивать же update-процесс по причине не создания второго документа — базис этого не поймёт.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 01 2007, 13:04 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
sibrin написал:
vga написал(а):
Вот именно, что 1025 - это процесс проверки.
Это final check, т.е. после всех проверок.

Хоть у саперов принято использовать 1025 для модифкаций bseg, bkpf, вообще-то sap задумывал его как final user check после всех проверок sap, хотя и для внутреннего использования. Подтверждение этому, что с версии 4.7 практически закрыл лазейку для модификации через import/export.

sibrin написал:
Универсальной защиты от дураков нет.

Причем здесь защита от дурака? Это вполне законный метод, выдать сообщение о ошибке, если проверка каких либо данных, введенных пользователем, в расширении не прошла. Пользователь мог просто ошибиться, не обязательно он дурак ;-)


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

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


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

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


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

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