ABAP获取CKM3数据

客户想要和CKM3一样的数据展示,之前用过取表的方式,但是代码找不到了,就用了其他方式。等以后找到取表逻辑再做补充。

直接上代码。

有种是在CKM3里做增强,用BDC的方式取CKM3数据,速度比较慢,但是数据准。
下面这种是调用CKM3的部分逻辑,数据的准确性自行校验。

*&---------------------------------------------------------------------*
*&      Form  SUB_GET_DATA
*&---------------------------------------------------------------------*
* 此方法是把CKM3对应的函数中的部分代码拷贝出来做修改 ,
*速度比调用稍快,但*数据不能保证完全准确。
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_get_data_v2 .
  CLEAR:gt_out  .
  DATA:ls_mlkey TYPE mlkey.
  DATA:lt_out TYPE TABLE OF zsfi_ckm3_out WITH HEADER LINE.

  SELECT mara~matnr, werks FROM mara
    INNER JOIN marc ON marc~matnr = mara~matnr
    INTO   TABLE @DATA(lt_mara)
    WHERE mara~matnr IN @so_matnr
      AND mara~matkl IN @so_matkl
      AND werks = @pa_werks .

 if lt_mara   is INITIAL .
  MESSAGE '没有满足条件的数据' TYPE 'S' DISPLAY LIKE 'E'.
  LEAVE TO LIST-PROCESSING .
  endif.
  sort lt_mara by matnr werks .

  LOOP AT lt_mara INTO DATA(ls_mara).
    CLEAR:ls_mlkey.
    REFRESH:lt_out .
    ls_mlkey-matnr = ls_mara-matnr.
    ls_mlkey-werks_ml_productive = ls_mlkey-BWKEY = ls_mara-werks.
    ls_mlkey-poper = pa_monat .
    ls_mlkey-bdatj = pa_gjahr .
    ls_mlkey-STATUS = '30'.
    ls_mlkey-CURTP = '10'.
    ls_mlkey-WAERS = 'CNY'.
    select SINGLE kalnr from ckmlhd
      into ls_mlkey-kalnr
      where matnr = ls_mara-matnr and bwkey = ls_mara-werks .

    select SINGLE bukrs from t001k into ls_mlkey-bukrs
      where BWKEY = ls_mara-werks .

"主要获取方式
     call function 'ZFI003_GET_CKM3_DATA'
       TABLES
         it_data       = lt_out
       changing
         c_mlkey       = ls_mlkey
               .

    LOOP AT lt_out  .
       if sy-tabix = 1 .lt_out-matnr = ls_mara-matnr .  endif.
      APPEND lt_out TO gt_out .
    ENDLOOP .

  ENDLOOP .

ENDFORM. " SUB_GET_DATA

FORM sub_set_fieldcat USING pt_fcat.
  DATA:wa_fieldcat TYPE   lvc_s_fcat .
  DATA:lt_fieldcat TYPE   lvc_t_fcat .
  DATA:lt_fieldcat2 TYPE   lvc_t_fcat .
  FIELD-SYMBOLS:<fs_fcat> TYPE lvc_s_fcat.

  DEFINE mac_add_fieldcat.
    CLEAR  wa_fieldcat.
    wa_fieldcat-fieldname      =  &1.
    wa_fieldcat-coltext         =  &2.
    APPEND wa_fieldcat TO lt_fieldcat.
  END-OF-DEFINITION.
