首先, 解释BDC这三个英文的意思, 普遍都认同是(Batch Data Communication). 然后下面是一些相关的术语解释:

Batch Input: 批输入, 用于大批量, 非实时性( 对速度要求比较低) 的数据传输 使用BDC_OPEN_GROUP, BDC_INSERT_GROUP, BDC_CLOSE_GROUP这几个function实现批输入会话的操作. 然后通过批输入会话将数据传输到SAP.

Call Transaction: 调用事务, 与批输入的差异主要是在于数据传输过程不生成批输入会话, 数据在程序运行过程中直接通过调用CALL TRANSACTION USING BDC表传输至SAP.

Direct Input: 直接输入, 其主要优点是速度最快, 不生成会话, 数据被直接输入至SAP. 不存在事务屏幕处理过程(批输入和调用事务中均包含该过程), 直接输入的效率较高, 系统负载较小. 使用TCODE BMV0.

但是我们不该把BDC技术只局限于录屏幕, 批输入和调用事务上, 其实以下技术都可以实现BDC, 比如BAPI, IDOC.

BAPI: 业务应用程序接口, SAP作为一个完善的系统, 每个应用中都有包含标准的数据传输接口.

IDOC: 中间文档, ALE和EDI属于系统间数据传输的接口, IDOC中包含数据结构的定义和数据的处理逻辑, 是传输的介质.

这个图参照了黄佳写的<<SAP业务数据传输指南>>.  下面我来详细举例一下其中几种技术.

一, 调用事务, 主要使用该语句

CALL TRANSACTION '事务代码' USING bdc表 MODE m UPDATE 'S' MESSAGES INTO mssg.

bdc表是参考bdcdata结构定义的内表, 主要存储屏幕处理所需要的关键数据, 其结构如下:

字段名 类型 长度 小数 描述
PROGRAM CHAR 40 0 BDC module pool
DYNPRO NUMC 4 0 BDC Screen number
DYNBEGIN CHAR 1 0 BDC screen start
FNAM CHAR 132 0 Field name
FVAL CHAR 132 0 BDC field value

MODE m 是指Processing Mode, 共有4种处理模式:

模式 英文描述
A Display all screens
E Display errors
N Background processing
P Background processing; debugging possible

UPDATE 'S'  是指更新模式, 共有3种更新模式,一般使用'S'模式:

模式 描述
A 异步
S 同步
L 本地

MESSAGES INTO mssg 的意思是将处理信息导入到一个参考bdcmsgcoll结构的内表, 方便查错.

下面是一个上传物料中文描述的简单例子:

view plaincopy to clipboardprint?
  1. *&---------------------------------------------------------------------*
  2. *& Report  ZBDC_TEST1
  3. *& 调用事务
  4. *&---------------------------------------------------------------------*
  5. *&  Author: Jun
  6. *&
  7. *&---------------------------------------------------------------------*
  8. REPORT  zbdc_test1.
  9. ************************************************************************
  10. * D A T A
  11. ************************************************************************
  12. CONSTANTS: c_def_path LIKE rlgrap-filename VALUE 'c:\file.txt'.
  13. DATA: BEGIN OF mssg OCCURS 0.
  14. INCLUDE STRUCTURE bdcmsgcoll.
  15. DATA: END OF mssg.
  16. DATA: BEGIN OF zitab_bdc OCCURS 0.
  17. INCLUDE STRUCTURE bdcdata.
  18. DATA: END OF zitab_bdc.
  19. DATA: BEGIN OF t_main OCCURS 0,
  20. matnr(18),
  21. maktx(40),
  22. END OF t_main.
  23. DEFINE dynpro.
  24. CLEAR zitab_bdc.
  25. IF &1 = 'X'.
  26. MOVE: 'X' TO zitab_bdc-dynbegin,
  27. &2  TO zitab_bdc-program,
  28. &3 TO zitab_bdc-dynpro.
  29. ELSE.
  30. MOVE: &2 TO zitab_bdc-fnam,
  31. &3 TO zitab_bdc-fval.
  32. ENDIF.
  33. APPEND zitab_bdc.
  34. END-OF-DEFINITION.
  35. SELECTION-SCREEN BEGIN OF BLOCK sc1 WITH FRAME TITLE text-s01.
  36. PARAMETER: f_cap TYPE rlgrap-filename OBLIGATORY DEFAULT c_def_path.
  37. PARAMETER: m TYPE ctu_mode DEFAULT 'N'.
  38. SELECTION-SCREEN END OF BLOCK sc1.
  39. ************************************************************************
  40. * S T A R T O F S E L E C T I O N
  41. ************************************************************************
  42. START-OF-SELECTION.
  43. WRITE : / 'Start creation of BDC session',sy-mandt,sy-uname,sy-uzeit.
  44. PERFORM get_codepage.
  45. PERFORM call_upload TABLES t_main USING f_cap.
  46. PERFORM update_data.
  47. WRITE: / 'Finished!'.
  48. ************************************************************************
  49. * F O R M S
  50. ************************************************************************
  51. *&---------------------------------------------------------------------*
  52. *&
  53. *&      Form  GET_CODEPAGE
  54. *&---------------------------------------------------------------------*
  55. FORM get_codepage.
  56. DATA: cncoden TYPE abap_encod,
  57. cncode type  CPCODEPAGE.
  58. CALL FUNCTION 'NLS_GET_FRONTEND_CP'
  59. EXPORTING
  60. langu                 = '1'
  61. IMPORTING
  62. frontend_codepage     = cncode
  63. EXCEPTIONS
  64. illegal_syst_codepage = 21
  65. no_frontend_cp_found  = 23
  66. internal_or_db_error  = 25.
  67. MOVE: cncode TO cncoden.
  68. ENDFORM.
  69. *&---------------------------------------------------------------------*
  70. *&
  71. *&      Form  CALL_UPLOAD
  72. *&---------------------------------------------------------------------*
  73. FORM call_upload TABLES p_tab USING p_fname.
  74. DATA: tmp_filename TYPE string.
  75. tmp_filename = p_fname.
  76. CALL METHOD cl_gui_frontend_services=>gui_download
  77. EXPORTING
  78. filename                = tmp_filename
  79. write_field_separator     = 'X'
  80. codepage                = cncoden
  81. CHANGING
  82. data_tab                = p_tab
  83. EXCEPTIONS
  84. file_write_error        = 1
  85. no_batch                = 2
  86. gui_refuse_filetransfer = 3
  87. invalid_type            = 4
  88. no_authority            = 5
  89. unknown_error           = 6
  90. header_not_allowed      = 7
  91. separator_not_allowed   = 8
  92. filesize_not_allowed    = 9
  93. header_too_long         = 10
  94. dp_error_create         = 11
  95. dp_error_send           = 12
  96. dp_error_write          = 13
  97. unknown_dp_error        = 14
  98. access_denied           = 15
  99. dp_out_of_memory        = 16
  100. disk_full               = 17
  101. dp_timeout              = 18
  102. file_not_found          = 19
  103. dataprovider_exception  = 20
  104. control_flush_error     = 21
  105. not_supported_by_gui    = 22
  106. error_no_gui            = 23
  107. OTHERS                  = 24.
  108. if sy-subrc <> 0.
  109. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  110. *            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  111. endif.
  112. ENDFORM.                    "call_upload
  113. *&---------------------------------------------------------------------*
  114. *&      Form  update_data
  115. *&---------------------------------------------------------------------*
  116. *       text
  117. *----------------------------------------------------------------------*
  118. FORM update_data.
  119. REFRESH zitab_bdc.
  120. LOOP AT t_main.
  121. PERFORM call_transaction.
  122. ENDLOOP.
  123. ENDFORM.                    "update_data
  124. *&---------------------------------------------------------------------*
  125. *&      Form  call_transaction
  126. *&---------------------------------------------------------------------*
  127. *       text
  128. *----------------------------------------------------------------------*
  129. FORM call_transaction.
  130. dynpro: 'X'   'SAPLMGMM'  '0060',
  131. ' '   'RMMG1-MATNR'   t_main-matnr,
  132. ' '   'BDC_OKCODE'    '/00'.
  133. dynpro: 'X'   'SAPLMGMM'   '0070',
  134. ' '   'MSICHTAUSW-KZSEL(01)'  'X',
  135. ' '   'BDC_OKCODE'  '=ENTR'.
  136. dynpro: 'X'   'SAPLMGMM'    '4004',
  137. ' '   'BDC_OKCODE'  '=ZU01'.
  138. dynpro:  'X'   'SAPLMGMM'    '4300',
  139. ' '   'SKTEXT-SPRAS(02)'  'ZH',
  140. ' '   'SKTEXT-MAKTX(02)'  t_main-maktx,
  141. ' '   'BDC_OKCODE'    '=BU'.
  142. CALL TRANSACTION 'MM02' USING zitab_bdc MODE m UPDATE 'S' MESSAGES INTO mssg.
  143. IF sy-subrc NE 0.
  144. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
  145. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  146. ENDIF.
  147. REFRESH: zitab_bdc,mssg.
  148. ENDFORM.                    " CALL_TRANSACTION
