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

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


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

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


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

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