YHLMR009 交货单查询

***********************************************************************
* Title           : YHLMR009                                          *
* Application     : LM                                               *
* Subject         : 交货清单查询                                      *
* Requested by    : Yang_Teng Fei (YH_LM)                             *
* Execution       : Online when required                              *
* Ref no:         : ERPS0115                                          *
* Author          : AD_CAIXIANG                                       *
* Req Date        : 20120722                                          *
***********************************************************************
*              交货清单查询程序                                   *
***********************************************************************
*              设计主要逻辑与原理说明                             *
***********************************************************************
*1.取数:根据用户的输入单据编号、交货单类型、计划发货日期、实际发货日期*
* 配入机构、商品编码等输入条件单一或者组合进行交货订单的查询。        *
* 涉及到的表  LIKP T001W KNA1 LIPS MARA MAKT MBEW MEAN LIPSD ZMADQ    *
*2.输出: 进行alv输出交货清单信息                                      *
***********************************************************************
* MODIFICATIONS (latest entry at the top)                             *
* ------------------------------------------------------------------- *
* REL  DATE    NAME (COMPANY)   DESCRIPTION               TASK-NO     *
* ---  ----    ---- ---------     -----------             -------     *
* 01 20121206   LM  交货清单查询修改  by  AD_CAIXIANG      ECDK906448 *
* 02 20121210   LM  交货清单查询修改  by  AD_CAIXIANG      ECDK906618 *
* 03 20121210   LN  程序规范化        by  AD_CAIXIANG      ECDK906622 *
* 04 20130111   LM  加直接显示明细按钮 BY AD_CAIXIANG      ECDK907564 *
* 05 20130126   LM  交货单类型增添    BY AD_CAIXIANG       ECDK907564 *
* 06 20130222   LM  价格取数修改    移动类型671,673       ECDK908753.*
*                                  价格取数改为 EKPO-KZWI1/EKPO-MENGE *
* 07 20130402   LM  程序优化          BY AD_CAIXIANG       ECDK910228 *
* 08 20130516   LM  移出库位作为查询条件出现问题的修改                *
*                                     BY AD_CAIXIANG       ECDK911439 *
* 09 20130603   LM  价格取数问题调整  BY AD_CAIXIANG       ECDK912048 *
* 10 20130703   LM  取税率优化        BY AD_CAIXIANG       ECDK912680 *
* 11 20130726   LM  取数部分优化,                                    *
*                   当S_WBSTK 为空的时候,把VBUK的取数单独出来,      *
*                   对于EKPO和EKBE进行分批取数             ECDK913630 *
***********************************************************************
REPORT  YHLMR009 NO STANDARD PAGE HEADING
                      LINE-SIZE 132
                      LINE-COUNT 65(1)
                      MESSAGE-ID YH_LM1.

*----------------------------------------------------------------------
*                          PUB-INCLDUE
*----------------------------------------------------------------------
INCLUDE  <ICON>.
*INCLUDE YHLM009_TOP.

*----------------------------------------------------------------------
*                          TYPE-POOLS
*----------------------------------------------------------------------
TYPE-POOLS: SLIS.

*--------------------------------------------------------------------*
*  宏的调用方式:
*--------------------------------------------------------------------*

*----------------------------------------------------------------------
*                          TABLES/Structure
*----------------------------------------------------------------------
TABLES: LIKP, "SD凭证:交货抬头数据
        LIPS, "SD凭证 :交货:项目数据
        KNA1, "客户主文件的一般数据
        MBEW, "商品评估
        MEAN, "商品的条码
        LIPSD,"交货项目的动态部分
        VBUK, "销售凭证:抬头状态和管理数据
        VBFA, "销售凭证流
        ADRP, "个人(办公地址管理)
        EKPO. "采购凭证项目
TABLES: MARA, MARC, MAKT, T001W.

*----------------------------------------------------------------------
*                          Internal table
*----------------------------------------------------------------------
DATA: BEGIN OF GT_ITAB OCCURS 0,
       VBELN LIKE LIKP-VBELN,
       POSNR LIKE LIPS-POSNR,
       LFART LIKE LIKP-LFART,
       WERKS LIKE LIPS-WERKS,
       NAME1 LIKE T001W-NAME1,"配出机构名称
       KUNNR LIKE LIKP-KUNNR,
       NAME2 LIKE KNA1-NAME1,
     YYCARNO LIKE LIKP-YYCARNO,
       TDDAT LIKE LIKP-TDDAT,
       BLDAT LIKE LIKP-BLDAT,
       ANZPK LIKE LIKP-ANZPK,
       RESLO LIKE EKPO-RESLO,
      LGOBE1 LIKE T001L-LGOBE,"移出
       LGORT LIKE LIPS-LGORT,
      LGOBE2 LIKE T001L-LGOBE,"移入
       MENGE TYPE EKPO-MENGE, "订货数量
       LFIMG TYPE LIPS-LFIMG, "实发数量
        SHFA TYPE  P DECIMALS 1, "实发件数
       VGBEL LIKE LIPS-VGBEL,
       VGPOS LIKE LIPS-VGPOS,
       VGTYP LIKE LIPS-VGTYP,
       MATNR LIKE LIPS-MATNR,
       EAN11 LIKE MEAN-EAN11,
   WADAT_IST LIKE LIKP-WADAT_IST,
       MAKTX LIKE MAKT-MAKTX,
       MEINS LIKE LIPS-MEINS,
       VRKME LIKE LIPS-VRKME,
       GROES LIKE MARA-GROES,
     YUMREZ1 LIKE YTMADQ-YUMREZ1,
       BRGEW TYPE LIPS-BRGEW,  "毛重
       NTGEW TYPE LIPS-NTGEW,  "净重
       JINZH TYPE LIPS-NTGEW,  "皮重
       KOSTK TYPE VBUK-KOSTK,  "交货状态
       ERNAM LIKE LIKP-ERNAM,
       VTEXT TYPE TVLKT-VTEXT,
        DINH TYPE P DECIMALS 1,"订货件数
       WBSTK TYPE VBUK-WBSTK,   "状态
  NAME_TEXT  LIKE ADRP-NAME_FIRST,
       LIFEX TYPE LIKP-LIFEX,
       LIFNR TYPE EORD-LIFNR,
       NAME3 TYPE LFA1-NAME1,

       JIAGE TYPE EKPO-KZWI5,
       JINE  TYPE EKPO-KZWI5,

       KZWI5 TYPE EKPO-KZWI5,
       DMBTR TYPE MSEG-DMBTR,
       ERZET TYPE LIKP-ERZET,
       BWART LIKE LIPS-BWART,
       KBETR TYPE KBETR,
*&->START ADD BY AD_CAIXIANG ON 20130514.
      YLBID1 LIKE YTLBDY-YLBID2,
      YDLNAM LIKE YTLBCJ-YLBNAME,
*&-END ADD
       TIMMM(14) TYPE C,
       FLAG(1)  TYPE C,

    END OF GT_ITAB.

DATA: BEGIN OF GT_DATA OCCURS 0,
      VBELN LIKE LIKP-VBELN,
      LFART LIKE LIKP-LFART,
      VTEXT TYPE TVLKT-VTEXT,
      WERKS LIKE LIPS-WERKS,
      NAME1 LIKE T001W-NAME1,
      KUNNR LIKE LIKP-KUNNR,
      NAME2 LIKE KNA1-NAME1,
      RESLO LIKE EKPO-RESLO,  "移出
     LGOBE1 LIKE T001L-LGOBE,
      LGORT LIKE EKPO-LGORT, "移入
     LGOBE2 LIKE T001L-LGOBE,
    YYCARNO LIKE LIKP-YYCARNO,
      TDDAT LIKE LIKP-TDDAT,
      BLDAT LIKE LIKP-BLDAT,
  WADAT_IST LIKE LIKP-WADAT_IST,
      MENGE TYPE EKPO-MENGE,   "订货数量
      LFIMG TYPE LIPS-LFIMG,   "实发数量
      JINZH TYPE LIPS-NTGEW,   "皮重
      ERNAM LIKE LIKP-ERNAM,
 NAME_TEXT  LIKE ADRP-NAME_FIRST,
      KOSTK TYPE VBUK-KOSTK,    "交货状态
      WBSTK TYPE VBUK-WBSTK,     "状态
      LIFEX TYPE LIKP-LIFEX,
*&START CHANGED BY AD_CAIXIANG ON 20121210 ECDK906622
*      LIFNR TYPE EORD-LIFNR,
*      NAME3 TYPE LFA1-NAME1,
*&END CHANGED BY AD_CAIXIANG ON 20121210.
      ERZET TYPE LIPS-ERZET,
      JINE  TYPE EKPO-KZWI5,
*      LNN   TYPE SY-TABIX,

     END OF GT_DATA.
*----------------------------------------------------------------------
*                          Variants
*----------------------------------------------------------------------
DATA: G_LEN   TYPE I.
DATA: WA LIKE GT_ITAB.
DATA: G_LIN TYPE I.
DATA: G_TABIX LIKE SY-TABIX.
RANGES:R_LFART FOR LIKP-LFART.

*---------------------------------------------------------------------*
*  Data parameters for alv report use
*---------------------------------------------------------------------*
DATA: G_PROGRAM    TYPE SY-REPID,
      GS_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT  TYPE SLIS_T_FIELDCAT_ALV,
      GS_FIELDCAT  LIKE LINE OF GT_FIELDCAT,
      GT_FIELDCAT2 TYPE SLIS_T_FIELDCAT_ALV,
      GS_FIELDCAT2 LIKE LINE OF GT_FIELDCAT,
      WA_FIELDCAT  TYPE SLIS_FIELDCAT_ALV,
      IT_EVENTS    TYPE SLIS_T_EVENT WITH HEADER LINE,
      GT_EVENT     TYPE SLIS_T_EVENT,
      WA_EVENT     TYPE SLIS_ALV_EVENT.
DATA: GT_LIST_TOP_OF_PAGE     TYPE SLIS_T_LISTHEADER.
DATA: GC_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME
                              VALUE ‘ALV_TOP_OF_PAGE‘.
DATA: G_GRID       TYPE REF TO CL_GUI_ALV_GRID.