*****需要输出的字段
*  mac_add_fieldcat:
*  'SEL'   '选择',
*  'ICON'  '状态',
*  'MSG'   '消息'.
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name = 'ZSFI_CKM3_OUT'
    CHANGING
      ct_fieldcat      = lt_fieldcat2.

  APPEND LINES OF lt_fieldcat2 TO lt_fieldcat .

  LOOP AT lt_fieldcat ASSIGNING <fs_fcat> .
    CASE <fs_fcat>-fieldname .
      WHEN 'SEL'.
        <fs_fcat>-checkbox = 'X'.
        <fs_fcat>-edit      = 'X'.
      WHEN 'ZZTEXT'.<fs_fcat>-coltext = <fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m = <fs_fcat>-scrtext_s = '项目' .
      WHEN 'ELM001'.<fs_fcat>-coltext = <fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m = <fs_fcat>-scrtext_s = '材料成本' .
      WHEN 'ELM002'.<fs_fcat>-coltext = <fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m = <fs_fcat>-scrtext_s = '辅料成本' .
      WHEN 'ELM003'.<fs_fcat>-coltext = <fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m = <fs_fcat>-scrtext_s = '直接人工' .
      WHEN 'ELM004'.<fs_fcat>-coltext = <fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m = <fs_fcat>-scrtext_s = '间接人工' .

      WHEN 'ELM005'.<fs_fcat>-coltext = <fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m = <fs_fcat>-scrtext_s = '折旧摊销费用' .
      WHEN 'ELM006'.<fs_fcat>-coltext = <fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m = <fs_fcat>-scrtext_s = '动能费' .
      WHEN 'ELM007'.<fs_fcat>-coltext = <fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m = <fs_fcat>-scrtext_s = '制造费用(固定)' .
      WHEN 'ELM008'.<fs_fcat>-coltext = <fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m = <fs_fcat>-scrtext_s = '制造费用(变动)' .

      WHEN 'ELM009'.<fs_fcat>-coltext = <fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m = <fs_fcat>-scrtext_s = '委托加工及半成品与成品' .
      WHEN 'ELM010'.<fs_fcat>-coltext = <fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m = <fs_fcat>-scrtext_s = '在制品' .
      WHEN 'ELM011'.<fs_fcat>-coltext = <fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m = <fs_fcat>-scrtext_s = '废品' .
      WHEN 'ELM012'.<fs_fcat>-coltext = <fs_fcat>-scrtext_l = <fs_fcat>-scrtext_m = <fs_fcat>-scrtext_s = '生产成本转出' .

    ENDCASE .
  ENDLOOP .
  pt_fcat = lt_fieldcat .
ENDFORM. " SUB_SET_FIELDCAT

zsfi_ckm3_out结构

 1.函数 zfi003_get_ckm3_data

FUNCTION zfi003_get_ckm3_data .
*"----------------------------------------------------------------------
*"*"本地接口:
*" TABLES
*" IT_DATA STRUCTURE ZSFI_CKM3_OUT
*" CHANGING
*" REFERENCE(C_MLKEY) TYPE MLKEY
*"----------------------------------------------------------------------
* Global data declarations

  DATA:ls_data TYPE zsfi_ckm3_out.
  mlkey = c_mlkey .CLEAR:s_wrong_input.
  MOVE-CORRESPONDING mlkey TO gs_ccskey.
  gs_ccskey-keart = 'H'.
  MOVE-CORRESPONDING mlkey TO cki_wwo_ml.
  PERFORM get_ml_data_0055_pbo .
  PERFORM modify_screen_ccs_pbo USING mlkey-bwkey.

  PERFORM clear_data_global_300.
  PERFORM modify_global_300_pbo .
  PERFORM get_data_pbo_300.

* BREAK zhuangxian .
  LOOP AT t_list INTO DATA(ls_list) WHERE SORT NE '0004' AND SORT NE '0005' and SORT NE '0006'  .
    MOVE-CORRESPONDING ls_list TO ls_data .

    ls_data-zztext = ls_list-sort .
    COLLECT ls_data INTO it_data.
    CLEAR:ls_data .
  ENDLOOP .

  loop at it_data ASSIGNING FIELD-SYMBOL(<fs_data>).
    read TABLE t_list into ls_list with key sort = <fs_data>-zztext .
    IF sy-subrc = 0 .
      <fs_data>-PRICE = ls_list-price .

    ENDIF.
    case <fs_data>-zztext.
     when '0000'.<fs_data>-zztext = '期初'.

     when '0002'.<fs_data>-zztext = '本期增加'.
      when '0007'.<fs_data>-zztext = '本期减少'.
      when '0008'.<fs_data>-zztext = '期末'.

    ENDCASE .

  ENDLOOP .

*
*
   PERFORM fcode_back.

* it_data = t_list .
ENDFUNCTION.

函数FUNCTION-POOL

FUNCTION-POOL ZCKM8H
               NO STANDARD PAGE HEADING
               MESSAGE-ID c+
               LINE-SIZE 100.
