记录一下QM检验批接口,回头补细节

  method ZQM_II_SI_SPCD_REC~SI_SPCD_PROCSS.
*** **** INSERT IMPLEMENTATION HERE **** ***

*->数据定义部分
  TYPES:BEGIN OF ty_qamv,
       prueflos TYPE qamv-prueflos,
       vorglfnr TYPE qamv-vorglfnr,
       aufpl    TYPE qals-aufpl,
       vornr    TYPE afvc-vornr,
       plnkn    TYPE afvc-plnkn,
       plnnr    TYPE afvc-plnnr,
  END OF ty_qamv.

  DATA:lt_qamv TYPE TABLE OF ty_qamv,
         ls_qamv TYPE ty_qamv.

  DATA:ls_req TYPE zqm_dt_spcd_req,
       ls_res TYPE zqm_dt_spcd_res,
       lt_data TYPE TABLE OF ZQM_DT_SPCD_REQ_DATA,
       ls_data TYPE ZQM_DT_SPCD_REQ_DATA.

  DATA:lv_insplot TYPE bapi2045l2-insplot,
       lv_inspoper TYPE bapi2045l2-inspoper.
  DATA:ls_inspoint TYPE bapi2045l4,
       lt_inspoint TYPE TABLE OF bapi2045l4.
  DATA:ls_char_results TYPE  bapi2045d2,
       lt_char_results TYPE TABLE OF bapi2045d2.
  DATA:ls_sample_results TYPE bapi2045d3,
       lt_sample_results TYPE TABLE OF bapi2045d3.
  DATA:ls_single_results TYPE bapi2045d4,
       lt_single_results TYPE STANDARD TABLE OF bapi2045d4.

  DATA:ls_return TYPE bapiret2,
       lt_return TYPE TABLE OF bapiret2.


  DATA ud_data         TYPE bapi2045ud.
  DATA:ud_return_data  TYPE  bapi2045ud_return,
       stock_data      TYPE  bapi2045d_il2,
       ls_return1      TYPE  bapireturn1.

  DATA:re_subrc type sy-subrc,
       lv_str   type string,
       lv_msg  type string.

  DATA it_return type table of bapiret2 .

       lt_data = input-mt_spcd_req-data[].

*->检查数据
     LOOP AT lt_data INTO ls_data.


*->检查数据

       "先找到能用的工序
    SELECT v~prueflos
             v~vorglfnr
             s~aufpl
             a~vornr
             a~plnkn
             a~plnnr
             INTO TABLE lt_qamv
             FROM qamv AS v
             INNER JOIN qals AS s
             ON s~prueflos = v~prueflos
             INNER JOIN afvc AS a
             ON a~aufpl = s~aufpl
             AND a~aplzl = v~vorglfnr
             AND a~plnty = 'N'
             WHERE v~prueflos EQ ls_data-prueflos.

        SORT lt_qamv BY prueflos vorglfnr.
        DELETE ADJACENT DUPLICATES FROM lt_qamv COMPARING ALL FIELDS.


       LOOP AT  lt_qamv INTO ls_qamv.

          lv_insplot  = ls_qamv-prueflos.
          lv_inspoper = ls_qamv-vornr.

        "取源检验批的检验结果
          CALL FUNCTION 'BAPI_INSPOPER_GETDETAIL'
            EXPORTING
              insplot              = lv_insplot
              inspoper             = lv_inspoper
              read_insppoints      = 'X'
              read_char_results    = 'X'
              read_sample_results  = 'X'
              read_single_results  = 'X'
              char_filter_no       = '1'
              max_insppoints       = 100
              insppoint_from       = 0
              handheld_application = ' '
            IMPORTING
              return               = ls_return
            TABLES
              insppoints           = lt_inspoint
              char_results         = lt_char_results
              sample_results       = lt_sample_results
              single_results       = lt_single_results.


