Difference between revisions of "SAP PM BAPI IE03"
From SapWiki
(Created page with " <nowiki> *&---------------------------------------------------------------------* *& Report ZQM_EXTDAT_equi *& *&---------------------------------------------------------...") |
|||
Line 1: | Line 1: | ||
− | <nowiki> *&---------------------------------------------------------------------* | + | <nowiki>*&---------------------------------------------------------------------* |
− | + | *& 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</nowiki> |
Latest revision as of 22:15, 4 April 2020
*&---------------------------------------------------------------------* *& 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