Текущее время: Ср, июл 18 2018, 16:40

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Ср, май 16 2018, 14:37 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 298
в продолжение темы... могу ли сделать select через переменную вместо ZPPMRP5 - будет table_name
в при выборе droplist, что выше сделан, подставлялось бы через case table_name = zppmp5?
я еще не пробовал, но я не могу понять как даже задать вопрос :(
Code:
SELECTION-SCREEN BEGIN OF BLOCK selection1 WITH FRAME TITLE text-008.
  SELECT-OPTIONS so_matnr FOR zppmrp5-matnr. "Изделие
  SELECT-OPTIONS so_mat1 FOR zppmrp5-matnr_1. "ДСЕ
  SELECT-OPTIONS so_mat2 FOR zppmrp5-matnr_2. "Узел
  SELECT-OPTIONS so_arb1 FOR zppmrp5-arbpl_1. "Цех изготовитель
  SELECT-OPTIONS so_arb2 FOR zppmrp5-arbpl_2. "Цех потребитель
  SELECT-OPTIONS so_pbdnr FOR zppmrp5-pbdnr. "План потребности
  SELECT-OPTIONS so_ZBESK FOR zppmrp5-ZBESK. "Вид заготовки в концерне
SELECTION-SCREEN END OF BLOCK selection1.

SELECTION-SCREEN BEGIN OF BLOCK parametrs-block WITH FRAME TITLE text-007.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN POSITION 1.
    PARAMETERS p_chbox AS CHECKBOX DEFAULT 'X'.
    SELECTION-SCREEN COMMENT 10(24) text-001 FOR FIELD p_chbox.
  SELECTION-SCREEN END OF LINE.

  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN POSITION 1.
    PARAMETERS p_cb6 AS CHECKBOX.
    SELECTION-SCREEN COMMENT 10(25) text-009 FOR FIELD p_cb6.
  SELECTION-SCREEN END OF LINE.

  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN POSITION 1.
    PARAMETERS: p_cb1 AS CHECKBOX DEFAULT 'X'.
    SELECTION-SCREEN COMMENT 5(14) text-002 FOR FIELD p_cb1.
    PARAMETERS: p_cb2 AS CHECKBOX DEFAULT 'X'.
    SELECTION-SCREEN COMMENT 23(15) text-003 FOR FIELD p_cb2.
    PARAMETERS: p_cb3 AS CHECKBOX DEFAULT 'X'.
    SELECTION-SCREEN COMMENT 42(15) text-004 FOR FIELD p_cb3.
    PARAMETERS: p_cb4 AS CHECKBOX DEFAULT 'X'.
    SELECTION-SCREEN COMMENT 62(14) text-005 FOR FIELD p_cb4.
    PARAMETERS: p_cb5 AS CHECKBOX DEFAULT 'X'.
    SELECTION-SCREEN COMMENT 79(12) text-006 FOR FIELD p_cb5.
  SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK parametrs-block.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Ср, май 16 2018, 14:51 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 323
Code:
DATA gs_record TYPE PA0002.
DATA g_tabmane(20).

PARAMETERS: p_list_a TYPE char3 AS LISTBOX VISIBLE LENGTH 30
  OBLIGATORY DEFAULT '001'
  USER-COMMAND change_p_list_a.        " список

INITIALIZATION.
*// пропущено заполнение списка

START-OF-SELECTION.
CASE p_list_a.
   WHEN '001'. g_tabname = 'PA0001'.
   WHEN '002'. g_tabname = 'PA0002'.
ENDCASE.

SELECT SINGLE * INTO CORRESPONDING FIELDS OF  gs_record FROM (g_tabname) WHERE pernr = '12345678'.



Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Чт, май 17 2018, 12:28 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 298
Поясните пожалуйста запись:
Code:
SELECT SINGLE * INTO CORRESPONDING FIELDS OF  gs_record FROM (g_tabname) WHERE pernr = '12345678'.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Чт, май 17 2018, 12:37 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 323
sonics написал(а):
Поясните пожалуйста запись:
Code:
SELECT SINGLE * INTO CORRESPONDING FIELDS OF  gs_record FROM (g_tabname) WHERE pernr = '12345678'.


обычный селект
(g_tabname) означает, что имя таблицы не g_tabname, а находится внутри переменной g_tabname

в моем примере PA0001 и PA0002 это имена таблиц
pernr это поле в таблице по которому выборка идет.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Чт, май 17 2018, 14:57 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 298
Kuranov.Dmitry написал(а):
обычный селект
(g_tabname) означает, что имя таблицы не g_tabname, а находится внутри переменной g_tabname

в моем примере PA0001 и PA0002 это имена таблиц
pernr это поле в таблице по которому выборка идет.

т.е. название траблицы будет храниться в p_list_b и p_list_a
и я могу делать
Code:
SELECT p_list_a~matnr_1
       p_list_a~datuv
       p_list_a~matnr_2
       p_list_a~matnr
       p_list_a~werks
       p_list_a~arbpl_1
       p_list_a~arbpl_2
       p_list_a~seqnr
       p_list_a~elevel
       p_list_a~pbdnr
       p_list_a~zbesk
       p_list_a~IA
*       zppmrp5~ENTMG

       p_list_a~gamng AS gamng_td
       p_list_a~gamng_1 AS gamng_1_td
       p_list_b~gamng AS gamng_ld
       p_list_b~gamng_1 AS gamng_1_ld

  INTO CORRESPONDING FIELDS OF TABLE gt_result_tab
  FROM p_list_a
  LEFT
    JOIN p_list_b ON p_list_b~matnr = p_list_a~matnr
        AND p_list_b~matnr_1 = p_list_a~matnr_1
        AND p_list_b~matnr_2 = p_list_a~matnr_2
        AND p_list_b~arbpl_1 = p_list_a~arbpl_1
        AND p_list_b~arbpl_2 = p_list_a~arbpl_2
        AND p_list_b~seqnr = p_list_a~seqnr
        AND p_list_b~werks = p_list_a~werks
        AND p_list_b~pbdnr = p_list_a~pbdnr
        AND p_list_b~elevel = p_list_a~elevel
  WHERE "zppmrp5~elevel = 1 AND
        p_list_a~elevel in r_elevel AND
        p_list_a~matnr_1 IN so_mat1 AND
        p_list_a~matnr_2 IN so_mat2 AND
        p_list_a~matnr IN so_matnr AND
        p_list_a~arbpl_1 IN so_arb1 AND
        p_list_a~arbpl_2 IN so_arb2 AND
        p_list_a~ZBESK IN so_ZBESK.

верно я понимаю?

а не верно.... нам надо p_list_a-g_tabname ? может так ? или как я могу обратиться :(


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Чт, май 17 2018, 15:30 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 323
нет, так как вы написали не пойдет


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Чт, май 17 2018, 16:12 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 298
тогда все время на каждый case вставлять select и т.д.
но это же гулпо и громоздко.
как же ? (:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Чт, май 17 2018, 16:14 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 323
Цитата:
тогда все время на каждый case вставлять select и т.д.
но это же гулпо и громоздко.
как же ? (


Вы мой пример смотрели?
он от вашего случая отличается только тем, что у него нет джоина и меньше условий.
там всего 1 селект и 1 case.

в кейс формируете имена таблиц в переменных и затем используете один динамический селект


Последний раз редактировалось Kuranov.Dmitry Чт, май 17 2018, 16:40, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Чт, май 17 2018, 16:17 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 323
Если вам не нравится селект, то можно так: в качестве ключа в списке использовать имя таблицы.


Code:
DATA gs_record TYPE PA0002.
DATA g_tabmane(20).
DATA:
      list       TYPE vrm_values,
      value      LIKE LINE OF list.


PARAMETERS: p_list_a TYPE char20 AS LISTBOX VISIBLE LENGTH 30
  OBLIGATORY DEFAULT 'PA0001'
  USER-COMMAND change_p_list_a.        " список

INITIALIZATION.
  CLEAR value.
  REFRESH list.

  value-key  = 'PA0001'.
  value-text = 'Организационные данные'.
  APPEND value TO list.

  value-key  = 'PA0002'.
  value-text = 'Персональные данные'.
  APPEND value TO list.


  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = 'P_LIST_A'
      values = list.


START-OF-SELECTION.


SELECT SINGLE * INTO CORRESPONDING FIELDS OF  gs_record FROM (p_list_a) WHERE pernr = '12345678'.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Чт, май 17 2018, 16:50 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 11:34
Сообщения: 702
Откуда: Tashkent -> Astana -> Moscow
Пол: Мужской
Я не хотел бы повторяться конечно, т.к. форумчане в нескольких ваших темах уже говорили об этом вам, а именно почитать все таки хоть какую то документацию по ABAP (найти соответствующие курсы и посмотреть примеры, благо их полно в системе). Но складывается ощущение, что вы просто игнорируете эти ответы и продолжаете штамповать подобные темы.

:rtfm:

_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Чт, май 17 2018, 17:06 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 298
ghost написал:
Я не хотел бы повторяться конечно, т.к. форумчане в нескольких ваших темах уже говорили об этом вам, а именно почитать все таки хоть какую то документацию по ABAP (найти соответствующие курсы и посмотреть примеры, благо их полно в системе). Но складывается ощущение, что вы просто игнорируете эти ответы и продолжаете штамповать подобные темы.

:rtfm:

да нет, листаю книги
но задачи то специфические, от книг отличаются . . .
где могу, так применяю)
SAP Press - ABAP Basics, 2007.pdf
SAP Press - ABAP Cookbook, 2010.pdf


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Чт, май 17 2018, 17:44 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 298
если бы вы еще давали более точные рекомендации по литературе, было совсем супер...
а не "что-нибудь") я уже насмотрелся и видео, и книг...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Чт, май 17 2018, 17:55 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 11:34
Сообщения: 702
Откуда: Tashkent -> Astana -> Moscow
Пол: Мужской
курсы BC400 - BC4...

_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Чт, май 17 2018, 17:56 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 323
Ну к примеру, ваш пост: viewtopic.php?p=572971#p572971


Вы по синтаксис со скобочками вообще не поняли?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическая выборка таблиц
СообщениеДобавлено: Пт, май 18 2018, 10:35 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 298
Kuranov.Dmitry написал(а):
Ну к примеру, ваш пост: viewtopic.php?p=572971#p572971
Вы по синтаксис со скобочками вообще не поняли?

вроде все понятно, кроме селекта для меня :(
затрудняюсь, у меня сложный селект с left join, с двумя таблицами
Code:
SELECT SINGLE * INTO CORRESPONDING FIELDS OF  gs_record FROM (g_tabname) WHERE pernr = '12345678'.

+ не совсем понял Where pernr = '12345678'
мы копируем все записи таблицы gs_record в (g_tabname) (ее мы указываем в case), где pernr - .... это поле ? и что за значение
Code:
SELECT zppmrp5~matnr_1
       zppmrp5~datuv
       zppmrp5~matnr_2
       zppmrp5~matnr
       zppmrp5~werks
       zppmrp5~arbpl_1
       zppmrp5~arbpl_2
       zppmrp5~seqnr
       zppmrp5~elevel
       zppmrp5~pbdnr
       zppmrp5~zbesk
       zppmrp5~IA
*       zppmrp5~ENTMG

       zppmrp5~gamng AS gamng_td
       zppmrp5~gamng_1 AS gamng_1_td
       zppmrp5_tmp1~gamng AS gamng_ld
       zppmrp5_tmp1~gamng_1 AS gamng_1_ld

  INTO CORRESPONDING FIELDS OF TABLE gt_result_tab
  FROM zppmrp5
  LEFT
    JOIN zppmrp5_tmp1 ON zppmrp5_tmp1~matnr = zppmrp5~matnr
        AND zppmrp5_tmp1~matnr_1 = zppmrp5~matnr_1
        AND zppmrp5_tmp1~matnr_2 = zppmrp5~matnr_2
        AND zppmrp5_tmp1~arbpl_1 = zppmrp5~arbpl_1
        AND zppmrp5_tmp1~arbpl_2 = zppmrp5~arbpl_2
        AND zppmrp5_tmp1~seqnr = zppmrp5~seqnr
        AND zppmrp5_tmp1~werks = zppmrp5~werks
        AND zppmrp5_tmp1~pbdnr = zppmrp5~pbdnr
        AND zppmrp5_tmp1~elevel = zppmrp5~elevel
  WHERE "zppmrp5~elevel = 1 AND
        zppmrp5~elevel in r_elevel AND
        zppmrp5~matnr_1 IN so_mat1 AND
        zppmrp5~matnr_2 IN so_mat2 AND
        zppmrp5~matnr IN so_matnr AND
        zppmrp5~arbpl_1 IN so_arb1 AND
        zppmrp5~arbpl_2 IN so_arb2 AND
        zppmrp5~ZBESK IN so_ZBESK.

SELECT zppmrp5_tmp1~matnr_1
       zppmrp5_tmp1~matnr_2
       zppmrp5_tmp1~werks
       zppmrp5_tmp1~matnr
       zppmrp5_tmp1~arbpl_1
       zppmrp5_tmp1~arbpl_2
       zppmrp5_tmp1~datuv
       zppmrp5_tmp1~seqnr
       zppmrp5_tmp1~elevel
       zppmrp5_tmp1~pbdnr
       zppmrp5_tmp1~gamng AS gamng_ld
       zppmrp5_tmp1~gamng_1 AS gamng_1_ld
       zppmrp5_tmp1~zbesk
       zppmrp5_tmp1~IA

       zppmrp5~gamng AS gamng_td
       zppmrp5~gamng_1 AS gamng_1_td

  APPENDING CORRESPONDING FIELDS OF TABLE gt_result_tab
  FROM zppmrp5_tmp1
  LEFT
    JOIN zppmrp5 ON zppmrp5~matnr = zppmrp5_tmp1~matnr
        AND zppmrp5~matnr_1 = zppmrp5_tmp1~matnr_1
        AND zppmrp5~matnr_2 = zppmrp5_tmp1~matnr_2
        AND zppmrp5~arbpl_1 = zppmrp5_tmp1~arbpl_1
        AND zppmrp5~arbpl_2 = zppmrp5_tmp1~arbpl_2
        AND zppmrp5~seqnr = zppmrp5_tmp1~seqnr
        AND zppmrp5~werks = zppmrp5_tmp1~werks
        AND zppmrp5~pbdnr = zppmrp5_tmp1~pbdnr
        AND zppmrp5~elevel = zppmrp5_tmp1~elevel
  WHERE "zppmrp5_tmp1~elevel = 1 AND
        zppmrp5_tmp1~elevel in r_elevel AND
        zppmrp5_tmp1~matnr_1 IN so_mat1 AND
        zppmrp5_tmp1~matnr_2 IN so_mat2 AND
        zppmrp5_tmp1~matnr IN so_matnr AND
        zppmrp5_tmp1~arbpl_1 IN so_arb1 AND
        zppmrp5_tmp1~arbpl_2 IN so_arb2 AND
        zppmrp5_tmp1~ZBESK IN so_ZBESK.

попробую поискать примеры динамической выборки еще, чтобы сравнить...
да и ошибка
Цитата:
The field "G_TABNAME" is unknown, but there is a field with the similar name "G_TABMANE" . . . .

как говорит один из популярных когда-то мемов "сложнааааааа" :(


Последний раз редактировалось sonics Пт, май 18 2018, 11:01, всего редактировалось 2 раз(а).

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

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


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

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


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

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