*--------------------------------------------------------------------*
*  D宏的定义
*--------------------------------------------------------------------*
DEFINE MAR_ADD_FIELDCAT.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-FIELDNAME    =  &1.
  WA_FIELDCAT-SELTEXT_L    =  &2.
  WA_FIELDCAT-COL_POS      =  &3.
  WA_FIELDCAT-JUST         =  &4.
  WA_FIELDCAT-OUTPUTLEN    =  &5.
  WA_FIELDCAT-FIX_COLUMN   =  &6.
  WA_FIELDCAT-EDIT         =  &7.
  WA_FIELDCAT-NO_ZERO      =  &8.
  APPEND WA_FIELDCAT TO GT_FIELDCAT.
END-OF-DEFINITION.

*--------------------------------------------------------------------*
*  D宏的定义2
*--------------------------------------------------------------------*
DEFINE MAR_ADD_FIELDCAT2.
  CLEAR WA_FIELDCAT.
  WA_FIELDCAT-FIELDNAME    =  &1.
  WA_FIELDCAT-SELTEXT_L    =  &2.
  WA_FIELDCAT-COL_POS      =  &3.
  WA_FIELDCAT-JUST         =  &4.
  WA_FIELDCAT-OUTPUTLEN    =  &5.
  WA_FIELDCAT-FIX_COLUMN   =  &6.
  WA_FIELDCAT-EDIT         =  &7.
  WA_FIELDCAT-NO_ZERO      =  &8.
  APPEND WA_FIELDCAT TO GT_FIELDCAT2.
END-OF-DEFINITION.

*======================================================================
*                          SELECTION-SCREEN
*======================================================================
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.

PARAMETERS:     P_WERKS LIKE MARC-WERKS MEMORY ID WRK OBLIGATORY.
SELECT-OPTIONS: S_VBELN FOR LIKP-VBELN,
                S_LFART FOR LIKP-LFART.           "交货类型

"S_TDDAT FOR LIKP-TDDAT OBLIGATORY, "运输计划日期
"s_ERZET FOR LIKP-ERZET default ‘000000‘ to sy-uzeit no-extension OBLIGATORY,

PARAMETERS:     P_BLDATL LIKE LIKP-BLDAT DEFAULT SY-DATUM  OBLIGATORY,
                P_ERZETL LIKE LIKP-ERZET DEFAULT ‘000000‘,
                P_BLDATH LIKE LIKP-BLDAT DEFAULT SY-DATUM  OBLIGATORY,
                P_ERZETH LIKE LIKP-ERZET DEFAULT SY-UZEIT.

SELECT-OPTIONS: "S_BLDAT FOR LIKP-BLDAT OBLIGATORY,"凭证日期
                S_WADAT FOR LIKP-WADAT_IST,        "实际发货日期
                S_WBSTK FOR VBUK-WBSTK,
                S_KUNNR FOR LIKP-KUNNR,
                S_MATNR FOR LIPS-MATNR ,
                S_VGBEL FOR LIPS-VGBEL,
                S_YYCAR FOR LIKP-YYCARNO MATCHCODE OBJECT YH_YTCARNUM,
                S_RESLO FOR EKPO-RESLO,   "移出库位
                S_LGORT FOR EKPO-LGORT,   "移入库位
                S_ERNAM FOR LIKP-ERNAM MATCHCODE OBJECT USER_COMP.

SELECTION-SCREEN SKIP.

PARAMETERS: P_DETAIL TYPE C AS CHECKBOX DEFAULT ‘‘.

SELECTION-SCREEN END OF BLOCK BLK1.

*----------------------------------------------------------------------
*  INITIALIZATION
*----------------------------------------------------------------------
INITIALIZATION.

* 初始化数据
  PERFORM FRM_INITIAL.

*----------------------------------------------------------------------
*  AT SELECTION-SCREEN
*----------------------------------------------------------------------
AT SELECTION-SCREEN.
* 权限检查部分
  PERFORM FRM_CHECK_AUTHOR.

*======================================================================
*                          MAIN PROGRAM
*======================================================================
*  START-OF-SELECTION
*----------------------------------------------------------------------
START-OF-SELECTION.

*&S1: 取得数据:
  PERFORM FRM_GET_DATA.

*BREAK AD_CAIXIANG.
*&--->START ADD BY AD_CAIXIANG ON 20130111 ECDK907564.
  IF P_DETAIL IS NOT INITIAL.

    PERFORM FRM_DETAIL_DISP .

  ELSE.
*----------------------------------------------------------------------
*  END-OF-SELECTION
*----------------------------------------------------------------------
*&S3:  输出数据:
    PERFORM FRM_ALV_OUTPUT.

  ENDIF.

*&---<END ADD BY AD_CAIXIANG ON 20130111.

*&---------------------------------------------------------------------*
*&      Form  FRM_INITIAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_INITIAL.

*&设定日期默认:
*  IF S_TDDAT[] IS INITIAL.
*    S_TDDAT-LOW  = SY-DATUM.
*    S_TDDAT-HIGH = SY-DATUM + 5.
*    APPEND S_TDDAT.
*  ENDIF.
*  IF S_BLDAT[] IS INITIAL.
*    S_BLDAT-LOW  = SY-DATUM - 5.
*    S_BLDAT-HIGH = SY-DATUM.
*    APPEND S_BLDAT.
*  ENDIF.

ENDFORM.                    " FRM_INITIAL

*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_AUTHOR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_CHECK_AUTHOR.

*  IF S_BLDAT-LOW IS INITIAL OR S_BLDAT-HIGH IS INITIAL.
*    MESSAGE I011 WITH ‘凭证日期应上限都输入!‘.
*    STOP.
*  ENDIF.
* IF s_ERZET-LOW IS NOT INITIAL AND S_ERZET-HIGH IS INITIAL.
*   MESSAGE I011 WITH ‘时间应上下限都输入!‘.
*   STOP.
*  ELSE.
* IF s_ERZET-LOW IS INITIAL AND s_ERZET-HIGH IS NOT INITIAL.
*   MESSAGE I011 WITH ‘时间应上下限都输入!‘.
*   STOP.
* endif.
* ENDIF.
* IF s_ERZET-LOW IS INITIAL OR S_ERZET-HIGH IS INITIAL.
*   MESSAGE I011 WITH ‘时间应上下限都输入!‘.
*   STOP.
* ENDIF.

*&权限检查:
  AUTHORITY-CHECK OBJECT  ‘V_LIKP_VST‘
    ID  ‘VSTEL‘ FIELD P_WERKS
    ID  ‘ACTVT‘ FIELD ‘03‘.
  IF SY-SUBRC NE 0.
    MESSAGE I002 WITH  P_WERKS .
    STOP.
  ENDIF.

ENDFORM.                    " FRM_CHECK_AUTHOR

*&---------------------------------------------------------------------*
*&      Form  frm_get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
  DATA: L_BZIRK LIKE T001W-BZIRK,
        L_NAME_FIRST LIKE ADRP-NAME_FIRST,
        L_WERKS LIKE T001W-WERKS,
        L_NAME_LAST  LIKE ADRP-NAME_LAST,
        L_NAME_TEXT  LIKE ADRP-NAME_FIRST.
  DATA: LT_ITAB LIKE GT_ITAB OCCURS 0 WITH HEADER LINE,
        LT_WTAB LIKE GT_ITAB OCCURS 0 WITH HEADER LINE.

  DATA: BEGIN OF LT_MADQ OCCURS 0,
        MATNR LIKE MARA-MATNR,
        WERKS LIKE MARC-WERKS,
        YUMREZ1 LIKE YTMADQ-YUMREZ1,
        END OF LT_MADQ.
  DATA: BEGIN OF LT_MEAN OCCURS 0,
         MATNR LIKE MARA-MATNR,
         EAN11 LIKE MEAN-EAN11,
        END OF LT_MEAN.
*  DATA: BEGIN OF LT_MARA OCCURS 0,
*        MATNR LIKE MARA-MATNR,
*        GROES LIKE MARA-GROES,
*        MATKL LIKE MARA-MATKL,
*       END OF LT_MARA.
  DATA: BEGIN OF LT_T001W OCCURS 0,
         WERKS LIKE T001W-WERKS,
         NAME1 LIKE T001W-NAME1,
         KUNNR LIKE T001W-KUNNR,
        END OF LT_T001W.

  DATA: BEGIN OF  LT_T001L OCCURS 0,
         WERKS LIKE MARD-WERKS,
         LGORT LIKE MARD-LGORT,
         LGOBE LIKE T001L-LGOBE,
       END OF LT_T001L.
  DATA: BEGIN OF LT_TVLKT OCCURS 0,
        LFART LIKE TVLKT-LFART,
        VTEXT LIKE TVLKT-VTEXT,
       END OF LT_TVLKT .

  DATA: BEGIN OF LT_TAB OCCURS 0,
        VBELN LIKE LIKP-VBELN,
        LFART LIKE LIKP-LFART,
        VTEXT TYPE TVLKT-VTEXT,
        WERKS LIKE LIPS-WERKS,
        JINE  TYPE EKPO-KZWI5,
       END OF LT_TAB.

  DATA: G_TEXT TYPE KBETR,
        C_TEXT(8) TYPE N.
  DATA: G_MWSKZ LIKE EKPO-MWSKZ,
        G_KZWI5 LIKE EKPO-KZWI5,
        G_KZWI1 LIKE VBRP-KZWI1,
        G_MENGE LIKE EKPO-MENGE,
        G_DMBTR LIKE MSEG-DMBTR,
        G_FKIMG LIKE VBRP-FKIMG.
  DATA: L_MENGE TYPE EKPO-MENGE,   "订货数量
        L_LFIMG TYPE LIPS-LFIMG,   "实发数量
        L_JINZH TYPE LIPS-NTGEW.   "皮重
  DATA: L_TIMEL(14) TYPE C,
        L_TIMEH(14) TYPE C.

  DATA:BEGIN OF LT_EORD OCCURS 0,
        WERKS LIKE EORD-WERKS,
        MATNR LIKE EORD-MATNR,
        LIFNR LIKE EORD-LIFNR,
       END OF LT_EORD.

