SAP APO 取订单函数(取计划订单数据一)

测试环境中,ZRFC_GETORDKEY自开发函数,用于读取计划订单相关数据。输入参数为时间段喝工厂,输出数据为: 计划订单的订单、工艺时间、班次。 图片显示有9223条订单数据,每一条订单数据应该对应4条生产线的工艺时间,但RFC中只取了第一条工艺数据,所以也有9223条工艺数据。SHIFT是系统中的工作班次,有722个。

  

FUNCTION ZRFC_GETORDKEY.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(GV_CONFIG_BEGIN) TYPE  /SAPAPO/STARTTI
*"     VALUE(GV_CONFIG_END) TYPE  /SAPAPO/ENDTI
*"     VALUE(WERKS) TYPE  CHAR4
*"  TABLES
*"      GT_ORDKEY STRUCTURE  /SAPAPO/ORDKEY
*"      GT_ACT STRUCTURE  ZSPP_GETACT
*"      GT_SHIFT STRUCTURE  ZSPP_GETSHIFT1
*"----------------------------------------------------------------------

CONSTANTS:  gc_active_version  TYPE /sapapo/om_vrsioid  VALUE /sapapo/cl_om_c=>active_version    ##needed.

DATA:
gv_simid    TYPE /sapapo/vrsioid VALUE gc_active_version,
gs_gen_params    TYPE /sapapo/om_gen_params,
gv_simsession    TYPE /sapapo/om_simsession,
gt_cap_reqs      TYPE /sapapo/om_cap_req_pt_tab,
lt_ordid TYPE /sapapo/om_tab_ordid,
ls_ordid type /SAPAPO/OM_ORDERUID,

gt_outputs      TYPE /sapapo/om_io_pp_tab,                "#EC NEEDED
gt_ACTIVITIES      TYPE /SAPAPO/OM_TAB_ACT.


DATA gt_pegkey TYPE SORTED TABLE OF /SAPAPO/PEGKEY  WITH NON-UNIQUE KEY pegid.  "大表一次抓
DATA gs_pegkey TYPE /SAPAPO/PEGKEY.


DATA GT_MATKEY TYPE SORTED TABLE OF /SAPAPO/MATKEY  WITH NON-UNIQUE KEY MATID.
DATA GS_MATKEY TYPE /SAPAPO/MATKEY.

DATA GT_ACCKEY TYPE SORTED TABLE OF /SAPAPO/ACCKEY  WITH NON-UNIQUE KEY ACCID.
DATA GS_ACCKEY TYPE /SAPAPO/ACCKEY.

DATA gt_cawn TYPE SORTED TABLE OF CAWN  WITH NON-UNIQUE KEY ATINN ATZHL ADZHL.  "大表一次抓
DATA gs_cawn TYPE CAWN.

DATA gt_cawnt TYPE SORTED TABLE OF CAWNT  WITH NON-UNIQUE KEY ATINN ATZHL SPRAS.  "大表一次抓
DATA gs_cawnt TYPE CAWNT.




DATA  gt_periodext  TYPE /sapapo/seq_period_ext_tab    .    "#EC NEEDED
DATA  gs_line_plng  TYPE /sapapo/seq_line_str.



"1000工厂  : 051MbrXE7kYkoUx2z4bRMW
"1002工厂  : 051MiFlB7johvRhOsk83b0


"----------按工厂得到locid---------
SELECT SINGLE * FROM /SAPAPO/LOC WHERE LOCTYPE = '1001'  and   LOCNO = @WERKS INTO @DATA(gs_loc).

"--------得到LC中的全部订单--------
select * INTO TABLE GT_ORDKEY FROM /SAPAPO/ORDKEY WHERE ORDTYPE = '20' and OUTPUT_FIXED = '' and locid = gs_loc-locid .






LOOP AT GT_ORDKEY INTO DATA(GS_ORDKEY).

   append  gs_ordkey-ordid TO lt_ordid. "后面函数的参数


ENDLOOP.


