Текущее время: Пн, май 12 2025, 22:55

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Подскажите, как перебирать внутренние таблицы в цикле?
СообщениеДобавлено: Вт, сен 07 2004, 10:17 
Гость
Может как-то иначе можно решить проблему?
Я хочу сохранить через WS_DOWNLOAD несколько таблиц из базы данных. Для этого создал несколько внутренних таблиц и хочу в лупе делать им селект отправлять в файл.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения: Re: Подскажите, как перебирать внутренние таблицы в цикле?
СообщениеДобавлено: Вт, сен 07 2004, 11:12 
Гость
banah написал(а):
Может как-то иначе можно решить проблему?
Я хочу сохранить через WS_DOWNLOAD несколько таблиц из базы данных. Для этого создал несколько внутренних таблиц и хочу в лупе делать им селект отправлять в файл.


можно попробовать использовать FIELD-SYMBOLS
Code:
DATA: <FS> TYPE ANY TABLE.
ASSIGN (IT_NAME) TO <FS> TYPE (T_IT_NAME).
SELECT * FROM  (DB_NAME) INTO TABLE <FS>.


В IT_NAME - имя внутренней таблицы
В T_IT_NAME - имя типа таблицы IT_NAME (предпологается что он определен через TYPE STANDARD TABLE OF db_name)
В DB_NAME - имя таблицы базы данных.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения: Re: Подскажите, как перебирать внутренние таблицы в цикле?  Тема решена
СообщениеДобавлено: Вт, сен 07 2004, 11:22 
Гость
\\\\\\\ написал(а):
Code:
DATA: <FS> TYPE ANY TABLE.
...


Конечно же
Code:
FIELD-SYMBOLS: <FS> TYPE ANY TABLE.
...


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения: Re: Подскажите, как перебирать внутренние таблицы в цикле?
СообщениеДобавлено: Вт, сен 07 2004, 13:10 
Гость
Code:
ASSIGN (IT_NAME) TO <FS> TYPE (T_IT_NAME).


ТУт получаю "Field (T_IT_NAME) is unknown."

Дай кусочек рабочего кода, плз... К сожалению курс по основам я прослушал, но на вопрос "Расскажите про FIELD_SYMBOLS." мне было отвечено "Да я вообще-то не в курсе что это и зачем, никогда не применял". Самому разобраться по хелпу не удается... полдня уже вожусь...


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения: Re: Подскажите, как перебирать внутренние таблицы в цикле?
СообщениеДобавлено: Вт, сен 07 2004, 13:32 
Гость
Code:
ASSIGN (IT_NAME) TO <FS> TYPE T_IT_NAME.


Рабочий код привести <я не знать русский языка> из-за отсутствия в данный момент системы, иначе сразу-бы и привёл работающий вариант.

FIELD-SYMBOLS - это что-то вроде указатея на переменную.

http://help.sap.com/saphelp_46c/helpdat ... ameset.htm


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, сен 07 2004, 14:05 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
А вот Вам и кусочек кода.

FORM check_and_convert_data
USING pt_file_d TYPE tt_file_d pt_file_i TYPE tt_file_i.
FIELD-SYMBOLS:
<lt_file> TYPE table,
<ls_file> TYPE ANY,
<l_id> TYPE t_id
.
CASE g_type.
WHEN gc_defl.
ASSIGN pt_file_d TO <lt_file>.
WHEN gc_incc.
ASSIGN pt_file_i TO <lt_file>.
ENDCASE.

LOOP AT <lt_file> ASSIGNING <ls_file>.
ASSIGN COMPONENT 'ID' OF STRUCTURE <ls_file> TO <l_id>.
CHECK sy-subrc = 0.
...
ENDLOOP.
ENDFORM.

Здесь, конечно, не весь код. Но главное присутствует.

А можно ещё и вот так.

FUNCTION znlcef_join_tables.
...
*" TABLES
*" PARENT TYPE STANDARD TABLE
...
*" IMPORTING
*" REFERENCE(KEY_FIELD0) TYPE FIELDNAME
...

