精华内容
下载资源
问答
  • ABAP 屏幕开发 - 子屏幕调用

    万次阅读 2013-08-23 13:46:00
    事务代码SE80. 主屏幕:100 子屏幕:200 子屏幕:300 主屏幕100调用子屏幕200和300

     

    事务代码SE80.

    主屏幕:100

    子屏幕:200  子屏幕:300

    主屏幕100调用子屏幕200和300

    步骤:

    1.新建主屏幕100,添加子屏幕空间,名称为:SUBSCREEN

    2.新建子屏幕200/300,

       注意:勾选“子屏幕”项

     

    3.调用子屏幕

       a.定义全局变量:

       DATA:SID1 TYPE SYDYNNR VALUE '200'. "定义初始的子屏幕;

      b.屏幕100的PBO参数设置:

      CALL SUBSCREEN: SUBSCREEN INCLUDING SY-REPID SID1.

      c.屏幕100的PAI参数设置:

       CALL SUBSCREEN SUBSCREEN.

     

    其中:SUBSCREEN 屏幕100中添加的子屏幕控件名称

                SID1:子屏幕号码,默认是空屏幕200.

     

     

    同一个屏幕上调用多个子屏幕如下:

     

      b.屏幕100的PBO参数设置:

      CALL SUBSCREEN: SUBSCREEN INCLUDING SY-REPID SID1,

    SUBSCREEN2 INCLUDING SY-REPID SID2.

     c.屏幕100的PAI参数设置:

       CALL SUBSCREEN: SUBSCREEN,

     SUBSCREEN2.

    其中:SUBSCREEN和SUBSCREEN2 屏幕100中添加的子屏幕控件名称

                SID1和SID2:子屏幕号码.

     

     

    至此,OK~~~~

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • ABAP选择屏幕设计

    2010-04-27 14:51:29
    ABAP选择屏幕设计 选择屏幕 下面是一个典型的选择屏幕的典型例子. 1.设置选择屏幕参数. ***begin(end) of block使用屏幕元素逻辑块. SELECTION-SCREEN BEGIN OF BLOCK...

    ABAP选择屏幕设计

    选择屏幕

    下面是一个典型的选择屏幕的典型例子.
    1.设置选择屏幕参数.
    ***begin(end) of block使用屏幕元素逻辑块.
    SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME. TITLE TITLE1.
    ***定义选择标准,比如那些屏幕子段使用范围,设置为必选或使用内存ID等.
    SELECT-OPTIONS FOR DEFAULT│NO INTERVALS│OBLIGATORY│NO-DISPLAY│MEMORY
    ID...
    ***要在选择屏幕上书写文本使用屏幕注释并在屏幕初始化时赋值.
    SELECTION-SCREEN COMMENT ...
    ***在屏幕上画线.
    SELECTION-SCREEN ULINE ...
    ***Begind(end)of line包含的屏幕参数将在同一条直线上.
    SELECTION-SCREEN BEGIN OF LINE...
    SELECTION-SCREEN END OF LINE...
    ***设置屏幕位置.
    SELECTION-SCREEN POSITION...
    ***在应用工具条上创建按钮响应事件
    SELECTION-SCREEN FUNCTION KEY...
    ***在屏幕上创建按钮.
    SELECTION SCREEN PUSHBUTTON ...
    SELECTION-SCREEN END OF BLOCK BK1.

    INITIALIZATION.
    ***初始化屏幕参数,类似VB的Form_load事件***

    AT SELECTION-SCREEN .
    ***系统选择屏幕时的过程处理,比如需要判断一些屏幕字段的条件限制如为某些值则***显示
    error message,程序没有必要浪费时间继续执行下去.
    ***on help-request 可为屏幕字段显示自定义帮助
    ***on value-request可显示建议列表值
    ***可这样理解AT selection-screen相当于 PBO.
    ***PERFORM. sub_validate_FieldXXX .
    ***选屏后按Enter或F8运行时都会执行.
    START-OF-SELECTION .
    ***设置内表值,处理没有附加关键字的所有语句.
    ***通常包含在此的Form是在按F8后才开始执行.
    END-OF_SELECTION .

    AT USER-COMMAND.
    ***处理用户请求事件,如报表使用ALV格式,通常在call function exporting
    *** I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
    ***再建立一个子程序form. USER_COMMAND USING UCOMM LIKE SY-UCOMM

    AT LINE-SELECTION.
    ***通常此事件在报表显示后用户在列表中在选择行时触发.如报表使用的是write
    ***就可使用此事件.
    *** SET PARAMETER ID 'XXX' FIELD XXX.
    *** call transACtion 'XXX' AND SKIP FIRST SCREEN.

    TOP-OF-PAGE.
    *** 显示数据,使用TOP-OF-PAGE是在分页时可将定义的页头页尾在每页显示.
    *** PERFORM. write_page_header(page header在每页都显示).
    *** PERFORM. DISPLAY_ALV_DATA.
    END-OF-PAGE.
    下面一个简单的会计凭证显示的实例说明选择屏幕的使用.
    ***这程序只是做演示用,但是包含了常用的选择屏幕技术.
    将下面的程序copy就可跑.



    REPORT ZSELECTION NO STANDARD PAGE HEADING
    MESSAGE-ID zFIMSG "MEssage Class
    LINE-SIZE 255
    LINE-COUNT 32(3).

    tables :BKPF,BSEG,S070.
    DATA:ZBKPF like bkpf occurs 0 ,
    zwa_bkpf like bkpf.
    CONSTANTS:P_variant(2) TYPE c VALUE 'WL'.
    ***下面这些屏幕参数和事件没有关系,只是参数集而已.
    SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME. TITLE Cond1.
    SELECT-OPTIONS S_bukrs FOR bkpf-bukrs MEMORY ID BUK.
    SELECT-OPTIONS S_blart FOR bkpf-blart NO INTERVALS .
    SELECT-OPTIONS S_belnr FOR bkpf-belnr .
    SELECT-OPTIONS S_budat FOR bkpf-budat DEFAULT sy-datum.
    SELECT-OPTIONS S_bldat FOR bkpf-bldat NO INTERVALS NO-EXTENSION.
    SELECT-OPTIONS S_gjahr FOR bkpf-gjahr MEMORY ID GJR DEFAULT sy-datum(4).
    SELECT-OPTIONS weekran for s070-SPBUP NO-EXTENSION .
    SELECTION-SCREEN END OF BLOCK bk1.

    SELECTION-SCREEN BEGIN OF BLOCK bk2 WITH FRAME. TITLE Cond2.
    SELECTION-SCREEN COMMENT /1(30) COMM1 . "使用屏幕注释
    SELECTION-SCREEN BEGIN OF LINE ."两单选框将在同一条线上.
    PARAMETERS pnor RADIOBUTTON GROUP grp1 DEFAULT 'X'."Print normal doc
    PARAMETERS ppark RADIOBUTTON GROUP grp1. "Print parked doc
    SELECTION-SCREEN END OF LINE .
    SELECTION-SCREEN END OF BLOCK bk2.

    ***1 初始化参数.
    INITIALIZATION.
    Cond1 = '【Condition】'.
    Cond2 = '【Normal Doc│Parked Doc】'.
    COMM1 = 'Choose Doc. Type:'. "注释赋初值.
    ***初始公司值,这在有些需要后台跑的程序非常有用,除了使用variant外,在此也可赋初
    ***下面的例子在初始化后公司代码选择了1000和3000排除了2000
    S_bukrs-low = '1000'.
    S_bukrs-sign = 'I'. "I->包含,E->排除
    S_bukrs-option = 'EQ'. "NE
    APPEND S_bukrs.
    S_bukrs-low = '2000'.
    S_bukrs-sign = 'E'.
    S_bukrs-option = 'EQ'.
    APPEND S_bukrs.
    S_bukrs-low = '3000'.
    S_bukrs-sign = 'E'.
    S_bukrs-option = 'EQ'.
    APPEND S_bukrs.
    ***初始化doc range 从0100000000到1000000000
    s_belnr-low = '0100000000'.
    s_belnr-high = '1000000000'.
    s_belnr-sign = 'I' .
    s_belnr-option = 'BT'.
    append s_belnr.

    ***2 使用sug_get_week后得到所选日期的当前周数,在选择weekrag字段时才触发.
    ***当你选择weekran字段时.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR weekran-low.
    PERFORM. sub_get_week CHANGING weekran-low.


    AT SELECTION-SCREEN.
    ***判断所选择的公司代码是否有效,通常并不是必须的.
    ***当然你也可将此步省略,直接在START-OF-SELECTION判断.
    ***根据需要可做很多vaid字段的判断.
    PERFORM. SUB_VALIDATE_COMP.

    ***3开始选屏
    START-OF-SELECTION.
    Perform. SUB_GET_DOC.
    PERFORM. SUB_WRT_DOC.
    END-OF-SELECTION.

    ***4.分页时显示page header或page footer.
    TOP-OF-PAGE.
    perform. sub_WRT_HEADER.
    end-of-page.

    ***5.当点击行并且是点到Document NO.CAll FB03.
    AT line-selection.
    Perform. sub_line_response.
    form. sub_line_response.
    Data: ZFLDNAME like DD01L-DOMNAME,
    ZFLDVALUE like TTREET-TEXT,
    zwa_bkpf like bkpf.
    GET CURSOR FIELD ZFLDNAME VALUE ZFLDVALUE .
    if ZFLDNAME = 'ZWA_BKPF-BELNR' .
    * READ TABLE Zbkpf into zwa_bkpf WITH KEY BELNR = ZFLDVALUE.
    * SET PARAMETER ID 'BUK' FIELD zwa_bkpf-BUKRS.
    * SET PARAMETER ID 'GJR' FIELD zwa_bkpf-GJAHR.
    * SET PARAMETER ID 'BLN' FIELD zwa_bkpf-BELNR.
    SET PARAMETER ID 'BLN' FIELD ZFLDVALUE .
    CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
    endif.
    endform. .



    FORM. SUB_GET_DOC.
    refresh zbkpf .
    SELECT * FROM bkpf into table Zbkpf
    WHERE bukrs IN s_bukrs
    AND belnr IN s_belnr
    AND gjahr IN s_gjahr
    AND budat IN s_budat.
    endform.

    form. sub_wrt_header.
    FORMAT INTENSIFIED COLOR = 6.
    WRITE AT: /01 'Finaincial Document List:'(h07).
    FORMAT COLOR COL_NORMAL ON.
    FORMAT COLOR COL_HEADING ON.
    WRITE AT:/01(48) sy-uline.
    FORMAT COLOR COL_HEADING OFF.
    FORMAT COLOR OFF.
    endform.

    form. sub_wrt_doc.
    uline /1(41).
    loop at zbkpf into zwa_bkpf.
    write:/ '│',zwa_bkpf-bukrs,'│',zwa_bkpf-belnr,'│',zwa_bkpf-gjahr,'│',zwa_bkpf-
    budat,'│'.
    uline /1(41).
    endloop.
    endform.

    FORM. SUB_VALIDATE_COMP.
    data itab_bukrs like bkpf-bukrs occurs 0 .
    select bukrs into table itab_bukrs
    from T001
    where BUKRS in S_bukrs .
    if itab_bukrs IS INITIAL.
    Message e002(00) .
    endif.
    endform.



    FORM. sub_get_week CHANGING wkran LIKE s070-SPBUP.
    DATA: l_date LIKE workflds-gkday,
    l_period LIKE t009b-poper,
    l_year LIKE t009b-bdatj.
    ***根据选择日期得到当前周数
    CALL FUNCTION 'F4_DATE'
    EXPORTING
    date_for_first_month = sy-datum
    display = ''
    IMPORTING
    select_date = l_date
    EXCEPTIONS
    calendar_buffer_not_loadable = 1
    date_after_range = 2
    date_before_range = 3
    date_invalid = 4
    factory_calendar_not_found = 5
    holiday_calendar_not_found = 6
    parameter_conflict = 7
    OTHERS = 8.
    CALL FUNCTION 'G_PERIOD_GET'
    EXPORTING
    date = l_date
    ***使用WL variant得到的period是周/年,空则是期间/年.
    ***在CO-PA或做计划时,通常是以周做period的.
    variant = P_variant "'WL'
    IMPORTING
    period = l_period
    year = l_year
    EXCEPTIONS
    ledger_not_assigned_to_company = 1
    period_not_defined = 2
    variant_not_defined = 3
    OTHERS = 4.
    weekran-sign = 'I'.
    weekran-option = 'EQ'.
    CONCATENATE l_year l_period+1(2) INTO wkran.
    endform.

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7204478/viewspace-660889/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/7204478/viewspace-660889/

    展开全文
  • ABAP实战屏幕SCREEN设计(二)

    万次阅读 多人点赞 2016-06-15 10:23:14
    屏幕(SCREEN)是ABAP设计最重要的工作之一,SAP的单据、主数据维护等业务功能都使用屏幕,一个程序可以包含多个屏幕。 上一篇博文“ABAP实战屏幕SCREEN设计(一)”主要介绍了以下内容: (1)第一个"HELLO WORLD" Screen...
    屏幕(SCREEN)是ABAP设计最重要的工作之一,SAP的单据、主数据维护等业务功能都使用屏幕,一个程序可以包含多个屏幕。
    
    上一篇博文“ ABAP实战屏幕SCREEN设计(一)”主要介绍了以下内容:
    (1)第一个"HELLO WORLD" Screen程序
    (2)工具条和菜单设计
    (3)屏幕对象
    (4)数据字典关联字段
    (5)逻辑流
    (6)下拉框设计
    本篇博文将继续介绍剩下内容,主要包含
    (1)修改屏幕状态
    (2)子窗口(Subscreen)
    (3)表条目控制
    (4)定制控制,上载图片和在屏幕上显示图片实例
    (5)文本编辑器

    (6)列表和屏幕相互调用 

    1、修改屏幕状态

    可以在程序运行时动态地设置对象的属性,如设置一个字段是否有效,在Screen设计时,可以将字段分组,在PBO事件中设置属性。
    本节在屏幕上建立一个CHECKBOX、若干输入字段,将字段分成两个组,每一个组有一个BUTTON,单击组BUTTON,根据CHECKBOX的值更改字段组的属性,设计界面如图


    1-1和1-2为NO1组,2-1和2-2为NO2组。
    程序代码如下

    REPORT  YTEST20160613002.
    *功能码返回值
    DATA: OK_CODE TYPE SY-UCOMM,
          SAVE_OK TYPE SY-UCOMM.
    
    DATA:SGRP(20) TYPE C,
         SMOD(1) TYPE C.
    
    *是否修改
    DATA: CANMOD(1) TYPE C.
    
    *默认可以修改
    CANMOD = 'X'.
    
    *直接调用窗口
    CALL SCREEN 100.
    
    MODULE STATUS_0100 OUTPUT.
      SET PF-STATUS 'STATUS1'.
    *根据按钮确定字段组
      SGRP = ''.
      IF SAVE_OK = 'BTN1'.
        SGRP = 'NO1'.
      ELSE.
        SGRP = 'NO2'.
      ENDIF.
    *CHECKBOX转换
      IF CANMOD = 'X'.
        SMOD = '1'.
      ELSE.
        SMOD = '0'.
      ENDIF.
    *逐个扫描屏幕元素
      LOOP AT SCREEN.
    *如果是需要修改的组,更改变量,其他组不考虑,如果正式考虑先存储到变量
        IF SCREEN-GROUP1 = SGRP.
          SCREEN-INPUT = SMOD.
    *更新到窗口元素变量
          MODIFY SCREEN.
        ENDIF.
      ENDLOOP.
    ENDMODULE.
    
    MODULE CANCEL INPUT.
      LEAVE PROGRAM.
    ENDMODULE.
    
    MODULE USER_COMMAND_0100 INPUT.
      SAVE_OK = OK_CODE.
      CLEAR OK_CODE.
      CASE SAVE_OK.
        WHEN 'CANCEL'.
          LEAVE PROGRAM.
      ENDCASE.
    ENDMODULE.
    输出结果如下图


    当选择不更改,单击设定组1按钮时,测试组1状态变为不能编辑。

    2、子窗口

    一个程序可以有多个窗口,通过子窗口,可以把若干个子窗口放在一个窗口上,这样,既保持了整体性,又方便对单个屏幕的维护。在SAP业务程序中,大量地使用了子窗口设计。
    窗口对象子屏幕范围 对象用来定义一个子窗口在主窗口上的大小、位置等属性,通过逻辑流和主程序将对象关联到子窗口。
    例如:建立一个主窗口和两个子窗口,在主窗口上再创建一个子窗口范围,增加两个按钮,单击按钮时切换子窗口。

    主窗口设计界面:


    子窗口设计界面:



    同样方式定义好屏幕300

    回到主屏幕100,定义逻辑流

    PROCESS BEFORE OUTPUT.
     MODULE STATUS_0100.
    *SUBSCR是定义的子屏幕范围的名称
     CALL SUBSCREEN: SUBSCR INCLUDING SY-REPID SID1.
    
    
    PROCESS AFTER INPUT.
     MODULE CANCEL AT EXIT-COMMAND.
     MODULE USER_COMMAND_0100.
    *使子屏幕显示
     CALL SUBSCREEN SUBSCR.
    主程序代码如下

    REPORT  YTEST20160613003.
    *功能码返回值
    DATA:OK_CODE TYPE SY-UCOMM,
         SAVE_OK TYPE SY-UCOMM.
    *子窗口默认用200子窗口
    DATA:SID1(4) TYPE N VALUE '200'.
    *直接调用窗口
    CALL SCREEN 100.
    
    MODULE STATUS_0100 OUTPUT.
      SET PF-STATUS 'STATUS1'.
    ENDMODULE.
    
    MODULE CANCEL INPUT.
      LEAVE PROGRAM.
    ENDMODULE.
    
    MODULE USER_COMMAND_0100 INPUT.
      SAVE_OK = OK_CODE.
      CLEAR OK_CODE.
      CASE SAVE_OK.
    *当单击第一个按钮,显示200子窗口
        WHEN 'BTN1'.
          SID1 = '200'.
    *当单击第二个按钮,显示300子窗口
        WHEN 'BTN2'.
          SID1 = '300'.
        WHEN 'CANCEL'.
          LEAVE PROGRAM.
      ENDCASE.
    ENDMODULE.
    输出结果如图


    当单击“显示子窗口2”按钮时,显示子窗口200,如图


    3、表条目控制

    表条目控制是实现将多个子屏幕以页面形式切换的控件,有手工制作和向导生成两种,在本节中,不再重复子屏幕创建操作,只表达操作上的特殊性,手工制作的图标是 ,向导制作的图标是

    3.1、手工制作

    进入屏幕设计,单击按钮 ,创建一个表条目控制,如图


    图中控件显示粉红色表示其属性未设置完成。
    逐页设置名称、文本、功能码属性,接着选中“子屏幕范围”按钮,在第一页创建该对象,设定好子屏幕的属性后,第一页就设置完成,不再显示粉红色,如下图中的表一


    3.2、向导制作 

    在设计屏幕上创建“表条目控制制作向导”对象,启动向导程序,如图

    输入名称后,继续

    输入需要建立页面的名称,继续

    向导产生页面子屏幕编号和每页功能码,可以在此基础上调整,继续


    默认调用主屏幕的主程序名称,继续


    系统提示所示设定参数信息,单击“完成"按钮


    打开设计界面,系统自动建立完成全部页面、逻辑流和主程序代码,如图


    4、通过定制控制在屏幕上显示图片

    可以通过“定制”对象在屏幕上显示各种控件,如图片、Tree Control、ALV、编辑器等,后面的实例将会用到这个控件,先介绍在一个定制控制对象内显示图片。

    4.1、图片的上传

    通过TCODE:SMW0上传图片,选择应用程序的二进制数据,单击查找按钮,如图


    搜索条件默认为空,点击执行按钮,如图


    屏幕显示已有对象,单击新增按钮,如图


    输入对象名称,单击输入按钮,如图

    选择需要上传的本对图片

    SAP GUI安全性弹出窗口,单击”允许“按钮


    此处开发类默认为空,单击”本地对象“按钮,如图


    产生传输入请求,单击按钮,如图
    上传成功,屏幕显示新产生的对象行,如图


    相关信息在数据表“WWWDATA”可以查询到,如图


    4.2、屏幕设计定义对象

    在屏幕设计界面添加定制控制对象和“退出”按钮,如图

    4.3、图片显示程序

    程序代码如下:
    REPORT  YTEST20160614002.
    DATA:OK_CODE TYPE SY-UCOMM,
         SAVE_OK TYPE SY-UCOMM.
    *定义控制和图像对象定义
    DATA CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
    DATA PICTURE TYPE REF TO CL_GUI_PICTURE.
    *初始标志字段定义
    DATA INIT.
    
    CALL SCREEN 100.
    
    MODULE USER_COMMAND_0100 INPUT.
      SAVE_OK = OK_CODE.
      CLEAR OK_CODE.
      CASE SAVE_OK.
        WHEN 'CANCEL'.
          LEAVE PROGRAM.
      ENDCASE.
    ENDMODULE.
    
    MODULE STATUS_0100 OUTPUT.
      SET PF-STATUS 'STATUS1'.
    *如果还未创建定制对象
      IF INIT IS INITIAL.
    *图片地址字段定义
        DATA URL(255).
        CLEAR URL.
    *创建对象
        CREATE OBJECT CONTAINER
          EXPORTING CONTAINER_NAME = 'P1'.
    
        CREATE OBJECT PICTURE
          EXPORTING PARENT = CONTAINER
          EXCEPTIONS ERROR = 1.
        IF SY-SUBRC NE 0.
        ENDIF.
    *定义通用函数取得图片地址
        PERFORM LOAD_PIC_DB CHANGING URL.
    *显示图片
        CALL METHOD PICTURE->LOAD_PICTURE_FROM_URL
          EXPORTING
            URL = URL.
        IF SY-SUBRC NE 0.
        ENDIF.
    *置标志位已初始
        INIT = 'X'.
      ENDIF.
    ENDMODULE.
    
    *获取图片地址通用函数
    FORM LOAD_PIC_DB CHANGING P_URL.
      DATA QUERY_TABLE LIKE W3QUERY OCCURS 1 WITH HEADER LINE.
      DATA HTML_TABLE LIKE W3HTML OCCURS 1.
      DATA RETURN_CODE LIKE W3PARAM-RET_CODE.
      DATA CONTENT_TYPE LIKE W3PARAM-CONT_TYPE.
      DATA CONTENT_LENGTH LIKE W3PARAM-CONT_LEN.
      DATA PIC_DATA LIKE W3MIME OCCURS 0.
      DATA PIC_SIZE TYPE I.
    
      REFRESH QUERY_TABLE.
    *查询对象数据
      QUERY_TABLE-NAME = '_OBJECT_ID'.
    *图片对象名称
      QUERY_TABLE-VALUE = 'ZTESTPIC'.
      APPEND QUERY_TABLE.
    *读取WWWDATA表,取得图片对象信息
      CALL FUNCTION 'WWW_GET_MIME_OBJECT'
        TABLES
          QUERY_STRING = QUERY_TABLE
          HTML = HTML_TABLE
          MIME = PIC_DATA
        CHANGING
          RETURN_CODE = RETURN_CODE
          CONTENT_TYPE = CONTENT_TYPE
          CONTENT_LENGTH = CONTENT_LENGTH
        EXCEPTIONS
          OBJECT_NOT_FOUND = 1
          PARAMETER_NOT_FOUND = 2
          OTHERS = 3.
      IF SY-SUBRC EQ 0.
        PIC_SIZE = CONTENT_LENGTH.
      ENDIF.
    *创建图片URL地址
      CALL FUNCTION 'DP_CREATE_URL'
        EXPORTING
          TYPE = 'image'
          SUBTYPE = CNDP_SAP_TAB_UNKNOWN
          SIZE = PIC_SIZE
          LIFETIME = CNDP_LIFETIME_TRANSACTION
          TABLES
            DATA = PIC_DATA
          CHANGING
            URL = URL
      EXCEPTIONS
        DP_INVALID_PARAMETER = 1
        DP_ERROR_PUT_TABLE = 2
        DP_ERROR_GENERAL = 3
        OTHERS = 4.
    ENDFORM.

    4.4、程序输出

    程序运行,输出结果如图

    可以在此基础上添加图片双击事件,此处就不再介绍了。

    5、通过定制控制文本编辑器

    在SAP业务系统中,大量用到文本编辑器,用文本编辑器处理内表,所以本节在屏幕上创建文本编辑器,输入相关内容后,在屏幕退出时输出编辑器内容。

    5.1、屏幕设计定义对象

    在屏幕设计界面定义控制对象,退出按钮。

    5.2、文本编辑器程序

    REPORT  YTEST20160614003.
    DATA: OK_CODE TYPE SY-UCOMM,
          SAVE_OK TYPE SY-UCOMM.
    *初始标志字段定义
    *定制控制和编辑对象定义
    DATA: INIT,
          CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
          EDITOR TYPE REF TO CL_GUI_TEXTEDIT.
    
    DATA: M1(256) TYPE C OCCURS 0,
          LINE(256) TYPE C.
    *输入初始值
    LINE = '请输入'.
    APPEND LINE TO M1.
    
    CALL SCREEN 100.
    
    REFRESH M1.
    
    CALL METHOD EDITOR->GET_TEXT_AS_R3TABLE
      IMPORTING
        TABLE = M1.
    *逐行输出
    LOOP AT M1 INTO LINE.
      WRITE / LINE.
    ENDLOOP.
    
    MODULE USER_COMMAND_0100 INPUT.
      SAVE_OK = OK_CODE.
      CLEAR OK_CODE.
      CASE SAVE_OK.
        WHEN 'CANCEL'.
          LEAVE TO SCREEN 0.
      ENDCASE.
    ENDMODULE.
    
    MODULE STATUS_0100 OUTPUT.
      SET PF-STATUS 'STATUS1'.
    *如果还未创建定制对象
      IF INIT IS INITIAL.
        INIT = 'X'.
    
        CREATE OBJECT: CONTAINER EXPORTING CONTAINER_NAME = 'P1'.
    
        CREATE OBJECT EDITOR
          EXPORTING
            PARENT = CONTAINER
            WORDWRAP_MODE = CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION
            WORDWRAP_POSITION = 256
            WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>TRUE.
      ENDIF.
    *读入初始数据
      CALL METHOD EDITOR->SET_TEXT_AS_R3TABLE
        EXPORTING
          TABLE = M1.
    ENDMODULE.

    5.3、输出

    程序运行后,屏幕显示文本编辑器,在编辑框内输入文字,如图

    单击“CANCEL”按钮,退出文本编辑器屏幕,输出内表记录,如图

    6、列表和屏幕相互调用

    6.1、从屏幕输入条件,列表输出数据

    以表为YTJAYSCHOOL例,建立一个输入字段和一个查询按钮的屏幕,当单击查询按钮时,根据该输入字段检索,将数据通过列表输出。
    添加一个文本字段,并定义名称和文本,然后建立输入框,字段属性为输入输出字段,再添加“确认”按钮和“取消”按钮,如图

    逻辑流程序如下

    切换到元素清单页面,定义变量“OK_CODE”,如图

    主程序代码如下
    REPORT  YTEST20160614004.
    DATA: OK_CODE TYPE SY-UCOMM,
          SAVE_OK TYPE SY-UCOMM,
          CITYID(20) TYPE C.
    TABLES YTJAYSCHOOL.
    
    CALL SCREEN 100.
    
    MODULE CANCEL INPUT.
      LEAVE PROGRAM.
    ENDMODULE.
    
    MODULE USER_COMMAND_0100 INPUT.
      SAVE_OK = OK_CODE.
      CLEAR OK_CODE.
      IF SAVE_OK EQ 'BTN1'.
        LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.
        SUPPRESS DIALOG.
        SELECT *
          FROM YTJAYSCHOOL WHERE YCT_ID = CITYID.
          WRITE: / YTJAYSCHOOL-YCT_ID, YTJAYSCHOOL-YSH_ID,
                   YTJAYSCHOOL-YSH_NAME, YTJAYSCHOOL-YSH_ADDR.
        ENDSELECT.
      ENDIF.
      WRITE:/ 'DONE'.
    ENDMODULE.
    输出结果如图所示,在输入框输入条件,单击“确认”按钮

    系统输出如图

    6.2、从列表调用屏幕

    以YTJAYSCHOOL表为例,在屏幕上输出列表,当双击某一行时,调用屏幕显示数据明细。
    首先建立程序YTEST20160615001,然后建立显示屏幕,在屏幕界面单击“字典字段”按钮,输入学校表后,屏幕显示表字段,选择字段,确认,如图

    选择输出位置,单击后,系统自动创建输入文本和输出字段,添加退出按钮,如图

    逻辑流程序如图

    切换到元素清单页面后,定义变量“OK_CODE”,如图

    主程序代码如下
    REPORT  YTEST20160615001.
    
    *功能码返回值
    DATA: OK_CODE TYPE SY-UCOMM,
          SAVE_OK TYPE SY-UCOMM.
    
    TABLES YTJAYSCHOOL.
    
    START-OF-SELECTION.
      SELECT * FROM YTJAYSCHOOL.
        WRITE:/ YTJAYSCHOOL-YCT_ID, (15) YTJAYSCHOOL-YSH_ID,
              (15) YTJAYSCHOOL-YSH_NAME, (15) YTJAYSCHOOL-YSH_ADDR.
    
        HIDE: YTJAYSCHOOL-YCT_ID, YTJAYSCHOOL-YSH_ID,
               YTJAYSCHOOL-YSH_NAME,  YTJAYSCHOOL-YSH_ADDR.
    
      ENDSELECT.
    
    AT LINE-SELECTION.
      CHECK NOT YTJAYSCHOOL-YSH_ID IS INITIAL.
      CALL SCREEN 100.
    
    MODULE CANCEL INPUT.
      LEAVE PROGRAM.
    ENDMODULE.
    
    MODULE USER_COMMAND_0100 INPUT.
      SAVE_OK = OK_CODE.
      CLEAR OK_CODE.
      CASE SAVE_OK.
      WHEN 'CANCEL'.
        LEAVE PROGRAM.
      ENDCASE.
    ENDMODULE.
    执行结果如图

    当选择某一行,输出结果如图



    展开全文
  • 语法: 选择屏幕块 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME "包含框架 TITLE TEXT-001 "包含标题 NO INTERVALS "只有一个输入框

    语法:

    选择屏幕块

    SELECTION-SCREEN BEGIN OF BLOCK b1
                                         WITH FRAME     "包含框架
                                         TITLE TEXT-001 "包含标题
                                         NO INTERVALS   "只有一个输入框
                                         .
      SELECT-OPTIONS: s_matnr FOR mard-matnr.
    SELECTION-SCREEN END OF BLOCK b1.
    

    创建屏幕

    SELECTION-SCREEN BEGIN OF SCREEN 9004.
      SELECTION-SCREEN BEGIN OF BLOCK b2.
        SELECT-OPTIONS: s_matnr FOR mard-matnr.
        PARAMETERS: p_matnr TYPE mard-matnr.
        SELECTION-SCREEN ULINE. "换行线
      SELECTION-SCREEN END OF BLOCK b2.
    SELECTION-SCREEN END OF SCREEN 9004.
    

    参考已定义屏幕元素创建屏幕

    CALL SCREEN 9003.
    
    SELECTION-SCREEN BEGIN OF SCREEN 9004.
      SELECTION-SCREEN BEGIN OF BLOCK b2.
        SELECT-OPTIONS: s_matnr FOR mard-matnr.
        PARAMETERS: p_matnr TYPE mard-matnr.
        SELECTION-SCREEN ULINE. "换行线
      SELECTION-SCREEN END OF BLOCK b2.
    SELECTION-SCREEN END OF SCREEN 9004.
    
    SELECTION-SCREEN BEGIN OF SCREEN 9003.
      SELECTION-SCREEN INCLUDE BLOCKS b2. "參照SCREEN 9004中的BLOCK
      PARAMETERS: p_char TYPE char1 AS CHECKBOX.
    SELECTION-SCREEN END OF SCREEN 9003.
    

    在这里插入图片描述


    弹窗

    作为窗体的好处是可以定义好,根据需要调用。

    SELECTION-SCREEN BEGIN OF SCREEN 9001 AS WINDOW TITLE TEXT-001.
      PARAMETERS: p_matnr TYPE mard-MATNR.
    SELECTION-SCREEN END OF SCREEN 9001.
    
    CALL SCREEN 9001 STARTING AT 20 20 ENDING AT 80 20.
    

    在这里插入图片描述

    双重选择屏幕,点击运行按钮,调用第二个窗口

    PARAMETERS: p_check TYPE char1 AS CHECKBOX.
    
    IF p_check = 'X'.
      CALL SELECTION-SCREEN 9002.
    ENDIF.
    
    SELECTION-SCREEN BEGIN OF SCREEN 9002 AS WINDOW TITLE TEXT-001.
      PARAMETERS: p_matnr TYPE mard-MATNR.
    SELECTION-SCREEN END OF SCREEN 9002.
    

    在这里插入图片描述
    在这里插入图片描述


    子屏幕

    通过程序创建一个子屏幕:

    SELECTION-SCREEN BEGIN OF SCREEN dynnr_num AS SUBSCREEN.
    	...
    SELECTION-SCREEN END OF SCREEN dynnr_num.
    

    子屏幕可以嵌入到Tabstrip中使用

    SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN. "子屏幕
      SELECTION-SCREEN BEGIN OF BLOCK BK1  WITH FRAME TITLE TEXT-001.
        SELECT-OPTIONS: s_matnr FOR mard-MATNR.
        SELECTION-SCREEN SKIP. "间隔行
        PARAMETERS p_ck AS CHECKBOX.
      SELECTION-SCREEN END OF BLOCK BK1.
    SELECTION-SCREEN END OF SCREEN 100.
    
    SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
      PARAMETERS p_matnr TYPE mard-matnr.
    SELECTION-SCREEN END OF SCREEN 200.
    
    SELECTION-SCREEN:BEGIN OF TABBED BLOCK mytab FOR 5 LINES, "页签高度
      tab (20) bt1 user-COMMAND push1 DEFAULT SCREEN 100, "(20) Tab标题显示的宽度; bt1 Tab的标题; 
      tab (20) bt2 USER-COMMAND push2,
      END OF BLOCK mytab.
    
    INITIALIZATION.
      bt1 = '01'. "页签选项卡标题
      bt2 = '02'.
      mytab-prog = sy-repid.
      mytab-dynnr = 100. "默认屏幕
    
    AT SELECTION-SCREEN.
      CASE sy-UCOMM.
        WHEN 'PUSH1'.
          mytab-dynnr = 100.
        WHEN 'PUSH2'.
          mytab-dynnr = 200.
        WHEN OTHERS.
      ENDCASE.
    

    普通选择屏幕,可以使用CALL SELECTION-SCREEN来单独调用子屏幕,比如“双重选择屏幕,点击运行按钮,调用第二个窗口”
    dialog通过CALL SUBSCREEN语句将子屏幕嵌入到对话屏幕中:

    PROCESS BEFORE OUTPUT.
    CALL SUBSCREEN <area> INCLUDING [<prog>] <dynp>.
    ...子屏幕都需要放在主屏幕中的某个指定的<area>区域元素中
    
    为了调用子屏幕的PAI事件,需要在主屏幕的PAI flow logic里如下调用:
    PROCESS AFTER INPUT.
      CALL SUBSCREEN <area>.
    ...
    
    展开全文
  • 屏幕ABAP设计最重要的工作,SAP的单据,主数据维护等业务功能都要使用屏幕,一个程序可以包含多个屏幕屏幕设计中的dialog是用户和程序之间任意形式的交互,如: 输入数据; 选择菜单项; 单击按钮; 单击或双专...
  • ABAP选择屏幕(SELECTION SCREEN)解析

    千次阅读 2015-09-10 08:58:56
    ABAP选择屏幕(SELECTION SCREEN)解析
  • ABAP标准屏幕调用选择屏幕

    千次阅读 2014-01-22 09:21:17
    有时候标准屏幕不能达到想要的效果, 比如: 标准屏幕没有SELECT-OPTIONS: 下面实现标准屏幕调用选择屏幕: 1、定义一个标准屏幕:9001. 2、定义个subscreen控件 SUB 3、定义选择屏幕:9999 SELECTION-SCREEN ...
  • ABAP实战屏幕SCREEN设计(一)

    万次阅读 多人点赞 2016-06-14 08:46:41
    屏幕(SCREEN)是ABAP设计最重要的工作之一,SAP的单据、主数据维护等业务功能都使用屏幕,一个程序可以包含多个屏幕。 本文主要介绍: (1)第一个"HELLO WORLD" Screen程序 (2)工具条和菜单设计 (3)屏幕对象 (4)数据...
  • ABAP选择屏幕关联搜索帮助

    千次阅读 2018-05-14 23:14:46
    在选择屏幕的开发过程中,常用到自定义的搜索帮助,有些情况下需要更新不止一个字段以下代码提供一种实现方法(会计年度和期间的同时更新)FORM frm_year_help .  DATA:lv_month TYPE isellist-month.  data:...
  • 屏幕逻辑流有PBO和PAI
  • abap选择屏幕上的按钮

    千次阅读 2015-06-02 13:38:33
    1、背景:最近在看sap的一些abapDemo,看了一个比较好用的功能,分享一下,希望对用到的兄弟有帮助,主要功能是:在选择屏幕上弹出一个小窗口,放一些按钮在上面,触发不同按钮,会处理不同事务,如下图所示:
  • abap screnn屏幕编程中,对屏幕中的字段追加多选search help F4 用子屏幕的方法实现, [ABAP] Add select-options screen to screen 1 、定义select...
  • 在自定义屏幕如何调用选择屏幕呢,通过选择屏幕输入查询条件,然后进行相关的操作。在这里有两个技术难点: 1、如何定义可以调用的选择屏幕、调用选择屏幕; 2、如何捕捉到选择屏幕的操作、选择屏幕屏幕号; ...
  • 1、Selection Screen(选择屏幕)标题的修改. 然后生成选屏界面的标题,如图: 若是需要修改该标题,可按以下两步进行操作: (1)在ABAP编辑器页面,选择“转到”-->“属性” 2)在新弹出的对话框中...
  • ABAP屏幕基础

    2017-02-04 09:08:24
    Select语句的使用 关键字into后可以加 structure(结构体), internal table(内表) 和 fieldlist(字段列表)     Authority 权限   程序员可以根据权限对象创建权限实例 ...在选择屏幕中输入值
  • ABAP 选择屏幕上显示ALV(仅限于简单报表) 业务需求:我能不能不跳转到里面去查看信息,我就想在一个屏幕里面查看数据,上面是查询条件,下面是输出的结果表格,我不管,我就要~~呀!还给我我一张草图: emmmm每当...
  • (3) 使用子屏幕 CALL SUBSCREEN <AREA> INCLUDING <PROGRAM> (4)设置光标位置 SET CURSOR FIELD <FIELD_NAME> OFFSEY <POSITION> 设置光标的特定位置 (5)设置下一个屏幕 SET SCREEN <SCREEN_NUMBER>. CALL ...
  • 如果要实现自定义屏幕的SELECT-OPTIONS,只能通过子屏幕来实现. 主要步骤如下: 1.在主程序中定义一个子屏幕,这里我们定义子屏幕10 SELECTION-SCREEN:BEGIN OF SCREEN 10 AS SUBSCREEN. SELEC.
  • 一、效果: 二、代码: 
  • ABAP选择屏幕的例子

    千次阅读 2011-11-14 13:12:53
    下面是一个典型的选择屏幕的典型例子. 1.设置选择屏幕参数. ***begin(end) of block使用屏幕元素逻辑块. SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TITLE1. ***定义选择标准,比如那些屏幕子段...
  • 在设定选择屏幕的时候,有需求必须用PARAMETERS来实现,但是直接写会多个PARAMETERS会出现多行,这样看起来不美观不整齐,影响用户使用。 可以用SELECTION-SCREEN BEGIN OF LINE.这个格式,把多个屏幕元素控制在...
  • ABAP 屏幕双滚动条

    2021-06-09 17:35:37
    当我们在屏幕中加入子屏幕的时候出现双滚动条其实很容易解决。 首先看一下在主屏幕中画子屏幕的占比。长宽高 146 52 8 再去子屏幕看看实际的占比 155 48 就发现原来是长度大于主屏幕中的值,只要找到子屏幕在上图...
  • 为控件页签单击事件, 选择不同页签显示不同子屏幕. AT SELECTION-SCREEN . CASE SY- UCOMM. WHEN ' PUSH1 ' . MYTAB -DYNNR = 100 . MYTAB -ACTIVETAB = ' BUTTON1 ' . WHEN ' PUSH2 ' . MYTAB -...
  • 业务分析:通常查看一个报表需要至少跳转一次屏幕,并且如果想要查看更多的数据需要返回到选择屏幕重新选择条件。 解决方案:选择屏幕和ALV报表在一个屏幕上,可重复选择条件然后查看自己想要的数据。 CLASS lcl_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,467
精华内容 586
关键字:

abap子屏幕