SAP中获取成品物料的全部配置(SAP配置BOM攻略四)

news2024/12/23 13:29:33

        基于系统内的全配置BOM设定,全部的子配置是由四大配置产生(即车身颜色、内饰颜色、车型、选装)。如果按某一车型,要带出该车的全部BOM子物料,首先需要具备通过四大配置,得到全部子配置的能力,然后才能把200个配置去得到相应的物料。

CU50中的四大配置:

 四大配置确定后出现的200项子配置清单:

 

测试环境用程序来实现:

*&---------------------------------------------------------------------*
*& Report ZTEST_CFG
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_CFG.


INCLUDE LCEI0FTY.


TYPES: BEGIN OF TY_ALV,
         MNAME TYPE RCTMS-MNAME,
         ATBEZ TYPE ATBEZ,
         MWERT TYPE RCTMS-MWERT,
         ATWTB TYPE ATWTB,
       END OF TY_ALV.
DATA:GT_ALV   TYPE  STANDARD TABLE OF TY_ALV.

TYPES TY_PKG0 TYPE RANGE OF CAWN-ATWRT.
DATA PT_PKG0 TYPE TY_PKG0.

DATA:
  LV_TXT          TYPE ATNAM,
  LV_ATNAM_COLOR  TYPE ATNAM,
  LV_ATNAM_INTERI TYPE ATNAM,
  LV_ATNAM_MODEL  TYPE ATNAM,
  LV_ATNAM_OPTPAC TYPE ATNAM,
  GT_BOM          TYPE /SAPAPO/RTOUI_COMPONENT_T,
  GO_APP_LOG      TYPE REF TO ZCL_CA_APP_LOG.

CONSTANTS:GV_KEY_COLOR  TYPE ZZ_CONFIG_KEY VALUE 'ZDP_0001_COLOR',
          GV_KEY_INTERI TYPE ZZ_CONFIG_KEY VALUE 'ZDP_0001_INTERI',
          GV_KEY_MODEL  TYPE ZZ_CONFIG_KEY VALUE 'ZDP_0001_MODEL',
          GV_KEY_OPTPAC TYPE ZZ_CONFIG_KEY VALUE 'ZDP_0001_OPTPAC'.


DATA P_MATNR TYPE MARA-MATNR  VALUE  'F2'.



PERFORM FRM_CONFIG_GET TABLES PT_PKG0
                          USING  'CC01'
                                 'PA01'
                                 'B27FRF8JA4L01'
                                 ''.


FORM FRM_CONFIG_GET  TABLES IT_PKG0 TYPE TY_PKG0
                     USING PI_CC00
                           PI_PA00
                           PI_PM
                           PI_PKG0.

  DATA: LT_INPUT  TYPE   TABLE OF    CLTABLE,
        LT_OUTPUT TYPE   TABLE OF    CLTABLE,
        LV_REF    TYPE   INOB-CUOBJ,
        LV_OBJ    TYPE   INOB-ROBJEK,
        LT_CONFIG TYPE   TABLE OF  CONF_OUT.

  FIELD-SYMBOLS: <FT_MI>      TYPE TT_MI,
                 <FT_WI>      TYPE  TT_WI,
                 <FT_GI>      TYPE TT_INST,
                 <FS_GI>      TYPE LINE OF TT_INST,
                 <FS_RCTMS>   TYPE RCTMS,
                 <FV_CHANGED> TYPE C.

  ASSIGN ('(SAPLCEI0)MI[]') TO <FT_MI>.

  ASSIGN ('(SAPLCEI0)WI[]') TO <FT_WI>.

  ASSIGN ('(SAPLCEI0)G_I[]') TO <FT_GI>.

  ASSIGN ('(SAPLCEI0)RCTMS') TO <FS_RCTMS>.

  ASSIGN ('(SAPLCEI0)GV_CHANGE') TO <FV_CHANGED>.
  IF <FT_MI> IS ASSIGNED.
    CLEAR:<FT_MI>[].
  ENDIF.
  IF <FT_WI> IS  ASSIGNED.
    CLEAR <FT_WI>[].
  ENDIF.
  IF <FT_GI> IS ASSIGNED.
    CLEAR <FT_GI>[].
  ENDIF.
  IF <FS_RCTMS> IS ASSIGNED.
    CLEAR <FS_RCTMS>.
  ENDIF.
  IF <FV_CHANGED> IS ASSIGNED.
    CLEAR <FV_CHANGED>.
  ENDIF..

  LV_OBJ = P_MATNR = 'F2'.

  CALL FUNCTION 'CE_C_PROCESSING'
    EXPORTING
      INSTANCE                       = '000000000000000000'
