Текущее время: Пн, июн 23 2025, 00:21

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Группова обработка записей внутренней таблицы
СообщениеДобавлено: Вт, июн 14 2005, 12:43 
Специалист
Специалист

Зарегистрирован:
Пн, дек 06 2004, 11:36
Сообщения: 151
Есть внутренняя табличка:
докумет позиция условный_номер
1000000 10 3
1000000 20 3
2000000 10 5
2000000 20 5
Не подскажите, как проще всего обработать записи с одинаковым уловным_номером? Т.е. для позиций документов, у которых поле условный_номер = 3 нужно вызвать, например, подпрограмму, в которой они обработаются, этой же подпрограммой нужно обработать группу позиций с условным_номером 5 и т.д.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 14 2005, 12:50 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, авг 17 2004, 08:49
Сообщения: 319
Откуда: Мариуполь
Создать отдельную таблицу, которая бы содержала варианты заполнения поля "условный_номер". Затем выполнить внешний цикл по этой таблице, внутренний цикл с условием по твоей.


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

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
А чем обычный CASE не устраивает?
Code:
LOOP AT itab.
  CASE itab-num.
    WHEN '3'.
      PERFORM subroutine_3.
    WHEN '5'.
      PERFORM subroutine_3.
    ....
  ENDCASE.
ENDLOOP.

_________________
С уважением, Сергей Королев


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

Зарегистрирован:
Пн, дек 06 2004, 11:36
Сообщения: 151
Номера разные могут быть... может 3 и 5, а может 87. Всех вариантов не переберешь.
Вообщем "условный_номер" - это просто признак группировки записей. Если он меняется, то пошла другая группа и для нее своя обработка.


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

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Code:
types: begin of itab_str_type,
         num(10),
         pos(6),
         group(2),
       end of itab_str_type.

types: itab_type type table of itab_str_type.

data: itab type itab_type with header line.
data: itab_part type itab_type.
data: wa like line of itab.

data: index like sy-tabix.

START-OF-SELECTION.

itab = '000000001000000101'.
append itab.

itab = '000000001000000201'.
append itab.

itab = '000000002000000203'.
append itab.

itab = '000000002000000102'.
append itab.

itab = '000000002000000202'.
append itab.

itab = '000000001000000301'.
append itab.

sort itab by group.


loop at itab.

  index = sy-tabix + 1.

  append itab to itab_part.

  read table itab into wa index index.
  if sy-subrc <> 0 or wa-group <> itab-group.
    perform processing tables itab_part.
    refresh itab_part.
  endif.

endloop.
*&---------------------------------------------------------------------*
*&      Form  processing
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_ITAB_PART  text
*----------------------------------------------------------------------*
FORM processing TABLES   PT_ITAB type itab_type.
  loop at PT_ITAB.
    write: / PT_ITAB-NUM, PT_ITAB-POS, PT_ITAB-GROUP.
  endloop.
  skip.

ENDFORM.                    " processing


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

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Если есть возможность поместить группировочное поле на первое место в структуре, то можно и так:

Code:
types: begin of itab_str_type,
         group(2),
         num(10),
         pos(6),
       end of itab_str_type.

types: itab_type type table of itab_str_type.

data: itab type itab_type with header line.
data: itab_part type itab_type.

START-OF-SELECTION.

itab = '010000000010000001'.
append itab.

itab = '010000000010000002'.
append itab.

itab = '020000000010000002'.
append itab.

itab = '030000000010000002'.
append itab.

itab = '020000000010000002'.
append itab.

itab = '010000000010000002'.
append itab.

sort itab by group.

loop at itab.

  append itab to itab_part.

  at end of group.
    perform processing tables itab_part.
    refresh itab_part.
  endat.

endloop.

FORM processing TABLES   PT_ITAB type itab_type.
  loop at PT_ITAB.
    write: / PT_ITAB-NUM, PT_ITAB-POS, PT_ITAB-GROUP.
  endloop.
  uline.
