Выборка данных с последующим обновлением.

Автор Uukrul, Лютий 19, 2009, 02:15:59 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Паганель

Цитата: Dmitriy від Лютий 19, 2009, 09:37:49 ПП
....отпишу про возможности работы с ФМ - генерирующим диалог ведения таблицы БД...

А зачем использовать FM? Что бы не делать это ручками? Что-то не понял этой фразы.

Спасибо за советы, осталось 30 мин до запуска Джоба, попробую переделать все циклы на использование FIELD-SYMBOLS.

Паганель

с отделной табличкой не успеваю, а FIELD-SYMBOLS сделал.
так как у меня 2 loop"а, сделал один по класике, а другой с FIELD-SYMBOLS, сделал вывод лога времени. Сравнимс  :)

Uukrul

Цитата: Паганель від Лютий 20, 2009, 09:48:35 ДП
с отделной табличкой не успеваю, а FIELD-SYMBOLS сделал.
так как у меня 2 loop"а, сделал один по класике, а другой с FIELD-SYMBOLS, сделал вывод лога времени. Сравнимс  :)
Лог времени как получал?

Паганель

так как ты написал.


GET RUN TIME FIELD runtime_1.
LOOP AT gt_rest.
  gt_rest-status = 2. " загруженно с магазина + расчитано в SAP
  MODIFY gt_rest.
ENDLOOP.
GET RUN TIME FIELD runtime_2.
time_diff = runtime_2 - runtime_1.
WRITE: /'LOOP AT gt_rest'.
WRITE: / time_diff.

Uukrul


Паганель

ну имеем результаты:

LOOP AT gt_rest
   721.907         
FIELD-SYMBOLS     
    11.979       

Правда, для чистоты эксперимента  надо бы поменять местами (первый сделать FIELD-SYMBOLS а второй  LOOP ) так как объемы там разные

Паганель

Общий результат:
вчера     3.439
сегодня  3.095

Но есть несколько "но", видимо данных сегодня было менше, или загрузка системы поменьше, так как по идее оба добавленных цикла, должны были увеличить время работы джоба.

Uukrul

Цитата: Паганель від Лютий 20, 2009, 11:05:35 ДП
Но есть несколько "но", видимо данных сегодня было менше, или загрузка системы поменьше, так как по идее оба добавленных цикла, должны были увеличить время работы джоба.
Ну на LOOP  точно будет выигрыш в разы, но надо еще добавить табличку статусов и думаю общее время выполнения должно уменьшиться.

Dmitriy

Цитата: Uukrul від Лютий 20, 2009, 11:18:49 ДП
Ну на LOOP  точно будет выигрыш в разы, но надо еще добавить табличку статусов и думаю общее время выполнения должно уменьшиться.
Табличку статусов по-любому нужно. А по поводу ФМ - нет под рукой системы, по счастливому стечению обстоятельств оказался сегодня выходным, поэтому здесь, и, как грится, на пальцах...
Генерится диалог ведения в течении нескольких секунд. Но это уже ТВОЯ ф-ция. Можно зайти на экран, раздвинуть колонки (эк меня понесло, после Legio ;D) и т.п., т.е. сделать все, как тебе удобно... ;D ;D ;D

Паганель

Дима, так и не понял, о чем ты, ну будешь возле системы, раскажешь .....

Это, как я понял, вроде обычного диалога введения, только как бы подконтрольней?

Dmitriy

#35
Цитата: Паганель від Лютий 20, 2009, 12:03:46 ПП
Дима, так и не понял, о чем ты, ну будешь возле системы, раскажешь .....
Это, как я понял, вроде обычного диалога введения, только как бы подконтрольней?
Часть кода из проги, по программному вызову диалога ведения ZRTC_CC.
AT SELECTION-SCREEN.
* Вызов диалога ведения настроечной таблицы видов движения объектов НКС
  CASE sy-ucomm.
    WHEN 'FC01'.
      CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
           EXPORTING
                action                       = 'S'
                view_name                    = 'ZRTC_CC'
           EXCEPTIONS
                client_reference             = 1
                foreign_lock                 = 2
                invalid_action               = 3
                no_clientindependent_auth    = 4
                no_database_function         = 5
                no_editor_function           = 6
                no_show_auth                 = 7
                no_tvdir_entry               = 8
                no_upd_auth                  = 9
                only_show_allowed            = 10
                system_failure               = 11
                unknown_field_in_dba_sellist = 12
                view_not_found               = 13
                OTHERS                       = 14.
      IF sy-subrc <> 0.
*       ошибка вызова диалога ведения
        MESSAGE e070(zunikr_001) WITH sy-subrc 'ZRTC_CASHFLOW_1'.
      ENDIF.
  ENDCASE.

К чему это бишь я? Да к тому, что на любом проекте можно создать прогу, у которой один входной параметр: view_name, и презентовать ее юзерам, а потом, создавать на нее проги (и транзакции на них) с оператором SUBMIT и подстановкой этого параметра view_name в зависимости от SY-TCODE. А дальше уже пизанты разнесут полномочия на твои транзакции.

Паганель

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

Dmitriy

Цитата: Паганель від Лютий 20, 2009, 12:31:50 ПП
о, прикольно, аналог sm30 для пользователей  :)
Спасибо большое, так как прав обычно в продуктиве на sm30 нету, можно для себя использовать, скажем что бы настройки смотреть. 
И не нужно ничего бояться: максимум, что могут с тобой сделать - это убийство с предварительными многочасовыми мучениями, а потом - другая жизнь. ;)

Паганель

Дополнительный вопрос: будет ли ускорение при использовании FIELD-SYMBOLS, если не проводится модификации таблички, только копирование в другую.