*  DATA: BEGIN OF LT_MARA2 OCCURS 0,
*        MATNR LIKE MARA-MATNR,
*        SATNR LIKE MARA-MATNR,
*      END OF LT_MARA2.
  DATA:BEGIN OF LT_LFA1 OCCURS 0,
         LIFNR LIKE LFA1-LIFNR,
         NAME1 LIKE LFA1-NAME1,
        END OF LT_LFA1.
  DATA: BEGIN OF LT_KNA1 OCCURS 0,
         KUNNR LIKE KNA1-KUNNR,
         NAME1 LIKE KNA1-NAME1,
        END OF LT_KNA1.
  DATA: BEGIN OF LT_NAME OCCURS 0,
      BNAME     LIKE V_USR_NAME-BNAME,
      NAME_TEXT LIKE V_USR_NAME-NAME_TEXT,
        END OF LT_NAME .

  DATA:BEGIN OF LT_EKPO OCCURS 0,
         EBELN LIKE EKPO-EBELN,
         EBELP LIKE EKPO-EBELP,
         TXZ01 LIKE EKPO-TXZ01,
         LGORT LIKE EKPO-LGORT,
         RESLO LIKE EKPO-RESLO,
         MWSKZ LIKE EKPO-MWSKZ,
         MENGE LIKE EKPO-MENGE,
         KZWI1 LIKE EKPO-KZWI1,
         KZWI5 LIKE EKPO-KZWI5,
    END OF LT_EKPO.
  DATA:BEGIN OF LT_EKKO OCCURS 0 ,
          EBELN LIKE EKPO-EBELN,
          EBELP LIKE EKPO-EBELP,
          VBELN LIKE LIPS-VBELN,
     END OF LT_EKKO.
  DATA: LT_WEKO LIKE TABLE OF LT_EKKO WITH HEADER LINE.

  DATA:BEGIN OF LT_EKBE OCCURS 0,
        EBELN LIKE EKBE-EBELN,
        EBELP LIKE EKBE-EBELP,
        VBELN LIKE LIKP-VBELN,
        DMBTR LIKE EKBE-DMBTR,
      END OF LT_EKBE.
  DATA: BEGIN OF LT_VBFA OCCURS 0,
         VBELV LIKE VBFA-VBELV,
         POSNV LIKE VBFA-POSNV,
         VBELN LIKE VBFA-VBELN,
         POSNN LIKE VBFA-POSNN,
        END OF LT_VBFA.
  DATA: LT_TAB1 LIKE TABLE OF LT_VBFA WITH HEADER LINE.

  DATA: BEGIN OF LT_VBRP OCCURS 0,
         VBELN LIKE VBRP-VBELN,
         POSNR LIKE VBRP-POSNR,
         KZWI1 LIKE VBRP-KZWI1,
         FKIMG LIKE VBRP-FKIMG,
        END OF LT_VBRP.
  DATA: BEGIN OF LT_VBAP OCCURS 0,
         VBELN LIKE VBAP-VBELN,
         POSNR LIKE VBAP-POSNR,
        KWMENG LIKE VBAP-KWMENG,
         ARKTX LIKE VBAP-ARKTX,
        END OF LT_VBAP.
  DATA: LT_WVBAP LIKE TABLE OF LT_VBAP WITH HEADER LINE.

  DATA: BEGIN OF LT_VBUK OCCURS 0,
         VBELN LIKE VBUK-VBELN,
         KOSTK LIKE VBUK-KOSTK,
         WBSTK LIKE VBUK-WBSTK,
        END OF LT_VBUK.
  DATA: BEGIN OF LT_YTLBCJ OCCURS 0,
         YLBID LIKE YTLBCJ-YLBID,
       YLBNAME LIKE YTLBCJ-YLBNAME,
        END OF LT_YTLBCJ.
  DATA: BEGIN OF LT_MARA3 OCCURS 0,
         MATNR LIKE MARA-MATNR,
         ATTYP LIKE MARA-ATTYP,
         SATNR LIKE MARA-SATNR,
         GROES LIKE MARA-GROES,
         MATKL LIKE MARA-MATKL,
         LVORM LIKE MARA-LVORM,
        END OF LT_MARA3.
  DATA: BEGIN OF LT_A003 OCCURS 0,
           MWSKZ LIKE A003-MWSKZ,
           KBETR LIKE KONP-KBETR,
         END OF LT_A003.
  DATA: LT_MARA LIKE TABLE OF LT_MARA3 WITH HEADER LINE,
        LT_MARA2 LIKE TABLE OF LT_MARA3 WITH HEADER LINE.
  RANGES:R_LFARTN FOR LIKP-LFART.
  DATA: L_TIAN(5) TYPE N.
  DATA: L_COUNT TYPE I.
  DATA: L_LAST TYPE C.
  DATA: L_NMAX TYPE I.

  SELECT SINGLE TBMAXSEL INTO L_NMAX FROM YTMMREPNUM
    WHERE PROGNAME = SY-REPID AND ACTIVE = ‘X‘.
  IF SY-SUBRC NE 0.
    L_NMAX = 150000.
  ENDIF.

*&->START CHANGE BY AD_CX ON 20130708 ECDK912680
  L_TIAN = P_BLDATH - P_BLDATL.
  IF L_TIAN GT 37.
    MESSAGE S011 WITH ‘时间范围查询条件输入过大!请将时间段分开查询,谢谢!‘ DISPLAY LIKE ‘E‘.
    STOP.
  ENDIF.
*&->END CHANGE.

*&S1.默认交货单移动类型:
  PERFORM FRM_LFART.

*&->START CHANGE BY AD_CX ON 20130725 ECDK913587.
*&S1.1先取出单据类型:
  SELECT LFART VTEXT
    INTO TABLE LT_TVLKT
    FROM TVLKT
   WHERE SPRAS EQ SY-LANGU
     AND LFART IN S_LFART
     AND LFART IN R_LFART.
  SORT LT_TVLKT BY LFART.

*&S1.2形成单据最终RANGE.
  LOOP AT LT_TVLKT.
    R_LFARTN(3) = ‘IEQ‘.
    R_LFARTN-LOW = LT_TVLKT-LFART.
    APPEND R_LFARTN.
  ENDLOOP.

  IF S_WBSTK[] IS NOT INITIAL .

*&S2.1:数据表LIPS LIKP VBUK关联取数
    SELECT A~VBELN
           A~ANZPK
           A~ERNAM    "创建对象人员的名称
           A~KUNNR    "配入机构
           A~LFART    "交货单类型(加描述)
           A~TDDAT    "计划发货日期
           A~BLDAT    "凭证日期
           A~WADAT_IST"实际发货日期
           A~YYCARNO
           A~LIFEX    "融通单号
           A~ERZET

           B~BWART
           B~POSNR   "序号
           B~WERKS   "配出机构
           B~VGBEL   "参考凭证号
           B~VGPOS   "参考凭证项目
           B~VGTYP
           B~MATNR   "商品编码
           B~MEINS   "单位
           B~VRKME
           B~LFIMG   "实发数量
           B~BRGEW   "毛重
           B~NTGEW   "净重
           B~LGORT

           C~KOSTK
           C~WBSTK
      INTO CORRESPONDING FIELDS OF TABLE  GT_ITAB
      FROM LIKP AS A
      JOIN VBUK AS C
        ON ( A~VBELN EQ C~VBELN )
      JOIN LIPS AS B
        ON ( A~VBELN EQ B~VBELN )
      UP TO L_NMAX ROWS
*&start changed by robin 20130514  ECDK910228
*&性能优化:
     WHERE A~BLDAT >= P_BLDATL
       AND A~BLDAT <= P_BLDATH
       AND A~LFART IN R_LFARTN
       AND B~WERKS EQ P_WERKS
       AND C~WBSTK IN S_WBSTK
       AND A~VBELN IN S_VBELN
       AND A~KUNNR IN S_KUNNR
       AND A~YYCARNO IN S_YYCAR
       AND A~WADAT_IST IN S_WADAT
       AND A~ERNAM IN S_ERNAM
     "AND B~WERKS EQ P_WERKS
       AND B~MATNR IN S_MATNR
       AND B~VGBEL IN S_VGBEL
*&->START ADD
       AND B~LGORT IN S_LGORT.
*&->END ADD.

**&end changed by robin 20130514.

  ELSE.

*&S2.2:数据表LIPS LIKP 关联取数,将VBUK取数移出
*&->START CHANGE BY AD_CX ON 20130725 ECDK913587.
    SELECT A~VBELN
           A~ANZPK
           A~ERNAM    "创建对象人员的名称
           A~KUNNR    "配入机构
           A~LFART    "交货单类型(加描述)
           A~TDDAT    "计划发货日期
           A~BLDAT    "凭证日期
           A~WADAT_IST"实际发货日期
           A~YYCARNO
           A~LIFEX    "融通单号
           A~ERZET

           B~BWART
           B~POSNR   "序号
           B~WERKS   "配出机构
           B~VGBEL   "参考凭证号
           B~VGPOS   "参考凭证项目
           B~VGTYP
           B~MATNR   "商品编码
           B~MEINS   "单位
           B~VRKME
           B~LFIMG   "实发数量
           B~BRGEW   "毛重
           B~NTGEW   "净重
           B~LGORT
*         C~KOSTK
*         C~WBSTK
      INTO CORRESPONDING FIELDS OF TABLE  GT_ITAB
      FROM LIKP AS A
*  JOIN VBUK AS C
*    ON ( A~VBELN EQ C~VBELN )
      JOIN LIPS AS B
        ON ( A~VBELN EQ B~VBELN )
      UP TO L_NMAX ROWS
*&start changed by robin 20130514  ECDK910228
*&性能优化:
     WHERE A~BLDAT >= P_BLDATL
       AND A~BLDAT <= P_BLDATH
       AND A~LFART IN R_LFARTN
       AND B~WERKS EQ P_WERKS
       AND A~VBELN IN S_VBELN
       AND A~KUNNR IN S_KUNNR
       AND A~YYCARNO IN S_YYCAR
       AND A~WADAT_IST IN S_WADAT
       AND A~ERNAM IN S_ERNAM
       AND B~MATNR IN S_MATNR
       AND B~VGBEL IN S_VGBEL
*&->START ADD
       AND B~LGORT IN S_LGORT.
*&->END ADD.

*   AND C~WBSTK IN S_WBSTK.
*&->END CHANGE BY AD_CX.

  ENDIF.

*&S2.3.内表排序
  SORT GT_ITAB BY VBELN POSNR.

*&S4.1当数量极大时提示:
*  IF G_LEN GT 80000.
*    MESSAGE E011 WITH ‘你查询的数据太多,请重新选择条件!‘.
*    STOP.
*  ENDIF.

