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. *alv data data gr_table type ref to cl_salv_table. data: gr_selections type ref to cl_salv_selections, gt_rows type salv_t_row. data: gr_functions type ref to cl_salv_functions_list. *--------------------------------------------------------------------* *--------------------------------------------------------------------* 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( ). * 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