*&---------------------------------------------------------------------* *& Report  ZBDC_TEST1 *& 调用事务 *&---------------------------------------------------------------------* *&  Author: Jun *& *&---------------------------------------------------------------------*  REPORT  zbdc_test1.  ************************************************************************ * D A T A ************************************************************************  CONSTANTS: c_def_path LIKE rlgrap-filename VALUE 'c:\file.txt'. DATA: BEGIN OF mssg OCCURS 0.         INCLUDE STRUCTURE bdcmsgcoll. DATA: END OF mssg.   DATA: BEGIN OF zitab_bdc OCCURS 0.         INCLUDE STRUCTURE bdcdata. DATA: END OF zitab_bdc.  DATA: BEGIN OF t_main OCCURS 0,       matnr(18),       maktx(40),       END OF t_main.  DEFINE dynpro.    CLEAR zitab_bdc.   IF &1 = 'X'.      MOVE: 'X' TO zitab_bdc-dynbegin,                 &2  TO zitab_bdc-program,                 &3 TO zitab_bdc-dynpro.    ELSE.      MOVE: &2 TO zitab_bdc-fnam,                 &3 TO zitab_bdc-fval.    ENDIF.    APPEND zitab_bdc.  END-OF-DEFINITION.  SELECTION-SCREEN BEGIN OF BLOCK sc1 WITH FRAME TITLE text-s01. PARAMETER: f_cap TYPE rlgrap-filename OBLIGATORY DEFAULT c_def_path. PARAMETER: m TYPE ctu_mode DEFAULT 'N'. SELECTION-SCREEN END OF BLOCK sc1.   ************************************************************************ * S T A R T O F S E L E C T I O N ************************************************************************ START-OF-SELECTION.   WRITE : / 'Start creation of BDC session',sy-mandt,sy-uname,sy-uzeit.   PERFORM get_codepage.   PERFORM call_upload TABLES t_main USING f_cap.   PERFORM update_data.    WRITE: / 'Finished!'.   ************************************************************************ * F O R M S ************************************************************************ *&---------------------------------------------------------------------* *& *&      Form  GET_CODEPAGE *&---------------------------------------------------------------------* FORM get_codepage.    DATA: cncoden TYPE abap_encod,         cncode type  CPCODEPAGE.    CALL FUNCTION 'NLS_GET_FRONTEND_CP'     EXPORTING       langu                 = '1'     IMPORTING       frontend_codepage     = cncode     EXCEPTIONS       illegal_syst_codepage = 21       no_frontend_cp_found  = 23       internal_or_db_error  = 25.   MOVE: cncode TO cncoden. ENDFORM.  *&---------------------------------------------------------------------* *& *&      Form  CALL_UPLOAD *&---------------------------------------------------------------------*  FORM call_upload TABLES p_tab USING p_fname.    DATA: tmp_filename TYPE string.    tmp_filename = p_fname.       CALL METHOD cl_gui_frontend_services=>gui_download       EXPORTING         filename                = tmp_filename         write_field_separator     = 'X'         codepage                = cncoden       CHANGING         data_tab                = p_tab       EXCEPTIONS         file_write_error        = 1         no_batch                = 2         gui_refuse_filetransfer = 3         invalid_type            = 4         no_authority            = 5         unknown_error           = 6         header_not_allowed      = 7         separator_not_allowed   = 8         filesize_not_allowed    = 9         header_too_long         = 10         dp_error_create         = 11         dp_error_send           = 12         dp_error_write          = 13         unknown_dp_error        = 14         access_denied           = 15         dp_out_of_memory        = 16         disk_full               = 17         dp_timeout              = 18         file_not_found          = 19         dataprovider_exception  = 20         control_flush_error     = 21         not_supported_by_gui    = 22         error_no_gui            = 23         OTHERS                  = 24.  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.                    "call_upload *&---------------------------------------------------------------------* *&      Form  update_data *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* FORM update_data.    REFRESH zitab_bdc.    LOOP AT t_main.     PERFORM call_transaction.   ENDLOOP. ENDFORM.                    "update_data  *&---------------------------------------------------------------------* *&      Form  call_transaction *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* FORM call_transaction.  dynpro: 'X'   'SAPLMGMM'  '0060',              ' '   'RMMG1-MATNR'   t_main-matnr,              ' '   'BDC_OKCODE'    '/00'.  dynpro: 'X'   'SAPLMGMM'   '0070',              ' '   'MSICHTAUSW-KZSEL(01)'  'X',              ' '   'BDC_OKCODE'  '=ENTR'.  dynpro: 'X'   'SAPLMGMM'    '4004',              ' '   'BDC_OKCODE'  '=ZU01'.  dynpro:  'X'   'SAPLMGMM'    '4300',               ' '   'SKTEXT-SPRAS(02)'  'ZH',               ' '   'SKTEXT-MAKTX(02)'  t_main-maktx,               ' '   'BDC_OKCODE'    '=BU'.     CALL TRANSACTION 'MM02' USING zitab_bdc MODE m UPDATE 'S' MESSAGES INTO mssg.    IF sy-subrc NE 0.     MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.   ENDIF.   REFRESH: zitab_bdc,mssg.  ENDFORM.                    " CALL_TRANSACTION  

二, 批输入, 主要使用BDC_OPEN_GROUP, BDC_INSERT_GROUP, BDC_CLOSE_GROUP这几个function实现批输入会话的操作. 然后通过批输入会话将数据传输到SAP.

以下是Batch Input的例子, 是把前面的程序改了一下完成的, 注意红色的地方就是不同处:

view plaincopy to clipboardprint?
  1. *&---------------------------------------------------------------------*
  2. *& Report  ZBDC_TEST2
  3. *&  批输入
  4. *&---------------------------------------------------------------------*
  5. *&  Author: Jun
  6. *&
  7. *&---------------------------------------------------------------------*
  8. REPORT  zbdc_test2.
  9. ************************************************************************
  10. * D A T A
  11. ************************************************************************
  12. CONSTANTS: c_def_path LIKE rlgrap-filename VALUE 'c:\file.txt'.
  13. DATA: BEGIN OF zitab_bdc OCCURS 0.
  14. INCLUDE STRUCTURE bdcdata.
  15. DATA: END OF zitab_bdc.
  16. DATA: BEGIN OF t_main OCCURS 0,
  17. matnr(18),
  18. maktx(40),
  19. END OF t_main.
  20. DEFINE dynpro.
  21. CLEAR zitab_bdc.
  22. IF &1 = 'X'.
  23. MOVE: 'X' TO zitab_bdc-dynbegin,
  24. &2  TO zitab_bdc-program,
  25. &3 TO zitab_bdc-dynpro.
  26. ELSE.
  27. MOVE: &2 TO zitab_bdc-fnam,
  28. &3 TO zitab_bdc-fval.
  29. ENDIF.
  30. APPEND zitab_bdc.
  31. END-OF-DEFINITION.
  32. SELECTION-SCREEN BEGIN OF BLOCK sc1 WITH FRAME TITLE text-s01.
  33. PARAMETER: f_cap TYPE rlgrap-filename OBLIGATORY DEFAULT c_def_path.
  34. SELECTION-SCREEN END OF BLOCK sc1.
  35. ************************************************************************
  36. * S T A R T O F S E L E C T I O N
  37. ************************************************************************
  38. START-OF-SELECTION.
  39. WRITE : / 'Start creation of BDC session',sy-mandt,sy-uname,sy-uzeit.
  40. PERFORM get_codepage.
  41. PERFORM call_upload TABLES t_main USING f_cap.
  42. PERFORM update_data.
  43. WRITE: / 'Finished!'.
  44. ************************************************************************
  45. * F O R M S
  46. ************************************************************************
  47. *&---------------------------------------------------------------------*
  48. *&
  49. *&      Form  GET_CODEPAGE
  50. *&---------------------------------------------------------------------*
  51. FORM get_codepage.
  52. DATA: cncoden TYPE abap_encod,
  53. cncode type  CPCODEPAGE.
  54. CALL FUNCTION 'NLS_GET_FRONTEND_CP'
  55. EXPORTING
  56. langu                 = '1'
  57. IMPORTING
  58. frontend_codepage     = cncode
  59. EXCEPTIONS
  60. illegal_syst_codepage = 21
  61. no_frontend_cp_found  = 23
  62. internal_or_db_error  = 25.
  63. MOVE: cncode TO cncoden.
  64. ENDFORM.
  65. *&---------------------------------------------------------------------*
  66. *&
  67. *&      Form  CALL_UPLOAD
  68. *&---------------------------------------------------------------------*
  69. FORM call_upload TABLES p_tab USING p_fname.
  70. DATA: tmp_filename TYPE string.
  71. tmp_filename = p_fname.
  72. CALL METHOD cl_gui_frontend_services=>gui_download
  73. EXPORTING
  74. filename                = tmp_filename
  75. write_field_separator     = 'X'
  76. codepage                = cncoden
  77. CHANGING
  78. data_tab                = p_tab
  79. EXCEPTIONS
  80. file_write_error        = 1
  81. no_batch                = 2
  82. gui_refuse_filetransfer = 3
  83. invalid_type            = 4
  84. no_authority            = 5
  85. unknown_error           = 6
  86. header_not_allowed      = 7
  87. separator_not_allowed   = 8
  88. filesize_not_allowed    = 9
  89. header_too_long         = 10
  90. dp_error_create         = 11
  91. dp_error_send           = 12
  92. dp_error_write          = 13
  93. unknown_dp_error        = 14
  94. access_denied           = 15
  95. dp_out_of_memory        = 16
  96. disk_full               = 17
  97. dp_timeout              = 18
  98. file_not_found          = 19
  99. dataprovider_exception  = 20
  100. control_flush_error     = 21
  101. not_supported_by_gui    = 22
  102. error_no_gui            = 23
  103. OTHERS                  = 24.
  104. if sy-subrc <> 0.
  105. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  106. *            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  107. endif.
  108. ENDFORM.                    "call_upload
  109. *&---------------------------------------------------------------------*
  110. *&      Form  update_data
  111. *&---------------------------------------------------------------------*
  112. *       text
  113. *----------------------------------------------------------------------*
  114. FORM update_data.
  115. <font color="#ff0000">    CALL FUNCTION 'BDC_OPEN_GROUP'
  116. EXPORTING
  117. CLIENT              = SY-MANDT
  118. GROUP               = P_S_NAME
  119. KEEP                = 'X'
  120. USER                = SY-UNAME
  121. EXCEPTIONS
  122. CLIENT_INVALID      = 1
  123. DESTINATION_INVALID = 2
  124. GROUP_INVALID       = 3
  125. GROUP_IS_LOCKED     = 4
  126. HOLDDATE_INVALID    = 5
  127. INTERNAL_ERROR      = 6
  128. QUEUE_ERROR         = 7
  129. RUNNING             = 8
  130. SYSTEM_LOCK_ERROR   = 9
  131. USER_INVALID        = 10
  132. OTHERS              = 11.</font>