"------------创建一个事件---------------
gs_gen_params-simversion = '000'.

  CALL FUNCTION '/SAPAPO/RRP_SIMSESSION_CREATE'
    EXPORTING
      iv_simid      = gv_simid
    IMPORTING
      ev_simsession = gv_simsession
    EXCEPTIONS
      error_message = 1.


  "-----------------取得班次------------------

  "gs_line_plng-PNAME = '1000_LINE_BS'.
  "gs_line_plng-RESID = '051MbrXE7kYlZhLoub4RjW'.    "这里资源名称在表中叫:1000_RES_BS

  gs_line_plng-PNAME = WERKS && '_LINE_BS'.


  DATA gv_res type char40.
  gv_res = WERKS && '_RES_BS'.
  SELECT SINGLE * FROM /SAPAPO/RES_HEAD WHERE name = @gv_res INTO @DATA(gs_res).
  gs_line_plng-RESID = gs_res-RESUID.


  gs_line_plng-TZONE = 'UTC+8'.


   CALL FUNCTION '/SAPAPO/SEQM_PERIODSEXT_GET'
       EXPORTING
            iv_simid       = gv_simid
            iv_simsession  = gv_simsession
            is_line        = gs_line_plng
            "iv_start_time     = '20220101010101'
            "iv_end_time       = '20221231235959'
            iv_start_time     =  GV_CONFIG_BEGIN
            iv_end_time       =  GV_CONFIG_end

       IMPORTING
            et_periodext   = gt_periodext
       EXCEPTIONS
            internal_error = 1
            no_shift_stamp = 2
            no_periods     = 3
            OTHERS         = 4.


MOVE-CORRESPONDING gt_periodext[] TO GT_SHIFT[].





"-------------------获取订单的工艺-------------------
CALL FUNCTION '/SAPAPO/OM_ACT_GET_BY_ORDER'
    EXPORTING
      is_gen_params     = gs_gen_params
      iv_simsession     = gv_simsession
      it_order          = lt_ordid
    "  iv_start_time     = '19970101010101'
    "  iv_end_time       = '20991231235959'
            iv_start_time     =  GV_CONFIG_BEGIN
            iv_end_time       =  GV_CONFIG_end


    IMPORTING
      et_cap_reqs       = gt_cap_reqs
    EXCEPTIONS
      lc_connect_failed = 1
      lc_com_error      = 2
      lc_appl_error     = 3
      OTHERS            = 4.







"-----------保留第一个工艺-------------------
DATA gs_act LIKE LINE OF GT_ACT.

LOOP AT gt_cap_reqs INTO  DATA(gs_cap_reqs).

  IF gs_cap_reqs-MODE_NO = 1.


    MOVE-CORRESPONDING gs_cap_reqs TO GS_ACT.

    APPEND GS_ACT TO GT_ACT.

  ENDIF.

ENDLOOP.




"--------------加工工艺时间--------------------

FIELD-SYMBOLS <gs_act> like gs_act .


LOOP AT gt_act  ASSIGNING <gs_act>.

  READ TABLE gt_ordkey WITH  KEY  ordid = <gs_act>-orderid  INTO gs_ordkey.

          IF sy-subrc = 0.

            <gs_act>-ordno =  gs_ordkey-ordno. "填充ordno

          ENDIF.

 "时间搓转为日期时间
      PERFORM timestamp_to_date using <gs_act>-STARTTI SY-ZONLO CHANGING <gs_act>-START_DATE <gs_act>-START_TIME.

ENDLOOP.





"---------------得到成品物料,再通过PEGID得到后续数据-------------

CALL FUNCTION '/SAPAPO/OM_ORDER_GET_DATA'
    EXPORTING
      is_gen_params     = gs_gen_params
      iv_simsession     = space
      it_order          = lt_ordid
    IMPORTING
      et_ext_outputs    = gt_outputs
  "    ET_ACTIVITIES     = gt_ACTIVITIES
    EXCEPTIONS
      lc_connect_failed = 1
      lc_com_error      = 2
      lc_appl_error     = 3
      OTHERS            = 4.









SELECT * INTO TABLE gt_pegkey FROM /SAPAPO/PEGKEY.
SELECT * INTO TABLE gt_MATKEY FROM /SAPAPO/MATKEY.
SELECT * INTO TABLE gt_ACCKEY FROM /SAPAPO/ACCKEY.
SELECT * INTO TABLE gt_CAWN FROM CAWN.
SELECT * INTO TABLE gt_CAWNT FROM CAWNT.



