SAPфорум.RU https://sapboard.ru/forum/ |
|
Чекбокс на экране выбора модифицирует запрос к БД https://sapboard.ru/forum/viewtopic.php?f=13&t=96375 |
Страница 1 из 1 |
Автор: | sonics [ Чт, май 10 2018, 09:27 ] |
Заголовок сообщения: | Чекбокс на экране выбора модифицирует запрос к БД |
Здравствуйте. Часть экрана выбора: 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 ? Подскажите пожалуйста. |
Автор: | Kuranov.Dmitry [ Чт, май 10 2018, 09:42 ] |
Заголовок сообщения: | Re: Чекбокс на экране выбора модифицирует запрос к БД |
Вот кусок примера из хелпа по оператору 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 и два селекта |
Автор: | Besa [ Чт, май 10 2018, 09:45 ] |
Заголовок сообщения: | Re: Чекбокс на экране выбора модифицирует запрос к БД |
Sonic, У Вас же пример под носом Code: zppmrp5~matnr_1 IN so_mat1 AND заполните выше по условию какой нибудь range so_level чтобы сделать zppmrp5~elevel IN... или на селективный экран вывести поле если это подходит и дать возможность заполнять его. или f1 по where и смотреть динамику. |
Автор: | sonics [ Чт, май 10 2018, 09:53 ] |
Заголовок сообщения: | Re: Чекбокс на экране выбора модифицирует запрос к БД |
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. вот тут я и попал... |
Автор: | sonics [ Чт, май 10 2018, 09:53 ] |
Заголовок сообщения: | Re: Чекбокс на экране выбора модифицирует запрос к БД |
Besa написал: Sonic, У Вас же пример под носом Code: zppmrp5~matnr_1 IN so_mat1 AND заполните выше по условию какой нибудь range so_level чтобы сделать zppmrp5~elevel IN... или на селективный экран вывести поле если это подходит и дать возможность заполнять его. или f1 по where и смотреть динамику. хм, туговато идет ... ) сейчас попробую |
Автор: | Kengur [ Чт, май 10 2018, 10:42 ] |
Заголовок сообщения: | Re: Чекбокс на экране выбора модифицирует запрос к БД |
пора для соникса делать отдельный подфорум |
Автор: | Kuranov.Dmitry [ Чт, май 10 2018, 10:49 ] |
Заголовок сообщения: | Re: Чекбокс на экране выбора модифицирует запрос к БД |
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. |
Автор: | Kuranov.Dmitry [ Чт, май 10 2018, 10:53 ] |
Заголовок сообщения: | Re: Чекбокс на экране выбора модифицирует запрос к БД |
Ну или так как писал 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 с ним всегда истина . <Что то> и ИСТИНА = <что-то> Таким образом строка из условия как бы уберется. в вашем случае это более красиво будет чем два селекта в разных ветках условия |
Автор: | sonics [ Чт, май 10 2018, 10:57 ] |
Заголовок сообщения: | Re: Чекбокс на экране выбора модифицирует запрос к БД |
Kengur написал(а): пора для соникса делать отдельный подфорум я уже со многим разобрался! но исходя из того, что на обучение мой завод не профинансирует, приходится разбираться так . . . вопросами, хелпом понимаю, что большинство вопросов достаточно простых, но все же мне не хватает иногда, простого, доступного описания simple words |
Автор: | sonics [ Чт, май 10 2018, 11:01 ] |
Заголовок сообщения: | Re: Чекбокс на экране выбора модифицирует запрос к БД |
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. |
Автор: | Kuranov.Dmitry [ Чт, май 10 2018, 11:06 ] |
Заголовок сообщения: | Re: Чекбокс на экране выбора модифицирует запрос к БД |
Цитата: ак очень сильно нагружает БД и запрос обрабатывается долго, у меня идет соединение двух таблиц по 3-4 млн каждая и определенные критерии. если я выведу сразу таблицу, а потом почищу от elevel = 1, то приходится долго ждать. А при elevel=1 в селекте, транзакция отрабатывается в течение 15-20 сек. ну так зачем вы хотите его убирать по флажку?) |
Автор: | sonics [ Чт, май 10 2018, 11:16 ] |
Заголовок сообщения: | Re: Чекбокс на экране выбора модифицирует запрос к БД |
Kuranov.Dmitry написал(а): Цитата: ак очень сильно нагружает БД и запрос обрабатывается долго, у меня идет соединение двух таблиц по 3-4 млн каждая и определенные критерии. если я выведу сразу таблицу, а потом почищу от elevel = 1, то приходится долго ждать. А при elevel=1 в селекте, транзакция отрабатывается в течение 15-20 сек. ну так зачем вы хотите его убирать по флажку?) а потому, что надо смотреть помимо Изделия, еще и конкретные ДСЕ или УЗЕЛ и т.д. и т.п. более конкретную информацию по производству деталей. Надо! Это планирование производства и анализ подробный... дали бы денег на новый сервак, проблем бы меньше было и на обучение еще бы отправили |
Автор: | sonics [ Чт, май 10 2018, 15:58 ] |
Заголовок сообщения: | Re: Чекбокс на экране выбора модифицирует запрос к БД |
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 с ним всегда истина . <Что то> и ИСТИНА = <что-то> Таким образом строка из условия как бы уберется. в вашем случае это более красиво будет чем два селекта в разных ветках условия это было шикарно . . . О_о попробую вникнуть, но работает! спасибо! |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |