* An ABAP reporting tree program that allows the user to press enter or double click on
* any line. The report is updated with new internal table data and re-written. The cursor
* and paging returns to the exact same line the user was on, even though the report was
* re-written from the internal table. Input fields are filled with data based on ENTER of
* DOUBLE CLICK. [+] and [-] is displayed on each line and changes if user selects to
* expand/collapse.
*
* Create a gui status (8000) with Functions Keys
* ENTER = ENTE
* BACK = BACK
* EXIT = %EX
* CANCEL = RW
* PICK = F2
* EXPAND ALL = EXPA
* COLLAPSE ALL = COLA
*
* Written by : SAP Basis, ABAP Programming and Other IMG Stuff
*
http://www.sap-img.com
*
REPORT ZTREE NO STANDARD PAGE HEADING
LINE-COUNT 65
LINE-SIZE 80.
DATA: BEGIN OF IT_DATA OCCURS 0,
EXP(1) TYPE C,
WERKS LIKE T001W-WERKS,
MATNR LIKE MARA-MATNR,
VALUE1(13) TYPE C,
VALUE2(13) TYPE C,
END OF IT_DATA.
DATA: W_MATNR LIKE MARA-MATNR,
W_COUNT TYPE I,
G_FIELD(40) TYPE C.
DATA: BEGIN OF PAGE,
SCRLLINE LIKE SYST-LILLI, "scroll line to top of screen
CURSLINE LIKE SYST-LILLI, "line to put cursor on
HDRLINES TYPE I, "lines in header + 1
TWOHDRS TYPE I, "two headers on screen
CPOSTOP TYPE I, "position of cursor from top
CPOSBOT TYPE I, "position of cursor from bottom
CPOSIT TYPE I, "position on the screen
PAGNO TYPE I, "pageno of line
PGELINES TYPE I, "lines used so far
END OF PAGE.
START-OF-SELECTION.
PERFORM BUILD_IT_DATA.
END-OF-SELECTION.
PERFORM WRITE_REPORT.
TOP-OF-PAGE.
PERFORM TOP_OF_PAGE.
TOP-OF-PAGE DURING LINE-SELECTION.
PERFORM TOP_OF_PAGE.
AT LINE-SELECTION.
G_FIELD = SPACE.
GET CURSOR FIELD G_FIELD.
PERFORM LINE_SELECTION.
AT USER-COMMAND.
G_FIELD = SPACE.
GET CURSOR FIELD G_FIELD.
PERFORM USER_COMMAND.
*---------------------------------------------------------------------*
* FORM BUILD_IT_DATA *
*---------------------------------------------------------------------*
FORM BUILD_IT_DATA.
IT_DATA-WERKS = '0000'.
WHILE IT_DATA-WERKS < '0100'.
ADD '10' TO IT_DATA-WERKS.
W_MATNR = 0.
WHILE W_MATNR < 10.
ADD 1 TO W_MATNR.
IT_DATA-EXP = '+'.
WRITE W_MATNR TO IT_DATA-MATNR.
IF IT_DATA-WERKS = 10 AND W_MATNR = 1.
WRITE 'ZTEST2' TO IT_DATA-VALUE1.
WRITE 'Testing program 2' TO IT_DATA-VALUE2.
ELSE.
CLEAR: IT_DATA-VALUE1, IT_DATA-VALUE2.
ENDIF.
APPEND IT_DATA.
ENDWHILE.
ENDWHILE.
ENDFORM.
*---------------------------------------------------------------------*
* FORM WRITE_REPORT *
*---------------------------------------------------------------------*
FORM WRITE_REPORT.
SET PF-STATUS '8000'.
SYST-LSIND = '0'.
LOOP AT IT_DATA.
AT NEW WERKS.
FORMAT COLOR COL_HEADING INTENSIFIED OFF.
WRITE: /1 SYST-VLINE NO-GAP,
'[' NO-GAP,
IT_DATA-EXP NO-GAP HOTSPOT ON,
']'.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
WRITE: IT_DATA-WERKS,
AT SYST-LINSZ SYST-VLINE.
PAGE-PAGNO = SYST-PAGNO.
HIDE: IT_DATA-WERKS, PAGE-PAGNO.
ENDAT.
IF IT_DATA-EXP = '-'.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: /1 SYST-VLINE,
8 IT_DATA-MATNR,
IT_DATA-VALUE1 INPUT ON,
IT_DATA-VALUE2 INPUT ON,
AT SYST-LINSZ SYST-VLINE.
HIDE: IT_DATA, PAGE-PAGNO.
ENDIF.
ENDLOOP.
ULINE.
ENDFORM.
*---------------------------------------------------------------------*
* FORM USER_COMMAND *
*---------------------------------------------------------------------*
FORM USER_COMMAND.
PERFORM SET_SCROLL_LINE.
CASE SY-UCOMM.
WHEN 'ENTE'.
READ TABLE IT_DATA WITH KEY WERKS = IT_DATA-WERKS
MATNR = IT_DATA-MATNR.
IF SYST-SUBRC = 0.
CASE G_FIELD.
WHEN 'IT_DATA-VALUE1'.
IF IT_DATA-VALUE1 <> SPACE.
SUBMIT (IT_DATA-VALUE1) VIA SELECTION-SCREEN AND RETURN.
ELSE.
IT_DATA-VALUE1 = 'Enter 1 Press'(001).
ENDIF.
WHEN 'IT_DATA-VALUE2'.
IT_DATA-VALUE2 = 'Enter 2 Press'(001).
ENDCASE.
MODIFY IT_DATA INDEX SYST-TABIX.
ENDIF.
PERFORM WRITE_REPORT.
PERFORM POSITION_LIST.
CASE G_FIELD.
WHEN 'IT_DATA-EXP'.
ADD 1 TO PAGE-CURSLINE.
SET CURSOR FIELD 'IT_DATA-VALUE1' LINE PAGE-CURSLINE.
WHEN 'IT_DATA-VALUE1'.
SET CURSOR FIELD 'IT_DATA-VALUE1' LINE PAGE-CURSLINE.
WHEN 'IT_DATA-VALUE2'.
SET CURSOR FIELD 'IT_DATA-VALUE2' LINE PAGE-CURSLINE.
ENDCASE.
WHEN 'EXPA'.
PERFORM SET_EXPAND USING '-'.
PERFORM WRITE_REPORT.
WHEN 'COLA'.
PERFORM SET_EXPAND USING '+'.
PERFORM WRITE_REPORT.
ENDCASE.
ENDFORM.
*---------------------------------------------------------------------*
* FORM SET_EXPAND *
*---------------------------------------------------------------------*
FORM SET_EXPAND USING W_EXP.
LOOP AT IT_DATA.
IT_DATA-EXP = W_EXP.
MODIFY IT_DATA INDEX SYST-TABIX.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM LINE_SELECTION *
*---------------------------------------------------------------------*
FORM LINE_SELECTION.
PERFORM SET_SCROLL_LINE.
READ TABLE IT_DATA WITH KEY WERKS = IT_DATA-WERKS
MATNR = IT_DATA-MATNR.
CASE G_FIELD.
WHEN 'IT_DATA-EXP'.
LOOP AT IT_DATA WHERE WERKS = IT_DATA-WERKS.
IF IT_DATA-EXP = '-'.
IT_DATA-EXP = '+'.
ELSE.
IT_DATA-EXP = '-'.
ENDIF.
MODIFY IT_DATA INDEX SYST-TABIX.
ENDLOOP.
WHEN 'IT_DATA-VALUE1'.
IT_DATA-VALUE1 = 'Double Click'(004).
MODIFY IT_DATA INDEX SYST-TABIX.
WHEN 'IT_DATA-VALUE2'.
IT_DATA-VALUE2 = 'Double Click'(004).
MODIFY IT_DATA INDEX SYST-TABIX.
ENDCASE.
PERFORM WRITE_REPORT.
PERFORM POSITION_LIST.
CASE G_FIELD.
WHEN 'IT_DATA-EXP'.
ADD 1 TO PAGE-CURSLINE.
SET CURSOR FIELD 'IT_DATA-VALUE1' LINE PAGE-CURSLINE.
WHEN 'IT_DATA-VALUE1'.
SET CURSOR FIELD 'IT_DATA-VALUE1' LINE PAGE-CURSLINE.
WHEN 'IT_DATA-VALUE2'.
SET CURSOR FIELD 'IT_DATA-VALUE2' LINE PAGE-CURSLINE.
ENDCASE.
ENDFORM.
*---------------------------------------------------------------------*
* FORM SET_SCROLL_LINE *
* determine the correct line to scroll the re-written report to, so *
* that the user is returned to the same spot on the screen *
* if user is mid way between pages, ie two headers are visable on the *
* screen, check if they are on the secondary page and adjust the *
* scroll variable accordingly so as not to jump up lines because the *
* scroll variable will be out by the number of lines in the extra hdr *
*---------------------------------------------------------------------*
FORM SET_SCROLL_LINE.
PAGE-CURSLINE = SYST-LILLI.
PAGE-SCRLLINE = SYST-LILLI - ( SYST-CUROW - PAGE-HDRLINES ).
PAGE-PGELINES = ( PAGE-PAGNO - 1 ) * SYST-LINCT.
PAGE-CPOSTOP = ( PAGE-SCRLLINE + SYST-CUROW ) - PAGE-PGELINES.
PAGE-CPOSBOT = ( PAGE-SCRLLINE - SYST-CUROW ) - PAGE-PGELINES.
PAGE-CPOSIT = PAGE-CPOSTOP + PAGE-CPOSBOT.
PAGE-TWOHDRS = PAGE-HDRLINES * 2.
IF PAGE-CPOSIT LT PAGE-TWOHDRS.
PAGE-SCRLLINE = PAGE-SCRLLINE + 1.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM POSITION_LIST *
*---------------------------------------------------------------------*
FORM POSITION_LIST.
CALL FUNCTION 'LIST_SCROLL_LINE_TOPMOST'
EXPORTING
LIST_INDEX = 1
LIST_LINE = PAGE-SCRLLINE
EXCEPTIONS
OTHERS = 1.
CHECK SYST-SUBRC = 0.
ENDFORM.
*---------------------------------------------------------------------*
* FORM TOP_OF_PAGE *
*---------------------------------------------------------------------*
FORM TOP_OF_PAGE.
* set page-hdrlines = lines in header + 1 system generated blank line
PAGE-HDRLINES = 5.
ULINE.
WRITE : /1 SYST-VLINE, 'Header'(002), AT SYST-LINSZ SYST-VLINE.
WRITE : /1 SYST-VLINE, 'Lines'(003), AT SYST-LINSZ SYST-VLINE.
ULINE.
ENDFORM.
分享到:
相关推荐
在ABAP编程中,"ABAP TREE"是一种数据结构,用于存储和处理层次化或树状的数据。在本文中,我们将深入探讨ABAP中的树结构,包括它的定义、使用场景、如何创建以及相关的操作。 首先,理解ABAP TREE的基础概念至关...
根据给定的文件信息,我们可以深入探讨"SAP RFC Programming in ABAP"这一主题,这是一个在SAP系统中非常重要的技术领域,特别是在企业级应用集成和跨系统数据交换方面。 ### SAP RFC编程基础 SAP Remote Function...
SAP BC415 Communication Interfaces in ABAP
### ABAP In Eclipse 介绍文档知识点详述 #### 一、引言与背景 - **ABAP In Eclipse** 是一种外部开发工具,旨在为 SAP 的 ABAP 开发者提供更强大的编辑功能。它通过将 ABAP 的开发能力扩展到 Eclipse 开发环境中...
A complete description of all ABAP keywords in their relevant context. ABAP - Quick Reference A short overview of all statements, ordered alphabetically. ABAP - Release-Specific Changes List ...
在ABAP编程环境中,TCP/IP套接字编程是实现与外部系统进行网络通信的重要手段。TCP/IP协议族是互联网上最广泛使用的通信协议,而ABAP作为SAP系统的编程语言,支持通过TCP/IP进行socket通信,允许ABAP程序直接与任何...
以下是对"abap plug-in eclipse"的详细知识解释: 1. **Eclipse IDE**:Eclipse是一款开源的、跨平台的集成开发环境,广泛用于Java开发,但通过安装各种插件,也可支持C++, Python, ABAP等其他语言。其特性包括源...
【Enabling ABAP in Eclipse】是一项让ABAP开发者能够在Eclipse集成开发环境中进行开发的工作。这一功能的引入为ABAP程序员提供了更为现代化和灵活的开发工具,与传统的SAP Development Workbench相比,Eclipse提供...
### SAP Note 176336: Flat and Deep Structures in ABAP #### 概述 SAP Note 176336 主要关注 ABAP 编程语言中的扁平(flat)结构与深层(deep)结构的概念。在 ABAP 中,结构是一种复杂的数据类型,用于组织和...
标题“Developing UI5 Apps Purely in ABAP”指出,这个压缩包可能包含关于如何在ABAP环境中开发UI5应用程序的资源。UI5是SAP提供的一个开源框架,用于构建企业级的用户界面,而ABAP(Advanced Business Application...
ABAP in BW是SAP BW(商务仓库)系统中用于编程和增强后端功能的ABAP(高级企业应用编程)技术的专称。本知识点将从ABAP在BW中的应用、性能优化、增强机制以及数据处理等方面进行详细解读。 首先,ABAP in BW的学习...
根据给定的文件信息,我们可以深入探讨SAP ABAP Reporting这一关键知识点,它涉及SAP系统中的报告开发和处理。 ### SAP ABAP Reporting概览 SAP ABAP Reporting是SAP系统内一种强大的报告工具,它允许用户创建、...
本培训课程"Remote Function Calls in ABAP"旨在教授开发人员如何有效地利用RFC进行跨系统交互。 RFC是一种标准化的接口技术,使得ABAP程序能够调用远程系统中的函数模块,就像它们是本地函数模块一样。这在分布式...
ABAP 函数调用方法详解 ABAP 函数调用是 SAP 系统中的一种常用技术,用于实现业务逻辑的复杂处理。该技术可以实现同步调用和异步调用两种方式,本文将对这两种方式进行详细的介绍。 1. 异步调用 异步调用是指在主...
在 SAP 系统中,ALVTREE 是一种用于展示层级数据的控件,它与标准的 TREE 控件有所不同。在标准的 ALVTREE 实现中,并没有提供预置的完全展开和完全合并的功能,因此在实际应用中,我们需要通过自定义的方式来实现...
### SAP ABAP in 21 Days #### 一、引言与学习目标 《SAP ABAP in 21 Days》是一本旨在帮助初学者快速掌握SAP ABAP编程语言的指南书。这本书通过为期三周的教学计划,系统地介绍了ABAP的基础知识和技术要点。作者...
**ABAP RFC编程详解** ABAP (Advanced Business Application Programming) 是SAP系统中的一种编程语言,主要用于开发企业级的应用程序。在ABAP中,Remote Function Call (RFC) 是一种核心功能,它允许不同系统间...
手册中可能包含报表开发、GUI屏幕设计、BADI(Business Add-In)应用、RFC(Remote Function Call)调用等实例,帮助开发者将理论知识转化为实践技能。 综上所述,"SAP_ABAP_4.7.CHM"是学习和精通SAP ABAP 4.7开发...
这个文档集包含了ABAP的所有核心概念、语法、函数模块、类库、表单以及报告编写等多方面的内容,旨在帮助用户理解和掌握ABAP编程。 在ABAP DOCU HTML中,你可以找到以下几个重要的知识领域: 1. **ABAP基本语法**...
在SAP系统中,ABAP调用ABAP Proxy是一种常见的技术操作,用于在不同系统间或者同一系统内的组件之间实现通信。ABAP Proxy是SAP提供的一个强大的接口技术,它允许开发者创建安全、高效的远程调用机制。接下来,我们将...