SAP 如何在SAP系统中查看股票信息

*功能如下:
*1.界面定时刷新,无需手动刷新,这个可以指定时间。
*2.涨跌着色,一目了然,参照其它股票行情软件,不同区域使用不同的着色。
*3.可以增加,删除行项目。
*4.抬头增加刷新时间显示。
*5.分时信息,盘口信息单独显示。
*6.增加行情数据来源,新的行情信息来自腾讯,信息更完整。


REPORT zstock_003.
*TYPE-POOLS: abap,slis.
TABLES: zstock_list.


*INCLUDE zstock_json_util.


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.


DATA: 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.
DATA:f_url TYPE cndp_url,
     r_url TYPE cndp_url,
     z_url TYPE cndp_url,
     y_url TYPE cndp_url.


DATA:stock_url(20) TYPE c.
DATA:ok_code LIKE sy-ucomm.






DATA: gv_snum(6) TYPE c.
TYPES: BEGIN OF ty_snum,
        num(6) TYPE c,
  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.


DATA: gs_range_snum TYPE ty_sl_snum.


*  清单代码清单
DATA: gt_snum TYPE TABLE OF ty_snum WITH HEADER LINE.


DATA: gv_status TYPE char20 .


*----------------TYPE DEFINITION--------------------------
TYPES: BEGIN OF ty_list,
    name TYPE char6, "股票名字
    code 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,"行项目的消息内容"
END OF ty_internal.
TYPES: BEGIN OF ty_type.
        INCLUDE TYPE ty_internal.
        INCLUDE TYPE ty_list.
TYPES END OF ty_type.




DATA: gt_table TYPE TABLE OF ty_type WITH HEADER LINE.
DATA: gv_code TYPE ty_type-code.


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.




DATA: gs_table TYPE ty_charlist.
DATA: gv_tabidx TYPE sy-tabix.
*ALV类变量定义


DATA: gs_layout         TYPE lvc_s_layo.
DATA: gt_fieldcat       TYPE lvc_t_fcat.
DATA: gt_alv_sort       TYPE lvc_t_sort.


DATA: x_save            TYPE c,
      gs_variant        TYPE disvariant,
      g_title           TYPE lvc_title.
DATA: g_grid            TYPE REF TO cl_gui_alv_grid.








*----------------------------------------------------------------------*
* 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
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
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 5.
PARAMETERS: p_col TYPE char1 AS CHECKBOX DEFAULT ' '."颜色控制。
**屏幕




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


  CREATE OBJECT timer.
  CREATE OBJECT receiver.
  SET HANDLER receiver->handle_finished FOR timer.
  timer->interval = p_time.


  gv_status = sy-uzeit.


START-OF-SELECTION .


  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.


*  PERFORM write_grid_output.


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


  DATA: l_tmp         TYPE string,
        l_str         TYPE string,
        l_url         TYPE string.


  IF gt_snum[] IS INITIAL.
    RETURN.
  ENDIF.


  CLEAR: gt_table,gt_table[].
*  PERFORM read_data_from_sina.
  PERFORM read_data_from_tencent.


  PERFORM modify_before_dis.
*  PERFORM build_filedcat1.
*  PERFORM process_data.


  PERFORM move_to_screen.






ENDFORM. "READ_DATA


*&---------------------------------------------------------------------*
*&      Form  move_to_screen
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM move_to_screen.
  IF gv_code IS NOT INITIAL.




    READ TABLE gt_table  WITH KEY code = gv_code.
    IF sy-subrc = 0.
      MOVE-CORRESPONDING gt_table TO gs_table.
    ELSE.
      CLEAR gs_table.
    ENDIF.
  ENDIF.
  CALL METHOD timer->run.
ENDFORM.                    "move_to_screen


*&---------------------------------------------------------------------*
*&      Form  read_data_from_sina
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM read_data_from_sina.


  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 WITH HEADER LINE.
  DATA: idx TYPE sy-tabix.
  FIELD-SYMBOLS: <dyn_field>.




