Текущее время: Чт, авг 16 2018, 22:11

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Чекбокс на экране выбора модифицирует запрос к БД
СообщениеДобавлено: Чт, май 10 2018, 10:27 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 302
Здравствуйте.
Часть экрана выбора:
Code:
  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.

Часть запроса к бд:
Code:
  WHERE zppmrp5~elevel = 1 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.

Не разобрался как сделать так, чтобы при снятии галочки, убиралась строка WHERE zppmrp5~elevel = 1 AND или как-то так должно быть, чтобы выбирались все elevel ?
Подскажите пожалуйста.


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

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 326
Вот кусок примера из хелпа по оператору SELECT:

Code:
PARAMETERS: airline(2) TYPE C,
            date       TYPE D.
DATA: where_clause TYPE STRING,
      connid       TYPE sflight-connid.

CONCATENATE     'carrid = ''' airline ''''
            ' AND fldate = ''' date '''' INTO where_clause.

SELECT connid FROM sflight INTO connid
  WHERE (where_clause).
  WRITE: / date, airline, connid.
ENDSELECT.


модифицируйте под свою задачу

второй вариант, сделать IF-ELSE
и два селекта


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

Зарегистрирован:
Чт, ноя 11 2004, 17:25
Сообщения: 2952
Пол: Мужской
Sonic, У Вас же пример под носом :)
Code:
zppmrp5~matnr_1 IN so_mat1 AND

заполните выше по условию какой нибудь range so_level чтобы сделать zppmrp5~elevel IN...
или на селективный экран вывести поле если это подходит и дать возможность заполнять его.

или f1 по where и смотреть динамику.


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

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 302
Kuranov.Dmitry написал(а):
Вот кусок примера из хелпа по оператору SELECT:

Code:
PARAMETERS: airline(2) TYPE C,
            date       TYPE D.
DATA: where_clause TYPE STRING,
      connid       TYPE sflight-connid.

CONCATENATE     'carrid = ''' airline ''''
            ' AND fldate = ''' date '''' INTO where_clause.

SELECT connid FROM sflight INTO connid
  WHERE (where_clause).
  WRITE: / date, airline, connid.
ENDSELECT.


модифицируйте под свою задачу

второй вариант, сделать IF-ELSE
и два селекта

Я вот и хотел сделать if else, но в секции where же нельзя так сделать :(

грубо говоря я же не могу сделать так
WHERE IF p_chbox is INITIAL.
zppmrp5~elevel = 1.
ENDIF.
:( вот тут я и попал...


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

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 302
Besa написал:
Sonic, У Вас же пример под носом :)
Code:
zppmrp5~matnr_1 IN so_mat1 AND

заполните выше по условию какой нибудь range so_level чтобы сделать zppmrp5~elevel IN...
или на селективный экран вывести поле если это подходит и дать возможность заполнять его.

или f1 по where и смотреть динамику.

хм, туговато идет ... ) сейчас попробую


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

Зарегистрирован:
Чт, дек 20 2007, 19:21
Сообщения: 1124
пора для соникса делать отдельный подфорум :D

_________________
я твой сап эфай внедрял
BAdI-позитив


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

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 326
sonics написал(а):
Kuranov.Dmitry написал(а):
Вот кусок примера из хелпа по оператору SELECT:

Code:
PARAMETERS: airline(2) TYPE C,
            date       TYPE D.
DATA: where_clause TYPE STRING,
      connid       TYPE sflight-connid.

CONCATENATE     'carrid = ''' airline ''''
            ' AND fldate = ''' date '''' INTO where_clause.

SELECT connid FROM sflight INTO connid
  WHERE (where_clause).
  WRITE: / date, airline, connid.
ENDSELECT.


модифицируйте под свою задачу

второй вариант, сделать IF-ELSE
и два селекта

Я вот и хотел сделать if else, но в секции where же нельзя так сделать :(

грубо говоря я же не могу сделать так
WHERE IF p_chbox is INITIAL.
zppmrp5~elevel = 1.
ENDIF.
:( вот тут я и попал...


Почитайте курсы по абапу ....

зачем в WHERE пихать IF?

IF p_flag = 'X'.
SELECT ...
ELSE.
SELECT...
endif.


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

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 326
Ну или так как писал Besa

Code:

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.

DATA l_elevel like zppmrp5-elevel.
RANGES r_eleveel FOR l_elevel.

IF p_chbox = 'X'.
   clear r_elevel.
else.
   r_elevel-low = 1.
  r_elevel-option = 'EQ'.
  r_elevel-sign = 'I'.
  append r_elevel.
endif.


SELECT * FROM zppmrp5
WHERE 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.



грубо говоря, если RANGE пустой, то условие IN с ним всегда истина .

<Что то> и ИСТИНА = <что-то>
Таким образом строка из условия как бы уберется.

в вашем случае это более красиво будет чем два селекта в разных ветках условия


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

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

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 302
Kengur написал(а):
пора для соникса делать отдельный подфорум :D

я уже со многим разобрался! :)
но исходя из того, что на обучение мой завод не профинансирует, приходится разбираться так . . . вопросами, хелпом
понимаю, что большинство вопросов достаточно простых, но все же мне не хватает иногда, простого, доступного описания simple words :D


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

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

зачем в WHERE пихать IF?

IF p_flag = 'X'.
SELECT ...
ELSE.
SELECT...
endif.

так очень сильно нагружает БД и запрос обрабатывается долго, у меня идет соединение двух таблиц по 3-4 млн каждая и определенные критерии.
если я выведу сразу таблицу, а потом почищу от elevel = 1, то приходится долго ждать.
А при elevel=1 в селекте, транзакция отрабатывается в течение 15-20 сек.
Поэтому и такая вот задача.... что нужно именно в моем селекте

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~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
  WHERE zppmrp5~elevel = 1 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
  WHERE zppmrp5_tmp1~elevel = 1 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.


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

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 326
Цитата:
ак очень сильно нагружает БД и запрос обрабатывается долго, у меня идет соединение двух таблиц по 3-4 млн каждая и определенные критерии.
если я выведу сразу таблицу, а потом почищу от elevel = 1, то приходится долго ждать.
А при elevel=1 в селекте, транзакция отрабатывается в течение 15-20 сек.


ну так зачем вы хотите его убирать по флажку?)


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

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 302
Kuranov.Dmitry написал(а):
Цитата:
ак очень сильно нагружает БД и запрос обрабатывается долго, у меня идет соединение двух таблиц по 3-4 млн каждая и определенные критерии.
если я выведу сразу таблицу, а потом почищу от elevel = 1, то приходится долго ждать.
А при elevel=1 в селекте, транзакция отрабатывается в течение 15-20 сек.


ну так зачем вы хотите его убирать по флажку?)

а потому, что надо смотреть помимо Изделия, еще и конкретные ДСЕ или УЗЕЛ и т.д. и т.п.
более конкретную информацию по производству деталей.
Надо! :)
Это планирование производства и анализ подробный...
дали бы денег на новый сервак, проблем бы меньше было :(
и на обучение еще бы отправили :D


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

Зарегистрирован:
Пн, июл 17 2017, 15:11
Сообщения: 302
Kuranov.Dmitry написал(а):
Ну или так как писал Besa

Code:

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.

DATA l_elevel like zppmrp5-elevel.
RANGES r_eleveel FOR l_elevel.

IF p_chbox = 'X'.
   clear r_elevel.
else.
   r_elevel-low = 1.
  r_elevel-option = 'EQ'.
  r_elevel-sign = 'I'.
  append r_elevel.
endif.


SELECT * FROM zppmrp5
WHERE 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.



грубо говоря, если RANGE пустой, то условие IN с ним всегда истина .

<Что то> и ИСТИНА = <что-то>
Таким образом строка из условия как бы уберется.

в вашем случае это более красиво будет чем два селекта в разных ветках условия

это было шикарно . . . О_о
попробую вникнуть, но работает! спасибо!


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

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


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

Сейчас этот форум просматривают: BingBot


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

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