Componente | Clase tipificación | Tp.Componente | Tipo de datos | Long. | Descripción breve |
MATNR | Type | MATNR | CHAR | 40 | Número de material |
CHARG | Type | CHARG_D | CHAR | 10 | Número de lote |
ATNAM | Type | ATNAM | CHAR | 30 | Nombre de característica |
ATBEZ | Type | ATBEZ | CHAR | 30 | Denominación de la característica |
VAL1 | Type | ZE_VALOR1 | CHAR | 50 | Valor 1 de característica |
VAL2 | Type | ZE_VALOR2 | CHAR | 50 | Valor 2 de característica |
--- | |
CONSTANTS:
gc_klart_023 TYPE klassenart VALUE '023'. "Categoría de la clase: Lote
*&---------------------------------------------------------------------*
*& Form F_GET_CHARACT_OBJECTS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM f_get_charact_objects TABLES tb_charact TYPE ztt_matnr_characteristics
USING us_matnr TYPE matnr
us_charg TYPE charg_d
us_object TYPE bapi1003_key-object
us_objecttable TYPE bapi1003_key-objecttable
us_classnum TYPE bapi1003_key-classnum
us_classtype TYPE bapi1003_key-classtype.
DATA: ltd_num TYPE numeric_allocation_tt,
ltd_char TYPE char_allocation_tt,
ltd_curr TYPE currency_allocation_tt,
ltd_return TYPE bapiret2_t,
ltd_cabn2 TYPE cabn,
lv_number TYPE cha_class_data-stellen.
DATA: lv_fltp TYPE cha_class_view-sollwert.
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
objectkey = us_object
objecttable = us_objecttable
classnum = us_classnum
classtype = us_classtype
keydate = sy-datum
TABLES
allocvaluesnum = ltd_num
allocvalueschar = ltd_char
allocvaluescurr = ltd_curr
return = ltd_return.
IF ltd_num[] IS NOT INITIAL.
SELECT atinn,adzhl,anzdz,atnam
INTO TABLE @DATA(ltd_cabn)
FROM cabn
FOR ALL ENTRIES IN @ltd_num
WHERE atnam EQ @ltd_num-charact.
ENDIF.
IF ltd_curr[] IS NOT INITIAL.
SELECT atinn adzhl anzdz atnam
APPENDING TABLE ltd_cabn
FROM cabn
FOR ALL ENTRIES IN ltd_curr
WHERE atnam EQ ltd_curr-charact.
ENDIF.
SORT ltd_cabn BY atnam.
* Numeric Values
LOOP AT ltd_num ASSIGNING FIELD-SYMBOL(<fs_num>).
CLEAR lv_number.
APPEND INITIAL LINE TO tb_charact ASSIGNING FIELD-SYMBOL(<fs_carac>).
<fs_carac>-matnr = us_matnr.
<fs_carac>-charg = us_charg.
<fs_carac>-atnam = <fs_num>-charact.
<fs_carac>-atbez = <fs_num>-charact_descr.
READ TABLE ltd_cabn ASSIGNING FIELD-SYMBOL(<fs_cabn>) WITH KEY atnam = <fs_num>-charact BINARY SEARCH.
IF sy-subrc EQ 0.
lv_number = <fs_cabn>-anzdz.
ENDIF.
CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION'
EXPORTING
i_number_of_digits = lv_number
i_fltp_value = <fs_num>-value_from
IMPORTING
e_char_field = lv_fltp.
CONDENSE lv_fltp NO-GAPS.
<fs_carac>-val1 = lv_fltp.
CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION'
EXPORTING
i_number_of_digits = lv_number
i_fltp_value = <fs_num>-value_to
IMPORTING
e_char_field = lv_fltp.
CONDENSE lv_fltp NO-GAPS.
<fs_carac>-val2 = lv_fltp.
CALL FUNCTION 'CTUT_FEATURE_DATA'
EXPORTING
class_type = '023'
feature_id = 0
feature_name = ' '
feature_neutral_name = <fs_num>-charact
language = ' '
message_type_inp = 'E'
key_date = sy-datum
ignore_delete_flag = ' '
ignore_rename = ' '
ignore_buffer = ' '
change_number = ' '
IMPORTING
ecabn = ltd_cabn2
EXCEPTIONS
invalid_class_type = 1
missing_feature_information = 2
no_feature_found = 3
no_feature_valid = 4
no_language = 5
OTHERS = 6.
IF sy-subrc <> 0.
ELSE.
CASE ltd_cabn2-atfor.
WHEN 'DATE'.
CONDENSE: <fs_carac>-val1, <fs_carac>-val2.
CONCATENATE <fs_carac>-val1+6(2) <fs_carac>-val1+4(2) <fs_carac>-val1+0(4) INTO <fs_carac>-val1 SEPARATED BY '.'.
IF <fs_carac>-val2 IS NOT INITIAL AND <fs_carac>-val2 NE '0'.
CONCATENATE <fs_carac>-val2+6(2) <fs_carac>-val2+4(2) <fs_carac>-val2+0(4) INTO <fs_carac>-val2 SEPARATED BY '.'.
ENDIF.
WHEN 'TIME'.
CONDENSE: <fs_carac>-val1, <fs_carac>-val2.
IF <fs_carac>-val1+0(1) < 10.
CONCATENATE '0' <fs_carac>-val1 INTO <fs_carac>-val1.
ENDIF.
CONCATENATE <fs_carac>-val1+0(2) <fs_carac>-val1+2(2) <fs_carac>-val1+4(2) INTO <fs_carac>-val1 SEPARATED BY ':'.
IF <fs_carac>-val2 IS NOT INITIAL AND <fs_carac>-val2 NE '0'.
IF <fs_carac>-val2+0(1) < 10.
CONCATENATE '0' <fs_carac>-val2 INTO <fs_carac>-val2.
ENDIF.
CONCATENATE <fs_carac>-val2+0(2) <fs_carac>-val2+2(2) <fs_carac>-val2+4(2) INTO <fs_carac>-val2 SEPARATED BY ':'.
ENDIF.
ENDCASE.
ENDIF.
ENDLOOP.
* Alphanumeric Values
LOOP AT ltd_char ASSIGNING FIELD-SYMBOL(<fs_char>).
APPEND INITIAL LINE TO tb_charact ASSIGNING <fs_carac>.
<fs_carac>-matnr = us_matnr.
<fs_carac>-charg = us_charg.
<fs_carac>-atnam = <fs_char>-charact.
<fs_carac>-val1 = <fs_char>-value_char.
<fs_carac>-atbez = <fs_char>-charact_descr.
ENDLOOP.
* Currency Values
LOOP AT ltd_curr ASSIGNING FIELD-SYMBOL(<fs_curr>).
CLEAR lv_number.
APPEND INITIAL LINE TO tb_charact ASSIGNING <fs_carac>.
<fs_carac>-matnr = us_matnr.
<fs_carac>-charg = us_charg.
<fs_carac>-atnam = <fs_curr>-charact.
<fs_carac>-atbez = <fs_curr>-charact_descr.
READ TABLE ltd_cabn ASSIGNING <fs_cabn> WITH KEY atnam = <fs_num>-charact BINARY SEARCH.
IF sy-subrc EQ 0.
lv_number = <fs_cabn>-anzdz.
ENDIF.
CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION'
EXPORTING
i_number_of_digits = lv_number
i_fltp_value = <fs_curr>-value_from
IMPORTING
e_char_field = lv_fltp.
<fs_carac>-val1 = lv_fltp.
CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION'
EXPORTING
i_number_of_digits = lv_number
i_fltp_value = <fs_curr>-value_to
IMPORTING
e_char_field = lv_fltp.
<fs_carac>-val2 = lv_fltp.
ENDLOOP.
ENDFORM.
FUNCTION zfm_get_matnr_characteristics.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(I_MATNR) TYPE MATNR
*" REFERENCE(I_CHARG) TYPE CHARG_D
*" EXPORTING
*" REFERENCE(ET_CHARACT) TYPE ZTT_MATNR_CHARACTERISTICS
*"----------------------------------------------------------------------
DATA:
lv_matnr_aux TYPE matnr,
lv_type_var TYPE dd01v-datatype,
lv_object TYPE bapi1003_key-object,
lv_classnum TYPE bapi1003_key-classnum.
CONSTANTS:
lc_table TYPE bapi1003_key-objecttable VALUE 'MCH1', "Name of Database Table for Object
lc_char TYPE c LENGTH 4 VALUE 'CHAR'.
CLEAR lv_object.
**********************************************************************
* Validar si el Material es Alfanumérico
CLEAR: lv_matnr_aux,
lv_type_var.
CALL FUNCTION 'NUMERIC_CHECK'
EXPORTING
string_in = i_matnr
IMPORTING
string_out = lv_matnr_aux
htype = lv_type_var.
IF lv_type_var EQ lc_char.
CONCATENATE lv_matnr_aux
i_charg
INTO lv_object RESPECTING BLANKS.
ELSE.
lv_object = i_matnr && i_charg.
ENDIF.
**********************************************************************
* Obtener Clases del Material
DATA: lt_alloclist TYPE STANDARD TABLE OF bapi1003_alloc_list,
lt_bapiret TYPE bapiret2_t.
CALL FUNCTION 'BAPI_OBJCL_GETCLASSES'
EXPORTING
objectkey_imp = lv_object " Key of Object to be Classified
objecttable_imp = lc_table " Name of Database Table for Object
classtype_imp = gc_klart_023 " Class Type
read_valuations = 'X' " Read Assigned Values
* keydate = SY-DATUM " Key date
* language = SY-LANGU " Language Key
* objectkey_imp_long =
TABLES
alloclist = lt_alloclist " Class BAPI: Assignment List
return = lt_bapiret. " Return Parameters
IF sy-subrc EQ 0
AND lt_alloclist IS NOT INITIAL.
READ TABLE lt_alloclist ASSIGNING FIELD-SYMBOL(<fs_alloclist>) INDEX 1.
lv_classnum = <fs_alloclist>-classnum.
**********************************************************************
* Obtener Características de Material
PERFORM f_get_charact_objects
TABLES ET_CHARACT
USING i_matnr i_charg lv_object lc_table lv_classnum gc_klart_023.
ENDIF.
ENDFUNCTION.
Parámetros entrada: | |
Resultado: | |
contenido tabla ET_CHARACT: |
CUSL_BATCHES_HAS_VALUES
Parámetros entrada: | |
Resultado: | |
contenido tabla CLASSIFICATION: |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
8 | |
6 | |
5 | |
4 | |
4 | |
4 | |
4 | |
4 | |
3 | |
2 |