*  REFRESH result_tab .


  LOOP AT gt_snum.
    CLEAR l_tmp.
    IF gt_snum-num(1) < 6.
      CONCATENATE 'sz' gt_snum-num INTO l_tmp.
    ENDIF.
    IF gt_snum-num(1) = '6'.
      CONCATENATE 'sh' gt_snum-num INTO l_tmp.
    ENDIF.
    CONCATENATE l_str l_tmp INTO l_str SEPARATED BY ','.
  ENDLOOP.


  IF l_str(1) = ','.
    SHIFT l_str LEFT DELETING LEADING ','.
  ENDIF.
  CONCATENATE 'http://58.63.237.216/list=' l_str INTO l_url .




  PERFORM send_http USING l_url CHANGING l_res.


  SPLIT l_res AT cl_abap_char_utilities=>newline INTO TABLE result_tab .






  "新浪下载实时数据,类型与下载的数据一致。
  TYPES: BEGIN OF ty_sina_live,
      code TYPE string,"股票代码
      name TYPE string,"股票名字
      open TYPE string,"今日开盘价
      yclos TYPE string,"昨日收盘价;
      curr TYPE string,"当前价格;
      high TYPE string,"当日最高价
      low TYPE string,"今日最低价
      buy1 TYPE string,"竞买价,即“买一”报价;
      sale1 TYPE string,"竞卖价,即“卖一”报价;
      total TYPE string,"成交的股票数
      amount TYPE string,"成交的金额
      buy11 TYPE string,"买一,数量
      buy12 TYPE string,"买一,报价
      buy21 TYPE string,"买二,数量
      buy22 TYPE string,"买二,报价
      buy31 TYPE string,"买三,数量
      buy32 TYPE string,"买三,报价
      buy41 TYPE string,"买四,数量
      buy42 TYPE string,"买四,报价
      buy51 TYPE string,"买五,数量
      buy52 TYPE string,"买五,报价
      sale11 TYPE string,"卖一,数量
      sale12 TYPE string,"卖一,报价
      sale21 TYPE string,"卖二,数量
      sale22 TYPE string,"卖二,报价
      sale31 TYPE string,"卖三,数量
      sale32 TYPE string,"卖三,报价
      sale41 TYPE string,"卖四,数量
      sale42 TYPE string,"卖四,报价
      sale51 TYPE string,"卖五,数量
      sale52 TYPE string,"卖五,报价
      date TYPE string,"日期
      time TYPE string,"时间
    END OF ty_sina_live.




  DATA : lt_sina_live TYPE TABLE OF ty_sina_live WITH HEADER LINE.


  LOOP AT result_tab.
    CLEAR: lt_feld,lt_feld[].
    SPLIT result_tab AT ',' INTO TABLE lt_feld.
    READ TABLE lt_feld INDEX 1.
    IF sy-subrc = 0.
      lt_sina_live-code = lt_feld+13(6).
      lt_sina_live-name = lt_feld+21.
    ELSE.
      MESSAGE e001(00) WITH '下载数据出错。'.
    ENDIF.


    idx = 2.
    WHILE idx < 33.
      READ TABLE lt_feld INDEX idx.
      idx = idx + 1.
      ASSIGN COMPONENT idx
      OF STRUCTURE lt_sina_live TO <dyn_field>.
      <dyn_field> = lt_feld.
    ENDWHILE.
    APPEND lt_sina_live.
  ENDLOOP.




  LOOP AT lt_sina_live.
    MOVE-CORRESPONDING lt_sina_live TO gt_table.
    gt_table-date = lt_sina_live-date.
    gt_table-time = lt_sina_live-time.
    APPEND gt_table.
  ENDLOOP.
ENDFORM.                    "read_data_from_sina


*&---------------------------------------------------------------------*
*&      Form  read_data_from_tensent
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM read_data_from_tencent.


  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 WITH HEADER LINE.
  DATA: idx TYPE sy-tabix.
  FIELD-SYMBOLS: <dyn_field>.




*  REFRESH result_tab .
  SORT gt_snum.
  delete ADJACENT DUPLICATES FROM gt_snum.


  LOOP AT gt_snum.
    CLEAR l_tmp.
    IF gt_snum-num(1) < 6.
      CONCATENATE 'sz' gt_snum-num INTO l_tmp.
    ENDIF.
    IF gt_snum-num(1) = '6'.
      CONCATENATE 'sh' gt_snum-num INTO l_tmp.
    ENDIF.
    CONCATENATE l_str l_tmp INTO l_str SEPARATED BY ','.
  ENDLOOP.


  IF l_str(1) = ','.
    SHIFT l_str LEFT DELETING LEADING ','.
  ENDIF.
