Текущее время: Пн, июл 21 2025, 20:38

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Проверка результата в модулях обновлений
СообщениеДобавлено: Ср, сен 17 2008, 15:42 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 17 2008, 15:35
Сообщения: 5
Как правильно проверять результат выполнения модуля обновлений, если модуль вставляет или апдейтит в таблице БД некоторое количество из внутренней таблицы? Как определить, для каких строк инсерт/апдейт прошел, а на каких строках возникла ошибка?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, сен 17 2008, 15:56 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, сен 18 2006, 10:37
Сообщения: 177
Откуда: Беларусь
Пол: Мужской
Возможно, при вызове ФМ такую проверку можно делать в своей формочке, которая указывается в вызове Call function.
Code:
CALL FUNCTION func STARTING NEW TASK task
              [{PERFORMING subr}|{CALLING meth} ON END OF TASK].

_________________
Regards


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, сен 17 2008, 16:03 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 17 2008, 15:35
Сообщения: 5
Не пойдет. В том и соль, что это модуль обновления, а не RFC-модуль.


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

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
Ведите лог

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, сен 17 2008, 16:46 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 17 2008, 15:35
Сообщения: 5
Lars написал:
Ведите лог


А если чуть подробнее? У меня эта проблема как раз и возникла из-за необходимости ведения документа изменений: в xz_таблицу нужно ведь писать не все записи, переданные в модуль обновлений, а только те, по которым инсерт или апдейт прошли успешно.


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

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
модуль обновления Ваш или стандартный ?

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, сен 17 2008, 16:52 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 17 2008, 15:35
Сообщения: 5
мой

собственно, проблема вот в чем: внешняя система передает в САП большой объем строк, которые нужно вставить в таблицу за очень ограниченное время. то есть возможен только пакетный инсерт: INSERT FROM TABLE ACCEPTING DUPLICATE KEYS. Построчное добавление строк с анализом sy-subrc не подходит по соображениям быстродействия. По итогам импорта строк в таблицу нужно отразить добавленные в таблицу записи в документе изменений. в случае с построчным инсертом я проблем не вижу, а вот с пакетным инсертом возникли проблемы.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверка результата в модулях обновлений
СообщениеДобавлено: Ср, сен 17 2008, 18:12 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
MeHappy написал(а):
Как определить, для каких строк инсерт/апдейт прошел, а на каких строках возникла ошибка?


IMHO если не делать построчно, то никак. Можно разве что проверить количество строк, которые должны были быть добавлены, с тем, что было добавлено:
Цитата:
The INSERT statement sets sy-dbcnt to the number of rows inserted.


Вообще если вы используете INSERT ... ACCEPTING DUPLICATE KEYS, то не совсем понятно, какая ошибка может возникнуть. Разве что update termination, но об этом вы скорее всего все равно в вашем модуле не узнаете. :?

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 18 2008, 01:25 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
Есть подозрение что модуль обновления здесь притянут за уши, если ваша программа предназначена исключительно для загрузки данных то никаких модулей обновления не надо, они нужны в основном для того чтобы освободить диалоговый прцесс и создать у пользователя иллюзию что система работает быстро.

И действительно если вы используете INSERT ... ACCEPTING DUPLICATE KEYS то как данные могут не записаться в БД? тут возможны только системные ошибки на уровне БД и соответственно будет дамп.

К стати есть ещё комманда Modify может он вам больше подойдет.

Про заливку больших объемов данных, довольно часто в таких случаях возникает дамп связанный с переполнением RollBack сегмента лечится это путём вставки Commit Work между порциями данных.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 18 2008, 08:42 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 17 2008, 15:35
Сообщения: 5
DKiyanov написал:
Есть подозрение что модуль обновления здесь притянут за уши, если ваша программа предназначена исключительно для загрузки данных то никаких модулей обновления не надо, они нужны в основном для того чтобы освободить диалоговый прцесс и создать у пользователя иллюзию что система работает быстро.

А я-то по наивности своей считал, что модули обновлений и LUW нужны для обеспечения целостности данных при внесении изменений в таблицу. Считайте: моя Z-овская таблица раз, CDHDR/CDPOS два: уже хорошо бы удостовериться, что данные добавлись во все таблицы или не добавились ни в одну. Раз вызов документа изменений оформлен как модуль обновления и выполняется с опцией IN UPDATE TASK, мне кажется логичным и добавление в Z-овскую таблицу тоже отложить до коммита.

DKiyanov написал:
И действительно если вы используете INSERT ... ACCEPTING DUPLICATE KEYS то как данные могут не записаться в БД? тут возможны только системные ошибки на уровне БД и соответственно будет дамп.

При исключении первичного ключа и условии ACCEPTING DUPLICATE KEYS никакого дампа не будет. Просто строка в таблицу не добавится. Какая именно - черт ее разберет, потому и вопрос возник.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 18 2008, 15:53 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
MeHappy написал(а):
А я-то по наивности своей считал, что модули обновлений и LUW нужны для обеспечения целостности данных при внесении изменений в таблицу

Действительно по наивности :D целостности данных вполне можно добиться выполнив вовремя Commit Work, он либо пройдет либо всё откатится.
MeHappy написал(а):
Раз вызов документа изменений оформлен как модуль обновления и выполняется с опцией IN UPDATE TASK

Это вовсе не обязывает выполнять его именно IN UPDATE TASK.
Представте: сначала вся ваша куча данных сохранится в спец таблицу для процесса обнавления, затем процес обновления начнет её обрабатывать в результате чего обновление малость тормознётся, что не очень хорошо. Вам это надо?
MeHappy написал(а):
При исключении первичного ключа и условии ACCEPTING DUPLICATE KEYS никакого дампа не будет. Просто строка в таблицу не добавится. Какая именно - черт ее разберет, потому и вопрос возник.

Используйте оператор Modify и таких проблем не будет.


Последний раз редактировалось DKiyanov Чт, сен 18 2008, 15:55, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 18 2008, 15:53 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Если в вашей системе ловится ( в моей не ловится)
CATCH SYSTEM-EXCEPTIONS SAPSQL_ARRAY_INSERT_DUPREC = 1.
можно попробовать вставлять без ACCEPTING DUPLICATE KEYS,
логировать строку, вызвавшую исключение и загружать таблицу дальше без ошибочных строк.

_________________
С уважением, VGA
Мой блог


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

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


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

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


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

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