Текущее время: Пт, апр 19 2024, 13:19

Часовой пояс: 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 часа


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

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


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

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