SAPфорум.RU
https://www.sapboard.ru/forum/

Полезные трюки ABAP
https://www.sapboard.ru/forum/viewtopic.php?f=13&t=87197
Страница 3 из 8

Автор:  olegbash [ Пн, окт 06 2014, 09:01 ]
Заголовок сообщения:  Re: Полезные трюки ABAP

4000/200101

WA1-BUKRS = 4000
WA1-KUNRG = 200101

Автор:  Кодер [ Пн, окт 06 2014, 15:03 ]
Заголовок сообщения:  Re: Полезные трюки ABAP

olegbash при таких условиях у вас будет удаляться только 1 строка
Цитата:
стр5 BUKRS=[5000] VBRK_KUNRG=[200105]

все остальные в первом варианте останутся.

Автор:  UKY [ Вт, окт 07 2014, 04:28 ]
Заголовок сообщения:  Re: Полезные трюки ABAP

olegbash написал(а):
Code:
" отрабатывает неправильно - записи не удаляются
"delete ltf_table1 WHERE BUKRS ne wa1-bukrs and VBRK_KUNRG ne wa1-kunrg.

Буду очень признателен, если поясните, почему 1ый способ записи не удаляет (то, что он не удаляет - убедился сам :D ).
Возможно, его как-то нужно преобразовать.


Чтобы первый способ удалял правильно можно написать так:
Code:
delete ltf_table1 WHERE NOT ( BUKRS eq wa1-bukrs and VBRK_KUNRG eq wa1-kunrg ).


А ваш способ не работал, т.к. использовался оператор AND и после ложности первой проверки (BUKRS ne wa1-bukrs, т.е. BUKRS всё таки равен wa1-bukrs) вторая часть проверки не выполняется вообще, т.к. общий смысл проверки всё равно будет ложным. А после истинности первой проверки (BUKRS ne wa1-bukrs) проверяется истинность второй проверки (VBRK_KUNRG ne wa1-kunrg) и записи удалятся только если И BUKRS ne wa1-bukrs И VBRK_KUNRG ne wa1-kunrg, а это не совсем то, что вам нужно...
Вам нужно ИЛИ BUKRS ne wa1-bukrs ИЛИ VBRK_KUNRG ne wa1-kunrg, т.е.
Code:
delete ltf_table1 WHERE BUKRS ne wa1-bukrs OR VBRK_KUNRG ne wa1-kunrg.

Автор:  Force1984 [ Чт, окт 30 2014, 09:40 ]
Заголовок сообщения:  Re: Полезные трюки ABAP

Добрый день, знатоки ABAP и прочих языков программирования.
Из любопытства у меня возник, возможно глупый, вопрос по поводу оператора Select count(*). Его можно писать в двух вариантах.
COUNT( * ) (or count(*)) Determines the number of rows in the resulting set or in the current group. No column label is specified in this case.
И вот мне непонятно, зачем это сделано в двух вариантах, с пробелами и без. И почему при этом SAP не сделал двухвариантую возможность написания функций max(), min( ) и проч.
Хотелось бы узнать ваши мнения на этот счет?

Автор:  LinevskiySV [ Пт, ноя 28 2014, 23:24 ]
Заголовок сообщения:  Re: Полезные трюки ABAP

UKY написал(а):
olegbash написал(а):
Code:
" отрабатывает неправильно - записи не удаляются
"delete ltf_table1 WHERE BUKRS ne wa1-bukrs and VBRK_KUNRG ne wa1-kunrg.

Буду очень признателен, если поясните, почему 1ый способ записи не удаляет (то, что он не удаляет - убедился сам :D ).
Возможно, его как-то нужно преобразовать.


Чтобы первый способ удалял правильно можно написать так:
Code:
delete ltf_table1 WHERE NOT ( BUKRS eq wa1-bukrs and VBRK_KUNRG eq wa1-kunrg ).


