Текущее время: Вс, июл 27 2025, 19:13

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Вывод на экран содержимого по запросу из нескольких таблиц
СообщениеДобавлено: Чт, мар 10 2011, 23:07 
Начинающий
Начинающий

Зарегистрирован:
Чт, мар 10 2011, 22:05
Сообщения: 6
Здравствуйте. Помогите разобраться начинающему. Звучит как поможите кто чем может, мы люди не местные :)
Есть две таблицы ZTAB и ZTAB2. Связаны по ключу STOCKNO = F0 и имеют View Table ZTAB_VW. Имеется скрин который выводит на экран содержимое (output) таблиц ZTAB (поля F0, F1, F2, F3) и ZTAB2 (поля F0, F4, F5, F6, F7) по запросу из STOCKNO.

Данные и константы заданы в инклюде...
Code:
module ZACTION input.
CASE FCODE.
    WHEN C_FCODE_REQ.
         PERFORM F0_REQ CHANGING FLAG_FOUND.
IF FLAG_FOUND = FALSE.
         MESSAGE I001.  "Выводит сообщение из созданного Messages Classes - Z_mess_class

      ELSE.

        SELECT * FROM ZTAB_VW INTO TABLE I_ZTAB_VW
         WHERE F0 = I_ZTAB_VW-F0.
ENDIF.
ENDCASE.
endmodule.               " ZACTION  INPUT

*ПОДПРОГРАММА...

form F0_REQ  changing P_FLAG_FOUND TYPE BOOLEAN.

  P_FLAG_FOUND = FALSE.
  SELECT * FROM  ZTAB_VW
           WHERE F0 = ZTAB_VW-F0.

    IF SY-SUBRC = 0.
      P_FLAG_FOUND = TRUE.
EXIT.
    ENDIF.

ENDSELECT.

endform.                   " F0_REQ


Вот если я использую, и кстати правильно ли делаю, что использую View Table, то содержимое двух таблиц (все поля) выводится на экран. Но при вводе неправильного значения F0 выдается системная ошибка "Entry 0392 does not exist in ZTAB (check entry)" а не та что я задал в Месседж.

Если делаю селект из ZTAB, то информационное сообщение выдается из моего Месседжа, но отображается только содержимое полей F1, F2, F3,
а содержимое полей F4, F5, F6, F7 не выводятся на экран. Понятно что надо связать как то две таблицы, но ведь есть же ключ по которому они связаны.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вывод на экран содержимого по запросу из нескольких таблиц
СообщениеДобавлено: Пт, мар 11 2011, 05:57 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Если честно, так сумбурно все написано... Из всего этого я понял, что Вам нужно почитать про внешние ключи и про ракурсы ведения.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод на экран содержимого по запросу из нескольких таблиц
СообщениеДобавлено: Пт, мар 11 2011, 11:57 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 14 2011, 07:26
Сообщения: 80
Откуда: Альфа Центавра
Пол: Мужской
peleken написал(а):
*ПОДПРОГРАММА...
form F0_REQ changing P_FLAG_FOUND TYPE BOOLEAN.

P_FLAG_FOUND = FALSE.
SELECT * FROM ZTAB_VW
WHERE F0 = ZTAB_VW-F0.

IF SY-SUBRC = 0.
P_FLAG_FOUND = TRUE.
EXIT.
ENDIF.

ENDSELECT.

endform. " F0_REQ[/code]


Лучше через Select Single

peleken написал(а):
TYPE BOOLEAN.
P_FLAG_FOUND = FALSE.
P_FLAG_FOUND = TRUE.


Где вы объявляете константы?
Использую Type-Pools ABAP. Type ABAP_BOOL
Там ABAP_FALSE = ‘ ‘, а в BOOLEAN false ‘-’ как-то странно


peleken написал(а):
Но при вводе неправильного значения F0 выдается системная ошибка "Entry 0392 does not exist in ZTAB (check entry)"

MESSAGE I001. "Выводит сообщение из созданного Messages Classes - Z_mess_class

Вы используете короткую форму Message
Класс сообщения наверное указали в

REPORT ... MESSAGE-ID mid.


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

Зарегистрирован:
Чт, мар 10 2011, 22:05
Сообщения: 6
matik написал:
Где вы объявляете константы?
Использую Type-Pools ABAP. Type ABAP_BOOL
Там ABAP_FALSE = ‘ ‘, а в BOOLEAN false ‘-’ как-то странно


Спасибо за ответ!
Константы и все остальное я объявляю в инклюде.

Code:
*&---------------------------------------------------------------------*
*& Include Z_TAB_TOP                                             Module Pool      Z_TEST_PROG
*&
*&---------------------------------------------------------------------*

PROGRAM  Z_TEST_PROG message-id SU.

TABLES:
ZTAB,
ZTAB2,
ZTAB_VW.

TYPES:
BOOLEAN TYPE C,
SCREEN_CODE LIKE SY-DYNNR,
STATUS_CODE LIKE SY-PFKEY,
TITLEBAR_CODE(3) TYPE N,
FUNCTION_CODE(4) TYPE C.

DATA:
FCODE TYPE FUNCTION_CODE,
FLAG_FOUND TYPE BOOLEAN,

I_ZTAB_VW LIKE ZTAB_VW OCCURS 0
     WITH HEADER LINE,

MSGID LIKE SY-MSGID VALUE 'SU',
      MSGTY LIKE SY-MSGTY VALUE 'I',
      MSGNO LIKE SY-MSGNO VALUE '001'.

CONSTANTS:
FALSE TYPE C VALUE ' ',
TRUE TYPE C VALUE 'X',

C_TITLE_REQ TYPE TITLEBAR_CODE VALUE '100',
C_STATUS_REQ TYPE STATUS_CODE VALUE 'REQUEST',
C_SCREEN_REQ TYPE SCREEN_CODE VALUE '0100',
C_FCODE_REQ TYPE FUNCTION_CODE VALUE 'REQU',
C_FCODE_CLEAR TYPE FUNCTION_CODE VALUE 'CLEA',
C_FCODE_EXIT TYPE FUNCTION_CODE VALUE 'EXIT'.


Сейчас по вашим ответам разбираюсь.
Что то, где то я не доделываю....
Будем искать...

В предыдущем посте я ошибся - таблицы ZTAB и ZTAB2 связаны по внешнему ключу F0.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вывод на экран содержимого по запросу из нескольких таблиц
СообщениеДобавлено: Пт, мар 11 2011, 18:20 
Начинающий
Начинающий

Зарегистрирован:
Чт, мар 10 2011, 22:05
Сообщения: 6
Ну вроде разобрался как таблицы связать и вывести на экран их содержимое.

Code:
module ZACTION_REQUEST input.
CASE FCODE.
    WHEN C_FCODE_REQ.
         PERFORM F0_REQ CHANGING FLAG_FOUND.
IF FLAG_FOUND = FALSE.
         MESSAGE I001.

      ELSE.

        SELECT * FROM ZTAB INTO TABLE I_ZTAB.
        SELECT * FROM ZTAB2 INTO TABLE I_ZTAB2
         FOR ALL ENTRIES IN I_ZTAB
         WHERE F0 = I_ZTAB-F0
          AND F0 = I_ZTAB2-F0.
      LOOP AT I_ZTAB.
        LOOP AT I_ZTAB2
          WHERE F0 = I_ZTAB-F0.
          WRITE: I_ZTAB-F1,
          I_ZTAB-F2,
          I_ZTAB-F3,
          I_ZTAB2-F4,
          I_ZTAB2-F5,
          I_ZTAB-F6.
      ENDLOOP.
      ENDLOOP.

ENDIF.

ENDCASE.
endmodule.


Но вот вывод сообщения об ошибке - не могу врубиться.
matik написал:
Вы используете короткую форму Message
Класс сообщения наверное указали в

REPORT ... MESSAGE-ID mid.

Можно поподробнее. Почему выдает системную ошибку вместо мной прописанную? Если поле ввода F0 остается чистым то при нажатии "Ввод" выскакивает прописанное мной сообщение. Если я ввожу в F0 неверное число, которого нет в таблице ZTAB то выскакивает вышеупомянутая системная ошибка и все кнопки (очистка поля, реквест и тд) не работают пока не введешь правильное значение. После ввода правильного значения все становится ОК.


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

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


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

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


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

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