ENDFORM.                    " processing


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

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Geolog написал(а):
Номера разные могут быть... может 3 и 5, а может 87. Всех вариантов не переберешь.
Вообщем "условный_номер" - это просто признак группировки записей. Если он меняется, то пошла другая группа и для нее своя обработка.

ну так можно параметры и через SELECT-OPTIONS задать, что типа того:
Code:
LOOP AT itab.
  IF itab-num IN sopt1.
    PERFORM subroutine1.
  ELSEIF itab-num IN sopt2.
    PERFORM subroutine2.
  .......
  ENDIF.
ENDLOOP.

_________________
С уважением, Сергей Королев


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

Зарегистрирован:
Пн, дек 06 2004, 11:36
Сообщения: 151
Не пойдет. Таблица уже есть - заполнена пользователем на экране, например:
материал группа
a 3
b 3
c 6
d 6
e 7

Теперь нужно обработать записи по группам, согласно значению признака группировки "группа".


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 14 2005, 14:26 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 07 2004, 10:39
Сообщения: 610
LOOP AT itab WHERE если для одной группы,
если для всех, то так, как писал Сергей Королёв

_________________
полный SAPец


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

Зарегистрирован:
Чт, авг 26 2004, 05:04
Сообщения: 922
Откуда: Челябинск
Пол: Мужской
Geolog написал(а):
Не пойдет. Таблица уже есть - заполнена пользователем на экране, например:
материал группа
a 3
b 3
c 6
d 6
e 7

Теперь нужно обработать записи по группам, согласно значению признака группировки "группа".

Если есть уже связь м-ду условным номером и обработчиком - то просто делай loop и вызывай обработку динамически.

_________________
Все будет хорошо...
http://sap-blog.ru/


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

Зарегистрирован:
Чт, авг 26 2004, 05:04
Сообщения: 922
Откуда: Челябинск
Пол: Мужской
Типа такого

Цитата:
REPORT ZFM_DINAM_PERFORM_TEST .
data: begin of zzz occurs 10,
numb(10) type c,
perf(30) type c,
end of zzz.

data: begin of xxx occurs 10,
numb(10) type c,

end of xxx.

zzz-numb = 1.
zzz-perf = 'PERF1'.
append zzz.

zzz-numb = 2.
zzz-perf = 'PERF2'.
append zzz.

zzz-numb = 3.
zzz-perf = 'PERF1'.
append zzz.

xxx-numb = 1.
append xxx.
xxx-numb = 3.
append xxx.
xxx-numb = 2.
append xxx.

loop at xxx.
read table zzz with key numb = xxx-numb.
PERFORM (zzz-perf) IN PROGRAM ZART_DIN.
endloop.

form perf1.
write:/ 'PERF1'.
endform.
form perf2.
write:/ 'PERF2'.
endform.
[/code]

_________________
Все будет хорошо...
http://sap-blog.ru/


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

Зарегистрирован:
Пн, дек 06 2004, 11:36
Сообщения: 151
Спасибо за отзывы.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 16 2005, 22:46 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, сен 21 2004, 17:54
Сообщения: 67
Извините старика, не удержался от комментариев...

Господин Т ответил абсолютно правильно и исчерпывающе в обеих ответах - respect. Весь остальной флейм, вы уж не обижайтесь, какая-то шняга.

А вам, господин Геолог - минус, учите матчасть! :wink:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июн 17 2005, 09:55 
Гость
Полность согласен с тем, что решения, предложенные господином Т, приведут к требуемому результату. Но часто невозможно выполнить предварительную сортировку. Например нужна групповая обработка записей после радактирования в гриде и возвращение обратно в грид при ошибке (материала не хватило на складе для выдачи на несколько разных ОС). Некрасиво увидеть пересортированные записи. Можно перед обработкой перегрузить во временную таблицу, но тогда имеет смысл сразу ее делать сортированной и потеряем связку с записями исходной таблицы (по крайней мере без изощрений) хотя-бы для раскрашивания красным цветом ячеек кол-ва. А можно работать со строками напрямую, сохранив их номера:
Code:
types: begin of itab_str_type,
         num(10),
         pos(6),
         group(2),
       end of itab_str_type.