*&---------------------------------------------------------------------* *& Report  ZBDC_TEST2 *&  批输入 *&---------------------------------------------------------------------* *&  Author: Jun *& *&---------------------------------------------------------------------*  REPORT  zbdc_test2.  ************************************************************************ * D A T A ************************************************************************  CONSTANTS: c_def_path LIKE rlgrap-filename VALUE 'c:\file.txt'.  DATA: BEGIN OF zitab_bdc OCCURS 0.         INCLUDE STRUCTURE bdcdata. DATA: END OF zitab_bdc.  DATA: BEGIN OF t_main OCCURS 0,       matnr(18),       maktx(40),       END OF t_main.  DEFINE dynpro.    CLEAR zitab_bdc.   IF &1 = 'X'.      MOVE: 'X' TO zitab_bdc-dynbegin,         &2  TO zitab_bdc-program,         &3 TO zitab_bdc-dynpro.    ELSE.      MOVE: &2 TO zitab_bdc-fnam,  &3 TO zitab_bdc-fval.    ENDIF.    APPEND zitab_bdc.  END-OF-DEFINITION.  SELECTION-SCREEN BEGIN OF BLOCK sc1 WITH FRAME TITLE text-s01. PARAMETER: f_cap TYPE rlgrap-filename OBLIGATORY DEFAULT c_def_path. SELECTION-SCREEN END OF BLOCK sc1.   ************************************************************************ * S T A R T O F S E L E C T I O N ************************************************************************ START-OF-SELECTION.   WRITE : / 'Start creation of BDC session',sy-mandt,sy-uname,sy-uzeit.   PERFORM get_codepage.   PERFORM call_upload TABLES t_main USING f_cap.   PERFORM update_data.    WRITE: / 'Finished!'.   ************************************************************************ * F O R M S ************************************************************************ *&---------------------------------------------------------------------* *& *&      Form  GET_CODEPAGE *&---------------------------------------------------------------------* FORM get_codepage.    DATA: cncoden TYPE abap_encod,         cncode type  CPCODEPAGE.    CALL FUNCTION 'NLS_GET_FRONTEND_CP'     EXPORTING       langu                 = '1'     IMPORTING       frontend_codepage     = cncode     EXCEPTIONS       illegal_syst_codepage = 21       no_frontend_cp_found  = 23       internal_or_db_error  = 25.   MOVE: cncode TO cncoden. ENDFORM.  *&---------------------------------------------------------------------* *& *&      Form  CALL_UPLOAD *&---------------------------------------------------------------------*  FORM call_upload TABLES p_tab USING p_fname.    DATA: tmp_filename TYPE string.    tmp_filename = p_fname.       CALL METHOD cl_gui_frontend_services=>gui_download       EXPORTING         filename                = tmp_filename  write_field_separator     = 'X'         codepage                = cncoden       CHANGING         data_tab                = p_tab       EXCEPTIONS         file_write_error        = 1         no_batch                = 2         gui_refuse_filetransfer = 3         invalid_type            = 4         no_authority            = 5         unknown_error           = 6         header_not_allowed      = 7         separator_not_allowed   = 8         filesize_not_allowed    = 9         header_too_long         = 10         dp_error_create         = 11         dp_error_send           = 12         dp_error_write          = 13         unknown_dp_error        = 14         access_denied           = 15         dp_out_of_memory        = 16         disk_full               = 17         dp_timeout              = 18         file_not_found          = 19         dataprovider_exception  = 20         control_flush_error     = 21         not_supported_by_gui    = 22         error_no_gui            = 23         OTHERS                  = 24.  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.                    "call_upload *&---------------------------------------------------------------------* *&      Form  update_data *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* FORM update_data.  
view plaincopy to clipboardprint?
  1. <font color="#ff0000">    IF SY-SUBRC <> 0.
  2. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  3. WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  4. ENDIF.
  5. </font>
  6. REFRESH zitab_bdc.
  7. LOOP AT t_main.
  8. PERFORM  batch_input.
  9. ENDLOOP.
  10. <font color="#ff0000">    CALL FUNCTION 'BDC_CLOSE_GROUP'
  11. EXCEPTIONS
  12. NOT_OPEN    = 1
  13. QUEUE_ERROR = 2
  14. OTHERS      = 3.
  15. IF SY-SUBRC <> 0.
  16. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  17. WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  18. ENDIF.
  19. </font>
  20. ENDFORM.                    "update_data
  21. *&---------------------------------------------------------------------*
  22. *&      Form  batch_input
  23. *&---------------------------------------------------------------------*
  24. *       text
  25. *----------------------------------------------------------------------*
  26. FORM batch_input.
  27. dynpro:
  28. 'X'   'SAPLMGMM'  '0060',
  29. ' '   'RMMG1-MATNR'   t_main-matnr,
  30. ' '   'BDC_OKCODE'    '/00'.
  31. dynpro:
  32. 'X'   'SAPLMGMM'   '0070',
  33. ' '   'MSICHTAUSW-KZSEL(01)'  'X',
  34. ' '   'BDC_OKCODE'  '=ENTR'.
  35. dynpro:
  36. 'X'   'SAPLMGMM'    '4004',
  37. ' '   'BDC_OKCODE'  '=ZU01'.
  38. dynpro:
  39. 'X'   'SAPLMGMM'    '4300',
  40. ' '   'SKTEXT-SPRAS(02)'  'ZH',
  41. ' '   'SKTEXT-MAKTX(02)'  t_main-maktx,
  42. ' '   'BDC_OKCODE'    '=BU'.
  43. <font color="#ff0000">    CALL FUNCTION 'BDC_INSERT'
  44. EXPORTING
  45. TCODE            = 'MM02'
  46. TABLES
  47. DYNPROTAB        = zitab_bdc
  48. EXCEPTIONS
  49. INTERNAL_ERROR   = 1
  50. NOT_OPEN         = 2
  51. QUEUE_ERROR      = 3
  52. TCODE_INVALID    = 4
  53. PRINTING_INVALID = 5
  54. POSTING_INVALID  = 6
  55. OTHERS           = 7.
  56. IF SY-SUBRC <> 0.
  57. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  58. WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  59. ENDIF.</font>
  60. REFRESH: zitab_bdc.
  61. ENDFORM.
    REFRESH zitab_bdc.    LOOP AT t_main.     PERFORM  batch_input.    ENDLOOP.   ENDFORM.                    "update_data  *&---------------------------------------------------------------------* *&      Form  batch_input  *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* FORM batch_input.  dynpro:   'X'   'SAPLMGMM'  '0060',   ' '   'RMMG1-MATNR'   t_main-matnr,   ' '   'BDC_OKCODE'    '/00'.    dynpro:   'X'   'SAPLMGMM'   '0070',   ' '   'MSICHTAUSW-KZSEL(01)'  'X',   ' '   'BDC_OKCODE'  '=ENTR'.  dynpro:   'X'   'SAPLMGMM'    '4004',   ' '   'BDC_OKCODE'  '=ZU01'.  dynpro:   'X'   'SAPLMGMM'    '4300',   ' '   'SKTEXT-SPRAS(02)'  'ZH',   ' '   'SKTEXT-MAKTX(02)'  t_main-maktx,   ' '   'BDC_OKCODE'    '=BU'.      REFRESH: zitab_bdc.  ENDFORM.   

三, BAPI是SAP标准的API, 在多系统的环境下,我们可以通过ALE/EDI技术使用RFC和BAPI实现数据传输工作. 但是也可以自己编写程序实现本地执行传输工作. 下面是一个使用BAPI传输PO的例子:

