Текущее время: Вт, июл 29 2025, 09:07

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Возов Perform извне.
СообщениеДобавлено: Сб, июл 28 2007, 19:19 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
День добрый.

Есть такая необходимость.

Создать класс. Сделать в нем определенную обработку.
и вызвать perform извне (передав ей имя).

пример

Есть класс:

Code:
CLASS MYCLASS DEFINITION.
PUBLIC SECTION.
  DATA:  Functionname1 type STRING.  "тут надо ввести имя функции,

METHODS: CALLPERFORM.

ENDCLASS.

CLASS MYCLASS  IMPLEMENTATION.

METHOD CALLPERFORM.
PERFORM (Functionname1)
ENDMETHOD.


endclass.




и теперь PBO

Code:
DATA:  MC TYPE REF TO MYCLASS.
CREATE OBJECT MC.
MC->Functionname1 = 'myPerform'.
MC->CALLPERFORM.




FORM myPerform USING a b c
......
ENDFORM.



Собственно совершенно не представляю как вызвать динамически perform из вне. Да еще perform c параметрами.

Кто то делал такое? Направьте на путь истинный. если можно с примерами.

Спасибо.


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

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
Собственно у тебя уже все сделано.
Например вот:

method MAKE_DOCUMENT.
DATA: b_has_activex.

DATA:
ole2_appl TYPE ole2_object,
ole2_sheet TYPE ole2_object.
DATA:
lt_sheets TYPE soi_sheets_table,
ls_sheets TYPE soi_sheets,
ls_handle TYPE cntl_handle.
data: sheet TYPE REF TO i_oi_spreadsheet.
CHECK sheet IS INITIAL.

DATA:
retcode TYPE soi_ret_string.
DATA:
error TYPE REF TO i_oi_error.


* Открытие шаблона
CALL METHOD document->open_document
EXPORTING
* DOCUMENT_TITLE = ' '
document_url = shablon_file_name
* NO_FLUSH = ' '
open_inplace = 'X'
open_readonly = 'X'
protect_document = 'X'
* STARTUP_MACRO = ''
* USER_INFO =
* ONSAVE_MACRO =
IMPORTING
error = error
retcode = retcode
.
IF retcode <> 'OK'.
* MESSAGE w015(zmsg) RAISING excel_error.
ENDIF.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = 70
text = text-t01.
* Получаем интерфейс для работы с листом
CALL METHOD document->get_spreadsheet_interface
IMPORTING
sheet_interface = sheet
error = error
retcode = retcode.
CALL METHOD error->raise_message
EXPORTING
type = 'S'.
CHECK NOT sheet IS INITIAL.
CALL METHOD sheet->get_sheets
* EXPORTING
* NO_FLUSH = ' '
* UPDATING = -1
IMPORTING
sheets = lt_sheets
error = error
retcode = retcode
.
IF retcode <> 'OK'.
* RAISE excel_error .
ENDIF.


READ TABLE lt_sheets INTO ls_sheets INDEX 1.
IF sy-subrc NE 0.
ls_sheets-sheet_name = 'TEMPLATE'.
ENDIF.
CALL METHOD sheet->select_sheet
EXPORTING
name = ls_sheets-sheet_name
IMPORTING
error = error
retcode = retcode.
CALL METHOD document->get_document_handle
IMPORTING
error = error
handle = ls_handle
retcode = retcode.
* Формирование листа в Excel
GET PROPERTY OF ls_handle-obj 'Application' = ole2_appl.

CALL METHOD OF ole2_appl 'ACTIVESHEET' = ole2_sheet.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = 90
text = text-t03.

PERFORM (subr) IN PROGRAM (prog) USING ole2_appl
ole2_sheet.


endmethod.


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

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
Поясните немного эту строчку.

Code:
PERFORM (subr) IN PROGRAM (prog) USING ole2_appl



интересует
Code:
IN PROGRAM (prog)

какая программа имеется в виду?

пытался написать program Myprog. не работает.

Мой экран где PAI и PBO? писал название инклуда в котором PAI и PBO... не работает.

я юзаю класс в єкране. где 2а метода PBO И PAI. Эти методы в отдельном инклуде.

типа:

Code:
MODULE  SCR0001_PBO.

