Текущее время: Пт, мар 29 2024, 01:59

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


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


ВНИМАНИЕ!

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



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

Зарегистрирован:
Пн, июл 17 2017, 14:11
Сообщения: 375
Здравствуйте.
Часть экрана выбора:
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, 09:42 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 05 2017, 23:56
Сообщения: 537
Вот кусок примера из хелпа по оператору 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, 09:45 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

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

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

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


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

Зарегистрирован:
Пн, июл 17 2017, 14:11
Сообщения: 375
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, 09:53 
Старший специалист
Старший специалист

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

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

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

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


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

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

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


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

Зарегистрирован:
Вт, сен 05 2017, 23:56
Сообщения: 537
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, 10:53 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 05 2017, 23:56
Сообщения: 537
Ну или так как писал 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, 10:59, всего редактировалось 1 раз.

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

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

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


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

Зарегистрирован:
Пн, июл 17 2017, 14:11
Сообщения: 375
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, 11:06 
Менеджер
Менеджер
Аватара пользователя

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


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


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

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


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

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


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

Зарегистрирован:
Пн, июл 17 2017, 14:11
Сообщения: 375
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 + 3 часа


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

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


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

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