view plaincopy to clipboardprint?
  1. <pre class="csharp" name="code">*&---------------------------------------------------------------------*
  2. *& Report  ZCON0026
  3. *&
  4. *&---------------------------------------------------------------------*
  5. *&  Author: Jun
  6. *&
  7. *&---------------------------------------------------------------------*
  8. REPORT  ZCON0026.
  9. FIELD-SYMBOLS : <fs></fs>.
  10. <font color="#ff0000">DATA:wa_pohead  TYPE bapimepoheader.
  11. DATA:wa_poheadx TYPE bapimepoheaderx.
  12. DATA:wa_poaddrvendor TYPE bapimepoaddrvendor.
  13. DATA:wa_testrun TYPE bapiflag-bapiflag.</font>
  14. DATA:g_ebeln TYPE ekko-ebeln.   "Purchasing Document Header
  15. DATA:g_mtart TYPE mtart.
  16. <font color="#ff0000">DATA:it_return    TYPE bapiret2       OCCURS 0 WITH HEADER LINE.
  17. DATA:it_msg       TYPE bapiret2       OCCURS 0 WITH HEADER LINE.</font>
  18. DATA:BEGIN OF it_msg1 OCCURS 0,
  19. ebeln LIKE ekpo-ebeln,
  20. type like bapiret2-type,
  21. message LIKE bapiret2-message,
  22. old_po like ekpo-ebeln,
  23. END  OF it_msg1.
  24. <font color="#ff0000">DATA:it_poitem    TYPE bapimepoitem   OCCURS 0 WITH HEADER LINE.
  25. DATA:it_poitemx   TYPE bapimepoitemx  OCCURS 0 WITH HEADER LINE.
  26. DATA:it_pocondh   TYPE bapimepocondheader OCCURS 0 WITH HEADER LINE.
  27. DATA:it_pocondhx  TYPE bapimepocondheaderx OCCURS 0 WITH HEADER LINE.
  28. DATA:it_pocond    TYPE bapimepocond   OCCURS 0 WITH HEADER LINE.
  29. DATA:it_pocondx   TYPE bapimepocondx  OCCURS 0 WITH HEADER LINE.
  30. DATA:it_potexth   TYPE bapimepotextheader  OCCURS 0 WITH HEADER LINE.
  31. DATA:it_potexti   TYPE bapimepotext  OCCURS 0 WITH HEADER LINE.
  32. DATA:it_popartner TYPE bapiekkop  OCCURS 0 WITH HEADER LINE.
  33. DATA:it_extens    TYPE bapiparex  OCCURS 0 WITH HEADER LINE.    "Customer's Own Fields
  34. DATA:it_poaccount TYPE bapimepoaccount  OCCURS 0 WITH HEADER LINE.
  35. DATA:it_poaccountx TYPE bapimepoaccountx  OCCURS 0 WITH HEADER LINE.
  36. DATA:it_poche      TYPE bapimeposchedule OCCURS 0 WITH HEADER LINE.
  37. DATA:it_pochex     TYPE bapimeposchedulx OCCURS 0 WITH HEADER LINE.
  38. DATA:purchseorder TYPE BAPIMEPOHEADER-PO_NUMBER.</font>
  39. DATA:g_poitem TYPE ebelp.   "Item Number of Purchasing Document
  40. DATA:g_meng LIKE ekpo-menge.    "Purchase Order Quantity
  41. DATA:l_intern TYPE kcde_cells OCCURS 0 WITH HEADER LINE.
  42. DATA:len_str TYPE i,
  43. l_index TYPE i.
  44. DATA:BEGIN OF it_data OCCURS 0,
  45. *       doc_type(004),   </pre>
  46. <pre class="csharp" name="code">       po(010),  "PO NO
  47. material(018),
  48. vendor(010),
  49. invoice_no(15),  "Invoice Number(Header text)
  50. pmnttrms(004),   "Paymentterms
  51. quantity(017),
  52. doc_date(008),
  53. gr_to_date(008), "Delivery date
  54. shippingin(10),  "Ship Date(Header Text)
  55. eta_hk(10),      "Date of ETA HK(Header Text)
  56. trsp_metd(10),   "Transportion Method(Header Text)
  57. container_no(20),  "COntainer Number(Header Text)
  58. lc_number(20),   "LC Number(Header Text)
  59. load_date(10),   "Load Date(Header Text)
  60. arr_hk(10),      "Date of Arr. Date(Header Text)
  61. remark(20),      "Header remark(Header Text)
  62. currency(005),
  63. cond_pb00(038),  "Net price
  64. cond_p_unt(5),    "Price Unit
  65. END OF it_data.
  66. DATA:BEGIN OF it_head OCCURS 0,
  67. comp_code(4),    "Company Code
  68. doc_type(004),   "######
  69. po_number(010),
  70. po(010),
  71. vendor(010),     "######
  72. doc_date(008),   "####
  73. purch_org(004),  "####
  74. pur_group(003),  "####
  75. pmnttrms(004),   "####
  76. incoterms1(003), "######
  77. incoterms2(028), "######
  78. currency(005),   "####
  79. exch_rate(014),  "##
  80. text_pohzs(132), "Header Remark
  81. shippingin(132), "SHIPPING INSTRUCTION
  82. prppayment(132), "PAYMENT TERM FOR PRP
  83. delivery(132),   "DELIVERY
  84. attention(132),  "ATTENTION
  85. name_2(040),                                         "#####2
  86. name_3(040),                                         "#####3
  87. name_4(040),                                         "#####4
  88. street(040),     "##
  89. str_suppl2(040), "##4
  90. location(040),   "##5
  91. postl_cod1(010), "######
  92. country(003),    "####
  93. tel1_numbr(030), "##
  94. fax_number(030), "##
  95. billty(002),     "########
  96. billpo(010),     "######
  97. purcty(002),     "########
  98. purcpo(010),     "#####
  99. patety(002),     "########
  100. patepo(010),     "######
  101. shipty(002),     "########
  102. shippo(010),     "######
  103. COLLECT_NO(010),   "Collective Number
  104. END   OF it_head.
  105. DATA:BEGIN OF it_item OCCURS 0,
  106. po_number(010),  "
  107. po(010),
  108. acctasscat(001), "######
  109. item_cat(001),   "####
  110. material(018),   "######
  111. short_text(040), "####
  112. quantity(017),   "######
  113. po_unit(003),    "####
  114. gr_to_date(008), "####
  115. cond_pb00(038),  "Net Price
  116. cond_p_unt(005), "########
  117. cond_za00(038),  "UNZ#UTE######
  118. matl_group(009), "####
  119. plant(004),      "##
  120. over_dlv_tol(005),"########
  121. tax_code(002),    "##/######
  122. costcenter(010),  "####
  123. poit_text(132),   "PO####
  124. pobz_text(132),   "PO####
  125. valuepart1(240),  "Exfact Date
  126. valuepart2(240),  "Arr.HK Date
  127. END OF it_item.
  128. DATA:g_menge LIKE ekpo-netpr.
  129. ******************************************************************
  130. *   PARAMETERS & SELECTION-OPTIONS
  131. ******************************************************************
  132. SELECTION-SCREEN BEGIN OF BLOCK sel  WITH FRAME TITLE text-001.
  133. PARAMETERS:p_upload RADIOBUTTON GROUP radi,
  134. p_uptemp RADIOBUTTON GROUP radi.
  135. PARAMETERS:p_flag  AS CHECKBOX .
  136. SELECTION-SCREEN END OF BLOCK sel.
  137. SELECTION-SCREEN BEGIN OF BLOCK mod  WITH FRAME TITLE text-002.
  138. PARAMETERS:p_file LIKE  rlgrap-filename DEFAULT 'c:\podata',
  139. p_log  LIKE  rlgrap-filename DEFAULT 'c:\polog.xls'.
  140. SELECTION-SCREEN END OF BLOCK mod.
  141. START-OF-SELECTION.
  142. IF p_upload = 'X'.
  143. PERFORM upload_file.
  144. PERFORM upload_data.
  145. ENDIF.
  146. *&--------------------------------------------------------------------*
  147. *&      Form  upload_file
  148. *&--------------------------------------------------------------------*
  149. *       text
  150. *---------------------------------------------------------------------*
  151. FORM upload_file.
  152. TRANSLATE p_file TO UPPER CASE.
  153. len_str = STRLEN( p_file ).
  154. len_str = len_str - 4.
  155. IF p_file+len_str(4) <> '.XLS'.
  156. CONCATENATE p_file '.XLS' INTO p_file.
  157. ENDIF.
  158. CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
  159. EXPORTING
  160. filename                = p_file
  161. i_begin_col             = 1
  162. i_begin_row             = 2
  163. i_end_col               = 256
  164. i_end_row               = 65535
  165. TABLES
  166. intern                  = l_intern
  167. EXCEPTIONS
  168. inconsistent_parameters = 1
  169. upload_ole              = 2
  170. OTHERS                  = 3.
  171. IF sy-subrc <> 0.
  172. ENDIF.
  173. SORT l_intern BY row col.
  174. LOOP AT l_intern.
  175. MOVE l_intern-col TO l_index.
  176. ASSIGN COMPONENT l_index OF STRUCTURE it_data TO <fs></fs>.
  177. MOVE l_intern-value TO <fs></fs>.
  178. AT END OF row.
  179. APPEND it_data.
  180. CLEAR  it_data.
  181. ENDAT.
  182. ENDLOOP.
  183. ENDFORM.                    "UPLOAD_FILE
  184. *&---------------------------------------------------------------------*
  185. *&      Form  UPLOAD_DATA
  186. *&---------------------------------------------------------------------*
  187. FORM upload_data .
  188. CLEAR:it_head,it_item.
  189. LOOP AT it_data.
  190. MOVE-CORRESPONDING it_data TO it_head.
  191. it_head-COLLECT_NO = it_data-po.
  192. COLLECT it_head.
  193. MOVE-CORRESPONDING it_data TO it_item.
  194. APPEND  it_item.
  195. ENDLOOP.
  196. REFRESH it_msg.
  197. LOOP AT it_head.
  198. CLEAR: it_potexth,wa_pohead,wa_poheadx,wa_poaddrvendor.
  199. REFRESH:it_potexth,it_popartner.
  200. *Document Type
  201. wa_pohead-doc_type = 'NB'.
  202. wa_poheadx-doc_type = 'X'.
  203. *Vendor Number
  204. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  205. EXPORTING
  206. input  = it_head-vendor
  207. IMPORTING
  208. output = it_head-vendor.
  209. wa_pohead-vendor = it_head-vendor.
  210. wa_poheadx-vendor = 'X'.
  211. *Document Date
  212. wa_pohead-doc_date = it_head-doc_date.
  213. wa_poheadx-doc_date = 'X'.
  214. *Collective Number
  215. wa_pohead-COLLECT_NO = it_head-COLLECT_NO.
  216. wa_poheadx-COLLECT_NO = 'X'.
  217. *Company Code
  218. wa_pohead-comp_code = '8200'.
  219. wa_poheadx-comp_code = 'X'.
  220. *Purchase Organise
  221. wa_pohead-purch_org = '8200'.
  222. *Purchase Group
  223. wa_pohead-pur_group = '003'.
  224. wa_poheadx-pur_group = 'X'.
  225. *Payment term
  226. wa_pohead-pmnttrms = it_head-pmnttrms.
  227. wa_poheadx-pmnttrms = 'X'.
  228. *Currency
  229. wa_pohead-currency = it_head-currency.
  230. wa_poheadx-currency = 'X'.
  231. *Purchase Order Header Text
  232. it_potexth-text_line = it_data-remark.    "Header Remark(Header Text)
  233. it_potexth-po_number = it_head-po_number.
  234. it_potexth-text_id   = 'F01'.
  235. APPEND it_potexth.
  236. CLEAR it_potexth.
  237. *SHIPPING INSTRUCTION
  238. it_potexth-text_line = it_head-shippingin.  "Ship Date(Header Text)
  239. it_potexth-po_number = it_head-po_number.
  240. it_potexth-text_id   = 'F02'.
  241. APPEND it_potexth.
  242. CLEAR it_potexth.
  243. *PAYMENT TERM FOR PRP
  244. it_potexth-text_line = it_data-load_date.  "Load Date(Header Text)
  245. it_potexth-po_number = it_head-po_number.
  246. it_potexth-text_id   = 'F03'.
  247. APPEND it_potexth.
  248. CLEAR it_potexth.
  249. *Date of ETA HK
  250. it_potexth-text_line = it_data-eta_hk.    "Date of ETA HK
  251. it_potexth-po_number = it_head-po_number.
  252. it_potexth-text_id   = 'F04'.
  253. APPEND it_potexth.
  254. CLEAR it_potexth.
  255. *Date of Arr HK
  256. it_potexth-text_line = it_data-arr_hk.    "Date of Arr HK
  257. it_potexth-po_number = it_head-po_number.
  258. it_potexth-text_id   = 'F05'.
  259. APPEND it_potexth.
  260. CLEAR it_potexth.
  261. *Transpotion Method
  262. it_potexth-text_line = it_data-trsp_metd.
  263. it_potexth-po_number = it_head-po_number.
  264. it_potexth-text_id   = 'F06'.
  265. APPEND it_potexth.
  266. CLEAR it_potexth.
  267. *Container Number
  268. it_potexth-text_line = it_data-container_no.
  269. it_potexth-po_number = it_head-po_number.
  270. it_potexth-text_id   = 'F07'.
  271. APPEND it_potexth.
  272. CLEAR it_potexth.
  273. *LC Number
  274. it_potexth-text_line = it_data-lc_number.
  275. it_potexth-po_number = it_head-po_number.
  276. it_potexth-text_id   = 'F08'.
  277. APPEND it_potexth.
  278. CLEAR it_potexth.
  279. *Invoice Number
  280. it_potexth-text_line = it_data-invoice_no.
  281. it_potexth-po_number = it_head-po_number.
  282. it_potexth-text_id   = 'F09'.
  283. APPEND it_potexth.
  284. CLEAR it_potexth.
  285. *Purchase Order Item Information
  286. CLEAR g_poitem.
  287. REFRESH: it_poitemx,it_poitem,it_pocond,it_pocondx,
  288. it_poche,it_pochex .
  289. LOOP AT it_item.
  290. IF  it_item-po EQ it_head-po.
  291. CLEAR:it_poitem, it_poitemx.
  292. g_poitem = g_poitem + 10.
  293. it_poitem-po_item = g_poitem.
  294. it_poitemx-po_item = g_poitem.
  295. it_poitem-item_cat = it_item-item_cat.
  296. it_poitemx-item_cat = 'X'.
  297. it_poitemx-po_itemx = 'X'.
  298. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  299. EXPORTING
  300. input  = it_item-material
  301. IMPORTING
  302. output = it_item-material.
  303. it_poitem-material = it_item-material.
  304. it_poitemx-material = 'X'.
  305. IF it_item-short_text IS NOT INITIAL.
  306. it_poitem-short_text = it_item-short_text.
  307. it_poitemx-short_text = 'X'.
  308. ENDIF.
  309. CLEAR g_meng.
  310. g_meng = it_item-quantity.
  311. it_poitem-quantity = g_meng.
  312. it_poitemx-quantity = 'X'.
  313. it_poitem-po_unit =  it_item-po_unit.
  314. it_poitemx-po_unit =  'X'.
  315. CLEAR g_mtart.
  316. SELECT SINGLE mtart INTO g_mtart FROM mara
  317. WHERE matnr EQ it_item-material.
  318. IF g_mtart EQ 'ZNON'.
  319. it_poitem-acctasscat = 'Z'.
  320. it_poitemx-acctasscat = 'X'.
  321. ENDIF.
  322. CLEAR:  it_poche,it_pochex.
  323. it_poche-po_item   = g_poitem.
  324. it_pochex-po_item  = g_poitem.
  325. it_poche-sched_line   = g_poitem.
  326. it_pochex-sched_line  = g_poitem.
  327. it_poche-delivery_date  = it_item-gr_to_date.
  328. it_pochex-delivery_date  = 'X'.
  329. it_poche-quantity   = g_meng.
  330. it_pochex-quantity  = 'X'.
  331. it_pochex-po_itemx = 'X'.
  332. it_pochex-sched_linex = 'X'.
  333. APPEND: it_poche,it_pochex.
  334. it_poitem-plant = '8200'.
  335. it_poitemx-plant = 'X'.
  336. IF it_item-matl_group IS NOT INITIAL.
  337. it_poitem-matl_group = it_item-matl_group.
  338. it_poitemx-matl_group = 'X'.
  339. ENDIF.
  340. it_poitem-over_dlv_tol = it_item-over_dlv_tol.
  341. it_poitemx-over_dlv_tol = 'X'.
  342. it_poitem-tax_code = it_item-tax_code.
  343. it_poitemx-tax_code = 'X'.
  344. g_menge = it_item-cond_pb00.
  345. IF g_menge EQ  0.
  346. it_poitem-free_item = 'X'.
  347. it_poitemx-free_item = 'X'.
  348. ELSE.
  349. it_poitem-free_item = ''.
  350. it_poitemx-free_item = 'X'.
  351. ENDIF.
  352. it_poitem-matl_group = it_item-matl_group.
  353. it_poitemx-matl_group = 'X'.
  354. IT_POITEM-NET_PRICE = IT_ITEM-COND_PB00.
  355. IT_POITEMX-NET_PRICE = 'X'.
  356. it_poitem-price_unit = it_item-cond_p_unt.
  357. it_poitemx-price_unit = 'X'.
  358. APPEND:it_poitemx,it_poitem.
  359. *ConditionS
  360. CLEAR it_pocond.
  361. it_pocond-cond_type = 'PB00'.
  362. it_pocond-itm_number = it_poitem-po_item.
  363. it_pocond-cond_value = IT_ITEM-COND_PB00.
  364. it_pocond-cond_p_unt  =  it_item-cond_p_unt.
  365. it_pocond-currency    = it_head-currency.
  366. it_pocond-change_id   = 'U'.
  367. APPEND it_pocond.
  368. CLEAR it_pocondx.
  369. it_pocondx-cond_type = 'X'.
  370. it_pocondx-itm_number = it_poitem-po_item.
  371. it_pocondx-cond_value = 'X'.
  372. it_pocondx-cond_p_unt = 'X'.
  373. it_pocondx-currency    = 'X'.
  374. it_pocondx-change_id   = 'X'.
  375. APPEND it_pocondx.
  376. ENDIF.
  377. ENDLOOP.
  378. wa_testrun = p_flag.
  379. DELETE it_item WHERE  po EQ it_head-po.
  380. SELECT SINGLE ebeln INTO g_ebeln FROM ekko
  381. WHERE ebeln EQ wa_pohead-po_number.
  382. IF sy-subrc NE 0.
  383. <font color="#ff0000">      CALL FUNCTION 'BAPI_PO_CREATE1'
  384. EXPORTING
  385. poheader     = wa_pohead
  386. poheaderx    = wa_poheadx
  387. poaddrvendor = wa_poaddrvendor
  388. testrun      = wa_testrun
  389. IMPORTING
  390. EXPPURCHASEORDER        = purchseorder
  391. TABLES
  392. return       = it_return
  393. poitem       = it_poitem
  394. poitemx      = it_poitemx
  395. poschedule   = it_poche
  396. poschedulex  = it_pochex
  397. pocond       = it_pocond
  398. pocondx      = it_pocondx
  399. potextheader = it_potexth
  400. potextitem   = it_potexti
  401. popartner    = it_popartner.</font>
  402. <font color="#ff0000">CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
  403. WAIT UP TO 1 SECONDS.</font>
  404. REFRESH: it_poitem,it_poitemx,it_poche,it_pochex,
  405. it_pocond,it_pocondx,it_potexth,it_potexti,it_popartner.
  406. CLEAR:it_return,it_poitem,it_poitemx,it_poche,it_pochex,
  407. it_pocond,it_pocondx,it_potexth,it_potexti,it_popartner.
  408. DELETE it_item WHERE po EQ it_head-po.
  409. DELETE it_head WHERE po EQ it_head-po.
  410. *    LOOP AT it_return WHERE type EQ 'E'.
  411. LOOP AT it_return.
  412. MOVE-CORRESPONDING it_return TO it_msg1.
  413. *      it_msg1-ebeln = wa_pohead-po_number.
  414. it_msg1-ebeln = purchseorder.
  415. it_msg1-old_po = it_head-po.
  416. APPEND it_msg1.
  417. clear it_msg1.
  418. ENDLOOP.
  419. ENDIF.
  420. ENDLOOP.
  421. CALL FUNCTION 'WS_DOWNLOAD'
  422. EXPORTING
  423. filename                = p_log
  424. filetype                = 'DAT'
  425. mode                    = 'O'
  426. TABLES
  427. data_tab                = it_msg1
  428. EXCEPTIONS
  429. invalid_filesize        = 1
  430. invalid_table_width     = 2
  431. invalid_type            = 3
  432. no_batch                = 4
  433. unknown_error           = 5
  434. gui_refuse_filetransfer = 6
  435. OTHERS                  = 7.
  436. IF sy-subrc <> 0.
  437. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  438. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  439. ENDIF.
  440. ENDFORM.                    " UPLOAD_DATA
  441. </pre>