А ваш способ не работал, т.к. использовался оператор AND и после ложности первой проверки (BUKRS ne wa1-bukrs, т.е. BUKRS всё таки равен wa1-bukrs) вторая часть проверки не выполняется вообще, т.к. общий смысл проверки всё равно будет ложным. А после истинности первой проверки (BUKRS ne wa1-bukrs) проверяется истинность второй проверки (VBRK_KUNRG ne wa1-kunrg) и записи удалятся только если И BUKRS ne wa1-bukrs И VBRK_KUNRG ne wa1-kunrg, а это не совсем то, что вам нужно...
Вам нужно ИЛИ BUKRS ne wa1-bukrs ИЛИ VBRK_KUNRG ne wa1-kunrg, т.е.
Code:
delete ltf_table1 WHERE BUKRS ne wa1-bukrs OR VBRK_KUNRG ne wa1-kunrg.


В теории Дискретная математика -> Свойства конъюнкции, дизъюнкции и отрицания -> Правила де Моргана :rtfm:

Автор:  UKY [ Пн, дек 01 2014, 05:00 ]
Заголовок сообщения:  Re: Полезные трюки ABAP

Если поставить комментарий таким способом:
Цитата:
* Комментируем код. PERFORM do_code. Продолжаем комментировать.

То можно будет "проваливаться" в PERFORM двойным кликом.
Такие комментарии работают и с методами и ФМ'ами.
Главное, чтобы код был разделён от комментария точкой.

Автор:  AFH [ Ср, дек 03 2014, 10:01 ]
Заголовок сообщения:  Re: Полезные трюки ABAP

В редакторе абап (и во многих местах se80) - вместо двойного клика можно использовать кнопку F2, аналог кнопки назад - Esc (но это, наверное, все знают).

Автор:  UKY [ Чт, фев 05 2015, 04:27 ]
Заголовок сообщения:  Re: Полезные трюки ABAP

Как известно, точки наблюдения для FIELD-SYMBOLS не работают.

Но, оказывается, можно для точек прерывания ставить условия с FIELD-SYMBOLS и программа отлично останавливается в этом месте!

Автор:  Пономарев Артем [ Ср, фев 11 2015, 16:52 ]
Заголовок сообщения:  Re: Полезные трюки ABAP

Изображение

Вот это я понимаю трюки :)

Автор:  Serge69 [ Чт, фев 12 2015, 07:01 ]
Заголовок сообщения:  Re: Полезные трюки ABAP

Цитата:
Вот это я понимаю трюки :)

Не все такие счастливчики, и имеют 7.4

Автор:  UKY [ Ср, фев 18 2015, 09:00 ]
Заголовок сообщения:  Re: Полезные трюки ABAP

Только сегодня узнал, что можно создавать статические переменные в статических методах класса.
Причём это ещё как минимум с версии 7.0 работает...

P.S.: Сколько статических переменных класса было создано зря уже и не сосчитать...

Автор:  weise [ Пт, фев 20 2015, 23:37 ]
Заголовок сообщения:  Re: Полезные трюки ABAP

Да, но ведь к таким переменным можно будет обратиться только из этого метода. В виде атрибута класса получается гибче. Хотя интерфейс атрибутов класса ужасен, это да.

Автор:  Parazit [ Пн, мар 02 2015, 18:35 ]
Заголовок сообщения:  Слабые ссылки в ABAP.

Для создания "слабых ссылок" есть класс CL_ABAP_WEAK_REFERENCE. Как им можно пользоваться описал в теме про утечку памяти.

Автор:  olegbash [ Ср, июн 03 2015, 19:28 ]
Заголовок сообщения:  Re: Полезные трюки ABAP

Для создания бесконечных циклов в отладке удобно использовать класс CL_BCS_BREAKLOOP

Автор:  ArmAnn [ Ср, июн 03 2015, 20:39 ]
Заголовок сообщения:  Re: Полезные трюки ABAP

Пакет RE_CA_BC - набор полезных утилит

Страница 3 из 8 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/