Текущее время: Вс, июл 20 2025, 12:10

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


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

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


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

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