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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 50 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: помощь совсем начинающему.
СообщениеДобавлено: Вт, авг 22 2006, 14:55 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 22 2006, 11:14
Сообщения: 136
Вот примерный исходник:
Code:
DATA: w_kna1 TYPE kna1,
      w_bseg TYPE bseg.

START-OF-SELECTION.
SELECT kunnr land1 name1 regio stras FROM kna1
CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF w_kna1 WHERE mandt = 800.

NEW-LINE.
WRITE:
         w_kna1-kunnr,
         w_kna1-land1,
         w_kna1-name1 COLOR COL_KEY,
         w_kna1-regio,
         w_kna1-stras.
HIDE: w_kna1-kunnr.
ENDSELECT.
CLEAR w_kna1.


      AT LINE-SELECTION.
IF sy-lsind = 1.
SELECT kunnr belnr wrbtr FROM bseg
CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF w_bseg
WHERE kunnr = w_kna1-kunnr.

NEW-LINE.
WRITE: w_bseg-kunnr,
       w_bseg-belnr,
       w_bseg-wrbtr.

ENDSELECT.
ENDIF.
CLEAR w_bseg.


Как можно ускорить выбор из таблицы bseg, а то она здоровая и все медленно вынимается.


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

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Во-первых:
Поиск по такой огромной табличке вести желательно по ключу. А не абы как.
Во-вторых:
Не использовать select ... endselect. А писать into table.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, авг 22 2006, 15:10 
Модератор
Модератор

Зарегистрирован:
Пт, ноя 12 2004, 11:40
Сообщения: 542
Откуда: Москва
Пол: Мужской
Еще можно в табличках вторичного индекса посмотреть .... BSIK BSAK...


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

Зарегистрирован:
Вт, авг 22 2006, 11:14
Сообщения: 136
а можно отписать как бы текст выглядел в нормальном виде?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, авг 22 2006, 17:56 
Гость
Code:

REPORT Z1.

DATA: W_KNA1 TYPE KNA1,
      W_BSEG TYPE BSID OCCURS 0 WITH HEADER LINE.

PARAMETERS: BUKRS TYPE BUKRS MEMORY ID BUK OBLIGATORY.

START-OF-SELECTION.
  SELECT KUNNR LAND1 NAME1 REGIO STRAS FROM KNA1
  CLIENT SPECIFIED
  INTO CORRESPONDING FIELDS OF W_KNA1 WHERE MANDT = '800'.

    NEW-LINE.
    WRITE:
             W_KNA1-KUNNR,
             W_KNA1-LAND1,
             W_KNA1-NAME1 COLOR COL_KEY,
             W_KNA1-REGIO,
             W_KNA1-STRAS.
    HIDE: W_KNA1-KUNNR.
  ENDSELECT.
  CLEAR W_KNA1.


AT LINE-SELECTION.
  IF SY-LSIND = 1.
    CLEAR: W_BSEG, W_BSEG[].

    SELECT * FROM BSID CLIENT SPECIFIED
    APPENDING CORRESPONDING FIELDS OF TABLE W_BSEG
    WHERE  MANDT = '800' AND
           KUNNR = W_KNA1-KUNNR.

    SELECT * FROM BSAD CLIENT SPECIFIED
    APPENDING CORRESPONDING FIELDS OF TABLE W_BSEG
    WHERE  MANDT = '800' AND
           KUNNR = W_KNA1-KUNNR.

   LOOP AT W_BSEG.
      WRITE:/ W_BSEG-KUNNR,
             W_BSEG-BELNR,
             W_BSEG-WRBTR.
   ENDLOOP.
  ENDIF.
  CLEAR W_BSEG.



Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, авг 22 2006, 19:05 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вс, окт 17 2004, 14:20
Сообщения: 326
Откуда: Москва
Для общего развития: bseg - кластерная таблица. Это значит, что реально такой таблицы БД нет. Записи реально хранятся в таблице RFBLG (это видно на закладке Attributes таблицы BSEG в SE11). Дальше можете посмотреть какие поля есть в RFBLG и понять, почему делать селект из BSEG по KUNNR - это фактически вызывать перекачку всей BSEG на сервер приложений и анализ ее там. При желании можете проверить, сделав SQL Trace (ST05).

