点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)尊敬的大师, 我正在根据T.C...
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)尊敬的大师, 我正在根据T.C...
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
尊敬的大师,
我正在根据T.CODE的资产开发一个BDC:AIAB。
我的要求是每个主要资产都不允许有多个订单项。但仅限我的BDC
仅允许一个订单项。(当我自动上传10个订单项时,自动添加了9个订单项
项目将被替换,第10个订单项仅存储在第一个订单项位置。
但是SAP手动输入允许(999个订单项)
我该如何解决此问题?
这是我的代码。
报告ZFI_AUS
没有标准的页面标题行大小为255。
*包括bdcrecx1。
包括ZFI_BDC001。
types:t_itab的开头
BUKRS(004)类型c,
anln1(012)类型c,
konty(004)类型c,
anln2(012)类型c,
prozs(005)类型c,
betrr(010)类型c,
t_itab的结尾。
数据:带有标题行的t_itab的i_itab类型标准表,
w_itab类型t_itab。
DATA:l_row TYPE i VALUE 0。
*************************************************** *************************
选择屏幕*
*************************************************** *************************
带有FRAME TITLE文本002的块文件的选择屏幕开始。
选择屏幕跳过
。选择屏幕开始显示行。
选择屏幕评论5(16)文字002。
选择屏幕位置25。
参数:p_file1 TYPE本地文件。
选择屏幕行尾。
SELECTION-SCREEN END OF BLOCK文件。
在p_file1的值请求选择屏幕上。
执行文件选择。
选择开始。
执行data_upload。
执行open_group。
在i_itab循环。
*使用" AIAB"执行bdc_transaction。
使用'SAPMA15B''0110'执行bdc_dynpro。
使用" BDC_CURSOR"执行bdc_field
'AICOM-ANLN1'。
使用" BDC_OKCODE"执行bdc_field
'= AUSF'。
使用" AICOM-BUKRS"执行bdc_field
'KSL'。
使用" AICOM-ANLN1"执行bdc_field
i_itab-anln1。
使用" AICOM-ANLN2"执行bdc_field
'0'。
使用" P_DISVAR"执行bdc_field
'1SAP'。
使用" ANLB-AFABE"执行bdc_field
'1'。
使用'SAPMSSY0''0120'执行bdc_dynpro。
使用" BDC_CURSOR"执行bdc_field
'07/03'。
使用" BDC_OKCODE"执行bdc_field
'=&ALL'。
使用'SAPMSSY0''0120'执行bdc_dynpro。
使用" BDC_CURSOR"执行bdc_field
'07/03'。
使用" BDC_OKCODE"执行bdc_field
'= BURG'。
使用'SAPLSPO2''0100'执行bdc_dynpro。
使用" BDC_OKCODE"执行bdc_field
'= OPT2'。
使用'SAPLKOBS''0130'执行bdc_dynpro。
使用" BDC_CURSOR"执行bdc_field
'COBRB-PROZS(01)'。
使用" BDC_OKCODE"执行bdc_field
'/00'。
使用'COBRB-KONTY(01)'执行bdc_field
'FXA'。
使用'DKOBR-EMPGE(01)'执行bdc_field
'160101'。
i_itab-anln2。
使用'COBRB-PROZS(01)'执行bdc_field
'100'。
i_itab-prozs。
使用'COBRB-BETRR(01)'执行bdc_field
'100'。
i_itab-betrr。
使用'SAPLKOBS''0130'执行bdc_dynpro。
使用" BDC_CURSOR"执行bdc_field
'COBRB-KONTY(01)'。
使用" BDC_OKCODE"执行bdc_field
'= BACK'。
使用'SAPMSSY0''0120'执行bdc_dynpro。
使用" BDC_CURSOR"执行bdc_field
'07/03'。
使用" BDC_OKCODE"执行bdc_field
'= BUCH'。
使用'SAPLSPO1''0200'执行bdc_dynpro。
使用" BDC_OKCODE"执行bdc_field
'=是'。
l_row = l_row + 1。
使用" AIAB"执行bdc_transaction。
使用'AIAB'执行bdc_transaction。
endloop。
* enddo。
执行close_group。
*使用数据集执行close_dataset。
&----
*&表格FILE_SELECTION
&----
文字
----
-> p1文字
<-p2文字
----
FORM FILE_SELECTION。
CALL FUNCTION'F4_FILENAME'
导入
文件名= p_file1。
ENDFORM。 " FILE_SELECTION
&----
*&表格DATA_UPLOAD
&----
文字
----
-> p1文字
<-p2文字
----
FORM DATA_UPLOAD。
CALL FUNCTION'WS_UPLOAD'
导出
文件名= p_file1
文件类型='DAT'
表格
data_tab = i_itab
例外情况
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
no_authority = 10
其他= 11。
IF sy-subrc EQ 0。
写:/'程序:',SY-CPROG。
写:/'文件名:',p_file1。
在/1(119)syline上写。
ELSE。
消息"转换错误"。
ENDIF。
ENDFORM。 " DATA_UPLOAD
嗨,拉吉,
例如,您的代码显示为:
使用'COBRB-KONTY(01)'执行bdc_field
" FXA"。
使用'DKOBR-EMPGE(01)'来执行bdc_field
i_itab-anln2。
使用'COBRB-BETRR(01)'执行bdc_field
i_itab-betrr。
01表示第一行。 因此需要为每个项目进行更改。
因此,如果您有10件物品,括号中的数字应从01到10。
当前,您的代码中发生的是每次都将数据写入第一行,因此,由于行位置被硬编码为" 01",因此所有先前存在的数据都会丢失(覆盖)。
现在,对于每个主要资产编号,您都从1开始启动lv_row计数器,并针对每个项目编号(例如总共10个项目)进行循环。
将lv_row声明为:
数据:lv_row(02)输入n。
对每个项目级别变量使用以下类型的编码(以下为DKOBR-EMPGE的示例):
将DKOBR-EMPGE('+ lv_row +')'连接到lv_string1
(lv_string1是本地声明的字符串变量)
使用" BDC_CURSOR"执行bdc_field
lv_string。 "这会将光标定位在行号上
使用lv_string执行bdc_field
i_itab-anln2。 "这会将所需的值放入该行的单元格中
这样,总共将有20个表演(每个COBRB-KONTY值每个表演2个)
类似地,对COBRB-PROZS,COBRB-BETRR(所有项目级别字段)进行编码
总体结构应如下所示:
LOAT AT t_itab。
在新资产编号处。 "资产编号发生更改时
刷新BDC表
第一个屏幕
-输入标题数据
ENDAT。
下一个屏幕
-输入项目数据
资产编号末尾。 "当已读取资产编号的所有数据
呼叫交易AIAB
ENDAT。
ENDLOOP。
您当前在代码中执行的操作是为每个资产的每个项目编号调用事务。使用AT NEW/AT END控件可以构建BDC表并为每个主要资产编号调用AIAB事务。/p>
在运行BDC时,在事务调用之前放置一个Breakpoint,并分析存储数据的BDC表中的数据。 将物料级别数据与内部表t_itab中的所有数据进行匹配。 检查项目级别字段名称和值是否出现多次。
让我知道这是否有帮助。
一周热门 更多>