YUUK_STORE_SERNR_ON_DAY - Программа определения статуса серийных номеров на дату, в общем то в стандарте такой программы вроде как нет, а тут понадобилось типа, а был ли на заданную дату серийный номер на складе или был списан или... короче в каком состоянии находился. Для одного серийного номера оно конечно не вопрос зайти в историю, а вот если их много, то задача уже переходи в разряд интеллектуальных
. Так что типа вот довел ее до ума, серийные можно как задавать в диалоге, так и загружать из файла.
Программа состоит из двух модулей: REPORT yuuk_store_sernr_on_day, сама программа и вспомогательный модуль YUUK_STORE_SERNR_ON_DAY_ALV - вся обработка ALV-таблицы
*&**********************************************************************
*& Comments : Список нахождения серийных номеров на дату
*& Platform : SAP R/3 V4.6A or later
*& Autor : Uukrul
*& Date create : 29-10-2009
*& Date change : 29-10-2009
*&**********************************************************************
REPORT yuuk_store_sernr_on_day MESSAGE-ID yy.
TABLES: equi, mara, rlgrap.
TYPE-POOLS: slis.
TYPES : slis_t_fieldcat_alv TYPE slis_fieldcat_alv OCCURS 1.
CONSTANTS: true(1) TYPE c VALUE 'X',
false(1) TYPE c VALUE space.
INCLUDE <icon>.
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK block001 WITH FRAME TITLE text-002.
SELECT-OPTIONS: p_matkl FOR mara-matkl,
p_matnr FOR mara-matnr,
p_sernr FOR equi-sernr.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS : p_fl AS CHECKBOX USER-COMMAND fld.
SELECTION-SCREEN COMMENT 3(24) text-011 FOR FIELD p_fl.
SELECTION-SCREEN POSITION 33.
PARAMETERS p_cfile LIKE rlgrap-filename DEFAULT 'C:\file.txt'
MODIF ID fld.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK block001.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK block002 WITH FRAME TITLE text-003.
PARAMETERS : p_datst LIKE sy-datum,
p_datum LIKE sy-datum DEFAULT sy-datum OBLIGATORY.
PARAMETERS : p_all RADIOBUTTON GROUP grp DEFAULT 'X',
p_sel RADIOBUTTON GROUP grp.
PARAMETERS : p_only_t AS CHECKBOX,
p_only_s AS CHECKBOX,
p_only_h AS CHECKBOX,
p_onl_sd AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK block002.
SELECTION-SCREEN BEGIN OF BLOCK block004 WITH FRAME TITLE text-010.
PARAMETERS: p_chkst AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK block004.
SELECTION-SCREEN BEGIN OF BLOCK block003 WITH FRAME TITLE text-004.
PARAMETERS: alv_def LIKE disvariant-variant.
SELECTION-SCREEN END OF BLOCK block003.
************************************************************************
DATA: p_test LIKE bapi2017_gm_gen-testrun VALUE 'X'.
DATA: BEGIN OF gt_equi OCCURS 10,
sel(1) TYPE c,
numpos LIKE sy-tabix,
idx LIKE sy-tabix,
tbwart(1) TYPE c,
equnr LIKE equi-equnr, "Номер единицы оборудования
sernr LIKE equi-sernr, "Серийный номер
matnr LIKE equi-matnr, "Код материала
taser LIKE objk-taser, "Таблица списка истории
matkl LIKE mara-matkl, "Группа материала
maktx LIKE makt-maktx. "Краткий текст материала
INCLUDE STRUCTURE rserxx.
DATA:
sernr_icon(4) TYPE c,
sernr_stat(25) TYPE c,
store_icon(4) TYPE c,
END OF gt_equi.
DATA: g_count TYPE i,
alv_variant LIKE disvariant,
fieldcat TYPE slis_t_fieldcat_alv,
fieldcat_ln LIKE LINE OF fieldcat,
sortcat TYPE slis_t_sortinfo_alv,
sortcat_ln LIKE LINE OF sortcat,
e_user_command TYPE slis_formname VALUE 'USER_COMMAND',
er_events TYPE slis_t_event,
er_list_top_of_page TYPE slis_t_listheader,
layout TYPE slis_layout_alv.
DATA: BEGIN OF gt_file OCCURS 1000,
* Данные для преобразовани
sernr LIKE equi-sernr,
END OF gt_file.
************************************************************************
DEFINE ext_to_int.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = &1
importing
output = &2.
END-OF-DEFINITION.
************************************************************************
************************************************************************
* START-OF-SELECTION
************************************************************************
START-OF-SELECTION.
CLEAR: gt_equi[].
PERFORM read_equi.
PERFORM write_list_alv.
*&**********************************************************************
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-group1 = 'FLD'.
IF p_fl = false.
screen-input = '0'.
screen-output = '0'.
screen-invisible = '1'.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
*&**********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_cfile.
CLEAR rlgrap-filename.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = rlgrap-filename
def_path = 'C:\'
mask = ',*.*,*.*.'
mode = '0'
IMPORTING
filename = rlgrap-filename
EXCEPTIONS
inv_winsys = 01
no_batch = 02
selection_cancel = 03
selection_error = 04.
IF rlgrap-filename <> space. p_cfile = rlgrap-filename. ENDIF.
************************************************************************
* AT SELECTION-SCREEN ON VALUE-REQUEST
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR alv_def.
alv_variant-report = sy-repid.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = alv_variant
i_save = 'A'
IMPORTING
es_variant = alv_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 2.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
alv_def = alv_variant-variant.
ENDIF.
************************************************************************
*&---------------------------------------------------------------------*
*& Form read_matnr_custom
*&---------------------------------------------------------------------*
* Читает список материалов для ручной обработки
*----------------------------------------------------------------------*
* -->P_I_MATNR = Список материалов
* -->P_P_WERKS = Код обрабатываемого завода
*----------------------------------------------------------------------*
FORM read_equi.
RANGES: lr_obknr FOR gt_equi-obknr.
DATA: l_count LIKE sy-tabix,
ls_equi LIKE gt_equi,
l_clabs LIKE mchb-clabs,
tabix_equi LIKE sy-tabix,
lt_serxx LIKE rserxx OCCURS 1 WITH HEADER LINE,
ls_serxx LIKE rserxx.
CLEAR: gt_equi[].
* Данные из файла
IF p_fl = true.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = p_cfile
filetype = 'DAT'
IMPORTING
filelength = l_count
TABLES
data_tab = gt_file
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
OTHERS = 10.
ENDIF.
DO.
DESCRIBE TABLE gt_file LINES l_count.
IF l_count > 0.
CLEAR: p_sernr[], p_sernr.
p_sernr-sign = 'I'. p_sernr-option = 'EQ'.
DO 1000 TIMES.
READ TABLE gt_file INDEX 1.
IF sy-subrc <> 0. EXIT. ENDIF.
ext_to_int gt_file-sernr p_sernr-low.
APPEND p_sernr.
DELETE gt_file INDEX 1.
ENDDO.
ENDIF.
SELECT eq~equnr "Номер единицы оборудования
eq~sernr "Серийный номер
eq~matnr "Код материала
ob~obknr "Номер списка объектов
ob~datum "Дата операции
ob~taser "Таблица списка истории
ma~matkl "Группа материала
APPENDING CORRESPONDING FIELDS OF TABLE gt_equi
FROM equi AS EQ
JOIN objk AS ob ON ob~equnr = eq~equnr
JOIN mara AS ma ON ma~matnr = eq~matnr
WHERE eq~sernr IN p_sernr AND
eq~matnr IN p_matnr AND
ob~datum >= p_datst AND ob~datum <= p_datum AND
ma~matkl IN p_matkl
ORDER BY EQ~EQUNR ob~obknr EQ~SERNR eq~matnr.
DESCRIBE TABLE gt_file LINES l_count.
IF l_count = 0. EXIT. ENDIF.
ENDDO.
* Идем по истории каждого серийного номера
CLEAR: gt_equi. APPEND gt_equi.
LOOP AT gt_equi.
AT FIRST.
* Первый вход в цикл подготовить таблицу объектов
CLEAR: lr_obknr[], tabix_equi.
lr_obknr-sign = 'I'. lr_obknr-option = 'EQ'.
ENDAT.
ON CHANGE OF gt_equi-equnr.
* Если произошло изменение ЕО, тогда обработать накопленные данные
DESCRIBE TABLE lr_obknr LINES l_count.
IF l_count > 0.
* Обработать список объектов для LS_EQUI
CLEAR: lt_serxx.
CASE ls_equi-taser.
WHEN 'SER02' OR 'SER07' OR 'SER08'.
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_serxx
FROM (ls_equi-taser)
WHERE obknr IN lr_obknr
ORDER BY DATUM descending
OBKNR descending.
WHEN OTHERS.
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_serxx
FROM (ls_equi-taser)
WHERE obknr IN lr_obknr
ORDER BY DATUM descending
UZEIT descending
obknr DESCENDING.
ENDCASE.
* Последняя операция с серийным номером, будет первой в списке
READ TABLE lt_serxx INDEX 1.
IF sy-subrc = 0.
MOVE-CORRESPONDING lt_serxx TO ls_equi.
ls_equi-sel = true.
READ TABLE lt_serxx INDEX 2.
IF sy-subrc = 0 AND
lt_serxx-datum = ls_equi-datum AND
lt_serxx-uzeit = ls_equi-uzeit AND
lt_serxx-bwart = ls_equi-bwart.
ls_equi-tbwart = 'T'.
ELSE.
ls_equi-tbwart = ls_equi-shkzg.
ENDIF.
ELSE.
ls_equi-sel = 'U'.
ENDIF.
MODIFY gt_equi FROM ls_equi INDEX tabix_equi.
CLEAR: lr_obknr[].
ENDIF.
ENDON.
* Накопление списка объектов для обработки
ls_equi = gt_equi.
tabix_equi = tabix_equi + 1.
lr_obknr-low = ls_equi-obknr.
APPEND lr_obknr.
ENDLOOP.
DELETE gt_equi WHERE sel = false.
IF p_sel = true.
IF p_only_t = false. DELETE gt_equi WHERE tbwart = 'T'. ENDIF.
IF p_only_s = false. DELETE gt_equi WHERE tbwart = 'S'. ENDIF.
IF p_only_h = false. DELETE gt_equi WHERE tbwart = 'H'. ENDIF.
IF p_onl_sd = false.
DELETE gt_equi WHERE tbwart = space AND
vbtyp = 'J' AND
vorgang = 'SDLS'.
ENDIF.
ENDIF.
* Прочатать дополнительные данные к серийным номерам
LOOP AT gt_equi.
gt_equi-numpos = sy-tabix.
gt_equi-idx = '1'.
gt_equi-sel = false.
* Проверить данные запаса по складу
IF p_chkst = true.
IF gt_equi-charge <> space AND gt_equi-werk <> space AND
gt_equi-lagerort <> space.
SELECT SINGLE clabs INTO (l_clabs)
FROM mchb
WHERE matnr = gt_equi-matnr AND
werks = gt_equi-werk AND
lgort = gt_equi-lagerort AND
charg = gt_equi-charge.
ELSEIF gt_equi-charge = space AND gt_equi-werk <> space AND
gt_equi-lagerort <> space.
SELECT SINGLE labst INTO (l_clabs)
FROM mard
WHERE matnr = gt_equi-matnr AND
werks = gt_equi-werk AND
lgort = gt_equi-lagerort.
ENDIF.
IF l_clabs > 0.
gt_equi-store_icon = icon_store_location.
ELSE.
gt_equi-store_icon = icon_incomplete.
ENDIF.
ENDIF.
* Краткий текст описания материала
READ TABLE gt_equi INTO ls_equi WITH KEY matnr = gt_equi-matnr.
IF ls_equi-maktx = space.
SELECT SINGLE maktx INTO (gt_equi-maktx)
FROM makt WHERE matnr = gt_equi-matnr AND
spras = sy-langu.
ELSE.
gt_equi-maktx = ls_equi-maktx.
ENDIF.
* Статус серийного
CASE gt_equi-tbwart.
WHEN 'T'.
gt_equi-sernr_icon = icon_other_object.
gt_equi-sernr_stat = text-005.
WHEN 'S'.
gt_equi-sernr_icon = icon_positive.
gt_equi-sernr_stat = text-006.
WHEN 'H'.
gt_equi-sernr_icon = icon_negative.
gt_equi-sernr_stat = text-007.
WHEN 'U'.
gt_equi-sernr_icon = icon_message_warning_small.
gt_equi-sernr_stat = text-008.
WHEN OTHERS.
IF gt_equi-vbtyp = 'J' AND gt_equi-vorgang = 'SDLS'.
gt_equi-sernr_icon = icon_packing.
gt_equi-sernr_stat = text-009.
ELSE.
ENDIF.
ENDCASE.
MODIFY gt_equi.
ENDLOOP.
ENDFORM. " read_matnr_custom
************************************************************************
INCLUDE yuuk_store_sernr_on_day_alv.
************************************************************************
*----------------------------------------------------------------------*
* INCLUDE YUUK_LIST_SERNR_ON_DAY_ALV *
*----------------------------------------------------------------------*
*&**********************************************************************
*& Comments : Список нахождения серийных номеров на дату
*& Platform : SAP R/3 V4.6A or later
*& Autor : Uukrul
*& Date create : 29-10-2009
*& Date change : 29-10-2009
*&**********************************************************************
*&---------------------------------------------------------------------*
*& Form write_list_alv
*&---------------------------------------------------------------------*
* Подготовка данных для вывода через ALV-таблицу
*----------------------------------------------------------------------*
FORM write_list_alv.
CLEAR : fieldcat[], sortcat[], er_events[],
fieldcat_ln, sortcat_ln, er_events.
PERFORM build_options_alv.
PERFORM build_fieldcat_alv.
PERFORM build_sortcat_alv.
PERFORM build_eventtab_alv USING er_events[].
PERFORM build_comments_alv.
PERFORM start_list_viewer_alv.
ENDFORM. " write_list_alv
*&---------------------------------------------------------------------*
*& Form build_options_alv
*&---------------------------------------------------------------------*
* Параметры грида по умолчанию
*----------------------------------------------------------------------*
* <-- LAYOUT - Данные для сетки по умолчанию
*----------------------------------------------------------------------*
FORM build_options_alv.
layout-colwidth_optimize = true.
layout-detail_popup = true.
layout-box_fieldname = 'SEL'.
layout-get_selinfos = true.
layout-zebra = true.
ENDFORM. " build_options_alv
*&---------------------------------------------------------------------*
*& Form build_fieldcat_alv
*&---------------------------------------------------------------------*
* Создание полей вывода для ALV-очета
*----------------------------------------------------------------------*
* <-- FIELDCAT - Список полей ALV-таблицы отчета
*----------------------------------------------------------------------*
FORM build_fieldcat_alv.
DATA: l_str LIKE fieldcat_ln-seltext_m,
col_pos TYPE i.
* Группа материала
col_pos = 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'MARA'.
fieldcat_ln-fieldname = 'MATKL'.
fieldcat_ln-key = true.
fieldcat_ln-do_sum = true.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
* Номер строки
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'SYST'.
fieldcat_ln-ref_fieldname = 'TABIX'.
fieldcat_ln-fieldname = 'NUMPOS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-ddictxt = 'L'.
fieldcat_ln-seltext_l = '№'.
fieldcat_ln-seltext_m = '№ Строки'.
fieldcat_ln-seltext_s = 'Номер строки'.
APPEND fieldcat_ln TO fieldcat.
* Индекс для суммирования
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'SYST'.
fieldcat_ln-ref_fieldname = 'TABIX'.
fieldcat_ln-fieldname = 'IDX'.
fieldcat_ln-no_out = true.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-ddictxt = 'L'.
fieldcat_ln-seltext_l = 'Сч'.
fieldcat_ln-seltext_m = 'Счетчик'.
fieldcat_ln-seltext_s = 'Счетчик для суммирования'.
APPEND fieldcat_ln TO fieldcat.
* Иконка статуса
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-fieldname = 'SERNR_ICON'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-icon = true.
fieldcat_ln-outputlen = 4.
fieldcat_ln-ddictxt = 'L'.
fieldcat_ln-seltext_l = 'Ст'.
fieldcat_ln-seltext_m = 'Статус'.
fieldcat_ln-seltext_s = 'Статус серийного номера'.
APPEND fieldcat_ln TO fieldcat.
* ЕО
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'EQUI'.
fieldcat_ln-fieldname = 'EQUNR'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-hotspot = true.
APPEND fieldcat_ln TO fieldcat.
* Код материала
CLEAR: fieldcat_ln.
col_pos = col_pos + 1.
fieldcat_ln-ref_tabname = 'MARA'.
fieldcat_ln-fieldname = 'MATNR'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
* Серийные номер материала
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'EQUI'.
fieldcat_ln-fieldname = 'SERNR'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-hotspot = true.
APPEND fieldcat_ln TO fieldcat.
* Наименование материала
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'MAKT'.
fieldcat_ln-fieldname = 'MAKTX'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
* Иконка статуса
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-fieldname = 'SERNR_STAT'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-ddictxt = 'M'.
fieldcat_ln-seltext_l = 'Ст'.
fieldcat_ln-seltext_m = 'Статус описание'.
fieldcat_ln-seltext_s = 'Статус серийного номера (Описание)'.
APPEND fieldcat_ln TO fieldcat.
* Код таблици истории
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'RSERXX'.
fieldcat_ln-fieldname = 'TASER'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-no_out = true.
fieldcat_ln-ddictxt = 'L'.
fieldcat_ln-seltext_l = 'Тбл'.
fieldcat_ln-seltext_m = 'ТабИстЗпс'.
fieldcat_ln-seltext_s = 'Таблица истории запаса'.
APPEND fieldcat_ln TO fieldcat.
* Дата последне операции
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'RSERXX'.
fieldcat_ln-fieldname = 'DATUM'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
* Время последней операции
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'RSERXX'.
fieldcat_ln-fieldname = 'UZEIT'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
* Вид движения
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'RSERXX'.
fieldcat_ln-fieldname = 'BWART'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
* Документ ММ
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'RSERXX'.
fieldcat_ln-fieldname = 'MBLNR'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-hotspot = true.
APPEND fieldcat_ln TO fieldcat.
* Год документа ММ
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'RSERXX'.
fieldcat_ln-fieldname = 'MJAHR'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
* Позиция документа
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'RSERXX'.
fieldcat_ln-fieldname = 'ZEILE'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
* Код клиента
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'RSERXX'.
fieldcat_ln-fieldname = 'KUNDE'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-no_out = true.
APPEND fieldcat_ln TO fieldcat.
* Код завода
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'RSERXX'.
fieldcat_ln-fieldname = 'WERK'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-no_out = true.
APPEND fieldcat_ln TO fieldcat.
* Код склада
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'RSERXX'.
fieldcat_ln-fieldname = 'LAGERORT'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-no_out = true.
APPEND fieldcat_ln TO fieldcat.
* Код партии
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-ref_tabname = 'RSERXX'.
fieldcat_ln-fieldname = 'CHARGE'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-no_out = true.
APPEND fieldcat_ln TO fieldcat.
* Иконка
col_pos = col_pos + 1.
CLEAR: fieldcat_ln.
fieldcat_ln-fieldname = 'STORE_ICON'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-icon = true.
fieldcat_ln-outputlen = 4.
fieldcat_ln-ddictxt = 'L'.
fieldcat_ln-seltext_l = 'СтСк'.
fieldcat_ln-seltext_m = 'СтаСкл'.
fieldcat_ln-seltext_s = 'Статус серийного наскладе'.
APPEND fieldcat_ln TO fieldcat.
ENDFORM. " build_fieldcat_alv
*&---------------------------------------------------------------------*
*& Form build_sortcat_alv
*&---------------------------------------------------------------------*
* Критерии сортировки данных по умолчанию
*----------------------------------------------------------------------*
* <-- SORTCAST - Список полей для сортировки
*----------------------------------------------------------------------*
FORM build_sortcat_alv.
sortcat_ln-spos = '1'.
sortcat_ln-fieldname = 'MATKL'.
sortcat_ln-up = true.
sortcat_ln-down = false.
sortcat_ln-subtot = true.
APPEND sortcat_ln TO sortcat.
sortcat_ln-spos = '2'.
sortcat_ln-fieldname = 'MATNR'.
sortcat_ln-up = true.
sortcat_ln-down = false.
sortcat_ln-subtot = false.
APPEND sortcat_ln TO sortcat.
sortcat_ln-spos = '3'.
sortcat_ln-fieldname = 'SERNR'.
sortcat_ln-up = true.
sortcat_ln-down = false.
sortcat_ln-subtot = false.
APPEND sortcat_ln TO sortcat.
ENDFORM. " build_sortcat_alv
*&---------------------------------------------------------------------*
*& Form build_eventtab_alv
*&---------------------------------------------------------------------*
* Список событий для сетки
*----------------------------------------------------------------------*
* -->P_ER_EVENTS[] - Список имен событий
*----------------------------------------------------------------------*
FORM build_eventtab_alv USING u_er_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = u_er_events.
READ TABLE u_er_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc = 0.
MOVE 'BUILD_TOP_OF_PAGE_ALV' TO ls_event-form.
APPEND ls_event TO u_er_events.
ENDIF.
READ TABLE u_er_events WITH KEY name = slis_ev_user_command
INTO ls_event.
IF sy-subrc = 0.
MOVE 'USER_COMMAND' TO ls_event-form.
APPEND ls_event TO u_er_events.
ENDIF.
ENDFORM. " build_eventtab_alv
*----------------------------------------------------------------------*
* FORM BUILD_TOP_OF_PAGE_ALV
*----------------------------------------------------------------------*
FORM build_top_of_page_alv.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
* i_logo = 'ENJOYSAP_LOGO'
it_list_commentary = er_list_top_of_page.
ENDFORM. "build_top_of_page_alv
*&---------------------------------------------------------------------*
*& Form build_comments_alv
*&---------------------------------------------------------------------*
* Построение комментария заголовка отчета
*----------------------------------------------------------------------*
* <-- ER_LIST_TOP_OF_PAGE - Строки для вывода в заголовке отчета
*----------------------------------------------------------------------*
FORM build_comments_alv.
DATA: l_count TYPE i,
ls_line TYPE slis_listheader,
l_info TYPE slis_listheader-info.
CLEAR ls_line.
ls_line-typ = 'S'.
ls_line-key = 'На дату:'.
WRITE p_datum TO ls_line-info DD/MM/YYYY.
APPEND ls_line TO er_list_top_of_page.
CLEAR: ls_line-key.
* Группы материалов
DESCRIBE TABLE p_matkl LINES l_count.
IF l_count > 0.
CLEAR ls_line.
ls_line-typ = 'S'.
ls_line-key = 'Группы материала:'.
LOOP AT p_matkl.
IF p_matkl-high = space.
ls_line-info = p_matkl-low.
ELSE.
CONCATENATE p_matkl-low p_matkl-high
INTO ls_line-info SEPARATED BY ' - '.
ENDIF.
APPEND ls_line TO er_list_top_of_page.
CLEAR: ls_line-key.
ENDLOOP.
ENDIF.
* Код материала
DESCRIBE TABLE p_matnr LINES l_count.
IF l_count > 0.
CLEAR ls_line.
ls_line-typ = 'S'.
ls_line-key = 'Коды материалов:'.
LOOP AT p_matnr.
IF p_matnr-high = space.
ls_line-info = p_matnr-low.
ELSE.
CONCATENATE p_matnr-low p_matnr-high
INTO ls_line-info SEPARATED BY ' - '.
ENDIF.
APPEND ls_line TO er_list_top_of_page.
CLEAR: ls_line-key.
ENDLOOP.
ENDIF.
ENDFORM. "build_comments_alv
*&---------------------------------------------------------------------*
*& Form start_list_viewer_alv
*&---------------------------------------------------------------------*
* Вывести ALV-таблицу на экран
*----------------------------------------------------------------------*
FORM start_list_viewer_alv.
DATA pgm LIKE sy-repid.
pgm = sy-repid.
alv_variant-report = pgm.
alv_variant-variant = alv_def.
IF NOT alv_def IS INITIAL.
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
i_save = 'A'
CHANGING
cs_variant = alv_variant
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE e321(m7) WITH alv_def pgm.
ENDIF.
ENDIF.
* CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
** EXPORTING
** I_INTERFACE_CHECK = ' '
** I_BYPASSING_BUFFER = ' '
** I_BUFFER_ACTIVE = ' '
** I_CALLBACK_PROGRAM = ' '
** I_CALLBACK_PF_STATUS_SET = ' '
** I_CALLBACK_USER_COMMAND = ' '
** I_CALLBACK_TOP_OF_PAGE = ' '
** I_CALLBACK_HTML_TOP_OF_PAGE = ' '
** I_CALLBACK_HTML_END_OF_LIST = ' '
** I_STRUCTURE_NAME =
** I_BACKGROUND_ID = ' '
** I_GRID_TITLE =
** I_GRID_SETTINGS =
** IS_LAYOUT =
** IT_FIELDCAT =
** IT_EXCLUDING =
** IT_SPECIAL_GROUPS =
** IT_SORT =
** IT_FILTER =
** IS_SEL_HIDE =
** I_DEFAULT = 'X'
** I_SAVE = ' '
** IS_VARIANT =
** IT_EVENTS =
** IT_EVENT_EXIT =
** IS_PRINT =
** IS_REPREP_ID =
** I_SCREEN_START_COLUMN = 0
** I_SCREEN_START_LINE = 0
** I_SCREEN_END_COLUMN = 0
** I_SCREEN_END_LINE = 0
** I_HTML_HEIGHT_TOP = 0
** I_HTML_HEIGHT_END = 0
** IT_ALV_GRAPHICS =
** IT_HYPERLINK =
** IT_ADD_FIELDCAT =
** IT_EXCEPT_QINFO =
** IR_SALV_FULLSCREEN_ADAPTER =
** IMPORTING
** E_EXIT_CAUSED_BY_CALLER =
** ES_EXIT_CAUSED_BY_USER =
* TABLES
* T_OUTTAB =
** EXCEPTIONS
** PROGRAM_ERROR = 1
** OTHERS = 2
* .
* IF SY-SUBRC <> 0.
** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
i_buffer_active = space
i_callback_program = pgm
* i_callback_pf_status_set = 'BUILD_PF_STATUS_ALV'
i_callback_user_command = 'USER_COMMAND'
* I_STRUCTURE_NAME =
i_grid_title = text-001
is_layout = layout
it_fieldcat = fieldcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
it_sort = sortcat
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
i_save = 'A'
is_variant = alv_variant
it_events = er_events
* IT_EVENT_EXIT =
* IS_PRINT =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* es_exit_caused_by_user = 'X'
TABLES
t_outtab = gt_equi
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " start_list_viewer_alv
*----------------------------------------------------------------------*
* FORM USER_COMMAND *
*----------------------------------------------------------------------*
* Обработка нажатия своих кодов клавишь для Лелика *
*----------------------------------------------------------------------*
* --> VALUE(RT_EXTAB) *
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm TYPE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&IC1'.
IF rs_selfield-tabindex > 0.
READ TABLE gt_equi INDEX rs_selfield-tabindex.
ELSEIF rs_selfield-sumindex > 0.
READ TABLE gt_equi INDEX rs_selfield-sumindex.
ELSE.
EXIT.
ENDIF.
CASE rs_selfield-fieldname.
WHEN 'EQUNR'.
SET PARAMETER ID 'EQN' FIELD gt_equi-equnr.
CALL TRANSACTION 'IE03' AND SKIP FIRST SCREEN.
WHEN 'SERNR'.
SET PARAMETER ID 'MAT' FIELD gt_equi-matnr.
SET PARAMETER ID 'SER' FIELD gt_equi-sernr.
CALL TRANSACTION 'IQ03' AND SKIP FIRST SCREEN.
WHEN 'MBLNR'.
SET PARAMETER ID 'MBN' FIELD gt_equi-mblnr.
SET PARAMETER ID 'MJA' FIELD gt_equi-mjahr.
CALL TRANSACTION 'MB03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
ENDFORM. "user_command
Описания текстовых переменных на картинках. Пример работы и внешний вид селекционного экрана YTOV_STORE_SERNR_ON_DAY.png и YUUK_STORE_SERNR_ON_DAY_SCR.png