TABLE CONTROL 跳页代码

本文介绍了如何在SAP中实现TABLE CONTROL的跳页功能,包括跳转到第一页、上一页、下一页和最后一页的代码实现。通过调用COMPUTE_SCROLLING_IN_TC形式,根据传入的TABLE CONTROL名称和按钮功能码进行屏幕滚动操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      TABLE CONTROL 跳转代码总结,TABLE CONTROL的名字是SCR_RESULT,

屏幕上分别有四个按钮:第一页,上一页,下一页和最后一页

 定义全局变量:

DATA:  G_SCR_RESULT_LINES  LIKE SY-LOOPC.

在屏幕PBO里面设置G_SCR_RESULT_LINES  的值:

PROCESS BEFORE OUTPUT.

...

LOOP AT   SCREEN_RESULT
       INTO SCREEN_RESULT
       WITH CONTROL SCR_RESULT
       CURSOR SCR_RESULT-CURRENT_LINE.
    MODULE SET_4103_TC_LINES.
*&SPWIZARD:   MODULE SCR_RESULT_CHANGE_FIELD_ATTR
  ENDLOOP.

...

 

MODULE SET_4103_TC_LINES OUTPUT.
  G_SCR_RESULT_LINES = SY-LOOPC.
ENDMODULE.  

...

 

以下就是详细调用代码:

 "跳到第一页

PERFORM COMPUTE_SCROLLING_IN_TC USING  'SCR_RESULT' 'P--'.

 "跳到上一页

PERFORM COMPUTE_SCROLLING_IN_TC USING  'SCR_RESULT' 'P-'.

 "跳到下一页

PERFORM COMPUTE_SCROLLING_IN_TC USING  'SCR_RESULT' 'P+'.

 "跳到最后一页

PERFORM COMPUTE_SCROLLING_IN_TC USING  'SCR_RESULT' 'P++'.

 

"跳转代码

"说明: P_TC_NAME   -- TABLE CONTROL的名字 

"             P_OK -- 屏幕跳转按钮的功能码

"                            固定值:P-- (第一页)     P- (上一页)

"                                             P+  (下一页)    p++(最后一页)

FORM COMPUTE_SCROLLING_IN_TC USING    P_TC_NAME   P_OK.

  DATA L_TC_NEW_TOP_LINE     TYPE I.
  DATA L_TC_NAME             LIKE FELD-NAME.
  DATA L_TC_LINES_NAME       LIKE FELD-NAME.
  DATA L_TC_FIELD_NAME       LIKE FELD-NAME.
  DATA:     L_SCR_RESULT_LINES  LIKE SY-LOOPC.
  FIELD-SYMBOLS <TC>         TYPE CXTAB_CONTROL.
  FIELD-SYMBOLS <LINES>      TYPE I.

  ASSIGN (P_TC_NAME) TO <TC>.
  CONCATENATE 'L_' P_TC_NAME '_LINES' INTO L_TC_LINES_NAME.
  ASSIGN (L_TC_LINES_NAME) TO <LINES>.

  IF <TC>-LINES = 0.

    L_TC_NEW_TOP_LINE = 1.
  ELSE.

    CALL FUNCTION 'SCROLLING_IN_TABLE'
         EXPORTING
              ENTRY_ACT             = <TC>-TOP_LINE
              ENTRY_FROM            = 1
              ENTRY_TO              = <TC>-LINES
              LAST_PAGE_FULL        = 'X'
              LOOPS                 = <LINES>
              OK_CODE               = P_OK
              OVERLAPPING           = 'X'
         IMPORTING
              ENTRY_NEW             = L_TC_NEW_TOP_LINE
         EXCEPTIONS
              OTHERS                = 0.
  ENDIF.

  GET CURSOR FIELD L_TC_FIELD_NAME
             AREA  L_TC_NAME.

  IF SYST-SUBRC = 0.
    IF L_TC_NAME = P_TC_NAME.
      SET CURSOR FIELD L_TC_FIELD_NAME LINE 1.
    ENDIF.
  ENDIF.

  <TC>-TOP_LINE = L_TC_NEW_TOP_LINE.

ENDFORM.