view plaincopy to clipboardprint?
  1. *&---------------------------------------------------------------------*  
  2. *& Report  ZCON0026  
  3. *&  
  4. *&---------------------------------------------------------------------*  
  5. *&  Author: Jun  
  6. *&  
  7. *&---------------------------------------------------------------------*  
  8.   
  9. REPORT  ZCON0026.  
  10.   
  11. FIELD-SYMBOLS : <fs></fs>.  
  12. <font color="#ff0000">DATA:wa_pohead  TYPE bapimepoheader.  
  13. DATA:wa_poheadx TYPE bapimepoheaderx.  
  14. DATA:wa_poaddrvendor TYPE bapimepoaddrvendor.  
  15. DATA:wa_testrun TYPE bapiflag-bapiflag.</font>  
  16. DATA:g_ebeln TYPE ekko-ebeln.   "Purchasing Document Header  
  17. DATA:g_mtart TYPE mtart.  
  18.   
  19. <font color="#ff0000">DATA:it_return    TYPE bapiret2       OCCURS 0 WITH HEADER LINE.  
  20. DATA:it_msg       TYPE bapiret2       OCCURS 0 WITH HEADER LINE.</font>  
  21. DATA:BEGIN OF it_msg1 OCCURS 0,  
  22.           ebeln LIKE ekpo-ebeln,  
  23.           type like bapiret2-type,  
  24.           message LIKE bapiret2-message,  
  25.           old_po like ekpo-ebeln,  
  26.      END  OF it_msg1.  
  27. <font color="#ff0000">DATA:it_poitem    TYPE bapimepoitem   OCCURS 0 WITH HEADER LINE.  
  28. DATA:it_poitemx   TYPE bapimepoitemx  OCCURS 0 WITH HEADER LINE.  
  29. DATA:it_pocondh   TYPE bapimepocondheader OCCURS 0 WITH HEADER LINE.  
  30. DATA:it_pocondhx  TYPE bapimepocondheaderx OCCURS 0 WITH HEADER LINE.  
  31. DATA:it_pocond    TYPE bapimepocond   OCCURS 0 WITH HEADER LINE.  
  32. DATA:it_pocondx   TYPE bapimepocondx  OCCURS 0 WITH HEADER LINE.  
  33. DATA:it_potexth   TYPE bapimepotextheader  OCCURS 0 WITH HEADER LINE.  
  34. DATA:it_potexti   TYPE bapimepotext  OCCURS 0 WITH HEADER LINE.  
  35. DATA:it_popartner TYPE bapiekkop  OCCURS 0 WITH HEADER LINE.  
  36. DATA:it_extens    TYPE bapiparex  OCCURS 0 WITH HEADER LINE.    "Customer's Own Fields  
  37. DATA:it_poaccount TYPE bapimepoaccount  OCCURS 0 WITH HEADER LINE.  
  38. DATA:it_poaccountx TYPE bapimepoaccountx  OCCURS 0 WITH HEADER LINE.  
  39. DATA:it_poche      TYPE bapimeposchedule OCCURS 0 WITH HEADER LINE.  
  40. DATA:it_pochex     TYPE bapimeposchedulx OCCURS 0 WITH HEADER LINE.  
  41. DATA:purchseorder TYPE BAPIMEPOHEADER-PO_NUMBER.</font>  
  42.   
  43. DATA:g_poitem TYPE ebelp.   "Item Number of Purchasing Document  
  44. DATA:g_meng LIKE ekpo-menge.    "Purchase Order Quantity  
  45. DATA:l_intern TYPE kcde_cells OCCURS 0 WITH HEADER LINE.  
  46. DATA:len_str TYPE i,  
  47.      l_index TYPE i.  
  48.   
  49. DATA:BEGIN OF it_data OCCURS 0,  
  50. *       doc_type(004),     