**********************************************************************
*                                                                    *
*  Für die Datendefinitionen gelten folgende Vereinbarungen:         *
*                                                                    *
*    F_... : Feldleisten                                             *
*    H_... : Hilfsfelder; sie sind über mehrere Module, Form-        *
*            Routinen gültig (global).                               *
*    I_... : Indextabelle; interne Tabelle, die einen Index auf eine *
*            andere interne Tabelle bildet.                          *
*    K_... : tempor#re Felder; Inhalt nur innerhalb einer Form-      *
*            Routine gesichert (mehrfach genutzt lokal)              *
*    P_... : Reportparameter                                         *
*    R_... : Returncodes                                             *
*    S_... : Schalter; nur 'X' oder ' '                              *
*    T_... : interne Tabelle                                         *
*    Y_... : Konstanten                                              *
*                                                                    *
**********************************************************************

*----------------------------------------------------------------------*
*     INCLUDES                                                         *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
*     Typen                                                            *
*----------------------------------------------------------------------*
TYPE-POOLS: slis,
            ckm8,
            ckm8n,
            vrm,
            ckmd,
            ckmv0,
            ckmv3,
            icon.

*----------------------------------------------------------------------*
*     Tabellen (DDIC)                                                  *
*----------------------------------------------------------------------*
TABLES:
         ckmlhd,
         ckmlpr,
         ckmlpp,
         ckmlcr,
         mlkey,
         ckmlcur,
         mbew,
         ebew,
         qbew,
         obew,                         " Subcontracting Japan
         marv,
         mara,
         makt,
         auak,
         coep,
         rseg,
         t001,
         t001k,
         t001w,
         tcurm,
         mtcom,
         cki_wwo_ml,
         ckmlrunperiod.

*----------------------------------------------------------------------*
*     Tabellen                                                         *
*----------------------------------------------------------------------*

DATA: t_curtp LIKE cki_ml_cty OCCURS 0 WITH HEADER LINE,
      t_curtp_run LIKE cki_ml_cty OCCURS 0 WITH HEADER LINE,
      t_ckmlhd LIKE ckmlhd OCCURS 0 WITH HEADER LINE,
      t_ckmlpr LIKE ckmlpr OCCURS 0 WITH HEADER LINE,
      t_ckmlpp LIKE ckmlpp OCCURS 0 WITH HEADER LINE,
      t_ckmlcr LIKE ckmlcr OCCURS 0 WITH HEADER LINE.

DATA: t_dynpread LIKE dynpread OCCURS 2 WITH HEADER LINE.

* Feldnamentabelle für HELP_VALUES_GET
DATA: BEGIN OF f4ftab OCCURS 0.
        INCLUDE STRUCTURE help_value.
DATA: END OF f4ftab.

* Wertetabelle für HELP_VALUES_GET
DATA: BEGIN OF f4vtab OCCURS 0,
        line(100),
      END OF f4vtab.

* Feldnamentabelle für F4 auf Bewertungsart
DATA: BEGIN OF f4bwtar_fields OCCURS 0.
        INCLUDE STRUCTURE help_value.
DATA: END OF f4bwtar_fields.

* Wertetabelle für F4 auf Bewertungsart
DATA: BEGIN OF f4bwtar_values OCCURS 0,
        line(100).
DATA: END OF f4bwtar_values.

* Tabelle aller Bewertungsarten zum Schieben in f4bwtar_values
DATA: BEGIN OF t_all_bwtar OCCURS 0.
        INCLUDE STRUCTURE bwtar.
DATA: END OF t_all_bwtar.

* Feldnamentabelle für F4 auf Werk
DATA: BEGIN OF f4werk_fields OCCURS 0.
        INCLUDE STRUCTURE help_value.
DATA: END OF f4werk_fields.

* Wertetabelle für F4 auf Werk
DATA: BEGIN OF f4werk_values OCCURS 0,
        line(100).
DATA: END OF f4werk_values.

* Tabelle aller Werke zum Schieben in f4werk_values
DATA: BEGIN OF t_t001w OCCURS 0.
        INCLUDE STRUCTURE t001w.
DATA: END OF t_t001w.

* Tabelle aller ML-aktiven Bewertungskreise
DATA: BEGIN OF t_t001k OCCURS 0.
        INCLUDE STRUCTURE t001k.