*     REFERENCE_INSTANCE             =
      DATE                           = SY-DATUM
*     DISPLAY                        = ' '
      OBJECT_ID                      = 'MARA'
      OBJECT                         = LV_OBJ
      "OWNER_ID                             = 'VBPS'
*     HEADER_SCREEN                  =
      PLANT                          = '1000'
      NO_DIALOG                      = 'X'
*     MATERIAL_VARIANT               =
      NO_F8                          = 'X'
      NO_F11                         = 'X'
*     SUB_TYPE                       = ' '
    " SIMULATION                     = 'X'
      TYPE                           = 'S'
*     EFFECTIVITY                    =
*     INITIALIZATION                 = ' '
*     CALLED_FROM_SALES              = ' '
*     BOM_APPLICATION                =
*     IS_BUSINESS_OBJECT             =
*     IV_PROFILE_COUNTER             =
    IMPORTING
*     RETURN_WITH_FUNCTIONKEY        =
      NEW_INSTANCE                   = LV_REF
    TABLES
      APPLICATION_INPUT              = LT_INPUT
      APPLICATION_OUTPUT             = LT_OUTPUT
    EXCEPTIONS
      INTERNAL_ERROR                 = 1
      INSTANCE_NOT_FOUND             = 2
      REFERENCE_INSTANCE_NOT_FOUND   = 3
      INSTANCE_IS_A_CLASSIFICATION   = 4
      NO_PLANT                       = 5
      NO_QUANTITY                    = 6
      NO_CONNECTION_TO_CONFIGURATION = 7
      MATERIAL_VARIANT_NOT_ALLOWED   = 8
      INTERNAL_ERROR_ECM             = 9
      EOASL_NOT_ALLOWED              = 10
      MAXASL_NOT_ALLOWED             = 11
      XC_UNPROCESSED_DATA            = 12
      XC_FAILURE_PROCESSING_DATA     = 13
      NO_BOM                         = 14
      NO_KNOWLEDGE_BASE_FOUND        = 15
      ORDER_BOM_ERROR                = 16
      OTHERS                         = 17.
  IF SY-SUBRC <> 0.
*     Implement suitable error handling here
  ENDIF.


*                  <ft_gt_bild> like bild,
*                  <ft_bild> like bild.

  ASSIGN ('(SAPLCEI0)MI[]') TO <FT_MI>.

  ASSIGN ('(SAPLCEI0)WI[]') TO <FT_WI>.

  ASSIGN ('(SAPLCEI0)G_I[]') TO <FT_GI>.

  ASSIGN ('(SAPLCEI0)RCTMS') TO <FS_RCTMS>.

  ASSIGN ('(SAPLCEI0)GV_CHANGE') TO <FV_CHANGED>.

*    ASSIGN ('(SAPLCEI0)BILD[]') to <ft_bild>.
*
*    ASSIGN ('(SAPLCEI0)GT_BILD[]') to <ft_gt_bild>.