DATA:
lt_parent TYPE REF TO data,
ls_parent TYPE REF TO data
.

FIELD-SYMBOLS:
<lt_parent> TYPE STANDARD TABLE,
<ls_parent> TYPE ANY,
<p_key0> TYPE ANY
.

GET REFERENCE OF parent[] INTO lt_parent.
ASSIGN lt_parent->* TO <lt_parent>.
CREATE DATA ls_parent LIKE LINE OF <lt_parent>.
ASSIGN ls_parent->* TO <ls_parent>.

LOOP AT <lt_parent> INTO <ls_parent>.
...
ASSIGN COMPONENT key_field0 OF STRUCTURE <ls_parent>
TO <p_key0>.
IF sy-subrc <> 0. EXIT. ENDIF.
...
ENDLOOP.
ENDFUNCTION.

А вообще очень советую разобраться с field-symbols. Полезная штука.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, сен 07 2004, 17:39 
Гость
штука и впрямь полезная :) Проблема решилась. Надо симболс объявлять чуть иначе и не указывать тип при ассайне:
Code:
FIELD-SYMBOLS: <FS> TYPE STANDARD TABLE.
ASSIGN (IT_NAME) TO <FS>.
SELECT * FROM  (DB_NAME) INTO TABLE <FS>.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, сен 08 2004, 16:17 
Гость
Гулять - так гулять...

Вообщем хочу сделать процедуру, которая сохраняет таблицу в файл. Причем не всю, а выбирая записи по ключу из другой таблицы, передаваемой по параметру...

Code:
FORM DOWNLOADCORE
     USING
          FIELD TYPE CHAR10
          DBTAB TYPE CHAR10
          MAINTAB TYPE CHAR10
          RESTAB TYPE CHAR10.

  DATA:  where_tab(80) occurs 1 with header line,
             WHERE(80) TYPE C,
             LONG_FIELD(80).

  REFRESH WHERE_TAB.
  CONCATENATE MAINTAB '-' FIELD INTO LONG_FIELD.
  CONCATENATE FIELD ' =' LONG_FIELD INTO WHERE SEPARATED BY SPACE.
  APPEND WHERE TO WHERE_TAB.

Это, кстати, еще один вопрос. Как собрать строку типа
MANDT = TAB-FIELD через CONCATENATE? Он обрезает заканчивающие пробелы... в итоге из
CONCATENATE 'MANDT = ' TABNAME '-' FIELDNAME INTO WHERE
получаем = приклееное к имени таблицы. Не нашел лучшего способа чем этот...
Code:


  FIELD-SYMBOLS: <PRI> TYPE STANDARD TABLE,
                            <RES> TYPE STANDARD TABLE.

  ASSIGN: (MAINTAB) TO <MAIN>,
                (RESTAB) TO <RES>.

  SELECT *  FROM (DBTAB) CLIENT SPECIFIED APPENDING TABLE <RES>
    FOR ALL ENTRIES IN <MAIN>
    WHERE  (WHERE_TAB).


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


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, сен 08 2004, 16:56 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 12:50
Сообщения: 134
Откуда: UA->DE
Пол: Женский
banah написал(а):
Code:
CONCATENATE MAINTAB '-' FIELD INTO LONG_FIELD.
  CONCATENATE FIELD ' =' LONG_FIELD INTO WHERE SEPARATED BY SPACE.
Не нашел лучшего способа чем этот...

Вот тебе еще один способ, чуть более универсальный:
Code:
CONCATENATE FIELD '!=!' MAINTAB '-' FIELD INTO WHERE.
TRANSLATE WHERE USING '! '. 


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 09 2004, 15:42 
Гость
Так по основному вопросу - решения нет? Нельзя настолько динамичестки строить запрос?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 13 2004, 08:31 
Гость
Я думаю, что пока не существует адекватного способа решения этой задачи, но если так уж хочется, попробуй динамическое программирование или же составляй условие из всех значений MAINTAB


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

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


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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