Или как массово перенести данные из одно таблички в другую, если их структура не идентична?
Есть что-то типа move corresponding для все таблички?

Uukrul

Цитата: Паганель від Червень 01, 2009, 12:09:42 ПП
Дополнительный вопрос: будет ли ускорение при использовании FIELD-SYMBOLS, если не проводится модификации таблички, только копирование в другую.
Ну теоретически будет, так как не будет как минимум копирования записей в заголовок таблицы/или рабочую область.

Цитата: Паганель від Червень 01, 2009, 12:09:42 ПП
Или как массово перенести данные из одно таблички в другую, если их структура не идентична?
Есть что-то типа move corresponding для все таблички?
Ну вот именно и есть для этого move corresponding. А ты как хотел типа мувкорреспондинг но быстро?  ;)

Паганель

Цитата: Uukrul від Червень 01, 2009, 12:16:11 ПП
Ну вот именно и есть для этого move corresponding. А ты как хотел типа мувкорреспондинг но быстро?  ;)

Туплю с утра, так вроде работает, правда будет ли прирост скорости:

TYPES: BEGIN OF gs_alvtab.
TYPES: celltab TYPE lvc_t_styl.
TYPES: colinfo TYPE lvc_t_scol.
        INCLUDE STRUCTURE mkol.
TYPES: mjahr LIKE mseg-mjahr.
......
TYPES: END OF gs_alvtab.

DATA: gt_alvtab TYPE STANDARD TABLE OF gs_alvtab WITH HEADER LINE.
DATA: ls_alvtab LIKE LINE OF gt_alvtab.

DATA: gt_mkol TYPE STANDARD TABLE OF mkol WITH HEADER LINE.


" Выбор Поставщ. Завода, Материала, и Текущего Остатка
  SELECT matnr werks lifnr SUM( slabs ) AS slabs
   INTO TABLE gt_mkol " Для быстроты выборки
   FROM mkol
   WHERE mkol~matnr IN so_matnr AND
         mkol~werks IN so_werks AND
         mkol~lifnr IN so_lifnr AND
         mkol~sobkz = 'K'
   GROUP BY matnr werks lifnr.

  MOVE-CORRESPONDING gt_mkol to gt_alvtab. " <<< ---- тут

Паганель

Еще один вопросик, что бы не плодить тем кучу.

Что-то не найду как обьявить FIELD-SYMBOLS для таблички которая обьявлена как TYPE STANDARD TABLE OF.


DATA: gt_mkol TYPE STANDARD TABLE OF mkol WITH HEADER LINE.

FIELD-SYMBOLS <fs_mkol> TYPE LINE OF gt_mkol. " <--- так не дает обьявить


Uukrul

Цитата: Паганель від Червень 01, 2009, 12:22:17 ПП
Туплю с утра, так вроде работает, правда будет ли прирост скорости:
Ну мне тоже интересно будет ли прирост, как считать время выполнения есть в ветке про оптимизацию абапа, предлагаю в качество домашнего задания замерять время выполнения двух вариантов по 10 прогонов, на каждый и дописать пример в ветку про оптимизацию.

Паганель

Цитата: Uukrul від Червень 01, 2009, 12:29:10 ПП
Ну мне тоже интересно будет ли прирост, как считать время выполнения есть в ветке про оптимизацию абапа, предлагаю в качество домашнего задания замерять время выполнения двух вариантов по 10 прогонов, на каждый и дописать пример в ветку про оптимизацию.


Ссори наверное не получится, в тестовой системе не достаточно данных что бы нормально что то проверить, а продуктив не чаще чем 1 раз в день 1 запрос .... притом проверенный без всяких дополнительных фич (типа вставок для тестирования скорости) такова теперь жизнь .... все надо сделать за один раз .....

Паганель

Тут вообще-то что то есть ..... только еще не разобрался ....

http://sapforum.biz/index.php/topic,430.msg2455.html#msg2455

пока вижу что может объявлять FIELD-SYMBOLS: <fs_mseg> TYPE ANY .

Uukrul

Цитата: Паганель від Червень 01, 2009, 12:32:48 ПП
Ссори наверное не получится, в тестовой системе не достаточно данных что бы нормально что то проверить, а продуктив не чаще
Берешь MSEG и проверяешь, там данных наверное должно быть достаточно... тебе же скорость надо проверить, именно твоя таблица в данном случае не важна.


Паганель

Что-то туплю, может кто-то подскажет .....

Для оптимизации делаю следующее:

"Вьюха z_mkpf_mseg mkpf + mseg
DATA: gt_mseg TYPE STANDARD TABLE OF z_mkpf_mseg WITH HEADER LINE.
SELECT
         werks AS werks budat AS budat  matnr AS matnr
         lifnr AS lifnr shkzg AS shkzg
         SUM( menge ) AS menge
    "APPENDING CORRESPONDING FIELDS OF TABLE gt_mseg
    APPENDING TABLE gt_mseg
    FROM mseg
    WHERE
      werks IN  so_werks  AND
      budat => so_budat-low  AND   "!!! (может быть просто >) ???
      matnr IN  so_matnr AND
      lifnr IN  so_lifnr  AND
      sobkz = 'K'
      GROUP BY werks budat matnr lifnr shkzg. " Может не группировать?

Чего то падает в дамп:DBIF_RSQL_INVALID_RSQL


Uukrul

Цитата: Паганель від Червень 02, 2009, 04:52:54 ПП
Что группировать нельзя?
Ну вообще-то APPENDING TABLE gt_mseg а на входе у тебя DATA: gt_mseg TYPE STANDARD TABLE OF z_mkpf_mseg, как-то структурки не сходятся?!

SMF spam blocked by CleanTalk