*      get upper limit or below limit from PLMK table
      ls_inspoint-insplot     = ls_qamv-prueflos. "检验批
      ls_inspoint-inspoper    = ls_qamv-vornr.    "工序
      ls_inspoint-psel_set    = ls_data-werks.    "工厂
      ls_inspoint-material    = ls_data-matnr.    "物料编号


      READ TABLE lt_char_results ASSIGNING FIELD-SYMBOL(<fs_results>)
                        WITH KEY remark = ls_data-prtext.
      IF sy-subrc EQ 0.
          ls_char_results-start_date  = ls_data-prdat.    "测试日期
          ls_char_results-remark      = ls_data-prtext.   "测试项目
          ls_char_results-mean_value  = ls_data-prsvalue. "天平均值
          ls_char_results-vals_above  = ls_data-gctmax.   "公差上限
          ls_char_results-vals_below  = ls_data-gclow.    "公差下限
          ls_char_results-mean_value  = ls_data-cvalue.   "中心值
          ls_char_results-evaluation  = ls_data-pdjl.    "判定结论
          ls_char_results-inspector   = ls_data-pernr.    "检验员


      select single
            merknr into ls_single_results-inspchar
            from plmk
              where kurztext = ls_data-prtext
               and  plnkn = ls_qamv-plnkn
               and  plnnr = ls_qamv-plnnr
               and  plnty = 'N'.

          ls_single_results-insplot   = ls_qamv-prueflos.
          ls_single_results-inspoper  = ls_qamv-vornr.
          ls_single_results-inspchar  = <fs_results>-inspchar.
          ls_single_results-res_value = ls_data-prsvalue.
          ls_single_results-res_no    = ls_single_results-inspchar / 10.
          APPEND ls_single_results TO lt_single_results.
      ENDIF.


      CALL FUNCTION 'BAPI_INSPOPER_RECORDRESULTS'
        EXPORTING
          insplot        = lv_insplot
          inspoper       = lv_inspoper
          insppointdata  = ls_inspoint
        IMPORTING
          return         = ls_return
        TABLES
          char_results   = lt_char_results
          sample_results = lt_sample_results
          single_results = lt_single_results
          returntable    = lt_return.

" attetion:->这个BAPI执行成功后没有返回TYPES S ,只能反向推测,没有'E'则表示成功,但是存在没有'E'也没有成功的情况

       READ TABLE lt_return with key type = 'E'
             TRANSPORTING NO FIELDS.
          IF sy-subrc EQ 0.

            "出错的话后面的都不执行,原则上每次只传入一个检验批,设置成TABLE是为了后续改进做准备

             LOOP AT lt_return INTO ls_return WHERE type CA 'AEX'.


               CALL FUNCTION 'MESSAGE_TEXT_BUILD'
                     EXPORTING
                      MSGID                 = ls_return-id
                      MSGNR                 = ls_return-number
                      MSGV1                 = ls_return-message_v1
                      MSGV2                 = ls_return-message_v2
                      MSGV3                 = ls_return-message_v3
                      MSGV4                 = ls_return-message_v4
                    IMPORTING
                       MESSAGE_TEXT_OUTPUT   = lv_str.

                lv_msg = COND #( WHEN lv_msg  IS INITIAL THEN lv_str else  lv_msg && lv_str ).

              endloop.

             output-mt_spcd_res-o_msgty = 'E'.
             output-mt_spcd_res-o_messg =  '检验批结果录入错误,报错消息为:' && lv_msg.
             RETURN.
          ENDIF.
      ENDLOOP.

      ud_data-insplot =  ls_data-prueflos.
      ud_data-ud_code = '2'.
      ud_data-ud_plant = ls_data-werks.
      ud_data-ud_code_group = 'ZCTGIPQC'.
      ud_data-ud_selected_set = 'I01'.


*        ud_data-ud_stock_posting = 'X'.  "是否进行过帐

        CALL FUNCTION 'BAPI_INSPLOT_SETUSAGEDECISION'
          EXPORTING
            number         = ls_data-prueflos
            ud_data        = ud_data
*     LANGUAGE       =
          IMPORTING
            ud_return_data = ud_return_data
            stock_data     = stock_data
            return         = ls_return1.


       clear LV_STR.

        CALL FUNCTION 'MESSAGE_TEXT_BUILD'
               EXPORTING
                MSGID                 = ls_return1-id
                MSGNR                 = ls_return1-number
                MSGV1                 = ls_return1-message_v1
                MSGV2                 = ls_return1-message_v2
                MSGV3                 = ls_return1-message_v3
                MSGV4                 = ls_return1-message_v4
              IMPORTING
                 MESSAGE_TEXT_OUTPUT   = lv_str.

         output-mt_spcd_res-o_msgty = ls_return1-type.
         output-mt_spcd_res-o_messg = lv_str.

  ENDLOOP.



endmethod.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值