[abap] 通过动态参数获取字段数据
2016-08-19 09:26
585 查看
说明: 通过动态参数获取字段数据,抓取有规则列的字段值
在程序开发中,可能会遇到一些规则的字段名,在数据传递中通常需要对这些字段逐个赋值,以下报表是通过动态参数从数据表(结构体)中获取数据。
在透明表 FAGLFLEXT中,用于总账总计,每个月的增加减少额都分别用TSL01,TSL02…… TSL16(16列)记录下来,这些字段是有规则的,可以通过动态字段方便的获取其数据。
例子:
FIELD-SYMBOLS: <DYN_FIELD_C> TYPE ANY.
DATA: FIELDNAME TYPE STRING. " 定义变量用于保存字段名
" 每月数据——专用
DATA: BEGIN OF it_month OCCURS 0,
RYEAR LIKE FAGLFLEXT-RYEAR, " 会计年度
RACCT LIKE FAGLFLEXT-RACCT, " 会计科目
RBUKRS LIKE FAGLFLEXT-RBUKRS, " 公司代码
RTCUR LIKE FAGLFLEXT-RTCUR, " 货币
DRCRK LIKE FAGLFLEXT-DRCRK, " 借贷标识
TSLVT TYPE TSLVT12, " 起初账面余额
TSL01 TYPE TSLXX12, " 每月(Month)减少额(JS)
TSL02 TYPE TSLXX12,
TSL03 TYPE TSLXX12,
TSL04 TYPE TSLXX12,
TSL05 TYPE TSLXX12,
TSL06 TYPE TSLXX12,
TSL07 TYPE TSLXX12,
TSL08 TYPE TSLXX12,
TSL09 TYPE TSLXX12,
TSL10 TYPE TSLXX12,
TSL11 TYPE TSLXX12,
TSL12 TYPE TSLXX12,
END OF it_month.
" 结果内表
" 累计增加、减少分开记录,不再保留借贷标识
data: BEGIN OF it_out OCCURS 0,
RYEAR LIKE FAGLFLEXT-RYEAR, " 会计年度
ZMON LIKE FAGLFLEXT-RPMAX, " 当前月份
RACCT LIKE FAGLFLEXT-RACCT, " 会计科目
TXT50 TYPE TEXT50, " 会计科目描述
RBUKRS LIKE FAGLFLEXT-RBUKRS, " 公司代码
RTCUR LIKE FAGLFLEXT-RTCUR, " 货币
TSL_ZJ TYPE TSLVT12, " 当月增加
TSL_JS TYPE TSLVT12, " 当月减少
TSL_ZJLJ TYPE TSLVT12, " 增加累计
TSL_JSLJ TYPE TSLVT12, " 减少累计
TSLVT TYPE TSLVT12, " 期初账面余额
TSLVT_QM TYPE TSLVT12, " 期末账面余额
SEL,
END OF it_out.
*…………………………
*…………………………
*…………………………
* 提取当月的增、减额;计算期末金额
CLEAR it_out.
LOOP AT it_out.
LOOP at it_month WHERE RYEAR = it_out-RYEAR
AND RACCT = it_out-RACCT
AND RBUKRS = it_out-RBUKRS
AND RTCUR = it_out-RTCUR .
" 提取当月增减额。
CONCATENATE 'TSL' p_month+1(02) INTO FIELDNAME.
ASSIGN COMPONENT FIELDNAME OF STRUCTURE it_month TO <DYN_FIELD>.
if it_month-DRCRK = 'H'.
it_out-TSL_ZJ = <DYN_FIELD> .
elseif it_month-DRCRK = 'S'.
it_out-TSL_JS = <DYN_FIELD> .
endif.
" it_month的期初账面余额 是汇总后的,但是分了HS 。it_out的期初余额汇总所有的,不再区分HS。
it_out-TSLVT = it_out-TSLVT + it_month-TSLVT .
endloop.
it_out-TSLVT_QM = it_out-TSLVT + it_out-TSL_ZJLJ + it_out-TSL_JSLJ .
READ TABLE it_KM with key SAKNR = it_out-RACCT.
it_out-TXT50 = it_KM-TXT50.
modify it_out.
ENDLOOP.
SORT it_out by RYEAR RACCT RBUKRS RTCUR.
DELETE ADJACENT DUPLICATES FROM it_out.
在程序开发中,可能会遇到一些规则的字段名,在数据传递中通常需要对这些字段逐个赋值,以下报表是通过动态参数从数据表(结构体)中获取数据。
在透明表 FAGLFLEXT中,用于总账总计,每个月的增加减少额都分别用TSL01,TSL02…… TSL16(16列)记录下来,这些字段是有规则的,可以通过动态字段方便的获取其数据。
例子:
FIELD-SYMBOLS: <DYN_FIELD_C> TYPE ANY.
DATA: FIELDNAME TYPE STRING. " 定义变量用于保存字段名
" 每月数据——专用
DATA: BEGIN OF it_month OCCURS 0,
RYEAR LIKE FAGLFLEXT-RYEAR, " 会计年度
RACCT LIKE FAGLFLEXT-RACCT, " 会计科目
RBUKRS LIKE FAGLFLEXT-RBUKRS, " 公司代码
RTCUR LIKE FAGLFLEXT-RTCUR, " 货币
DRCRK LIKE FAGLFLEXT-DRCRK, " 借贷标识
TSLVT TYPE TSLVT12, " 起初账面余额
TSL01 TYPE TSLXX12, " 每月(Month)减少额(JS)
TSL02 TYPE TSLXX12,
TSL03 TYPE TSLXX12,
TSL04 TYPE TSLXX12,
TSL05 TYPE TSLXX12,
TSL06 TYPE TSLXX12,
TSL07 TYPE TSLXX12,
TSL08 TYPE TSLXX12,
TSL09 TYPE TSLXX12,
TSL10 TYPE TSLXX12,
TSL11 TYPE TSLXX12,
TSL12 TYPE TSLXX12,
END OF it_month.
" 结果内表
" 累计增加、减少分开记录,不再保留借贷标识
data: BEGIN OF it_out OCCURS 0,
RYEAR LIKE FAGLFLEXT-RYEAR, " 会计年度
ZMON LIKE FAGLFLEXT-RPMAX, " 当前月份
RACCT LIKE FAGLFLEXT-RACCT, " 会计科目
TXT50 TYPE TEXT50, " 会计科目描述
RBUKRS LIKE FAGLFLEXT-RBUKRS, " 公司代码
RTCUR LIKE FAGLFLEXT-RTCUR, " 货币
TSL_ZJ TYPE TSLVT12, " 当月增加
TSL_JS TYPE TSLVT12, " 当月减少
TSL_ZJLJ TYPE TSLVT12, " 增加累计
TSL_JSLJ TYPE TSLVT12, " 减少累计
TSLVT TYPE TSLVT12, " 期初账面余额
TSLVT_QM TYPE TSLVT12, " 期末账面余额
SEL,
END OF it_out.
*…………………………
*…………………………
*…………………………
* 提取当月的增、减额;计算期末金额
CLEAR it_out.
LOOP AT it_out.
LOOP at it_month WHERE RYEAR = it_out-RYEAR
AND RACCT = it_out-RACCT
AND RBUKRS = it_out-RBUKRS
AND RTCUR = it_out-RTCUR .
" 提取当月增减额。
CONCATENATE 'TSL' p_month+1(02) INTO FIELDNAME.
ASSIGN COMPONENT FIELDNAME OF STRUCTURE it_month TO <DYN_FIELD>.
if it_month-DRCRK = 'H'.
it_out-TSL_ZJ = <DYN_FIELD> .
elseif it_month-DRCRK = 'S'.
it_out-TSL_JS = <DYN_FIELD> .
endif.
" it_month的期初账面余额 是汇总后的,但是分了HS 。it_out的期初余额汇总所有的,不再区分HS。
it_out-TSLVT = it_out-TSLVT + it_month-TSLVT .
endloop.
it_out-TSLVT_QM = it_out-TSLVT + it_out-TSL_ZJLJ + it_out-TSL_JSLJ .
READ TABLE it_KM with key SAKNR = it_out-RACCT.
it_out-TXT50 = it_KM-TXT50.
modify it_out.
ENDLOOP.
SORT it_out by RYEAR RACCT RBUKRS RTCUR.
DELETE ADJACENT DUPLICATES FROM it_out.
相关文章推荐
- [abap] 通过动态参数获取字段数据
- iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数
- 动态获取数据库中的数据作为loadrunner的参数
- iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数
- Hibernate中通过FetchProfile的方式实现动态数据获取
- js实现手机端可以上拉刷新,动态通过ajax从后台获取数据
- iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数 收藏
- springMVC参数的传递方式(1.通过@PathVariabl获取路径参数,2.@ModelAttribute获取数据,3.HttpServletRequest取参,4@RequestParam)
- android通过参数获取网页数据
- JS通过ajax方式从数据库动态获取数据的代码
- 通常情况下你想通过函数参数获取一段动态分配的内存时需要用到
- Oracle 数据字典(可用它动态获取字段名、长度、类型等)
- 基于Ado.net Entity Framework 通过系统运行时动态编译实现数据表字段的增删
- 动态sql语句基本语法(字段名,表名,数据库名之类作为变量时,必须用动态SQL如ALTER TABLE中使用程序传递的参数)
- GridView通过RowDataBound事件获取字段值、数据源列值
- Sharepoint 自定义字段(栏) 动态获取数据
- iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数
- struts2--前台数据通过参数传给后台,后台如何获取参数
- iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数
- 如何动态获取数据库表中的数据,数据库中的字段是在变化的