ABAP-炒股程序

会ABAP的话,SAP的炒股软件,你值得拥有。

但是我们会遇到sap是云服务器,限制了访问股票接口地址,例如限制:https://stock.gtimg.cnstock.gtimg.cn/data/index.php?appn=detail&action=data&c=sh603306https://stock.gtimg.cn。这时我们可以采用调用excel vba的方法,来获得股票信息。

下面我以供应商清单(低调)为例进行如下说明:

一、选择画面。画面中红框1,为需要查看的股票代码。其余红框字段后续解释。

二、点击刷新按钮可刷新,也可设置自动刷新(【备注】为买卖策略,画面中特殊颜色代表按预定策略需要操作);

三、点击股票代码,例如:0000603306(603306),可查看已成交明细,画面P_JE设置20,代表只查看20万以上的买卖交易;

四、提供代码和配置表信息如下,分为三个内容(A.配置表;B.excel模板及其宏代码;C.ABAP代码):

A.配置表:

B.excel模板及其宏代码:

模块1(code页)代码如下:

Sub line_format()

Worksheets("his").Range("A2:YY9999").Clear
''输出结果表
X = Application.CountA(Worksheets("code").Range("A:A"))  ''需要提取的代码
Y = 2
Z = 2
For i = 2 To X
   
    
   If Worksheets("code").Cells(i, 1) < 600000 Then dm = "sz"
   If Worksheets("code").Cells(i, 1) >= 600000 Then dm = "sh"
   
   dm = dm & Worksheets("code").Cells(i, 1)
   
   dm = "http://qt.gtimg.cn/q=" & dm
   
    With Worksheets("his").QueryTables.Add(Connection:="URL;" & dm, Destination:=Worksheets("his").Range("A" & Y))
    .RefreshStyle = xlOverwriteCells
'有三种,0:不插入行或列写入,1:插入部分列,2:插入列
    .Refresh
    End With
    

   Y = Y + 1
   
   Next

End Sub

Sub get_item()

    Worksheets("qty").Range("A2:YY9999").Clear

   If Worksheets("code").Cells(2, 1) < 600000 Then qm = "sz"
   If Worksheets("code").Cells(2, 1) >= 600000 Then qm = "sh"
   
   For J = 1 To 50
   

   wm = qm & Worksheets("code").Cells(2, 1) & "&p=" & J
   
   wm = "https://stock.gtimg.cn/data/index.php?appn=detail&action=data&c=" & wm
   
On Error GoTo Err_Handle
    With Worksheets("qty").QueryTables.Add(Connection:="URL;" & wm, Destination:=Worksheets("qty").Range("A" & J))
    .RefreshStyle = xlOverwriteCells
'有三种,0:不插入行或列写入,1:插入部分列,2:插入列  xlInsertDeleteCells   xlOverwriteCells
    '.Refresh
    .Refresh BackgroundQuery:=False
    
    End With
   Next
   

Err_Handle:

    Exit Sub   '如果没有这个退出过程语句,会一直执行下去
End Sub

模块2(his页)代码如下:

Sub line_format()

   Application.VBE.ActiveVBProject.VBComponents.Remove Application.VBE.ActiveVBProject.VBComponents("模块1")
   Application.VBE.ActiveVBProject.VBComponents.Remove Application.VBE.ActiveVBProject.VBComponents("模块3")
   
   '模板文件有2个sheet
   
   num = Workbooks.Count
   If num = 1 Then
    ActiveWorkbook.Save
    Application.DisplayAlerts = False
    Application.Quit
   Else
    ThisWorkbook.Close Savechanges:=True
   End If

End Sub

模块3(qty页)代码如下:

Sub line_format()

   X = Application.CountA(Worksheets("his").Range("A:A"))
   Worksheets("his").Range("A2:" & "A" & X).TextToColumns other:=True, otherchar:="~"
   
End Sub

Sub get_item()

    X = Application.CountA(Worksheets("qty").Range("A:A"))  ''需要提取的代码
    
