May 19, 2015 10:56
Продолжаю находить тонкости в ABAP-разработке. Сегодня лечил очередной краш в программе. Суть вот в чем.
Базы данных хранят огромное количество информации, а для вывода в отчет как правило требуется только ее часть. Отсекать лишнее можно по-разному: составить сложный запрос, сделать внутреннюю таблицу с необходимыми ключами, другие способы... А можно создать локальную переменную типа SELOPT - заполнить ее нужными значениями и при обращении к базе просто написать в условиях выборки, дескать такое-то поле IN <Имя переменной типа SELOPT>. Такой запрос отрабатывает довольно быстро и хорошо. Однако с чрезмерно большими количествами строк в SELOPT программа работать не хочет. Например, сегодня выяснил, что 9673 строк в SELOPT базе еще можно скормить, а вот на 10300+ строк программа начинает капризничать. В этом случае необходимо создать локальную таблицу с одним полем (тем, по которому мы собираемся задавать фильтр), заполнить ее значениями и обратиться к базе, используя конструкцию FOR ALL ENTRIES IN . В моем случае SAP охотно проглотил такую конструкцию с внутренней таблицей на 10300+ строк и успешно отработал.
abap,
sap,
Оптимизация