*  CONCATENATE 'http://qt.gtimg.cn/q=' l_str INTO l_url .
  CONCATENATE 'http://14.17.52.161/q=' l_str INTO l_url .




  PERFORM send_http USING l_url CHANGING l_res.


  SPLIT l_res AT cl_abap_char_utilities=>newline INTO TABLE result_tab .


  "新浪下载实时数据,类型与下载的数据一致。
  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.




  DATA : lt_struct TYPE TABLE OF ty_struct WITH HEADER LINE.


  LOOP AT result_tab.
    CLEAR: lt_feld,lt_feld[].
    SPLIT result_tab AT '~' INTO TABLE lt_feld.
    idx = 1.
    WHILE idx < 50.
      READ TABLE lt_feld INDEX idx.


      ASSIGN COMPONENT idx
      OF STRUCTURE lt_struct TO <dyn_field>.
      <dyn_field> = lt_feld.
      idx = idx + 1.
    ENDWHILE.
    APPEND lt_struct.
  ENDLOOP.


  LOOP AT lt_struct.
    MOVE-CORRESPONDING lt_struct TO gt_table.
    gt_table-date = lt_struct-datetime(8).
    gt_table-time = lt_struct-datetime+8(6).
    APPEND gt_table.
  ENDLOOP.
ENDFORM.                    "read_data_from_tensent








*&---------------------------------------------------------------------*
*&      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 gt_table-_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 gt_table.


    IF p_col IS NOT INITIAL.


      "外盘总是红色
      IF gt_table-buyf IS NOT INITIAL.
        change_field_color 'BUYF' c_red.
      ENDIF.


      "内秀总是绿色。
      IF gt_table-salef IS NOT INITIAL.
        change_field_color 'SALEF' c_gre.
      ENDIF.


      IF gt_table-updwn < 0.
        gt_table-_excp = 3.
        change_field_color 'CURR' c_red.
        change_field_color 'UPDWN' c_red.
        change_field_color 'UPDWNP' c_red.


      ELSEIF gt_table-updwn = 0.
        gt_table-_excp = 2.
      ELSE.
        gt_table-_excp = 1.
        change_field_color 'CURR' c_gre.
        change_field_color 'UPDWN' c_gre.
        change_field_color 'UPDWNP' c_gre.
      ENDIF.


      IF gt_table-open IS NOT INITIAL.
        IF gt_table-open > gt_table-yclos.
          change_field_color 'OPEN' c_gre.
        ELSEIF gt_table-open < gt_table-yclos.
          change_field_color 'OPEN' c_red.
        ENDIF.
      ENDIF.


      IF gt_table-high IS NOT INITIAL.
        IF gt_table-high > gt_table-yclos.
          change_field_color 'HIGH' c_gre.
        ELSEIF gt_table-high < gt_table-yclos.
          change_field_color 'HIGH' c_red.
        ENDIF.
      ENDIF.


      IF gt_table-low IS NOT INITIAL.
        IF gt_table-low > gt_table-yclos.
          change_field_color 'LOW' c_gre.
        ELSEIF gt_table-low < gt_table-yclos.
          change_field_color 'LOW' c_red.
        ENDIF.
      ENDIF.
    ENDIF.


    IF gt_table-total IS NOT INITIAL.
      gt_table-total = gt_table-total / 10000.
    ENDIF.
    IF gt_table-salef IS NOT INITIAL.
      gt_table-salef = gt_table-salef / 10000.
    ENDIF.
    IF gt_table-buyf IS NOT INITIAL.
      gt_table-buyf = gt_table-buyf / 10000.
    ENDIF.
    IF gt_table-number IS NOT INITIAL.
      gt_table-number = gt_table-number / 10000.
    ENDIF.


    IF gt_table-updwnp = '0.00' .
      CLEAR gt_table-updwnp.
    ENDIF.
    MODIFY gt_table.
  ENDLOOP.
ENDFORM.                    "modify_before_dis








*&---------------------------------------------------------------------*
*& Form send_http
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_NUM text
* -->RT_TAB text
*----------------------------------------------------------------------*
FORM send_http USING p_url TYPE string CHANGING p_res TYPE string.
  DATA: loc_conv      TYPE REF TO cl_abap_conv_in_ce,
        http_client   TYPE REF TO if_http_client,
        abap_encoding TYPE abap_encoding,
        l_xstr         TYPE xstring,
        l_str         TYPE string,
        l_result      TYPE string,
        r_str         TYPE string.




  CALL METHOD cl_http_client=>create_by_url
    EXPORTING
      url                = p_url
    IMPORTING
      client             = http_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4.


  CALL METHOD http_client->request->set_header_field
    EXPORTING
      name  = 'Content-Type'
      value = 'text/html;charset=utf-8'."发送字符串时只能用utf-8编码


  CALL METHOD http_client->send
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2.
  CALL METHOD http_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3.
  CLEAR l_result .


  l_xstr = http_client->response->get_data( ).
  IF sy-subrc = 0 .
    http_client->close( ).
  ENDIF.


  CALL METHOD cl_abap_conv_in_ce=>create
    EXPORTING
      input       = l_xstr
      encoding    = '8400'
      replacement = '?'
      ignore_cerr = abap_true
    RECEIVING
      conv        = loc_conv.


  "二进制转文本。
  TRY.
      CALL METHOD loc_conv->read
        IMPORTING
          data = l_str.
    CATCH cx_sy_conversion_codepage.
    CATCH cx_sy_codepage_converter_init.
    CATCH cx_parameter_invalid_type.
    CATCH cx_parameter_invalid_range.
  ENDTRY.


  IF l_str(6) = '<html>' or l_str = 'pv_none_match=1;'.
    MESSAGE e001(00) WITH '股票代码不正确'.
  ENDIF.
  p_res = l_str.