*    ---------------------------------------------------
  DATA: LT_API_VAL_SUCCESS TYPE TT_API_VAL_C,
        LS_MI              TYPE TS_MI,
        LS_WI              TYPE TS_WI,
        LS_ICV             TYPE TS_VALUE,
        LS_ICV_INDEX       TYPE SY-TABIX,
        LV_ATWRT_TO_CHECK  TYPE ATWRT.

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

  IF PI_CC00 IS NOT INITIAL.

    <FV_CHANGED> = 'X'.
    CLEAR LV_ATNAM_COLOR.

    PERFORM FRM_GET_HC USING P_MATNR  GV_KEY_COLOR
                      CHANGING LV_ATNAM_COLOR.

    CLEAR:LS_MI.
    READ TABLE <FT_MI> INTO LS_MI WITH KEY ATNAM = LV_ATNAM_COLOR.
    IF SY-SUBRC = 0.
      <FS_RCTMS>-MNAME = LV_ATNAM_COLOR.
      <FS_RCTMS>-MWERT = PI_CC00.

      LV_ATWRT_TO_CHECK = PI_CC00.

      PERFORM  CHECK_INPUT IN PROGRAM SAPLCEI0
              USING
                LV_ATWRT_TO_CHECK
                'X'
                '1'
                SPACE
                SPACE
                0
                SPACE
              CHANGING
                LT_API_VAL_SUCCESS
                LS_MI
                LS_ICV
                LS_ICV_INDEX
                IF FOUND .


      ASSIGN ('(SAPLCEI0)G_I') TO <FS_GI>.

      MODIFY <FT_GI> FROM <FS_GI> INDEX 1.

    ENDIF.
  ENDIF.

  IF PI_PA00 IS NOT INITIAL.
    <FV_CHANGED> = 'X'.

    PERFORM FRM_GET_HC USING P_MATNR  GV_KEY_INTERI
                       CHANGING LV_ATNAM_INTERI.

    CLEAR:LS_MI.
    READ TABLE <FT_MI> INTO LS_MI WITH KEY ATNAM = LV_ATNAM_INTERI.
    IF SY-SUBRC = 0.
      <FS_RCTMS>-MNAME = LV_ATNAM_INTERI.
      <FS_RCTMS>-MWERT = PI_PA00.

      LV_ATWRT_TO_CHECK = PI_PA00.

      PERFORM  CHECK_INPUT IN PROGRAM SAPLCEI0
              USING
                LV_ATWRT_TO_CHECK
                'X'
                '1'
                SPACE
                SPACE
                0
                SPACE
              CHANGING
                LT_API_VAL_SUCCESS
                LS_MI
                LS_ICV
                LS_ICV_INDEX
                IF FOUND .


      ASSIGN ('(SAPLCEI0)G_I') TO <FS_GI>.

      MODIFY <FT_GI> FROM <FS_GI> INDEX 1.

    ENDIF.
  ENDIF.

  IF PI_PM IS NOT INITIAL.
    <FV_CHANGED> = 'X'.

    PERFORM FRM_GET_HC USING P_MATNR GV_KEY_MODEL CHANGING LV_ATNAM_MODEL.

    CLEAR:LS_MI.
    READ TABLE <FT_MI> INTO LS_MI WITH KEY ATNAM = LV_ATNAM_MODEL.
    IF SY-SUBRC = 0.
      <FS_RCTMS>-MNAME = LV_ATNAM_MODEL.
      <FS_RCTMS>-MWERT = PI_PM.

      LV_ATWRT_TO_CHECK = PI_PM.

      PERFORM  CHECK_INPUT IN PROGRAM SAPLCEI0
              USING
                LV_ATWRT_TO_CHECK
                'X'
                '1'
                SPACE
                SPACE
                0
                SPACE
              CHANGING
                LT_API_VAL_SUCCESS
                LS_MI
                LS_ICV
                LS_ICV_INDEX
                IF FOUND .


      ASSIGN ('(SAPLCEI0)G_I') TO <FS_GI>.

      MODIFY <FT_GI> FROM <FS_GI> INDEX 1.

    ENDIF.
  ENDIF.

  PERFORM FRM_GET_HC USING P_MATNR GV_KEY_OPTPAC CHANGING LV_ATNAM_OPTPAC.
  IF IT_PKG0[] IS NOT INITIAL .
    LOOP AT IT_PKG0.
      <FV_CHANGED> = 'X'.
      CLEAR:LS_MI.
      READ TABLE <FT_MI> INTO LS_MI WITH KEY ATNAM = LV_ATNAM_OPTPAC.
      IF SY-SUBRC = 0.
        <FS_RCTMS>-MNAME = LV_ATNAM_OPTPAC.
        <FS_RCTMS>-MWERT = IT_PKG0-LOW.

        LV_ATWRT_TO_CHECK = IT_PKG0-LOW.

        PERFORM  CHECK_INPUT IN PROGRAM SAPLCEI0
                USING
                  LV_ATWRT_TO_CHECK
                  'X'
                  '1'
                  SPACE
                  SPACE
                  0
                  SPACE
                CHANGING
                  LT_API_VAL_SUCCESS
                  LS_MI
                  LS_ICV
                  LS_ICV_INDEX
                  IF FOUND .


        ASSIGN ('(SAPLCEI0)G_I') TO <FS_GI>.

        MODIFY <FT_GI> FROM <FS_GI> INDEX 1.

      ENDIF.
    ENDLOOP.
  ELSEIF PI_PKG0 IS NOT INITIAL.
    <FV_CHANGED> = 'X'.
    CLEAR:LS_MI.
    READ TABLE <FT_MI> INTO LS_MI WITH KEY ATNAM = LV_ATNAM_OPTPAC.
    IF SY-SUBRC = 0.
      <FS_RCTMS>-MNAME = LV_ATNAM_OPTPAC.
      <FS_RCTMS>-MWERT = PI_PKG0.
      LV_ATWRT_TO_CHECK = PI_PKG0.

      PERFORM  CHECK_INPUT IN PROGRAM SAPLCEI0
              USING
                LV_ATWRT_TO_CHECK
                'X'
                '1'
                SPACE
                SPACE
                0
                SPACE
              CHANGING
                LT_API_VAL_SUCCESS
                LS_MI
                LS_ICV
                LS_ICV_INDEX
                IF FOUND .


      ASSIGN ('(SAPLCEI0)G_I') TO <FS_GI>.

      MODIFY <FT_GI> FROM <FS_GI> INDEX 1.
    ENDIF.
  ENDIF.

  PERFORM F0100_CONFIGURE IN PROGRAM SAPLCEI0.


  DATA:LS_G_IC  TYPE  TS_CHAR,
       LS_CL    TYPE  TS_CHAR_DESCRIPTION,
       LS_VALUE TYPE  TS_VALUE,
       LS_VL    TYPE  TS_VALUE_DESCRIPTION,
       LS_ALV   TYPE  TY_ALV.


  CHECK    <FT_GI> IS ASSIGNED.

  READ TABLE <FT_GI> ASSIGNING <FS_GI> INDEX 1.
  REFRESH GT_ALV.
  CHECK <FS_GI>  IS ASSIGNED.
  LOOP AT <FS_GI>-G_IC INTO LS_G_IC.

    CLEAR:LS_ALV.

    READ TABLE <FT_MI> INTO LS_MI WITH KEY MINDX = LS_G_IC-MINDX.
    IF SY-SUBRC = 0.
      LS_ALV-MNAME = LS_MI-ATNAM.
    ENDIF.

    READ TABLE LS_MI-CL INTO LS_CL WITH KEY LANGU = SY-LANGU.
    IF SY-SUBRC = 0.
      LS_ALV-ATBEZ = LS_CL-ATBEZ.
    ENDIF.


    LOOP AT LS_G_IC-V INTO LS_VALUE.

      READ TABLE <FT_WI> INTO LS_WI WITH KEY MINDX = LS_G_IC-MINDX WINDX = LS_VALUE-WINDX.
      IF SY-SUBRC = 0.
        IF LS_WI-WOHNE <> 'X'.
          LS_ALV-MWERT = LS_WI-NATWRT.
        ELSE.
          LS_ALV-MWERT = LS_VALUE-ATWRT.
        ENDIF.
      ENDIF.

      READ TABLE LS_WI-VL INTO LS_VL WITH KEY LANGU = SY-LANGU.
      IF SY-SUBRC = 0.
        CONCATENATE LS_ALV-ATWTB LS_VL-ATWTB INTO LS_ALV-ATWTB SEPARATED BY SPACE.
      ENDIF.

      APPEND LS_ALV TO GT_ALV.

    ENDLOOP.