*&---------------------------------------------------------------------* *& Report  ZCON0026 *& *&---------------------------------------------------------------------* *&  Author: Jun *& *&---------------------------------------------------------------------*  REPORT  ZCON0026.  FIELD-SYMBOLS : .  DATA:g_ebeln TYPE ekko-ebeln.   "Purchasing Document Header DATA:g_mtart TYPE mtart.   DATA:BEGIN OF it_msg1 OCCURS 0,           ebeln LIKE ekpo-ebeln,           type like bapiret2-type,           message LIKE bapiret2-message,           old_po like ekpo-ebeln,      END  OF it_msg1.   DATA:g_poitem TYPE ebelp.   "Item Number of Purchasing Document DATA:g_meng LIKE ekpo-menge.    "Purchase Order Quantity DATA:l_intern TYPE kcde_cells OCCURS 0 WITH HEADER LINE. DATA:len_str TYPE i,      l_index TYPE i.  DATA:BEGIN OF it_data OCCURS 0, *       doc_type(004),   
view plaincopy to clipboardprint?
  1. po(010),  "PO NO
  2. material(018),
  3. vendor(010),
  4. invoice_no(15),  "Invoice Number(Header text)
  5. pmnttrms(004),   "Paymentterms
  6. quantity(017),
  7. doc_date(008),
  8. gr_to_date(008), "Delivery date
  9. shippingin(10),  "Ship Date(Header Text)
  10. eta_hk(10),      "Date of ETA HK(Header Text)
  11. trsp_metd(10),   "Transportion Method(Header Text)
  12. container_no(20),  "COntainer Number(Header Text)
  13. lc_number(20),   "LC Number(Header Text)
  14. load_date(10),   "Load Date(Header Text)
  15. arr_hk(10),      "Date of Arr. Date(Header Text)
  16. remark(20),      "Header remark(Header Text)
  17. currency(005),
  18. cond_pb00(038),  "Net price
  19. cond_p_unt(5),    "Price Unit
  20. END OF it_data.
  21. DATA:BEGIN OF it_head OCCURS 0,
  22. comp_code(4),    "Company Code
  23. doc_type(004),   "######
  24. po_number(010),
  25. po(010),
  26. vendor(010),     "######
  27. doc_date(008),   "####
  28. purch_org(004),  "####
  29. pur_group(003),  "####
  30. pmnttrms(004),   "####
  31. incoterms1(003), "######
  32. incoterms2(028), "######
  33. currency(005),   "####
  34. exch_rate(014),  "##
  35. text_pohzs(132), "Header Remark
  36. shippingin(132), "SHIPPING INSTRUCTION
  37. prppayment(132), "PAYMENT TERM FOR PRP
  38. delivery(132),   "DELIVERY
  39. attention(132),  "ATTENTION
  40. name_2(040),                                         "#####2
  41. name_3(040),                                         "#####3
  42. name_4(040),                                         "#####4
  43. street(040),     "##
  44. str_suppl2(040), "##4
  45. location(040),   "##5
  46. postl_cod1(010), "######
  47. country(003),    "####
  48. tel1_numbr(030), "##
  49. fax_number(030), "##
  50. billty(002),     "########
  51. billpo(010),     "######
  52. purcty(002),     "########
  53. purcpo(010),     "#####
  54. patety(002),     "########
  55. patepo(010),     "######
  56. shipty(002),     "########
  57. shippo(010),     "######
  58. COLLECT_NO(010),   "Collective Number
  59. END   OF it_head.
  60. DATA:BEGIN OF it_item OCCURS 0,
  61. po_number(010),  "
  62. po(010),
  63. acctasscat(001), "######
  64. item_cat(001),   "####
  65. material(018),   "######
  66. short_text(040), "####
  67. quantity(017),   "######
  68. po_unit(003),    "####
  69. gr_to_date(008), "####
  70. cond_pb00(038),  "Net Price
  71. cond_p_unt(005), "########
  72. cond_za00(038),  "UNZ#UTE######
  73. matl_group(009), "####
  74. plant(004),      "##
  75. over_dlv_tol(005),"########
  76. tax_code(002),    "##/######
  77. costcenter(010),  "####
  78. poit_text(132),   "PO####
  79. pobz_text(132),   "PO####
  80. valuepart1(240),  "Exfact Date
  81. valuepart2(240),  "Arr.HK Date
  82. END OF it_item.
  83. DATA:g_menge LIKE ekpo-netpr.
  84. ******************************************************************
  85. *   PARAMETERS & SELECTION-OPTIONS
  86. ******************************************************************
  87. SELECTION-SCREEN BEGIN OF BLOCK sel  WITH FRAME TITLE text-001.
  88. PARAMETERS:p_upload RADIOBUTTON GROUP radi,
  89. p_uptemp RADIOBUTTON GROUP radi.
  90. PARAMETERS:p_flag  AS CHECKBOX .
  91. SELECTION-SCREEN END OF BLOCK sel.
  92. SELECTION-SCREEN BEGIN OF BLOCK mod  WITH FRAME TITLE text-002.
  93. PARAMETERS:p_file LIKE  rlgrap-filename DEFAULT 'c:\podata',
  94. p_log  LIKE  rlgrap-filename DEFAULT 'c:\polog.xls'.
  95. SELECTION-SCREEN END OF BLOCK mod.
  96. START-OF-SELECTION.
  97. IF p_upload = 'X'.
  98. PERFORM upload_file.
  99. PERFORM upload_data.
  100. ENDIF.
  101. *&--------------------------------------------------------------------*
  102. *&      Form  upload_file
  103. *&--------------------------------------------------------------------*
  104. *       text
  105. *---------------------------------------------------------------------*
  106. FORM upload_file.
  107. TRANSLATE p_file TO UPPER CASE.
  108. len_str = STRLEN( p_file ).
  109. len_str = len_str - 4.
  110. IF p_file+len_str(4) <> '.XLS'.
  111. CONCATENATE p_file '.XLS' INTO p_file.
  112. ENDIF.
  113. CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
  114. EXPORTING
  115. filename                = p_file
  116. i_begin_col             = 1
  117. i_begin_row             = 2
  118. i_end_col               = 256
  119. i_end_row               = 65535
  120. TABLES
  121. intern                  = l_intern
  122. EXCEPTIONS
  123. inconsistent_parameters = 1
  124. upload_ole              = 2
  125. OTHERS                  = 3.
  126. IF sy-subrc <> 0.
  127. ENDIF.
  128. SORT l_intern BY row col.
  129. LOOP AT l_intern.
  130. MOVE l_intern-col TO l_index.
  131. ASSIGN COMPONENT l_index OF STRUCTURE it_data TO <fs></fs>.
  132. MOVE l_intern-value TO <fs></fs>.
  133. AT END OF row.
  134. APPEND it_data.
  135. CLEAR  it_data.
  136. ENDAT.
  137. ENDLOOP.
  138. ENDFORM.                    "UPLOAD_FILE
  139. *&---------------------------------------------------------------------*
  140. *&      Form  UPLOAD_DATA
  141. *&---------------------------------------------------------------------*
  142. FORM upload_data .
  143. CLEAR:it_head,it_item.
  144. LOOP AT it_data.
  145. MOVE-CORRESPONDING it_data TO it_head.
  146. it_head-COLLECT_NO = it_data-po.
  147. COLLECT it_head.
  148. MOVE-CORRESPONDING it_data TO it_item.
  149. APPEND  it_item.
  150. ENDLOOP.
  151. REFRESH it_msg.
  152. LOOP AT it_head.
  153. CLEAR: it_potexth,wa_pohead,wa_poheadx,wa_poaddrvendor.
  154. REFRESH:it_potexth,it_popartner.
  155. *Document Type
  156. wa_pohead-doc_type = 'NB'.
  157. wa_poheadx-doc_type = 'X'.
  158. *Vendor Number
  159. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  160. EXPORTING
  161. input  = it_head-vendor
  162. IMPORTING
  163. output = it_head-vendor.
  164. wa_pohead-vendor = it_head-vendor.
  165. wa_poheadx-vendor = 'X'.
  166. *Document Date
  167. wa_pohead-doc_date = it_head-doc_date.
  168. wa_poheadx-doc_date = 'X'.
  169. *Collective Number
  170. wa_pohead-COLLECT_NO = it_head-COLLECT_NO.
  171. wa_poheadx-COLLECT_NO = 'X'.
  172. *Company Code
  173. wa_pohead-comp_code = '8200'.
  174. wa_poheadx-comp_code = 'X'.
  175. *Purchase Organise
  176. wa_pohead-purch_org = '8200'.
  177. *Purchase Group
  178. wa_pohead-pur_group = '003'.
  179. wa_poheadx-pur_group = 'X'.
  180. *Payment term
  181. wa_pohead-pmnttrms = it_head-pmnttrms.
  182. wa_poheadx-pmnttrms = 'X'.
  183. *Currency
  184. wa_pohead-currency = it_head-currency.
  185. wa_poheadx-currency = 'X'.
  186. *Purchase Order Header Text
  187. it_potexth-text_line = it_data-remark.    "Header Remark(Header Text)
  188. it_potexth-po_number = it_head-po_number.
  189. it_potexth-text_id   = 'F01'.
  190. APPEND it_potexth.
  191. CLEAR it_potexth.
  192. *SHIPPING INSTRUCTION
  193. it_potexth-text_line = it_head-shippingin.  "Ship Date(Header Text)
  194. it_potexth-po_number = it_head-po_number.
  195. it_potexth-text_id   = 'F02'.
  196. APPEND it_potexth.
  197. CLEAR it_potexth.
  198. *PAYMENT TERM FOR PRP
  199. it_potexth-text_line = it_data-load_date.  "Load Date(Header Text)
  200. it_potexth-po_number = it_head-po_number.
  201. it_potexth-text_id   = 'F03'.
  202. APPEND it_potexth.
  203. CLEAR it_potexth.
  204. *Date of ETA HK
  205. it_potexth-text_line = it_data-eta_hk.    "Date of ETA HK
  206. it_potexth-po_number = it_head-po_number.
  207. it_potexth-text_id   = 'F04'.
  208. APPEND it_potexth.
  209. CLEAR it_potexth.
  210. *Date of Arr HK
  211. it_potexth-text_line = it_data-arr_hk.    "Date of Arr HK
  212. it_potexth-po_number = it_head-po_number.
  213. it_potexth-text_id   = 'F05'.
  214. APPEND it_potexth.
  215. CLEAR it_potexth.
  216. *Transpotion Method
  217. it_potexth-text_line = it_data-trsp_metd.
  218. it_potexth-po_number = it_head-po_number.
  219. it_potexth-text_id   = 'F06'.
  220. APPEND it_potexth.
  221. CLEAR it_potexth.
  222. *Container Number
  223. it_potexth-text_line = it_data-container_no.
  224. it_potexth-po_number = it_head-po_number.
  225. it_potexth-text_id   = 'F07'.
  226. APPEND it_potexth.
  227. CLEAR it_potexth.
  228. *LC Number
  229. it_potexth-text_line = it_data-lc_number.
  230. it_potexth-po_number = it_head-po_number.
  231. it_potexth-text_id   = 'F08'.
  232. APPEND it_potexth.
  233. CLEAR it_potexth.
  234. *Invoice Number
  235. it_potexth-text_line = it_data-invoice_no.
  236. it_potexth-po_number = it_head-po_number.
  237. it_potexth-text_id   = 'F09'.
  238. APPEND it_potexth.
  239. CLEAR it_potexth.
  240. *Purchase Order Item Information
  241. CLEAR g_poitem.
  242. REFRESH: it_poitemx,it_poitem,it_pocond,it_pocondx,
  243. it_poche,it_pochex .
  244. LOOP AT it_item.
  245. IF  it_item-po EQ it_head-po.
  246. CLEAR:it_poitem, it_poitemx.
  247. g_poitem = g_poitem + 10.
  248. it_poitem-po_item = g_poitem.
  249. it_poitemx-po_item = g_poitem.
  250. it_poitem-item_cat = it_item-item_cat.
  251. it_poitemx-item_cat = 'X'.
  252. it_poitemx-po_itemx = 'X'.
  253. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  254. EXPORTING
  255. input  = it_item-material
  256. IMPORTING
  257. output = it_item-material.
  258. it_poitem-material = it_item-material.
  259. it_poitemx-material = 'X'.
  260. IF it_item-short_text IS NOT INITIAL.
  261. it_poitem-short_text = it_item-short_text.
  262. it_poitemx-short_text = 'X'.
  263. ENDIF.
  264. CLEAR g_meng.
  265. g_meng = it_item-quantity.
  266. it_poitem-quantity = g_meng.
  267. it_poitemx-quantity = 'X'.
  268. it_poitem-po_unit =  it_item-po_unit.
  269. it_poitemx-po_unit =  'X'.
  270. CLEAR g_mtart.
  271. SELECT SINGLE mtart INTO g_mtart FROM mara
  272. WHERE matnr EQ it_item-material.
  273. IF g_mtart EQ 'ZNON'.
  274. it_poitem-acctasscat = 'Z'.
  275. it_poitemx-acctasscat = 'X'.
  276. ENDIF.
  277. CLEAR:  it_poche,it_pochex.
  278. it_poche-po_item   = g_poitem.
  279. it_pochex-po_item  = g_poitem.
  280. it_poche-sched_line   = g_poitem.
  281. it_pochex-sched_line  = g_poitem.
  282. it_poche-delivery_date  = it_item-gr_to_date.
  283. it_pochex-delivery_date  = 'X'.
  284. it_poche-quantity   = g_meng.
  285. it_pochex-quantity  = 'X'.
  286. it_pochex-po_itemx = 'X'.
  287. it_pochex-sched_linex = 'X'.
  288. APPEND: it_poche,it_pochex.
  289. it_poitem-plant = '8200'.
  290. it_poitemx-plant = 'X'.
  291. IF it_item-matl_group IS NOT INITIAL.
  292. it_poitem-matl_group = it_item-matl_group.
  293. it_poitemx-matl_group = 'X'.
  294. ENDIF.
  295. it_poitem-over_dlv_tol = it_item-over_dlv_tol.
  296. it_poitemx-over_dlv_tol = 'X'.
  297. it_poitem-tax_code = it_item-tax_code.
  298. it_poitemx-tax_code = 'X'.
  299. g_menge = it_item-cond_pb00.
  300. IF g_menge EQ  0.
  301. it_poitem-free_item = 'X'.
  302. it_poitemx-free_item = 'X'.
  303. ELSE.
  304. it_poitem-free_item = ''.
  305. it_poitemx-free_item = 'X'.
  306. ENDIF.
  307. it_poitem-matl_group = it_item-matl_group.
  308. it_poitemx-matl_group = 'X'.
  309. IT_POITEM-NET_PRICE = IT_ITEM-COND_PB00.
  310. IT_POITEMX-NET_PRICE = 'X'.
  311. it_poitem-price_unit = it_item-cond_p_unt.
  312. it_poitemx-price_unit = 'X'.
  313. APPEND:it_poitemx,it_poitem.
  314. *ConditionS
  315. CLEAR it_pocond.
  316. it_pocond-cond_type = 'PB00'.
  317. it_pocond-itm_number = it_poitem-po_item.
  318. it_pocond-cond_value = IT_ITEM-COND_PB00.
  319. it_pocond-cond_p_unt  =  it_item-cond_p_unt.
  320. it_pocond-currency    = it_head-currency.
  321. it_pocond-change_id   = 'U'.
  322. APPEND it_pocond.
  323. CLEAR it_pocondx.
  324. it_pocondx-cond_type = 'X'.
  325. it_pocondx-itm_number = it_poitem-po_item.
  326. it_pocondx-cond_value = 'X'.
  327. it_pocondx-cond_p_unt = 'X'.
  328. it_pocondx-currency    = 'X'.
  329. it_pocondx-change_id   = 'X'.
  330. APPEND it_pocondx.
  331. ENDIF.
  332. ENDLOOP.
  333. wa_testrun = p_flag.
  334. DELETE it_item WHERE  po EQ it_head-po.
  335. SELECT SINGLE ebeln INTO g_ebeln FROM ekko
  336. WHERE ebeln EQ wa_pohead-po_number.
  337. IF sy-subrc NE 0.
  338. <font color="#ff0000">      CALL FUNCTION 'BAPI_PO_CREATE1'
  339. EXPORTING
  340. poheader     = wa_pohead
  341. poheaderx    = wa_poheadx
  342. poaddrvendor = wa_poaddrvendor
  343. testrun      = wa_testrun
  344. IMPORTING
  345. EXPPURCHASEORDER        = purchseorder
  346. TABLES
  347. return       = it_return
  348. poitem       = it_poitem
  349. poitemx      = it_poitemx
  350. poschedule   = it_poche
  351. poschedulex  = it_pochex
  352. pocond       = it_pocond
  353. pocondx      = it_pocondx
  354. potextheader = it_potexth
  355. potextitem   = it_potexti
  356. popartner    = it_popartner.</font>
  357. <font color="#ff0000">CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
  358. WAIT UP TO 1 SECONDS.</font>
  359. REFRESH: it_poitem,it_poitemx,it_poche,it_pochex,
  360. it_pocond,it_pocondx,it_potexth,it_potexti,it_popartner.
  361. CLEAR:it_return,it_poitem,it_poitemx,it_poche,it_pochex,
  362. it_pocond,it_pocondx,it_potexth,it_potexti,it_popartner.
  363. DELETE it_item WHERE po EQ it_head-po.
  364. DELETE it_head WHERE po EQ it_head-po.
  365. *    LOOP AT it_return WHERE type EQ 'E'.
  366. LOOP AT it_return.
  367. MOVE-CORRESPONDING it_return TO it_msg1.
  368. *      it_msg1-ebeln = wa_pohead-po_number.
  369. it_msg1-ebeln = purchseorder.
  370. it_msg1-old_po = it_head-po.
  371. APPEND it_msg1.
  372. clear it_msg1.
  373. ENDLOOP.
  374. ENDIF.
  375. ENDLOOP.
  376. CALL FUNCTION 'WS_DOWNLOAD'
  377. EXPORTING
  378. filename                = p_log
  379. filetype                = 'DAT'
  380. mode                    = 'O'
  381. TABLES
  382. data_tab                = it_msg1
  383. EXCEPTIONS
  384. invalid_filesize        = 1
  385. invalid_table_width     = 2
  386. invalid_type            = 3
  387. no_batch                = 4
  388. unknown_error           = 5
  389. gui_refuse_filetransfer = 6
  390. OTHERS                  = 7.
  391. IF sy-subrc <> 0.
  392. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  393. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  394. ENDIF.
  395. ENDFORM.                    " UPLOAD_DATA
       po(010),  "PO NO        material(018),        vendor(010),        invoice_no(15),  "Invoice Number(Header text)        pmnttrms(004),   "Paymentterms        quantity(017),        doc_date(008),        gr_to_date(008), "Delivery date        shippingin(10),  "Ship Date(Header Text)        eta_hk(10),      "Date of ETA HK(Header Text)        trsp_metd(10),   "Transportion Method(Header Text)        container_no(20),  "COntainer Number(Header Text)        lc_number(20),   "LC Number(Header Text)        load_date(10),   "Load Date(Header Text)        arr_hk(10),      "Date of Arr. Date(Header Text)        remark(20),      "Header remark(Header Text)        currency(005),        cond_pb00(038),  "Net price        cond_p_unt(5),    "Price Unit  END OF it_data. DATA:BEGIN OF it_head OCCURS 0,        comp_code(4),    "Company Code        doc_type(004),   "######        po_number(010),        po(010),        vendor(010),     "######        doc_date(008),   "####        purch_org(004),  "####        pur_group(003),  "####        pmnttrms(004),   "####        incoterms1(003), "######        incoterms2(028), "######        currency(005),   "####        exch_rate(014),  "##        text_pohzs(132), "Header Remark        shippingin(132), "SHIPPING INSTRUCTION        prppayment(132), "PAYMENT TERM FOR PRP        delivery(132),   "DELIVERY        attention(132),  "ATTENTION        name_2(040),                                         "#####2        name_3(040),                                         "#####3        name_4(040),                                         "#####4        street(040),     "##        str_suppl2(040), "##4        location(040),   "##5        postl_cod1(010), "######        country(003),    "####        tel1_numbr(030), "##        fax_number(030), "##        billty(002),     "########        billpo(010),     "######        purcty(002),     "########        purcpo(010),     "#####        patety(002),     "########        patepo(010),     "######        shipty(002),     "########        shippo(010),     "######        COLLECT_NO(010),   "Collective Number      END   OF it_head. DATA:BEGIN OF it_item OCCURS 0,        po_number(010),  "        po(010),        acctasscat(001), "######        item_cat(001),   "####        material(018),   "######        short_text(040), "####        quantity(017),   "######        po_unit(003),    "####        gr_to_date(008), "####        cond_pb00(038),  "Net Price        cond_p_unt(005), "########        cond_za00(038),  "UNZ#UTE######        matl_group(009), "####        plant(004),      "##        over_dlv_tol(005),"########        tax_code(002),    "##/######        costcenter(010),  "####        poit_text(132),   "PO####        pobz_text(132),   "PO####        valuepart1(240),  "Exfact Date        valuepart2(240),  "Arr.HK Date      END OF it_item. DATA:g_menge LIKE ekpo-netpr. ****************************************************************** *   PARAMETERS & SELECTION-OPTIONS ****************************************************************** SELECTION-SCREEN BEGIN OF BLOCK sel  WITH FRAME TITLE text-001. PARAMETERS:p_upload RADIOBUTTON GROUP radi,            p_uptemp RADIOBUTTON GROUP radi. PARAMETERS:p_flag  AS CHECKBOX . SELECTION-SCREEN END OF BLOCK sel.  SELECTION-SCREEN BEGIN OF BLOCK mod  WITH FRAME TITLE text-002. PARAMETERS:p_file LIKE  rlgrap-filename DEFAULT 'c:\podata',            p_log  LIKE  rlgrap-filename DEFAULT 'c:\polog.xls'. SELECTION-SCREEN END OF BLOCK mod.  START-OF-SELECTION.   IF p_upload = 'X'.     PERFORM upload_file.     PERFORM upload_data.   ENDIF.   *&--------------------------------------------------------------------* *&      Form  upload_file *&--------------------------------------------------------------------* *       text *---------------------------------------------------------------------* FORM upload_file.    TRANSLATE p_file TO UPPER CASE.   len_str = STRLEN( p_file ).   len_str = len_str - 4.   IF p_file+len_str(4) <> '.XLS'.     CONCATENATE p_file '.XLS' INTO p_file.   ENDIF.   CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'     EXPORTING       filename                = p_file       i_begin_col             = 1       i_begin_row             = 2       i_end_col               = 256       i_end_row               = 65535     TABLES       intern                  = l_intern     EXCEPTIONS       inconsistent_parameters = 1       upload_ole              = 2       OTHERS                  = 3.   IF sy-subrc <> 0.   ENDIF.    SORT l_intern BY row col.   LOOP AT l_intern.     MOVE l_intern-col TO l_index.     ASSIGN COMPONENT l_index OF STRUCTURE it_data TO .     MOVE l_intern-value TO .     AT END OF row.       APPEND it_data.       CLEAR  it_data.     ENDAT.   ENDLOOP.  ENDFORM.                    "UPLOAD_FILE *&---------------------------------------------------------------------* *&      Form  UPLOAD_DATA *&---------------------------------------------------------------------* FORM upload_data .   CLEAR:it_head,it_item.   LOOP AT it_data.     MOVE-CORRESPONDING it_data TO it_head.     it_head-COLLECT_NO = it_data-po.     COLLECT it_head.     MOVE-CORRESPONDING it_data TO it_item.     APPEND  it_item.   ENDLOOP.   REFRESH it_msg.     LOOP AT it_head.     CLEAR: it_potexth,wa_pohead,wa_poheadx,wa_poaddrvendor.     REFRESH:it_potexth,it_popartner. *Document Type     wa_pohead-doc_type = 'NB'.     wa_poheadx-doc_type = 'X'.  *Vendor Number     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'       EXPORTING         input  = it_head-vendor       IMPORTING         output = it_head-vendor.     wa_pohead-vendor = it_head-vendor.     wa_poheadx-vendor = 'X'. *Document Date     wa_pohead-doc_date = it_head-doc_date.     wa_poheadx-doc_date = 'X'.  *Collective Number     wa_pohead-COLLECT_NO = it_head-COLLECT_NO.     wa_poheadx-COLLECT_NO = 'X'.  *Company Code       wa_pohead-comp_code = '8200'.       wa_poheadx-comp_code = 'X'.   *Purchase Organise       wa_pohead-purch_org = '8200'.  *Purchase Group       wa_pohead-pur_group = '003'.       wa_poheadx-pur_group = 'X'.  *Payment term       wa_pohead-pmnttrms = it_head-pmnttrms.       wa_poheadx-pmnttrms = 'X'.  *Currency     wa_pohead-currency = it_head-currency.     wa_poheadx-currency = 'X'.  *Purchase Order Header Text       it_potexth-text_line = it_data-remark.    "Header Remark(Header Text)       it_potexth-po_number = it_head-po_number.       it_potexth-text_id   = 'F01'.       APPEND it_potexth.       CLEAR it_potexth.  *SHIPPING INSTRUCTION     it_potexth-text_line = it_head-shippingin.  "Ship Date(Header Text)     it_potexth-po_number = it_head-po_number.     it_potexth-text_id   = 'F02'.     APPEND it_potexth.     CLEAR it_potexth. *PAYMENT TERM FOR PRP     it_potexth-text_line = it_data-load_date.  "Load Date(Header Text)     it_potexth-po_number = it_head-po_number.     it_potexth-text_id   = 'F03'.     APPEND it_potexth.     CLEAR it_potexth. *Date of ETA HK     it_potexth-text_line = it_data-eta_hk.    "Date of ETA HK     it_potexth-po_number = it_head-po_number.     it_potexth-text_id   = 'F04'.     APPEND it_potexth.     CLEAR it_potexth. *Date of Arr HK     it_potexth-text_line = it_data-arr_hk.    "Date of Arr HK     it_potexth-po_number = it_head-po_number.     it_potexth-text_id   = 'F05'.     APPEND it_potexth.     CLEAR it_potexth.  *Transpotion Method     it_potexth-text_line = it_data-trsp_metd.     it_potexth-po_number = it_head-po_number.     it_potexth-text_id   = 'F06'.     APPEND it_potexth.     CLEAR it_potexth.  *Container Number     it_potexth-text_line = it_data-container_no.     it_potexth-po_number = it_head-po_number.     it_potexth-text_id   = 'F07'.     APPEND it_potexth.     CLEAR it_potexth.  *LC Number     it_potexth-text_line = it_data-lc_number.     it_potexth-po_number = it_head-po_number.     it_potexth-text_id   = 'F08'.     APPEND it_potexth.     CLEAR it_potexth.  *Invoice Number     it_potexth-text_line = it_data-invoice_no.     it_potexth-po_number = it_head-po_number.     it_potexth-text_id   = 'F09'.     APPEND it_potexth.     CLEAR it_potexth.   *Purchase Order Item Information     CLEAR g_poitem.     REFRESH: it_poitemx,it_poitem,it_pocond,it_pocondx,              it_poche,it_pochex .      LOOP AT it_item.       IF  it_item-po EQ it_head-po.         CLEAR:it_poitem, it_poitemx.         g_poitem = g_poitem + 10.         it_poitem-po_item = g_poitem.         it_poitemx-po_item = g_poitem.         it_poitem-item_cat = it_item-item_cat.         it_poitemx-item_cat = 'X'.         it_poitemx-po_itemx = 'X'.         CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'           EXPORTING             input  = it_item-material           IMPORTING             output = it_item-material.          it_poitem-material = it_item-material.         it_poitemx-material = 'X'.         IF it_item-short_text IS NOT INITIAL.           it_poitem-short_text = it_item-short_text.           it_poitemx-short_text = 'X'.          ENDIF.          CLEAR g_meng.         g_meng = it_item-quantity.         it_poitem-quantity = g_meng.         it_poitemx-quantity = 'X'.         it_poitem-po_unit =  it_item-po_unit.         it_poitemx-po_unit =  'X'.          CLEAR g_mtart.         SELECT SINGLE mtart INTO g_mtart FROM mara                 WHERE matnr EQ it_item-material.         IF g_mtart EQ 'ZNON'.           it_poitem-acctasscat = 'Z'.           it_poitemx-acctasscat = 'X'.         ENDIF.           CLEAR:  it_poche,it_pochex.         it_poche-po_item   = g_poitem.         it_pochex-po_item  = g_poitem.         it_poche-sched_line   = g_poitem.         it_pochex-sched_line  = g_poitem.         it_poche-delivery_date  = it_item-gr_to_date.         it_pochex-delivery_date  = 'X'.          it_poche-quantity   = g_meng.         it_pochex-quantity  = 'X'.          it_pochex-po_itemx = 'X'.         it_pochex-sched_linex = 'X'.           APPEND: it_poche,it_pochex.          it_poitem-plant = '8200'.         it_poitemx-plant = 'X'.         IF it_item-matl_group IS NOT INITIAL.           it_poitem-matl_group = it_item-matl_group.           it_poitemx-matl_group = 'X'.         ENDIF.         it_poitem-over_dlv_tol = it_item-over_dlv_tol.         it_poitemx-over_dlv_tol = 'X'.         it_poitem-tax_code = it_item-tax_code.         it_poitemx-tax_code = 'X'.         g_menge = it_item-cond_pb00.          IF g_menge EQ  0.           it_poitem-free_item = 'X'.           it_poitemx-free_item = 'X'.         ELSE.           it_poitem-free_item = ''.           it_poitemx-free_item = 'X'.         ENDIF.          it_poitem-matl_group = it_item-matl_group.         it_poitemx-matl_group = 'X'.           IT_POITEM-NET_PRICE = IT_ITEM-COND_PB00.         IT_POITEMX-NET_PRICE = 'X'.         it_poitem-price_unit = it_item-cond_p_unt.         it_poitemx-price_unit = 'X'.         APPEND:it_poitemx,it_poitem.   *ConditionS         CLEAR it_pocond.         it_pocond-cond_type = 'PB00'.         it_pocond-itm_number = it_poitem-po_item.         it_pocond-cond_value = IT_ITEM-COND_PB00.         it_pocond-cond_p_unt  =  it_item-cond_p_unt.         it_pocond-currency    = it_head-currency.         it_pocond-change_id   = 'U'.         APPEND it_pocond.          CLEAR it_pocondx.         it_pocondx-cond_type = 'X'.         it_pocondx-itm_number = it_poitem-po_item.         it_pocondx-cond_value = 'X'.         it_pocondx-cond_p_unt = 'X'.         it_pocondx-currency    = 'X'.         it_pocondx-change_id   = 'X'.         APPEND it_pocondx.        ENDIF.     ENDLOOP.      wa_testrun = p_flag.     DELETE it_item WHERE  po EQ it_head-po.     SELECT SINGLE ebeln INTO g_ebeln FROM ekko         WHERE ebeln EQ wa_pohead-po_number.     IF sy-subrc NE 0.        REFRESH: it_poitem,it_poitemx,it_poche,it_pochex,              it_pocond,it_pocondx,it_potexth,it_potexti,it_popartner.     CLEAR:it_return,it_poitem,it_poitemx,it_poche,it_pochex,              it_pocond,it_pocondx,it_potexth,it_potexti,it_popartner.     DELETE it_item WHERE po EQ it_head-po.     DELETE it_head WHERE po EQ it_head-po. *    LOOP AT it_return WHERE type EQ 'E'.     LOOP AT it_return.       MOVE-CORRESPONDING it_return TO it_msg1. *      it_msg1-ebeln = wa_pohead-po_number.       it_msg1-ebeln = purchseorder.       it_msg1-old_po = it_head-po.       APPEND it_msg1.       clear it_msg1.     ENDLOOP.     ENDIF.    ENDLOOP.     CALL FUNCTION 'WS_DOWNLOAD'     EXPORTING       filename                = p_log       filetype                = 'DAT'       mode                    = 'O'     TABLES       data_tab                = it_msg1     EXCEPTIONS       invalid_filesize        = 1       invalid_table_width     = 2       invalid_type            = 3       no_batch                = 4       unknown_error           = 5       gui_refuse_filetransfer = 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.  ENDFORM.                    " UPLOAD_DATA 

