Автор Тема: BSEG/BSET и оптимизация  (Прочитано 32239 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
BSEG/BSET и оптимизация
« : Ноябрь 11, 2008, 08:19:52 pm »
Если в не ту тему просьба перенести (может это будет продолжение темы "Оптимизация АБАП").....

В общем ситуация такая, есть отчет "Список счетов-фактур", в нем выводится кроме всего прочего №НН (налоговой), который берется с bkpf (если не ошибаюсь), стоит задача вытягивать еще и сумму/налог с налоговой.

Ну сделал (вытягиваяю с bseg), все класно, правда в продуктиве, валится - и табличка нехилая, и узеры активно юзают данный отчетик, при этом в тестовой системе все работало "на ура" (табличка маленькая, пользователей мало).

По реализации - буду на работе напишу точнее .....

Ребята (девочки  :)) с FI посоветовали брать данные с bset, он поменше (у нас на каждую НН 2 запси). Быстренько переделал .... таже ф-ня, правда валится не так часто.

Теперь по реалиазции: в обоих случаях выбирал сначала во внутреннюю табличку, и лупом подсчитывал сумму, так как табличка то кластерная, и просто SELECT SUM(XXX) не канает.....
Код: You are not allowed to view links. Register or Login
  SELECT *
      INTO CORRESPONDING FIELDS OF TABLE zbset
      FROM bset
        FOR ALL ENTRIES IN gt_nn
      WHERE bukrs = bukrs        AND
            belnr = gt_nn-belnr  AND
            gjahr = gjahr        AND
            shkzg = 'S'          AND  " дебет
            hkont like '0064%'.

  DESCRIBE TABLE zbset  LINES cnt.

  LOOP AT zbset .
     wrbtr = wrbtr + zbset-HWSTE.
  ENDLOOP.

может есть у уважаемого ALL, хоть какието идеии ? Вьюху сдалать не получилось - по причине тогоже ...


Та что надо знать АБАП, ой надо .....  :)
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 810
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: BSEG/BSET и оптимизация
« Ответ #1 : Ноябрь 11, 2008, 09:17:13 pm »
Переехало в SE38, так как все таки тема абаперская...

А по теме:

FOR ALL ENTRIES IN gt_nn <- Тут у нас что, сколько записей и вообще может иногда этих записей там нет?
« Последнее редактирование: Ноябрь 11, 2008, 09:23:29 pm от Uukrul »

Оффлайн №1

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 636
  • Репутация: +23/-0
  • Пол: Мужской
  • Судьбы я вызов принимаю прямым пожатием руки
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: BSEG/BSET и оптимизация
« Ответ #2 : Ноябрь 12, 2008, 07:53:33 am »
You are not allowed to view links. Register or Login
может есть у уважаемого ALL, хоть какието идеии ?
А select * обязательно? Длина записи под 300 байт всё-таки...
Мой You are not allowed to view links. Register or Login

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: BSEG/BSET и оптимизация
« Ответ #3 : Ноябрь 12, 2008, 09:32:25 am »
В gt_nn - выбраные налоговые ....

По поводу
Цитировать
А select * обязательно?
, так вроде бы  INTO CORRESPONDING FIELDS OF TABLE zbset
работает быстрее.

Вообщем буду смотреть на индексы ......
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн №1

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 636
  • Репутация: +23/-0
  • Пол: Мужской
  • Судьбы я вызов принимаю прямым пожатием руки
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: BSEG/BSET и оптимизация
« Ответ #4 : Ноябрь 12, 2008, 09:52:12 am »
You are not allowed to view links. Register or Login
Вообщем буду смотреть на индексы ......
Там индекс только один и других быть не может ;)
Мой You are not allowed to view links. Register or Login

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: BSEG/BSET и оптимизация
« Ответ #5 : Ноябрь 12, 2008, 11:15:41 am »
я имел ввиду что посмотреть что в where правильно заданы поля что бы использовался индекс
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Moderator
  • Newbie
  • *****
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: BSEG/BSET и оптимизация
« Ответ #6 : Ноябрь 12, 2008, 11:32:50 am »
Присоединяясь к вышесказанному: лучше не полениться и перечислить нужные поля и сделать SELECT [ПЕРЕЧЕНЬ ПОЛЕЙ ТАБЛИЦЫ ITAB] INTO TABLE ITAB - самая быстрая конструкция. Ну а про FOR ALL ENTRIES № 1 в теме про оптимизацию уже писал: если вн. таб. пустая - лопатится вся BSET... А для подсчета суммы и налога никак не выкрутиться используя BSID/BSAD?  
« Последнее редактирование: Декабрь 17, 2008, 09:54:08 pm от Dmitriy »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 810
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: BSEG/BSET и оптимизация
« Ответ #7 : Ноябрь 12, 2008, 04:19:02 pm »
You are not allowed to view links. Register or Login
В gt_nn - выбраные налоговые ....

