博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

老白的ABAP博客

  abaper.cublog.cn

关于作者
姓名:    白天振(Barry.bai)
职业:    ABAPer

SAP Certified Development Consultant
|| << >> ||
我的分类


物料的维护视图
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

发表于: 2008-04-14,修改于: 2008-04-15 23:00,已浏览1012次,有评论17条 推荐 投诉


网友评论
网友: sap_zhiwen 时间:2008-04-14 21:50:38 IP地址:60.8.224.★
老白:我找了一下可能是能力有限,找不到从哪里改,我想
 PERFORM BDC_FIELD          USING 'MSICHTAUSW-DYTXT'  'MRP 3'.改成这样的话系统提示MSICHTAUSW-DYTXT不存在屏幕0070中 可是在屏幕的元素清单里面有MSICHTAUSW-DYTXT和MSICHTAUSW-KZSEL字段,为什么MSICHTAUSW-KZSEL就可以MSICHTAUSW-DYTXT就不行呢?还有没其他的好方法?

网友: sap_zhiwen 时间:2008-04-14 21:58:38 IP地址:60.8.224.★
*&---------------------------------------------------------------------*
*& Report  ZMM_C_MM02_01_CREATE
*   DEVELOPMENT CLASS     :   ZMM MM02
*   CREATED (V00)         :   2007-07-16
*   DESCRIPTION           :   MRP3可配置物料


*&---------------------------------------------------------------------*
*&      TYPES定义
*&---------------------------------------------------------------------*
REPORT ZMM_C_GY_CREATE
       NO STANDARD PAGE HEADING LINE-SIZE 255.
TABLES:T100, T006A .
INCLUDE OLE2INCL.
TYPES:BEGIN OF TYP_MATNR,
      MATNR   TYPE RMMG1-MATNR,     "物料号
*     MBRSH   TYPE RMMG1-MBRSH,     "行业类型
*     MTART   TYPE RMMG1-MTART,     "物料类型
      WERKS   TYPE RMMG1-WERKS,     "工厂
      STDPD   TYPE MARC-STDPD,      "可配置的物料
      MWERT1  TYPE RCTMS-MWERT,                             "特性值1
      MWERT2  TYPE RCTMS-MWERT,                             "特性值2
      MWERT3  TYPE RCTMS-MWERT,                             "特性值3
      MWERT4  TYPE RCTMS-MWERT,                             "特征值4
      MWERT5  TYPE RCTMS-MWERT,                             "特征值5
      MWERT6  TYPE RCTMS-MWERT,                             "特征值6
      MWERT7  TYPE RCTMS-MWERT,                             "特征值7
      MWERT8  TYPE RCTMS-MWERT,                             "特征值8
      MWERT9  TYPE RCTMS-MWERT,                             "特征值9
      MWERT10  TYPE RCTMS-MWERT,                            "特征值10
      MWERT11  TYPE RCTMS-MWERT,                            "特征值11
      MWERT12  TYPE RCTMS-MWERT,                            "特征值12
      END OF TYP_MATNR.
*&---------------------------------------------------------------------*
*&     内表定义
*&---------------------------------------------------------------------*
DATA: TD_MATNR TYPE STANDARD TABLE OF TYP_MATNR WITH HEADER LINE,
      TH_MATNR TYPE TYP_MATNR,
      TH_MATNRMORE TYPE TYP_MATNR.
DATA: BEGIN OF BDCDATA OCCURS 50.
        INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDCDATA.
DATA: SU TYPE I VALUE 0.
DATA: EXCEL   TYPE OLE2_OBJECT,       " Excel object
      WBOOK   TYPE OLE2_OBJECT,       " Workbook object
      WSHEET  TYPE OLE2_OBJECT,       " Worksheet object
      RANGE   TYPE OLE2_OBJECT,       " Range object
      CELL    TYPE OLE2_OBJECT.       " Cell object
DATA: SCRFILE0(50) TYPE C.
DATA: NUMIT TYPE I VALUE 2,
      NUMITMORE TYPE I VALUE 1.
DATA: ZDD TYPE STRING.
DATA: AAA(18) TYPE C .
DATA: WKW TYPE T006A.
*  data:w_line(02) TYPE C.
*  CLEAR:W_LINE.
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA: SK TYPE I VALUE 0.
DATA: SHU TYPE I VALUE 1.
DATA: SCREEN1 TYPE I VALUE 1.
DATA: LW_LINES TYPE I VALUE 1.
DATA: LW_TIMES TYPE I VALUE 1.
DATA: A1 TYPE STRING,
      A4 TYPE STRING.