*&S3.日期加时间点作为时间段查询数据
*&->START ADD BY AD_CAIXIANG ON 20121128.  增加按详细时间筛选数据逻辑:
*&判断时间范围内的数据
  LOOP AT GT_ITAB .
    CONCATENATE GT_ITAB-BLDAT GT_ITAB-ERZET INTO GT_ITAB-TIMMM.

    CONCATENATE P_BLDATL P_ERZETL INTO L_TIMEL.
    CONCATENATE P_BLDATH P_ERZETH INTO L_TIMEH.

    IF GT_ITAB-TIMMM > L_TIMEH OR GT_ITAB-TIMMM < L_TIMEL.
      GT_ITAB-FLAG = ‘X‘.
      DELETE GT_ITAB.
      CONTINUE.
    ENDIF.

    CHECK GT_ITAB-VGBEL IS NOT INITIAL.
    IF GT_ITAB-VGTYP = ‘V‘.
*&S3.1 形成采购订单数据中间表
      LT_EKKO-EBELN = GT_ITAB-VGBEL.
      LT_EKKO-EBELP = GT_ITAB-VGPOS.
      LT_EKKO-VBELN = GT_ITAB-VBELN.
      COLLECT LT_EKKO.
      CLEAR LT_EKKO.
    ELSE."销售凭证
      LT_WVBAP-VBELN = GT_ITAB-VGBEL.
      LT_WVBAP-POSNR = GT_ITAB-VGPOS.
      COLLECT LT_WVBAP.
    ENDIF.

*    MODIFY GT_ITAB TRANSPORTING FLAG.
  ENDLOOP.

*&S3.2 删除不满足条件的数据
  DELETE GT_ITAB WHERE FLAG EQ ‘X‘.
*& END ADD BY AD_CAIXIANG ON 20121128.

*&->START ADD BY AD_CX ON 20130727.
  IF LINES( GT_ITAB ) = L_NMAX.
    MESSAGE I014(YH_FI1) WITH ‘条目的最大数值限制为‘ L_NMAX ‘,‘ ‘请分批查询!‘.
    STOP.
  ENDIF.
*&->END ADD.

*&S4.检查是否取到数据:
  DESCRIBE TABLE GT_ITAB LINES G_LEN.
  IF G_LEN EQ 0.
    MESSAGE I011 WITH ‘没有查询到符合条件的数据!‘.
    STOP.
  ENDIF.

*&S5.VBUK表取数:
*& 考虑用中间表:
  LT_WTAB[] = GT_ITAB[].
* SORT LT_WTAB BY VBELN.
  DELETE ADJACENT DUPLICATES FROM LT_WTAB  COMPARING VBELN.

  IF S_WBSTK[] IS INITIAL .
    LOOP AT LT_WTAB.
      CLEAR L_LAST.
      AT LAST.
        L_LAST = ‘X‘.
      ENDAT.

      APPEND LT_WTAB TO LT_ITAB.
      ADD 1 TO L_COUNT.

      IF L_COUNT = 5000 OR L_LAST = ‘X‘.
        SELECT VBELN KOSTK WBSTK
        APPENDING TABLE LT_VBUK
          FROM VBUK
           FOR ALL ENTRIES IN LT_ITAB
         WHERE VBELN EQ LT_ITAB-VBELN.

        REFRESH LT_ITAB.
        CLEAR L_COUNT.
      ENDIF.
    ENDLOOP.
    SORT LT_VBUK BY VBELN.
  ENDIF.
  FREE LT_WTAB.

*&S6.EKPO取数:
  IF LT_EKKO[] IS NOT INITIAL.
    LOOP AT LT_EKKO.
      CLEAR L_LAST.
      AT LAST.
        L_LAST = ‘X‘.
      ENDAT.

      APPEND LT_EKKO TO LT_WEKO.

      ADD 1 TO L_COUNT.
      IF L_COUNT = 5000 OR L_LAST = ‘X‘.
*&S6.1.通过凭证号关联到EKPO取数
        SELECT EBELN EBELP
               TXZ01 LGORT
               RESLO MWSKZ
               MENGE KZWI1
               KZWI5
        APPENDING TABLE LT_EKPO
          FROM EKPO
           FOR ALL ENTRIES IN LT_WEKO
         WHERE EBELN = LT_WEKO-EBELN
           AND EBELP = LT_WEKO-EBELP
           AND LOEKZ EQ SPACE.

*&S7.采购凭证历史表取数:
        SELECT EBELN EBELP
               VBELN_ST AS VBELN
               DMBTR
          APPENDING TABLE LT_EKBE
          FROM EKBE
           FOR ALL ENTRIES IN LT_WEKO
         WHERE EBELN EQ LT_WEKO-EBELN
           AND EBELP EQ LT_WEKO-EBELP
           AND VGABE EQ ‘6‘
           AND VBELN_ST EQ LT_WEKO-VBELN.

        REFRESH LT_WEKO.
        CLEAR L_COUNT.
      ENDIF.
    ENDLOOP.
    SORT LT_EKPO BY EBELN EBELP.
    SORT LT_EKBE BY EBELN EBELP VBELN.
  ENDIF.
  FREE: LT_WEKO,LT_EKKO.

*&—>START 以下备注:
**&S6.1.通过凭证号关联到EKPO取数
*    SELECT EBELN EBELP
*           TXZ01 LGORT
*           RESLO MWSKZ
*           MENGE KZWI1
*           KZWI5
*
*      INTO TABLE LT_EKPO
*      FROM EKPO
*       FOR ALL ENTRIES IN LT_EKKO
*     WHERE EBELN = LT_EKKO-EBELN
*       AND EBELP = LT_EKKO-EBELP
*       AND LOEKZ EQ SPACE.
**&->START ADD BY AD_CAIXIANG ON 20130516 ECDK911439
**    AND RESLO IN S_RESLO
**    AND LGORT IN S_LGORT.
**&->EDN ADD 20130516.
*    SORT LT_EKPO BY EBELN EBELP.

*&S6.2.关联到EKBE取数
*  *    BREAK AD_CAIXIANG.
* SELECT SINGLE DMBTR
*   FROM EKBE
*   INTO G_DMBTR
*  WHERE EBELN EQ WA-VGBEL
*    AND EBELP EQ WA-VGPOS+1(5)
*    AND BWART EQ WA-BWART.
* SELECT EBELN EBELP
*        DMBTR
*   INTO TABLE LT_EKBE
*   FROM EKBE
*    FOR ALL ENTRIES IN LT_EKKO
*  WHERE EBELN = LT_EKKO-EBELN
*    AND EBELP = LT_EKKO-EBELP
*    AND VGABE = ‘6‘.
*&->START CHANGE BY AD_CAIXIANG ON 20130603
*    LT_ITAB[] = GT_ITAB[].
*    SORT LT_ITAB BY VGBEL VGPOS VBELN.
*    DELETE ADJACENT DUPLICATES FROM LT_ITAB COMPARING VGBEL VGPOS VBELN.
*&->END 备注

*  IF LT_EKKO[] IS NOT INITIAL.
**&S7.采购凭证历史表取数:
*    SELECT EBELN EBELP
*           VBELN_ST AS VBELN
*           DMBTR
*      INTO TABLE LT_EKBE
*      FROM EKBE
*       FOR ALL ENTRIES IN LT_EKKO
*     WHERE EBELN EQ LT_EKKO-EBELN
*       AND EBELP EQ LT_EKKO-EBELP
*       AND VGABE EQ ‘6‘
*       AND VBELN_ST EQ LT_EKKO-VBELN.
*    SORT LT_EKBE BY EBELN EBELP VBELN.
** REFRESH LT_ITAB.
**&->END CHANGE .
*  ENDIF.

*&S8通过地点商品编码找对应大区件装数:
  LT_ITAB[] = GT_ITAB[].
  SORT LT_ITAB BY MATNR WERKS.
  DELETE ADJACENT DUPLICATES FROM LT_ITAB COMPARING MATNR WERKS.

  SELECT A~MATNR B~WERKS A~YUMREZ1
    INTO TABLE LT_MADQ
    FROM YTMADQ AS A
    JOIN T001W AS B
      ON ( A~BZIRK EQ B~BZIRK )
     FOR ALL ENTRIES IN LT_ITAB
   WHERE A~MATNR EQ LT_ITAB-MATNR
     AND B~WERKS EQ LT_ITAB-WERKS.
  SORT LT_MADQ BY MATNR WERKS.

*&S9通过货源找供应商:
  SELECT WERKS MATNR LIFNR
    INTO TABLE LT_EORD
    FROM YTMEORD
     FOR ALL ENTRIES IN LT_ITAB
   WHERE MATNR EQ  LT_ITAB-MATNR
     AND WERKS EQ  LT_ITAB-WERKS .
  SORT LT_EORD BY MATNR WERKS.
*  REFRESH LT_ITAB.

*&S10:商品编码找条码:
*  LT_ITAB[] = GT_ITAB[].
*  SORT LT_ITAB BY MATNR.

  DELETE ADJACENT DUPLICATES FROM LT_ITAB COMPARING MATNR.
  SELECT MATNR EAN11
    INTO TABLE LT_MEAN
    FROM MEAN
     FOR ALL ENTRIES IN LT_ITAB
   WHERE MATNR EQ LT_ITAB-MATNR
     AND HPEAN EQ ‘X‘.
  SORT LT_MEAN BY MATNR.

*S6.6:商品编码取规格:
*  SORT LT_ITAB BY MATNR.
*  DELETE ADJACENT DUPLICATES FROM LT_ITAB COMPARING MATNR.
*  SELECT MATNR GROES
**&->START ADD BY AD_CAIXIANG ON 20130514  ECDK911331
*         MATKL
**&->END ADD BY AD_CAIXIANG.
*    INTO TABLE LT_MARA
*    FROM MARA
*     FOR ALL ENTRIES IN LT_ITAB
*   WHERE MATNR EQ LT_ITAB-MATNR
*     AND LVORM EQ SPACE.
**&6.7分子母码找对应的商品编码:
*  SELECT MATNR SATNR
*    INTO TABLE LT_MARA2
*    FROM MARA
*     FOR ALL ENTRIES IN LT_ITAB
*   WHERE MATNR EQ LT_ITAB-MATNR
*     AND ATTYP EQ ‘02‘
*     AND SATNR NE ‘‘.