ENDFORM. "send_http




*&---------------------------------------------------------------------*
*&      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 = 'CODE'.
  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     = '代码'.
  ls_fcat-fieldname   = 'CODE'.
  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-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   = '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     = '总手(万)'.
  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     = '开盘'.
  ls_fcat-fieldname   = 'OPEN'.
  ls_fcat-no_zero     = 'X'.
  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
  ls_fcat-coltext     = '昨收'.
  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     = '成交量(万手)'.
  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     = '成交额(万)'.
  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     = '换手率'.
  ls_fcat-fieldname   = 'CHRN'.
  ls_fcat-no_zero     = 'X'.
  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
  ls_fcat-coltext     = '市盈率'.
  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     = '振幅'.
  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     = '流通市值'.
  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     = '总市值'.
  ls_fcat-fieldname   = 'TOTALV'.
  ls_fcat-no_zero     = 'X'.
  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
  ls_fcat-coltext     = '市净率'.
  ls_fcat-fieldname   = 'PB'.
  ls_fcat-no_zero     = 'X'.
  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
  ls_fcat-coltext     = '涨停价'.
  ls_fcat-fieldname   = 'HLIMIT'.
  ls_fcat-no_zero     = 'X'.
  APPEND ls_fcat TO pt_fieldcat.CLEAR ls_fcat.
  ls_fcat-coltext     = '跌停价'.
  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.
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.


  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                 = gt_table[] " 数据内表
    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.
  READ TABLE gt_table INDEX gv_tabidx.
  IF sy-subrc = 0.
    gv_code = gt_table-code.


  ENDIF.
  CASE p_ucomm.
    WHEN '&IC1' . " 判断用户的动作
      CLEAR: f_url,z_url,r_url,y_url.
      f_url = 'http://image.sinajs.cn/newchart/min/n/'.
      z_url = 'http://image.sinajs.cn/newchart/weekly/n/'.
      r_url = 'http://image.sinajs.cn/newchart/daily/n/'.
      y_url = 'http://image.sinajs.cn/newchart/monthly/n/'.


      IF rs_selfield-fieldname =  'CODE'.
        IF rs_selfield-value+0(1) = 0.
          CONCATENATE 'sz' rs_selfield-value '.gif' INTO stock_url.
        ELSE.
          CONCATENATE 'sh' rs_selfield-value '.gif' INTO stock_url.
        ENDIF.


        CHECK stock_url IS NOT INITIAL.
        CONCATENATE f_url stock_url INTO f_url.
        CONCATENATE z_url stock_url INTO z_url.
        CONCATENATE y_url stock_url INTO y_url.
        CONCATENATE r_url stock_url INTO r_url.
        CALL SCREEN 0100.
      ELSE.
        CALL SCREEN 201.
      ENDIF.


    WHEN '&NTE'.


      PERFORM auto_refresh.
      rs_selfield-refresh = 'X'.
    WHEN 'DEL_CODE'.
      READ TABLE gt_table INDEX rs_selfield-tabindex.
      IF sy-subrc = 0.
        READ TABLE gt_snum WITH KEY num = gt_table-code.
        IF sy-subrc = 0.
          DELETE gt_snum INDEX sy-tabix.
        ENDIF.
        DELETE gt_table INDEX rs_selfield-tabindex.
        rs_selfield-refresh = 'X' .
      ENDIF.


    WHEN 'ADD_CODE'.
      CALL SELECTION-SCREEN 101 STARTING AT 5 10 .
      IF op1_snum[] IS NOT INITIAL.
        PERFORM set_number TABLES op1_snum[] USING 'A'.
        PERFORM read_data.
        rs_selfield-refresh = 'X' .
      ENDIF.


