Господа, нужна помощь.
Что-то я весь мозг вылюбил себе уже.
Програмуля собирает результаты испытания из контрольной партии.
т.к. признаки в техкарте, то биш список полей всегда разные - то таблица создаётся динамически, исходя из списка признаков.
Задача такая: взять значение признака, залезть им в PLMK и проверить его на допустимость в пределе верхнего и нижнего значения.
Исходя из проверки покрасить ячейку в соответствующий цвет.
Не знаю/не могу/не получается встроить функционал раскраски в динамическую таблицу.
Функционал раскраски такой:
http://sapnet.ru/viewtopic.php?t=60вот код:
Code:
form EXE_KP .
**********************************************************************
IF werks ne space.
CONCATENATE werks+0(2) 'ПФ' into lgort.
ENDIF.
SELECT matnr prueflos plnnr plnty plnal objnr from QALS into corresponding fields of IT_QALS
where charg = charg
and werk = werks
and lagortchrg = lgort.
clear statustext.
CALL FUNCTION 'STATUS_TEXT_EDIT'
EXPORTING FLG_USER_STAT = 'X' OBJNR = it_qals-objnr ONLY_ACTIVE = 'X' SPRAS = sy-langu IMPORTING LINE = statustext EXCEPTIONS OBJECT_NOT_FOUND = 01 .
IF STATUSTEXT+0(4) NE 'ПАСТ'.
APPEND IT_QALS.
ENDIF.
ENDSELECT.
**********************************************************************
CLEAR:IT_VERWMERKM, IT_VERWMERKM[].
LOOP AT IT_QALS.
SELECT * FROM QAMV WHERE prueflos = IT_QALS-PRUEFLOS ORDER BY VORGLFNR.
IT_VERWMERKM-PRUEFLOS = IT_QALS-PRUEFLOS.
IT_VERWMERKM-MATNR = IT_QALS-MATNR.
IT_VERWMERKM-VERWMERKM = QAMV-VERWMERKM.
IT_VERWMERKM-VORGLFNR = QAMV-VORGLFNR.
IT_VERWMERKM-MERKNR = QAMV-MERKNR.
APPEND IT_VERWMERKM.
CLEAR: IT_VERWMERKM.
ENDSELECT.
ENDLOOP.
**********************************************************************
**8 преобразование талицы признаков из техкарты
LOOP AT IT_QALS.
SELECT VERWMERKM PLNKN MERKNR FROM PLMK INTO
(IT_VERWMERKM_FIELDS-VERWMERKM, IT_VERWMERKM_FIELDS-PLNKN, IT_VERWMERKM_FIELDS-MERKNR)
WHERE PLNNR = IT_QALS-PLNNR.
APPEND IT_VERWMERKM_FIELDS.
CLEAR: IT_VERWMERKM_FIELDS.
ENDSELECT.
ENDLOOP.
SORT IT_VERWMERKM_FIELDS by PLNKN MERKNR.
IT_VERWMERKM_FIELDS_TEMP[] = IT_VERWMERKM_FIELDS[].
CLEAR: IT_VERWMERKM_FIELDS, IT_VERWMERKM_FIELDS[].
LOOP AT IT_VERWMERKM_FIELDS_TEMP.
IT_VERWMERKM_FIELDS-VERWMERKM = IT_VERWMERKM_FIELDS_TEMP-VERWMERKM.
COLLECT IT_VERWMERKM_FIELDS..
CLEAR: IT_VERWMERKM_FIELDS_TEMP.
ENDLOOP.
**********************************************************************
*** CHAR
**********************************************************************
* макрос для создания филд_каталога лдя динамической таблицы
DEFINE append_catalog_CHAR.
ls_lvc_cat_CHAR-fieldname = &1. " Имя поля
ls_lvc_cat_CHAR-ref_field = &2. " Ссылочное поле
ls_lvc_cat_CHAR-ref_table = &3. " Ссылочная таблица
ls_lvc_cat_CHAR-domname = &4. " Домен из ABAP словаря
APPEND ls_lvc_cat_CHAR TO lt_lvc_cat_CHAR.
END-OF-DEFINITION.
* содание филд каталога для динамической атблицы
LOOP AT IT_VERWMERKM_FIELDS.
IF IT_VERWMERKM_FIELDS-VERWMERKM = 'STRUCT'.
append_catalog_CHAR IT_VERWMERKM_FIELDS-VERWMERKM 'CODE1' 'QASE' ''.
ELSE.
append_catalog_CHAR IT_VERWMERKM_FIELDS-VERWMERKM 'CHAR10' 'ZZZ_MVS_TYPES' '' .
ENDIF.
ENDLOOP.
append_catalog_CHAR 'PRUEFLOS' 'PRUEFLOS' 'QALS' ''." '' '' ''. " Поставка
append_catalog_CHAR 'MATNR' 'MATNR' 'QALS' ''." '' '' ''. " марка
* создание динамической таблицы
CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = lt_lvc_cat_CHAR IMPORTING ep_table = lv_table_CHAR.
* хз, какие то пребразования типов
ASSIGN lv_table_CHAR->* TO <fs_table_CHAR>.
CREATE DATA lv_line_CHAR LIKE LINE OF <fs_table_CHAR>.
ASSIGN lv_line_CHAR->* TO <fs_line_CHAR>.
**********************************************************************
**********************************************************************
*** DEC
**********************************************************************
* макрос для создания филд_каталога лдя динамической таблицы
DEFINE append_catalog.
ls_lvc_cat-fieldname = &1. " Имя поля
ls_lvc_cat-ref_field = &2. " Ссылочное поле
ls_lvc_cat-ref_table = &3. " Ссылочная таблица
ls_lvc_cat-domname = &4. " Домен из ABAP словаря
APPEND ls_lvc_cat TO lt_lvc_cat.
END-OF-DEFINITION.
* содание филд каталога для динамической атблицы
LOOP AT IT_VERWMERKM_FIELDS.
IF IT_VERWMERKM_FIELDS-VERWMERKM = 'STRUCT'.
append_catalog IT_VERWMERKM_FIELDS-VERWMERKM 'CODE1' 'QASE' ''.
ELSE.
SELECT SINGLE * FROM QPMK WHERE MKMNR = IT_VERWMERKM_FIELDS-VERWMERKM.
CASE QPMK-STELLEN.
WHEN '0'.
append_catalog IT_VERWMERKM_FIELDS-VERWMERKM 'DEC_10_0' 'ZZZ_MVS_TYPES' '' .
WHEN '1'.
append_catalog IT_VERWMERKM_FIELDS-VERWMERKM 'DEC_10_1' 'ZZZ_MVS_TYPES' '' .
WHEN '2'.
append_catalog IT_VERWMERKM_FIELDS-VERWMERKM 'DEC_10_2' 'ZZZ_MVS_TYPES' '' .
WHEN '3'.
append_catalog IT_VERWMERKM_FIELDS-VERWMERKM 'DEC_10_3' 'ZZZ_MVS_TYPES' '' .
ENDCASE.
ENDIF.
ENDLOOP.
append_catalog 'PRUEFLOS' 'PRUEFLOS' 'QALS' ''." '' '' ''. " Поставка
append_catalog 'MATNR' 'MATNR' 'QALS' ''." '' '' ''. " марка
* создание динамической таблицы
CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = lt_lvc_cat IMPORTING ep_table = lv_table.
* хз, какие то пребразования типов
ASSIGN lv_table->* TO <fs_table>.
CREATE DATA lv_line LIKE LINE OF <fs_table>.
ASSIGN lv_line->* TO <fs_line>.
**********************************************************************
**********************************************************************
DATA: nn type n.
DATA: err(2) TYPE n.
DATA: det(2) TYPE n.
DATA: mes LIKE ZZZ_MVS_TYPES-DEC_10_3.
DATA: temp_prueflos TYPE QPLOS.
DESCRIBE TABLE IT_VERWMERKM_FIELDS LINES lines.
READ TABLE IT_QALS INDEX 1.
temp_prueflos = IT_QALS-prueflos.
CLEAR: <fs_table>, <fs_table>[].
LOOP AT IT_QALS.
CLEAR: det.
DO 10 TIMES.
det = det + 1.
CLEAR: err.
LOOP AT IT_VERWMERKM_FIELDS.
ASSIGN COMPONENT IT_VERWMERKM_FIELDS-VERWMERKM OF STRUCTURE <fs_line_CHAR> to <fs_field_CHAR>.
ASSIGN COMPONENT IT_VERWMERKM_FIELDS-VERWMERKM OF STRUCTURE <fs_line> to <fs_field>.
READ TABLE IT_VERWMERKM WITH KEY PRUEFLOS = IT_QALS-PRUEFLOS VERWMERKM = IT_VERWMERKM_FIELDS-VERWMERKM.
CLEAR: mes.
<fs_field_CHAR> = space.
SELECT SINGLE messwert FROM qase INTO mes
WHERE prueflos = IT_VERWMERKM-PRUEFLOS
AND VORGLFNR = IT_VERWMERKM-VORGLFNR
AND MERKNR = IT_VERWMERKM-MERKNR
AND MESSWERTNI = 'X'
AND detailerg = det.
IF sy-subrc ne 0.
err = err + 1.
CONTINUE.
ELSEIF sy-subrc = 0.
* WRITE mes to <fs_field>.
<fs_field> = mes.
<fs_field_char> = <fs_field>.
ENDIF.
ENDLOOP.
* поставка
ASSIGN COMPONENT 'PRUEFLOS' OF STRUCTURE <fs_line_char> to <fs_field_char>.
<fs_field_char> = IT_VERWMERKM-PRUEFLOS.
* марка
ASSIGN COMPONENT 'MATNR' OF STRUCTURE <fs_line_char> to <fs_field_char>.
<fs_field_char> = IT_VERWMERKM-MATNR.
IF err >= lines. " все ячейки пусты
exit.
ELSEIF err < lines. " одна клетка да заполнена
APPEND <fs_line_char> to <fs_table_char>.
ENDIF.
ENDDO.
ENDLOOP.
**********************************************************************
*** накидаем филд катлог
CLEAR: layout.
*layout-info_fname = 'ROWCOLOR'."For row coloring
*layout-grid_title = 'Гыыы'.
layout-smalltitle = 'X'.
layout-zebra = 'X'.
layout-NO_ROWMARK = 'X'.
* Марка - 1-ый столбец
READ TABLE lt_lvc_cat_char INTO ls_lvc_fcat_char WITH KEY fieldname = 'MATNR'.
ls_lvc_fcat_char-outputlen = '15'.
ls_lvc_fcat_char-inttype = 'C'.
ls_lvc_fcat_char-coltext = 'Марка'.
APPEND ls_lvc_fcat_char TO lt_lvc_fcat_char.
* Марка - 2-ой столбец
READ TABLE lt_lvc_cat_char INTO ls_lvc_fcat_char WITH KEY fieldname = 'MAS_IZD'.
ls_lvc_fcat_char-outputlen = '10'.
ls_lvc_fcat_char-no_zero = 'X'.
ls_lvc_fcat_char-coltext = 'МасИзд, кг'.
APPEND ls_lvc_fcat_char TO lt_lvc_fcat_char.
LOOP AT lt_lvc_cat_char INTO ls_lvc_fcat_char.
CASE ls_lvc_fcat_char-fieldname.
WHEN 'MATNR' or 'MAS_IZD'.
WHEN 'PRUEFLOS'.
ls_lvc_fcat_char-NO_OUT = 'X'.
WHEN OTHERS.
nn = 0.
LOOP AT <fs_table_char> ASSIGNING <fs_line_char>.
ASSIGN COMPONENT ls_lvc_fcat_char-fieldname OF STRUCTURE <fs_line_char> to <fs_field_char>.
IF <fs_field_char> ne space. "'0.000'.
nn = nn + 1.
ENDIF.
IF nn ne 0. exit. ENDIF.
ENDLOOP.
IF nn ne 0.
SELECT SINGLE KURZTEXT FROM qpmt INTO ls_lvc_fcat_char-coltext WHERE MKMNR = ls_lvc_fcat_char-fieldname AND SPRACHE = sy-langu.
ls_lvc_fcat_char-seltext = ls_lvc_fcat_char-REPTEXT = ls_lvc_fcat_char-coltext.
ls_lvc_fcat_char-outputlen = '10'.
ELSEIF nn = 0.
ls_lvc_fcat_char-NO_OUT = 'X'.
ENDIF.
APPEND ls_lvc_fcat_char TO lt_lvc_fcat_char.
ENDCASE.
ENDLOOP.
endform. " EXE_KP
Добавляю
append_catalog_CHAR 'CELLCOLOR' 'CELLCOLOR' 'ZZZ_MVS_TYPES' ''. " цвет ячейки
То как к ней обратиться. Это получается таблица в динамической таблице... Это вообще не противоестественно?