По поводу, так вроде бы  INTO CORRESPONDING FIELDS OF TABLE zbset
работает быстрее.

Вообщем буду смотреть на индексы ......
Не быстрее будет INTO TABLE а не CORRESPONDING FIELDS OF TABLE...  причем значительно быстрее будет...

Индексы смотреть конечно можно, но налоговых там дофига у тебя выбирается, так что врядли ускорить что получится. А пробовал сделать без FOR ALL ENTRIES? А типа точечными запросами по каждой налоговой выборку делать?

Кстати а какое время работы диалогового процесса у тебя выставлено?

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: BSEG/BSET и оптимизация
« Ответ #8 : Ноябрь 12, 2008, 09:22:11 pm »
по поводу CORRESPONDING FIELDS OF TABLE - сейчас перечитываю твой труд по оптимизации (это кстати почти сразу описано)

Цитировать
А типа точечными запросами по каждой налоговой выборку делать? 
так там и есть по одной СФ все налоговые (их обычно 1, может две).

Цитировать
Кстати а какое время работы диалогового процесса у тебя выставлено? ......

диалоговый процесы тут не причем, валится не по таймауту, а в дамп дохрена памяти жрет.

Тут ошибка даже не в програме, а в ДНК  ;)

Логика работы проги какая: выбираются СФ, потом для каждой запускается подпрограмма которая дозагружает данные,
эта же подпрограма вызывается если что-то поменялось в строке (Сф-ре).

Так вот один умный человек (Ваш пкорный слуга  ;)), что бы не ломать красоту кода и не сильно логику работы проги которая писана не им, просто добавляет вызов подпрограммы (код см. выше), и что получаем ......

память превышает 2-3 гига, пользователи и админы бузумно рады, дампам и т.д.  :)
« Последнее редактирование: Ноябрь 12, 2008, 09:28:03 pm от Паганель »
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: BSEG/BSET и оптимизация
« Ответ #9 : Ноябрь 12, 2008, 09:34:22 pm »
You are not allowed to view links. Register or Login
Присоединяясь к вышесказанному: лучше не полениться и перечислить нужные поля и сделать SELECT [ПЕРЕЧЕНЬ ПОЛЕЙ ТАБЛИЦЫ ITAB] INTO TABLE ITAB - самая быстрая конструкция. Ну а про FOR ALL ENTRIES Uukrul в теме про оптимизацию уже писал: если вн. таб. пустая - лопатится вся BSET... А для подсчета суммы и налога никак не выкрутиться используя BSID/BSAD?  
вот сел писать
Цитировать
gt_nn - не пустая, все класно
сижу и думаю, это у меня в теста не пустая, а в пользователей,
часто, в определенные моменты, когда еще не закачали налоговые - она то пустая ....... вот какой я гениальный абапщик .....

Цитировать
BSID/BSAD?
Пока как бы не нашел тех данных что мне нужны в этих табличках, завтра поспрашаю у наших FI-щиков, если сам не разберусь  :)

Конечно, оптимизировать буду, сейчасвот почитаю труд господина Уукрула по оптимизации, подумаю .....

Всем спасибо, получется отпишусь в чем были траблы, но прием советов не прекращаю  :)
« Последнее редактирование: Ноябрь 12, 2008, 09:37:59 pm от Паганель »
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 810
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: BSEG/BSET и оптимизация
« Ответ #10 : Ноябрь 12, 2008, 10:17:37 pm »
You are not allowed to view links. Register or Login
вот сел писать  сижу и думаю, это у меня в теста не пустая, а в пользователей,