types: itab_type type table of itab_str_type.

data: itab type itab_type with header line.

data: begin of wa_tabix,
        tabix       like sy-tabix,
      end   of wa_tabix.

data: begin of wa_group,
        group       type itab_str_type-group,
        iTabix      like table of wa_tabix,
      end   of wa_group.

data: it_group like sorted table of wa_group
               with unique key group.

field-symbols: <fs> like line of it_group.

data : nTabix       like sy-tabix.

START-OF-SELECTION.

  itab = '000000001000000101'.
  append itab.

  itab = '000000001000000201'.
  append itab.

  itab = '000000002000000203'.
  append itab.

  itab = '000000002000000102'.
  append itab.

  itab = '000000002000000202'.
  append itab.

  itab = '000000001000000301'.
  append itab.

  loop at itab.
    nTabix = sy-tabix.
    read table it_group assigning <fs>
               with table key group = itab-group.
    if sy-subrc = 0.
      clear: wa_tabix.
      wa_tabix-tabix = nTabix.
      append wa_tabix to <fs>-iTabix.
      modify table it_group from <fs> transporting iTabix.
    else.
      clear: wa_group, wa_tabix.
      refresh: wa_group-iTabix.
      wa_group-group = itab-group.
      wa_tabix-tabix = nTabix.
      append wa_tabix to wa_group-iTabix.
      insert wa_group into table it_group.
    endif.
  endloop.

  loop at it_group assigning <fs>.
    perform processing tables itab using <fs>.
  endloop.

*---------------------------------------------------------------------*
*       FORM processing                                               *
*---------------------------------------------------------------------*
form processing tables itab     type itab_type
                using  wa_group like line of it_group.

  data: wa_tabix like line of wa_group-iTabix.

  loop at wa_group-iTabix into wa_tabix.
    read table itab index wa_tabix-tabix.
    write: / itab-NUM, itab-POS, itab-GROUP.
  endloop.
  skip.

endform.


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

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
2 Stenj_90
Ну если в такой постановке, то ясен перец надо менять подход :)
Идею понял, но где-то тут был мой напильник.. :wink:

Code:
types: begin of itab_str_type,
         num(10),
         pos(6),
         group(2),
       end of itab_str_type.

types: itab_type type table of itab_str_type.

data: itab type itab_type with header line.

data: begin of wa_group,
        group       type itab_str_type-group,
        iTabix      type table of tabix,
      end   of wa_group.

data: it_group like sorted table of wa_group
               with unique key group.

field-symbols: <fs> like line of it_group.

data : nTabix       like sy-tabix.

START-OF-SELECTION.

  itab = '000000001000000101'.
  append itab.

  itab = '000000001000000201'.
  append itab.

  itab = '000000002000000203'.
  append itab.

  itab = '000000002000000102'.
  append itab.

  itab = '000000002000000202'.
  append itab.

  itab = '000000001000000301'.
  append itab.

  loop at itab.
    nTabix = sy-tabix.
    read table it_group assigning <fs>
               with table key group = itab-group.
    if sy-subrc = 0.
      append nTabix to <fs>-iTabix.
    else.
      clear: wa_group.
      wa_group-group = itab-group.
      append nTabix to wa_group-iTabix.
      insert wa_group into table it_group.
    endif.
  endloop.

  loop at it_group assigning <fs>.
    perform processing tables itab <fs>-iTabix.
  endloop.

*---------------------------------------------------------------------*
*       FORM processing                                               *
*---------------------------------------------------------------------*
form processing tables itab     type itab_type
                       pt_index like wa_group-iTabix.

  loop at pt_index.
    read table itab index pt_index.
    write: / itab-NUM, itab-POS, itab-GROUP.
  endloop.
  skip.

endform.


ЗЫ Пятница :D


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

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


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

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


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

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