CLVF_VB_INSERT_CLASSIFICATION - Присвоение классов и значений признаков объектам или как гласит описание к данному ФМ - Система классов: обновление присвоений. Внутренняя функция, ошибок на верх не выдает, максимум может упасть в дамп, если что-то не так ей передадите в параметрах, но зато позволяет залить кучу присвоений классов и значений признаков для кучи объектов, так как в качестве параметров используются таблицы объектов и признаков.
Пример использования для классификации ОЗМ, вид класса 001, если будет какие-то особенности для других классов, так сказать велкам пишите дополнения.
DATA: BEGIN OF allkssk OCCURS 0.
INCLUDE STRUCTURE rmclkssk.
DATA: END OF allkssk.
*
DATA: BEGIN OF allausp OCCURS 0.
INCLUDE STRUCTURE rmclausp.
DATA: END OF allausp.
CLEAR: allkssk[], allausp[].
allkssk-objek = 'E-1100'.
allkssk-klart = '001'.
allkssk-class = 'CL1112'.
* Внутренний номер класса...
SELECT SINGLE clint INTO (allkssk-clint)
FROM klah WHERE klart = '001' AND class = 'CL1112'.
allkssk-mafid = 'O'.
allkssk-zaehl = '1'.
allkssk-adzhl = '0000'.
* Имя таблицы БД объекта к виду класса
SELECT SINGLE obtab INTO (allkssk-obtab)
FROM tcla WHERE klart = '001'.
allkssk-statu = '1'.
allkssk-vbkz = 'I'.
APPEND allkssk.
allausp-objek = 'E-1100'.
* Внутренний номер признак
SELECT SINGLE atinn INTO (allausp-atinn)
FROM cabn WHERE atnam = 'CH0004'.
allausp-atzhl = '1'.
allausp-klart = '001'.
allausp-mafid = 'O'.
allausp-atwrt = '01'.
allausp-atcod = '1'.
allausp-statu = 'H'.
* Имя таблицы БД объекта к виду класса
SELECT SINGLE obtab INTO (allausp-obtab)
FROM tcla WHERE klart = '001'.
APPEND allausp.
BREAK-POINT.
CALL FUNCTION 'CLVF_VB_INSERT_CLASSIFICATION'
"IN UPDATE TASK
EXPORTING
called_from_cl = 'X'
table = 'MARA'
date_of_change = sy-datum
TABLES
kssktab = allkssk
ausptab = allausp.
COMMIT WORK.
И так нас интересуют две таблицы это ALLKSSK - описание присвоения класса к объекту и ALLAUSP - признаки и значения, если признаки не присваиваем то данную таблицу передаем пустой. Все поля таблицы я не описываю, будет только тот минимум который требуется для выполнения операции. И так для присвоение классов:
allkssk-objek = 'E-1100' - В данном случае код материала, а вообще код объекта который классифицируется.
allkssk-klart = '001' - Вид класса
allkssk-class = 'CL1112' - Имя класса
* Внутренний номер класса по его виду и имени
SELECT SINGLE clint INTO (allkssk-clint)
FROM klah WHERE klart = '001' AND class = 'CL1112'.
allkssk-mafid = 'O' - Индикатор что присвоение идет к объекту, тут буква "О", а не ноль.
allkssk-zaehl = '1' - Позиция сортировки, ну если там будет несколько классов к одному объекту.
allkssk-adzhl = '0000' - Внутренний счетчик для архивации. кажется его можно пропустить.
* Имя таблицы БД объекта к виду класса, берется из таблицы описания по виду класса
SELECT SINGLE obtab INTO (allkssk-obtab)
FROM tcla WHERE klart = '001'.
allkssk-statu = '1' - Статус класса 1- активный, 2 - блокирован, 3 - класс не полный
allkssk-vbkz = 'I' - Индикатор обновления I - Вставка новго класса, U - Обновление присвоения и т.д.
Для присвоение признаков:
allausp-objek = 'E-1100' - В данном случае код материала, а вообще код объекта который классифицируется.
* Внутренний номер признака по имени из таблицы CABN
SELECT SINGLE atinn INTO (allausp-atinn)
FROM cabn WHERE atnam = 'CH0004'.
allausp-atzhl = '1' - Счетчик характеристик признака, вроде как передаем 1 и фиг с ним.
allausp-klart = '001' - Вид класса
allausp-mafid = 'O' - Индикатор что присвоение идет к объекту, тут буква "О", а не ноль.
allausp-atwrt = '01' - Значение которое присвоим признаку, тут именно код значения, а не текст
allausp-atcod = '1' - Код отношения значений, вроде как при простых признаках 1.
allausp-statu = 'H' - Статус классификации, похоже надо H - при присвоении нового класса и нового значения.
* Имя таблицы БД объекта к виду класса
SELECT SINGLE obtab INTO (allausp-obtab)
FROM tcla WHERE klart = '001'.
Вроде как все!