SAP PM BAPI IE03
From SapWiki
*&---------------------------------------------------------------------* *& Report ZQM_EXTDAT_equi *& *&---------------------------------------------------------------------* *& Descripcion : Extractor de Datos Equipos *& *&---------------------------------------------------------------------* REPORT zqm_extdat_equi. *--------------------------------------------------------------------* TYPE-POOLS : slis. DATA decstel(2) TYPE c. DATA: BEGIN OF gs_data, * FUNCTLOCATION type bapi_itob_fl_sel_result-FUNCTLOCATION, " equipment TYPE equnr, "N° de equipo * EQUICATGRY type BAPI_ITOB_EQ_ONLY-EQUICATGRY, "Tipo de equipo *STRIND type BAPI_ITOB-STRIND, " Indicador de estructura de ubicación técnica equicatgry TYPE bapi_itob_eq_only-equicatgry, " Tipo de equipo descript TYPE bapi_itob-descript, " Denominación de la ubicación técnic authgrp TYPE bapi_itob-authgrp , " Grupo de autorizaciones para objeto técnico obj_weight TYPE bapi_itob-obj_weight , " Peso del objeto unit_of_wt TYPE bapi_itob-unit_of_wt, " Unidad de peso obj_size TYPE bapi_itob-obj_size , " Tamaño/Dimensión inventory TYPE bapi_itob-inventory, " Número de inventario start_from TYPE bapi_itob-start_from, " Fecha de puesta en servicio de objeto técnico objecttype TYPE bapi_itob-objecttype, " Clase de objeto técnico * descript type bapi_itob-descript, "denominación "!!! acquisval TYPE bapi_itob-acquisval , " valor de adquisición currency TYPE bapi_itob-currency , " clave de moneda acqdate TYPE bapi_itob-acqdate , " fecha de adquisición manfacture TYPE bapi_itob-manfacture, " fabricante del activo fijo mancountry TYPE bapi_itob-mancountry, " país de fabricación manmodel TYPE bapi_itob-manmodel, " denominación de tipo del fabricante constyear TYPE bapi_itob-constyear, " año de construcción constmonth TYPE bapi_itob-constmonth, " mes de construcción manparno TYPE bapi_itob-manparno, " número de pieza de fabricante manserno TYPE bapi_itob-manserno, " número de serie según el fabricante maintplant TYPE bapi_itob-maintplant, " centro de emplazamiento maintloc TYPE bapi_itob-maintloc , " emplazamiento del objeto de mantenimiento maintroom TYPE bapi_itob-maintroom, " local plsectn TYPE bapi_itob-plsectn, " Área de empresa work_ctr TYPE bapi_itob-work_ctr, " puesto de trabajo abcindic TYPE bapi_itob-abcindic, " indicador abc para objeto técnico sortfield TYPE bapi_itob-sortfield, " campo de clasificación comp_code TYPE bapi_itob-comp_code, " sociedad bus_area TYPE bapi_itob-bus_area, " división asset_no TYPE bapi_itob-asset_no , " número principal de activo fijo sub_number TYPE bapi_itob-sub_number, " subnúmero de activo fijo costcenter TYPE bapi_itob-costcenter, " centro de coste wbs_elem TYPE bapi_itob-wbs_elem, " elemento del plan de estructura de proyecto (elemento pep) standorder TYPE bapi_itob-standorder, " número de orden permanente settlorder TYPE bapi_itob-settlorder, " orden de liquidación planplant TYPE bapi_itob-planplant , " centro de planificación del mantenimiento plangroup TYPE bapi_itob-plangroup , " grupo planificador p.servicio cliente y mantenimiento pp_wkctr TYPE bapi_itob-pp_wkctr, " puesto de trabajo responsable en medidas de mantenimiento catprofile TYPE bapi_itob-catprofile, " perfil de catálogo * eqinstall type bapi_itob_fl_only-eqinstall, " montaje de equipos permitido en ubicación técnica read_supeq TYPE bapi_itob_eq_only-read_supeq, "equipo superior read_floc TYPE bapi_itob_eq_only-read_floc, "Identificación de ubicación técnica inst_pos TYPE bapi_itob_eq_only-inst_pos, "Posición de equipo en lugar de montaje (eq.sup./ubic.técn.) END OF gs_data. DATA gt_data LIKE TABLE OF gs_data. DATA: BEGIN OF gs_header, colname TYPE scrtext_l, END OF gs_header. DATA gt_header LIKE TABLE OF gs_header. DATA gt_equipos LIKE TABLE OF bapi_itob_eq_sel_result. DATA gs_equipos LIKE LINE OF gt_equipos. DATA: gt_qpmk LIKE TABLE OF qpmk, gs_qpmk LIKE LINE OF gt_qpmk. DATA gd_tfile TYPE ibipparms-path. DATA: ls_itob_sel_maintplant LIKE TABLE OF bapi_itob_sel_maintplant WITH HEADER LINE. DATA: ls_bapiret2 LIKE TABLE OF bapiret2 WITH HEADER LINE. DATA: ls_itob_fl_sel_result LIKE TABLE OF bapi_itob_fl_sel_result WITH HEADER LINE. DATA: es_bapi_itob LIKE TABLE OF bapi_itob WITH HEADER LINE. *--------------------------------------------------------------------* *--------------------------------------------------------------------* SELECT-OPTIONS: s_equnr FOR gs_data-equipment, s_swerk FOR gs_data-maintplant. PARAMETERS: p_file TYPE string LOWER CASE OBLIGATORY. *--------------------------------------------------------------------* AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. *--------------------------------------------------------------------* gd_tfile = p_file. CALL FUNCTION 'F4_FILENAME' EXPORTING field_name = 'P_FILE' IMPORTING file_name = gd_tfile. MOVE gd_tfile TO p_file. *--------------------------------------------------------------------* START-OF-SELECTION. *--------------------------------------------------------------------* PERFORM select_data. *--------------------------------------------------------------------* END-OF-SELECTION. *--------------------------------------------------------------------* * PERFORM process_data. IF gt_data[] IS INITIAL. WRITE:/ 'No se seleccionaron datos'. RETURN. ENDIF. PERFORM download. *&---------------------------------------------------------------------* *& Form select_data *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM select_data. CALL FUNCTION 'BAPI_EQUI_GETLIST' TABLES equipment_ra = s_equnr maintplant_ra = s_swerk equipment_list = gt_equipos. DATA: ls_data_general_exp LIKE bapi_itob, ls_data_specific_exp LIKE bapi_itob_eq_only. DATA ld_monto TYPE bapicurr-bapicurr. LOOP AT gt_equipos INTO gs_equipos. CALL FUNCTION 'BAPI_EQUI_GETDETAIL' EXPORTING equipment = gs_equipos-equipment IMPORTING data_general_exp = ls_data_general_exp data_specific_exp = ls_data_specific_exp * DATA_FLEET_EXP = * RETURN = . MOVE-CORRESPONDING ls_data_general_exp TO gs_data. CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL' EXPORTING currency = ls_data_general_exp-currency amount_internal = ls_data_general_exp-acquisval IMPORTING amount_external = ld_monto. MOVE ld_monto TO gs_data-acquisval. gs_data-read_supeq = ls_data_specific_exp-read_supeq. gs_data-read_floc = ls_data_specific_exp-read_floc. gs_data-inst_pos = ls_data_specific_exp-inst_pos. gs_data-equicatgry = ls_data_specific_exp-equicatgry. gs_data-equipment = gs_equipos-equipment. APPEND gs_data TO gt_data. ENDLOOP. ENDFORM. "select_data *&---------------------------------------------------------------------* *& Form download *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM download. PERFORM crear_header_2 USING gs_data CHANGING gt_header[]. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filename = p_file filetype = 'DAT' TABLES data_tab = gt_data fieldnames = gt_header EXCEPTIONS file_write_error = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5 unknown_error = 6 header_not_allowed = 7 separator_not_allowed = 8 filesize_not_allowed = 9 header_too_long = 10 dp_error_create = 11 dp_error_send = 12 dp_error_write = 13 unknown_dp_error = 14 access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 OTHERS = 22. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. MESSAGE i000(fb) WITH 'Se genero archivo' p_file. ENDIF. ENDFORM. "download *&---------------------------------------------------------------------* *& Form crear_header *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM crear_header. CLEAR gt_header[]. DATA: l_index(2) TYPE n, l_string TYPE string, l_0033 TYPE p0033. FIELD-SYMBOLS <fs> TYPE any. DATA: descr_struc_ref TYPE REF TO cl_abap_structdescr, lt_components TYPE abap_compdescr_tab, ls_components LIKE LINE OF lt_components. *descr_struc_ref ?= cl_abap_typedescr=>describe_by_name( gs_data ). *lt_components = descr_struc_ref->components. DATA comp_tab TYPE abap_compdescr_tab. DATA stru_ref TYPE REF TO cl_abap_structdescr. DATA type_ref TYPE REF TO cl_abap_typedescr. DATA is_ddic TYPE abap_bool. DATA: lt_ddic TYPE dd_x031l_table, wa_ddic TYPE x031l, lt_fcat TYPE slis_t_fieldcat_alv, wa_fcat TYPE slis_fieldcat_alv, ls_layo TYPE slis_layout_alv, l_alv TYPE REF TO cl_gui_alv_grid. DATA: one_comp TYPE abap_compdescr, one_name TYPE string. stru_ref ?= cl_abap_structdescr=>describe_by_data( gs_data ). comp_tab = stru_ref->components. FIELD-SYMBOLS <f3> TYPE any. DATA gd_field TYPE string. LOOP AT comp_tab INTO one_comp. CONCATENATE 'GS_DATA-' one_comp-name INTO gd_field. ASSIGN (gd_field) TO <f3>. type_ref ?= cl_abap_typedescr=>describe_by_data( <f3> ). is_ddic = type_ref->is_ddic_type( ). IF is_ddic = abap_true. lt_ddic = type_ref->get_ddic_object( ). LOOP AT lt_ddic INTO wa_ddic. CLEAR wa_ddic-tabname. * SELECT SINGLE * dd03l~tabname * INTO wa_ddic-tabname * FROM dd03l * WHERE dd03l~fieldname = wa_ddic-fieldname * AND dd03l~tabname NOT LIKE '/%'. SELECT SINGLE dd04t~scrtext_s dd04t~scrtext_m dd04t~scrtext_l INTO (wa_fcat-seltext_s, wa_fcat-seltext_m, wa_fcat-seltext_l) FROM dd04t WHERE dd04t~rollname = wa_ddic-fieldname AND dd04t~ddlanguage = sy-langu. APPEND wa_fcat TO lt_fcat. CONCATENATE wa_fcat-seltext_l wa_ddic-fieldname INTO gd_field SEPARATED BY space. APPEND gd_field TO gt_header. ENDLOOP. ELSE. APPEND one_comp-name TO gt_header. ENDIF. ENDLOOP. ENDFORM. "crear_header *&---------------------------------------------------------------------* *& Form read_text *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM read_text. DATA l_v_name TYPE thead-tdname. " Declare l_v_name as this type DATA l_fs_line TYPE tline. DATA l_it_line LIKE TABLE OF l_fs_line. CONCATENATE gs_qpmk-mandt gs_qpmk-zaehler gs_qpmk-mkmnr gs_qpmk-version sy-langu INTO l_v_name RESPECTING BLANKS. REFRESH l_it_line. CALL FUNCTION 'READ_TEXT' "get long text EXPORTING client = sy-mandt id = 'QPMT' language = sy-langu name = l_v_name object = 'QPMERKAL' TABLES lines = l_it_line. ENDFORM. "read_text FORM crear_header_2 USING VALUE(i_data) CHANGING i_header TYPE ANY TABLE. DATA lt_text TYPE pt_t_text. DATA ls_text LIKE LINE OF lt_text. FIELD-SYMBOLS <wa>. ASSIGN i_data TO <wa>. DATA: l_index(2) TYPE n, l_string TYPE string, l_0033 TYPE p0033. FIELD-SYMBOLS <fs> TYPE any. DATA: descr_struc_ref TYPE REF TO cl_abap_structdescr, lt_components TYPE abap_compdescr_tab, ls_components LIKE LINE OF lt_components. *descr_struc_ref ?= cl_abap_typedescr=>describe_by_name( gs_data ). *lt_components = descr_struc_ref->components. DATA comp_tab TYPE abap_compdescr_tab. DATA stru_ref TYPE REF TO cl_abap_structdescr. DATA type_ref TYPE REF TO cl_abap_typedescr. DATA is_ddic TYPE abap_bool. DATA: lt_ddic TYPE dd_x031l_table, wa_ddic TYPE x031l, lt_fcat TYPE slis_t_fieldcat_alv, wa_fcat TYPE slis_fieldcat_alv, ls_layo TYPE slis_layout_alv, l_alv TYPE REF TO cl_gui_alv_grid. DATA: one_comp TYPE abap_compdescr, one_name TYPE string. stru_ref ?= cl_abap_structdescr=>describe_by_data( <wa> ). comp_tab = stru_ref->components. FIELD-SYMBOLS <f3> TYPE any. DATA gd_field TYPE string. LOOP AT comp_tab INTO one_comp. CONCATENATE '<WA>-' one_comp-name INTO gd_field. ASSIGN (gd_field) TO <f3>. type_ref ?= cl_abap_typedescr=>describe_by_data( <f3> ). is_ddic = type_ref->is_ddic_type( ). IF is_ddic = abap_true. lt_ddic = type_ref->get_ddic_object( ). LOOP AT lt_ddic INTO wa_ddic. CLEAR wa_ddic-tabname. SELECT SINGLE dd04t~scrtext_s dd04t~scrtext_m dd04t~scrtext_l INTO (wa_fcat-seltext_s, wa_fcat-seltext_m, wa_fcat-seltext_l) FROM dd04t WHERE dd04t~rollname = wa_ddic-fieldname AND dd04t~ddlanguage = sy-langu. APPEND wa_fcat TO lt_fcat. CONCATENATE wa_fcat-seltext_l wa_ddic-fieldname INTO gd_field SEPARATED BY space. APPEND gd_field TO lt_text. ENDLOOP. ELSE. APPEND one_comp-name TO lt_text. ENDIF. ENDLOOP. i_header[] = lt_text[]. ENDFORM. "crear_header