*      APPEND ls_alv TO gt_alv.

  ENDLOOP.

  LOOP AT GT_ALV ASSIGNING FIELD-SYMBOL(<LS_ALV>).
    CONDENSE <LS_ALV>-ATWTB.
    IF <LS_ALV>-MWERT = <LS_ALV>-ATWTB.
      PERFORM FRM_READ_TEXT IN PROGRAM ZPDU0011 USING '1' <LS_ALV>-MWERT <LS_ALV>-MNAME
                    CHANGING <LS_ALV>-ATWTB <LS_ALV>-ATWTB IF FOUND.
    ENDIF.
  ENDLOOP.

BREAK-POINT.

ENDFORM.





*&---------------------------------------------------------------------*
*& Form FRM_GET_HC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_
*&---------------------------------------------------------------------*
FORM FRM_GET_HC  USING PI_MATNR TYPE MATNR  PI_KEY TYPE ZZ_CONFIG_KEY
                 CHANGING PO_ATNAM TYPE ATNAM.
  CLEAR PO_ATNAM.
  CALL METHOD ZCL_CA_TOOLS=>GET_HC_SINGLE
    EXPORTING
      IV_CONFIG_KEY = PI_KEY
    IMPORTING
      EV_SINGLE     = PO_ATNAM
    EXCEPTIONS
      DYNAMIC_ERROR = 1
      OTHERS        = 2.
  CONCATENATE PI_MATNR '_' PO_ATNAM INTO PO_ATNAM.
