В общем потребовалось тут выбрать список заказов ТОРО в программе для обработки, можно конечно и селектами все это дело выгрести из таблиц, однако в критериях статусов были заданы такие вещи как статусы заказов и прочие радости, которые автоматом втягивали в выборку кучу таблиц. Да и сами заказы ТОРО размазаны по куче таблиц, в общем оказалось быстрее всего это сделать используя стандартный ФМ BAPI_ALM_ORDERHEAD_GET_LIST. Пример вызова использования на картинке ниже.
*&---------------------------------------------------------------------*
*& Report YZZZ_TEST *
*& *
*&---------------------------------------------------------------------*
*& Comments : Тестовая программа ФМ BAPI_ALM_ORDERHEAD_GET_LIST
*& Platform : SAP R/3 V4.6C or later
*& Autor : Uukrul
*& Date create : 08.10.2007
*& Date change : 08-10-2007
*&**********************************************************************
REPORT yzzz_test.
CONSTANTS: true(1) TYPE c VALUE 'X',
false(1) TYPE c VALUE space.
DATA: l_display_parameters LIKE bapi_alm_list_navigation_in,
l_navigation_data LIKE bapi_alm_list_navigation_ret,
lt_ranges LIKE bapi_alm_order_listhead_ranges
OCCURS 10 WITH HEADER LINE,
lt_result LIKE bapi_alm_order_listhead_result
OCCURS 10 WITH HEADER LINE,
lt_return LIKE bapiret2
OCCURS 10 WITH HEADER LINE.
* Выбрать заказы ТОРО
REFRESH: lt_ranges, lt_return, lt_result.
* Выбрать данные по максимуму
l_display_parameters-pagelength = '99999'.
l_display_parameters-show_page_number = '0'.
l_display_parameters-force_refresh = true.
* Открытые документы заказов ТОРО
lt_ranges-field_name = 'SHOW_OPEN_DOCUMENTS'.
lt_ranges-low_value = true.
APPEND lt_ranges.
* Документы заказов ТОРО в работе
lt_ranges-field_name = 'SHOW_DOCUMENTS_IN_PROCESS'.
lt_ranges-low_value = true.
APPEND lt_ranges.
* Включить статус заказа ОТКР
lt_ranges-field_name = 'OPTIONS_FOR_STATUS_INCLUSIVE'.
lt_ranges-sign = 'I'.
lt_ranges-option = 'EQ'.
lt_ranges-low_value = 'ОТКР'.
APPEND lt_ranges.
* Исключить статусы БЛОК
lt_ranges-field_name = 'OPTIONS_FOR_STATUS_EXCLUSIVE'.
lt_ranges-sign = 'I'.
lt_ranges-option = 'EQ'.
lt_ranges-low_value = 'БЛОК'.
APPEND lt_ranges.
* Выбрать данные относящиеся к заданному заводу = GLOBAL_WERKS
lt_ranges-field_name = 'OPTIONS_FOR_PLANPLANT'.
lt_ranges-sign = 'I'.
lt_ranges-option = 'EQ'.
lt_ranges-low_value = '1000'.
APPEND lt_ranges.
CALL FUNCTION 'BAPI_ALM_ORDERHEAD_GET_LIST'
EXPORTING
display_parameters = l_display_parameters
IMPORTING
navigation_data = l_navigation_data
TABLES
it_ranges = lt_ranges
et_result = lt_result
return = lt_return.
* Обшие ограничения выбора
DISPLAY_PARAMETERS:
--------------------
PAGELENGTH - Максимальное количество записей для выбора
SHOW_PAGE_NUMBER - Показывать с данной позиции
FORCE_REFRESH - Определить данные, если условия выбора не изменены
Ну если хотим выбрать очень много, то максимум тут можно задать в поле PAGELENGTH = 99 999, если нужно больше, то система к сожалению не позволит вам это сделать. Можете считать это ограничением данного ФМ, но мне как бы хватило этих значений.
* Собственно критерии выбора
IT_RANGES
--------------------
FIELD_NAME - Имя компоненат для ограничения выбора
SIGN - Знак
OPTION - Опция сравнения
LOW_VALUE - Значение 1
HIGH_VALUE - Значение 2
В общем-то данная структура фактически дополненная структура RANGES, с указанием по каком полую выбиать. Критерии выбора и специальные парамтеры такие же как и для RANGES, т.е. SIGN = I/E, а OPTION содержит знаки сравнения типа EQ/GE/BT и т.д. Откуда и какие значения ставить для FIELD_NAME, ну в общем-то для этого стоит запустить этот ФМ в тестовом режиме с минимальными ограничениями и в таблице ET_TEMPLATE, получите список возможных критериев по которым можно выполнять выборку данных. Для 4.7 в таблице будет 97 записей. Для полей которые начинаются с имени SHOW* можно заполнить только значение LOW_VALUE, как в примере, где выбираются открытые заказы. Для полей начинающихся с OPTIONS* используются правила заполнения типа RANGES.
В переменные задаем или маску для сравнения или конкретные значения для выбора. В данном примере выбираются все открытые документы и документы которые в процессе работы, при этом статус заказа должен быть ОТКР, не БЛОК - блокирован. Выборка выполняется для завода 1000.
В общем-то список выдаваемых полей для обработки ниже, по именам полей думаю без проблем понять что они обозначают и для чего используются. Если кому совсем сложно, запустите отчет IW39 и методами научного тыка думаю определите, что за что отвечает.
FIELD_NAME S OP LOW_VALUE HIGH_VALUE
SHOW_OPEN_DOCUMENTS ?
SHOW_DOCUMENTS_IN_PROCESS ?
SHOW_COMPLETED_DOCUMENTS ?
SHOW_HISTORICAL_DOCUMENTS ?
USE_SELECTION_ID ?
SHOW_DOCS_WITH_PARTN_ROLE ?
SHOW_DOCS_WITH_PARTNER ?
SHOW_DOCS_WITH_CURRENCY ?
SEARCH_IN_OBJECT_LIST_ENTRIES ?
SHOW_DOCS_WITH_ACC_ASSIGNM_CAT ?
SHOW_DOCS_WITH_FROM_DATE ?
SHOW_DOCS_WITH_TO_DATE ?
OPTIONS_FOR_ORDERID ? ? ? ?
OPTIONS_FOR_DOC_TYPE ? ? ? ?
OPTIONS_FOR_FUNCLOC ? ? ? ?
OPTIONS_FOR_EQUIPMENT ? ? ? ?
OPTIONS_FOR_MATERIAL ? ? ? ?
OPTIONS_FOR_SERIALNO ? ? ? ?
OPTIONS_FOR_ADD_DEVICE_DATA ? ? ? ?
OPTIONS_FOR_NOTIF_NO ? ? ? ?
OPTIONS_FOR_MAIN_WORKCENTER ? ? ? ?
OPTIONS_FOR_MAIN_WORKCTR_PLANT ? ? ? ?
OPTIONS_FOR_LEADING_ORDER ? ? ? ?
OPTIONS_FOR_SUPERIOR_ORDER ? ? ? ?
OPTIONS_FOR_PLANPLANT ? ? ? ?
OPTIONS_FOR_PRIORITY ? ? ? ?
OPTIONS_FOR_ENTERED_BY ? ? ? ?
OPTIONS_FOR_ENTER_DATE ? ? ? ?
OPTIONS_FOR_STATUS_INCLUSIVE ? ? ? ?
OPTIONS_FOR_STATUS_EXCLUSIVE ? ? ? ?
OPTIONS_FOR_SHORT_TEXT ? ? ? ?
OPTIONS_FOR_CHANGED_BY ? ? ? ?
OPTIONS_FOR_CHANGE_DATE ? ? ? ?
OPTIONS_FOR_AVAILABLE_TO_DATE ? ? ? ?
OPTIONS_FOR_START_DATE ? ? ? ?
OPTIONS_FOR_FINISH_DATE ? ? ? ?
OPTIONS_FOR_MAINTPLAN ? ? ? ?
OPTIONS_FOR_MAINTITEM ? ? ? ?
OPTIONS_FOR_REVISION ? ? ? ?
OPTIONS_FOR_WBS_ELEMENT_HEADER ? ? ? ?
OPTIONS_FOR_SCHED_FINISH_DATE ? ? ? ?
OPTIONS_FOR_ACTUAL_RELEAS_DATE ? ? ? ?
OPTIONS_FOR_ACTUAL_FINISH_DATE ? ? ? ?
OPTIONS_FOR_ACTUAL_START_DATE ? ? ? ?
OPTIONS_FOR_SCHEDLD_START_DATE ? ? ? ?
OPTIONS_FOR_SYST_AVAILABLEFROM ? ? ? ?
OPTIONS_FOR_TASK_LIST_GROUP ? ? ? ?
OPTIONS_FOR_GROUP_COUNTER ? ? ? ?
OPTIONS_FOR_PLANNING_INDICATOR ? ? ? ?
OPTIONS_FOR_ASSEMBLY ? ? ? ?
OPTIONS_FOR_LOC_MAINTPLANT ? ? ? ?
OPTIONS_FOR_MAINT_ACTIVITYTYPE ? ? ? ?
OPTIONS_FOR_LOC_WORKCENTER ? ? ? ?
OPTIONS_FOR_COSTCENTER ? ? ? ?
OPTIONS_FOR_LOC_WBS_ELEMENT ? ? ? ?
OPTIONS_FOR_SUPERIOR_NETWORK ? ? ? ?
OPTIONS_FOR_SUPERIOR_ACTIVITY ? ? ? ?
OPTIONS_FOR_SALES_ORD ? ? ? ?
OPTIONS_FOR_S_ORD_ITEM ? ? ? ?
OPTIONS_FOR_SALESORG ? ? ? ?
OPTIONS_FOR_DISTR_CHAN ? ? ? ?
OPTIONS_FOR_DIVISION ? ? ? ?
OPTIONS_FOR_BUS_AREA ? ? ? ?
OPTIONS_FOR_COMP_CODE ? ? ? ?
OPTIONS_FOR_ASSET_NO ? ? ? ?
OPTIONS_FOR_PLSECTN ? ? ? ?
OPTIONS_FOR_MAINTLOC ? ? ? ?
OPTIONS_FOR_SORTFIELD ? ? ? ?
OPTIONS_FOR_ABCINDIC ? ? ? ?
OPTIONS_FOR_PLANGROUP ? ? ? ?
OPTIONS_FOR_MAINTROOM ? ? ? ?
OPTIONS_FOR_OPERATION_TASKLIST ? ? ? ?
OPTIONS_FOR_RESP_PLANNER_GROUP ? ? ? ?
OPTIONS_FOR_CUSTOMER ? ? ? ?
OPTIONS_FOR_PERMIT ? ? ? ?
OPTIONS_FOR_PROFIT_CENTER ? ? ? ?
OPTIONS_FOR_PAGING_STATUS ? ? ? ?
OPTIONS_FOR_RECVG_COST_CENTER ? ? ? ?
OPTIONS_FOR_RECVG_ORDERID ? ? ? ?
OPTIONS_FOR_RECVG_COSTOBJECT ? ? ? ?
OPTIONS_FOR_RECVG_WBS_ELEMENT ? ? ? ?
OPTIONS_FOR_RECVG_NETWORK ? ? ? ?
OPTIONS_FOR_RECVG_SALES_ORD ? ? ? ?
OPTIONS_FOR_RECVG_S_ORD_ID ? ? ? ?
OPTIONS_FOR_RECVG_GL_ACCOUNT ? ? ? ?
OPTIONS_FOR_RECVG_BUS_AREA ? ? ? ?
OPTIONS_FOR_RECVG_ASSET_NO ? ? ? ?
OPTIONS_FOR_RECVG_SUB_NUMBER ? ? ? ?
OPTIONS_FOR_RECVG_MATERIAL ? ? ? ?
OPTIONS_FOR_PRT_MISCELLANEOUS ? ? ? ?
OPTIONS_FOR_PRT_MATERIAL ? ? ? ?
OPTIONS_FOR_PRT_PLANT ? ? ? ?
OPTIONS_FOR_PRT_DOCUMENT_NO ? ? ? ?
OPTIONS_FOR_PRT_DOCUMENT_TYPE ? ? ? ?
OPTIONS_FOR_PRT_DOCUMENT_PART ? ? ? ?
OPTIONS_FOR_PRT_DOCUMENT_VERSN ? ? ? ?
OPTIONS_FOR_PRT_EQUIPMENT ? ? ? ?