*&S11.MARA表取数
  SELECT MATNR ATTYP SATNR GROES MATKL LVORM
    INTO TABLE LT_MARA3
    FROM MARA
     FOR ALL ENTRIES IN LT_ITAB
   WHERE MATNR EQ LT_ITAB-MATNR.

  LT_MARA[] = LT_MARA3[].
  DELETE LT_MARA WHERE LVORM NE SPACE.
  LT_MARA2[] = LT_MARA3[].
  DELETE LT_MARA2 WHERE ATTYP NE ‘02‘ OR SATNR EQ ‘‘.

  SORT LT_MARA BY MATNR.
  SORT LT_MARA2 BY MATNR.

  FREE LT_MARA3.
*&->START ADD BY AD_CAIXIANG ON 20130514  ECDK911331
*&S12.取大类名称
  SELECT YLBID YLBNAME
    INTO TABLE LT_YTLBCJ
    FROM YTLBCJ.
*     FOR ALL ENTRIES IN LT_MARA
*   WHERE YLBID EQ LT_MARA-MATKL+0(2).
  SORT LT_YTLBCJ BY YLBID.

*&->END ADD BY AD_CAIXIANG.

*&---?

  REFRESH LT_ITAB.

*&S13:取机构名称:
*  LT_ITAB[] = GT_ITAB[].
*  SORT LT_ITAB BY WERKS.
*  DELETE ADJACENT DUPLICATES FROM LT_ITAB COMPARING WERKS.
  SELECT WERKS NAME1 KUNNR
    INTO TABLE LT_T001W
    FROM T001W.
*     FOR ALL ENTRIES IN LT_ITAB
*   WHERE WERKS EQ LT_ITAB-WERKS.
  SORT LT_T001W BY WERKS.

*&S14.找出库位描述:
  SELECT WERKS LGORT LGOBE
    INTO TABLE LT_T001L
    FROM T001L.
*     FOR ALL ENTRIES IN LT_ITAB
*   WHERE WERKS EQ  LT_ITAB-WERKS.
  SORT LT_T001L BY WERKS LGORT.
  REFRESH LT_ITAB.

*&->START CHANGE BY AD_CX ON 20130725 ECDK913587.
*&S6.10取凭证类型描述:
*  SELECT LFART VTEXT
*    INTO TABLE LT_TVLKT
*    FROM TVLKT
*   WHERE SPRAS EQ SY-LANGU
*     AND LFART IN S_LFART
*     AND LFART IN R_LFART.
*  SORT LT_TVLKT BY LFART.
*&->END CHANGE.

*&S15.取供应商名称
*  LT_ITAB[] = GT_ITAB[].
*  SORT LT_ITAB BY LIFNR.
*  DELETE ADJACENT DUPLICATES FROM LT_LFA1 COMPARING LIFNR.

  SELECT LIFNR NAME1
    INTO TABLE LT_LFA1
    FROM LFA1
     FOR ALL ENTRIES IN LT_EORD
   WHERE LIFNR EQ LT_EORD-LIFNR.
  SORT LT_LFA1 BY LIFNR.
  REFRESH LT_ITAB.

*&S16.取客户名称:
  LT_ITAB[] = GT_ITAB[].
  SORT LT_ITAB BY KUNNR.
  DELETE ADJACENT DUPLICATES FROM LT_ITAB COMPARING KUNNR.
  SELECT KUNNR NAME1
    INTO TABLE LT_KNA1
    FROM KNA1
     FOR ALL ENTRIES IN LT_ITAB
   WHERE KUNNR EQ LT_ITAB-KUNNR.
  SORT LT_KNA1 BY KUNNR.
  REFRESH LT_ITAB.

*&S17.取制单人名称
  LT_ITAB[] = GT_ITAB[].
  SORT LT_ITAB BY ERNAM.
  DELETE ADJACENT DUPLICATES FROM LT_ITAB COMPARING ERNAM.
  SELECT BNAME NAME_TEXT
    INTO TABLE LT_NAME
    FROM V_USR_NAME
     FOR ALL ENTRIES IN LT_ITAB
   WHERE BNAME EQ LT_ITAB-ERNAM.
  SORT LT_NAME BY BNAME.
  REFRESH LT_ITAB.

*& 销售凭证
  IF LT_WVBAP[] IS NOT INITIAL.
    LOOP AT LT_WVBAP.
      CLEAR L_LAST.
      AT LAST.
        L_LAST = ‘X‘.
      ENDAT.

      LT_TAB1-VBELV = LT_WVBAP-VBELN.
      LT_TAB1-POSNV = LT_WVBAP-POSNR.
      APPEND LT_TAB1.

      ADD 1 TO L_COUNT.
      IF L_COUNT = 5000 OR L_LAST = ‘X‘.

*&S19.取销售凭证对应数量
        SELECT VBELN  POSNR
               KWMENG ARKTX
          APPENDING TABLE LT_VBAP
          FROM VBAP
           FOR ALL ENTRIES IN LT_TAB1
         WHERE VBELN EQ LT_TAB1-VBELV
           AND POSNR EQ LT_TAB1-POSNV.

*&S18.取销售凭证发票
        SELECT VBELV POSNV
               VBELN POSNN
          APPENDING TABLE LT_VBFA
          FROM VBFA
           FOR ALL ENTRIES IN LT_TAB1
         WHERE VBELV EQ LT_TAB1-VBELV
           AND POSNV EQ LT_TAB1-POSNV
           AND VBTYP_N EQ ‘M‘.
        IF SY-SUBRC = 0.
          SELECT VBELN POSNR
                 KZWI1 FKIMG
            APPENDING TABLE LT_VBRP
            FROM VBRP
             FOR ALL ENTRIES IN LT_VBFA
           WHERE VBELN = LT_VBFA-VBELN
             AND POSNR = LT_VBFA-POSNN.
        ENDIF.

        REFRESH LT_TAB1.
        CLEAR L_COUNT.
      ENDIF.

    ENDLOOP.

    SORT LT_VBFA BY VBELV POSNV.
    SORT LT_VBAP BY VBELN POSNR.
    SORT LT_VBRP BY VBELN POSNR.
  ENDIF.
  FREE: LT_TAB1,LT_WVBAP.

*  LT_ITAB[] = GT_ITAB[].
*  SORT LT_ITAB BY VGBEL VGPOS.
*  DELETE ADJACENT DUPLICATES FROM LT_ITAB COMPARING VGBEL VGPOS.
*  SELECT VBELV POSNV
*         VBELN POSNN
*    INTO TABLE LT_VBFA
*    FROM VBFA
*     FOR ALL ENTRIES IN LT_ITAB
*   WHERE VBELV EQ LT_ITAB-VGBEL
*     AND POSNV EQ LT_ITAB-VGPOS
*     AND VBTYP_N EQ ‘M‘.
*  SORT LT_VBFA BY VBELV POSNV.
*
*
*
**&S19.取销售凭证对应数量
*  SELECT VBELN  POSNR
*         KWMENG ARKTX
*    INTO TABLE LT_VBAP
*    FROM VBAP
*     FOR ALL ENTRIES IN LT_ITAB
*   WHERE VBELN EQ LT_ITAB-VGBEL
*     AND POSNR EQ LT_ITAB-VGPOS.
*  SORT LT_VBAP BY VBELN POSNR.
*
*  REFRESH LT_ITAB.
*
**&S20.取发票数量与金额
*  LT_TAB1[] = LT_VBFA[].
*  SORT LT_TAB1 BY VBELN POSNN.
*  DELETE ADJACENT DUPLICATES FROM LT_TAB1 COMPARING VBELN POSNN.
*  IF LT_TAB1[] IS NOT INITIAL.
*    SELECT VBELN POSNR
*           KZWI1 FKIMG
*      INTO TABLE LT_VBRP
*      FROM VBRP
*       FOR ALL ENTRIES IN LT_TAB1
*     WHERE VBELN = LT_TAB1-VBELN
*       AND POSNR = LT_TAB1-POSNN.
*    SORT LT_VBRP BY VBELN POSNR.
*  ENDIF.

*&S21获取税率
  SELECT A~MWSKZ
         B~KBETR
    INTO TABLE LT_A003
    FROM A003 AS A
    JOIN KONP AS B
      ON A~KNUMH = B~KNUMH AND B~KOPOS = ‘01‘
   WHERE A~KAPPL = ‘TX‘
     AND A~KSCHL = ‘MWVS‘
     AND A~ALAND = ‘CN‘
     AND B~LOEVM_KO = SPACE.
  SORT LT_A003 BY MWSKZ.

*&S22,环取得其他表中取其它值
  LOOP AT GT_ITAB. " INTO WA.
    G_TABIX = SY-TABIX.

    MOVE GT_ITAB TO WA.

*&S检查ekpo中的库位:
*&读取EKPO中金额,税码等数据
    IF  WA-VGBEL NE SPACE AND WA-VGTYP = ‘V‘.
      READ TABLE LT_EKPO WITH KEY EBELN = WA-VGBEL
                                  EBELP = WA-VGPOS+1(5) BINARY SEARCH.
      IF SY-SUBRC EQ 0.
*& 取小计金额 和 数量
        G_MWSKZ = LT_EKPO-MWSKZ.
        G_KZWI5 = LT_EKPO-KZWI5.
        G_KZWI1 = LT_EKPO-KZWI1.
        G_MENGE = LT_EKPO-MENGE.
*&->ADD BY AD_CAIXIANG.
        WA-MENGE = LT_EKPO-MENGE.
*&->END ADD.
        " WA-LGORT = LT_EKPO-LGORT.
*      WA-RESLO = LT_EKPO-RESLO.
        WA-RESLO = LT_EKPO-LGORT.
*&->START CHANGE BY AD_CAIXIANG ON 20130516.
        WA-MAKTX = LT_EKPO-TXZ01.
*&->END CHANGE BY AD_CAIXIANG.
*&判断库位:
*&IF WA-LGORT IN S_LGORT AND
        IF WA-RESLO IN S_RESLO.
*          WA-MAKTX = LT_EKPO-TXZ01.
*          WA-LGORT = LT_EKPO-LGORT.
*          WA-RESLO = LT_EKPO-RESLO.
        ELSE.
          CLEAR WA.
          DELETE GT_ITAB INDEX G_TABIX.
          CONTINUE.
        ENDIF.

*     ENDIF.
**&->START CHANGE BY AD_CAIXIANG ON 20130513  ECDK911294.
*      ELSE.
*        CLEAR WA.
*        DELETE GT_ITAB INDEX G_TABIX.
*        CONTINUE.

      ENDIF.