DATA: END OF t_t001k.

** Tabelle für Kundenauftr#ge
*DATA: BEGIN OF t_ebew OCCURS 0,
*        vbeln LIKE ebew-vbeln,
*        posnr LIKE ebew-posnr.
*DATA: END OF t_ebew.
*
** Tabelle für PSP-Elemente
*DATA: BEGIN OF t_qbew OCCURS 0,
*        pspnr LIKE qbew-pspnr.
*DATA: END OF t_qbew.


*----------------------------------------------------------------------*
*     Feldleisten                                                      *
*----------------------------------------------------------------------*


*----------------------------------------------------------------------*
*     Schalter                                                         *
*----------------------------------------------------------------------*
DATA: s_first_call LIKE boole-boole VALUE 'X',
      s_wrong_input LIKE boole-boole VALUE 'X',
      s_ph_for_mlast3 LIKE boole-boole,
      s_ph_for_mlast2 LIKE boole-boole VALUE 'X',
      s_ps_for_mlast3 LIKE boole-boole,
      s_ps_for_mlast2 LIKE boole-boole,
      s_plan_on LIKE boole-boole,
      s_weda_on LIKE boole-boole,
      s_refresh TYPE boole_d,
      s_noheader TYPE boole_d,
      s_plan_act_compare TYPE boole_d,
      s_ccs_view TYPE boole_d,
      s_new_material TYPE boole_d VALUE 'X',
      s_new_la       TYPE boole_d VALUE 'X',
      s_qstree_show TYPE boole_d,
      s_qstree_change TYPE boole_d,
      s_wip_active TYPE boole_d.

*----------------------------------------------------------------------*
*     Globale Feldvariablen
*----------------------------------------------------------------------*

DATA: l_dynnr LIKE sy-dynnr.
DATA: h_bdatj LIKE ckmlpp-bdatj,
      h_poper LIKE ckmlpp-poper,
      h_curtp LIKE ckmlcr-curtp,
      h_xauth TYPE c,
      h_waers LIKE ckmlcr-waers,
      h_maktx LIKE makt-maktx,
      h_lines TYPE i,
      h_text1(40),
      h_text2(40),
      h_text3(40),
      h_bwkey_fieldname(30),
      h_var_values(50),
      h_var_texts(50).

DATA: h_url(255) TYPE c.

* Checkman:
DATA: fcode TYPE sy-ucomm.

*----------------------------------------------------------------------*
*     Konstanten                                                       *
*----------------------------------------------------------------------*

CONSTANTS:
      y_x VALUE 'X',
      y_curtp_lc(2) VALUE '10',
      y_mlast_2 LIKE mbew-mlast VALUE '2',    "vorgangsbezogen
      y_mlast_3 LIKE mbew-mlast VALUE '3',    "ein-/mehrstufig
      y_glvor_order_settlement  LIKE  mlhd-glvor  VALUE 'KOAE',

*---- Wertehilfe für Werk --------------------------------- "P30K049582
      y_tabname_t001w   LIKE help_value-tabname   VALUE 'T001W',
      y_fieldname_werks LIKE help_value-fieldname VALUE 'WERKS',
      y_fieldname_name1 LIKE help_value-fieldname VALUE 'NAME1',
      y_fieldname_ort01 LIKE help_value-fieldname VALUE 'ORT01',
*---------------------------------------------------------- "P30K049582

*---- Wertehilfe für Bewertungsart ------------------------ "P30K102100
      y_tabname_mbew    LIKE help_value-tabname   VALUE 'MBEW',
      y_fieldname_bwtar LIKE help_value-fieldname VALUE 'BWTAR'.

*---------------------------------------------------------- "P30K102100


*----------------------------------------------------------------------*
*     Klassen                                                          *
*----------------------------------------------------------------------*

CLASS cl_aggregation_header_ckml DEFINITION LOAD.

CLASS cl_gui_cfw DEFINITION LOAD.
CLASS cl_gui_column_tree DEFINITION LOAD.
CLASS cl_gui_dialogbox_container DEFINITION LOAD.

