2020-08-26 04:42发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
亲爱的
我有一个内部表,其中一个字段包含5个值。.我需要将内部表条目移动到包含5个字段的DB表中。
现在我必须将内部表的第一个值映射到DB表的第一个字段,将内部表的第二个值映射到DB表的第一个字段,依此类推。
必须不使用sy-tabix来实现。有人可以提出解决方案吗?
嗨,
首先使用5个字段创建数据库的内部表。 然后使用"将内部表的相应字段移动到数据库内部表"。 内部表的字段将分别映射到DB字段。 然后,您可以使用数据库内部表修改数据库。
谢谢
M.Dey
可能想弄清楚它的目的是什么,就像Sandra一样,我不清楚不使用sy-tabix的确切原因是什么。
这似乎是某种学生的课堂作业,我想知道老师是不是完全没有想到这一点,还是您没有向我们提到过更多呢?
"强力"方法看起来像在以下示例之一中发布的示例中。 您可以使用自己的计数器变量来代替sy-tabix。 但是在现实生活中,没有人应该写这样的代码。 除了是业余爱好者之外,它还忽略了字段类型的任何潜在问题。 例如。 如果您有文本值,但DB字段为数字怎么办? 或者今天您有5个字段,但明天有25个字段。老实说,整个前提似乎并不严重。 请说明这是哪里来的。
好,在这种情况下,具有1个字段的内部表将所有5个值连接在一起。 因此,您可以根据数据类型的长度,相应地按偏移量分割值,然后将其分配给相应的DB内部表字段。 例如 假设您有5个长度为2个字符的字段值,用于对应的DB字段。 因此,
将表lt_itab读入ls_wa索引1。
如果sy-subrc = 0。
ls_dbtable_fieldname1 = ls_wa-table_line + 0(2)。
ls_dbtable_fieldname2 = ls_wa-table_line + 2(2)....依此类推,直到完成5个字段。
endif。
数据:
value1类型字符串值空间,
value2类型的字符串值空间,
value3类型的字符串值空间,
value4类型字符串值空间,
value5类型字符串值空间,
ls_field1类型字符串值'1; 2; 3; 4; 5'。 "例如
*
数据开始:ls_dbtable,例如
field1类型的字符串值空间,
field2类型的字符串值空间,
field3类型的字符串值空间,
field4类型的字符串值空间,
field5类型的字符串值空间,
数据结尾。
数据开头:lt_dbtable
数据:lt_field1类型字符串。
* etc。
*做...
*向ls_field1填充5个值,每个值以1个分号隔开,或者根据需要;
将ls_field1附加到lt_field1。
* enddo。
在lt_field1处循环。
将lt_field1在空格处拆分为value1 value2 value3 value3 value4 value5。
*将value1,value2,value3,value4,value5移到DB表中
ls_dbtable-field1 = value1。
ls_dbtable-field2 = value2。
ls_dbtable-field3 = value3。
ls_dbtable-field4 = value4。
ls_dbtable-field5 = value5。
将ls_dbtable附加到lt_dbtable。
清除:value1,value2,value3,value4,value5,ls_dbtable。
endloop。
*等
因此,您的内部表包含5行,每行对应一个数据库表中的字段。
我能想到的最简单的方法是 如果您使用的是7.40+,则为:
table_structure-field1 = table_data [1]。 table_structure-field2 = table_data [2]。 ...
如果不是,或者您希望使用更通用的东西(如果将新字段添加到表中,则不需要修改):
FIELD-SYMBOLS:< db_field> TYPE ANY。 循环AT data_fields INTO data_field。 将结构table_structure分配给sy-tab到。 =数据字段。 ENDLOOP。
更改自:
收件人:
数据:ld_semicolon char1值';'。
将ld_分号处的lt_field1拆分为value1 value2 value3 value3 value4 value5。
最多设置5个标签!
嗨,
首先使用5个字段创建数据库的内部表。 然后使用"将内部表的相应字段移动到数据库内部表"。 内部表的字段将分别映射到DB字段。 然后,您可以使用数据库内部表修改数据库。
谢谢
M.Dey
可能想弄清楚它的目的是什么,就像Sandra一样,我不清楚不使用sy-tabix的确切原因是什么。
这似乎是某种学生的课堂作业,我想知道老师是不是完全没有想到这一点,还是您没有向我们提到过更多呢?
"强力"方法看起来像在以下示例之一中发布的示例中。 您可以使用自己的计数器变量来代替sy-tabix。 但是在现实生活中,没有人应该写这样的代码。 除了是业余爱好者之外,它还忽略了字段类型的任何潜在问题。 例如。 如果您有文本值,但DB字段为数字怎么办? 或者今天您有5个字段,但明天有25个字段。老实说,整个前提似乎并不严重。 请说明这是哪里来的。
好,在这种情况下,具有1个字段的内部表将所有5个值连接在一起。 因此,您可以根据数据类型的长度,相应地按偏移量分割值,然后将其分配给相应的DB内部表字段。 例如 假设您有5个长度为2个字符的字段值,用于对应的DB字段。 因此,
将表lt_itab读入ls_wa索引1。
如果sy-subrc = 0。
ls_dbtable_fieldname1 = ls_wa-table_line + 0(2)。
ls_dbtable_fieldname2 = ls_wa-table_line + 2(2)....依此类推,直到完成5个字段。
endif。
数据:
value1类型字符串值空间,
value2类型的字符串值空间,
value3类型的字符串值空间,
value4类型字符串值空间,
value5类型字符串值空间,
ls_field1类型字符串值'1; 2; 3; 4; 5'。 "例如
*
数据开始:ls_dbtable,例如
field1类型的字符串值空间,
field2类型的字符串值空间,
field3类型的字符串值空间,
field4类型的字符串值空间,
field5类型的字符串值空间,
数据结尾。
*
数据开头:lt_dbtable
field1类型的字符串值空间,
field2类型的字符串值空间,
field3类型的字符串值空间,
field4类型的字符串值空间,
field5类型的字符串值空间,
数据结尾。
*
数据:lt_field1类型字符串。
*
* etc。
*做...
*向ls_field1填充5个值,每个值以1个分号隔开,或者根据需要;
将ls_field1附加到lt_field1。
* enddo。
*
在lt_field1处循环。
将lt_field1在空格处拆分为value1 value2 value3 value3 value4 value5。
*将value1,value2,value3,value4,value5移到DB表中
ls_dbtable-field1 = value1。
ls_dbtable-field2 = value2。
ls_dbtable-field3 = value3。
ls_dbtable-field4 = value4。
ls_dbtable-field5 = value5。
将ls_dbtable附加到lt_dbtable。
清除:value1,value2,value3,value4,value5,ls_dbtable。
endloop。
*等
因此,您的内部表包含5行,每行对应一个数据库表中的字段。
我能想到的最简单的方法是 如果您使用的是7.40+,则为:
如果不是,或者您希望使用更通用的东西(如果将新字段添加到表中,则不需要修改):
更改自:
将lt_field1在空格处拆分为value1 value2 value3 value3 value4 value5。
收件人:
数据:ld_semicolon char1值';'。
将ld_分号处的lt_field1拆分为value1 value2 value3 value3 value4 value5。
一周热门 更多>