*&->END CHANGE BY AD_CAIXIANG ON 20130513.

    ENDIF.

*&--->START CHANGE BY AD_CAIXIANG ON 20130406 ECDK910228

    IF S_WBSTK[] IS INITIAL .
      READ TABLE LT_VBUK WITH KEY VBELN = GT_ITAB-VBELN BINARY SEARCH.
      IF SY-SUBRC = 0.
        GT_ITAB-KOSTK = LT_VBUK-KOSTK.
        GT_ITAB-WBSTK = LT_VBUK-WBSTK.
        WA-KOSTK = LT_VBUK-KOSTK.
        WA-WBSTK = LT_VBUK-WBSTK.
      ENDIF.
    ENDIF.

*& 分子母码找对应的商品编码:
*    SELECT SINGLE SATNR
*             INTO WA-MATNR
*             FROM MARA
*            WHERE ATTYP = ‘02‘
*              AND SATNR <> ‘‘
*              AND MATNR = WA-MATNR.
    READ TABLE LT_MARA2 WITH KEY MATNR = WA-MATNR BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      WA-MATNR = LT_MARA2-SATNR.
    ENDIF.

*&读取供应商
    READ TABLE LT_EORD WITH KEY MATNR = WA-MATNR
                                WERKS = WA-WERKS BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      WA-LIFNR = LT_EORD-LIFNR.
    ENDIF.

*& 取供应商名称:
    READ TABLE LT_LFA1 WITH KEY LIFNR = WA-LIFNR BINARY SEARCH.
    IF SY-SUBRC = 0.
      WA-NAME3 = LT_LFA1-NAME1.
    ENDIF.

    AT NEW VBELN .
      CLEAR:L_NAME_TEXT.
*&S1.5.1:获取制单人信息:
      READ TABLE LT_NAME WITH KEY BNAME = WA-ERNAM BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        L_NAME_TEXT = LT_NAME-NAME_TEXT.
      ENDIF.

*&S1.5.2:取客户描述:
      CLEAR KNA1-NAME1.
      READ TABLE LT_KNA1 WITH KEY KUNNR = WA-KUNNR BINARY SEARCH.
      IF SY-SUBRC = 0.
        KNA1-NAME1 = LT_KNA1-NAME1.
      ENDIF.

*&S1.5.3:取出客户对应的工厂:
      CLEAR L_WERKS.
      READ TABLE LT_T001W WITH KEY KUNNR = WA-KUNNR. " BINARY SEARCH.
      IF SY-SUBRC = 0.
        L_WERKS = LT_T001W-WERKS.
      ENDIF.

    ENDAT.

*&--->END CHANGE BY AD_CAIXIANG ON 20130406.

*& 金额:
    WA-JINE = WA-JIAGE *  GT_ITAB-LFIMG.

*&---> START CHANGE BY AD_CAIXIANG ON 20130222  ECDK908753
    IF WA-BWART EQ ‘641‘ OR WA-BWART EQ ‘643‘.
*&当交货单的凭证类型为‘641’ ‘643’时,取交货单凭证里的KZWI5
*& 当小计5不为0:价格=  小计5/数量
*&  当小计5为0: 通过交货单凭证中的税码EKPO-MWSKZ,计算税率,然后通
*&   ( DMBTR * ( 1 + 税率 / 100 ) ) / 数量.计算价格。
*&---> END CHANGE BY AD_CAIXIANG.
      READ TABLE LT_EKBE WITH KEY EBELN = WA-VGBEL
                                  EBELP = WA-VGPOS+1(5)
                                  VBELN = WA-VBELN BINARY SEARCH.
      IF SY-SUBRC = 0.
        G_DMBTR = LT_EKBE-DMBTR.

*& 当KZWI5不为0:
        IF G_KZWI5 NE 0.
          IF G_MENGE NE 0.
            WA-JIAGE = G_KZWI5 / G_MENGE.
          ELSE.
            WA-JIAGE = 0.
          ENDIF.
*& 金额:
          WA-JINE = WA-JIAGE *  GT_ITAB-LFIMG.
        ELSE.

*&获取税率
*&->START CHANGE BY AD_CX ON 20130703 ECDK912680

          READ TABLE LT_A003 WITH KEY MWSKZ = G_MWSKZ BINARY SEARCH.
          IF SY-SUBRC = 0.
            G_TEXT = LT_A003-KBETR / 10.
*&剔除税率小数点后的零
            C_TEXT = TRUNC( G_TEXT ).
            CONCATENATE C_TEXT ‘%‘ INTO C_TEXT.
          ENDIF.
*&->START CHANGE BY AD_CAIXIANG ON 20130603 ECDK912048.
          WA-JINE  = ( G_DMBTR * ( 1 + C_TEXT / 100 ) ) .
          IF G_MENGE NE 0.
*&->START CHANGE BY AD_CAIXIANG ON 20130604.
            WA-JIAGE = WA-JINE / GT_ITAB-LFIMG.
          ELSE.
            WA-JIAGE = 0.
          ENDIF.

*&函数注释
*    CALL FUNCTION ‘YH_PUB_TAX_VALUE_GET‘
*       EXPORTING
*           I_KSCHL = ‘MWVS‘
*              I_MWSKZ = G_MWSKZ
*            IMPORTING
*              O_KBETR = G_TEXT.
**&->START CHANGE BY AD_CAIXIANG ON 20130603 ECDK912048.
*          WA-JINE  = ( G_DMBTR * ( 1 + G_TEXT / 100 ) ) .
*          IF G_MENGE NE 0.
**&->START CHANGE BY AD_CAIXIANG ON 20130604.
*            WA-JIAGE = WA-JINE / GT_ITAB-LFIMG.
**  WA-JIAGE = WA-JINE / G_MENGE.
*&->END CHANGE BY AD_CX.

**&->END CHANGE.
*          ELSE.
*            WA-JIAGE = 0.
*          ENDIF.
*     IF G_MENGE NE 0.
*       WA-JIAGE = ( G_DMBTR * ( 1 + G_TEXT / 100 ) ) / G_MENGE.
*     ELSE.
*       WA-JIAGE = 0.
*     ENDIF.
*&->END CHANGE .

        ENDIF.

      ENDIF.

    ENDIF.

*&---> START ADD BY AD_CAIXIANG ON 20130222 ECDK908753.
*&当交货单移动类型为 ‘671’ ‘673’时, 小计1/数量 计算价格,
    IF WA-BWART EQ ‘671‘ OR WA-BWART EQ ‘673‘.
      WA-JIAGE = G_KZWI1 / G_MENGE.
*& 金额:
      WA-JINE = WA-JIAGE *  GT_ITAB-LFIMG.
    ENDIF.
*&---> END ADD BY AD_CAIXIANG ON 20130222.

*&当移动类型为‘653’ ‘601’,通过交货凭证找到对应的开票凭证数据计算价格
    IF WA-BWART EQ ‘653‘ OR WA-BWART EQ ‘601‘ .

*&读取开票凭证
      READ TABLE LT_VBFA WITH KEY VBELV = WA-VGBEL
                                  POSNV = WA-VGPOS
                                  BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        VBFA-VBELN = LT_VBFA-VBELN.
        VBFA-POSNN = LT_VBFA-POSNN.
      ENDIF.

      READ TABLE LT_VBRP WITH KEY VBELN = VBFA-VBELN
                                  POSNR = VBFA-POSNN
                                  BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        G_KZWI1 = LT_VBRP-KZWI1.
        G_FKIMG = LT_VBRP-FKIMG.
      ENDIF.
*&计算价格
      IF G_FKIMG NE SPACE.
        WA-JIAGE = G_KZWI1 / G_FKIMG.

      ELSE.
        WA-JIAGE = 0.
      ENDIF.
*& 金额:
      WA-JINE = WA-JIAGE *  GT_ITAB-LFIMG.

    ENDIF.

**& 金额:
*    WA-JINE = WA-JIAGE *  GT_ITAB-LFIMG.
*& END ADD ON 20121128

*&S1.6.1: 读取条码:
    READ TABLE LT_MEAN WITH KEY MATNR = WA-MATNR
*                                MEINH = WA-MEINS
                          BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      WA-EAN11 = LT_MEAN-EAN11.
    ENDIF.

*S1.6.2:取规格:
    READ TABLE LT_MARA WITH KEY MATNR = WA-MATNR
                           BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      WA-GROES = LT_MARA-GROES.
*&->ADD BY AD_CAIXIANG
      WA-YLBID1 = LT_MARA-MATKL+0(4).
*&->END ADD.
    ENDIF.

*&->ADD BY AD_CAIXIANG
*&S1.6.2.1读取大类名称
    READ TABLE LT_YTLBCJ WITH KEY YLBID = WA-YLBID1 BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      WA-YDLNAM = LT_YTLBCJ-YLBNAME.
    ENDIF.
*&->END ADD.

*S1.6.3:取工厂描述:
    READ TABLE LT_T001W WITH KEY WERKS = WA-WERKS BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      WA-NAME1 = LT_T001W-NAME1.
    ENDIF.

*S1.6.5: 取件数:
    READ TABLE LT_MADQ WITH KEY MATNR = WA-MATNR
                                WERKS = WA-WERKS
                               BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      WA-YUMREZ1 = LT_MADQ-YUMREZ1.
    ENDIF.

*&S1.6.6:取数量:
    IF  WA-LFART = ‘ZLF‘ OR WA-LFART = ‘ZLR‘ OR WA-LFART = ‘ZLF2‘ OR WA-LFART = ‘ZLR2‘.

      READ TABLE LT_VBAP WITH KEY VBELN = WA-VGBEL
                                  POSNR = WA-VGPOS
                                  BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        WA-MENGE = LT_VBAP-KWMENG.
        WA-MAKTX = LT_VBAP-ARKTX.
      ENDIF.
*    ELSE.
**      WA-MENGE = EKPO-MENGE.
    ENDIF.

*&皮重:
    WA-JINZH  = WA-BRGEW  - WA-NTGEW.

*&订货件数
    IF WA-YUMREZ1 NE 0.
      WA-DINH = WA-MENGE / WA-YUMREZ1.
    ENDIF.

*&实发件数
    IF WA-YUMREZ1 NE 0.
      WA-SHFA = WA-LFIMG / WA-YUMREZ1.
    ENDIF.

