Aleksandr_Tag написал(а):
ЕО присвоенные определенным классам. Каждый класс имеет определенный набор признаков ... как мне найти значения своих признаков
Как-то так:
Code:
REPORT  ztest .
PARAMETERS:
  p_equnr             TYPE equi-equnr .
TYPES:
  BEGIN OF ty_s_equi_class ,
    klasse(18)        TYPE c ,
    klasse_descr(40)  TYPE c ,
    charact(30)       TYPE c ,
    charact_descr(30) TYPE c ,
    value_ext(30)     TYPE c ,
    value_int(30)     TYPE c ,
    unit(3)           TYPE c ,
  END   OF ty_s_equi_class ,
  ty_t_equi_class     TYPE STANDARD TABLE OF ty_s_equi_class .
DATA t_equi_class     TYPE ty_t_equi_class.
*-----------------------------------------------
PERFORM get_equi_class
  USING p_equnr
  CHANGING t_equi_class  .
*&---------------------------------------------------------------------*
*&      Form  get_equi_class
*&---------------------------------------------------------------------*
*       Получение признаков
*----------------------------------------------------------------------*
FORM get_equi_class
    USING pv_equnr         TYPE equnr
    CHANGING ct_equi_class TYPE ty_t_equi_class .
  DATA:
    ls_inob             TYPE inob,
    ls_kssk             TYPE kssk,
    ls_klah             TYPE klah,
    l_quant             TYPE fc_quant,
    l_amount(16)        TYPE p DECIMALS 2,
    ls_equi_class       TYPE ty_s_equi_class .
  DATA:
    l_classnum          TYPE bapi1003_key-classnum,
    l_clobjectkey       TYPE bapi1003_key-object_guid,
    ls_classdescript    TYPE bapi1003_catch_r,
    lt_classdescript    TYPE STANDARD TABLE OF bapi1003_catch_r,
    ls_valuesnum        TYPE bapi1003_alloc_values_num,
    lt_valuesnum        TYPE STANDARD TABLE OF bapi1003_alloc_values_num,
    ls_valueschar       TYPE bapi1003_alloc_values_char,
    lt_valueschar       TYPE STANDARD TABLE OF bapi1003_alloc_values_char,
    ls_valuescurr       TYPE bapi1003_alloc_values_curr,
    lt_valuescurr       TYPE STANDARD TABLE OF bapi1003_alloc_values_curr,
    lt_return           TYPE STANDARD TABLE OF bapiret2.
  CONSTANTS:
    c_obtab_equi        TYPE inob-obtab VALUE 'EQUI'.
  SELECT SINGLE *
    INTO ls_inob
    FROM inob
   WHERE obtab EQ c_obtab_equi
     AND objek EQ pv_equnr .
  CHECK sy-subrc EQ 0.
  SELECT SINGLE *
    INTO ls_kssk
    FROM kssk
   WHERE objek = ls_inob-cuobj
     AND klart = ls_inob-klart.
  CHECK sy-subrc EQ 0.
  SELECT SINGLE *
    INTO ls_klah
    FROM klah
   WHERE clint = ls_kssk-clint.
  l_classnum = ls_klah-class.
  l_clobjectkey = ls_inob-cuobj.
  CALL FUNCTION 'BAPI_CLASS_GETDETAIL'
    EXPORTING
      classtype         = ls_klah-klart
      classnum          = l_classnum
    TABLES
      classdescriptions = lt_classdescript.
  CALL FUNCTION 'BAPI_OBJCL_GETDETAIL_KEY'
    EXPORTING
      clobjectkey     = l_clobjectkey
      classnum        = l_classnum
    TABLES
      allocvaluesnum  = lt_valuesnum
      allocvalueschar = lt_valueschar
      allocvaluescurr = lt_valuescurr
      return          = lt_return.
  READ TABLE lt_classdescript INTO ls_classdescript INDEX 1.
* количественные
  LOOP AT lt_valuesnum INTO ls_valuesnum.
    CLEAR ls_equi_class.
    ls_equi_class-klasse        = l_classnum.
    ls_equi_class-klasse_descr  = ls_classdescript-catchword.
    ls_equi_class-charact       = ls_valuesnum-charact.
    ls_equi_class-charact_descr = ls_valuesnum-charact_descr.
    ls_equi_class-unit          = ls_valuesnum-unit_from.
    CLEAR l_quant.
    CATCH SYSTEM-EXCEPTIONS OTHERS = 0.
      l_quant = ls_valuesnum-value_from.
      ls_equi_class-value_int   = l_quant.
      CONDENSE ls_equi_class-value_int NO-GAPS.
    ENDCATCH.
    WRITE l_quant TO ls_equi_class-value_ext DECIMALS 3 LEFT-JUSTIFIED.
    APPEND ls_equi_class TO ct_equi_class.
  ENDLOOP.
* символьные
  LOOP AT lt_valueschar INTO ls_valueschar.
    CLEAR ls_equi_class.
    ls_equi_class-klasse        = l_classnum.
    ls_equi_class-klasse_descr  = ls_classdescript-catchword.
    ls_equi_class-charact       = ls_valueschar-charact.
    ls_equi_class-charact_descr = ls_valueschar-charact_descr.
    ls_equi_class-value_int     = ls_valueschar-value_neutral.
    ls_equi_class-value_ext     = ls_valueschar-value_char.
    APPEND ls_equi_class TO ct_equi_class.
  ENDLOOP.
* суммовые
  LOOP AT lt_valuescurr INTO ls_valuescurr.
    CLEAR ls_equi_class.
    ls_equi_class-klasse        = l_classnum.
    ls_equi_class-klasse_descr  = ls_classdescript-catchword.
    ls_equi_class-charact       = ls_valuescurr-charact.
    ls_equi_class-charact_descr = ls_valuescurr-charact_descr.
    ls_equi_class-unit          = ls_valuescurr-currency_from.
    CLEAR l_amount.
    CATCH SYSTEM-EXCEPTIONS OTHERS = 0.
      l_amount = ls_valuescurr-value_from.
      ls_equi_class-value_int   = l_amount.
      CONDENSE ls_equi_class-value_int NO-GAPS.
    ENDCATCH.
    WRITE l_amount TO ls_equi_class-value_ext DECIMALS 2 LEFT-JUSTIFIED.
    APPEND ls_equi_class TO ct_equi_class.
  ENDLOOP.
ENDFORM.                    "get_equi_class