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

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


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

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


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

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