Modified ReportFor ZRSD0089

    技术2022-05-11  77

      *&---------------------------------------------------------------------* *& Report ZRSD0089                                                    * *& REJECT SCRAP REPORT *& CREATED BY KENN TANG                                                * *&         ON 2006.05.30                                               * *======================================================================= * Last Modified By:    Wei_Zhu * Last Modified Date: 2007-02-01 * Modifed Description: 1)"CB_NOZERO" CheckBox Choice, *                        The records in stock quantity will be *                        suppressed . *                       2)batches in XREJ storage location *                         not shown in the report *                       3)the bill VW indicator will be marked ‘X’ if *                         any batch of an assembly lot is marked for *                         bill VW reject. *                        Task#1038   request#DEVK921904 *                                           #DEVK921908 *                                           #DEVK921916 *                                           #DEVK921934 *&------------------------------------------------------------ report zrsd0089     no standard page heading                      message-id 00                      line-size 132.                            .   *====================================================================== type-pools: slis.                                       " FOR ALV USAGE *======================================================================   *tables *----------------------------------------------------------------------- tables: vbap, mcha, mchb, kna1, ausp, cabn.   *data *-----------------------------------------------------------------------     data: begin of gt_tab occurs 0,       kunnr     like kna1-kunnr, "CUST CODE       werks     like mcha-werks, "PLANT       charg     like mcha-charg, "BATCH       ersda     like mcha-ersda, "BATCH CRT.DATE       matnr     like mcha-matnr, "DEVICE       kdmat(30) type c,"          LIKE VBAP-KDMAT, "LOT NO       qty       like mchb-clabs, "QTY       scrap(1) type c,           "SCRAP INDICATOR       bill_vw(1) type c,         "BILL VW INDICATOR       cuobj_bm like mcha-cuobj_bm, "OBJECT       end of gt_tab.   *====================================================================== * FOR ALV USAGE - START *====================================================================== data: gt_fieldcat    type slis_t_fieldcat_alv, "ALV Field Catalog       ls_fieldcat type slis_fieldcat_alv,       g_layout      type slis_layout_alv,       g_title      type lvc_title,       g_repid      like sy-repid, *      VARIANT    LIKE DISVARIANT,          "Layout Variant       sort       type slis_t_sortinfo_alv, "for subtotal       sort_str   type slis_sortinfo_alv,       gt_events type slis_t_event,       gt_top_of_page type slis_t_listheader. "ALV Top-of-page *====================================================================== * FOR ALV USAGE - END *======================================================================     *SELECTION-SCREEN ****************************************************** select-options:         s_cust for kna1-kunnr no-extension,       s_lotnum for vbap-kdmat no-extension,       s_ersda for mcha-ersda no-extension,"NO INTERVALS,       s_werks for mcha-werks no-extension. parameters: cb_zero as checkbox       default 'X'.   *&---------------------------------------------------------------------* *&   Event initialization *&---------------------------------------------------------------------* initialization.    g_repid = sy-repid.     ************************************************************************ * Check screen input ************************************************************************ *AT SELECTION-SCREEN.     *START-OF-SELECTION. start-of-selection.    perform get_data.    perform fill_data.    perform filter_data.   end-of-selection.   *====================================================================== * FOR ALV USAGE - START *======================================================================   * Set top-of-page content  perform set_top_of_page.   * Display report  perform build_fieldcat.    perform comment_build using    ''                          changing gt_top_of_page.    perform eventtab_build changing gt_events[].     *====================================================================== * FOR ALV USAGE - END *======================================================================   *====================================================================== * FOR ALV USAGE - START *====================================================================== * DISPLAY TO ALV    g_repid = sy-repid.    call function 'REUSE_ALV_GRID_DISPLAY'     exporting       i_grid_title           = g_title       it_fieldcat            = gt_fieldcat *     IT_SORT                = GT_SORT       i_callback_program     = g_repid       is_layout              = g_layout       i_save                 = 'A'       i_callback_top_of_page = 'TOP_OF_PAGE' "Top-of-page display     tables       t_outtab               = gt_tab. *====================================================================== * FOR ALV USAGE - END *====================================================================== *--------------------------------------------------* form get_data .    clear gt_tab.    select mcha~matnr mcha~werks          mcha~charg mcha~ersda          mcha~cuobj_bm   into corresponding fields of table gt_tab * BEGIN DEVK921934  from mcha inner join mchb  on   mcha~charg = mchb~charg * END DEVK921934  where mcha~ersda in s_ersda * BEGIN DEVK921934  and   mchb~lgort <> 'XREJ'  and   mchb~ersda in s_ersda  and   mcha~werks = mchb~werks  and   mcha~matnr = mchb~matnr * BEGIN DEVK921934  and   mcha~werks in s_werks.   endform.                    " get_data   *&---------------------------------------------------------------------* *&      Form COMMENT_BUILD *&---------------------------------------------------------------------* * FOR ALV USAGE *----------------------------------------------------------------------* *&---------------------------------------------------------------------* form comment_build using    p_title                    changing lt_top_of_page type slis_t_listheader.  data: ls_line type slis_listheader.  data: ls_rm61r type rm61r,         ls_tmp1(15) type c, ls_tmp2(15) type c. * * Initialisieren  clear lt_top_of_page[].   * Zeitstempel ermitteln * PERFORM get_timestamp CHANGING ls_rm61r-memda *                                 ls_rm61r-memtm.   * Listenüberschrift: Typ H  clear ls_line.  ls_line-typ = 'H'. * LS_LINE-KEY: not used for this type  if p_title is initial.    ls_line-info = sy-title.  else.     ls_line-info = p_title.  endif.  append ls_line to lt_top_of_page.   * Kopfinfo: Typ S  clear ls_line.  ls_line-typ = 'S'.  ls_line-key = text-h01.  ls_line-info = sy-repid.  append ls_line to lt_top_of_page.    clear ls_line.  ls_line-typ = 'S'.  ls_line-key = text-h02.  ls_line-info = sy-uname.  append ls_line to lt_top_of_page.    clear ls_line.  write sy-datum to ls_tmp1.  write sy-uzeit to ls_tmp2.  ls_line-typ       = 'S'.  ls_line-key       = text-h03. * ls_line-info      = sy-datum. * ls_line-info+10   = sy-uzeit.  concatenate ls_tmp1 ls_tmp2 into ls_line-info separated by space.    append ls_line to lt_top_of_page.     * Aktionsinfo: Typ A  clear ls_line.  ls_line-typ = 'A'. * LS_LINE-KEY: not used for this type  ls_line-info = text-h04.  write ls_rm61r-memda to ls_line-info+20(10).  ls_line-info+32(3) = text-h05.  ls_line-info+35(5) = ls_rm61r-memtm.  ls_line-info+41(4) = text-h06. * APPEND ls_line TO lt_top_of_page.   endform.                    "COMMENT_BUILD *&---------------------------------------------------------------------* *&      Form EVENTTAB_BUILD *&---------------------------------------------------------------------* * FOR ALV USAGE *----------------------------------------------------------------------* *      <--P_GT_EVENTS[] text *----------------------------------------------------------------------* form eventtab_build changing p_st_events type slis_t_event. *  call function 'REUSE_ALV_EVENTS_GET'     exporting       i_list_type = 0     importing       et_events   = p_st_events.     endform.                    " EVENTTAB_BUILD   *&--------------------------------------------------------------------* *&      Form top_of_page-alv *&--------------------------------------------------------------------* * FOR ALV USAGE *---------------------------------------------------------------------* form top_of_page. *  call function 'REUSE_ALV_COMMENTARY_WRITE'        exporting             it_list_commentary = gt_top_of_page             i_logo             = 'ASAT_LOGO' *            I_END_OF_LIST_GRID =             .   endform.                    "TOP_OF_PAGE-ALV *&---------------------------------------------------------------------* *&      Form BUILD_FIELDCAT *&---------------------------------------------------------------------* * FOR ALV USAGE *----------------------------------------------------------------------* * --> p1        text * <-- p2        text *----------------------------------------------------------------------* form build_fieldcat .  g_layout-colwidth_optimize = 'X'.    clear ls_fieldcat.  ls_fieldcat-tabname = 'GT_TAB'.  ls_fieldcat-fieldname = 'KUNNR'.  ls_fieldcat-seltext_l = 'Customer Code'.  ls_fieldcat-no_zero = 'X'.  append ls_fieldcat to gt_fieldcat.    clear ls_fieldcat.  ls_fieldcat-tabname = 'GT_TAB'.  ls_fieldcat-fieldname = 'WERKS'.  ls_fieldcat-seltext_l = 'Plant'.  ls_fieldcat-no_zero = 'X'.  append ls_fieldcat to gt_fieldcat.    clear ls_fieldcat.  ls_fieldcat-tabname = 'GT_TAB'.  ls_fieldcat-fieldname = 'CHARG'.  ls_fieldcat-seltext_l = 'Batch'.  ls_fieldcat-no_zero = 'X'.  append ls_fieldcat to gt_fieldcat.    clear ls_fieldcat.  ls_fieldcat-tabname = 'GT_TAB'.  ls_fieldcat-fieldname = 'ERSDA'.  ls_fieldcat-seltext_l = 'Batch Creation Date'.  ls_fieldcat-no_zero = 'X'.  append ls_fieldcat to gt_fieldcat.    clear ls_fieldcat.  ls_fieldcat-tabname = 'GT_TAB'.  ls_fieldcat-fieldname = 'MATNR'.  ls_fieldcat-seltext_l = 'Device'.  ls_fieldcat-no_zero = 'X'.  append ls_fieldcat to gt_fieldcat.    clear ls_fieldcat.  ls_fieldcat-tabname = 'GT_TAB'.  ls_fieldcat-fieldname = 'KDMAT'.  ls_fieldcat-seltext_l = 'Lot Number'. * LS_FIELDCAT-NO_ZERO = 'X'.  append ls_fieldcat to gt_fieldcat.    clear ls_fieldcat.  ls_fieldcat-tabname = 'GT_TAB'.  ls_fieldcat-fieldname = 'QTY'.  ls_fieldcat-seltext_l = 'Stock Quality'. * LS_FIELDCAT-NO_ZERO = 'X'.  append ls_fieldcat to gt_fieldcat.    clear ls_fieldcat.  ls_fieldcat-tabname = 'GT_TAB'.  ls_fieldcat-fieldname = 'SCRAP'.  ls_fieldcat-seltext_l = 'Scrap Indicator'.  ls_fieldcat-no_zero = 'X'.  append ls_fieldcat to gt_fieldcat.    clear ls_fieldcat.  ls_fieldcat-tabname = 'GT_TAB'.  ls_fieldcat-fieldname = 'BILL_VW'.  ls_fieldcat-seltext_l = 'Bill VW Indicator'.  ls_fieldcat-no_zero = 'X'.  append ls_fieldcat to gt_fieldcat.       endform.                    " BUILD_FIELDCAT *&---------------------------------------------------------------------* *&      Form GT_TOP_OF_PAGE *&---------------------------------------------------------------------* * FOR ALV USAGE *----------------------------------------------------------------------* * --> p1        text * <-- p2        text *----------------------------------------------------------------------* form set_top_of_page .  data: l_line type slis_listheader,           l_lines     type i,           l_text1(36) type c,           l_text2(30) type c,           dat(10) type c,           tim(8) type c.  l_text1 = 'ASAT PO STATUS WITH SO STATUS REPORT'.  refresh gt_top_of_page.  dat = sy-datum.  tim = sy-uzeit. * CONCATENATE S_DATE+6(2) '/' S_DATE+4(2) '/' S_DATE+0(4) INTO DAT. * CONCATENATE SY-UZEIT+0(2) ':' SY-UZEIT+2(2) ':' SY-UZEIT+4(2) INTO TIM  .    data : mnames like t247 occurs 0 with header line.  data : name(20) type c.  call function 'MONTH_NAMES_GET'    exporting      language                    = sy-langu * IMPORTING *   RETURN_CODE                 =     tables       month_names                 = mnames * EXCEPTIONS *   MONTH_NAMES_NOT_FOUND       = 1 *   OTHERS                      = 2             .  if sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.  endif.   * READ TABLE MNAMES WITH KEY MNR = ZPERIODM+4(2). * * IF SY-SUBRC = 0. * *    CONCATENATE MNAMES-LTX ',' ZPERIODM+0(4) INTO NAME. * * ENDIF.     *Header **Program Name  clear l_line.  l_line-typ    = 'S'.  l_line-key    = 'REPORT DATE :'.  l_line-info   = dat.  append l_line to gt_top_of_page. **REPORT TIME  clear l_line.  l_line-typ     = 'S'.  l_line-key     = 'REPORT TIME : '.  l_line-info    = tim.  append l_line to gt_top_of_page.   *REPORT MONTH  clear l_line.  l_line-typ     = 'S'.  l_line-key     = 'MONTH        : '.  l_line-info    = name.  append l_line to gt_top_of_page.   *REPORT TILE  clear l_line.  l_line-typ    = 'S'.  l_line-key    = 'REPORT TITLE :'.  l_line-info   = l_text1.  append l_line to gt_top_of_page.       endform.                    " GT_TOP_OF_PAGE *&---------------------------------------------------------------------* *&      Form FILL_DATA *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* * --> p1        text * <-- p2        text *----------------------------------------------------------------------* form fill_data .    loop at gt_tab.       perform get_cust_name.    endloop.   endform.                    " FILL_DATA *&---------------------------------------------------------------------* *&      Form GET_CUST_NAME *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* * --> p1        text * <-- p2        text *----------------------------------------------------------------------* form get_cust_name . * GET CUSTOMER NAME    select single ausp~atwrt  into gt_tab-kunnr  from ausp  inner join cabn  on   ausp~atinn = cabn~atinn  where ausp~objek = gt_tab-matnr  and   cabn~atnam = 'CUSTOMER'  and   ausp~atwrt in s_cust.    if sy-subrc = 0.     modify gt_tab..  endif.   endform.                    " GET_CUST_NAME   *&---------------------------------------------------------------------* *&      Form GET_RJ_QTY *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* * --> p1        text * <-- p2        text *----------------------------------------------------------------------* form get_rj_qty .    data: l_fgqty like mchb-clabs.    loop at gt_tab.       clear: mchb, l_fgqty.     select *     from mchb     where matnr = gt_tab-matnr     and   werks = gt_tab-werks     and   charg = gt_tab-charg * DEVK921916 BEGIN     and   lgort <> 'XREJ'. * DEVK921916 BEGIN       add: mchb-clabs to l_fgqty,            mchb-cinsm to l_fgqty,            mchb-cspem to l_fgqty.     endselect.       gt_tab-qty = gt_tab-qty + l_fgqty.       modify gt_tab. **    DEVK921904 begin *    If CB_ZERO = 'X'. *      DELETE GT_TAB WHERE QTY = 0. *    EndIF. **   DEVK921904  end    endloop. * DEVK921908 begin  if cb_zero = 'X'.     delete gt_tab where qty = 0.  endif. * DEVK921908 end   endform.                    " GET_RJ_QTY *&---------------------------------------------------------------------* *&      Form FILTER_DATA *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* * --> p1        text * <-- p2        text *----------------------------------------------------------------------* form filter_data .    delete gt_tab where kunnr eq space.    perform get_batch_class.    perform get_rj_qty.   endform.                    " FILTER_DATA *&---------------------------------------------------------------------* *&      Form GET_BATCH_CLASS *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* * --> p1        text *  <-- p2        text *----------------------------------------------------------------------* form get_batch_class .    data: l_atwrt type atwrt.   * DEVK921916 BEGIN * DATA GT_TAB_NEW LIKE STANDARD TABLE OF GT_TAB WITH HEADER LINE. * DEVK921916 END * DEVK921934 BEGIN  data: begin of objek_tab occurs 0,           objek_new like ausp-objek,           kdmat_new like vbap-kdmat,         end of objek_tab.    data: begin of s_lotnum_1 occurs 0, *          KDMAT LIKE VBAP-KDMAT,            kdmat like ausp-atwrt,         end of s_lotnum_1. * DEVK921934 END    loop at gt_tab.     clear: mcha, ausp, cabn, l_atwrt.   * get reject batch only       select single ausp~atwrt     into (l_atwrt)     from ausp     inner join cabn     on ausp~atinn = cabn~atinn     where ausp~objek = gt_tab-cuobj_bm     and   cabn~atnam = 'BIN'.       check l_atwrt = 'R'.   * filter assembly lot number       select single ausp~atwrt     into (gt_tab-kdmat)     from ausp     inner join cabn     on ausp~atinn = cabn~atinn     where ausp~objek = gt_tab-cuobj_bm     and   ausp~atwrt in s_lotnum     and   cabn~atnam = 'ASMLOT'.   * DEVK921934 BEGIN     read table s_lotnum_1 with key kdmat = gt_tab-kdmat.     if sy-subrc <> 0.       s_lotnum_1 = gt_tab-kdmat.       append s_lotnum_1.     endif. * DEVK921934 END   * SCRAP INDICATOR       select single ausp~atwrt     into (gt_tab-scrap)     from ausp     inner join cabn     on ausp~atinn = cabn~atinn     where ausp~objek = gt_tab-cuobj_bm     and   cabn~atnam = 'SCRAP_REJ'.   * BILL VW INDICATOR       select single ausp~atwrt     into (gt_tab-bill_vw)     from ausp     inner join cabn     on ausp~atinn = cabn~atinn     where ausp~objek = gt_tab-cuobj_bm     and   cabn~atnam = 'BILL_VW_REJ'.       modify gt_tab.   * DEVK921934 BEGIN   * DEVK921916 BEGIN * IF GT_TAB-BILL_VW = 'X'. *    APPEND GT_TAB TO GT_TAB_NEW. * ENDIF.   * DEVK921916 END       clear gt_tab.    endloop.   * DEVK921916 BEGIN * LOOP AT GT_TAB_NEW. *    LOOP AT GT_TAB WHERE KDMAT = GT_TAB_NEW-KDMAT. *      GT_TAB-SCRAP = 'X'. *      GT_TAB-BILL_VW = 'X'. *      MODIFY GT_TAB. *      CLEAR GT_TAB. *    ENDLOOP. * ENDLOOP. * DEVK921916 END    delete gt_tab where kdmat = space.   * DEVK921934 BEGIN  delete s_lotnum_1 where kdmat = space.    select ausp~objek ausp~atwrt     into table objek_tab *    INTO CORRESPONDING FIELDS OF TABLE OBJEK_TAB     from ausp     inner join cabn     on ausp~atinn = cabn~atinn     for all entries in s_lotnum_1     where ausp~atwrt = s_lotnum_1-kdmat     and   cabn~atnam = 'ASMLOT'.      loop at objek_tab.     select single ausp~atwrt      into (gt_tab-bill_vw)      from ausp      inner join cabn      on ausp~atinn = cabn~atinn      where ausp~objek = objek_tab-objek_new      and   cabn~atnam = 'BILL_VW_REJ'      and   ausp~atwrt = 'X'.       if sy-subrc = 0. *      GT_TAB-SCRAP = 'X'.       gt_tab-bill_vw = 'X'.       modify gt_tab transporting bill_vw              where kdmat = objek_tab-kdmat_new.       clear gt_tab.       delete objek_tab where kdmat_new = objek_tab-kdmat_new.     endif.  endloop. * DEVK921934 END   endform.                    " GET_BATCH_CLASS     -----------------------------------1----------------------------------- * LOOP AT GT_TAB_NEW. *    LOOP AT GT_TAB WHERE KDMAT = GT_TAB_NEW-KDMAT. *      GT_TAB-SCRAP = 'X'. *      GT_TAB-BILL_VW = 'X'. *      MODIFY GT_TAB. *      CLEAR GT_TAB. *    ENDLOOP. * ENDLOOP.   ------> 通常loop 嵌套loop  来对两个internal table 间的数据进行处理 -----------------------------------2----------------------------------- 将modify 放入一个loop 中也可以实现上面的那些功能,如     if sy-subrc = 0. *      GT_TAB-SCRAP = 'X'.       gt_tab-bill_vw = 'X'.       modify gt_tab transporting bill_vw              where kdmat = objek_tab-kdmat_new.       clear gt_tab.       delete objek_tab where kdmat_new = objek_tab-kdmat_new.     endif. -----------------------------------3-----------------------------------  For all entries in  itab   的使用,如:  select ausp~objek ausp~atwrt     into table objek_tab *    INTO CORRESPONDING FIELDS OF TABLE OBJEK_TAB     from ausp     inner join cabn     on ausp~atinn = cabn~atinn     for all entries in s_lotnum_1                         “这一句 1     where ausp~atwrt = s_lotnum_1-kdmat     ”和这一句2 是单值匹配,加上 1句就可以查列表list 了     and   cabn~atnam = 'ASMLOT'. -----------------------------------3----------------------------------- Read Table I_tab whit key  xx = o_tab-xx    如:     read table s_lotnum_1 with key kdmat = gt_tab-kdmat.     if sy-subrc <> 0.       s_lotnum_1 = gt_tab-kdmat.       append s_lotnum_1.     endif. -------------------------------4------------------------------------ sy-subrc   一个系统函数 sy-subrc = 0     “ 代表成功 sy-subrc = 4     " 代表失败  

    最新回复(0)