Текущее время: Пн, июл 07 2025, 14:49

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Можно ли сделать универсальный отчет или странного хочется
СообщениеДобавлено: Вт, июл 25 2006, 17:53 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, июн 10 2005, 10:08
Сообщения: 72
Коллеги!

Вот хочется такой весчи.
1. Запускаю транзакцию...
2. На селекционном экране пишу запрос. Любой. Тот, который возвращает таблицу.
Ну, например:
"select * from anla where anlkl in (select anlkl from anka where ktopl cp '1*')".
То есть такой запросик, который в SE11 так просто не получишь.
3. Запускаю выполнение
4. Получаю в виде ALV-grid (или хоть в каком-нибудь) результат выполнения запроса.

Возможно ли создать вот такой инструмент?
Или совсем невозможного хочется?
Может быть он уже существует?
Какие есть альтернативы?

Спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 25 2006, 19:49 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Вроде бы SAP Query делает что-то в этом роде: http://help.sap.com/saphelp_nw04/helpda ... ontent.htm

Мы в некоторых случаях еще заводим view в SE11 по двум таблицам.


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

Зарегистрирован:
Чт, авг 19 2004, 07:31
Сообщения: 234
Откуда: Нижнекамск
посмотри ФМ RFC_READ_TABLE
может поможет чем нибудь


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

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
А если нужно udate сделать, можно использовать SE80->Environment->Examples->Performance Examples


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июл 26 2006, 09:25 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Если Вам нужно обрабатывать любой запрос, то иначе чем через GENERATE SUBROUTINE POOL, я не представляю, как это сделать. А вот с выводом данных придётся помучиться, я думаю. Анализировать состав получаемых полей, строить по ним динамически внутреннюю таблицу и её выводить в грид... Как-то так... Может, кто предложит что попроще.


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

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Вот наткнулся на группу функций SDBI_SQL, там есть, например DB_SQL_PARSE. Похоже эти функции используются в SQL-Trace (все это в 4.7)

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


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

Зарегистрирован:
Ср, сен 21 2005, 10:01
Сообщения: 651
Откуда: СССР
EGF написал(а):
Если Вам нужно обрабатывать любой запрос, то иначе чем через GENERATE SUBROUTINE POOL, я не представляю, как это сделать. А вот с выводом данных придётся помучиться, я думаю. Анализировать состав получаемых полей, строить по ним динамически внутреннюю таблицу и её выводить в грид... Как-то так... Может, кто предложит что попроще.

Предлагаю также запрашивать имя структуры для вывода, построить по ней вн. таблицу, выбрать into corresponding fields, а потом в АЛВ, сославшись на эту же структуру вместо филдкаталога.


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

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Цитата:
Предлагаю также запрашивать имя структуры для вывода, построить по ней вн. таблицу, выбрать into corresponding fields


В случае
Code:
select field1 field2
  from table1 join table2

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

А синтаксис бывает разнообразным:
Code:
select   table1~field as field1   table2~field as field2


Последний раз редактировалось sibrin Ср, июл 26 2006, 11:36, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июл 26 2006, 11:12 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
sibrin написал:
А синтаксис бывает разнообразным|:
Code:
select   table1~field as field1   table2~field as field2


Разнообразным, но не бесконечно разнообразным :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июл 26 2006, 13:29 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 16:09
Сообщения: 202
REPORT ZQK00523 .

parameters: p_tab type dd02l-tabname default 'SPFLI'
, p_langu type sy-langu default 'RU'
, p_list radiobutton group aa
, p_alv radiobutton group aa
.

data : r_dat type ref to data
, r_dsc type ref to cl_abap_typedescr
, r_elm type ref to cl_abap_elemdescr
, t_dsc type string
, s_elm type DFIES
, pos type i value 1
, r_cnt type ref to cl_gui_custom_container
, r_alv type ref to cl_gui_alv_grid
.

field-symbols
: <r> type any
, <f> type any
, <g> type any
, <t> type any table
.