ENDFORM.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/792602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【iVX】在百花齐放的低代码平台中独领风骚

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…

IntelliJ IDEA 2023.2 新版本,拥抱 AI

IntelliJ IDEA 近期连续发布多个EAP版本&#xff0c;官方在对用户体验不断优化的同时&#xff0c;也新增了一些不错的功能&#xff0c;尤其是人工智能助手补充&#xff0c;AI Assistant&#xff0c;相信在后续IDEA使用中&#xff0c;会对开发者工作效率带来不错的提升。 以下是…

mybatisPlus入门篇

文章目录 初窥门径1.1 初识MybatisPlus1.2 MybatisPlus的特性1.3 MybatisPlus的架构模型 入门案例2.1 准备相关开发环境2.2 搭建springboot工程2.3 创建数据库2.4 引入相关依赖2.5 创建实体类2.6 集成MybatisPlus2.7 单元测试2.8 springboot日志优化 初窥门径 1.1 初识Mybatis…

Rust之包、单元包及模块

包&#xff1a;一个用于构建、测试并分享单元包的Cargo功能&#xff1b;单元包&#xff1a;一个用于生成库或可执行文件的树形模块结构&#xff1b;模块及use关键字&#xff1a;被用于控制文件结构、作用域及路径的私有性&#xff1b;路径&#xff1a;一种用于命名条目的方法&a…

Windows之XSshell7运行程序找不到mfc140u.dll解决方案

Xshell7依赖C库如下&#xff0c;下载如下2个x86&#xff08;32位&#xff09;运行库安装即可使用。 官网地址&#xff1a;《C运行库》

城市之星中山TOP3

城市之星中山TOP3 不断努力&#xff0c;突破自己。

《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(5)-Fiddler监控面板详解

1.简介 按照从上往下&#xff0c;从左往右的计划&#xff0c;今天就轮到介绍和分享Fiddler的监控面板了。监控面板主要是一些辅助标签工具栏。有了这些就会让你的会话请求和响应时刻处监控中毫无隐私可言。监控面板是fiddler最核心的功能之一。记录了来自于服务器端&#xff0…

机器学习深度学习——softmax回归从零开始实现

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——向量求导问题 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你们有所帮助 …

39. Linux系统下在Qt5.9.9中搭建Android开发环境

