点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) hi BI专家, 请让我...
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) hi BI专家, 请让我...
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
hi BI专家,
请让我知道如何为我在这两个字段中所指的(NEW和CHANGED)记录提取增量。
听说可以通过功能模块来完成。
如果有人这样做,可以通过Konain2k @向我发送代码。 gmail.com
等待快速回复。
嗨,
您需要创建一个新的日期字段,例如ZDATE,并将其用于Delta的RSO2中。 现在,需要以这种方式填充ZDATE字段,以便根据新的和更改的Date字段带来新记录和更改记录的更改值。
我正在为难以编写此代码的新成员提供FM代码。
在下面的示例中,我们采用了SAP表MCHB及其字段ERSDA(创建日期)和LAEDA(更改日期)。
功能zbw_get_mchb。
类型ls_mchb,
类型 ls_mara。
。。。 -matnr -lv_meins。 -laeda是初始的。 -ersda移至w_t_data-zdate。 -laeda移至 w_t_data-zdate。
-mandt移至w_t_data-mandt,
-matnr移至w_t_data-matnr,
-lgort到w_t_data-lgort,
-ersda到w_t_data-ersda,
-ernam到w_t_data-ernam,
-laeda 到w_t_data-laeda,
-aenam到w_t_data-aenam,
-chrue到w_t_data-chrue,
*" ------------------------------------ ----------------------------------
*" *"本地接口 :
*"导入
*" VALUE(I_REQUNR)类型SRSC_S_IF_SIMPLE-REQUNR
*" VALUE(I_DSOURCE) TYPE SRSC_S_IF_SIMPLE-DSOURCE可选
*" VALUE(I_MAXSIZE)TYPE SRSC_S_IF_SIMPLE-MAXSIZE可选
*" VALUE(I_INITFLAG)TYPE SRSC_S_IF_SIMPLE-
*" VALUE(I_READ_ONLY)类型SRSC_S_IF_SIMPLE-READONLY可选
*" VALUE(I_REMOTE_CALL)类型SBIWA_FLAG默认SBIWA_C_FLAG_OFF
*" 表
*" I_T_SELECT类型SRSC_S_IF_SIMPLE-T_SELECT可选
*" I_T_FIELDS类型SRSC_S_IF_SIMPLE-T_FIELDS可选
*" E_T_DATA ZBW_MCHB可选结构
*"例外情况
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
< em> *" -------------------------------------------------- ------------------------
*示例:表MCHB
表的数据源:mchb。
字段符号:
数据:ls_mchb的it_mchb类型标准表,
ls_mara的it_mara类型标准表。
数据:w_t_data类似于zbw_mchb。
*辅助选择标准结构
数据:l_s_select类型srsc_s_select。
* DB表的最大行数
静态值:s_s_if类型srsc_s_if_simple,
* 计数器
s_counter_datapakid,如sy-tabix,
*游标
s_cursor类型的游标。
*选择范围 < br>范围:用于zbw_mchb-matnr的l_r_matnr,
用于zbw_mchb-werks的l_r_werks,
用于zbw_mchb-ersda的l_r_ersda,
用于zbw_mchb-b的l_r_lfgja,用于zbw_mchb-m_b_b_b的ed,用于 l-r 用于zbw_mchb-zdate。
*初始化模式(通过SAPI首次调用)或数据传输模式
*(跟随调用)?
如果i_initflag = sbiwa_c_flag_on。
******************************************** ********************************
*初始化:检查输入参数
*缓冲区输入参数
*准备数据选择
****************** ****************************************************** ****
*检查数据源的有效性
案例i_dsource。
当" ZBW_MCHB"时。
当其他时。
如果1 = 2.消息e009(r3)。 endif。
*这是一个典型的日志调用。 请这样写每个错误消息
log_write'E'"消息类型
'R3'"消息类
'009' "邮件编号
i_dsource "邮件变量1
''。 "消息变量2
引发error_passed_to_mess_handler。
终结符。
将i_t_select的行附加到s_s_if-t_select。
*填充参数缓冲区 用于数据提取调用
s_s_if-requnr = i_requnr。
s_s_if-dsource = i_dsource。
s_s_if-maxsize = i_maxsize。
*填写字段列表 优化的选择语句
*(如果InfoSource字段
*与数据库表字段之间不存在1:1关系,则可能会难以为继
删除i_t_fields [],其中fieldnm ='MEINS'或fieldnm ='ZDATE'。
将i_t_fields行添加到s_s_if-t_fields。
else。" 初始化模式还是数据提取?
*********************************** **********************************************
*数据传输:第一次调用OPEN CURSOR + FETCH
*仅在后续调用FETCH时
************** ****************************************************** ********
*如果s_counter_datapakid = 0,则第一个数据包->打开游标
*
*填充范围表BW仅会传递简单选择条件
*类型SIGN ='I'和OPTION ='EQ'或OPTION ='BT'。
在s_s_if-t_select处循环进入l_s_select,其中fieldnm =' MATNR'。
将对应的l_s_select移动到l_r_matnr。
附加l_r_matnr。
endloop。
在s_s_if-t_select处循环到l_s_select中,其中fieldnm ='WERKS'。 l_s_select到l_r_werks。
附加l_r_werks。
endloop。
在s_s_if-t_select处循环到l_s_select中,其中fieldnm ='ERSDA'。
endloop。
在s_s_if-t_select处循环进入l_s_select,其中fieldnm ='LFGJA'。
将l_s_select对应于l_r_lfgja进行移动。
附加l_r_lfgja。
endloop。
在s_s_if-t_select处循环进入l_s_select,其中fieldnm ='LAEDA'。
将对应的l_s_select移至l_r_laeda。
应用
endloop。
在s_s_if-t_select处循环进入l_s_select,其中fieldnm ='ZDATE'。
将l_s_select对应移动到l_r_zdate。
l_r_zdate-sign ='I'。 br> l_r_zdate-option ='GE'。
清除l_r_zdate-high。
附加l_r_zdate。
endloop。
*确定每个FETCH语句要读取的数据库记录数
*来自输入参数I_MAXSIZE。 如果DataSource表行和数据库条目之间存在一对一的关系
*,则这是微不足道的。
*在其他情况下,这可能是不可能的
*必须确定一些估计值。
按住s_cursor打开光标,以便
从mchb
选择(s_s_if-t_fields)
其中(((l_r_zdate
中的ersda或l_r_zdate中的laeda)
和l_r_matnr
中的matnr和l_r_werks
中的werks和l_r_ersda
中的ersda和l_r_lfgja中的lfgja)。
万一。 "第一个数据包?
*将记录提取到接口表中。
*名为E_T_"提取结构的名称"。 em>
获取下一个游标s_cursor
附加表it_mchb
包大小s_s_if-maxsize的对应字段
。如果sy-subrc <> 0,则
。
关闭游标s_cursor 。
引发no_more_data。
尾数。
**从MARA表中获取单位,在MATNR(Material)上加入条件
选择matnr
mear
从mara
到表it_mara
,其中it_mchb
中的所有条目,其中matnr = it_mchb-matnr。
按lv_matnr对it_mara进行排序。
*如果不存在更改的日期,则使用创建的日期作为Delta(ZDATE)。
如果it_mchb []不是初始的。
取消分配
清除w_t_data。< br>
在it_mchb处循环,分配
取消分配
读取表it_mara用键lv_matnr =
二进制搜索分配
。 br>如果sy-subrc是初始的。
w_t_data-meins =
endif。
如果
将
else。
将
endif。
将:
-werks,
将w_t_data附加到e_t_data。
endloop。
endif。
s_counter_datapakid = s_counter_datapakid + 1.
< br> endif。 "初始化模式还是数据提取?
终端功能。
一周热门 更多>