BDC在AIAB中大加欢迎

2020-08-13 13:19发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入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

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入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

付费偷看设置
发送
3条回答
闻人可可
1楼-- · 2020-08-13 13:41

你好王侯

似乎您没有增加行号变量(或增加但未使用它)。

就像变量l_row(我假设您使用的是行号)。 它没有在BDC部分中使用。

您可以尝试使用类似的东西:

将'COBRB-KONTY('+ lv_row +')'连接为lv_string

(lv_string是本地声明的字符串变量)

,然后将BDC称为:

使用" BDC_CURSOR"执行bdc_field

lv_string。

使用lv_string执行bdc_field

'FXA'。

我基本上建议的是,对于行号动态变化的每个字段,请使用lv_row变量。 同样,遍历每个主要资产编号的所有行项目,然后调用bdc_transaction子例程。 意思是,如果您有10个订单项,请将它们全部集中到一个交易调用中。

谢谢

Aritra

大道至简
2楼-- · 2020-08-13 13:40

嗨,拉吉,

例如,您的代码显示为:

使用'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中的所有数据进行匹配。 检查项目级别字段名称和值是否出现多次。

让我知道这是否有帮助。

小c菟菟
3楼-- · 2020-08-13 13:50

此解决方案适用于通过XL上传AIAB吗?

您能在这里发布解决方案吗?

sridhar。

一周热门 更多>