*&找移入库位描述:
    IF WA-RESLO NE SPACE.
      READ TABLE LT_T001L WITH KEY WERKS = L_WERKS
                                   LGORT = WA-RESLO
                                   BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        WA-LGOBE1 = LT_T001L-LGOBE.
      ENDIF.
    ENDIF.

**S1.5.12:找移出库位描述:
    IF WA-LGORT NE SPACE.
      READ TABLE LT_T001L WITH KEY WERKS = WA-WERKS
                                   LGORT = WA-LGORT
                                   BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        WA-LGOBE2 = LT_T001L-LGOBE.
      ENDIF.

    ENDIF.

*& 找类型描述:
    READ TABLE LT_TVLKT WITH KEY LFART = WA-LFART BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      WA-VTEXT = LT_TVLKT-VTEXT.
    ENDIF.

*&S1.5.11:汇总数量:
    L_MENGE  = L_MENGE + WA-MENGE.
    L_LFIMG  = L_LFIMG + WA-LFIMG.
    L_JINZH  = L_JINZH + WA-JINZH.
    WA-NAME2 =  KNA1-NAME1.
    WA-NAME_TEXT = L_NAME_TEXT.

*& 单位转换:
    CALL FUNCTION ‘CONVERSION_EXIT_CUNIT_OUTPUT‘
      EXPORTING
        INPUT          = WA-MEINS
        LANGUAGE       = SY-LANGU
      IMPORTING
        OUTPUT         = WA-MEINS
      EXCEPTIONS
        UNIT_NOT_FOUND = 1
        OTHERS         = 2.

*&START ADD BY AD_CAIXIANG ON 201211206
    MOVE-CORRESPONDING WA TO GT_DATA.
    GT_DATA-MENGE = L_MENGE.
    GT_DATA-LFIMG = L_LFIMG.
    GT_DATA-JINZH = L_JINZH.

    COLLECT GT_DATA.
    CLEAR   GT_DATA.

    MODIFY GT_ITAB FROM WA.
    CLEAR: WA.
    CLEAR : L_MENGE, L_LFIMG, L_JINZH.

  ENDLOOP.
*&END ADD BY AD_CAIXIANG ON ...

*&筛选条件]
*&->START ADD BY AD_CAIXIANG ON 20130513 ECDK911373
  IF S_RESLO[] IS NOT INITIAL.
    DELETE GT_ITAB WHERE RESLO NOT IN S_RESLO.
    DELETE GT_DATA WHERE RESLO NOT IN S_RESLO.
  ENDIF.
*&->EDN ADD BY AD_CX.

*&S1.7: 检查是否取到数据:
  DESCRIBE TABLE GT_DATA LINES G_LEN.
  IF G_LEN EQ 0.
    MESSAGE I011 WITH ‘没有查询到符合条件的数据!‘.
    STOP.
  ENDIF.

ENDFORM.                    " frm_get_data

*&---------------------------------------------------------------------*
*&      Form  FRM_LFART
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_LFART .

  CLEAR:R_LFART[],R_LFART.
  R_LFART-SIGN = ‘I‘. R_LFART-OPTION = ‘EQ‘.
  R_LFART-LOW = ‘NLR‘.  APPEND R_LFART.
  R_LFART-LOW = ‘NL‘.   APPEND R_LFART.
  R_LFART-LOW = ‘NLCC‘. APPEND R_LFART.
  R_LFART-LOW = ‘NCR‘.  APPEND R_LFART.
  R_LFART-LOW = ‘ZLF‘.  APPEND R_LFART.
  R_LFART-LOW = ‘ZLR‘.  APPEND R_LFART.
*&->START ADD BY AD_CAIXIANG ON 20120126 ECDK907564
  R_LFART-LOW = ‘ZLF2‘. APPEND R_LFART.
  R_LFART-LOW = ‘ZLR2‘. APPEND R_LFART.
*&->END ADD BY AD_CAIXIANG

ENDFORM.                    " FRM_LFART

*&---------------------------------------------------------------------*
*&      Form  frm_output_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_ALV_OUTPUT.

  CHECK G_LEN NE 0.

*&S4.1: 设定输出字段:
  PERFORM FRM_FIELDCAT_GET.
  PERFORM FRM_EVENTS_SET.

*&S4.2:设定输出格式:
  PERFORM FRM_LAYOUT_SET.

  G_LEN = LINES( GT_DATA[] ).
  MESSAGE S013 WITH ‘找到数据:‘ G_LEN ‘条‘.

*&调用ALV函数输出:
  CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY‘
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
*     I_CALLBACK_PF_STATUS_SET = ‘SET_PF_STATUS‘
      I_CALLBACK_USER_COMMAND  = ‘USER_COMMAND‘
      IS_LAYOUT                = GS_LAYOUT
      IT_FIELDCAT              = GT_FIELDCAT
      I_SAVE                   = ‘A‘
*     it_events                = gt_event
    TABLES
      T_OUTTAB                 = GT_DATA
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.

ENDFORM.                    " FRM_ALV_OUTPUT.

*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
                        RS_SELFIELD TYPE SLIS_SELFIELD.
  DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID.

*&将变更的数据刷新
  CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR‘
    IMPORTING
      E_GRID = LR_GRID.
  CALL METHOD LR_GRID->CHECK_CHANGED_DATA.
  RS_SELFIELD-REFRESH = ‘X‘.

*  break ad_taoxb.

  CLEAR WA.
  CASE R_UCOMM.
    WHEN ‘&IC1‘.
*&Double deal with:
      CLEAR GT_DATA.
      READ TABLE  GT_DATA INDEX RS_SELFIELD-TABINDEX.
      IF SY-SUBRC EQ 0.
        PERFORM FRM_DETAIL_DISP.
      ENDIF.
*      CALL METHOD lr_grid->refresh_table_display.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.                    "USER_COMMAND

*&---------------------------------------------------------------------*
*&      ALV EVENT Form  f_pf_status_set
*&---------------------------------------------------------------------*
FORM F_PF_STATUS_SET  USING EXTAB TYPE SLIS_T_EXTAB.

  SET PF-STATUS ‘STANDARD‘ EXCLUDING EXTAB.

ENDFORM.                    " f_pf_status_set
*&---------------------------------------------------------------------*
*&      Form  FRM_FIELDCAT_GET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_FIELDCAT_GET .

  CLEAR GT_FIELDCAT.
  REFRESH GT_FIELDCAT.
*&设定输出的相关字段结构:
  MAR_ADD_FIELDCAT ‘VBELN‘     ‘交货单‘       ‘1‘  ‘‘ ‘10‘ ‘X‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘WERKS‘     ‘配出机构‘     ‘2‘  ‘‘ ‘6‘  ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘NAME1‘     ‘配出机构名称‘ ‘3‘  ‘‘ ‘15‘ ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘KUNNR‘     ‘配入机构‘     ‘5‘  ‘‘ ‘6‘  ‘ ‘ ‘‘ ‘X‘.
  MAR_ADD_FIELDCAT ‘NAME2‘     ‘配入机构名称‘ ‘6‘  ‘‘ ‘20‘ ‘ ‘ ‘‘ ‘‘.

  MAR_ADD_FIELDCAT ‘LGORT‘     ‘移出库位‘     ‘7‘ ‘‘ ‘6‘    ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘LGOBE2‘    ‘移出库位描述‘ ‘8‘ ‘‘ ‘15‘   ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘RESLO‘     ‘移入库位‘     ‘9‘  ‘‘ ‘6‘   ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘LGOBE1‘    ‘移入库位描述‘ ‘10‘  ‘‘ ‘15‘ ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘LIFEX‘     ‘融通单号‘     ‘12‘ ‘‘ ‘20‘ ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘LFART‘     ‘类型‘         ‘13‘ ‘‘ ‘5‘  ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘VTEXT‘     ‘交货类型描述‘ ‘14‘ ‘‘ ‘15‘ ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘YYCARNO‘   ‘车辆号‘       ‘15‘ ‘‘ ‘10‘ ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘BLDAT‘     ‘凭证日期‘     ‘17‘ ‘‘ ‘10‘ ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘ERZET‘     ‘时间‘         ‘17‘ ‘‘ ‘10‘ ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘WADAT_IST‘ ‘实际发货日期‘ ‘18‘ ‘‘ ‘10‘ ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘MENGE‘     ‘订货数量‘     ‘20‘ ‘‘ ‘10‘ ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘LFIMG‘     ‘实发数量‘     ‘21‘ ‘‘ ‘10‘ ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘JINZH‘     ‘皮重‘         ‘22‘ ‘‘ ‘10‘ ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘JINE‘      ‘金额‘         ‘22‘ ‘‘ ‘10‘ ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘KOSTK‘     ‘总拣配状态‘   ‘23‘ ‘‘ ‘6‘  ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘WBSTK‘     ‘移动总状态‘   ‘25‘ ‘‘ ‘8‘  ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT ‘NAME_TEXT‘ ‘制单人‘       ‘26‘ ‘‘ ‘10‘ ‘ ‘ ‘‘ ‘‘.
  "MAR_ADD_FIELDCAT ‘TDDAT‘ ‘计划日期‘ ‘16‘ ‘‘ ‘10‘ ‘ ‘ ‘ ‘.

ENDFORM.                    " FRM_FIELDCAT_GET
*&---------------------------------------------------------------------*
*&      Form  FRM_EVENTS_SET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_EVENTS_SET .

ENDFORM.                    " FRM_EVENTS_SET
*&---------------------------------------------------------------------*
*&      Form  FRM_LAYOUT_SET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_LAYOUT_SET .

  CLEAR GS_LAYOUT.
  MOVE:  ‘X‘  TO  GS_LAYOUT-ZEBRA,
         ‘X‘  TO  GS_LAYOUT-COLWIDTH_OPTIMIZE,
         ‘X‘  TO  GS_LAYOUT-DETAIL_POPUP.

ENDFORM.                    " FRM_LAYOUT_SET
*&---------------------------------------------------------------------*
*&      Form  FRM_DETAIL_DISP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DETAIL_DISP .
  DATA: LT_ITAB LIKE GT_ITAB OCCURS 0 WITH HEADER LINE.
  DATA: G_LEN2 TYPE SY-TABIX.

*&T1.找到需显示的数据:
  LT_ITAB[] = GT_ITAB[].
  IF P_DETAIL IS INITIAL.
    DELETE LT_ITAB WHERE VBELN NE GT_DATA-VBELN.
    SORT  LT_ITAB BY MATNR.
  ENDIF.

