Текущее время: Вс, авг 03 2025, 12:08

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Нужен перебор полей таблицы, на работе сказали не знаем такое. неужели правда ...?
СообщениеДобавлено: Пн, июн 25 2007, 07:14 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
Всем привет!

ну очень мне щас нужен перебор полей таблицы. или метод получения сумм полей таблицы не по колонке а по строке.
ибо у меня есть таблица с 20-ю полями одинакового типа (итоговые суммы) и всегда одна строка, и складывать перечисляя все поля
главныйИтог = поле1 + поле1 + ... + полеN ну очень не охота.

пробовал через симболс ... ругается мол нету такого поля в таблице.
тут строка lineFlax содержит поля с данными
itHash данная таблица содежит значения, которые означают имена полей предыдущей таблицы.
т.е. хотел сделать так перебор хэша с именрами полей и получая имя поля подставлять его в таблицу со значениями.
Code:
READ TABLE i_HSLSUM INDEX 1 into lineFlax.
  DO 16 TIMES.
    READ TABLE itHash  WITH KEY keyHash = sy-index into lnHash.
    assign lnHash-volAcct to <hsl>.
    SumBeging = SumBeging + lineFlax-<hsl>.
    write:  lineFlax-<hsl>.
  ENDDO.


вот собственно сабж ....


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 25 2007, 07:37 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Примерно так:
Code:
concatenate 'LINEFLAX-' lnHash-volAcct into FieldName.
assign (FieldName) to <hsl>.
SumBeging = SumBeging + <hsl>.
write:  <hsl>.
При этом имена полей в volAcct должны быть составлены прописными буквами.

Но проще так:
Code:
field-symbols <f> like LINEFLAX-FLD1.
data: incr type i.
clear SumBeging.
do 16 times.
   incr = sy-index - 1.
   assign LINEFLAX-FLD1 to <f> increment incr.
    SumBeging = SumBeging + <f>.
    write: <f>.
endddo.


Последний раз редактировалось sibrin Пн, июн 25 2007, 07:46, всего редактировалось 2 раз(а).

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужен перебор полей таблицы, на работе сказали не знаем такое. неужели правда ...?
СообщениеДобавлено: Пн, июн 25 2007, 07:44 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Salmaner написал:
Всем привет!

ну очень мне щас нужен перебор полей таблицы. или метод получения сумм полей таблицы не по колонке а по строке.
ибо у меня есть таблица с 20-ю полями одинакового типа (итоговые суммы) и всегда одна строка, и складывать перечисляя все поля
главныйИтог = поле1 + поле1 + ... + полеN ну очень не охота.

пробовал через симболс ... ругается мол нету такого поля в таблице.
тут строка lineFlax содержит поля с данными
itHash данная таблица содежит значения, которые означают имена полей предыдущей таблицы.
т.е. хотел сделать так перебор хэша с именрами полей и получая имя поля подставлять его в таблицу со значениями.

А справку по field-symbols прочитать сложно? Там ведь есть и примеры использования.
Salmaner написал:
Code:
READ TABLE i_HSLSUM INDEX 1 into lineFlax.
  DO 16 TIMES.
    READ TABLE itHash  WITH KEY keyHash = sy-index into lnHash.
    assign lnHash-volAcct to <hsl>.


если в lnHash-volAcct имя поля, то вначале
concatenate 'LINEFLAX-' lnHash-volAcct into fieldnamefull.
а потом
assign (fieldnamefull) to <hsl>.
Salmaner написал:
Code:
    SumBeging = SumBeging + lineFlax-<hsl>.
    write:  lineFlax-<hsl>.


SumBeging = SumBeging + <hsl>.
write: <hsl>.
Salmaner написал:
Code:
  ENDDO.


вот собственно сабж ....

_________________
"После" - не значит "вследствие"