В общем смотри что будет лучше сделать с gt_nn... если там записей всего-то 1-10 тогда может данные объявить как RANGES и туда их затолкать, тогда условие WHERE будет типа через OR этих там 1-10 условий подставятся там в запрос... ну или пере вызовом селекта проверять на содержимое gt_nn, если ничего нет тогда запрос не делать, чтобы небыло фулскана таблицы.

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: BSEG/BSET и оптимизация
« Ответ #11 : Ноябрь 13, 2008, 11:17:35 am »
да приблизительно так и дмаю делать.
Тут встает другой вопрос: чего то памяти столько жрется, ведь если бы были большие выборки - валилось бы по таймауту,
а валится из-за памяти (т.е.  какой-то кусок кода много отжирает)
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: BSEG/BSET и оптимизация
« Ответ #12 : Ноябрь 13, 2008, 02:02:14 pm »
You are not allowed to view links. Register or Login
Присоединяясь к вышесказанному: лучше не полениться и перечислить нужные поля и сделать SELECT [ПЕРЕЧЕНЬ ПОЛЕЙ ТАБЛИЦЫ ITAB] INTO TABLE ITAB - самая быстрая конструкция. Ну а про FOR ALL ENTRIES Uukrul в теме про оптимизацию уже писал: если вн. таб. пустая - лопатится вся BSET... А для подсчета суммы и налога никак не выкрутиться используя BSID/BSAD?  

извините, а что это влечеть - время выборки или рост используемой памяти ?
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Moderator
  • Newbie
  • *****
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: BSEG/BSET и оптимизация
« Ответ #13 : Ноябрь 13, 2008, 02:56:23 pm »
You are not allowed to view links. Register or Login
извините, а что это влечеть - время выборки или рост используемой памяти ?
При перечеслении по порядку только нужных полей в определении вн. таблицы и непосредственно в синтаксисе запроса для выборки в нее с использ. конструкции INTO TABLE сокращается и то и другое. Дебиторка лежит в BSID(отк.поз.) и в BSAD(закр.), соответственно кредиторка в BSIK/BSAK. Налог можно подсчитать вытягивая процентную ставку (не обращайть внимание на SELECT...ENDSELECT, код древнее поповской собаки, оптимизируете, если что):
SELECT K ~ kbetr INTO k _ nds from
A003 as A inner join KONP as K on A~KNUMH = K~knumh
where A~aland = 'RU' and A~mwskz = <l_accit>-mwskz.
ENDSELECT.
if k_nds = 0.
k_nds = 1.
else.
k_nds = 1 + k_nds / 1000.
endif.
Поскольку данные приходиться добивать точечными запросами для получения налоговых показателей (каких, кстати, помимо указ-го в 1-м посте?), а прога валиться в дамп по нехватке памяти, то нужно вычислить момент, когда это происходит, и если это основная выборка с-фактур, то тогда несколько вариантов:
1) увеличение памяти (базис не в восторге будет)
2) SELECT...ENDSELECT с обработкой и сливом внутри него уже подготовленных данных в итоговую вн. таблицу
3) если и п.2 не поможет, то настаивать на п.1 или менять подход к решению задачи вплоть до постановки
Если дампит в процессе обработки выбранных с-ф., то можно:
1) дополнить вн. таблицу с-ф., получ. при первой выборке, полями так, чтобы ее можно было выводить как итоговую, т.е. работать только с ней используя LOOP AT itab_sf ASSIGNING <fs_itab>...ENDLOOP, где <fs_itab> LIKE LINE OF itab_sf.
2) после выборки с FOR ALL ENTRES очистить вспомогательную вн. табл.: FREE gt_nn
Больше пока ничего на ум нейдет, т.к. не знаю конкретной задачи   

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 810
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: BSEG/BSET и оптимизация
« Ответ #14 : Ноябрь 13, 2008, 03:16:30 pm »
You are not allowed to view links. Register or Login
извините, а что это влечеть - время выборки или рост используемой памяти ?
У меня подозрение, что при пустой таблице gt_nn у тебя вся BSET-а втягивается, так что или проверяй перед вызовом запроса gt_nn на заполнимость илиз попробуй механизм предложенный Dmitriy-eм.

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: BSEG/BSET и оптимизация
« Ответ #15 : Ноябрь 13, 2008, 04:05:19 pm »
You are not allowed to view links. Register or Login
У меня подозрение, что при пустой таблице gt_nn у тебя вся BSET-а втягивается, так что или проверяй перед вызовом запроса gt_nn на заполнимость илиз попробуй механизм предложенный Dmitriy-eм.

