SAP PM BAPI IE01
From SapWiki
*&---------------------------------------------------------------------*
*& Report ZQM_CREAR_EQUI
*&
*&---------------------------------------------------------------------*
*& Descripcion : Creación de Equipos
*&
*&---------------------------------------------------------------------*
REPORT zpm_crear_equi.
*--------------------------------------------------------------------*
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 arbpl, "bapi_itob-work_ctr, " puesto de trabajo
pp_wkctr TYPE arbpl, "bapi_itob-pp_wkctr, " puesto de trabajo responsable en medidas de mantenimiento
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 arbpl, "bapi_itob-pp_wkctr, " puesto de trabajo responsable en medidas de mantenimiento
work_ctr TYPE arbpl, "bapi_itob-work_ctr, " puesto de trabajo
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.)
classnum TYPE klasse_d,
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 decstel(2) TYPE c.
DATA gt_equipos LIKE TABLE OF bapi_itob_eq_sel_result.
DATA gs_equipos LIKE LINE OF gt_equipos.
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.
TYPES: BEGIN OF ty_log,
equipment TYPE equnr,
equipment_o TYPE equnr,
type TYPE bapi_mtype,
message TYPE bapi_msg,
END OF ty_log.
DATA gt_log TYPE TABLE OF ty_log.
DATA gs_log LIKE LINE OF gt_log.
DATA gt_return LIKE TABLE OF bapiret2.
*--------------------------------------------------------------------*
*--------------------------------------------------------------------*
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 upload.
*--------------------------------------------------------------------*
END-OF-SELECTION.
*--------------------------------------------------------------------*
IF gt_data[] IS INITIAL.
WRITE:/ 'No se seleccionaron datos'.
RETURN.
ENDIF.
PERFORM crear_equipos.
PERFORM display_log.
*&---------------------------------------------------------------------*
*& Form select_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM crear_equipos.
DATA: ls_data_general_exp LIKE bapi_itob,
ls_data_specific_exp LIKE bapi_itob_eq_only,
ls_data_install LIKE bapi_itob_eq_install.
DATA ld_monto TYPE bapicurr-bapicurr.
DATA ld_equipo TYPE equnr.
LOOP AT gt_data INTO gs_data.
CLEAR: ls_data_specific_exp,
ls_data_general_exp,
ls_data_install,
ls_bapiret2.
SELECT SINGLE objid INTO gs_data-work_ctr FROM crhd
WHERE objty = 'A'
AND arbpl = gs_data-work_ctr
AND werks = gs_data-planplant.
IF sy-subrc <> 0.
CLEAR gs_data-work_ctr.
ENDIF.
SELECT SINGLE objid INTO gs_data-pp_wkctr FROM crhd
WHERE objty = 'A'
AND arbpl = gs_data-pp_wkctr
AND werks = gs_data-maintplant.
IF sy-subrc <> 0.
CLEAR gs_data-pp_wkctr.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_data-costcenter
IMPORTING
output = gs_data-costcenter.
MOVE-CORRESPONDING gs_data TO ls_data_general_exp.
MOVE gs_data-read_supeq TO ls_data_specific_exp-read_supeq.
MOVE gs_data-read_floc TO ls_data_specific_exp-read_floc.
MOVE gs_data-inst_pos TO ls_data_specific_exp-inst_pos.
MOVE gs_data-equicatgry TO ls_data_specific_exp-equicatgry.
* gs_data-EQUIPMENT = gs_equipos-EQUIPMENT.
MOVE gs_data-read_supeq TO ls_data_install-supequi.
MOVE gs_data-read_floc TO ls_data_install-funcloc.
MOVE gs_data-inst_pos TO ls_data_install-inst_pos.
MOVE gs_data-acquisval TO ld_monto.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL'
EXPORTING
currency = gs_data-currency
amount_external = ld_monto
max_number_of_digits = '15'
IMPORTING
amount_internal = ls_data_general_exp-acquisval
* RETURN =
.
CALL FUNCTION 'BAPI_EQUI_CREATE'
EXPORTING
* EXTERNAL_NUMBER =
data_general = ls_data_general_exp
data_specific = ls_data_specific_exp
* DATA_FLEET =
* VALID_DATE = SY-DATUM
data_install = ls_data_install
IMPORTING
equipment = ld_equipo
* DATA_GENERAL_EXP =
* DATA_SPECIFIC_EXP =
* DATA_FLEET_EXP =
return = ls_bapiret2.
IF ld_equipo IS NOT INITIAL.
CLEAR gt_return[].
IF gs_data-classnum IS NOT INITIAL.
DATA ld_object TYPE bapi1003_key-object.
ld_object = ld_equipo.
CALL FUNCTION 'BAPI_OBJCL_CREATE'
EXPORTING
objectkeynew = ld_object
objecttablenew = 'EQUI'
classnumnew = gs_data-classnum
classtypenew = '002'
* STATUS = '1'
* STANDARDCLASS =
* CHANGENUMBER =
* KEYDATE = SY-DATUM
* NO_DEFAULT_VALUES = ' '
* IMPORTING
* CLASSIF_STATUS =
TABLES
* ALLOCVALUESNUM =
* ALLOCVALUESCHAR =
* ALLOCVALUESCURR =
return = gt_return.
ENDIF.
LOOP AT gt_return INTO ls_bapiret2 WHERE type = 'E'.
ENDLOOP.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
* IMPORTING
* RETURN =
.
* write:/ 'Se creo equipo',
* ld_equipo,
* 'copia de',
* gs_data-EQUIPMENT.
gs_log-equipment = ld_equipo.
gs_log-equipment_o = gs_data-equipment.
gs_log-type = 'S'.
gs_log-message = 'Se creo equipo'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
gs_log-equipment = ld_equipo.
gs_log-equipment_o = gs_data-equipment.
gs_log-type = 'E'.
gs_log-message = ls_bapiret2-message.
ENDIF.
ELSE.
gs_log-equipment = ld_equipo.
gs_log-equipment_o = gs_data-equipment.
gs_log-type = 'E'.
gs_log-message = ls_bapiret2-message.
* write:/ ls_bapiret2-message.
ENDIF.
APPEND gs_log TO gt_log.
ENDLOOP.
ENDFORM. "select_data
*&---------------------------------------------------------------------*
*& Form upload
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM upload.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_file
filetype = 'DAT'
TABLES
data_tab = gt_data
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. "upload
*&---------------------------------------------------------------------*
*& Form display_log
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM display_log.
*... Create Instance
TRY.
cl_salv_table=>factory( IMPORTING r_salv_table = DATA(gr_table)
CHANGING t_table = gt_log ).
CATCH cx_salv_msg.
ENDTRY.
*... Enable Generic ALV functions
data(gr_functions) = gr_table->get_functions( ).
** gr_functions->set_default( ).
gr_functions->set_all( ).
data(lr_columns) = gr_table->get_columns( ).
* set column text
TRY.
data(lr_column) = lr_columns->get_column( 'EQUIPMENT_O' ).
lr_column->set_long_text( 'Equipo Original' ).
lr_column->set_medium_text( 'Equi.Ori.' ).
lr_column->set_short_text( 'Equi.Ori.' ).
CATCH cx_salv_not_found.
CATCH cx_salv_existing.
CATCH cx_salv_data_error.
ENDTRY.
*... Display table
gr_table->display( ).
ENDFORM. "display_log