DATA: BBB TYPE I .
DEFINE CREATE_EXCEL.
  CREATE OBJECT EXCEL 'Excel.Application'.  " Create excel object
  IF SY-SUBRC NE 0.
    WRITE: / 'Excel init failed, return code is ', SY-SUBRC.
    EXIT.
  ELSE.
    SET PROPERTY OF EXCEL 'Visible' = 1.             "Set excel visible
    CALL METHOD OF EXCEL 'Workbooks' = WBOOK.        "Create wbook object
    CALL METHOD OF WBOOK 'Open' = WBOOK
    EXPORTING #1 = &1.                               "srcfile1
    CALL METHOD OF WBOOK 'Worksheets' = WSHEET
    EXPORTING #1 = 'sheet1'.                         "Create wsheet object
    CALL METHOD OF WSHEET 'Activate'.
  ENDIF.
END-OF-DEFINITION.
SCRFILE0 = 'c:\err.xls.'.
*&---------------------------------------------------------------------*
*&      PARAMETERS
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-001.
PARAMETERS :
    ZFILE LIKE RLGRAP-FILENAME DEFAULT 'd:\001.txt'.
SELECTION-SCREEN END OF BLOCK 1.

*定义屏幕后台和前台button
SELECTION-SCREEN BEGIN OF BLOCK PART2 WITH FRAME TITLE TEXT-009.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(7) TEXT-010.
PARAMETERS:
      R7 RADIOBUTTON GROUP RAD2 DEFAULT 'X'.
SELECTION-SCREEN COMMENT 16(7) TEXT-011.
PARAMETERS:
      R8 RADIOBUTTON GROUP RAD2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK PART2.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR ZFILE.
  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
    EXPORTING
      STATIC        = 'X'
      MASK          = ', , *.txt'
    CHANGING
      FILE_NAME     = ZFILE
    EXCEPTIONS
      MASK_TOO_LONG = 1
      OTHERS        = 2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

*&---------------------------------------------------------------------*
*&      INITAIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
*&---------------------------------------------------------------------*
*&      START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  CREATE_EXCEL SCRFILE0.
* 上传文件
  PERFORM UPLOAD_DATA.
* 批处理
  PERFORM FRM_POST_BATCH.
* 插入数据
  PERFORM FRM_DILL_MATNR.
* 关闭批处理
  PERFORM FRM_CLOSE_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.
  APPEND BDCDATA.

ENDFORM.                    "BDC_FIELD

*&---------------------------------------------------------------------*
*&      Form  UPLOAD_DATA
*&---------------------------------------------------------------------*
*       上传文件
*----------------------------------------------------------------------*
FORM UPLOAD_DATA .
  DATA:LWFILE TYPE STRING.
  LWFILE = ZFILE.
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      FILENAME                = LWFILE
      FILETYPE                = 'ASC'
      HAS_FIELD_SEPARATOR     = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
    TABLES
      DATA_TAB                = TD_MATNR
    EXCEPTIONS
      FILE_OPEN_ERROR         = 1
      FILE_READ_ERROR         = 2
      NO_BATCH                = 3
      GUI_REFUSE_FILETRANSFER = 4
      INVALID_TYPE            = 5
      NO_AUTHORITY            = 6
      UNKNOWN_ERROR           = 7
      BAD_DATA_FORMAT         = 8
      HEADER_NOT_ALLOWED      = 9
      SEPARATOR_NOT_ALLOWED   = 10
      HEADER_TOO_LONG         = 11
      UNKNOWN_DP_ERROR        = 12
      ACCESS_DENIED           = 13
      DP_OUT_OF_MEMORY        = 14
      DISK_FULL               = 15
      DP_TIMEOUT              = 16
      OTHERS                  = 17.
  IF SY-SUBRC <> 0.
    WRITE 'ERROR WHEN FILE OPEN'.
    EXIT.
  ENDIF.