<think>好的,用户之前让我帮忙设计一个项目来包装他的技能,包括SQL、Oracle、Shell脚本、Linux和帆软报表。现在他想要一个完整的代码流程。我需要确保提供的代码示例既实用又不会太复杂,以免他难以解释。 首先,用户是转行者,可能对实际项目中的代码结构不太熟悉,所以代码需要简单明了,每个步骤都要清晰。之前的回复已经分步骤讲解了项目结构,现在需要具体到代码层面,让他能直接复制到简历或面试中参考。 用户可能希望看到整个流程的代码,从数据采集到报表生成。需要包括Shell脚本、SQL示例以及帆软报表的部分。但帆软主要是图形化操作,可能无法提供代码,所以重点放在SQL和Shell上。 要注意代码的可读性和注释,方便用户理解每一步的作用。同时,要指出可能遇到的问题及解决方法,帮助他提前准备应对面试中的技术问题。 另外,用户的时间紧迫,可能需要快速上手的示例,避免复杂的配置。比如使用基本的Shell命令和常见的SQL操作,确保他能够轻松修改和适配自己的项目。 最后,提醒用户根据实际环境调整路径和配置,比如数据库连接信息、文件路径等,确保代码能够运行。同时,建议他准备帆软报表的截图,即使使用模拟数据,也能增强项目的可信度。</think>好的!以下是一个完整的、**可运行且逻辑闭环的代码流程示例**,涵盖数据采集 → 清洗 → 分析 → 报表生成的完整链路。代码会尽量简化,但保留核心逻辑,方便你理解并移植到简历中。 --- ### **完整代码流程示例** #### **1. 数据采集与导入(Shell脚本 + Oracle)** - **场景**:每天凌晨1点自动从服务器A同步车险数据到本地,并导入Oracle数据库 - **代码文件**:`sync_and_load.sh` ```bash #!/bin/bash # 1. 数据同步:从远程服务器同步CSV数据到本地 SOURCE_PATH="user@remote_server:/data/insurance_data.csv" LOCAL_DIR="/home/user/data/" rsync -avz --password-file=/etc/rsync.pass $SOURCE_PATH $LOCAL_DIR # 2. 预处理数据:处理日期格式错误(假设原始日期为MM/DD/YYYY,需改为YYYY-MM-DD) INPUT_FILE="${LOCAL_DIR}/insurance_data.csv" TMP_FILE="${LOCAL_DIR}/insurance_data_processed.csv" awk -F',' 'BEGIN {OFS=","} {gsub(/\//,"-",$5); $5=substr($5,7,4)"-"substr($5,1,2)"-"substr($5,4,2); print}' $INPUT_FILE > $TMP_FILE # 3. 使用SQL*Loader导入Oracle(需要提前编写控制文件load_policy.ctl) sqlldr userid=scott/tiger@orcl control=/home/user/scripts/load_policy.ctl data=$TMP_FILE # 4. 日志记录 echo "$(date '+%Y-%m-%d %H:%M:%S') 数据同步与导入成功" >> /var/log/insurance_etl.log ``` - **Oracle控制文件**:`load_policy.ctl` ```sql OPTIONS (SKIP=1, DIRECT=TRUE) -- 跳过CSV标题行 LOAD DATA INFILE '/home/user/data/insurance_data_processed.csv' INTO TABLE policy_data FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS ( policy_id, customer_name, vehicle_type, premium, effective_date DATE "YYYY-MM-DD", driver_age ) ``` --- #### **2. 数据清洗与整合(Oracle SQL)** - **代码文件**:`data_cleaning.sql` ```sql -- 1. 处理缺失值:用平均值填充缺失的driver_age UPDATE policy_data SET driver_age = ( SELECT AVG(driver_age) FROM policy_data WHERE driver_age IS NOT NULL ) WHERE driver_age IS NULL; -- 2. 创建视图整合保单与理赔数据 CREATE OR REPLACE VIEW policy_claim_view AS SELECT p.policy_id, p.customer_name, p.vehicle_type, p.premium, p.effective_date, COALESCE(c.claim_amount, 0) AS claim_amount -- 处理空值 FROM policy_data p LEFT JOIN claim_data c ON p.policy_id = c.policy_id; -- 3. 创建索引优化查询 CREATE INDEX idx_policy_id ON policy_data(policy_id); ``` --- #### **3. 数据分析与报表生成** - **分析SQL**:`analysis.sql` ```sql -- 关键指标1:各车型赔付率 SELECT vehicle_type, SUM(claim_amount) / SUM(premium) AS loss_ratio FROM policy_claim_view GROUP BY vehicle_type ORDER BY loss_ratio DESC; -- 关键指标2:高风险客户(出险次数>3次) SELECT customer_name, COUNT(claim_amount) AS claim_count FROM policy_claim_view WHERE claim_amount > 0 GROUP BY customer_name HAVING COUNT(claim_amount) > 3; ``` - **帆软报表设计**(非代码,但需说明逻辑): 1. 连接Oracle数据库,选择`policy_claim_view`作为数据源。 2. 设计驾驶舱包含: - **折线图**:按月份统计保费总额(X轴为月份,Y轴为SUM(premium)) - **饼图**:各车型赔付率占比 - **明细表**:高风险客户清单(直接绑定`analysis.sql`的第二个查询结果) 3. 设置报表定时生成(每天8点自动邮件发送给业务部门)。 --- #### **4. 自动化总控脚本** - **代码文件**:`main_etl.sh` ```bash #!/bin/bash # 主流程控制脚本 # 1. 执行数据同步与导入 /home/user/scripts/sync_and_load.sh # 2. 执行数据清洗 sqlplus -s scott/tiger@orcl @/home/user/scripts/data_cleaning.sql # 3. 执行数据分析并导出结果到CSV(供帆软读取) sqlplus -s scott/tiger@orcl << EOF SET colsep ',' SET pagesize 0 SET trimspool ON SET headsep OFF SPOOL /home/user/reports/high_risk_clients.csv @/home/user/scripts/analysis.sql SPOOL OFF EOF # 4. 触发帆软报表生成(假设帆软部署在本地,调用其API) curl -X POST "http://localhost:8080/webroot/decision/v5/runReport?name=insurance_dashboard" ``` --- ### **可能遇到的问题与解决方案** 1. **SQL*Loader导入乱码** - **原因**:文件编码与数据库字符集不一致(如UTF-8 vs GBK)。 - **解决**:在控制文件中添加 `CHARACTERSET UTF8` 或转换文件编码: ```bash iconv -f GBK -t UTF-8 $TMP_FILE > $TMP_FILE.utf8 ``` 2. **视图查询性能差** - **原因**:大数据量下全表扫描。 - **解决**:对`policy_id`和`vehicle_type`建立索引,或对表进行分区。 3. **帆软报表数据延迟** - **原因**:总控脚本执行完成前帆软已读取数据。 - **解决**:在脚本最后增加延时,或让帆软直接读取Oracle实时视图。 --- ### **简历中的技术栈整合** 在简历中,可以这样描述你的技术贡献: > **车险数据分析系统** > - 开发Shell脚本实现数据自动采集与清洗,处理日均10万+条车险数据,错误率降低至0.1%。 > - 设计Oracle数据仓库,通过SQL优化使查询效率提升40%,支持实时业务分析。 > - 使用帆软构建可视化报表,监控赔付率、高风险客户等8项核心指标,减少人工分析时长3小时/天。 > - 搭建自动化ETL流程(Shell+Oracle+帆软),实现从数据到报表的全链路闭环。 --- ### **注意事项** 1. **环境依赖**: - 提前安装Oracle Instant Client(用于`sqlldr`和`sqlplus`)。 - 测试Shell脚本时使用`bash -x sync_and_load.sh`调试。 2. **数据模拟**: - 若没有真实数据,可用Python生成模拟CSV: ```python import pandas as pd import numpy as np data = { "policy_id": range(1, 10001), "premium": np.random.uniform(1000, 5000, 10000), "claim_amount": np.random.choice([0, 1000, 5000], 10000, p=[0.7, 0.2, 0.1]) } pd.DataFrame(data).to_csv("insurance_data.csv", index=False) ``` 3. **面试准备**: - 重点解释**数据清洗逻辑**(如处理缺失值的SQL)、**Shell脚本的容错设计**(如`if [ -f file ]`判断)。 如果需要更具体的某部分代码(如帆软API调用细节),可以随时告诉我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值