top-of-page.
do.
assign component sy-index of structure <r> to <g>.
if sy-subrc ne 0.
exit.
endif.
r_dsc = cl_abap_typedescr=>DESCRIBE_BY_DATA( <g> ) .
r_elm ?= r_dsc.
s_elm = r_elm->GET_DDIC_FIELD( p_langu ).
write: at pos s_elm-REPTEXT.
pos = pos + s_elm-OUTPUTLEN + 1.
enddo.
uline.

start-of-selection.
create data r_dat type standard table of (p_tab).
assign r_dat->* to <t>.
select * from (p_tab) into table <t> up to 100 rows.
case 'X'.
when p_list.
loop at <t> assigning <r>.
new-line.
do.
assign component sy-index of structure <r> to <f>.
if sy-subrc ne 0.
exit.
endif.
write: <f>.
enddo.
endloop.
when p_alv.
CREATE OBJECT R_CNT EXPORTING CONTAINER_NAME = 'OUT01'.
CREATE OBJECT R_ALV EXPORTING I_PARENT = r_cnt.
CALL METHOD R_ALV->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = p_tab
CHANGING
IT_OUTTAB = <t>.
call screen 100.
endcase.


вот так


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

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Snegurenok написал(а):
REPORT ZQK00523 .

Исходник от Василия Ковальского :) ?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июл 26 2006, 14:58 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Snegurenok написал(а):
...

вот так


Так то оно так, но только человек хочет результаты любого запроса получать...


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

Зарегистрирован:
Вт, авг 17 2004, 16:09
Сообщения: 202
T написал:
Snegurenok написал(а):
REPORT ZQK00523 .

Исходник от Василия Ковальского :) ?


угу - курсы ООП


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

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Вообще основная проблема - распарсить запрос. Хотя можно и без этого. Опять таки используя Native SQL. И курсоры. Т.е. сначала открываем:
Code:

EXEC SQL.                               
   OPEN CURS FOR                           
        "текст запроса"
ENDEXEC.     

Потом фетчим:
Code:
   
DO.                               
  EXEC SQL.                       
    FETCH NEXT CURS INTO ...   
  ENDEXEC.                       
  IF SY-SUBRC NE 0.               
    EXIT.                         
  ENDIF.                         
ENDDO.

Потом закрываем:
Code:
   
EXEC SQL.                         
  CLOSE CURS                         
ENDEXEC.

Фетчим, понятно в TABLE TYPE ANY. Ну а потом анализ полученных результатов. И вывод хоть WRITE'ом ;)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июл 26 2006, 16:51 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 16:09
Сообщения: 202
EGF написал(а):
Snegurenok написал(а):
...

вот так


Так то оно так, но только человек хочет результаты любого запроса получать...


хм - помоему уперлись в вывод - ну вот результаты любого запроса

SPLIT v_sql AT 'FROM' INTO s1 s2.
SHIFT s2 LEFT DELETING LEADING space.
SPLIT s2 AT space INTO s1 s2.
REFRESH code.
APPEND 'PROGRAM SUBPOOL.' TO code.

APPEND 'FORM get_data using s1 changing tab1.' TO code.
APPEND 'data: r_dat TYPE REF TO data.' TO code.
APPEND 'FIELD-SYMBOLS : <out> TYPE ANY TABLE.' TO code.
APPEND 'CREATE DATA r_dat TYPE STANDARD TABLE OF (s1).' TO code.
APPEND 'ASSIGN r_dat->* TO <out>.' TO code.
APPEND v_sql TO code.
APPEND 'tab1 = <OUT>.' TO code.
APPEND 'ENDFORM.' TO code.
GENERATE SUBROUTINE POOL code
NAME prog
MESSAGE msg
LINE lin
WORD wrd
OFFSET off.


IF sy-subrc <> 0.
MESSAGE i666(01) WITH msg.
EXIT.
ELSE.
CREATE DATA r_dat TYPE STANDARD TABLE OF (s1).
ASSIGN r_dat->* TO <out>.
PERFORM get_data IN PROGRAM (prog)
USING s1 CHANGING <out>.
ENDIF.
************
v_sql - любой запрос результатом которого являеться одна из базовых таблиц.
Единственное ограничение в запросе должно быть обязательно
'INTO TABLE <OUT>'


можно как нить поизящней я думаю - ну ето первое что в голову пришло .


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

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


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

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


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

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