Текущее время: Вс, май 20 2018, 23:45

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


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


ВНИМАНИЕ!

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



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

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 252
в продолжение темы... могу ли сделать 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
Сообщения: 269
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
Сообщения: 252
Поясните пожалуйста запись:
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
Сообщения: 269
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
Сообщения: 252
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
Сообщения: 269
нет, так как вы написали не пойдет


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

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


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

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


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

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


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

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

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


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
Сообщения: 698
Откуда: Tashkent -> Astana -> Moscow
Пол: Мужской
Я не хотел бы повторяться конечно, т.к. форумчане в нескольких ваших темах уже говорили об этом вам, а именно почитать все таки хоть какую то документацию по ABAP (найти соответствующие курсы и посмотреть примеры, благо их полно в системе). Но складывается ощущение, что вы просто игнорируете эти ответы и продолжаете штамповать подобные темы.

:rtfm:

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


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

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


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

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

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


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

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


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


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

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 252
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  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2, 3  След.

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


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

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


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

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