*---------------------------------------------------------------------*
*       CLASS lcl_alv_grid_status DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_alv_grid_status DEFINITION INHERITING FROM cl_gui_alv_grid.
  PUBLIC SECTION.
    METHODS: switch_scrollbars_off,
             optimize_cols,
             no_resize_cols,
             clear_select.
ENDCLASS. "lcl_alv_grid_status DEFINITION
*---------------------------------------------------------------------*
*       CLASS lcl_alv_grid_status IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_alv_grid_status IMPLEMENTATION.
  METHOD switch_scrollbars_off.
    CALL METHOD me->set_horizontal_scrollbars
      EXPORTING
        enable = 0.
    CALL METHOD me->set_vertical_scrollbars
      EXPORTING
        enable = 0.
  ENDMETHOD.                    "switch_scrollbars_off
  METHOD optimize_cols.
    CALL METHOD me->optimize_all_cols.
  ENDMETHOD.                    "optimize_cols
  METHOD no_resize_cols.
    CALL METHOD me->set_resize_cols
      EXPORTING
        enable = 0.
  ENDMETHOD.                    "no_resize_cols
  METHOD clear_select.
    CALL METHOD me->clear_selection.
  ENDMETHOD.                    "clear_select
ENDCLASS. "lcl_alv_grid_status IMPLEMENTATION


*---------------------------------------------------------------------*
*       CLASS lcl_dialogbox_event_handler DEFINITION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_dialogbox_event_handler DEFINITION.
  PUBLIC SECTION.
    METHODS handle_close
      FOR EVENT close OF cl_gui_dialogbox_container
      IMPORTING sender.
ENDCLASS. "lcl_dialogbox_event_handler DEFINITION
*---------------------------------------------------------------------*
*       CLASS lcl_dialogbox_event_handler IMPLEMENTATION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_dialogbox_event_handler IMPLEMENTATION.
  METHOD handle_close.
    PERFORM handle_dialogbox_close USING sender.
  ENDMETHOD.                    "handle_close
ENDCLASS. "lcl_dialogbox_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
*     Referenzvariablen                                                *
*----------------------------------------------------------------------*

DATA:
      status TYPE REF TO cl_gui_custom_container,
      dialogbox TYPE REF TO cl_gui_dialogbox_container,
      alv_grid_plan TYPE REF TO cl_gui_alv_grid,
      dbox_event_handler TYPE REF TO lcl_dialogbox_event_handler,
      alv_grid_status TYPE REF TO lcl_alv_grid_status,
      qstree  TYPE REF TO cl_qstree_ckml.

DATA: style TYPE i.

*----------------------------------------------------------------------*
* Data variables for screen 80 - display of Settlement document
*----------------------------------------------------------------------*
DATA: g_last_changed_on_date TYPE cpudt,
      g_last_changed_on_time   TYPE cputm,
      g_costing_level_sender   TYPE ck_kalst,
      g_costing_level_receiver TYPE ck_kalst,
      g_cycle_no_sender        TYPE ck_cyclenr,
      g_cycle_no_receiver      TYPE ck_cyclenr,
      g_input_desc             TYPE lvc_value,
      g_output_desc            TYPE lvc_value,
      g_object                 TYPE char10,
      g_object_in              TYPE char10,
      g_object_out             TYPE char10,
      g_object_desc            TYPE lvc_value,
      g_cycle_no_object        TYPE ck_cyclenr,
      g_costing_level_object   TYPE ck_kalst.

*----------------------------------------------------------------------*
*     Spezielle globale Variablen                                      *
*----------------------------------------------------------------------*
INCLUDE lckm8ntoa. "allgemein Transaktion CKM3
INCLUDE lckm8htob. "AVL-TREE ML-Abrechnungsschema
INCLUDE lckm8Htod. "GRID-ALV Preishistorie
INCLUDE lckm8ntod. "ALV-TREE Istschichtung
INCLUDE lckm8ntoe. "ALV-TREE Plan/Ist-Vergleich
INCLUDE lckm8ntof. "CKM8N_DOCUMENT_REPORT
INCLUDE fckgloba. "Konstanten für Istschchtung
INCLUDE lckmdtop_feldgruppen.
INCLUDE lckm4top_periodenarten.

*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Global from HANA DB MLDOC, MLDOCCCS
*----------------------------------------------------------------------*
include LCKM8HTOH.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两年半的ABAPer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值