LOOP AT gt_act  ASSIGNING <gs_act>.


    "填充物料
   READ TABLE gt_outputs WITH  KEY  orderid = <gs_act>-orderid  INTO DATA(gs).

          IF sy-subrc = 0.

            <gs_act>-PEGID =  gs-PEGID. "填充ordno


            READ TABLE gt_pegkey WITH  KEY  pegid = <gs_act>-pegid  INTO DATA(tmp).

                IF sy-subrc = 0.

                     <gs_act>-matid = tmp-matid.
                     <gs_act>-accid = tmp-accid.

                      READ TABLE gt_matkey WITH  KEY  matid = <gs_act>-matid  INTO DATA(oth).

                      IF sy-subrc = 0.

                         <gs_act>-matnr = oth-matnr.

                       ENDIF.

                ENDIF.

          ENDIF.



      "填充销售订单
     READ TABLE gt_ACCKEY WITH  KEY  accid = <gs_act>-accid  INTO DATA(f4).

        IF sy-subrc = 0.
               <gs_act>-KDAUF = f4-sskey(10).
               <gs_act>-KDPOS = f4-sskey+10(6).

           ENDIF.



   "填充销售订单批次和VSN

  DATA:   lv_name      TYPE thead-tdname,
          lt_line      TYPE TABLE OF tline.


     CONCATENATE <gs_act>-KDAUF <gs_act>-KDPOS INTO lv_name.
      REFRESH lt_line.
      CALL FUNCTION 'READ_TEXT'
        EXPORTING
          id                      = '0001'
          language                = '1'
          name                    = lv_name
          object                  = 'VBBP'
        TABLES
          lines                   = lt_line
        EXCEPTIONS
          id                      = 1
          language                = 2
          name                    = 3
          not_found               = 4
          object                  = 5
          reference_check         = 6
          wrong_access_to_archive = 7
          OTHERS                  = 8.
      IF lt_line[] IS INITIAL.
        CALL FUNCTION 'READ_TEXT'
          EXPORTING
            id                      = '0001'
            language                = 'E'
            name                    = lv_name
            object                  = 'VBBP'
          TABLES
            lines                   = lt_line
          EXCEPTIONS
            id                      = 1
            language                = 2
            name                    = 3
            not_found               = 4
            object                  = 5
            reference_check         = 6
            wrong_access_to_archive = 7
            OTHERS                  = 8.
      ENDIF.


      READ TABLE lt_line ASSIGNING FIELD-SYMBOL(<ls_line>) INDEX 1.

      IF sy-subrc = 0.
        SPLIT <ls_line>-tdline AT '_' INTO TABLE DATA(lt_lines).
        READ TABLE lt_lines ASSIGNING FIELD-SYMBOL(<ls_lines>) INDEX 1.

        IF sy-subrc = 0.
          <gs_act>-VSN = <ls_lines>.
        ENDIF.

        READ TABLE lt_lines ASSIGNING <ls_lines> INDEX 4.
        IF sy-subrc = 0.
          <gs_act>-PC = <ls_lines>.
        ENDIF.
      ENDIF.


      "填充配置



"定义结构体
TYPES: BEGIN OF ty_sub,

         ATINN TYPE ATINN,
         ATNAM TYPE ATNAM,
         ATWRT TYPE ATWRT,
         ATWTB TYPE ATWTB,

       END OF ty_sub.

"定义
DATA gs_sub TYPE  ty_sub.


   DATA:

         lv_matnr   TYPE matnr,
         lv_char      TYPE char10,
         ls_data1     TYPE zspd0006_ord_alv,

         ls_data3     TYPE zspd0006_bom_alv,
         ls_values    TYPE ibco2_value_rec,
         lt_values    TYPE ibco2_value_tab.


      REFRESH: lt_values .

      CALL FUNCTION 'CUCB_GET_VALUES_FROM_INSTANCE'
        EXPORTING
          iv_instance                  = gs-cuobj
        IMPORTING
          et_values                    = lt_values
        EXCEPTIONS
          invalid_instance             = 1
          instance_is_a_classification = 2
          OTHERS                       = 3.

      IF sy-subrc = 0.

        LOOP AT lt_values INTO ls_values.  "下面200个配置,每个都要处理一次


          gs_sub-ATINN = ls_values-ATINN.  "1、 放特征编号  0000000811



          CALL FUNCTION 'MMRP_ATINN_2_ATNAM'
            EXPORTING
              iv_atinn                 = ls_values-ATINN
            IMPORTING
              ev_atnam                 = gs_sub-ATNAM    "2、放特征文本   ZMANRT
            EXCEPTIONS
              characteristic_not_found = 1
              OTHERS                   = 2.
          IF sy-subrc <> 0.
            CONTINUE.
          ENDIF.


          gs_sub-ATWRT = ls_values-ATWRT. " 3、放特征值   F517等等




          DATA:l_atzhl LIKE cawn-atzhl.

          CLEAR:l_atzhl.


          READ TABLE gt_cawn WITH  KEY  atinn = ls_values-ATINN atwrt = ls_values-ATWRT   INTO gs_cawn.

          IF sy-subrc = 0.
                l_atzhl = gs_cawn-atzhl.
           ENDIF.