四, 最后说的是使用ALE技术, 利用IDOC和BAPI实现数据传输功能。我在这里提供一个链接,这是郭裕老师的在线课程录像下载, 主要讲述的是ALE技术和MASTER DATA DISTRIBUTION技术:http://www.itpub.net/494989,1.html

转载于:https://www.cnblogs.com/levin/archive/2009/08/10/1543179.html

SAP BDC 技术的分类(转)相关推荐

  1. 通过一个具体的例子,讲解 SAP BDC 技术的使用步骤

    BDC 是 Batch Data Communication,批处理数据交互的英文缩写. 这种技术的理念其实不复杂,而且不少游戏玩家想必都已经接触过和 BDC 类似的工具,那就是按键精灵. 比如我们玩 ...

  2. 汪子熙的SAP技术文章分类合集

    截至2020年4月27日为止,汪子熙微信公众号总共发表了229篇SAP原创技术文章,分类合集如下: SAP前端开发技术合集 Jerry Wang的ABAP原创技术文章合集 SAP云平台技术文章合集 S ...

  3. SAP PM技术对象的功能

    SAP PM技术对象的功能 您可以对设备主记录和功能位置执行不同的功能. 数据传输 可以将主数据从一个功能位置传输到其他功能位置或功能位置和设备之间. 使用数据传输功能,您可以在分层结构中将数据维护在 ...

  4. SAP PM技术对象

    SAP PM技术对象 要有效管理组织中的SAP维护活动,您需要将现有的维护结构划分为技术对象.技术对象用于定义组织中存在的机器类型并使用对象特征,您可以进一步定义其他技术对象 要在系统中显示技术对象, ...

  5. BDC技术(一个例子)

    BDC技术 BDC(Batch Data Conversion):在SAP系统里,由于某种原因,可能需要重复输入数据,(数据不同,但是操作是相同的,典型的情形就是切换系统的时候,旧系统的数据需要导入S ...

  6. SAP系统的模块分类

    SAP系统的模块分类: SAP是世界最大的企业信息管理解决方案提供商,也是ERP产品的最大生产商.其全称是Systems Applications and Products in data proce ...

  7. SAP MM 物料主数据分类视图的数据会带入批次分类视图里?

    SAP MM 物料主数据分类视图的数据会带入批次分类视图里? 1,我们在物料主数据的分类视图里的023类型的分类里,维护了一个特性的值,比如'Potency in IU/MG' 这个特性的值为500. ...

  8. 大数据简介,技术体系分类整理

    简介:大数据是指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞察发现力和流程优化能力的海量.高增长率和多样化的信息资产.大数据技术则主要用来 ...

  9. 有感而发 - 日新月异的SAP开发技术

    Jerry 2006年参加SAP成都研究院校园招聘会时,曾经听在研究院里实习过一段时间的两位教研室同学介绍过,进入SAP之后,咱们大学学习和研究生阶段做项目用的C/C++就用不上了,得从头学习一门全新 ...

最新文章

  1. 使用git上传代码到github
  2. 北京清华长庚医院与数据院签约,医工结合促医疗大健康发展
  3. ACL2020 | 使用强化学习为机器翻译生成对抗样本
  4. 到今天了,今天又结束了
  5. 寻找调用DebugPort的函数
  6. TCP/IP总结(4)TCP之数据传输过程
  7. Android自动测试之MonkeyRunner之monkeyrunner
  8. Java 集合之自动打包和解包以及泛型
  9. 前端学习(1810):前端调试之css装饰cursor
  10. 利用VBA导出幻灯片为图片
  11. tmpwatch命令
  12. 我为什么离开德国顶级传统大厂IT部
  13. 高德地图上展示终端信息
  14. Linux磁盘设备文件(sda,sdb,sdc…)变化问题
  15. ajax send()的作用_AJAX(Asynchronous JavaScript And XML)
  16. java的IO总结(一)
  17. Unity Android 真机调试 + 夜神模拟器调试 + ADB Logcat
  18. 电脑连接不上手机和路由器热点解决办法
  19. CE自动汇编之AOB注入
  20. MongoDB安装(新版本保姆级教程)

热门文章

  1. 图解分布式架构的演进过程
  2. Integer判断相等,到底该用==还是equals
  3. 一致 Hash 算法
  4. SpringBoot启动过程详解
  5. SIP协议和压力测试, SIP callflow图形生成
  6. feature map 意义_FeatureMap Viewer以及中心化对统计分布变化的影响讨论
  7. pccs色卡_NCS色彩体系与PCCS色彩体系如何关联使用
  8. html四个标签,基本的 HTML 标签 - 四个实例
  9. 工信部通告:任何组织和机构不得继续实施“计算机信息系统集成企业资质认定”...
  10. 能效超标,11家数据中心被集中约谈学习!