Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7185461
  • 博文数量: 655
  • 博客积分: 10264
  • 博客等级: 上将
  • 技术积分: 8278
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-04 17:47
个人简介

ABAP顾问

文章分类

全部博文(655)

文章存档

2017年(2)

2014年(8)

2013年(3)

2012年(2)

2011年(18)

2010年(102)

2009年(137)

2008年(274)

2007年(134)

分类:

2008-04-14 07:57:41

sap_zhiwen  发表时间:2008-04-12 22:11:40    

老白我想问一个问题:用BDC修改物料主数据T-CODE:MM02的时候在选择视图那里,我想选择MRP3视图的,而MRP3视图在第5行的话代码如下
 PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '0070'.
 PERFORM BDC_FIELD          USING 'BDC_OKCODE'  '=ENTR'.
 PERFORM BDC_FIELD          USING 'MSICHTAUSW-KZSEL(05)'  'X'.
我们系统不是所有的物料的MRP3视图都在第五行,有一些在第七行或是第八行,问题就出现了我如何定位正确的进入MRP3视图进行修改。

 
可能是物料的维护视图维护的不一样吧,具体看一看MARA的PSTAT字段,其代表的意义为:
A 工作计划
B 会计
C 分类
D 物料需求计划
E 采购
F 生产资源/工具
G 成本核算
K 基本数据
L 存储
P 预测
Q 质量管理
S 仓库管理
V 销售
X 工厂库存
Z 存储位置库存
 
如果能根据简单的方法得出你所需要的行在物料维特视图的行就比较容易,如果不能,则要自己写程序来判断所在的行。具体方法可以参考程序SAPLMGMM的0070屏幕的PBO。
得出后把PERFORM BDC_FIELD          USING 'MSICHTAUSW-KZSEL(05)'  'X'.
改为动态的数值。
 
 
2008年4月15日添加FM:MATERIAL_BTCI_SELECTION_NEW使用的例子:
 
REPORT z_barry_mm02_bdc NO STANDARD PAGE HEADING .
 
DATA:   bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA:   bdcdata2 LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF messtab OCCURS 0.
        INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF messtab.
DATA: BEGIN OF itab_log OCCURS 0,
        message(132) TYPE c,
      END OF itab_log.
 
START-OF-SELECTION.
  PERFORM bdc.
 
*---------------------------------------------------------------------*
*       FORM bdc                                                      *
*---------------------------------------------------------------------*
FORM bdc .
  REFRESH bdcdata .
  CLEAR bdcdata .
  PERFORM bdc_dynpro  USING 'SAPLMGMM'   '0060'.
  PERFORM bdc_field   USING 'BDC_OKCODE' '=AUSW'.
  PERFORM bdc_field   USING 'RMMG1-MATNR' '4445678'.
  PERFORM bdc_dynpro  USING 'SAPLMGMM'   '0070'.
  PERFORM bdc_field   USING 'BDC_OKCODE' '=ENTR'.
  CALL FUNCTION 'MATERIAL_BTCI_SELECTION_NEW'
    EXPORTING
      material   = '4445678'
      selection  = 'D'
      tcode      = 'MM02'
    TABLES
      btci_d0070 = bdcdata2.
  LOOP AT bdcdata2 WHERE fval = 'X'.
    APPEND bdcdata2 TO bdcdata.
  ENDLOOP.
 
  PERFORM bdc_dynpro  USING 'SAPLMGMM'   '0080'.
  PERFORM bdc_field   USING 'BDC_OKCODE' '=ENTR'.
  PERFORM bdc_field   USING 'RMMG1-WERKS' '0001'.
  PERFORM bdc_field   USING 'RMMG1-LGORT' '0001'.
  PERFORM bdc_dynpro  USING 'SAPLMGMM'   '4000'.
  PERFORM bdc_field   USING 'BDC_OKCODE' '=BU'.
  PERFORM bdc_field   USING 'MAKT-MAKTX' 'Barry Test For MRP'.
  CALL TRANSACTION 'MM02' USING bdcdata MODE 'A' UPDATE 'S'
                                        MESSAGES INTO messtab.
  LOOP AT messtab.
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'
      EXPORTING
        msgid               = messtab-msgid
        msgnr               = messtab-msgnr
        msgv1               = messtab-msgv1
        msgv2               = messtab-msgv2
        msgv3               = messtab-msgv3
        msgv4               = messtab-msgv4
      IMPORTING
        message_text_output = itab_log-message.
    APPEND itab_log.
    CLEAR itab_log.
  ENDLOOP.
  LOOP AT itab_log.
    WRITE / itab_log.
  ENDLOOP.
ENDFORM.                    " bdc
*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.                    "BDC_DYNPRO
*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  CLEAR bdcdata.
  bdcdata-fnam = fnam.
  bdcdata-fval = fval.
  CONDENSE bdcdata-fval.
  APPEND bdcdata.
ENDFORM.                    "BDC_FIELD
阅读(9316) | 评论(16) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-09-24 11:41:39

其实我有一个更简单的办法,不妨说出来与大家一起分享: 1)在“选择视图”列表中,点“全选”按钮,选择所有视图。 2)在“组织级别”对话中,填上“工厂“参数。 3)(此时手工操作肯定是按回车或鼠标点“确定”了,无法直接跳到MRP3视图了), 但代码可写成“=SP14”,此时即可直接跳至MRP3视图了。 (我在EE6环境下测试成功,并交付用户使用了好长一段时间) --------------------------------------------- Email: zsdutm@163.com QQ:392785726

chinaunix网友2008-07-25 16:53:08

刚好我要扩充的就是qm视图,还是用的BDC实现了,BAPI还没学会,就是在处理不同的物料类型的时候在选择view中的qm时的位置不同,需要用SHDB每个运行一遍做一个判断,其他的都一样的。

qdbarry2008-07-24 18:13:31

谢谢上面这位朋友的补充!

chinaunix网友2008-07-24 16:49:26

用material_btci_selection_new这种方法如果是选择mrp这些靠前的view还可以。如果是选择 qm,account,costing等等靠后面的view.直接用'MSICHTAUSW-KZSEL(' num ')会报错的,找不到view.其实'MSICHTAUSW-KZSEL(' num ')中的num位置是相对的,不是绝对的。是你可以看见的view的位置。最好是用bapi。简单方便。

chinaunix网友2008-07-09 11:28:39

恩,我没说清楚,就是先查找需要扩充的物料,读入内表中,再循环内表用BDC扩充物料视图,就是数据来源为SAP的表中。