EWM读取凭证信息

  DATA: lo_dlv_db_read_prd TYPE REF TO /scwm/cl_dlv_db_read_prd,
        lt_docid           TYPE /scwm/dlv_docid_item_tab,
        ls_docid           TYPE LINE OF /scwm/dlv_docid_item_tab,
        ls_read_options    TYPE /scwm/dlv_query_contr_str,
        ls_include_data    TYPE /scwm/dlv_query_incl_str,
        lt_items           TYPE /scwm/dlv_item_out_prd_tab,
        ls_item            TYPE LINE OF /scwm/dlv_item_out_prd_tab,
        ls_docflow         TYPE LINE OF /scwm/dl_docflow_tab,
        l_tabix            TYPE sy-tabix.

 CREATE OBJECT lo_dlv_db_read_prd.
  ls_read_options-docflow_succ_1level_only = 'X'.
*  LS_READ_OPTIONS-PARALLEL_PROCESSING = 'X'.
  ls_include_data-item_docflow = 'X'.
  ls_docid-docid  = i_docid.
  ls_docid-doccat = 'PDI'.
  APPEND ls_docid TO lt_docid.
  TRY.
      CALL METHOD lo_dlv_db_read_prd->query(
        EXPORTING
          it_docid        = lt_docid
          is_read_options = ls_read_options
          is_include_data = ls_include_data
        IMPORTING
          et_items        = lt_items ).
    CATCH /scdl/cx_delivery.
      CLEAR lt_items.
  ENDTRY.
  
  
  
  ***更全面的:
    DATA:
    lw_head         TYPE zews2065h,
    lw_item         TYPE zews2065i,
    gv_timezone     TYPE tznzone,
    lo_delivery     TYPE REF TO /scwm/cl_dlv_management_prd,
    lo_message      TYPE REF TO /scwm/cl_dm_message_no,
    lx_delivery     TYPE REF TO /scdl/cx_delivery,
    lt_selection    TYPE TABLE OF /scwm/dlv_selection_str,
    ls_selection    TYPE /scwm/dlv_selection_str,
    ls_read_options TYPE /scwm/dlv_query_contr_str,
    ls_include      TYPE /scwm/dlv_query_incl_str_prd,
    lt_headers      TYPE /scwm/dlv_header_out_prd_tab,
    lt_items        TYPE /scwm/dlv_item_out_prd_tab,
    lt_items_tmp    TYPE /scwm/dlv_item_out_prd_tab,
    ls_header       TYPE /scwm/dlv_header_out_prd_str,
    ls_item         TYPE /scwm/dlv_item_out_prd_str,
    ls_addmeas      TYPE /scdl/dl_addmeas_str,
    ls_partyloc     TYPE /scdl/dl_partyloc_str,
    ls_refdoc       TYPE /scdl/dl_refdoc_str,
    lr_cretst       TYPE /scwm/tt_timestamp_r,
    ls_cretst       TYPE /scwm/s_timestamp_r,
    lt_doctype      TYPE TABLE OF zewt3036_10,
    ls_doctype      TYPE zewt3036_10,
    lv_index        TYPE i.
* get timezone of warehouse
  CALL FUNCTION '/SCWM/LGNUM_TZONE_READ'
    EXPORTING
      iv_lgnum        = iv_lgnum
    IMPORTING
      ev_tzone        = gv_timezone
    EXCEPTIONS
      interface_error = 1
      data_not_found  = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  REFRESH: et_head,et_item.
* get instance
  lo_delivery = /scwm/cl_dlv_management_prd=>get_instance( ).
* build up range of select options
* 仓库号
  ls_selection-fieldname = /scwm/if_dl_logfname_c=>sc_whno_pdo_i.
  ls_selection-sign      = 'I'.
  ls_selection-option    = 'EQ'.
  ls_selection-low       = iv_lgnum.
  APPEND ls_selection TO lt_selection.
  CLEAR ls_selection.