ENDFORM.                    " UPLOAD_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_POST_BATCH
*&---------------------------------------------------------------------*
*       批处理
*----------------------------------------------------------------------*
FORM FRM_POST_BATCH .
  CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
      CLIENT              = SY-MANDT
      GROUP               = 'MM02'
      KEEP                = 'X'
      USER                = SY-UNAME
    EXCEPTIONS
      CLIENT_INVALID      = 1
      DESTINATION_INVALID = 2
      GROUP_INVALID       = 3
      GROUP_IS_LOCKED     = 4
      HOLDDATE_INVALID    = 5
      INTERNAL_ERROR      = 6
      QUEUE_ERROR         = 7
      RUNNING             = 8
      SYSTEM_LOCK_ERROR   = 9
      USER_INVALID        = 10
      OTHERS              = 11.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " FRM_POST_BATCH
*&---------------------------------------------------------------------*
*&      Form  FRM_FILL_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_FILL_SCREEN .
  DATA: L_MSTRING(480).
  DATA: L_SUBRC LIKE SY-SUBRC.
  REFRESH BDCDATA.
  PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '0060'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM BDC_FIELD       USING 'RMMG1-MATNR'
                                TH_MATNR-MATNR.
  PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '0070'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '=ENTR'.
  PERFORM BDC_FIELD       USING 'MSICHTAUSW-DYTXT' 'X'.
  PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '0080'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '=ENTR'.
  PERFORM BDC_FIELD       USING 'RMMG1-WERKS'
                                TH_MATNR-WERKS.
  PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '4000'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '=PB19'.
  PERFORM BDC_FIELD       USING 'MARC-STDPD'
                                TH_MATNR-STDPD.

  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'           "特征名称1
                                TH_MATNRMORE-MWERT1.
  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'           "特征值1
                                TH_MATNR-MWERT1.

  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
                                TH_MATNRMORE-MWERT2.
  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
                                TH_MATNR-MWERT2.

  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
                                TH_MATNRMORE-MWERT3.
  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
                                TH_MATNR-MWERT3.

  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
                                TH_MATNRMORE-MWERT4.
  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
                                TH_MATNR-MWERT4.

  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
                                TH_MATNRMORE-MWERT5.
  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
                                TH_MATNR-MWERT5.

  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
                                TH_MATNRMORE-MWERT6.
  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
                                TH_MATNR-MWERT6.

  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
                                TH_MATNRMORE-MWERT7.
  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
                                TH_MATNR-MWERT7.

  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
                                TH_MATNRMORE-MWERT8.
  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
                               TH_MATNR-MWERT8.

  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
                                TH_MATNRMORE-MWERT9.
  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
                                TH_MATNR-MWERT9.

  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
                                TH_MATNRMORE-MWERT10.
  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
                                TH_MATNR-MWERT10.

  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
                                TH_MATNRMORE-MWERT11.
  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
                                TH_MATNR-MWERT11.

  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '=BACK'.
  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
                                TH_MATNRMORE-MWERT12.
  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
                                TH_MATNR-MWERT12.

*  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
*  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
*                                '/00'.
*  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
*                                TH_MATNRMORE-MWERT13.
*  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
*                                TH_MATNR-MWERT13.
*
*  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
*  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
*                                '/00'.
*  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
*                                TH_MATNRMORE-MWERT14.
*  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
*                                TH_MATNR-MWERT14.
*
*  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
*  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
*                                '/00'.
*  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
*                                TH_MATNRMORE-MWERT15.
*  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
*                                TH_MATNR-MWERT15.
*
*  PERFORM BDC_DYNPRO      USING 'SAPLCEI0' '0109'.
*  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
*                                '=BACK'.
*  PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'
*                                TH_MATNRMORE-MWERT16.
*  PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'
*                              TH_MATNR-MWERT16.

  PERFORM BDC_DYNPRO      USING 'SAPLMGMM' '4000'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '=BU'.
  NUMIT = NUMIT + 1.
  REFRESH MESSTAB.
  IF  R7 = 'X'.
    CALL TRANSACTION 'MM02' USING BDCDATA MODE 'N' UPDATE 'S' MESSAGES
INTO MESSTAB.
    SK = SK + 1.
    L_SUBRC = SY-SUBRC.
  ELSEIF R8 = 'X'.
    CALL TRANSACTION 'MM02' USING BDCDATA MODE ' ' UPDATE 'S' MESSAGES