*          SELECT SINGLE atzhl
*            INTO l_atzhl
*            FROM cawn
*           WHERE atinn = ls_values-ATINN
*             AND atwrt = ls_values-ATWRT .

          CLEAR:gs_sub-atwtb.


           READ TABLE gt_cawnt WITH  KEY  atinn = ls_values-ATINN atzhl = l_atzhl spras = sy-langu INTO gs_cawnt.

            IF sy-subrc = 0.
               gs_sub-ATWTB = gs_cawnt-ATWTB.
           ENDIF.

*          SELECT SINGLE ATWTB
*            INTO gs_sub-ATWTB
*            FROM cawnt
*           WHERE atinn = ls_values-ATINN
*             AND atzhl = l_atzhl
*             AND spras = sy-langu.




          SPLIT gs_sub-ATNAM AT '_' INTO lv_matnr lv_char.


            CASE lv_char.

                WHEN 'PM' OR 'BPACK'.
                  <gs_act>-zbpack     = gs_sub-atwrt.
                  <gs_act>-zbpack_txt = gs_sub-atwtb.

                WHEN 'PKG0' OR 'SPACK'.
                  CONCATENATE <gs_act>-zspack     gs_sub-atwrt INTO <gs_act>-zspack SEPARATED BY space.
                  CONCATENATE <gs_act>-zspack_txt gs_sub-atwtb INTO <gs_act>-zspack_txt SEPARATED BY space.

                WHEN 'PA00' OR 'INNER'.
                  <gs_act>-zint_trim      = gs_sub-atwrt.
                  <gs_act>-zint_trim_txt  = gs_sub-atwtb.

                WHEN 'CC00' OR 'EXTOR'.
                  <gs_act>-zext_color     = gs_sub-atwrt.
                  <gs_act>-zext_color_txt = gs_sub-atwtb.

            ENDCASE.


          IF gs_sub-ATNAM = 'ZWERKS'.

            <gs_act>-PLANT = ls_values-ATWRT.
          ENDIF.




        ENDLOOP.



*          CLEAR:ls_data2-atbez.
*
*          SELECT SINGLE atbez
*            INTO CORRESPONDING FIELDS OF ls_data2
*            FROM cabnt
*           WHERE atinn = ls_values-atinn
*             AND spras = sy-langu.
*
*          DATA:l_atzhl LIKE cawn-atzhl.
*          CLEAR:l_atzhl.
*
*          SELECT SINGLE atzhl
*            INTO l_atzhl
*            FROM cawn
*           WHERE atinn = ls_values-atinn
*             AND atwrt = ls_values-atwrt.
*
*          CLEAR:ls_data2-atwtb.
*
*          SELECT SINGLE atwtb
*            INTO CORRESPONDING FIELDS OF ls_data2
*            FROM cawnt
*           WHERE atinn = ls_values-atinn
*             AND atzhl = l_atzhl
*             AND spras = sy-langu.
*
*          ls_data2-atwrt = ls_values-atwrt.



*         Provide characters to order data
*          SPLIT ls_data2-atnam AT '_' INTO lv_matnr lv_char.


*
*            CASE lv_char.
*
*              WHEN 'PM' OR 'BPACK'.
*                <gs_act>-zbpack     = ls_data2-atwrt.
*                <gs_act>-zbpack_txt = ls_data2-atwtb.
*
*              WHEN 'PKG0' OR 'SPACK'.
*                CONCATENATE <gs_act>-zspack ls_data2-atwrt INTO <gs_act>-zspack SEPARATED BY space.
*                CONCATENATE <gs_act>-zspack_txt ls_data2-atwtb INTO <gs_act>-zspack_txt SEPARATED BY space.
*
*              WHEN 'PA00' OR 'INNER'.
*                <gs_act>-zint_trim      = ls_data2-atwrt.
*                <gs_act>-zint_trim_txt  = ls_data2-atwtb.
*
*              WHEN 'CC00' OR 'EXTOR'.
*                <gs_act>-zext_color     = ls_data2-atwrt.
*                <gs_act>-zext_color_txt = ls_data2-atwtb.
*            ENDCASE.







      endif.