*&T2:获取结构:
  PERFORM FRM_FIELDCAT_GET2.

  G_LEN2 = LINES( LT_ITAB[] ).
  MESSAGE S013 WITH ‘找到数据:‘ G_LEN2 ‘条‘.

*&T3: 显示:
  CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY‘
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-CPROG
*     I_CALLBACK_PF_STATUS_SET = ‘SET_PF_STATUS‘
*     I_CALLBACK_USER_COMMAND  = ‘USER_COMMAND‘
      IS_LAYOUT                = GS_LAYOUT
      IT_FIELDCAT              = GT_FIELDCAT2
      I_SAVE                   = ‘A‘
*     it_events                = gt_event
    TABLES
      T_OUTTAB                 = LT_ITAB
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.

ENDFORM.                    " FRM_DETAIL_DISP
*&---------------------------------------------------------------------*
*&      Form  FRM_FIELDCAT_GET2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_FIELDCAT_GET2 .

  CLEAR GT_FIELDCAT2.
  REFRESH GT_FIELDCAT2.
*&设定输出的相关字段结构:
  MAR_ADD_FIELDCAT2 ‘VBELN‘     ‘交货单‘       ‘1‘  ‘‘ ‘10‘  ‘X‘ ‘‘   ‘‘.
  MAR_ADD_FIELDCAT2 ‘POSNR‘     ‘项次‘         ‘2‘  ‘‘ ‘5‘   ‘X‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘WERKS‘     ‘配出机构‘     ‘3‘  ‘‘ ‘6‘   ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘NAME1‘     ‘配出机构名称‘ ‘4‘  ‘‘ ‘15‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘KUNNR‘     ‘配入机构‘     ‘5‘  ‘‘ ‘6‘   ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘NAME2‘     ‘配入机构名称‘ ‘6‘  ‘‘ ‘20‘  ‘ ‘ ‘ ‘  ‘‘.

  MAR_ADD_FIELDCAT2 ‘LGORT‘     ‘移出库位‘     ‘7‘ ‘‘ ‘6‘    ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT2 ‘LGOBE2‘    ‘移出库位描述‘ ‘8‘ ‘‘ ‘15‘   ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT2 ‘RESLO‘     ‘移入库位‘     ‘9‘  ‘‘ ‘6‘   ‘ ‘ ‘‘ ‘‘.
  MAR_ADD_FIELDCAT2 ‘LGOBE1‘    ‘移入库位描述‘ ‘10‘  ‘‘ ‘15‘ ‘ ‘ ‘‘ ‘‘.

*  MAR_ADD_FIELDCAT2 ‘RESLO‘     ‘移出库位‘     ‘8‘  ‘‘ ‘6‘   ‘ ‘ ‘ ‘  ‘‘.
*  MAR_ADD_FIELDCAT2 ‘LGOBE1‘    ‘移出库位描述‘ ‘9‘  ‘‘ ‘15‘  ‘ ‘ ‘ ‘  ‘‘.
*  MAR_ADD_FIELDCAT2 ‘LGORT‘     ‘移入库位‘     ‘10‘ ‘‘ ‘6‘   ‘ ‘ ‘ ‘  ‘‘.
*  MAR_ADD_FIELDCAT2 ‘LGOBE2‘    ‘移入库位描述‘ ‘11‘ ‘‘ ‘15‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘LFART‘     ‘类型‘         ‘13‘ ‘‘ ‘5‘   ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘VTEXT‘     ‘交货类型描述‘ ‘14‘ ‘‘ ‘15‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘VGBEL‘     ‘参考凭证‘     ‘14‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘VGPOS‘     ‘参考项次‘     ‘14‘ ‘‘ ‘5‘   ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘MATNR‘     ‘商品编码‘     ‘15‘ ‘‘ ‘18‘  ‘ ‘ ‘ ‘  ‘X‘.
  MAR_ADD_FIELDCAT2 ‘EAN11‘     ‘条码‘         ‘16‘ ‘‘ ‘15‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘MAKTX‘     ‘商品名称‘     ‘17‘ ‘‘ ‘30‘  ‘ ‘ ‘ ‘  ‘‘.
*&->START ADD BY AD_CAIXIANG ON 20130514 ECDK911331
  MAR_ADD_FIELDCAT2 ‘YLBID1‘    ‘大类编码‘     ‘18‘ ‘‘ ‘15‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘YDLNAM‘    ‘大类名称‘     ‘18‘ ‘‘ ‘30‘  ‘ ‘ ‘ ‘  ‘‘.
*&->END ADD.

  MAR_ADD_FIELDCAT2 ‘MEINS‘     ‘单位‘         ‘19‘ ‘‘ ‘5‘   ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘YYCARNO‘   ‘车辆号‘       ‘20‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘BLDAT‘     ‘凭证日期‘     ‘23‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘ERZET‘     ‘时间‘         ‘23‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘WADAT_IST‘ ‘实际发货日期‘ ‘24‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘ANZPK‘     ‘包数‘         ‘25‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘GROES‘     ‘规格‘         ‘26‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘YUMREZ1‘   ‘件装数‘       ‘28‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘DINH‘      ‘订货件数‘     ‘29‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘MENGE‘     ‘订货数量‘     ‘30‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘SHFA‘      ‘实发件数‘     ‘31‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘LFIMG‘     ‘实发数量‘     ‘32‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘JINZH‘     ‘皮重‘         ‘33‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘NAME_TEXT‘ ‘制单人‘       ‘36‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘LIFNR‘     ‘供应商编码‘   ‘37‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘X‘.
  MAR_ADD_FIELDCAT2 ‘NAME3‘     ‘供应商名称‘   ‘38‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘JIAGE‘     ‘价格‘         ‘38‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  MAR_ADD_FIELDCAT2 ‘JINE‘      ‘金额‘         ‘38‘ ‘‘ ‘10‘  ‘ ‘ ‘ ‘  ‘‘.
  "MAR_ADD_FIELDCAT2 ‘TDDAT‘ ‘计划日期‘ ‘21‘ ‘‘ ‘10‘ ‘ ‘ ‘ ‘ ‘‘.

ENDFORM.                    " FRM_FIELDCAT_GET2
时间: 2024-10-04 12:14:29

YHLMR009 交货单查询的相关文章

SQL查询字段添加括号报错:Operand should contain 1 column(s)

SQL语句:查询连个字段的信息 SELECT (menu_id,menu_captions) FROM bsdb.menulist a WHERE a.menu_id like ('2_'); 然后,因为这是在存储过程中的一个语句所以,在执行存储过程的时候编译不会报错,但是执行的时候却汇报错:Operand should contain 1 column(s):原因不好解释: 下面是官方发解释(MYSQL):https://dev.mysql.com/doc/refman/5.0/en/row-

MySQL(九)之数据表的查询详解(SELECT语法)二

上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等.希望大家能都得到帮助! 在开始之前因为要多表查询,所以搭建好环境: 1)创建数据表suppliers 前面已经有一张表是book表,我们在建立一张suppliers(供应商)表和前面的book表对应. 也就是说 让book中s_id字段值指向suppliers的主键值,创建一个外键约束关系. 其实这里并没有达到真正的外键约束关系,只是模拟,让fruits中的s_id中

对象序列化和反序列--Hibernate的查询和新增极其相似

Hibernate几个关键字持久化,ORM(关系对象映射)(数据库中关系称作是一张表) 应用在项目中,刘一从写的查询代码,每次都挂掉,想要弄出测试数据,自己想着把查询出来的复杂数据弄到文件里自己要是去造那些复杂数据很麻烦public class Object1 { public static void main(String args[]){ HashMap<String, Object> obj=new HashMap<String,Object>(); obj.put(&quo

Oracle in 查询数据

问题描述: 查询所有的数据,查询结果:146360 select count(1) from bank_cde; in查询的获取部分数据,查询结果 :73080 select count(1) from bank_cde t where t.belongcode2 in('ABC','BCOM','BOC','CCB','CEB','CGB','CIB','CITIC','CMBC','ICBC','PAB','POST','SPDB'); not in查询数据,结果为0 select coun

sqlserver 全库查询 带架构

网上现有的全库查询,无法识别自定义架构的数据库结构: declare @str nvarchar(10) declare @tablename varchar(50) declare @colname varchar(50) declare @counts int declare @sql nvarchar(2000)--以上定义变量 declare cur1 cursor for select a.name tablename,B.name colname from sys.objects a

查询字段描述sql-postgresql

查询字段描述sql SELECT 'comment on column ' || n.nspname ||'.'|| c.relname || '.' || a.attname ||' is '''|| col_description(a.attrelid,a.attnum) ||''';' FROM pg_class as c join pg_attribute as a on a.attrelid = c.oid join pg_namespace n on c.relnamespace=n

基本的查询流【MSSQL】

4个DML(Data Manipulation Language)命令(SELECT INSERT UPDATE DELETE) 查询语法有一个特有的固定顺序 SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY 3.FROM子句数据源 本地SQL Server表.(单个SQL SELECT语句中可访问的表的数量不能超过256个) 子查询作为派生表,也称为子选择或内联视图. 视图或存储的SELECT语句. 表值用户定义的函数返回行和列. 分布式

数据库系统实现 第六章 查询执行

第六章 查询执行 查询执行也就是操作数据库的算法 一次查询的过程: 查询-->查询编译(第七章)-->查询执行(第六章)-->数据 查询编译预览 查询编译可以分为三个步骤: a)分析:构造分析树,用来表达查询和它的结构 b)查询重写,分析树被转化为初始查询计划,通常是代数表达式,之后初始的查询计划会被优化为一个时间更小的计划 c)物理计划生成,将查询计划转化成物理的计划, 为了选择更好的查询计划,需要判断 1)查询哪一个代数的等价形式是最有效的 2)对选中形式的每一个操作,所使用的算法选

说说WordPress的主查询函数-query_posts()

今天说说WordPress 的主查询函数 -query_posts(),因为我正在制作的主题里面多次用到了这个函数 . query_posts()查询函数决定了哪些文章出现在WordPress 主 循环(loop)中,正因为如此,query_posts函数仅用于修改主页循环(Loop),而不是在页面上生成次级循环.如果你希望在主循环外另外生 成循环,应该新建独立的WP_Query对象,用这些对象生成循环.在主循环外的循环上使用query_posts会导致主循环运行偏差,并可能在页面上 显示出你不