Последний раз редактировалось sy-uname Пн, июн 25 2007, 07:46, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 25 2007, 07:45 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
Цитата:
При этом имена полей в volAcct должны быть составлены прописными буквами.

Они как раз и прописные, а вот какого типа должен быть
Цитата:
FieldName

... можно символьным сделать?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 25 2007, 07:48 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Salmaner написал:
... можно символьным сделать?

Нужно.

PS. Я выше дописал ещё один вариант, когда не хочется знать имена полей. Можно использовать и устаревший вариант do ... varying.


Последний раз редактировалось sibrin Пн, июн 25 2007, 07:50, всего редактировалось 2 раз(а).

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 25 2007, 07:50 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Salmaner написал:
Цитата:
При этом имена полей в volAcct должны быть составлены прописными буквами.

Они как раз и прописные, а вот какого типа должен быть
Цитата:
FieldName

... можно символьным сделать?

String или Char достаточной длины, что-бы влез итог concatenate 'LINEFLAX-' lnHash-volAcct

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 25 2007, 07:54 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
да да, сделал достаночной длины ... тока вот почему то
вернуло все по нулям ... :roll:

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

вау, огромное спасибо sy-uname и sibrin за помощь и бучку по поводу хелпа.
ну не знаю не понятный он какой то хелп.


Последний раз редактировалось Salmaner Пн, июн 25 2007, 08:18, всего редактировалось 2 раз(а).

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 25 2007, 07:57 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Кстати, такая конструкция
Code:
concatenate 'LINEFLAX-' lnHash-volAcct into FieldName.
assign (FieldName) to <hsl>.

сработает только если LINEFLAX объявлена глобпльно.
для локальнвх переменных лучше воспользоваться
assign component lnHash-volAcct of structure lineFlax to <hsl>.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 25 2007, 08:24 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
sy-uname

ну на сколько я понимаю на данный момент, моя LINEFLAX и есть глобальная переменная т.е. она объявленна не в подпрограмме а в начале очтета в разделе всех DATA
хорошо что напомнили а то я уже задумываюсь все это дело (объявление хешных таблиц, структур) перенисти в подпрограммки или лучше в инклуды.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 25 2007, 08:35 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
можно так примерно:

Code:
DATA: wa TYPE <тип строки таблицы>.
FIELD-SYMBOLS: <fs> TYPE ANY.

DO.
ASSIGN COMPONENT sy-index OF STRUCTURE wa TO <fs>.
IF sy-subrc = 0.
*здесь делаем то, что нам нужно
ELSE.
  EXIT.
ENDIF.
ENDDO.


такой вариант хорош тем, что не надо явно указывать число итераций цикла DO ... ENDDO. по нашей структуре


Последний раз редактировалось Art386 Пн, май 26 2008, 07:04, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 25 2007, 08:43 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
А такой вариант не подойдет?

Code:
      SELECT umsav
             um01s um02s um03s um04s um05s um06s
             um07s um08s um09s um10s um11s um12s
             um13s um14s um15s um16s
       FROM knc1 INTO CORRESPONDING FIELDS OF TABLE it_knc1
       WHERE kunnr = pkunnr AND
             bukrs = pbukrs AND
             gjahr = pdate(4).

      READ TABLE it_knc1 INDEX 1.
      ADD it_knc1-umsav FROM 1 TO 16 GIVING balance.


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

Зарегистрирован:
Ср, июн 01 2005, 09:40
Сообщения: 536
Откуда: Belgorod
Пол: Мужской
мне кажется вам нужна данная обработка.
DO 31 TIMES
VARYING tpr FROM t552a-tpr01 NEXT t552a-tpr02
* VARYING ttp FROM t552a-ttp01 NEXT t552a-ttp02
VARYING ftk FROM t552a-ftk01 NEXT t552a-ftk02
VARYING var FROM t552a-var01 NEXT t552a-var02.
IF tpr IS INITIAL.
EXIT.
ENDIF.
ENDDO


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

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


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

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


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

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