SAP PM BAPI CA01
From SapWiki
*&---------------------------------------------------------------------*
*& Report ZPP_CREAR_HR
*&
*&---------------------------------------------------------------------*
*& Descripcion : Creación de Hojas de Ruta (CA01)
*&---------------------------------------------------------------------*
REPORT zpp_crear_hr.
*--------------------------------------------------------------------*
TYPE-POOLS : slis.
DATA: BEGIN OF gs_data,
material LIKE bapi1012_mtk_c-material, "Material
plant LIKE bapi1012_mtk_c-plant, "Centro
task_list_group LIKE bapi1012_tsk_c-task_list_group, "Grp. Hoja de Ruta
group_counter LIKE bapi1012_tsk_c-group_counter, "Contador
ident_key LIKE bapi1012_tsk_c-ident_key, "Pto. Inspección
insppoint_partiallot_assgnmt LIKE bapi1012_tsk_c-insppoint_partiallot_assgnmt, "Datos Parciales
dyn_modif_level LIKE bapi1012_tsk_c-dyn_modif_level, "Nivel Dinamizacion
activity LIKE bapi1012_opr_c-activity, "Numero de Operacion
work_cntr LIKE bapi1012_opr_c-work_cntr, "Puesto de Trabajo
control_key LIKE bapi1012_opr_c-control_key, "Clave de Control
description LIKE bapi1012_opr_c-description, "Descrip. Operación
insp_point_complt_flow_variant LIKE bapi1012_opr_c-insp_point_complt_flow_variant, "Variante de Proceso
time_grid LIKE bapi1012_opr_c-time_grid, "Secuencial Hora
time_factor LIKE bapi1012_opr_c-time_factor, " Factor de Tiempo
time_unit LIKE bapi1012_opr_c-time_unit, "Unidad de Tiempo
denominator LIKE bapi1012_opr_c-denominator, "Denominador para conversión u.medida hoja ruta y operación
nominator LIKE bapi1012_opr_c-nominator, "Contador para conversión u.medida hoja de ruta y operación
base_quantity LIKE bapi1012_opr_c-base_quantity, "Cantidad base
inspchar LIKE bapi1012_cha_c-inspchar, "Numero de Caracteristica
char_descr LIKE bapi1012_cha_c-char_descr, "Texto breve para característica inspección
mstr_char LIKE bapi1012_cha_c-mstr_char, "Caracteristica
smpl_procedure LIKE bapi1012_cha_c-smpl_procedure, "Procedimiento
smpl_unit LIKE bapi1012_cha_c-smpl_unit, "Unidad de Medida
smpl_quant LIKE bapi1012_cha_c-smpl_quant, "Cantidad para muestra
dyn_modif_rule LIKE bapi1012_cha_c-dyn_modif_rule, "Regla Dinamizacion
spc_criterion_key LIKE bapi1012_cha_c-spc_criterion_key, "Criterio SPC
up_tol_lmt LIKE bapi1012_cha_c-up_tol_lmt, "Tolerancia Superior
lw_tol_lmt LIKE bapi1012_cha_c-lw_tol_lmt, "Tolerancia Inferior
formula_check_by_sap LIKE bapi1012_cha_c-formula_check_by_sap, "Verificar y calcular fórmula en QM
formula_field_1 LIKE bapi1012_cha_c-formula_field_1,
formula_field_2 LIKE bapi1012_cha_c-formula_field_2,
task_measure_unit LIKE bapi1012_tsk_c-task_measure_unit,
END OF gs_data.
DATA gt_data LIKE TABLE OF gs_data.
DATA: BEGIN OF gs_data_material,
material LIKE bapi1012_mtk_c-material, "Material
plant LIKE bapi1012_mtk_c-plant, "Centro
task_list_group LIKE bapi1012_tsk_c-task_list_group, "Grp. Hoja de Ruta
group_counter LIKE bapi1012_tsk_c-group_counter, "Contador
ident_key LIKE bapi1012_tsk_c-ident_key, "Pto. Inspección
insppoint_partiallot_assgnmt LIKE bapi1012_tsk_c-insppoint_partiallot_assgnmt, "Datos Parciales
dyn_modif_level LIKE bapi1012_tsk_c-dyn_modif_level, "Nivel Dinamizacion
END OF gs_data_material.
DATA: BEGIN OF gs_data_operacion,
material LIKE bapi1012_mtk_c-material, "Material
plant LIKE bapi1012_mtk_c-plant, "Centro
task_list_group LIKE bapi1012_tsk_c-task_list_group, "Grp. Hoja de Ruta
group_counter LIKE bapi1012_tsk_c-group_counter, "Contador
activity LIKE bapi1012_opr_c-activity, "Numero de Operacion
work_cntr LIKE bapi1012_opr_c-work_cntr, "Puesto de Trabajo
control_key LIKE bapi1012_opr_c-control_key, "Clave de Control
description LIKE bapi1012_opr_c-description, "Descrip. Operación
insp_point_complt_flow_variant LIKE bapi1012_opr_c-insp_point_complt_flow_variant, "Variante de Proceso
time_grid LIKE bapi1012_opr_c-time_grid, "Secuencial Hora
time_factor LIKE bapi1012_opr_c-time_factor, " Factor de Tiempo
time_unit LIKE bapi1012_opr_c-time_unit, "Unidad de Tiempo
denominator LIKE bapi1012_opr_c-denominator,
nominator LIKE bapi1012_opr_c-nominator,
base_quantity LIKE bapi1012_opr_c-base_quantity,
END OF gs_data_operacion.
DATA: BEGIN OF gs_data_cha,
material LIKE bapi1012_mtk_c-material, "Material
plant LIKE bapi1012_mtk_c-plant, "Centro
task_list_group LIKE bapi1012_tsk_c-task_list_group, "Grp. Hoja de Ruta
group_counter LIKE bapi1012_tsk_c-group_counter, "Contador
activity LIKE bapi1012_opr_c-activity, "Numero de Operacion
inspchar LIKE bapi1012_cha_c-inspchar, "Numero de Caracteristica
char_descr LIKE bapi1012_cha_c-char_descr,
mstr_char LIKE bapi1012_cha_c-mstr_char, "Caracteristica
smpl_procedure LIKE bapi1012_cha_c-smpl_procedure, "Procedimiento
smpl_unit LIKE bapi1012_cha_c-smpl_unit, "Unidad de Medida
smpl_quant LIKE bapi1012_cha_c-smpl_quant, "Cantidad para muestra
dyn_modif_rule LIKE bapi1012_cha_c-dyn_modif_rule, "Regla Dinamizacion
spc_criterion_key LIKE bapi1012_cha_c-spc_criterion_key, "Criterio SPC
up_tol_lmt LIKE bapi1012_cha_c-up_tol_lmt, "Tolerancia Superior
lw_tol_lmt LIKE bapi1012_cha_c-lw_tol_lmt, "Tolerancia Inferior
formula_check_by_sap LIKE bapi1012_cha_c-formula_check_by_sap,
formula_field_1 LIKE bapi1012_cha_c-formula_field_1,
formula_field_2 LIKE bapi1012_cha_c-formula_field_2,
END OF gs_data_cha.
DATA gt_data_material LIKE TABLE OF gs_data_material.
DATA gt_data_operacion LIKE TABLE OF gs_data_operacion.
DATA gt_data_cha LIKE TABLE OF gs_data_cha.
DATA decstel(2) TYPE c.
DATA gd_tfile TYPE ibipparms-path.
TYPES: BEGIN OF ty_log,
material LIKE bapi1012_mtk_c-material, "Material
plant LIKE bapi1012_mtk_c-plant, "Centro
task_list_group LIKE bapi1012_tsk_c-task_list_group, "Grp. Hoja de Ruta
group_counter LIKE bapi1012_tsk_c-group_counter, "Contador
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.
*--------------------------------------------------------------------*
*--------------------------------------------------------------------*
PARAMETERS: p_file TYPE string LOWER CASE OBLIGATORY,
p_test TYPE bapiflag DEFAULT 'X'.
*--------------------------------------------------------------------*
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_hoja_de_ruta.
PERFORM display_log.
*&---------------------------------------------------------------------*
*& Form get_task_list_group
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_task_list_group USING i_change
gs_bapi_mtk TYPE bapi1012_mtk_c
gs_bapi_tsk TYPE bapi1012_tsk_c.
DATA: BEGIN OF ls_h,
valid_to TYPE sydatum,
lin TYPE i,
END OF ls_h,
ls_mtk_int TYPE maplb,
lt_mtk_int TYPE TABLE OF maplb,
ls_tsk_int TYPE plko.
ls_h-valid_to = sy-datum.
* read material task allocation
CALL FUNCTION 'CP_DB_MAPL_READ'
EXPORTING
datub = ls_h-valid_to
datuv = gs_bapi_mtk-valid_from
matnr = gs_bapi_mtk-material
werks = gs_bapi_mtk-plant
TABLES
matpl = lt_mtk_int
EXCEPTIONS
no_records = 1
OTHERS = 2.
CHECK: sy-subrc = 0.
* delete deleted material task allocations
DELETE lt_mtk_int WHERE loekz = 'X'.
* IF gs_cntrl-flg_change_mode = const-flg_yes.
IF i_change = 'X'.
DELETE lt_mtk_int WHERE plnal <> gs_bapi_mtk-group_counter.
ENDIF.
DESCRIBE TABLE lt_mtk_int LINES ls_h-lin.
IF ls_h-lin = 1 OR i_change IS INITIAL.
READ TABLE lt_mtk_int INTO ls_mtk_int INDEX 1.
CHECK: sy-subrc = 0.
* gs_cntrl-task_list_group = ls_mtk_int-plnnr.
ELSE.
SORT lt_mtk_int BY datuv DESCENDING.
LOOP AT lt_mtk_int INTO ls_mtk_int.
* read task list header
CALL FUNCTION 'CI03_READ_PLKO'
EXPORTING
i_plnty = ls_mtk_int-plnty
i_plnnr = ls_mtk_int-plnnr
i_plnal = ls_mtk_int-plnal
i_date = ls_mtk_int-datuv
IMPORTING
e_plko = ls_tsk_int
EXCEPTIONS
tl_not_existent = 1
tl_not_valid = 2
OTHERS = 3.
CHECK: sy-subrc = 0.
IF ls_tsk_int-verwe = gs_bapi_tsk-task_list_usage.
* gs_cntrl-task_list_group = ls_tsk_int-plnnr.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " get_task_list_group
*&---------------------------------------------------------------------*
*& Form select_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM crear_hoja_de_ruta.
DATA lt_materialtaskallocation TYPE TABLE OF bapi1012_mtk_c .
DATA lt_task TYPE TABLE OF bapi1012_tsk_c.
DATA lt_operation TYPE TABLE OF bapi1012_opr_c.
DATA lt_inspcharacteristic TYPE TABLE OF bapi1012_cha_c.
DATA ls_materialtaskallocation TYPE bapi1012_mtk_c .
DATA ls_task TYPE bapi1012_tsk_c.
DATA ls_operation TYPE bapi1012_opr_c.
DATA ls_inspcharacteristic TYPE bapi1012_cha_c.
DATA lt_return TYPE TABLE OF bapiret2.
DATA ls_return LIKE LINE OF lt_return.
LOOP AT gt_data INTO gs_data.
CLEAR: gt_data_material[].
CLEAR: gt_data_operacion[].
CLEAR: gt_data_cha[].
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_data-group_counter
IMPORTING
output = gs_data-group_counter.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = gs_data-material
IMPORTING
output = gs_data-material
EXCEPTIONS
length_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
CLEAR gs_data-material.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_NUMCV_INPUT'
EXPORTING
input = gs_data-activity
IMPORTING
output = gs_data-activity.
MOVE-CORRESPONDING gs_data TO gs_data_material.
MOVE-CORRESPONDING gs_data TO gs_data_operacion.
MOVE-CORRESPONDING gs_data TO gs_data_cha.
APPEND gs_data_material TO gt_data_material.
APPEND gs_data_operacion TO gt_data_operacion.
APPEND gs_data_cha TO gt_data_cha.
* ENDLOOP.
LOOP AT gt_data_material INTO gs_data_material.
CLEAR: lt_operation[],
lt_inspcharacteristic[],
lt_materialtaskallocation[],
lt_task[],
lt_return[].
* clear gs_data-TASK_LIST_GROUP.
* gs_data-GROUP_COUNTER = 2.
MOVE-CORRESPONDING gs_data TO ls_materialtaskallocation.
IF ls_materialtaskallocation-material IS NOT INITIAL.
APPEND ls_materialtaskallocation TO lt_materialtaskallocation.
ENDIF.
MOVE-CORRESPONDING gs_data TO ls_task.
ls_task-task_list_usage = '1'.
ls_task-task_list_status = '4'.
ls_task-valid_from = sy-datum.
ls_task-valid_to_date = '99991231'.
* ls_task-TASK_MEASURE_UNIT = 'KI'. "CA
APPEND ls_task TO lt_task.
LOOP AT gt_data_operacion INTO gs_data_operacion WHERE
material = gs_data_material-material
AND plant = gs_data_material-plant
AND task_list_group = gs_data_material-task_list_group
AND group_counter = gs_data_material-group_counter
AND activity IS NOT INITIAL.
ls_operation-task_list_group = gs_data_material-task_list_group.
ls_operation-group_counter = gs_data_material-group_counter.
ls_operation-activity = gs_data_operacion-activity.
ls_operation-work_cntr = gs_data_operacion-work_cntr.
ls_operation-control_key = gs_data_operacion-control_key.
ls_operation-description = gs_data_operacion-description.
ls_operation-insp_point_complt_flow_variant = gs_data_operacion-insp_point_complt_flow_variant.
ls_operation-time_grid = gs_data_operacion-time_grid.
ls_operation-time_factor = gs_data_operacion-time_factor.
ls_operation-time_unit = gs_data_operacion-time_unit.
ls_operation-denominator = gs_data_operacion-denominator.
ls_operation-nominator = gs_data_operacion-nominator.
ls_operation-base_quantity = gs_data_operacion-base_quantity.
APPEND ls_operation TO lt_operation.
LOOP AT gt_data_cha INTO gs_data_cha WHERE
material = gs_data_material-material
AND plant = gs_data_material-plant
AND task_list_group = gs_data_material-task_list_group
AND group_counter = gs_data_material-group_counter
AND activity = gs_data_operacion-activity
AND inspchar IS NOT INITIAL.
ls_inspcharacteristic-task_list_group = gs_data_material-task_list_group.
ls_inspcharacteristic-group_counter = gs_data_material-group_counter.
ls_inspcharacteristic-activity = gs_data_cha-activity.
ls_inspcharacteristic-inspchar = gs_data_cha-inspchar.
ls_inspcharacteristic-mstr_char = gs_data_cha-mstr_char.
ls_inspcharacteristic-smpl_procedure = gs_data_cha-smpl_procedure.
ls_inspcharacteristic-smpl_unit = gs_data_cha-smpl_unit.
ls_inspcharacteristic-smpl_quant = gs_data_cha-smpl_quant.
ls_inspcharacteristic-dyn_modif_rule = gs_data_cha-dyn_modif_rule.
ls_inspcharacteristic-spc_criterion_key = gs_data_cha-spc_criterion_key .
ls_inspcharacteristic-up_tol_lmt = gs_data_cha-up_tol_lmt.
ls_inspcharacteristic-lw_tol_lmt = gs_data_cha-lw_tol_lmt.
ls_inspcharacteristic-formula_check_by_sap = gs_data_cha-formula_check_by_sap.
ls_inspcharacteristic-formula_field_1 = gs_data_cha-formula_field_1 .
ls_inspcharacteristic-formula_field_2 = gs_data_cha-formula_field_2 .
ls_inspcharacteristic-char_descr = gs_data_cha-char_descr.
APPEND ls_inspcharacteristic TO lt_inspcharacteristic.
ENDLOOP.
ENDLOOP.
* MOVE-CORRESPONDING gs_data to ls_OPERATION.
* MOVE-CORRESPONDING gs_data to ls_INSPCHARACTERISTIC.
* append ls_OPERATION to lt_OPERATION.
* APPEND ls_INSPCHARACTERISTIC to lt_INSPCHARACTERISTIC.
DATA ld_testrun TYPE bapiflag.
ld_testrun = 'X'.
DATA ld_bomusage TYPE bapi1012_control_data-bom_usage .
ld_bomusage = '1'. "fabricacion
CALL FUNCTION 'BAPI_ROUTING_CREATE'
EXPORTING
testrun = p_test
* PROFILE =
bomusage = ld_bomusage
* APPLICATION =
* IMPORTING
* GROUP =
* GROUPCOUNTER =
TABLES
task = lt_task
materialtaskallocation = lt_materialtaskallocation
* SEQUENCE =
operation = lt_operation
* LENGTHCALCULATION =
* SUBOPERATION =
* REFERENCEOPERATION =
* WORKCENTERREFERENCE =
* COMPONENTALLOCATION =
* PRODUCTIONRESOURCE =
inspcharacteristic = lt_inspcharacteristic
* TEXTALLOCATION =
* TEXT =
return = lt_return.
MOVE-CORRESPONDING gs_data_material TO gs_log.
LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.
MOVE-CORRESPONDING ls_return TO gs_log.
APPEND gs_log TO gt_log.
ENDLOOP.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* WAIT =
* IMPORTING
* RETURN =
.
gs_log-type = 'S'.
gs_log-message = 'Hoja de ruta creada'.
APPEND gs_log TO gt_log.
ENDIF.
* BREAK-POINT.
ENDLOOP.
ENDLOOP.
*PERFORM get_task_list_group using 'X'
* ls_MATERIALTASKALLOCATION
* ls_task.
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( ).
*... Display table
gr_table->display( ).
ENDFORM. "display_log