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