TO FIELD-SYMBOL(<lv_field>).
CHECK sy-subrc = 0.
IF <lv_field> = '1234'.
ENDIF.
в 4 раза в пользу статики.
Что там GET TIME STAMP FIELD возвращает, милисекунды? Для миллиона итераций получилось 0.109 и 0.419 соответственно.
Если это всё лежит в LOOP AT table, то сам цикл сожретв разы больше времени.
спасибо! уточни плиз, какой абап, какая система?
oracle, 750 - 0.339 и 1,472 - в 4.3 раза разница.
oracle, 740 - 0.179 и 1,525 - в 8.5 раз разница.
чтото прям очень много , даже не верится
несколько раз перезапустил. Значит неплохо оптимизировали от 740 до 753
в абсолютном выражении время мало и, имхо, будет незаметно на фоне основной логики типа тяжелых селектов или лупов по большой таблице. Все-таки не для микроконтроллеров пишем 😁
лупы будут у меня большими :)
на таблице с 300к записей разница 2.66 раза (было - 4). Если докидать еще какой-нибудь логики в цикл - скорее всего будет еще меньше.
А что за задача, любопытно просто, где и лупы большие и поля динамические? В частности, откуда имя поля берется, оно ведь переменное? иначе смысла нет отказываться от статики
может правила в настроечной таблице, к примеру.
А получается либо хардкодить правила абапом, либо дать консультанту на откуп
подождем ответа :) У меня вот есть загрузка хлама из экселя и табличка мэппинга - типа столбец А в поле Х, столбец В - в поле Y. Так мне проще динамически написать, чтобы конс через настройку мог поправить. А то что будет на 50 милисекунд дольше грузиться - пофиг.
Универсальный метод для обогащения таблиц любого формата текстовыми значениями. Типа текст материала по коду материала. Загоняешь таблицу в метод и получаешь с заполненным текстом
имхо assign component далеко не в топе будет по затратам времени в ST12 ))
Согласен, но эксперты заказчика так не считают :)
В этом случае сама постановка не оставляет альтернатив. Универсальность - это объективный фактор, он говорит нам о задаче экономии несравнимо большего времени людей и дискутировать о секундах экономии машинного времени уже нет смысла
Может еще тики проца считать?
👍 надо записать формулировку
мы только подмечаем, что будут проблемы. тики пока не просят считать
боюсь, что на 10М записях будет не несколько секунд :)
тогда вместо универсальности - джоины с текстовыми таблицами под каждый случай. В разы больше обезьяньей работы 😁 зато абапер занят.
Может, по задаче можно будет как-нибудь так сравнивать? IF CORRESPONDING ts_compare( <ls_data> ) = ls_compare. " Данные одинаковы ENDIF.
не понял идею. мне нужно не сравнить, а заполнить
так это просто MOVE-CORRESPONDING ls_to_fill TO <ls_data>.
идея в том, чтобы создать только одну динамическую структуру один раз (а может и вообще статическая подойдёт), а потом заполнять данные через MOVE-CORRESPONDING
если я всё правильно понимаю, то статическая не подойдет. Ведь для материала одна текстовая таблица, для ЕИ - другая. Тут что-то типа выборки из системных таблиц откуда тексты берутся, потом выборка самого текста и обогащение таблицы, поданной на вход.
В CORRESPONDING есть динамический MAPPING
самый простой пример: всяческие класс-экзиты в бобф на фпм (классы экзиты для FBI-ракурсов. Там стандарт, который вызывает Z-классы с определенными интерфейсами. Если нужно что-то подменить на стадии вывода на UI - то надо как раз поля динамически как-то смотреть)
там поля можно динамически указывать? через строковые параметры или только статикой?
Можно динамически через строки в новом абапе
о... опять вундервафлю изобретают 🤣
не говори! :))
на больших объемах там влегкую секунды становятся минутами. И экономия становится ну такой... неуловимой что ли )
хелп говорит, что только для статически определенных MAPPING работает, если я правильно прочитал. А если хочешь для динамических структур да еще с разными именами полей, то для этого наваяли CL_ABAP_CORRESPONDING
Да, это он и есть, забыл что отдельный класс для этого
а там внутри assign component of stucture? :)
Не, там всё внутрях делается как при MAPPING)
Этот класс, кстати, целые таблицы может корреспондить. Может быть, по задаче получится сразу целые таблицы обработать - так ещё быстрее будет.
через lookup table?
Там вызов функции ядра
ага, нашел
Можно предварительно сделать какую-нибудь такую таблицу: NEW_MAKTX NEW_MEINS И через CL_ABAP_CORRESPONDING заполнить другую таблицу MATNR MAKTX MEINS Просто у первой таблицы должно быть точно такое же кол-во строк, как и у второй таблицы и чтобы номер строки первой таблицы соответствовал номеру строки второй таблицы. Но, может, по задаче такой способ не подойдёт.
Я бы лучше сказал непредсказуемой. Чисто механически машинное время все ещё дешевле времени разработчика. Да и тратится его все ещё меньше. Но во что выльется систематическое ожидание в несколько минут или часов - в раздражение сотрудника компании и он потеряет сон, и станет хуже работать, в раздражение клиента и он уйдет к конкурентам, в разачоровании в САПе и переходе на 1С - мы не знаем) Я бы тут действовал реактивно исходя из того, что обо всем этом подумали за меня)
Обсуждают сегодня