1. 说明 QT版本:5.9.9 电脑系统:Linux JDK版本:openjdk-8-jdk SDK版本:r24.4.1 NDK版本:android-ndk-r14b 效果展示: 2. 具体步骤 大致安装的步骤如下:①安装Qt5.9.9,②安装jdk,③安装ndk,④安装sdk,⑤在qt中配置前面安装的环境路径 2.1 安装Qt5.9.9 首先下载…

国产化的接口测试、接口自动化测试工具Apipost的介绍及使用

Apipost介绍&#xff1a; Apipost是 API 文档、API 调试、API Mock、API 自动化测试一体化的研发协作赋能平台&#xff0c;它的定位 Postman Swagger Mock JMeter。 Apipost 是接口管理、开发、测试全流程集成工具&#xff0c;能支撑整个研发技术团队同平台工作&#xff0…

win10日程怎么同步到安卓手机?电脑日程同步到手机方法

在如今快节奏的生活中&#xff0c;高效地管理时间变得至关重要。而对于那些经常在电脑上安排日程的人来说&#xff0c;将这些重要的事务同步到手机上成为了一个迫切的需求。因为目前国内使用win10系统电脑、安卓手机的用户较多&#xff0c;所以越来越多的职场人士想要知道&…

手机怎么把word转换成pdf?这几种方法超简单

手机怎么把word转换成pdf&#xff1f;现在很多人在手机上处理文档&#xff0c;但是可能会遇到将Word文档转换为PDF的需求&#xff0c;以便更好地分享和传输文件。在下面这篇文章中&#xff0c;就给大家介绍几种将Word文档转换为PDF的方法。 方法一&#xff1a;使用迅捷PDF转换器…

spring复习:(55)注解配置的情况下@ComponentScan指定的包中的组件是怎么被注册到容器的?

配置类&#xff1a; 主类&#xff1a; 结论&#xff1a;是在context.refresh()处完成扫描和注册的。 fresh()的代码片段如下&#xff1a; 其中调用的invokeBeanFactoryPostProcessor代码如下&#xff1a; 其中调用的静态方法invokeBeanFactoryPostProcessors代码如下&#…

一些联动树形数据组装

export const pieselectdata [{entrustOrganization: 智慧法院电子诉讼平台,entrustOrganizationId: 161,productNames: [{batchCodes: [],productName: CL测试调解产品,},{batchCodes: [2022927_001,2022927_003,2022927_004,2022927_005,2022927_006,2022927_008,2022927_00…

文本预处理——文本数据增强

目录 文本数据增强回译数据增强法 文本数据增强 回译数据增强法

windows 系统安装sonarqube

SonarQube是一种自动代码审查工具&#xff0c;用于检测代码中的错误&#xff0c;漏洞和代码异味。它可以与您现有的工作流程集成&#xff0c;以便在项目分支和拉取请求之间进行连续的代码检查。 官方网站&#xff1a; https://www.sonarqube.org/ 1. 使用前提条件 运行SonarQ…

Excel双向柱状图的绘制

Excel双向柱状图在绘制增减比较的时候经常用到&#xff0c;叫法繁多&#xff0c;双向柱状图、上下柱状图、增减柱状图都有。 这里主要介绍一下Excel的基础绘制方法和复杂一点的双向柱状图的绘制 基础双向柱状图的绘制 首先升降的数据如下&#xff1a; 月份上升下降20220359-…

【二叉树】刷题(以递归写法为主)

226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数 110.平衡二叉树 102. 二叉树的所有路径 226.翻转二叉树 class Solution:def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:if not root:return…

13、PHP面向对象2(方法的访问控制、子类继承、常量)

1、类中的方法可以被定义为公有&#xff0c;私有或受保护。如果没有设置这些关键字&#xff0c;则该方法默认为公有。 public定义的方法&#xff0c;可以在类外使用。 protected定义的方法&#xff0c;只能在本类或子类的定义内使用。 private定义的方法&#xff0c;只能在本…

第八章 非编码RNA简介

第八章 非编码RNA简介 第一节 引言 第二节 长链非编码RNA简介 第三节 环形RNA简介 第四节 小RNA简介 4.1 miRNA 4.2 piRNA 4.3 小RNA数据分析