ENDLOOP.




















*
*
*
*
*TYPES:
*  BEGIN OF ty_pegkey,
*    pegid       TYPE /sapapo/pegid,
*    locid       TYPE /sapapo/locid,
*    locno       TYPE /sapapo/locno,
*    matid       TYPE /sapapo/matid,
*    matnr       TYPE /sapapo/matnr,
*    meins       TYPE /sapapo/meins,
*    sskey       TYPE /sapapo/acckey-sskey,
*    planner_pps TYPE /sapapo/matloc-planner_pps,
*  END OF ty_pegkey.
*
*
* DATA:
*    lt_pegid TYPE TABLE OF /sapapo/pegid,
*    gt_pegkey        TYPE HASHED TABLE OF ty_pegkey
*                        WITH UNIQUE KEY pegid.
*
*
*  LOOP AT gt_outputs INTO DATA(ls).
*    APPEND ls-PEGID  TO lt_pegid.
*  ENDLOOP.
*
*
*
*
*
*  IF lt_pegid IS NOT INITIAL.
*    SELECT a~pegid
*           a~locid
*           c~locno
*           a~matid
*           b~matnr
*           b~meins
*           d~sskey
*           e~planner_pps
*      FROM /sapapo/pegkey      AS a
*      JOIN /sapapo/matkey      AS b
*        ON a~matid = b~matid
*      JOIN /sapapo/loc         AS c
*        ON a~locid = c~locid
* LEFT JOIN /sapapo/acckey      AS d
*        ON a~accid = d~accid
*      JOIN /sapapo/matloc      AS e
*        ON a~matid = e~matid
*       AND a~locid = e~locid
*      INTO TABLE gt_pegkey
*       FOR ALL ENTRIES IN lt_pegid
*     WHERE a~pegid = lt_pegid-table_line.
*
*
*  endif.











ENDFUNCTION.









*        &---------------------------------------------------------------------*
*        &      Form  date_to_timestamp
*        &---------------------------------------------------------------------*
*               日期+时间+时区  转变为 时间戳
*        ----------------------------------------------------------------------*
        FORM date_to_timestamp USING i_date LIKE sy-datum
                                     i_time LIKE sy-uzeit
                                     i_tzone LIKE  tzonref-tzone
                                CHANGING o_tstamp LIKE tzonref-tstamps  .
          CONVERT DATE i_date TIME i_time INTO TIME STAMP o_tstamp TIME ZONE i_tzone.
          CASE sy-subrc.
            WHEN 8.
              MESSAGE e000(oo) WITH '时区错'.
            WHEN 12.
              MESSAGE e000(oo) WITH '时间戳错误'.
            WHEN OTHERS.
          ENDCASE.
        ENDFORM.                    "date_to_timestamp


*        &---------------------------------------------------------------------*
*        &      Form  TIMESTAMP_TO_DATE
*        &---------------------------------------------------------------------*
*               时间戳+时区 转变为 日期和时间
*        ----------------------------------------------------------------------*
        FORM timestamp_to_date USING   i_tstamp LIKE tzonref-tstamps
                                       i_tzone LIKE  tzonref-tzone
                               CHANGING o_date LIKE  sy-datum
                                        o_time LIKE  sy-uzeit.
          DATA: w_tzone LIKE tzonref-tzone.
          w_tzone = i_tzone.
          CONVERT TIME STAMP i_tstamp TIME ZONE w_tzone INTO DATE o_date TIME o_time.
          CASE sy-subrc.
            WHEN 8.
              MESSAGE e000(oo) WITH '时区错'.
            WHEN 12.
              MESSAGE e000(oo) WITH '时间戳错误'.
            WHEN OTHERS.
          ENDCASE.
        ENDFORM.                    "TIMESTAMP_TO_DATE

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刘欣的博客

你将成为第一个打赏博主的人!

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

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

打赏作者

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

抵扣说明:

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

余额充值