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