..... мой класс.

ENDMODULE.

MODULE  SCR0001_PAI.

ENDMODULE.


" а мой перформ тут.

FORM MYFORM.
...
ENDFORM.

" Где указывать программ?


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

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
subr - название перформа
prog - название программы, в которой такой есть(вообще говоря любая активная программа)
При несовпадении параметров будет дамп.

например программа z_my_test_1
и подпрограмма test1


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

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
__Gennady написал(а):
prog - название программы, в которой такой есть(вообще говоря любая активная программа)
При несовпадении параметров будет дамп.


Это я понял. я не понял что подразумевается под программой?

Экран это программа? Или часть программы?
Инклуд это программа?
Или весь класс разработки это программа?


Мой перформ находится в экране 0001. Класс разаработки. ZSALARY

что указать в IN PROGRAM ?

все что не указываю все в дампе.


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

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
Название программы, которое указывается при ее создании.
Или при открытии через se38. Или в классе разработок можно посмотреть.


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

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
__Gennady написал(а):
Название программы, которое указывается при ее создании.
Или при открытии через se38. Или в классе разработок можно посмотреть.


ok.. спасибо. Попробую. Cейчас уже тестануть не могу, ушел с работы. в понедельник попробую. Я не так глобально мыслил :shock:


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

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
apetrenko написал:
Это я понял. я не понял что подразумевается под программой?
Экран это программа? Или часть программы?
Инклуд это программа?
Или весь класс разработки это программа?

Может для начала изучить теорию? Курсы почитать? help.sap.com в конце концов? F1 нажать?
Programs, Screens, and Processing Blocks
Цитата:
Мой перформ находится в экране 0001. Класс разаработки. ZSALARY

что указать в IN PROGRAM ?

все что не указываю все в дампе.


Когда-же у этих прогульщиков практика завершиться?

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


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

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
to sy-uname

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

Не все имеют за плечами многолетний опыт работы. И не всегдя есть возможность проходить курсы. Есть работа, есть проблемма, ее нужно решать сейчас. Иногда ее быстро решить не получается в связи с отсутствием опыта в ABAPe.И даже прочитав help Даже задав совсем казалось глупый вопрос и получив на него ответ, это всеравно вклад в базу знаний этого форума, и позвалит в дальнейшем сократить такие глупые вопросы. Сам по поиску нахожу нужные ответы, даже на глупые фопросы. И если когда либо, набравшись опыта, я увижу
глупый вопрос который явно вытекает из helpа, для меня не составит труда ответить примером или ссылкой на явный пример.
Спасибо.

p.s. Просьба не развивать этот вопрос. Я написал это не для упреканий и не для ссоры.


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

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
apetrenko написал:
Есть работа, есть проблемма, ее нужно решать сейчас. .

Есть больной, есть болезнь - лечить надо сейчас, а учить медицину будем потом - и вот так у нас всё и везде.

Что касается вопроса:
Цитата:
Собственно совершенно не представляю как вызвать динамически perform из вне. Да еще perform c параметрами.
Кто то делал такое? Направьте на путь истинный. если можно с примерами.

то отает на него находится всего в паре кликов - встать в редакторе на PERFORM, нажать F1 и внимательно изучить справку - дело 5 минут, которое на форуме растянулось на пару дней.
Ещё можно спросить товарищей на проекте, они, заодно, укажут на очевидные глупости и ляпы в коде.

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


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

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
sy-uname написал(а):
apetrenko написал:
Есть работа, есть проблемма, ее нужно решать сейчас. .

Есть больной, есть болезнь - лечить надо сейчас, а учить медицину будем потом - и вот так у нас всё и везде.



Вот видите.. вы в курсе. так и есть. учу АБАП по книжке.
Что касается вопроса:
Цитата:
Собственно совершенно не представляю как вызвать динамически perform из вне. Да еще perform c параметрами.
Кто то делал такое? Направьте на путь истинный. если можно с примерами.
то отает на него находится всего в паре кликов - встать в редакторе на PERFORM, нажать F1 и внимательно изучить справку - дело 5 минут, которое на форуме растянулось на пару дней.
Ещё можно спросить товарищей на проекте, они, заодно, укажут на очевидные глупости и ляпы в коде.