INTO MESSTAB.
    SK = SK + 1.
    L_SUBRC = SY-SUBRC.
  ENDIF.
  LOOP AT MESSTAB.
    SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
                              AND   ARBGB = MESSTAB-MSGID
                              AND   MSGNR = MESSTAB-MSGNR.
    IF L_SUBRC = 0.

    ELSE.
      L_MSTRING = T100-TEXT.                                "信息注释
      IF L_MSTRING CS '&1'.
        REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
        REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
        REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
        REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
      ELSE.
        REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
        REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
        REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
        REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
      ENDIF.

      CONDENSE L_MSTRING.
      IF AAA <> TH_MATNR-MATNR.
        SHU = SHU + 1.
        BBB = 3.
        PERFORM FILL_RANGE USING SHU 1 SK.
        PERFORM FILL_RANGE USING SHU 2 TH_MATNR-MATNR.
        PERFORM FILL_RANGE USING SHU 3 L_MSTRING(400).
        SCREEN1 = SCREEN1 + 1.
      ELSE .
        BBB = BBB + 1.
        PERFORM FILL_RANGE USING SHU BBB L_MSTRING(400).
      ENDIF.
      AAA = TH_MATNR-MATNR.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " FRM_FILL_SCREEN
*&---------------------------------------------------------------------*
*&      Form  FRM_DILL_MATNR
*&---------------------------------------------------------------------*
*       插入数据
*----------------------------------------------------------------------*
FORM FRM_DILL_MATNR .
*  LOOP AT TD_MATNR INTO TH_MATNR.
  DESCRIBE TABLE TD_MATNR LINES LW_LINES.
  LW_TIMES = LW_LINES - 1.
  DO LW_TIMES TIMES.
    READ TABLE TD_MATNR INDEX NUMIT INTO TH_MATNR.
    READ TABLE TD_MATNR INDEX NUMITMORE INTO TH_MATNRMORE.
    PERFORM FRM_FILL_SCREEN.
    CALL FUNCTION 'BDC_INSERT'
      EXPORTING
        TCODE            = 'MM02'
      TABLES
        DYNPROTAB        = BDCDATA
      EXCEPTIONS
        INTERNAL_ERROR   = 1
        NOT_OPEN         = 2
        QUEUE_ERROR      = 3
        TCODE_INVALID    = 4
        PRINTING_INVALID = 5
        POSTING_INVALID  = 6
        OTHERS           = 7.
    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDDO.
*  ENDLOOP.

ENDFORM.                    " FRM_DILL_MATNR
*excel 导出报告
FORM FILL_RANGE  USING    VALUE(F_ROW)
                          VALUE(F_COL)
                          VALUE(F_VALUE).
  CALL METHOD OF EXCEL 'CELLS' = CELL
    EXPORTING
    #1 = F_ROW
    #2 = F_COL.
  SET PROPERTY OF CELL 'VALUE' = F_VALUE.
ENDFORM.                    " fill_range

*&---------------------------------------------------------------------*
*&      Form  FRM_CLOSE_BDC
*&---------------------------------------------------------------------*
*       关闭批处理
*----------------------------------------------------------------------*
FORM FRM_CLOSE_BDC .
  CALL FUNCTION 'BDC_CLOSE_GROUP'
    EXCEPTIONS
      NOT_OPEN    = 1
      QUEUE_ERROR = 2
      OTHERS      = 3.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    " FRM_CLOSE_BDC

网友: sap_zhiwen 时间:2008-04-14 21:59:21 IP地址:60.8.224.★
这个是我写程序,帮忙看下需要在那里改动下

网友: qdbarry 时间:2008-04-15 07:43:09 IP地址:222.71.103.★
把 PERFORM BDC_FIELD          USING 'MSICHTAUSW-KZSEL(05)'  'X'.
改成类似于:
DATA: str TYPE string ,
          num(2) TYPE n.
  CONCATENATE 'MSICHTAUSW-KZSEL('  num ')' INTO str .
PERFORM BDC_FIELD          USING str  'X'.
的样子。
计算num的值可以参考下面程序:
REPORT  z_barry_mm01_sq                         .

TABLES mara.
DATA: BEGIN OF bildtab OCCURS 0.
        INCLUDE STRUCTURE mbildtab.
DATA: END OF bildtab.
DATA: str TYPE string ,
        num(2) TYPE n.

PARAMETERS p_matnr LIKE mara-matnr.