И еще, забудьте про client specified.


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

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
ABC написал(а):
.. делать селект из BSEG по KUNNR - это фактически вызывать перекачку всей BSEG на сервер приложений и анализ ее там. При желании можете проверить, сделав SQL Trace (ST05)..

не надо страху нагонять :wink:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 23 2006, 10:44 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 22 2006, 11:14
Сообщения: 136
Поясните пожалуйсто зачм читать из двух таблиц, при чем все, в w_bseg.


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

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
выровненные и открытые позиции
полистай курсы ac* или сразу смирись


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 23 2006, 10:59 
Гость
пошел_погулять написал(а):
Поясните пожалуйсто зачм читать из двух таблиц, при чем все, в w_bseg.


ну почему - все? :)

можешь ограничить дополнительными условиями.

Когда формируется запись в BSEG, если проводку идет
по дебитору, то появляется запись и в индексной табличке
BSID.

Например, мы получили оплату от дебитору - одна запись,
выставили дебитору счет-фактуру - вторая запись.

Потом провели процедуру выравнивания
и связали, что именно эта оплата именно по этому счету-фактуре.

Позиции стали выровненными и запись из BSID переместилась
в BSAD.

Т.о. - если ты хочешь посмотреть ВСЕ проводки по дебитору, то нужны обе таблицы


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

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
пошел_погулять написал(а):
Поясните пожалуйсто зачм читать из двух таблиц, при чем все, в w_bseg.

В R/3 есть такие уродские таблицы, называются "кластерные", в т.ч. BSEG. По ним нельзя создать индексы, а значит оптимизировать запросы. Поэтому САП создала свои уродские "индексы" для BSEG и назвала их:
- BSID (невыровненные дебиторские позиции);
- BSAD (выровненные дебиторские позиции);
- BSIK (невыровненные кредиторские позиции);
- BSAK (выровненные кредиторские позиции);
- BSIS (невыровненные позиции)
- BSAS (выровненные позиции)
Последние две включают в себя все позиции, в т.ч. дебиторские и кредиторские. А уродские они потому, что не всегда информация в них корректна и не понятно зачем их разделили на несколько таблиц.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 23 2006, 14:15 
Гость
складывание данных во внутреннюю таблицу может привести к большому расходу оперативной памяти, тк. при каждом запуске отчета будет использоваться отдельная область памяти под эту табличку... хотя если сервер мощный и пользователей мало :wink:


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 23 2006, 14:35 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
nyar написал(а):
складывание данных во внутреннюю таблицу может привести к большому расходу оперативной памяти, тк. при каждом запуске отчета будет использоваться отдельная область памяти под эту табличку... хотя если сервер мощный и пользователей мало :wink:

Ну а тут уже вопрос того что предпочитается нагружать: сервер БД или сервер приложений. На мой взгляд использование внутренней таблички - правомерней в данном примере. Поскольку работаем с корявостью под названием BSEG.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: re
СообщениеДобавлено: Ср, авг 23 2006, 15:41 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вс, окт 17 2004, 14:20
Сообщения: 326
Откуда: Москва
trop написал(а):
ABC написал(а):
.. делать селект из BSEG по KUNNR - это фактически вызывать перекачку всей BSEG на сервер приложений и анализ ее там. При желании можете проверить, сделав SQL Trace (ST05)..

не надо страху нагонять :wink:

Поясни, плз, в чем я неправ.


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

Зарегистрирован:
Вс, окт 17 2004, 14:20
Сообщения: 326
Откуда: Москва
Пономарев Артем написал:
nyar написал(а):
складывание данных во внутреннюю таблицу может привести к большому расходу оперативной памяти, тк. при каждом запуске отчета будет использоваться отдельная область памяти под эту табличку... хотя если сервер мощный и пользователей мало :wink:

Ну а тут уже вопрос того что предпочитается нагружать: сервер БД или сервер приложений. На мой взгляд использование внутренней таблички - правомерней в данном примере. Поскольку работаем с корявостью под названием BSEG.

Даже когда используется цикл SELECT ... ENDSELECT, данные сразу перекачиваются на сервер приложений. Так что память сервера приложений жрется не меньше, другое дело, что это не память, выделенная рабочему процессу.


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

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


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

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


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

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