If X > 0 Then
   Worksheets("qty").Range("A1:A50").TextToColumns other:=True, otherchar:="|"
   Application.DisplayAlerts = False
   Worksheets("qty").Range("A1:A50").TextToColumns other:=True, otherchar:=""""
   
Else

End If
   
   
End Sub
 

C.ABAP代码:


REPORT ZCMSSTOCT2.


TABLES: ZSTOCK_LIST.

*--------------------------------------------------------------------*
*  TYPES
*--------------------------------------------------------------------*
TYPES: BEGIN OF TY_SNUM,
        NUM(6) TYPE N,
       END OF TY_SNUM.

TYPES: BEGIN OF TY_SL_SNUM,
    SIGN TYPE CHAR1,
    OPTION TYPE CHAR2,
    LOW TYPE CHAR6,
    HIGH TYPE CHAR6,
  END OF TY_SL_SNUM.

  "下载实时数据,类型与下载的数据一致。
  TYPES: BEGIN OF TY_STRUCT,
      UNKN TYPE CHAR20,     "未知
      NAME TYPE STRING,     "股票名字
      CODE TYPE STRING,     "股票代码
      CURR TYPE STRING,     "当前价格;
      YCLOS TYPE STRING,    "昨日收盘价;
      OPEN TYPE STRING,     "今日开盘价
      TOTAL TYPE STRING,    "成交的股票数
      BUYF TYPE STRING,     "外盘
      SALEF TYPE STRING,    "内盘
      BUY12 TYPE STRING,    "买一,报价
      BUY11 TYPE STRING,    "买一,数量
      BUY22 TYPE STRING,    "买二,报价
      BUY21 TYPE STRING,    "买二,数量
      BUY32 TYPE STRING,    "买三,报价
      BUY31 TYPE STRING,    "买三,数量
      BUY42 TYPE STRING,    "买四,报价
      BUY41 TYPE STRING,    "买四,数量
      BUY52 TYPE STRING,    "买五,报价
      BUY51 TYPE STRING,    "买五,数量
      SALE12 TYPE STRING,   "卖一,报价
      SALE11 TYPE STRING,   "卖一,数量
      SALE22 TYPE STRING,   "卖二,报价
      SALE21 TYPE STRING,   "卖二,数量
      SALE32 TYPE STRING,   "卖三,报价
      SALE31 TYPE STRING,   "卖三,数量
      SALE42 TYPE STRING,   "卖四,报价
      SALE41 TYPE STRING,   "卖四,数量
      SALE52 TYPE STRING,   "卖五,报价
      SALE51 TYPE STRING,   "卖五,数量
      DEAL TYPE STRING,     "最近逐笔成交
      DATETIME TYPE STRING, "时间
      UPDWN TYPE STRING,    "涨跌
      UPDWNP TYPE STRING,   "涨跌%
      HIGH TYPE STRING,     "当日最高价
      LOW TYPE STRING,      "今日最低价
      PRCAMT TYPE STRING,   "价格/成交量(手)/成交额
      NUMBER TYPE STRING,   "成交量(手)
      AMOUNT TYPE STRING,   "成交额(万)
      CHRN TYPE STRING,     "换手率
      PERATIO TYPE STRING,  "市盈率
      UNKN1 TYPE STRING,"
      TOP TYPE STRING,      "最高
      LOWEST TYPE STRING,   "最低
      SWING TYPE STRING,    "振幅
      MARKETV TYPE STRING,  "流通市值
      TOTALV TYPE STRING,   "总市值
      PB TYPE STRING,       "市净率
      HLIMIT TYPE STRING,   "涨停价
      STOPP TYPE STRING,    "跌停价
    END OF TY_STRUCT.

TYPES:BEGIN OF TY_LIST,
        NAME         TYPE CHAR20,    "股票名字
        CODE         TYPE CHAR10,   "股票代码
        CODE1        TYPE CHAR10,   "股票代码
        CURR         TYPE DMBTR,    "当前价格;
        YCLOS        TYPE DMBTR,    "昨日收盘价;
        OPEN         TYPE DMBTR,    "今日开盘价
        TOTAL        TYPE DMBTR,    "成交的股票数
        BUYF         TYPE DMBTR,    "外盘
        SALEF        TYPE DMBTR,    "内盘
        BUY12        TYPE DMBTR,    "买一,报价
        BUY11        TYPE DEC10,    "买一,数量
        BUY22        TYPE DMBTR,    "买二,报价
        BUY21        TYPE DEC10,    "买二,数量
        BUY32        TYPE DMBTR,    "买三,报价
        BUY31        TYPE DEC10,    "买三,数量
        BUY42        TYPE DMBTR,    "买四,报价
        BUY41        TYPE DEC10,    "买四,数量
        BUY52        TYPE DMBTR,    "买五,报价
        BUY51        TYPE DEC10,    "买五,数量
        SALE12       TYPE DMBTR,    "卖一,报价
        SALE11       TYPE DEC10,    "卖一,数量
        SALE22       TYPE DMBTR,    "卖二,报价
        SALE21       TYPE DEC10,    "卖二,数量
        SALE32       TYPE DMBTR,    "卖三,报价
        SALE31       TYPE DEC10,    "卖三,数量
        SALE42       TYPE DMBTR,    "卖四,报价
        SALE41       TYPE DEC10,    "卖四,数量
        SALE52       TYPE DMBTR,    "卖五,报价
        SALE51       TYPE DEC10,    "卖五,数量
        DEAL         TYPE STRING,   "最近逐笔成交
        DATE         TYPE SY-DATUM, "时间
        TIME         TYPE SY-UZEIT,
        UPDWN        TYPE DMBTR,    "涨跌
        UPDWNP       TYPE DMBTR,    "涨跌%
        HIGH         TYPE DMBTR,    "当日最高价
        LOW          TYPE DMBTR,    "今日最低价
        PRCAMT       TYPE STRING,   "价格/成交量(手)/成交额
        NUMBER       TYPE DMBTR,    "总手
        AMOUNT       TYPE DMBTR,    "成交额(万)
        CHRN         TYPE DMBTR,    "换手率
        PERATIO      TYPE DMBTR,    "市盈率
        TOP          TYPE DMBTR,    "最高
        LOWEST       TYPE DMBTR,    "最低
        SWING        TYPE DMBTR,    "振幅
        MARKETV      TYPE DMBTR,    "流通市值
        TOTALV       TYPE DMBTR,    "总市值
        PB           TYPE DMBTR,    "市净率
        HLIMIT       TYPE DMBTR,    "涨停价
        STOPP        TYPE DMBTR,    "跌停价
     END OF TY_LIST.

TYPES: BEGIN OF TY_INTERNAL,
        _NUMBER        TYPE I,            "序列号
        _EXCP          TYPE C,            "需要在LAYOUT-EXCP_FNAME中指定,绿灯3,红灯1,黄灯2"
        _CHECK         TYPE C,            "复选框,还需要在FCAT中设置成CHECKBOX,记录用户的选择
        _BOX           TYPE C,            "需要在LAYOUT-BOX_NAME中指定,记录用户的选择,跟_BOX不同,记录的是ALV控件的标准选择框,
        _DELETE        TYPE C,            "记录删除标识X"
        _ACTION        TYPE C,            "用户操作,插入I,更新U,删除D"
        _ROW_ID        TYPE SYTABIX,      "行项目ID"
        _TABIX         TYPE SYTABIX,      "引用的表行标识"
        _LINE_COLOR(4) TYPE C,            "行项目的颜色"
        _FIELD_STYLE   TYPE LVC_T_STYL,   "行项目的样式"
        _CELL_COLORS   TYPE LVC_T_SCOL ,  "颜色控制
        _MESS_TYPE     TYPE C,            "消息类型,用于数据检查"
        _MESSAGE       TYPE CHAR255,      "行项目的消息内容"
        COST           TYPE ZSTOCK_LIST-COST,
        QTY            TYPE ZSTOCK_LIST-QTY,
        GET            TYPE ZSTOCK_LIST-COST,
        MAI            TYPE CHAR10,
        ZGET           TYPE ZSTOCK_LIST-HISC,  "总收益(当前收益扣除历史成本)
        PD             TYPE CHAR10,
        CGZ            TYPE CHAR3,
        CGZMS          TYPE CHAR20,
        BZ             TYPE CHAR25,
      END OF TY_INTERNAL.

TYPES: BEGIN OF TY_TYPE.
        INCLUDE TYPE TY_INTERNAL.
        INCLUDE TYPE TY_LIST.
       TYPES END OF TY_TYPE.

TYPES: BEGIN OF TY_ITEMC,
        XH    TYPE STRING,    "序号
        ZTIME TYPE STRING,    "时间
        JE    TYPE STRING,    "金额
        DF    TYPE STRING,    "差异判断
        SS    TYPE STRING,    "数量
        TJE   TYPE STRING,    "总金额
        FS    TYPE STRING,    "方式
  END OF TY_ITEMC.

TYPES:BEGIN OF TY_ITEM,
      XH    TYPE I,         "序号
      ZTIME TYPE SY-UZEIT,  "时间
      JE    TYPE STRING,    "金额
      DF    TYPE DMBTR,     "差异判断
      SS    TYPE DEC10,     "数量
      TJE   TYPE DMBTR,     "总金额
      FS    TYPE CHAR10,    "方式
     END OF TY_ITEM.

TYPES: BEGIN OF TY_ALV.
        INCLUDE TYPE TY_INTERNAL.
        INCLUDE TYPE TY_ITEM.
TYPES: JS      TYPE DEC10.     "计数
       TYPES END OF TY_ALV.

TYPES: BEGIN OF TY_CHARLIST,
    NAME    TYPE CHAR10,    "股票名字
    CODE    TYPE CHAR10,    "股票代码
    CURR    TYPE CHAR10,    "当前价格;
    YCLOS   TYPE CHAR10,    "昨日收盘价;
    OPEN    TYPE CHAR10,    "今日开盘价
    TOTAL   TYPE CHAR10,    "成交的股票数
    BUYF    TYPE CHAR10,    "外盘
    SALEF   TYPE CHAR10,    "内盘
    BUY12   TYPE CHAR8,     "买一,报价
    BUY11   TYPE CHAR10,    "买一,数量
    BUY22   TYPE CHAR8,     "买二,报价
    BUY21   TYPE CHAR10,    "买二,数量
    BUY32   TYPE CHAR8,     "买三,报价
    BUY31   TYPE CHAR10,    "买三,数量
    BUY42   TYPE CHAR8,     "买四,报价
    BUY41   TYPE CHAR10,    "买四,数量
    BUY52   TYPE CHAR8,     "买五,报价
    BUY51   TYPE CHAR10,    "买五,数量
    SALE12  TYPE CHAR8,     "卖一,报价
    SALE11  TYPE CHAR10,    "卖一,数量
    SALE22  TYPE CHAR8,     "卖二,报价
    SALE21  TYPE CHAR10,    "卖二,数量
    SALE32  TYPE CHAR8,     "卖三,报价
    SALE31  TYPE CHAR10,    "卖三,数量
    SALE42  TYPE CHAR8,     "卖四,报价
    SALE41  TYPE CHAR10,    "卖四,数量
    SALE52  TYPE CHAR8,     "卖五,报价
    SALE51  TYPE CHAR10,    "卖五,数量
    DEAL    TYPE STRING,    "最近逐笔成交
    DATE    TYPE SY-DATUM,  "时间
    TIME    TYPE SY-UZEIT,
    UPDWN   TYPE CHAR10,    "涨跌
    UPDWNP  TYPE CHAR10,    "涨跌%
    HIGH    TYPE CHAR10,    "当日最高价
    LOW     TYPE CHAR10,    "今日最低价
    PRCAMT  TYPE STRING,    "价格/成交量(手)/成交额
    NUMBER  TYPE CHAR10,    "总手
    AMOUNT  TYPE CHAR10,    "成交额(万)
    CHRN    TYPE CHAR10,    "换手率
    PERATIO TYPE CHAR10,    "市盈率
    TOP     TYPE CHAR10,    "最高
    LOWEST  TYPE CHAR10,    "最低
    SWING   TYPE CHAR10,    "振幅
    MARKETV TYPE CHAR10,    "流通市值
    TOTALV  TYPE CHAR10,    "总市值
    PB      TYPE CHAR10,    "市净率
    HLIMIT  TYPE CHAR10,    "涨停价
    STOPP   TYPE CHAR10,    "跌停价
END OF TY_CHARLIST.
CLASS LCL_EVENT DEFINITION.
  PUBLIC SECTION.
    METHODS: HANDLE_CLOSE
                  FOR EVENT CLOSE OF CL_GUI_DIALOGBOX_CONTAINER
      IMPORTING SENDER.
ENDCLASS.

CLASS LCL_EVENT IMPLEMENTATION.

  METHOD HANDLE_CLOSE.
    CALL METHOD SENDER->SET_VISIBLE
      EXPORTING
        VISIBLE = SPACE.
  ENDMETHOD.
ENDCLASS.
*--------------------------------------------------------------------*
*  DATA
*--------------------------------------------------------------------*
DATA:
  F_PICTURE     TYPE REF TO CL_GUI_PICTURE,
  R_PICTURE     TYPE REF TO CL_GUI_PICTURE,
  Z_PICTURE     TYPE REF TO CL_GUI_PICTURE,
  Y_PICTURE     TYPE REF TO CL_GUI_PICTURE,
  F_CONTAINER   TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
  R_CONTAINER   TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
  Y_CONTAINER   TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
  Z_CONTAINER   TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
  G_GRID        TYPE REF TO CL_GUI_ALV_GRID.

*  清单代码清单
DATA: IT_SNUM   TYPE STANDARD TABLE OF TY_SNUM.
DATA: IT_TAB    TYPE STANDARD TABLE OF TY_TYPE.
DATA: IT_ALV    TYPE STANDARD TABLE OF TY_ALV.

DATA:
  WA_SNUM       TYPE TY_SNUM,
  WA_TAB        TYPE TY_TYPE,
  WA_ALV        TYPE TY_ALV,
  F_URL         TYPE CNDP_URL,
  R_URL         TYPE CNDP_URL,
  Z_URL         TYPE CNDP_URL,
  Y_URL         TYPE CNDP_URL,
  STOCK_URL(20) TYPE C,
  OK_CODE       LIKE SY-UCOMM,
  GV_SNUM(6)    TYPE C,
  GS_RANGE_SNUM TYPE TY_SL_SNUM,
  GV_STATUS     TYPE CHAR20,
  GV_CODE       TYPE TY_TYPE-CODE,
  GS_TABLE      TYPE TY_CHARLIST,
  GV_TABIDX     TYPE SY-TABIX,
  GS_LAYOUT     TYPE LVC_S_LAYO,
  WA_LAYOUT     TYPE LVC_S_LAYO,
  GT_FIELDCAT   TYPE LVC_T_FCAT,
  IT_FIELDCAT   TYPE LVC_T_FCAT,
  GT_ALV_SORT   TYPE LVC_T_SORT,
  X_SAVE        TYPE C,
  GS_VARIANT    TYPE DISVARIANT,
  G_TITLE       TYPE LVC_TITLE.

*----------------------------------------------------------------------*
* CLASS lcl_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_RECEIVER DEFINITION.
  PUBLIC SECTION.
    METHODS:
      HANDLE_FINISHED FOR EVENT FINISHED OF CL_GUI_TIMER.

ENDCLASS. "lcl_receiver DEFINITION


CLASS LCL_RECEIVER IMPLEMENTATION.
  METHOD HANDLE_FINISHED.
    CALL METHOD CL_GUI_CFW=>SET_NEW_OK_CODE
      EXPORTING
        NEW_CODE = '&NTE'.
  ENDMETHOD. "handle_finished
ENDCLASS. "lcl_receiver IMPLEMENTATION

DATA:
  RECEIVER TYPE REF TO LCL_RECEIVER,
  TIMER    TYPE REF TO CL_GUI_TIMER.

*--------------------------------------------------------------------*
*  屏幕参数定义
*--------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF SCREEN 101.
SELECT-OPTIONS: OP1_SNUM  FOR ZSTOCK_LIST-CODE MATCHCODE OBJECT ZSTOCK_HELP1."gv_snum.
SELECTION-SCREEN END OF SCREEN 101.

SELECT-OPTIONS:OP_SNUM FOR ZSTOCK_LIST-CODE MATCHCODE OBJECT ZSTOCK_HELP1.   "gv_snum.
PARAMETERS: P_TIME TYPE INT4 DEFAULT 60.
PARAMETERS: P_COL TYPE CHAR1 AS CHECKBOX DEFAULT ' '."颜色控制。
PARAMETERS: P_AUTO TYPE CHAR1 AS CHECKBOX DEFAULT ' '."自动刷新
PARAMETERS: P_JE TYPE INT4 DEFAULT 20.
PARAMETERS: P_ZF(8) TYPE P DECIMALS 2.


*--------------------------------------------------------------------*
*  INITIALIZATION
*--------------------------------------------------------------------*
INITIALIZATION.
*默认自己设的变式U+登录用户名
  PERFORM INIT_VARIANT.


  GV_STATUS = SY-UZEIT.

*--------------------------------------------------------------------*
*  START-OF-SELECTION
*--------------------------------------------------------------------*
START-OF-SELECTION .

  CREATE OBJECT TIMER.
  CREATE OBJECT RECEIVER.
  SET HANDLER RECEIVER->HANDLE_FINISHED FOR TIMER.
  TIMER->INTERVAL = P_TIME.


  PERFORM SET_NUMBER TABLES OP_SNUM[] USING ''.
  PERFORM READ_DATA.

  PERFORM DIS_PREPARE_LAYOUT CHANGING GS_LAYOUT.
*  PERFORM DIS_PREPARE_SORT CHANGING GT_ALV_SORT.
  PERFORM DIS_PREPARE_FIELD_CATALOG CHANGING GT_FIELDCAT.
  PERFORM DIS_SHOW_DATA_ALV.


*&---------------------------------------------------------------------*
*& Form READ_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM READ_DATA.


  DATA: L_TMP         TYPE STRING,
        L_STR         TYPE STRING,
        L_URL         TYPE STRING.


  IF IT_SNUM[] IS INITIAL.
    RETURN.
  ENDIF.

  CLEAR: IT_TAB,IT_TAB[].
* 取得数据
  PERFORM GET_DATA.

  PERFORM MODIFY_BEFORE_DIS.
  PERFORM MOVE_TO_SCREEN.

ENDFORM. "READ_DATA
*&---------------------------------------------------------------------*
*&      Form  move_to_screen
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM MOVE_TO_SCREEN.
  IF GV_CODE IS NOT INITIAL.
    READ TABLE IT_TAB  INTO WA_TAB WITH KEY CODE = GV_CODE.
    IF SY-SUBRC = 0.
      MOVE-CORRESPONDING WA_TAB TO GS_TABLE.
    ELSE.
      CLEAR GS_TABLE.
    ENDIF.
  ENDIF.
  CALL METHOD TIMER->RUN.
ENDFORM.                    "move_to_screen

*&---------------------------------------------------------------------*
*&      Form  modify_before_dis
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM MODIFY_BEFORE_DIS.
  "颜色 ,5是绿色,6是红色。
  DATA LS_CELLCOLOR TYPE LVC_S_SCOL ."颜色控制
  DEFINE CHANGE_FIELD_COLOR.
    clear ls_cellcolor.
    ls_cellcolor-fname = &1 .
    ls_cellcolor-color-col = &2 .
    ls_cellcolor-color-int = '1' .
    ls_cellcolor-color-inv = '0' .
    append ls_cellcolor to WA_TAB-_cell_colors .
  END-OF-DEFINITION.

  DATA : C_RED TYPE LVC_S_SCOL-COLOR-COL VALUE 5.
  DATA : C_GRE TYPE LVC_S_SCOL-COLOR-COL VALUE 7.

  LOOP AT IT_TAB INTO WA_TAB.

    IF P_COL IS NOT INITIAL.

      "外盘总是红色
      IF WA_TAB-BUYF IS NOT INITIAL.
        CHANGE_FIELD_COLOR 'BUYF' C_RED.
      ENDIF.
      "内秀总是绿色。
      IF WA_TAB-SALEF IS NOT INITIAL.
        CHANGE_FIELD_COLOR 'SALEF' C_GRE.
      ENDIF.

      IF WA_TAB-UPDWN < 0.
        WA_TAB-_EXCP = 3.
        CHANGE_FIELD_COLOR 'CURR' C_RED.
        CHANGE_FIELD_COLOR 'UPDWN' C_RED.
*        CHANGE_FIELD_COLOR 'UPDWNP' C_RED.
      ELSEIF WA_TAB-UPDWN = 0.
        WA_TAB-_EXCP = 2.
      ELSE.
        WA_TAB-_EXCP = 1.
        CHANGE_FIELD_COLOR 'CURR' C_GRE.
        CHANGE_FIELD_COLOR 'UPDWN' C_GRE.
*        CHANGE_FIELD_COLOR 'UPDWNP' C_GRE.
      ENDIF.

      IF WA_TAB-OPEN IS NOT INITIAL.
        IF WA_TAB-OPEN > WA_TAB-YCLOS.
          CHANGE_FIELD_COLOR 'OPEN' C_GRE.
        ELSEIF WA_TAB-OPEN < WA_TAB-YCLOS.
          CHANGE_FIELD_COLOR 'OPEN' C_RED.
        ENDIF.
      ENDIF.

      IF WA_TAB-HIGH IS NOT INITIAL.
        IF WA_TAB-HIGH > WA_TAB-YCLOS.
          CHANGE_FIELD_COLOR 'HIGH' C_GRE.
        ELSEIF WA_TAB-HIGH < WA_TAB-YCLOS.
          CHANGE_FIELD_COLOR 'HIGH' C_RED.
        ENDIF.
      ENDIF.

      IF WA_TAB-LOW IS NOT INITIAL.
        IF WA_TAB-LOW > WA_TAB-YCLOS.
          CHANGE_FIELD_COLOR 'LOW' C_GRE.
        ELSEIF WA_TAB-LOW < WA_TAB-YCLOS.
          CHANGE_FIELD_COLOR 'LOW' C_RED.
        ENDIF.
      ENDIF.
    ELSE.
      IF WA_TAB-UPDWNP > P_ZF AND WA_TAB-QTY IS NOT INITIAL.
        WA_TAB-_EXCP = 1.
        WA_TAB-MAI = '销售客户'.
        WA_TAB-BZ  = '大于画面增长率,S'.
*        CHANGE_FIELD_COLOR 'CURR' C_RED.
*        CHANGE_FIELD_COLOR 'UPDWNP' C_GRE.
      ELSEIF WA_TAB-UPDWN = 0.
*        WA_TAB-_EXCP = 2.
      ELSE.
*        WA_TAB-_EXCP = 1.
*        CHANGE_FIELD_COLOR 'CURR' C_GRE.
*        CHANGE_FIELD_COLOR 'UPDWN' C_GRE.
*        CHANGE_FIELD_COLOR 'UPDWNP' C_GRE.
      ENDIF.
      IF WA_TAB-UPDWNP <= '-3.00'.
        CHANGE_FIELD_COLOR 'NAME' C_RED.
        WA_TAB-BZ  = '补仓机会'.
      endif.
    ENDIF.

    IF WA_TAB-TOTAL IS NOT INITIAL.
      WA_TAB-TOTAL = WA_TAB-TOTAL / 10000.
    ENDIF.
    IF WA_TAB-SALEF IS NOT INITIAL.
      WA_TAB-SALEF = WA_TAB-SALEF / 10000.
    ENDIF.
    IF WA_TAB-BUYF IS NOT INITIAL.
      WA_TAB-BUYF = WA_TAB-BUYF / 10000.
    ENDIF.
    IF WA_TAB-NUMBER IS NOT INITIAL.
      WA_TAB-NUMBER = WA_TAB-NUMBER / 10000.
    ENDIF.

    IF WA_TAB-UPDWNP = '0.00' .
      CLEAR WA_TAB-UPDWNP.
    ENDIF.
    MODIFY IT_TAB FROM WA_TAB.
  ENDLOOP.
ENDFORM.                    "modify_before_dis

*&---------------------------------------------------------------------*
*&      Form  DIS_PREPARE_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PS_LAYOUT  text
*----------------------------------------------------------------------*
FORM DIS_PREPARE_LAYOUT CHANGING PS_LAYOUT TYPE LVC_S_LAYO.
  G_TITLE = SY-TITLE.
  PS_LAYOUT-CWIDTH_OPT = 'X'.
  PS_LAYOUT-ZEBRA      = 'X'.
  PS_LAYOUT-BOX_FNAME  = '_BOX'.
  PS_LAYOUT-SEL_MODE   = 'A'.
*  PS_LAYOUT-EXCP_FNAME = '_EXCP'.
  PS_LAYOUT-EXCP_LED = 'X'.

  PS_LAYOUT-INFO_FNAME = '_LINE_COLOR'.
  PS_LAYOUT-GRID_TITLE = G_TITLE.
  PS_LAYOUT-STYLEFNAME = '_FIELD_STYLE'.
  PS_LAYOUT-DETAILINIT = 'X' . " 是否可以弹出细节屏幕
  PS_LAYOUT-DETAILTITL = G_TITLE. " 细节屏幕标题
  PS_LAYOUT-CTAB_FNAME = '_CELL_COLORS'.

ENDFORM. " prepare_layout
*&---------------------------------------------------------------------*
*&      Form  DIS_PREPARE_SORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PT_SORT    text
*----------------------------------------------------------------------*
FORM DIS_PREPARE_SORT CHANGING PT_SORT TYPE LVC_T_SORT.
  DATA: LS_SORT TYPE LVC_S_SORT.
  CLEAR LS_SORT.
  LS_SORT-FIELDNAME = 'GET'.
  LS_SORT-UP = 'X'.
  APPEND LS_SORT TO PT_SORT.
ENDFORM.                    "dis_preparc_sort

*&---------------------------------------------------------------------*
*&      Form  DIS_PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PT_FIELDCAT  text
*----------------------------------------------------------------------*
FORM DIS_PREPARE_FIELD_CATALOG CHANGING PT_FIELDCAT TYPE LVC_T_FCAT .
  CLEAR PT_FIELDCAT[].
  DATA LS_FCAT TYPE LVC_S_FCAT .

  CLEAR LS_FCAT .
*  LS_FCAT-COLTEXT     = '状态'.
*  LS_FCAT-FIELDNAME   = '_EXCP'.
*  LS_FCAT-OUTPUTLEN = 1.
*  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = 'ZGET'.
  LS_FCAT-FIELDNAME   = 'ZGET'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-FIX_COLUMN  = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = 'MT'.
  LS_FCAT-FIELDNAME   = 'GET'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-FIX_COLUMN  = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
*  ls_fcat-no_zero     = 'X'.
  LS_FCAT-COLTEXT     = 'COST'.
  LS_FCAT-FIELDNAME   = 'COST'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-FIX_COLUMN  = 'X'.
*  ls_fcat-no_zero     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-COLTEXT     = 'SL'.
  LS_FCAT-FIELDNAME   = 'QTY'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-FIX_COLUMN  = 'X'.
*  ls_fcat-no_zero     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.

  LS_FCAT-COLTEXT     = '供应商编号'.
  LS_FCAT-FIELDNAME   = 'CODE1'.
  LS_FCAT-HOTSPOT   = 'X'.
  LS_FCAT-FIX_COLUMN  = 'X'.
*  ls_fcat-no_zero     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.

  LS_FCAT-COLTEXT     = '备注'.
  LS_FCAT-FIELDNAME   = 'BZ'.
  LS_FCAT-HOTSPOT   = 'X'.
  LS_FCAT-FIX_COLUMN  = 'X'.
*  ls_fcat-no_zero     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.

  LS_FCAT-COLTEXT     = '供应商名称'.
  LS_FCAT-FIELDNAME   = 'NAME'.
  LS_FCAT-HOTSPOT     = 'X'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-F4AVAILABL  = 'X'.
  LS_FCAT-FIX_COLUMN  = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.

  LS_FCAT-COLTEXT     = '供应商类型'.
  LS_FCAT-FIELDNAME   = 'MAI'.
  LS_FCAT-HOTSPOT     = 'X'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-F4AVAILABL  = 'X'.
  LS_FCAT-FIX_COLUMN  = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.

  LS_FCAT-COLTEXT     = 'UP'.
  LS_FCAT-FIELDNAME   = 'UPDWNP'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-FIX_COLUMN  = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '当前金额'.
  LS_FCAT-FIELDNAME   = 'CURR'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-FIX_COLUMN  = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '涨跌'.
  LS_FCAT-FIELDNAME   = 'UPDWN'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-FIX_COLUMN  = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.

  LS_FCAT-COLTEXT     = '总S(万)'.
  LS_FCAT-FIELDNAME   = 'TOTAL'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '外(万)'.
  LS_FCAT-FIELDNAME   = 'SALEF'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '内(万)'.
  LS_FCAT-FIELDNAME   = 'BUYF'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
*  ls_fcat-coltext     = '买一价'.
*  ls_fcat-fieldname   = 'BUY12'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '买一量'.
*  ls_fcat-fieldname   = 'BUY11'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '买二价'.
*  ls_fcat-fieldname   = 'BUY22'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '买二量'.
*  ls_fcat-fieldname   = 'BUY21'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '买三价'.
*  ls_fcat-fieldname   = 'BUY32'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '买三量'.
*  ls_fcat-fieldname   = 'BUY31'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '买四价'.
*  ls_fcat-fieldname   = 'BUY42'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '买四量'.
*  ls_fcat-fieldname   = 'BUY41'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '买五价'.
*  ls_fcat-fieldname   = 'BUY52'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '买五量'.
*  ls_fcat-fieldname   = 'BUY51'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '卖一价'.
*  ls_fcat-fieldname   = 'SALE12'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '卖一量'.
*  ls_fcat-fieldname   = 'SALE11'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '卖二价'.
*  ls_fcat-fieldname   = 'SALE22'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '卖二量'.
*  ls_fcat-fieldname   = 'SALE21'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '卖三价'.
*  ls_fcat-fieldname   = 'SALE32'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '卖三量'.
*  ls_fcat-fieldname   = 'SALE31'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '卖四价'.
*  ls_fcat-fieldname   = 'SALE42'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '卖四量'.
*  ls_fcat-fieldname   = 'SALE41'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '卖五价'.
*  ls_fcat-fieldname   = 'SALE52'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '卖五量'.
*  ls_fcat-fieldname   = 'SALE51'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
*  ls_fcat-coltext     = '最近逐笔成交'.
*  ls_fcat-fieldname   = 'DEAL'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.

  LS_FCAT-COLTEXT     = '最高'.
  LS_FCAT-FIELDNAME   = 'HIGH'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '最低'.
  LS_FCAT-FIELDNAME   = 'LOW'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.

  LS_FCAT-COLTEXT     = '开P'.
  LS_FCAT-FIELDNAME   = 'OPEN'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '昨S'.
  LS_FCAT-FIELDNAME   = 'YCLOS'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.

*  ls_fcat-coltext     = '价格/成交量(手)/成交额'.
*  ls_fcat-fieldname   = 'PRCAMT'.
*  ls_fcat-no_zero     = 'X'.
*  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
  LS_FCAT-COLTEXT     = 'CJL(万S)'.
  LS_FCAT-FIELDNAME   = 'NUMBER'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-COL_OPT     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = 'CJJ(W)'.
  LS_FCAT-FIELDNAME   = 'AMOUNT'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-COL_OPT     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = 'HS率'.
  LS_FCAT-FIELDNAME   = 'CHRN'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = 'SY率'.               "市盈率
  LS_FCAT-FIELDNAME   = 'PERATIO'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '最高'.
  LS_FCAT-FIELDNAME   = 'TOP'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '最低'.
  LS_FCAT-FIELDNAME   = 'LOWEST'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = 'ZF%'.
  LS_FCAT-FIELDNAME   = 'SWING'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-F4AVAILABL  = 'X'.
  LS_FCAT-FIX_COLUMN  = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '业务金额(Y)'.
  LS_FCAT-FIELDNAME   = 'MARKETV'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-F4AVAILABL  = 'X'.
  LS_FCAT-FIX_COLUMN  = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '采购总金额(Y)'.
  LS_FCAT-FIELDNAME   = 'TOTALV'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = 'SJL'.
  LS_FCAT-FIELDNAME   = 'PB'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = 'PD'.
  LS_FCAT-FIELDNAME   = 'PD'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = 'ZT价'.
  LS_FCAT-FIELDNAME   = 'HLIMIT'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = 'DT价'.
  LS_FCAT-FIELDNAME   = 'STOPP'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '时间'.
  LS_FCAT-FIELDNAME   = 'TIME'.
*  ls_fcat-no_zero     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '日期'.
  LS_FCAT-FIELDNAME   = 'DATE'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '采购组'.
  LS_FCAT-FIELDNAME   = 'CGZ'.
*  ls_fcat-no_zero     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '采购组描述'.
  LS_FCAT-FIELDNAME   = 'CGZMS'.
  LS_FCAT-NO_ZERO     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
ENDFORM .                    "DIS_PREPARE_LAYOUT

*显示ALV------------------------------------------------------------------------
FORM DIS_SHOW_DATA_ALV.
  DATA: I_GRID_TITLE TYPE LVC_TITLE .
  I_GRID_TITLE =  G_TITLE . "'ALV标题' .

  " 定义隐藏标准按钮的变量
  DATA: WA_EXCLUDING TYPE SLIS_EXTAB ,
        IT_EXCLUDING TYPE SLIS_T_EXTAB .
  " 设置要隐藏的按钮的“FCODE”
  WA_EXCLUDING-FCODE = '&ABC' .
  APPEND WA_EXCLUDING TO IT_EXCLUDING .
  CLEAR WA_EXCLUDING.

  DATA:LT_EVENTS TYPE TABLE OF SLIS_ALV_EVENT WITH HEADER LINE.
  LT_EVENTS-NAME = 'CALLER_EXIT'.
  LT_EVENTS-FORM = 'ALV_EVENT_CALLER_EXIT'.
  APPEND LT_EVENTS.

  SORT IT_TAB BY UPDWNP DESCENDING.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID " 当前程序
      IS_LAYOUT_LVC            = GS_LAYOUT " 属性内表
      IT_FIELDCAT_LVC          = GT_FIELDCAT[] " 列明内表
      IT_EXCLUDING             = IT_EXCLUDING[]
      I_SAVE                   = 'X' " 是否保存布局
      I_CALLBACK_PF_STATUS_SET = 'ALV_PF_STATUS_SET'
      I_CALLBACK_USER_COMMAND  = 'ALV_USER_COMMAND'
"i_callback_html_top_of_page  = 'ALV_TOP_OF_PAGE1'
"I_GRID_TITLE                 = I_GRID_TITLE
      IT_SORT_LVC              = GT_ALV_SORT[]
    TABLES
      T_OUTTAB                 = IT_TAB[] " 数据内表
    EXCEPTIONS
      PROGRAM_ERROR            = 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.
ENDFORM.                    "DIS_SHOW_DATA_ALV

*设置状态
FORM ALV_PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
*copy the status from SAPLKKBL,and renamed it as ZSTANDARD.
  SET PF-STATUS 'ZSTANDARD'.
ENDFORM.                    "ALV_PF_STATUS_SET
*&---------------------------------------------------------------------*
*&      Form  REFRESH_ALV_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM REFRESH_ALV_DISPLAY.
  DATA: LS_REFRESH  TYPE LVC_S_STBL.
  LS_REFRESH-ROW = 'X'.
  LS_REFRESH-COL = 'X'.
  CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY( EXPORTING IS_STABLE = LS_REFRESH ).
  CALL METHOD CL_GUI_CFW=>FLUSH.
ENDFORM.                    " REFRESH_ALV_DISPLAY


*&---------------------------------------------------------------------*
*& Form ALV_USER_COMMAND
*&---------------------------------------------------------------------*
* 捕捉用户的动作
*----------------------------------------------------------------------*
FORM ALV_USER_COMMAND USING P_UCOMM TYPE SY-UCOMM
                          RS_SELFIELD TYPE SLIS_SELFIELD .


  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = G_GRID.
  CALL METHOD G_GRID->CHECK_CHANGED_DATA.
  GV_TABIDX = RS_SELFIELD-TABINDEX.

  CLEAR:WA_TAB.
  READ TABLE IT_TAB INTO WA_TAB INDEX GV_TABIDX.
  IF SY-SUBRC = 0.
    GV_CODE = WA_TAB-CODE.

  ENDIF.
  CASE P_UCOMM.
    WHEN '&IC1' . " 判断用户的动作

      PERFORM SHOW_ITEM.

    WHEN '&NTE' .
      IF P_AUTO = 'X'.
        PERFORM AUTO_REFRESH.
        RS_SELFIELD-REFRESH = 'X'.
      ENDIF.
    WHEN 'ZREFRESH' .
      PERFORM AUTO_REFRESH.
      RS_SELFIELD-REFRESH = 'X'.

  ENDCASE.

ENDFORM. " ALV_USER_COMMAND


*&---------------------------------------------------------------------*
*& Form set_number
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM SET_NUMBER TABLES OP_SNUM STRUCTURE GS_RANGE_SNUM USING OP_TYPE TYPE CHAR1.
  DATA TMP_NUM TYPE CHAR6.


  IF OP_TYPE = 'A'.
    SELECT CODE AS NUM APPENDING TABLE IT_SNUM FROM ZSTOCK_LIST WHERE CODE IN OP_SNUM.
    RETURN.
  ELSE.
    SELECT CODE AS NUM INTO TABLE IT_SNUM FROM ZSTOCK_LIST WHERE CODE IN OP_SNUM.
  ENDIF.

  LOOP AT OP_SNUM.
    CLEAR WA_SNUM.
    IF OP_SNUM-OPTION = 'EQ' .
      IF OP_SNUM-LOW <> '' .
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = OP_SNUM-LOW
          IMPORTING
            OUTPUT = OP_SNUM-LOW.
        WA_SNUM-NUM = OP_SNUM-LOW.
        APPEND WA_SNUM TO IT_SNUM.
      ENDIF.
    ENDIF.
    IF OP_SNUM-OPTION = 'BT'.
      TMP_NUM = OP_SNUM-LOW.
      WHILE TMP_NUM <= OP_SNUM-HIGH.
        CLEAR IT_SNUM.
        WA_SNUM-NUM = TMP_NUM.
        APPEND WA_SNUM TO IT_SNUM.
        TMP_NUM = TMP_NUM + 1.
      ENDWHILE.
    ENDIF.
  ENDLOOP.

  SORT IT_SNUM BY NUM ASCENDING.
  DELETE ADJACENT DUPLICATES FROM IT_SNUM.

ENDFORM. " set_number

*&---------------------------------------------------------------------*
*&      Form  auto_refresh
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM AUTO_REFRESH.

  IF SY-UZEIT < '090000'.
    CONCATENATE '未开市:' SY-UZEIT INTO GV_STATUS.
  ELSEIF SY-UZEIT > '113000' AND SY-UZEIT < '130000'.
    CONCATENATE '休市:' SY-UZEIT INTO GV_STATUS.
  ELSEIF SY-UZEIT > '150000'.
    CONCATENATE '交易结束:' SY-UZEIT INTO GV_STATUS.
  ELSE.
    CONCATENATE '交易中:' SY-UZEIT INTO GV_STATUS.
  ENDIF.

  IF SY-UZEIT >= '090000' AND SY-UZEIT <= '113000'.
    PERFORM READ_DATA.
  ENDIF.
  IF SY-UZEIT >= '130000' AND SY-UZEIT <= '150000'.
    PERFORM READ_DATA.
  ENDIF.

ENDFORM.                    "auto_refresh
*&---------------------------------------------------------------------*
*& Form INIT_VARIANT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM INIT_VARIANT .
  DATA: H_VARIANT LIKE RSVAR-VARIANT.
  DATA: H_SUBRC LIKE SY-SUBRC.
  CLEAR: H_VARIANT,H_SUBRC .
  CHECK SY-TCODE <> 'SE38' AND SY-TCODE <> 'SA38' .
  H_VARIANT = 'U_'.
  WRITE SY-UNAME TO H_VARIANT+2.
  CALL FUNCTION 'RS_VARIANT_EXISTS'
    EXPORTING
      REPORT  = SY-REPID
      VARIANT = H_VARIANT
    IMPORTING
      R_C     = H_SUBRC.
  IF H_SUBRC = 0.
* g_feldlist-g_var_flag = 'X'.
    CALL FUNCTION 'RS_SUPPORT_SELECTIONS'
      EXPORTING
        REPORT               = SY-REPID
        VARIANT              = H_VARIANT
      EXCEPTIONS
        VARIANT_NOT_EXISTENT = 01
        VARIANT_OBSOLETE     = 02.
  ENDIF.
ENDFORM. " INIT_VARIANT

*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM GET_DATA .
  DATA LS_CELLCOLOR TYPE LVC_S_SCOL ."颜色控制
 DEFINE CHANGE_FIELD_COLOR.
    clear ls_cellcolor.
    ls_cellcolor-fname = &1 .
    ls_cellcolor-color-col = &2 .
    ls_cellcolor-color-int = '1' .
    ls_cellcolor-color-inv = '0' .
    append ls_cellcolor to WA_TAB-_cell_colors .
  END-OF-DEFINITION.

  DATA : C_RED TYPE LVC_S_SCOL-COLOR-COL VALUE 7.
  DATA : C_GRE TYPE LVC_S_SCOL-COLOR-COL VALUE 5.

  DATA: L_RES TYPE STRING.
  DATA: RESULT_TAB TYPE TABLE OF STRING WITH HEADER LINE.
  DATA: L_TMP TYPE STRING,
        L_STR TYPE STRING,
        L_URL TYPE STRING.
  DATA: LT_FELD TYPE TABLE OF STRING.
  DATA: LW_FELD TYPE STRING.
  DATA: IDX TYPE SY-TABIX.
  DATA: LIT_B TYPE STANDARD TABLE OF ZSTOCK_LIST,
        LWA_B TYPE ZSTOCK_LIST.
  DATA:L_KPL TYPE DMBTR.

  SELECT *
    FROM ZSTOCK_LIST
    INTO TABLE LIT_B.

  FIELD-SYMBOLS: <DYN_FIELD>.


  TYPES: BEGIN OF T_DOWN,
           ZNUM(20) TYPE C,                   "第一列
         END OF T_DOWN.

  DATA:
    L_CODE(10) TYPE N,
    LWO_EXCEL TYPE REF TO Z_CMS,
    LWA_CODE  TYPE T_DOWN,
    LWA_LOG   TYPE SOI_GENERIC_ITEM,
    LWA_RELT  TYPE SOI_GENERIC_ITEM,
    LIT_CODE  TYPE STANDARD TABLE OF T_DOWN,
    LIT_RELT  TYPE STANDARD TABLE OF SOI_GENERIC_ITEM.
  DATA:L_PATHD TYPE RLGRAP-FILENAME VALUE 'D:\LSMW\ST'.
  DATA: LC_ROW   TYPE I,
        LC_OBJ   TYPE I,
        LC_TOP   TYPE I,
        LC_RET   TYPE I.

  DATA : LT_STRUCT TYPE TABLE OF TY_STRUCT WITH HEADER LINE.

  LOOP AT IT_SNUM INTO WA_SNUM.
    WRITE WA_SNUM-NUM TO LWA_CODE-ZNUM LEFT-JUSTIFIED NO-GROUPING NO-SIGN.
    CONDENSE LWA_CODE-ZNUM.
    APPEND LWA_CODE TO LIT_CODE.
  ENDLOOP.

  CREATE OBJECT LWO_EXCEL.

  CALL METHOD LWO_EXCEL->CREATE_EXCEL
    EXPORTING
      EXCEL_NAME = 'ZCMSSTOCT'
    IMPORTING
      RETCODE    = LC_RET
       .
  IF LC_RET <> 0.
* 文件无法保存!
    MESSAGE S058(ZMM01) WITH '文件无法保存!'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  CALL METHOD LWO_EXCEL->ACTIVATE_SHEET
    EXPORTING
      SHEET_NAME = TEXT-001.
      .
  CLEAR:LC_OBJ.
  DESCRIBE TABLE LIT_CODE LINES LC_OBJ.

* 填充
  CALL METHOD LWO_EXCEL->FILL_TABLE
    EXPORTING
      LEFT   = 1
      TOP    = 2
      IT_TAB = LIT_CODE
      ROW    = LC_OBJ
      COL    = 1.

  CALL METHOD LWO_EXCEL->EXE_WITH_NO_PARAM
    EXPORTING
      MACRO_STRING = '模块1.line_format'.


  CALL METHOD LWO_EXCEL->ACTIVATE_SHEET
    EXPORTING
      SHEET_NAME = TEXT-002.

  CALL METHOD LWO_EXCEL->GET_TABLE
    EXPORTING
      LEFT    = 1
      TOP     = 2
      ROW     = LC_OBJ
      COL     = 1
    IMPORTING
      IT_DATA = LIT_RELT
      .

  DELETE LIT_RELT WHERE VALUE IS INITIAL.
  CLEAR:LC_ROW.
  DESCRIBE TABLE LIT_RELT LINES LC_ROW.
  READ TABLE LIT_RELT INTO LWA_RELT INDEX LC_ROW.

  WHILE LWA_RELT-VALUE CS '正在获取数据'.
    CALL METHOD LWO_EXCEL->GET_TABLE
      EXPORTING
        LEFT    = 1
        TOP     = 2
        ROW     = LC_OBJ
        COL     = 1
      IMPORTING
        IT_DATA = LIT_RELT
        .

    DELETE LIT_RELT WHERE VALUE IS INITIAL.
    CLEAR:LC_ROW.
    DESCRIBE TABLE LIT_RELT LINES LC_ROW.
    READ TABLE LIT_RELT INTO LWA_RELT INDEX LC_ROW.

  ENDWHILE.

  CALL METHOD LWO_EXCEL->EXE_WITH_NO_PARAM
    EXPORTING
      MACRO_STRING = '模块3.line_format'.


  CALL METHOD LWO_EXCEL->ACTIVATE_SHEET
    EXPORTING
      SHEET_NAME = TEXT-002.

  L_PATHD = L_PATHD && SY-DATUM && SY-UZEIT && '.xlsm'.

* 保存
  CALL METHOD LWO_EXCEL->SAVEAS
    EXPORTING
      FILE_NAME = L_PATHD.

  REFRESH:LIT_RELT[].
  CALL METHOD LWO_EXCEL->GET_TABLE
    EXPORTING
      LEFT    = 1
      TOP     = 2
      ROW     = LC_OBJ
      COL     = 78
    IMPORTING
      IT_DATA = LIT_RELT.

  CALL METHOD LWO_EXCEL->ACTIVATE_SHEET
    EXPORTING
      SHEET_NAME = TEXT-002.

  CALL METHOD LWO_EXCEL->EXE_WITH_NO_PARAM
    EXPORTING
      MACRO_STRING = '模块2.line_format'.


  CALL METHOD LWO_EXCEL->DESTROY.

  REFRESH:IT_TAB.
  LOOP AT LIT_RELT INTO LWA_LOG.
    LWA_RELT = LWA_LOG.
    CLEAR: LW_FELD.
    LW_FELD = LWA_RELT-VALUE.
    APPEND LW_FELD TO LT_FELD.

    AT END OF ROW.
      IDX = 1.
      WHILE IDX < 50.
        READ TABLE LT_FELD INTO LW_FELD INDEX IDX.
        ASSIGN COMPONENT IDX
        OF STRUCTURE LT_STRUCT TO <DYN_FIELD>.
        <DYN_FIELD> = LW_FELD.
        IDX = IDX + 1.
      ENDWHILE.
      APPEND LT_STRUCT.
      REFRESH:LT_FELD[].

      LOOP AT LT_STRUCT.
        CLEAR:WA_TAB.
        MOVE-CORRESPONDING LT_STRUCT TO WA_TAB.
*        WA_TAB-DATE = LT_STRUCT-DATETIME(8).
*        WA_TAB-TIME = LT_STRUCT-DATETIME+8(6).
        WA_TAB-DATE = SY-DATUM - 30.
        WA_TAB-TIME = SY-UZEIT.

        CLEAR:LWA_B.
        READ TABLE LIT_B INTO LWA_B
          WITH KEY CODE = WA_TAB-CODE.
        IF SY-SUBRC = 0.
          WA_TAB-COST   = LWA_B-COST.
          WA_TAB-QTY    = LWA_B-QTY.

          WA_TAB-GET    = ( WA_TAB-CURR -  WA_TAB-COST ) * WA_TAB-QTY.
          WA_TAB-GET = WA_TAB-GET - ( WA_TAB-CURR * WA_TAB-QTY * '0.001781' ).

          WA_TAB-ZGET = WA_TAB-GET - LWA_B-HISC.
          IF WA_TAB-ZGET <= 0.
*            CLEAR:WA_TAB-GET.
          ELSE.
            CHANGE_FIELD_COLOR 'ZGET' C_RED.
          ENDIF.
          IF LWA_B-MDIAN IS NOT INITIAL AND LWA_B-MDIAN >= WA_TAB-UPDWNP.
            WA_TAB-MAI = '非GMP供应商'.
            WA_TAB-BZ  = '后台维护'.
*            CHANGE_FIELD_COLOR 'UPDWNP' C_RED.
          ENDIF.
          IF LWA_B-GRTX >= WA_TAB-CURR.
            CHANGE_FIELD_COLOR 'NAME' C_RED.
            CONCATENATE '目标值,可B' WA_TAB-BZ INTO WA_TAB-BZ.
          ENDIF.
          IF LWA_B-ZDT IS NOT INITIAL AND SY-DATUM >= LWA_B-ZDT.
            CHANGE_FIELD_COLOR 'NAME' C_RED.
            CONCATENATE '关注日期到了' WA_TAB-BZ INTO WA_TAB-BZ.
          ENDIF.
        ENDIF.
        CONCATENATE '上海' WA_TAB-NAME '有限公司' INTO WA_TAB-NAME.
        IF WA_TAB-YCLOS < WA_TAB-OPEN.
*          WA_TAB-PD = '高开'.
          WA_TAB-PD = '高'.
        ENDIF.
        IF WA_TAB-YCLOS = WA_TAB-OPEN.
*          WA_TAB-PD = '平开'.
          WA_TAB-PD = '平'.
        ENDIF.
        IF WA_TAB-YCLOS > WA_TAB-OPEN.
*          WA_TAB-PD = '低开'.
          WA_TAB-PD = '低'.
        ENDIF.

        CLEAR:L_KPL.
*       10点前标注买卖
        IF SY-UZEIT <= '102500'.
          L_KPL = ( WA_TAB-OPEN - WA_TAB-YCLOS ) / WA_TAB-YCLOS * 100.
*          IF WA_TAB-PD = '高开' AND L_KPL >= '2.20'.
          IF WA_TAB-PD = '高' AND L_KPL >= '2.20'.
            WA_TAB-MAI = '销售客户'.
            CHANGE_FIELD_COLOR 'NAME' C_RED.
            WA_TAB-BZ = '卖卖 10:25前,高k大于2.2'.
          ENDIF.
*          IF WA_TAB-PD = '低开' AND L_KPL <= '-1.20'.
          IF WA_TAB-PD = '低' AND L_KPL <= '-1.20'.
            WA_TAB-MAI = 'GMP供应商'.
*            CHANGE_FIELD_COLOR 'UPDWNP' C_RED.
            WA_TAB-BZ = '10:25前,低k小于1.2'.
          ENDIF.
        ENDIF.
        IF WA_TAB-UPDWNP >= L_KPL.
*          CONCATENATE WA_TAB-PD '高走' INTO WA_TAB-PD.
          CONCATENATE WA_TAB-PD '高' INTO WA_TAB-PD.
        ELSE.
*          CONCATENATE WA_TAB-PD '低走' INTO WA_TAB-PD.
          CONCATENATE WA_TAB-PD '低' INTO WA_TAB-PD.
        ENDIF.
        IF WA_TAB-BUYF > WA_TAB-SALEF.
*          CONCATENATE WA_TAB-PD '主买' INTO WA_TAB-PD.
          CHANGE_FIELD_COLOR 'CODE1' C_RED.
        ELSE.
*          CONCATENATE WA_TAB-PD '主卖' INTO WA_TAB-PD.
        ENDIF.
        WA_TAB-CGZ   = '204'.
        WA_TAB-CGZMS = '运营服务采购'.
        L_CODE = WA_TAB-CODE.
        WA_TAB-CODE1 = L_CODE.
        APPEND WA_TAB TO IT_TAB.
      ENDLOOP.
      REFRESH:LT_STRUCT[].
      CLEAR:LT_STRUCT.
    ENDAT.
  ENDLOOP.
  SORT IT_TAB BY GET.

ENDFORM.

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

  DATA LS_CELLCOLOR TYPE LVC_S_SCOL ."颜色控制
 DEFINE CHANGE_FIELD_COLOR.
    clear ls_cellcolor.
    ls_cellcolor-fname = &1 .
    ls_cellcolor-color-col = &2 .
    ls_cellcolor-color-int = '1' .
    ls_cellcolor-color-inv = '0' .
    append ls_cellcolor to WA_TAB-_cell_colors .
  END-OF-DEFINITION.

  DATA : C_RED TYPE LVC_S_SCOL-COLOR-COL VALUE 7.
  DATA : C_GRE TYPE LVC_S_SCOL-COLOR-COL VALUE 5.

  DATA: L_RES TYPE STRING.
  DATA: RESULT_TAB TYPE TABLE OF STRING WITH HEADER LINE.
  DATA: L_TMP TYPE STRING,
        L_STR TYPE STRING,
        L_URL TYPE STRING.
  DATA: LT_FELD TYPE TABLE OF STRING.
  DATA: LW_FELD TYPE STRING.
  DATA: IDX TYPE SY-TABIX.
  DATA: LIT_B TYPE STANDARD TABLE OF ZSTOCK_LIST,
        LWA_B TYPE ZSTOCK_LIST.

  SELECT *
    FROM ZSTOCK_LIST
    INTO TABLE LIT_B.

  FIELD-SYMBOLS: <DYN_FIELD>.


  TYPES: BEGIN OF T_DOWN,
           ZNUM(20) TYPE C,                   "第一列
         END OF T_DOWN.

  DATA:
    L_I       TYPE I,
    LWO_EXCEL TYPE REF TO Z_CMS,
    L_NUM(6)  TYPE N,
    LWA_CODE  TYPE T_DOWN,
    LWA_LOG   TYPE SOI_GENERIC_ITEM,
    LWA_RELT  TYPE SOI_GENERIC_ITEM,
    LIT_CODE  TYPE STANDARD TABLE OF T_DOWN,
    LIT_RELT  TYPE STANDARD TABLE OF SOI_GENERIC_ITEM.
  DATA:L_PATHD TYPE RLGRAP-FILENAME VALUE 'D:\LSMW\ST'.
  DATA: LC_ROW   TYPE I,
        LC_OBJ   TYPE I,
        LC_TOP   TYPE I,
        LC_RET   TYPE I.

  DATA : LT_STRUCT TYPE TABLE OF TY_ITEMC WITH HEADER LINE.

  CLEAR:LWA_CODE.
  L_NUM = GV_CODE.
  LWA_CODE-ZNUM = L_NUM.
  APPEND LWA_CODE TO LIT_CODE.

  CREATE OBJECT LWO_EXCEL.

  CALL METHOD LWO_EXCEL->CREATE_EXCEL
    EXPORTING
      EXCEL_NAME = 'ZCMSSTOCT'
    IMPORTING
      RETCODE    = LC_RET
       .
  IF LC_RET <> 0.
* 文件无法保存!
    MESSAGE S058(ZMM01) WITH '文件无法保存!'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  CALL METHOD LWO_EXCEL->ACTIVATE_SHEET
    EXPORTING
      SHEET_NAME = TEXT-001.
      .
  CLEAR:LC_OBJ.
  DESCRIBE TABLE LIT_CODE LINES LC_OBJ.

* 填充
  CALL METHOD LWO_EXCEL->FILL_TABLE
    EXPORTING
      LEFT   = 1
      TOP    = 2
      IT_TAB = LIT_CODE
      ROW    = LC_OBJ
      COL    = 1.

  CALL METHOD LWO_EXCEL->EXE_WITH_NO_PARAM
    EXPORTING
      MACRO_STRING = '模块1.get_item'.


  CALL METHOD LWO_EXCEL->ACTIVATE_SHEET
    EXPORTING
      SHEET_NAME = TEXT-003.

  CALL METHOD LWO_EXCEL->GET_TABLE
    EXPORTING
      LEFT    = 1
      TOP     = 2
      ROW     = 50
      COL     = 1
    IMPORTING
      IT_DATA = LIT_RELT
      .

  DELETE LIT_RELT WHERE VALUE IS INITIAL.
  CLEAR:LC_ROW.
  DESCRIBE TABLE LIT_RELT LINES LC_ROW.
  READ TABLE LIT_RELT INTO LWA_RELT INDEX LC_ROW.

  WHILE LWA_RELT-VALUE CS '正在获取数据'.
    CALL METHOD LWO_EXCEL->GET_TABLE
      EXPORTING
        LEFT    = 1
        TOP     = 2
        ROW     = LC_OBJ
        COL     = 1
      IMPORTING
        IT_DATA = LIT_RELT
        .

    DELETE LIT_RELT WHERE VALUE IS INITIAL.
    CLEAR:LC_ROW.
    DESCRIBE TABLE LIT_RELT LINES LC_ROW.
    READ TABLE LIT_RELT INTO LWA_RELT INDEX LC_ROW.

  ENDWHILE.

  CALL METHOD LWO_EXCEL->ACTIVATE_SHEET
    EXPORTING
      SHEET_NAME = TEXT-003.

  CALL METHOD LWO_EXCEL->EXE_WITH_NO_PARAM
    EXPORTING
      MACRO_STRING = '模块3.get_item'.


  CALL METHOD LWO_EXCEL->ACTIVATE_SHEET
    EXPORTING
      SHEET_NAME = TEXT-003.

*  L_PATHD = L_PATHD && SY-DATUM && SY-UZEIT && 'item.xlsm'.
*
** 保存
*  CALL METHOD LWO_EXCEL->SAVEAS
*    EXPORTING
*      FILE_NAME = L_PATHD.

  REFRESH:LIT_RELT[].
  CALL METHOD LWO_EXCEL->GET_TABLE
    EXPORTING
      LEFT    = 2
      TOP     = 1
      ROW     = 50
      COL     = 69
    IMPORTING
      IT_DATA = LIT_RELT.

  CALL METHOD LWO_EXCEL->ACTIVATE_SHEET
    EXPORTING
      SHEET_NAME = TEXT-003.

  CALL METHOD LWO_EXCEL->EXE_WITH_NO_PARAM
    EXPORTING
      MACRO_STRING = '模块2.line_format'.


  CALL METHOD LWO_EXCEL->DESTROY.

  DELETE LIT_RELT WHERE VALUE IS INITIAL.

  REFRESH:LT_STRUCT[].
  CLEAR:LT_STRUCT.
  LOOP AT LIT_RELT INTO LWA_RELT.

    IF LWA_RELT-VALUE IS INITIAL.
      CONTINUE.
    ELSE.
      L_I = STRLEN( LWA_RELT-VALUE ).
    ENDIF.
    IF L_I < 28.
      CONTINUE.
    ENDIF.
    CLEAR:LW_FELD.
    REFRESH:LT_FELD.
    SPLIT LWA_RELT-VALUE AT '/' INTO TABLE LT_FELD.
    IDX = 1.
    WHILE IDX < 8.
      READ TABLE LT_FELD INTO LW_FELD INDEX IDX.
      ASSIGN COMPONENT IDX
      OF STRUCTURE LT_STRUCT TO <DYN_FIELD>.
      <DYN_FIELD> = LW_FELD.
      IDX = IDX + 1.
    ENDWHILE.
    APPEND LT_STRUCT.
  ENDLOOP.

  REFRESH:IT_ALV.
  CHECK LT_STRUCT[] IS NOT INITIAL.
  LOOP AT LT_STRUCT.
    MOVE-CORRESPONDING LT_STRUCT TO WA_ALV.
    CONCATENATE LT_STRUCT-ZTIME+0(2) LT_STRUCT-ZTIME+3(2) LT_STRUCT-ZTIME+6(2)
      INTO WA_ALV-ZTIME.
    IF WA_ALV-FS IS NOT INITIAL.
      WA_ALV-FS = WA_ALV-FS+0(1).
    ENDIF.
    WA_ALV-JS = 1.
    APPEND WA_ALV TO IT_ALV.
  ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form show_item
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SHOW_ITEM .
DATA:
    SUB_GRID TYPE REF TO CL_GUI_ALV_GRID,
    SUB_BOX  TYPE REF TO CL_GUI_DIALOGBOX_CONTAINER.
DATA:L_I  TYPE I.
*  DATA LS_LAYOUT    TYPE LVC_S_LAYO.


   DATA LT_FIELDCAT  TYPE LVC_T_FCAT.
*  DATA LS_LAYOUT    TYPE LVC_S_LAYO.
*   LS_LAYOUT-CWIDTH_OPT = 'X'.
*   LS_LAYOUT-ZEBRA = 'X'.
*   LS_LAYOUT-NO_ROWMARK = 'X'.
*   LS_LAYOUT-STYLEFNAME = 'CELLTAB'.


  PERFORM READ_QTY.

  CHECK IT_ALV[] IS NOT INITIAL.
*  PERFORM DIS_PREPARE_LAYOUT CHANGING WA_LAYOUT.
*  PERFORM DIS_PREPARE_FIELD_ITEM CHANGING IT_FIELDCAT.

  PERFORM F_SET_FIELDCAT
    CHANGING
      LT_FIELDCAT.

*  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
*    EXPORTING
*      I_CALLBACK_PROGRAM       = SY-CPROG " 当前程序
*      IS_LAYOUT_LVC            = LS_LAYOUT " 属性内表
*      IT_FIELDCAT_LVC          = LT_FIELDCAT[] " 列明内表
*      I_SAVE                   = 'A' " 是否保存布局
*    TABLES
*      T_OUTTAB                 = IT_ALV[] " 数据内表
*    EXCEPTIONS
*      PROGRAM_ERROR            = 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.
  CREATE OBJECT SUB_BOX
      EXPORTING
        TOP      = 80
        LEFT     = 100
        LIFETIME = CNTL_LIFETIME_DYNPRO
        CAPTION  = '明细'
        WIDTH    = 80
        HEIGHT   = 20.
  SUB_GRID = NEW CL_GUI_ALV_GRID( SUB_BOX ).

  DATA(GT_EVENT_ITEM) = NEW LCL_EVENT( ).

  SET HANDLER GT_EVENT_ITEM->HANDLE_CLOSE FOR SUB_BOX. "弹出窗口关闭

  SORT  IT_ALV BY FS ASCENDING ZTIME ASCENDING.
  IF P_JE > 0.
    L_I = P_JE * 10000.
    DELETE IT_ALV WHERE TJE < L_I.

  ENDIF.

  CALL METHOD SUB_GRID->SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
      I_SAVE          = 'A'
    CHANGING
      IT_OUTTAB       = IT_ALV "==**此处需要设置全局变量   否则对明细表排序时  可能会导致DUMP**==
      IT_FIELDCATALOG = LT_FIELDCAT.

ENDFORM.



*&---------------------------------------------------------------------*
*&      Form  F_SET_FIELDCAT
*&---------------------------------------------------------------------*
*       ALV fieldcat setting
*----------------------------------------------------------------------*
*      <--CT_FIELDCAT       Fieldcat attribute
*----------------------------------------------------------------------*
FORM F_SET_FIELDCAT
  CHANGING
    CT_FIELDCAT     TYPE LVC_T_FCAT.

  DATA LS_FIELDCAT  TYPE LVC_S_FCAT.
  DATA LV_COL       TYPE I.

  DEFINE DEF_SET_FIELDCAT.

    CLEAR ls_fieldcat.

    lv_col = lv_col + 1.

    ls_fieldcat-col_pos    = lv_col.
    ls_fieldcat-fieldname  = &1.
    ls_fieldcat-ref_table  = &2.
    ls_fieldcat-ref_field  = &3.
    ls_fieldcat-coltext    = &4.
    ls_fieldcat-scrtext_l  = &4.
    ls_fieldcat-scrtext_m  = &4.
    ls_fieldcat-scrtext_s  = &4.
    ls_fieldcat-hotspot    = &5.
    ls_fieldcat-Dfieldname = &6.

    if ls_fieldcat-fieldname = 'SEL'.
      LS_FIELDCAT-CHECKBOX = 'X'.
      LS_FIELDCAT-EDIT     = 'X'.
      ls_fieldcat-hotspot  = 'X'.
    ENDIF.
    if ls_fieldcat-fieldname = 'KUNNR' OR
       ls_fieldcat-fieldname = 'ZBZ'    OR
       ls_fieldcat-fieldname = 'BUDAT'    OR
       ls_fieldcat-fieldname = 'RSTGR'    OR
       ls_fieldcat-fieldname = 'UMSKZ'.
      LS_FIELDCAT-EDIT     = 'X'.
*      ls_fieldcat-hotspot  = 'X'.
    ENDIF.
    if ls_fieldcat-fieldname = 'BELNR'.
      ls_fieldcat-hotspot  = 'X'.
    ENDIF.
    if ls_fieldcat-fieldname = 'STATUS'.
*      ls_fieldcat-key  = 'X'.
      ls_fieldcat-icon  = 'X'.
    ENDIF.
    APPEND ls_fieldcat TO ct_fieldcat.
  END-OF-DEFINITION.









* Display detail
* Need to display customer
  DEF_SET_FIELDCAT:
*    'SEL'              ''         ''                 TEXT-H99  ''  '', "选择
*    'STATUS'           ''         ''                 TEXT-H98  ''  '', "状态
    'XH'              ''         ''            TEXT-H01  '' '',  "序号
    'ZTIME'          ''         ''          TEXT-H02  '' '',  "时间
    'JE'              ''         ''              TEXT-H03  '' '',  "金额
    'DF'              ''         ''            TEXT-H04  '' '',  "差异判断
    'SS'              ''         ''           TEXT-H05  '' '',  "数量
    'TJE'            ''         ''             TEXT-H06  '' '',  "总金额
    'FS'             ''         ''            TEXT-H07  '' '',  "方式
    'JS'             ''         ''            TEXT-H08  '' ''.  "计数

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  DIS_PREPARE_FIELD_item
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PT_FIELDCAT  text
*----------------------------------------------------------------------*
FORM DIS_PREPARE_FIELD_ITEM CHANGING PT_FIELDCAT TYPE LVC_T_FCAT .
  CLEAR PT_FIELDCAT[].
  DATA LS_FCAT TYPE LVC_S_FCAT .

*  CLEAR LS_FCAT .
*  LS_FCAT-COLTEXT     = '状态'.
*  LS_FCAT-FIELDNAME   = '_EXCP'.
*  LS_FCAT-OUTPUTLEN = 1.
*  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.

  LS_FCAT-COLTEXT     = '序号'.
  LS_FCAT-FIELDNAME   = 'XH'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-FIX_COLUMN  = 'X'.
*  ls_fcat-no_zero     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.

*
*  LS_FCAT-COLTEXT     = '序号'.
*  LS_FCAT-FIELDNAME   = 'XH'.
*  LS_FCAT-FIX_COLUMN  = 'X'.
**  LS_FCAT-NO_ZERO     = 'X'.
**  LS_FCAT-COL_OPT     = 'X'.
*  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.

  LS_FCAT-COLTEXT     = '时间'.
  LS_FCAT-FIELDNAME   = 'ZTIME'.
  LS_FCAT-FIX_COLUMN  = 'X'.
*  LS_FCAT-COL_OPT     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '金额'.
  LS_FCAT-FIELDNAME   = 'JE'.
  LS_FCAT-FIX_COLUMN  = 'X'.
*  LS_FCAT-NO_ZERO     = 'X'.
*  LS_FCAT-COL_OPT     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '差异判断'.
  LS_FCAT-FIELDNAME   = 'DF'.
  LS_FCAT-FIX_COLUMN  = 'X'.
*  LS_FCAT-NO_ZERO     = 'X'.
*  LS_FCAT-COL_OPT     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '数量'.
  LS_FCAT-FIELDNAME   = 'SS'.
  LS_FCAT-FIX_COLUMN  = 'X'.
*  LS_FCAT-NO_ZERO     = 'X'.
*  LS_FCAT-COL_OPT     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '总金额'.
  LS_FCAT-FIELDNAME   = 'TJE'.
  LS_FCAT-FIX_COLUMN  = 'X'.
*  LS_FCAT-NO_ZERO     = 'X'.
*  LS_FCAT-COL_OPT     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
  LS_FCAT-COLTEXT     = '方式'.
  LS_FCAT-FIELDNAME   = 'FS'.
  LS_FCAT-NO_ZERO     = 'X'.
  LS_FCAT-COL_OPT     = 'X'.
  APPEND LS_FCAT TO PT_FIELDCAT.CLEAR LS_FCAT.
ENDFORM .                    "DIS_PREPARE_LAYOUT

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值