*当用户在显式界面上对数据进行修改时,同时内表中的数据也随之刷新
*      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 gt_snum FROM zstock_list WHERE code IN op_snum.


  ELSE.
      SELECT code AS num INTO TABLE gt_snum FROM zstock_list WHERE code IN op_snum.


  ENDIF.


  RETURN.


  LOOP AT op_snum.
    CLEAR gt_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.
        gt_snum-num = op_snum-low.
        APPEND gt_snum.
      ENDIF.
      IF op_snum-high <> '' .
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input       = op_snum-high
          IMPORTING
            output      = op_snum-high
            gt_snum-num = op_snum-high.
        APPEND gt_snum.
      ENDIF.
    ENDIF.
    IF op_snum-option = 'BT'.
      tmp_num = op_snum-low.
      WHILE tmp_num <= op_snum-high.
        CLEAR gt_snum.
        gt_snum-num = tmp_num.
        APPEND gt_snum.
        tmp_num = tmp_num + 1.
      ENDWHILE.
    ENDIF.
  ENDLOOP.
ENDFORM. " set_number
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS'.
*分时图
  IF f_picture IS INITIAL.
    CREATE OBJECT f_container
      EXPORTING
        container_name = 'F_CONTROL'.


    CREATE OBJECT f_picture
      EXPORTING
        parent = f_container.


    CALL METHOD f_picture->set_3d_border
      EXPORTING
        border = 1.


    CALL METHOD f_picture->load_picture_from_url_async
      EXPORTING
        url = f_url.
  ELSE.
    CALL METHOD f_picture->load_picture_from_url_async
      EXPORTING
        url = f_url.
  ENDIF.
*日K线图
  IF r_picture IS INITIAL.
    CREATE OBJECT r_container
      EXPORTING
        container_name = 'R_CONTROL'.


    CREATE OBJECT r_picture
      EXPORTING
        parent = r_container.


    CALL METHOD r_picture->set_3d_border
      EXPORTING
        border = 1.


    CALL METHOD r_picture->load_picture_from_url_async
      EXPORTING
        url = r_url.
  ELSE.
    CALL METHOD r_picture->load_picture_from_url_async
      EXPORTING
        url = r_url.
  ENDIF.


*周K线图
  IF z_picture IS INITIAL.
    CREATE OBJECT z_container
      EXPORTING
        container_name = 'Z_CONTROL'.


    CREATE OBJECT z_picture
      EXPORTING
        parent = z_container.


    CALL METHOD z_picture->set_3d_border
      EXPORTING
        border = 1.


    CALL METHOD z_picture->load_picture_from_url_async
      EXPORTING
        url = z_url.
  ELSE.
    CALL METHOD z_picture->load_picture_from_url_async
      EXPORTING
        url = z_url.
  ENDIF.


*月K线图
  IF y_picture IS INITIAL.
    CREATE OBJECT y_container
      EXPORTING
        container_name = 'Y_CONTROL'.


    CREATE OBJECT y_picture
      EXPORTING
        parent = y_container.


    CALL METHOD y_picture->set_3d_border
      EXPORTING
        border = 1.


    CALL METHOD y_picture->load_picture_from_url_async
      EXPORTING
        url = y_url.
  ELSE.
    CALL METHOD y_picture->load_picture_from_url_async
      EXPORTING
        url = y_url.
  ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT




*&---------------------------------------------------------------------*
*& Module USER_COMMAND_EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_exit INPUT.
  CASE ok_code.
    WHEN 'EXIT' OR 'BACK' OR 'CANC'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE. " USER_COMMAND_EXIT INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE ok_code.


    WHEN '&NTE'.
      PERFORM auto_refresh.
    WHEN 'EXIT' OR 'BACK' OR 'CANC'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT


*&---------------------------------------------------------------------*
*&      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
*&---------------------------------------------------------------------*
*&      Module  UPDATE_DATA  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE update_data OUTPUT.


  PERFORM move_to_screen.
ENDMODULE.                 " UPDATE_DATA  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_0105  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0105 OUTPUT.
  SET PF-STATUS 'ZSTATUS01'.
*  SET TITLEBAR 'xxx'.
  PERFORM move_to_screen.
ENDMODULE.                 " STATUS_0105  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0105  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0105 INPUT.
  CASE ok_code.
    WHEN '&NTE'.
      PERFORM auto_refresh.
    WHEN 'EXIT' OR 'BACK' OR 'CANC' OR 'CONFIRM'.
      LEAVE TO SCREEN 0.


  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0105  INPUT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值