START-OF-SELECTION.
  CALL FUNCTION 'SELECTION_VIEWS_FIND'
    EXPORTING
      bildsequenz  = '21'
      pflegestatus = 'KDEALBSZXVPCFQG'
    TABLES
      bildtab      = bildtab.

  SELECT SINGLE * FROM mara WHERE matnr = p_matnr.

  LOOP AT bildtab.
    IF NOT mara-pstat CS bildtab-pstat.
      DELETE bildtab.
    ENDIF.
  ENDLOOP.

  SORT bildtab BY kzanz DESCENDING idxbd ASCENDING.

  LOOP AT bildtab.
    WRITE : / sy-tabix , bildtab-dytxt.
    IF bildtab-dytxt = '销售文本'.
      num = sy-tabix.
    ENDIF.
  ENDLOOP.

  CONCATENATE 'MSICHTAUSW-KZSEL('  num ')' INTO str .

  SKIP 2.
  WRITE / str.
程序不是很完善,仅仅是一个例子。

网友: qdbarry 时间:2008-04-15 10:06:24 IP地址:220.248.45.★
如果感觉麻烦,可以尝试一下FM:MATERIAL_BTCI_SELECTION_NEW

网友: sap_zhiwen 时间:2008-04-15 21:28:48 IP地址:60.8.224.★
老白你真的太强了,现在像你这样能力很强又很热心的人不多,祝愿生活工作更上一个台阶。^_^

网友: qdbarry 时间:2008-04-15 22:58:41 IP地址:58.38.245.★
谢谢你的夸奖和祝福,也祝你早日成为资深的开发顾问:)
我更新了一下文章内容,添加了一个使用函数MATERIAL_BTCI_SELECTION_NEW的例子。

网友: sap_zhiwen 时间:2008-04-16 17:04:06 IP地址:60.8.224.★
老白问题已经解决了MATERIAL_BTCI_SELECTION_NEW这个程序是可行的,而 CONCATENATE 'MSICHTAUSW-KZSEL('  num ')' INTO str 这种我试了一下发现到屏幕0070的时候提示没有屏幕字段str,所以我改用了MATERIAL_BTCI_SELECTION_NEW问题解决,哈哈,再次感谢.

网友: qdbarry 时间:2008-04-16 17:09:25 IP地址:222.66.57.★
呵呵。。MATERIAL_BTCI_SELECTION_NEW这个方法比较傻瓜机,另外一个方法比较麻烦,但是用途会比较多。
不管采用哪个办法,能解决问题就是可行的办法。

网友: 本站网友 时间:2008-07-07 15:03:13 IP地址:121.15.200.★
请教下,要做一个自动检测并扩充物料视图的程序可行吗?我目前的思路是在MARC表中通过PSTAT字段查找符合扩充条件的物料号,读入某个内表,然后采用BDC读取内表中的数据对其进行扩充操作,这样是否可行?学ABAP/4大半年了,还没用过BDC。。。

网友: qdbarry 时间:2008-07-08 09:03:24 IP地址:60.2.149.★
额。。。不大懂你的意思,“自动检测并扩充物料视图”是什么意思?

网友: 本站网友 时间:2008-07-09 11:28:39 IP地址:121.15.200.★
恩,我没说清楚,就是先查找需要扩充的物料,读入内表中,再循环内表用BDC扩充物料视图,就是数据来源为SAP的表中。

网友: qdbarry 时间:2008-07-10 08:30:19 IP地址:60.2.149.★
扩充物料我没有做过,你是不是说的类似MM50的功能?

网友: 本站网友 时间:2008-07-24 13:10:49 IP地址:222.92.84.★
bapi_material_savedata

网友: 本站网友 时间:2008-07-24 16:49:26 IP地址:222.92.84.★
用material_btci_selection_new这种方法如果是选择mrp这些靠前的view还可以。如果是选择 qm,account,costing等等靠后面的view.直接用'MSICHTAUSW-KZSEL('  num ')会报错的,找不到view.其实'MSICHTAUSW-KZSEL('  num ')中的num位置是相对的,不是绝对的。是你可以看见的view的位置。最好是用bapi。简单方便。

网友: qdbarry 时间:2008-07-24 18:13:31 IP地址:218.21.215.★
谢谢上面这位朋友的补充!

网友: 本站网友 时间:2008-07-25 16:53:08 IP地址:121.15.200.★
刚好我要扩充的就是qm视图,还是用的BDC实现了,BAPI还没学会,就是在处理不同的物料类型的时候在选择view中的qm时的位置不同,需要用SHDB每个运行一遍做一个判断,其他的都一样的。

 发表评论