* ERP凭证
  LOOP AT ir_docno INTO DATA(iw_docno).
    ls_selection-fieldname = /scdl/if_dl_logfname_c=>sc_refdocno_erp_h.
    ls_selection-sign   = iw_docno-sign.
    ls_selection-option = iw_docno-option.
    ls_selection-low    = iw_docno-low.
    ls_selection-high   = iw_docno-high.
    APPEND ls_selection TO lt_selection.
    CLEAR: ls_selection,iw_docno.
  ENDLOOP.

* 凭证类型
  SELECT * FROM zewt3036_10 INTO TABLE lt_doctype
    WHERE lgnum = iv_lgnum.
  LOOP AT lt_doctype INTO ls_doctype.
    ls_selection-fieldname = /scdl/if_dl_logfname_c=>sc_doctype_h.
    ls_selection-sign      = 'I'.
    ls_selection-option    = 'EQ'.
    ls_selection-low       = ls_doctype-doctype.
    APPEND ls_selection TO lt_selection.
    CLEAR ls_selection.
  ENDLOOP.
* 抬头拣配状态
  ls_selection-fieldname = /scdl/if_dl_logfname_c=>sc_status_value_dgi_i.
  ls_selection-sign      = 'I'.
  ls_selection-option    = 'EQ'.
  ls_selection-low       = /scdl/if_dl_status_c=>sc_v_mfg_complete.
  APPEND ls_selection TO lt_selection.
  CLEAR ls_selection.

* set read options
  ls_read_options-data_retrival_only = abap_true.
  ls_read_options-mix_in_object_instances = /scwm/if_dl_c=>sc_mix_in_load_instance.
  ls_read_options-parallel_processing = abap_true.

*  ls_include-head_status = abap_true.
*  ls_include-head_partyloc = abap_true.
*  ls_include-item_addmeas = abap_true.
  ls_include-item_refdoc = abap_true.

* call Outbound DLV query
  TRY.
      CALL METHOD lo_delivery->query
        EXPORTING
          iv_whno         = iv_lgnum    "并行取数据时用来读并行相关配置信息,不用来过滤交货单
          iv_doccat       = /scdl/if_dl_c=>sc_doccat_out_prd
          it_selection    = lt_selection
          is_read_options = ls_read_options
          is_include_data = ls_include
        IMPORTING
          et_headers      = lt_headers
          et_items        = lt_items
          eo_message      = lo_message.

* 取出的交货单数据要把已在任务池中的数据排除掉
      IF lt_items[] IS NOT INITIAL.
        SORT lt_headers BY docid.
        SORT lt_items BY docid.
* 整理交货单数据
        CLEAR:lv_index.
        LOOP AT lt_headers INTO ls_header.
          " 交货单创建日期
          CONVERT TIME STAMP ls_header-admin-cretst
            TIME ZONE gv_timezone
            INTO DATE lw_head-erdat.

          LOOP AT lt_items INTO ls_item FROM lv_index. "从上次读取的位置的查找数据
            IF ls_item-docid NE ls_header-docid.
              lv_index = sy-tabix.
              EXIT.
            ENDIF.
            IF ls_item-product-batchno IS INITIAL.
              CONTINUE.
            ENDIF.
            "ERP交货单号
            READ TABLE ls_item-refdoc INTO ls_refdoc WITH KEY refdoccat = 'ERP'.
            IF sy-subrc = 0.
              lw_head-vbeln   = ls_refdoc-refdocno.
              lw_item-vbeln   = ls_refdoc-refdocno.
              lw_item-posnr   = ls_item-itemno+4(6)."ls_refdoc-refitemno.
              lw_item-matnr   = ls_item-product-productno+22(18).
              lw_item-batchno = ls_item-product-batchno.
              lw_item-qty     = ls_item-qty-qty.
              lw_item-uom     = ls_item-qty-uom.
            ENDIF.
            APPEND lw_item TO et_item.
            CLEAR:lw_item,ls_refdoc.
          ENDLOOP.
          IF sy-subrc = 0.
            APPEND lw_head TO et_head.
          ENDIF.
          CLEAR :lw_head,ls_header.
        ENDLOOP.
      ENDIF.

    CATCH /scdl/cx_delivery INTO lx_delivery.
      IF lx_delivery->mo_message IS BOUND.
        lo_message->add( lx_delivery->mo_message ).
      ENDIF.
  ENDTRY.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值