Я чего-то думал что в данном случае не выбирается ничего (сумма пустая), и естественно память не растет
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Moderator
  • Newbie
  • *****
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: BSEG/BSET и оптимизация
« Ответ #16 : Ноябрь 13, 2008, 04:13:16 pm »
Т.е. получается, что ларчик-то просто открывался? :)

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 810
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: BSEG/BSET и оптимизация
« Ответ #17 : Ноябрь 13, 2008, 04:19:30 pm »
You are not allowed to view links. Register or Login
Т.е. получается, что ларчик-то просто открывался? :)
Ну щаз автор пошаманит и скажет наверное чего  ::)

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Moderator
  • Newbie
  • *****
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: BSEG/BSET и оптимизация
« Ответ #18 : Ноябрь 13, 2008, 05:25:58 pm »
Немного подправлю (редактирование недоступно):
Конечно же FREE gt_nn[]. Рекомендую очищать занимаемую память от данных, которые в процессе дальнейшей обработки не нужны, причем не только в данном, конкретном случае, а почти всегда, т.к. может быть открыто несколько сессий, а память, выделямая на одного юзера не зависит от их кол-ва и есть CONST.

2 Администрация: предлагаю создать отдельную тему типа "Технология написания программ на ABAP" или "Особенности ....." или просто "Полезные фишки" и т.д., как и для оптимизации, ориентированну на уже достаточно продвинутых SAPеров. Есть много моментов, знание которых очень помогает в том или ином случае.

2 Паганель: надеюсь, вопрос "Знать или не знать ABAP" уже отпал сам собой? :)

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 810
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: BSEG/BSET и оптимизация
« Ответ #19 : Ноябрь 13, 2008, 05:47:19 pm »
You are not allowed to view links. Register or Login
Немного подправлю (редактирование недоступно):
В целях сохранения логической истории постов со временем, дабы дурь каждого была видна, редактирование постов возможно в течении 90 секунд после отправки.

You are not allowed to view links. Register or Login
2 Администрация: предлагаю создать отдельную тему типа "Технология написания программ на ABAP" или "Особенности ....." или просто "Полезные фишки" и т.д., как и для оптимизации, ориентированну на уже достаточно продвинутых SAPеров. Есть много моментов, знание которых очень помогает в том или ином случае.
Не вопрос, готово: You are not allowed to view links. Register or Login будешь там главным  ;)

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: BSEG/BSET и оптимизация
« Ответ #20 : Ноябрь 17, 2008, 09:36:08 pm »
You are not allowed to view links. Register or Login
Немного подправлю (редактирование недоступно):
Конечно же FREE gt_nn[]. Рекомендую очищать занимаемую память от данных, которые в процессе дальнейшей обработки не нужны, причем не только в данном, конкретном случае, а почти всегда, т.к. может быть открыто несколько сессий, а память, выделямая на одного юзера не зависит от их кол-ва и есть CONST.

2 Администрация: предлагаю создать отдельную тему типа "Технология написания программ на ABAP" или "Особенности ....." или просто "Полезные фишки" и т.д., как и для оптимизации, ориентированну на уже достаточно продвинутых SAPеров. Есть много моментов, знание которых очень помогает в том или ином случае.

2 Паганель: надеюсь, вопрос "Знать или не знать ABAP" уже отпал сам собой? :)

так он вообще-то отпал уже давно   :)  (см. пост в соответствующей ветке )

А по теме данного поста: у меня данная табличка обьявлена как локальная (в теле подпограмы) и я думал что память очищается сама собой (наверное сыграла привичка с Делфей)  :)

Как я понимаю, абап ближе к Яве, и тут присутствует какой-то сборщик мусора?
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Sapforum.Biz

Re: BSEG/BSET и оптимизация
« Ответ #20 : Ноябрь 17, 2008, 09:36:08 pm »