я указал выше почему параметр IN PROGRAM поставил меня в тупик. Но вроде теперь понятно. Попробую в понедельник. Сейчас дома.Собственно на нем я и заткнулся. Мне не было понятно что подрозумевалось под программой в ABAPE. инклуд? экран? .... так это все программы. какое имя юзать? имя инклуда? имя экрана? класса разработок?. Но __Gennady вроде все подсказал.

лан.. вроде разобрались.


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

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
возник еще вопрос.

во первых спасибо __Gennady с перформой разобрались.


Теперь 1 маленький вопрос.

Вот кусок класса стандартный пример из доки по ALV
для создания собственного контекстного меню.


Code:
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
  METHODS:
    SET_context_menu
      for EVENT context_menu_request OF cl_gui_alv_grid
       IMPORTING e_object,
    SET_User_Command
      for EVENT user_command OF  cl_gui_alv_grid
       IMPORTING e_ucomm.
PRIVATE SECTION.
ENDCLASS.

CLASS lcl_event_handler IMPLEMENTATION.
METHOD SET_context_menu.
PERFORM handle_context_menu_request USING e_object.
ENDMETHOD.
METHOD SET_User_Command.
PERFORM handle_user_command USING e_ucomm.
ENDMETHOD.

ENDCLASS.



тут все работает. вопросов нет

но мне нужно в методах SET_context_menu и SET_User_Command
вызвать свой перформ. Передать классу строкой имена функций и выполнить.

класс примерно начинает выглядеть так:

Code:
CLASS lcl_event_handler_alv DEFINITION.
PUBLIC SECTION.
   DATA   programm_name  TYPE STRING.
   DATA   FUNCTION_FOR_CONTEXT_MENU  TYPE STRING.
   DATA   FUNCTION_FOR_USER_COMMAND  TYPE STRING.

  METHODS:
    SET_context_menu
      for EVENT context_menu_request OF cl_gui_alv_grid
       IMPORTING e_object,
    SET_User_Command
      for EVENT user_command OF  cl_gui_alv_grid
       IMPORTING e_ucomm.
  METHODS: MYEXEC.
PRIVATE SECTION.
ENDCLASS.

CLASS lcl_event_handler_alv IMPLEMENTATION.
METHOD SET_context_menu.
PERFORM (FUNCTION_FOR_CONTEXT_MENU) IN PROGRAM (programm_name)  USING e_object.
ENDMETHOD.
METHOD SET_User_Command.
PERFORM (FUNCTION_FOR_USER_COMMAND) IN PROGRAM (programm_name) USING e_ucomm.
ENDMETHOD.


METHOD MYEXEC.
PERFORM (FUNCTION_FOR_CONTEXT_MENU) IN PROGRAM (programm_name)  USING e_object.
ENDMETHOD.


так вот. динамический перформ неработает в событии.

Для теста я добавил свой метод MYEXEC который просто вызывается
ОН РАБОТАЕТ. тоесть все параметры переданы правильно.

Почему в событии неработает?

ошибка PERFORM_NOT_FOUND.

действительно если в строке PERFORM добавить IF FOUND
дампа нет но и функция не работает. Все верно.

Что ж не так в событии?


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

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
apetrenko написал:
DATA programm_name TYPE STRING.
DATA FUNCTION_FOR_CONTEXT_MENU TYPE STRING.
DATA FUNCTION_FOR_USER_COMMAND TYPE STRING.


Попробуйте заменить TYPE STRING на C и указать название программы и подпрограммы большими буквами.


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

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
vga написал(а):
apetrenko написал:
DATA programm_name TYPE STRING.
DATA FUNCTION_FOR_CONTEXT_MENU TYPE STRING.
DATA FUNCTION_FOR_USER_COMMAND TYPE STRING.


Попробуйте заменить TYPE STRING на C и указать название программы и подпрограммы большими буквами.



мдя.. :shock: заработало.. попробовал только большими буквами.. этого оказалось достаточно.

а в чем разница то? вопрос уже чисто риторический...


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

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
Насчет больших букв - все просто. Все данные так или иначе хранятся в таблицах БД. А поиск в БД регистрозависимый.


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

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


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

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


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

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