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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Проблема в подключением интерфейса в класс
СообщениеДобавлено: Сб, дек 01 2012, 23:56 
Начинающий
Начинающий

Зарегистрирован:
Сб, дек 01 2012, 23:38
Сообщения: 4
Всем добрый вечер!!!

У меня следующая проблема: создала интерфейс и хочу его определить в классе lcl_airplane, как показано ниже. Но выдает ошибку, что такой интерфейс не известен, а если подключаю в файле класса include, то пишет, что уже такой интерфейс существует.
В include-файле z_interface_partner объявила интерфейс.

INTERFACE PARTNER.

METHODS DISPLAY_DATA.

ENDINTERFACE.
--------------------------------------------------------------
В include-файле Z_AIRPLANE его определяю:

CLASS LCL_AIRPLANE DEFINITION.

PUBLIC SECTION.

INTERFACES: partner.

ENDCLASS.
*-----------------------------------------------------------
CLASS LCL_AIRPLANE IMPLEMENTATION.
METHOD partner~display_data.
...
ENDMETHOD.
ENDCLASS.

Подскажите, в чем моя ошибка, что не так я подключаю или объявляю. пользуюсь minisap.

ЗАРАНЕЕ БОЛЬШОЕ СПАСИБО ВСЕМ.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема в подключением интерфейса в класс
СообщениеДобавлено: Вс, дек 02 2012, 13:07 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Очень путано излагаете. Покажите в каком инклюде у вас интерфейс, а в каком - класс. Так же покажите, как у вас подключаются инклюды в программу(в какой последовательности). Определения интерфейсов должны идти в коде раньше определений классов.
Кроме того, рекомендую правильно именовать классы\интерфейсы. Если они у вас локальные, то что-то типа lif_partner - для интерфейса, lcl_airplane - для класса. Если глобальные, то что-то вида zif_partner и zcl_airplane соответственно.

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема в подключением интерфейса в класс
СообщениеДобавлено: Вс, дек 02 2012, 15:55 
Начинающий
Начинающий

Зарегистрирован:
Сб, дек 01 2012, 23:38
Сообщения: 4
Попробуй разъяснить. Речь идет о локальном интерфейсе и классе. В программе, в диспетчере объектов, там где все основные перечислены include, нажимаю правой кнопкой мыши=> добавить include-файл => ввожу имя z_interface_partner. Далее в в этом файле пишу следующее:

INTERFACE PARTNER.

METHODS DISPLAY_DATA.

ENDINTERFACE.

ВСЕ, файл сохраняю.

Далее в существующем INCLUDE-файле, с именем Z_AIRPLANE с описанием и определением класса LCL_AIRPLANE добавляю следующие строки в класс:

* INCLUDE z_interface_partner.

CLASS LCL_AIRPLANE DEFINITION.
PUBLIC SECTION.
...
INTERFACES: partner.
ENDCLASS.


CLASS LCL_AIRPLANE IMPLEMENTATION.
METHOD partner~display_data.
...
ENDMETHOD.
ENDCLASS.

И все, снова сохраняю. При запуске программы пишет, что интерфейс с именем partner не известен. Если убираю комментарии в строке INCLUDE z_interface_partner. , то пишет, что интерфейс с именем partner уже существует.
Что я делаю не так?!!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема в подключением интерфейса в класс
СообщениеДобавлено: Вс, дек 02 2012, 16:34 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Как бэ много чего делаете не так.
Крайне рекомендую все-таки придерживаться правил наименования программных объектов.
[нострадамус mode on]
Когда Вы вставили в программу новый include. Он, по идее, автоматом добавился в главную часть вашей программы. Я не знаю какой именно тип программы Вы выбрали(отчет или модуль-пул). Но, скорее всего, ваш инклюд с интерфейсом там есть, и т.к. он добавлялся уже после инклюда с классом, то мастер создания воткнул его ниже по коду. Из-за этого в первом варианте у вас класс еще не знает о наличии в проге интерфейса, а при добавлении инклюда Вами руками в инклюд с классом Вы получаете задвоение.
Просто сделайте все по порядку и аккуратно: создайте новую программу. Вставьте туда инклюд с интерфейсом (в главной программе), следом за ним - инклюд с классом.
И не забудьте дать объектам правильные имена
[нострадамус mode off]

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема в подключением интерфейса в класс
СообщениеДобавлено: Вс, дек 02 2012, 17:11 
Начинающий
Начинающий

Зарегистрирован:
Сб, дек 01 2012, 23:38
Сообщения: 4
Большое спасибо за совет, сейчас попробую.
Я перехожу на abap с с++, и может термины некоторые именно оттуда беру. Обучаюсь по книгу bc401. Объясните, пожалуйста, а какие термины я именно не правильно использую, вроде и класс и интерфейс из книги?!!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема в подключением интерфейса в класс
СообщениеДобавлено: Вс, дек 02 2012, 17:52 
Начинающий
Начинающий

Зарегистрирован:
Сб, дек 01 2012, 23:38
Сообщения: 4
Огромное спасибо!!! действительно все работает. А как можно все таки добавлять интерфейсы позже (уже много классов и include написано), не создавая из=за них новый проект. может быть как-то поменять местами в каком-нибудь файле все добавленные include?!! Заранее большое спасибо! :D


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема в подключением интерфейса в класс
СообщениеДобавлено: Вс, дек 02 2012, 20:21 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
1) Почитайте, пожалуйста, мануалы, например здесь, а еще конкретнее вот здесь, а размышления авторов системы о том, как писать программы вот здесь
2) Да, можно поменять местами файлы (имейте ввиду: в абапе инклюд - просто кусок текста, который будет вставлен в программу в месте своего вызова). Но Вы рискуете получить другие проблемы
3) можно создать глобальный интерфейс в библиотеке классов\интерфейсов и использовать его

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема в подключением интерфейса в класс
СообщениеДобавлено: Пн, дек 03 2012, 11:07 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
Алина написал(а):
А как можно все таки добавлять интерфейсы позже (уже много классов и include написано), не создавая из=за них новый проект. может быть как-то поменять местами в каком-нибудь файле все добавленные include?!!
1) В ABAP'е нет понятия проекта – есть несколько типов программ. Или же пакет.
2) Один из типов программ – Include-программы. Фактически это [несамостоятельный] кусок кода, который вставляется в другую программу. Когда Вы хотите использовать Include-программу с помощью оператора INCLUDE "имя_Include", представьте себе, что весь код из "имя_Include" скопирован вместо строчки INCLUDE "имя_Include". Поэтому если одна Include-программа содержит интерфейс, другая – определение (definition) класса, этот интерфейс реализующего, третья – реализацию (implementation) класса, четвертая – класс, унаследованный от описанного ранее, вставлять в каком попало порядке Include-программы не получится.
3) "Добавлять интерфейсы позже" – можно, только нужно обращать внимание на порядок. Плюс может возникнуть проблема со взаимной вложенностью Includ'ов.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

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


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

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


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

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