2020-09-02 14:14发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
专家您好,
我正在使用FM BAPI_MATERIAL_SAVEDATA创建物料主数据。
效果很好,但我想动态填充X-结构,例如BAPI_MARAX和BAPI_MARCX
具有" X"值,应根据BAPI_MARA中的填充值来更新/创建字段,等等。
能不能提供一个我必须通过本地结构的好的解决方案或功能
还是仅要更新的结构名称(即BAPI_MARA/X)?
任何帮助将不胜感激,
非常感谢!
Hi
具有数据的bapi结构和对应的结构X具有相同的名称和字段(我相信位置相同),因此您可以使用字段符号:
A)如果字段位于相同位置:
字段符号: ANY类型,
ANY类型。
DO
将结构BAPI_MARA的组件SY-索引分配给。
如果SY-SUBRC <>0。退出。 ENDIF。
将结构BAPI_MARAX的组件SY-索引分配给。
如果不是初始的。
='X '。
ENDIF。
ENDDO。
如果位置不同,则可以使用名称,因此可以使用fm DDIF_FIELDINFO_GET来获取 结构的名称,结果将在DFIES_TAB中:
在DFIES_TAB中循环。
ASSIGN COMPONENT DFIES_TAB-FIELD STRUCTURE BAPI_MARA
TO 。
将结构BAPI_MARAX的组件DFIES_TAB-FIELDNAME分配给
到。
='X'。
ENDLOOP。
Max
使用以下代码:
PERFORM fill_x_structure更改ls_shippingx。
FORM fill_x_structure更改cs_x_structure TYPE任何。 数据:lr_struct类型参考cl_abap_structdescr, lr_field类型参考cl_abap_elemdescr。 FIELD-SYMBOLS:类似于cl_abap_structdescr => components的行, TYPE ANY。 lr_struct?= cl_abap_typedescr => describe_by_data(cs_x_structure)。 检查lr_struct是否绑定。 环回lr_struct->组件ASSIGNING 。 UNASSIGN 。 *如果unicode处于活动状态,则仅考虑x字段,C1会考虑 2字节 检查 -type_kind EQ lr_struct-> typekind_char。 ASSIGN COMPONENT -结构名称cs_x_structure TO 。 检查已分配。 *获取元素描述 lr_field?= cl_abap_typedescr => describe_by_data()。 检查lr_field-> absolute_name EQ'\ TYPE = BAPIUPDATE'。 = cl_mmpur_constants =>是。 结局。 ENDFORM。 " fill_x_structure
您好,前成员,
根据前成员的说法,可以,但是有些情况,例如BAPI_MARC和BAPI_MARCX,您可以检查具有Plant的两个结构都接受四个字符的Plant Number。 因此,在代码下方,我的检查点是仅将长度
DFIES_TAB-LENG均衡器'000001'。
问候
Smruti
否则,请使用DDIF_FIELDINFO_GET将BAPIMARAX的字段名称分别获取到另一个表中。 然后在循环中使用key = fieldname进行读取。
在lt_dfies_1处将LOOP放到wa_dfies_1中。
ASSIGN COMPONENT wa_dfies_1-结构的字段名称ls_order_header_in到。
读取表lt_dfies_2并使用键fieldname = wa_dfies_1-fieldname进入wa_dfies_2。
如果sy-subrc是INITIAL。
ASSIGN COMPONENT wa_dfies_1-结构的字段名称ls_order_header_inx TO 。
非常感谢您的回答!
我在您的解决方案之上构建了一个FORM,该表单接收我的结构和x-结构作为变量。
此外,我检查了x结构字段的类型和长度,以便仅当该字段为CHAR且长度为1时
x字段将被更新。 正如 Smruti 所说,背景是只有数据类型为BAPIUPDATE的字段才应更新。
非常感谢你们!
这是我的解决方案:
FORM fill_x_structure使用p_struct_name 更改p_structx_name。 数据:lv_type TYPE C长度1, lv_length TYPE整数。 "表作为导入参数 类型ANY, 类型ANY,字段 类型ANY。 ASSIGN p_struct_name TO 。 ASSIGN p_structx_name TO 。 DO。 ASSIGN COMPONENT结构的sy-index TO 。如果sy-subrc <>0。退出。 ENDIF。将结构分配给的组件索引。 *检查x-结构中字段的类型和长度 DESCRIBE FIELD TYPE lv_type。 br>描述字段在字符模式下的长度lv_length。 如果不是INITIAL并且lv_type ='C'并且lv_length =1。 ='X'。 > ENDIF。 ENDDO。 ENDFORM。 " FILL_X_STRUCTURE
嗨,nabheet,
是,将数据从FM BAPI_MATERIAL_GET_ALL结构移到_SAVEDATA结构。 因此,我寻找了动态解决方案。
谢谢!
仅当您填充BAPI_MARA时,您还要更新标志。 您正在做一些与移动相对应的工作../?
最多设置5个标签!
Hi
具有数据的bapi结构和对应的结构X具有相同的名称和字段(我相信位置相同),因此您可以使用字段符号:
A)如果字段位于相同位置:
字段符号: ANY类型,
DO
将结构BAPI_MARA的组件SY-索引分配给。
如果SY-SUBRC <>0。退出。 ENDIF。
将结构BAPI_MARAX的组件SY-索引分配给。
如果不是初始的。
ENDIF。
ENDDO。
如果位置不同,则可以使用名称,因此可以使用fm DDIF_FIELDINFO_GET来获取 结构的名称,结果将在DFIES_TAB中:
在DFIES_TAB中循环。
ASSIGN COMPONENT DFIES_TAB-FIELD STRUCTURE BAPI_MARA
TO。
将结构BAPI_MARAX的组件DFIES_TAB-FIELDNAME分配给
到。
如果不是初始的。
ENDIF。
ENDLOOP。
Max
使用以下代码:
您好,前成员,
根据前成员的说法,可以,但是有些情况,例如BAPI_MARC和BAPI_MARCX,您可以检查具有Plant的两个结构都接受四个字符的Plant Number。 因此,在代码下方,我的检查点是仅将长度
分配给那些字段" X"DFIES_TAB-LENG均衡器'000001'。
问候
Smruti
否则,请使用DDIF_FIELDINFO_GET将BAPIMARAX的字段名称分别获取到另一个表中。 然后在循环中使用key = fieldname进行读取。
在lt_dfies_1处将LOOP放到wa_dfies_1中。
ASSIGN COMPONENT wa_dfies_1-结构的字段名称ls_order_header_in到。
读取表lt_dfies_2并使用键fieldname = wa_dfies_1-fieldname进入wa_dfies_2。
如果sy-subrc是INITIAL。
ASSIGN COMPONENT wa_dfies_1-结构的字段名称ls_order_header_inx TO。
如果不是初始的。
ENDIF。
ENDIF。
ENDLOOP。
非常感谢您的回答!
我在您的解决方案之上构建了一个FORM,该表单接收我的结构和x-结构作为变量。
此外,我检查了x结构字段的类型和长度,以便仅当该字段为CHAR且长度为1时
x字段将被更新。 正如 Smruti 所说,背景是只有数据类型为BAPIUPDATE的字段才应更新。
非常感谢你们!
这是我的解决方案:
FORM fill_x_structure使用p_struct_name
类型ANY,
类型ANY,字段
类型ANY。
。。
TO 。分配给的组件索引。
TYPE lv_type。 br>描述字段在字符模式下的长度lv_length。
不是INITIAL并且lv_type ='C'并且lv_length =1。
='X'。 > ENDIF。
更改p_structx_name。
数据:lv_type TYPE C长度1,
lv_length TYPE整数。 "表作为导入参数
ASSIGN p_struct_name TO
ASSIGN p_structx_name TO
DO。
ASSIGN COMPONENT结构的sy-index
如果sy-subrc <>0。退出。 ENDIF。
将结构
*检查x-结构中字段的类型和长度
DESCRIBE FIELD
如果
ENDDO。
ENDFORM。 " FILL_X_STRUCTURE
嗨,nabheet,
是,将数据从FM BAPI_MATERIAL_GET_ALL结构移到_SAVEDATA结构。 因此,我寻找了动态解决方案。
谢谢!
仅当您填充BAPI_MARA时,您还要更新标志。 您正在做一些与移动相对应的工作../?
一周热门 更多>