ABAP读取Excel文件,转成对应格式内表

本文介绍了一种使用SAP自带的功能和增强方法来从Excel文件批量导入CRM客户数据的技术实现细节,包括如何解决ALSM_EXCEL_TO_INTERNAL_TABLE功能模块在处理大量数据时的限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

受启发于https://wiki.sdn.sap.com/wiki/display/Snippets/How%20to%20use%20%20FM%20'ALSM_EXCEL_TO_INTERNAL_TABLE'的帖

 

今天凿山折腾到3点才睡。。。这CRM客户表有51一个字段。。NND的,一个都不能错。

30号,元旦,Flyback!

 

SAP自带读取Excel的FM太弱了。。所以自己需要enhancement一下,

还剩一个问题需要注意,就是ALSMEX_TABLINE中的COL和ROW都是4字长的,也就是1-9999,也就是说:对应一个有9个字段的表只能存1111条记录,这。。。。所以需要自己copy一个新的structure,和ALSMEX_TABLINE同结构不同名的structure,但是在系统里可能会遇到权限问题,需要和basic沟通一下,

这个问题在http://blog.chinaunix.net/u1/40527/showart.php?id=1970184里被提及到,及时发现了,非常感谢!

 

对应code和导入模版需要的话可以Email:jpl12@163.com,欢迎交流!

 

*&---------------------------------------------------------------------*
*& Report  ZTEST_BAPI_BP_COMPANY
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST_BAPI_BP_COMPANY.

DATA: FNAME(128), FTYPE(3), FSIZE TYPE I.
TYPES: BEGIN OF LINE,


BU_PARTNER  TYPE STRING,
BU_TYPE  TYPE STRING,
BU_GROUP TYPE STRING,
BU_PARTNERROLECAT1 TYPE STRING," BUT000-PARTNER_GUID,
BU_PARTNERROLECAT2 TYPE STRING," TYPE BUT000-PARTNER_GUID,
AD_TITLETX TYPE STRING,
BU_NAMEOR1 TYPE STRING,
BU_NAMEOR2 TYPE STRING,
BU_SORT1 TYPE STRING,
AD_STREET TYPE STRING,
AD_HSNM1 TYPE STRING,
AD_STRSPP3 TYPE STRING,
AD_PSTCD1 TYPE STRING,
AD_CITY1 TYPE STRING,
AD_CITY2 TYPE STRING,
LAND1 TYPE STRING,
REGIO TYPE STRING ,
LZONE TYPE STRING,
AD_TZONE TYPE STRING,
BU_LANGU TYPE STRING,
AD_TLNMBR TYPE STRING,
AD_FXNMBR TYPE STRING,"
AD_SMTPADR TYPE STRING,
BU_ID_TYPE TYPE STRING,
BU_ID_NUMBER TYPE STRING,
BPTAXTYPE TYPE STRING,
BPTAXNUM TYPE STRING,
BU_NATURAL_PERSON TYPE STRING,
BUTX_TAX_CTY TYPE STRING,
BUTX_TAX_TYPE TYPE STRING,
BUTX_TAX_GROUP TYPE STRING,
BANKS TYPE STRING,
BANKK TYPE STRING ,
BANKN TYPE STRING,
BU_KOINH TYPE STRING,
CRMT_BU_ACCOUNT_GROUP TYPE STRING,
CRMT_SALES_ORG TYPE STRING,
CRMT_DISTRIBUTION_CHANNEL TYPE STRING,
CRMT_DIVISION TYPE STRING,
CRMT_INCOTERMS1 TYPE STRING,
CRMT_INCOTERMS2 TYPE STRING,

CRMT_SHIP_COND TYPE STRING,
CRMT_DLV_PRIO TYPE STRING,
CRMT_PART_DLV TYPE STRING,

CRMT_PART_DLV_ITM TYPE STRING,
CRMT_CUST_PRIC_PROC TYPE STRING,
CRMT_CURRENCY TYPE STRING,

CRMT_PMNTTRMS TYPE STRING,
CRMT_PRICE_GRP TYPE STRING,
CRMT_CUST_GROUP TYPE STRING,
CRM_ACCTGRPBP TYPE STRING,

CRMT_SALES_OFFICE TYPE STRING,
CRMT_SALES_GROUP TYPE STRING,

       END OF LINE.
TYPES  ITAB TYPE LINE OCCURS 10.

*
**------------------------------------parameters definition for bapi calling-------------------------*
*
*DATA:
*      BAPI_BP_DATA TYPE BAPIBUS1006_HEAD,"BUSINESSPARTNEREXTERN
*      BAPI_BP_CENTRAL_DATA LIKE BAPIBUS1006_CENTRAL,
*      BAPI_BP_CENTRAL_ORGAN_DATA LIKE BAPIBUS1006_CENTRAL_ORGAN,
*      BAPI_BP_ADDRESS_DATA LIKE BAPIBUS1006_ADDRESS,
*      BAPI_BP_FAX_DATA LIKE BAPIADFAX,
*      BAPI_BP_HEAD_DATA LIKE BAPIBUS1006_HEAD,
*      BAPI_BP_TEL_DATA LIKE BAPIADTEL,
*      BAPI_BP_TAX_DATA LIKE BAPIBUS1006TAX,
*      BAPI_BP_BANK_DATA LIKE BAPIBUS1006_BANKDETAIL,
*      BAPI_BP_SALEAREA_DATA LIKE BAPIBUS1006_SALES_AREA,
*      BAPI_BP_ORG_DATA LIKE BAPIBUS1006140_ORG,"BAPIBUS1006140_ORG
*      BAPI_BP_SHIPPING_DATA LIKE BAPIBUS1006020_SHIPPING,
*      BAPI_BP_PRICING_DATA LIKE BAPIBUS1006030_PRICING,
*      BAPI_BP_SALESCLASS_DATA LIKE BAPIBUS1006040_SALESCLASS,
*      BAPI_BP_SALESCLASSX_DATA LIKE BAPIBUS1006040_SALESCLASSX,
*      BAPI_BP_SALES_DATA LIKE BAPIBUS1006010_SALES,
*
*
*      BAPI_BP_ERROR_DATA  LIKE BAPI4001_1,
*      BPARTNER_ID TYPE BAPIBUS1006_HEAD-BPARTNER,
*
*      lt_return TYPE TABLE OF bapiret2,
*      ls_return TYPE bapiret2,
*      BP_ROLE1 TYPE BAPIBUS1006_HEAD-PARTNERROLE,
*      BP_ROLE2 TYPE BAPIBUS1006_HEAD-PARTNERROLE.
*
**----------------------------------------------------—————————————————————--------*
*


DATA: LIN TYPE LINE,
      TAB TYPE ITAB,
      TAB_CHECKED TYPE LINE.  "TABLE FOR TESTING

DATA: MSG_USER_RETURN(100)   VALUE  'MSG RETURN'.  "MSG RETURN FROM USER PROGRAM

*------DATA FOR LOG RECORDING
DATA : BEGIN OF IT_LOG OCCURS 0 ,
         LOG TYPE STRING ,
       END OF IT_LOG .
DATA : BEGIN OF IT_LOG_FINAL OCCURS 0 ,
         LOG TYPE STRING ,
       END OF IT_LOG_FINAL .
DATA: LOG_PATH TYPE STRING  VALUE   'D:/Com/玖龙纸业NineDragonPaper/主数据模拟导入Support/CRM/SAPLOG BP CTREATING.TXT'.
*
**------------------------------------LOCAL FIELS UPLOAD-------------------------------------*
**UPLOAD NEW USER DATA FROM LOCAL MACHINE
**---------------
*WRITE:/ '--------------------', / 'DATA UPLOADING.........',/ '--------------------' .
*CALL FUNCTION 'UPLOAD'
*  EXPORTING
*    CODEPAGE                = '8400'                        "0120 8400
*    FILENAME                = 'D:/Com/玖龙纸业NineDragonPaper/主数据模拟导入Support/CRM/UP_DATA.txt'
*    FILETYPE                = 'DAT'
*    ITEM                    = 'Read Test for Excel File'
*  IMPORTING
*    FILESIZE                = FSIZE
*    ACT_FILENAME            = FNAME
*    ACT_FILETYPE            = FTYPE
*  TABLES
*    DATA_TAB                = TAB"   DATA INTO INTAL TAB
*  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
*    NOT_SUPPORTED_BY_GUI    = 17
*    ERROR_NO_GUI            = 18
*    OTHERS                  = 19.


DATA :
      BPINFO_LINE TYPE LINE,
      FILE_PATH TYPE  RLGRAP-FILENAME,
      IT_FILE_LINE_TEMP  TYPE ALSMEX_TABLINE,
      IT_FILE_LINE_NOW  TYPE ALSMEX_TABLINE,
      IT_FILE_LINE_LAST  TYPE ALSMEX_TABLINE, "FOR MAKEING A JUDGEMENT BETWEEN DIFFERENT ROW
      IT_FILE  TYPE STANDARD TABLE OF ALSMEX_TABLINE   WITH HEADER LINE,
      TAB_UPLOAD  TYPE STANDARD TABLE OF LINE  WITH HEADER LINE.

 

*TYPES : BEGIN OF  SBU_UPLOAD ,
*  BU TYPE c,
*  BU_DESC TYPE c,
*  DELETE TYPE C,
*END OF SBU_UPLOAD .

*DATA TBU_UPLOAD  TYPE STANDARD TABLE OF SBU_UPLOAD .


 CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                = 'D:/Com/玖龙纸业NineDragonPaper/主数据模拟导入Support/CRM/DMS_CRM_V1.2.xls'
      I_BEGIN_COL             = '1'
      I_BEGIN_ROW             = '1'
      I_END_COL               = '51'
      I_END_ROW               = '12'
    TABLES
      INTERN                  = IT_FILE
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.
  IF SY-SUBRC NE SPACE.
*leave PROGRAM.
  ENDIF.


  LOOP AT IT_FILE INTO IT_FILE_LINE_NOW.

*IF IT_FILE_LINE_NOW-ROW NE '0000' AND IT_FILE_LINE_LAST-ROW NE '0000'.
**-------------------values input----------------------*
IF IT_FILE_LINE_LAST-ROW EQ IT_FILE_LINE_NOW-ROW."IF THE ELEMENTS ARE IN THE SAME ROW
*ELEMENT INPUT
    CASE IT_FILE_LINE_NOW-COL.
WHEN '0001'.
LIN-BU_PARTNER = IT_FILE_LINE_NOW-VALUE.
WHEN '0002'.
 LIN-BU_TYPE = IT_FILE_LINE_NOW-VALUE.
WHEN '0003'.
 LIN-BU_GROUP = IT_FILE_LINE_NOW-VALUE.
 WHEN '0004'.
 LIN-BU_PARTNERROLECAT1 = IT_FILE_LINE_NOW-VALUE.
WHEN '0005'.
LIN-BU_PARTNERROLECAT2 = IT_FILE_LINE_NOW-VALUE.
WHEN '0006'.
 LIN-AD_TITLETX = IT_FILE_LINE_NOW-VALUE.
 WHEN '0007'.
 LIN-BU_NAMEOR1 = IT_FILE_LINE_NOW-VALUE.
WHEN '0008'.
 LIN-BU_NAMEOR2 = IT_FILE_LINE_NOW-VALUE.
 WHEN '0009'.
 LIN-BU_SORT1 = IT_FILE_LINE_NOW-VALUE.
 WHEN '0010'.
 LIN-AD_STREET = IT_FILE_LINE_NOW-VALUE.
 WHEN '0011'.
 LIN-AD_HSNM1 = IT_FILE_LINE_NOW-VALUE.
 WHEN '0012'.
 LIN-AD_STRSPP3 = IT_FILE_LINE_NOW-VALUE.
 WHEN '0013'.
 LIN-AD_PSTCD1 = IT_FILE_LINE_NOW-VALUE.
 WHEN '0014'.
 LIN-AD_CITY1 = IT_FILE_LINE_NOW-VALUE.
 WHEN '0015'.
 LIN-AD_CITY2 = IT_FILE_LINE_NOW-VALUE.
 WHEN '0016'.
 LIN-LAND1 = IT_FILE_LINE_NOW-VALUE.
 WHEN '0017'.
 LIN-REGIO = IT_FILE_LINE_NOW-VALUE.
 WHEN '0018'.
  LIN-LZONE = IT_FILE_LINE_NOW-VALUE.
 WHEN '0019'.
 LIN-AD_TZONE = IT_FILE_LINE_NOW-VALUE.
 WHEN '0020'.
 LIN-BU_LANGU = IT_FILE_LINE_NOW-VALUE ."20
 WHEN '0021'.
 LIN-AD_TLNMBR = IT_FILE_LINE_NOW-VALUE.
 WHEN '0022'.
 LIN-AD_FXNMBR = IT_FILE_LINE_NOW-VALUE.
 WHEN '0023'.
 LIN-AD_SMTPADR = IT_FILE_LINE_NOW-VALUE.
 WHEN '0024'.
LIN-BU_ID_TYPE = IT_FILE_LINE_NOW-VALUE.
 WHEN '0025'.
 LIN-BU_ID_NUMBER = IT_FILE_LINE_NOW-VALUE.
 WHEN '0026'.
 LIN-BPTAXTYPE = IT_FILE_LINE_NOW-VALUE.
 WHEN '0027'.
 LIN-BPTAXNUM = IT_FILE_LINE_NOW-VALUE."27
 WHEN '0028'.
LIN-BUTX_TAX_CTY = IT_FILE_LINE_NOW-VALUE.
 WHEN '0029'.
LIN-BUTX_TAX_TYPE  = IT_FILE_LINE_NOW-VALUE.
 WHEN '0030'.
LIN-BUTX_TAX_GROUP = IT_FILE_LINE_NOW-VALUE."30
 WHEN '0031'.
 LIN-BANKS = IT_FILE_LINE_NOW-VALUE."CN" DEFAULT
 WHEN '0032'.
 LIN-BANKK = IT_FILE_LINE_NOW-VALUE.
 WHEN '0033'.
 LIN-BANKN = IT_FILE_LINE_NOW-VALUE.
 WHEN '0034'.
 LIN-BU_KOINH = IT_FILE_LINE_NOW-VALUE.
 WHEN '0035'.
 LIN-CRMT_BU_ACCOUNT_GROUP = IT_FILE_LINE_NOW-VALUE .
 WHEN '0036'.
 LIN-CRMT_SALES_ORG = IT_FILE_LINE_NOW-VALUE .
 WHEN '0037'.
  LIN-CRMT_DISTRIBUTION_CHANNEL = IT_FILE_LINE_NOW-VALUE .
 WHEN '0038'.
 LIN-CRMT_DIVISION = IT_FILE_LINE_NOW-VALUE .
 WHEN '0039'.
 LIN-CRMT_INCOTERMS1 = IT_FILE_LINE_NOW-VALUE .
 WHEN '0040'.
 LIN-CRMT_INCOTERMS2  = IT_FILE_LINE_NOW-VALUE."40
 WHEN '0041'.
 LIN-CRMT_SHIP_COND = IT_FILE_LINE_NOW-VALUE .
 WHEN '0042'.
  LIN-CRMT_DLV_PRIO  = IT_FILE_LINE_NOW-VALUE.
 WHEN '0043'.
 LIN-CRMT_PART_DLV  = IT_FILE_LINE_NOW-VALUE.
 WHEN '0044'.
 LIN-CRMT_CUST_PRIC_PROC = IT_FILE_LINE_NOW-VALUE  .
 WHEN '0045'.
  LIN-CRMT_CURRENCY  = IT_FILE_LINE_NOW-VALUE.
 WHEN '0046'.
 LIN-CRMT_PMNTTRMS  = IT_FILE_LINE_NOW-VALUE .
 WHEN '0047'.
 LIN-CRMT_PRICE_GRP = IT_FILE_LINE_NOW-VALUE .
 WHEN '0048'.
 LIN-CRMT_CUST_GROUP = IT_FILE_LINE_NOW-VALUE.
 WHEN '0049'.
 LIN-CRM_ACCTGRPBP  = IT_FILE_LINE_NOW-VALUE.
 WHEN '0050'.
 LIN-CRMT_SALES_OFFICE  = IT_FILE_LINE_NOW-VALUE.
 WHEN '0051'.
 LIN-CRMT_SALES_GROUP  = IT_FILE_LINE_NOW-VALUE.

    ENDCASE.
ELSE.
APPEND LIN  TO TAB_UPLOAD .
   ENDIF.""IF THE ELEMENTS ARE IN THE SAME ROW

IT_FILE_LINE_LAST = IT_FILE_LINE_NOW.


*ENDIF. "FOR "IF IT_FILE_LINE_NOW-ROW NE '' AND IT_FILE_LINE_LAST-ROW NE ''."

 ENDLOOP.

WRITE:''.

 

*结果可以在TAB_UPLOAD 内表中看到

*
*IF SY-SUBRC <> 0.
**      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
**             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*
*  CONCATENATE IT_LOG-LOG 'EXCEPYIONS:' SY-UNAME '   ' SY-DATUM ' ' SY-UZEIT ' ' SY-TCODE ' '  FNAME 'MSGID:' SY-MSGID 'MSGTYPE:' SY-MSGTY 'MSGNO:' SY-MSGNO
*  'MSGTXT:' SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4  INTO IT_LOG-LOG.
**            APPEND IT_LOG.
**--------------LOG APPEND--------------
*  APPEND IT_LOG.
*  APPEND LINES OF IT_LOG TO IT_LOG_FINAL.
*  CLEAR IT_LOG.
*  REFRESH IT_LOG.
*
*  CALL FUNCTION 'GUI_DOWNLOAD'
*    EXPORTING
*      FILENAME = LOG_PATH
*      WRITE_LF = 'X'
*      FILETYPE = 'ASC'
*    TABLES
*      DATA_TAB = IT_LOG_FINAL      "I_OUTTAB
*    EXCEPTIONS
*      OTHERS   = 4.
**--------------------------------
*
*ELSE.
*  CONCATENATE IT_LOG-LOG ' SUCCESS: ' SY-UNAME '   ' SY-DATUM ' ' SY-UZEIT ' ' SY-TCODE '' INTO IT_LOG-LOG.
*  CONCATENATE IT_LOG-LOG  FNAME  ' DATA FILE UPLOAD SUCCEED ! ' INTO  IT_LOG-LOG.
**--------------------------------
*  APPEND IT_LOG.
*
*ENDIF.
*

 

 

 

 

 


********************************************
*********************************************
*********************************************
*
**------------------------------------LOCAL FIELS UPLOAD FINSHED----------------------------*
*LOOP AT TAB INTO LIN.
*
**WRITE:/
**'LIN-BU_PARTNER = ' , LIN-BU_PARTNER,/
**'LIN-BU_TYPE  BU_GROUP = ' ,LIN-BU_TYPE,/
**'LIN-BU_PARTNERROLECAT = ',LIN-BU_PARTNERROLECAT1,/
**'LIN-AD_TITLETX = ',LIN-AD_TITLETX.
*
**------------------------------------BP COMPANY CREATING-----------------------------------*
*
***-------------------values input----------------------*
*
*
**BAPIBUS1006_HEAD-BPARTNER
*BAPI_BP_DATA-PARTN_CAT = LIN-BU_TYPE .
*BAPI_BP_DATA-PARTN_GRP = LIN-BU_GROUP.
*BAPI_BP_DATA-PARTNERROLE = LIN-BU_PARTNERROLECAT1.
*
**BP_ROLE1 = LIN-BU_PARTNERROLECAT1.
**BP_ROLE2 = LIN-BU_PARTNERROLECAT2.
*
*BAPI_BP_DATA-PARTN_CAT = LIN-BU_TYPE.
*
*BAPI_BP_CENTRAL_DATA-TITLE_KEY = LIN-AD_TITLETX.
*BAPI_BP_CENTRAL_ORGAN_DATA-NAME1 = LIN-BU_NAMEOR1.
*BAPI_BP_CENTRAL_ORGAN_DATA-NAME2 = LIN-BU_NAMEOR2.
*BAPI_BP_CENTRAL_DATA-SEARCHTERM1 = LIN-BU_SORT1.
*BAPI_BP_ADDRESS_DATA-STREET = LIN-AD_STREET.
*BAPI_BP_ADDRESS_DATA-HOUSE_NO = LIN-AD_HSNM1.
*BAPI_BP_ADDRESS_DATA-STR_SUPPL3 = LIN-AD_STRSPP3.
*BAPI_BP_ADDRESS_DATA-POSTL_COD2 = LIN-AD_PSTCD1.
*BAPI_BP_ADDRESS_DATA-CITY = LIN-AD_CITY1.
*BAPI_BP_ADDRESS_DATA-DISTRICT = LIN-AD_CITY2.
*BAPI_BP_ADDRESS_DATA-COUNTRY = LIN-LAND1.
*BAPI_BP_ADDRESS_DATA-REGION = LIN-REGIO.
*BAPI_BP_ADDRESS_DATA-TRANSPZONE = LIN-LZONE.
*BAPI_BP_ADDRESS_DATA-TIME_ZONE = LIN-AD_TZONE.
*BAPI_BP_ADDRESS_DATA-LANGU = LIN-BU_LANGU .
*
*BAPI_BP_ADDRESS_DATA-PO_BOX = '12345'.
*
*BAPI_BP_TEL_DATA-TELEPHONE = LIN-AD_TLNMBR.
*BAPI_BP_FAX_DATA-FAX = LIN-AD_FXNMBR.
*BAPI_BP_ADDRESS_DATA-AD_SMTPADR =  LIN-AD_SMTPADR.
*
**LIN-BU_ID_TYPE = 'CRM001'.
*BAPI_BP_HEAD_DATA-EXTERN_NO = LIN-BU_ID_NUMBER.
*
*BAPI_BP_TAX_DATA-TAXTYPE = LIN-BPTAXNUMTYPE.
*BAPI_BP_TAX_DATA-TAXNUMBER = LIN-BPTAXNUM.
*
**LIN-BU_NATURAL_PERSON = 'X'.
**LIN-BUTX_TAX_CTY = 'CN'.
**LIN-BUTX_TAX_TYPE = 'MWST'.
**LIN-BUTX_TAX_GROUP = 'FULL'.
*
*BAPI_BP_BANK_DATA-BANK_CTRY = LIN-BANKS."CN" DEFAULT
*BAPI_BP_BANK_DATA-BANK_KEY = LIN-BANKK.
*BAPI_BP_BANK_DATA-BANK_ACCT = LIN-BANKN.
*BAPI_BP_BANK_DATA-ACCOUNTHOLDER = LIN-BU_KOINH.
*
*BAPI_BP_SALESCLASS_DATA-ACCOUNT_GROUP = LIN-CRMT_BU_ACCOUNT_GROUP .
*
*BAPI_BP_SALEAREA_DATA-SALES_ORGANIZATION = LIN-CRMT_SALES_ORG .
*BAPI_BP_SALEAREA_DATA-DISTRIBUTION_CHANNEL = LIN-CRMT_DISTRIBUTION_CHANNEL .
*BAPI_BP_SALEAREA_DATA-DIVISION =  LIN-CRMT_DIVISION .
*
*BAPI_BP_SHIPPING_DATA-INCOTERMS1 = LIN-CRMT_INCOTERMS1 .
*BAPI_BP_SHIPPING_DATA-INCOTERMS2 = LIN-CRMT_INCOTERMS2 .
*BAPI_BP_SHIPPING_DATA-SHIPPING_COND = LIN-CRMT_SHIP_COND .
*BAPI_BP_SHIPPING_DATA-DLV_PRIORITY = LIN-CRMT_DLV_PRIO .
*BAPI_BP_SHIPPING_DATA-PARTIAL_DLV = LIN-CRMT_PART_DLV .
**BAPI_BP_SHIPPING_DATA-PART_DLV_ITM = LIN-CRMT_PART_DLV_ITM .
*
*BAPI_BP_PRICING_DATA-CUST_PRIC_PROC = LIN-CRMT_CUST_PRIC_PROC  .
*BAPI_BP_PRICING_DATA-CURRENCY = LIN-CRMT_CURRENCY .
*BAPI_BP_PRICING_DATA-PAYMENT_TERMS = LIN-CRMT_PMNTTRMS  .
*BAPI_BP_PRICING_DATA-PRICE_GROUP = LIN-CRMT_PRICE_GRP .
*BAPI_BP_SHIPPING_DATA-CUSTOMER_GROUP = LIN-CRMT_CUST_GROUP.
*BAPI_BP_PRICING_DATA-ACCOUNT_ASGNGRP = LIN-CRM_ACCTGRPBP .
*
*BAPI_BP_ORG_DATA-SALES_OFFICE = LIN-CRMT_SALES_OFFICE .
*BAPI_BP_ORG_DATA-SALES_GROUP = LIN-CRMT_SALES_GROUP .
*
*
***/1/-------------------NEW BP :ROLE 000000----------------------*
**BAPI call
*CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
*EXPORTING
**  businesspartnerextern = ''
*  partnercategory =  BAPI_BP_DATA-PARTN_CAT
*  partnergroup = BAPI_BP_DATA-PARTN_GRP
*  centraldata = BAPI_BP_CENTRAL_DATA
**  centraldataperson
*  centraldataorganization = BAPI_BP_CENTRAL_ORGAN_DATA
**  centraldatagroup
*  addressdata = BAPI_BP_ADDRESS_DATA
**  duplicate_message_type
**  accept_error =  BAPI_BP_ERROR_DATA-ACCEPT_ERR
*IMPORTING
*  BUSINESSPARTNER = BAPI_BP_DATA-BPARTNER"BAPI_BP_ERROR_DATA-"LIN-BU_PARTNER
*TABLES
*  RETURN = lT_return.
*
*CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*  EXPORTING
*    wait = 'X'
*IMPORTING
*  RETURN = ls_return.
*
**ROLE_EXISTENCE_CHECK*
*CALL FUNCTION 'BAPI_BUPA_ROLE_EXISTENCE_CHECK'
*  EXPORTING
*    BUSINESSPARTNER = BAPI_BP_DATA-BPARTNER
*    BUSINESSPARTNERROLE = BAPI_BP_DATA-PARTNERROLE
*TABLES
*  RETURN = lT_return.
*
*IF SY-SUBRC EQ 0.
**LOOP AT lt_return INTO ls_return WHERE type EQ 'S'.
*  WRITE:/' BP ',BAPI_BP_DATA-BPARTNER,' ROLE : ',LIN-BU_PARTNERROLECAT1,'CREATING SUCCESS! '.
**ENDLOOP.
*  CONCATENATE ' BP ' BAPI_BP_DATA-BPARTNER ' ROLE : ' LIN-BU_PARTNERROLECAT1 'CREATING SUCCESS! ' INTO IT_LOG-LOG.
*  APPEND IT_LOG.
*ENDIF.
*
***/2/-------------------BP ROLE CRM000 ADD----------------------*
**BAPI_BP_DATA-BPARTNER = LIN-BU_PARTNER.
*BAPI_BP_DATA-PARTNERROLE = LIN-BU_PARTNERROLECAT2."ROLE 2 WAS INPUTED
*
*CALL FUNCTION 'BAPI_BUPA_ROLE_ADD'
*  EXPORTING
*    BUSINESSPARTNER = BAPI_BP_DATA-BPARTNER
*    BUSINESSPARTNERROLE = BAPI_BP_DATA-PARTNERROLE
*TABLES
*  RETURN = lT_return.
*
*CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*  EXPORTING
*    wait = 'X'
*IMPORTING
*  RETURN = ls_return.
*
**ROLE_EXISTENCE_CHECK*
*CALL FUNCTION 'BAPI_BUPA_ROLE_EXISTENCE_CHECK'
*  EXPORTING
*    BUSINESSPARTNER = BAPI_BP_DATA-BPARTNER
*    BUSINESSPARTNERROLE = BAPI_BP_DATA-PARTNERROLE
*TABLES
*  RETURN = lT_return.
*
*IF SY-SUBRC EQ 0.
**LOOP AT lt_return INTO ls_return WHERE type EQ 'S'.
*  WRITE:/' BP ',BAPI_BP_DATA-BPARTNER,' ROLE : ',LIN-BU_PARTNERROLECAT2,'CREATING SUCCESS! '.
**ENDLOOP.
*  CONCATENATE ' BP   ' BAPI_BP_DATA-BPARTNER ' ROLE : ' LIN-BU_PARTNERROLECAT2 'CREATING SUCCESS! ' INTO IT_LOG-LOG.
*  APPEND IT_LOG.
*ENDIF.
*
***/3/-------------------BP ADDRESS ADD----------------------*
**BAPI_BP_DATA-BPARTNER = LIN-BU_PARTNER.
**BAPI_BP_DATA-PARTNERROLE = LIN-BU_PARTNERROLECAT2.
*
*CALL FUNCTION 'BAPI_BUPA_ADDRESS_ADD'
*  EXPORTING
*    BUSINESSPARTNER = BAPI_BP_DATA-BPARTNER
*    ADDRESSDATA = BAPI_BP_ADDRESS_DATA
*TABLES
*  RETURN = lT_return.
*
*CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*  EXPORTING
*    wait = 'X'
*IMPORTING
*  RETURN = ls_return.
*
*IF SY-SUBRC EQ 0.
**LOOP AT lt_return INTO ls_return WHERE type EQ 'S'.
*  WRITE:/' BP ',BAPI_BP_DATA-BPARTNER,' ADDRESS ADDING SUCCESS! '.
**ENDLOOP.
*  CONCATENATE ' BP   ' BAPI_BP_DATA-BPARTNER ' ADDRESS ADDING SUCCESS! ' INTO IT_LOG-LOG.
*  APPEND IT_LOG.
*ENDIF.
*
***/4/-------------------BP BANKDETAIL ADD----------------------*
**BAPI_BP_DATA-BPARTNER = LIN-BU_PARTNER.
**BAPI_BP_DATA-PARTNERROLE = LIN-BU_PARTNERROLECAT2.
*
*CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_ADD'
*  EXPORTING
*    BUSINESSPARTNER = BAPI_BP_DATA-BPARTNER
*    BANKDETAILDATA = BAPI_BP_BANK_DATA
*TABLES
*  RETURN = lT_return.
*
*CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*  EXPORTING
*    wait = 'X'
*IMPORTING
*  RETURN = ls_return.
*
*IF SY-SUBRC EQ 0.
**LOOP AT lt_return INTO ls_return WHERE type EQ 'S'.
*  WRITE:/' BP ',BAPI_BP_DATA-BPARTNER,' BANKDETAIL ADDING SUCCESS! '.
**ENDLOOP.
*  CONCATENATE ' BP   ' BAPI_BP_DATA-BPARTNER ' BANKDETAIL ADDING SUCCESS! ' INTO IT_LOG-LOG.
*  APPEND IT_LOG.
*ENDIF.
*
***/5/-------------------BP TAX  ADD----------------------*
*CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
*  EXPORTING
*    BUSINESSPARTNER = BAPI_BP_DATA-BPARTNER
*    TAXTYPE = BAPI_BP_TAX_DATA-TAXTYPE
*    TAXNUMBER = BAPI_BP_TAX_DATA-TAXNUMBER
*TABLES
*  RETURN = lT_return.
*
*CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*  EXPORTING
*    wait = 'X'
*IMPORTING
*  RETURN = ls_return.
*
*IF SY-SUBRC EQ 0.
*  WRITE:/' BP ',BAPI_BP_DATA-BPARTNER,' TAX ADDING SUCCESS! '.
*  CONCATENATE ' BP   ' BAPI_BP_DATA-BPARTNER ' TAX ADDING SUCCESS! ' INTO IT_LOG-LOG.
*  APPEND IT_LOG.
*ENDIF.
*
**BAPI_BUPA_FRG0040_CREATE
***/5/-------------------BP Sales Classification ADD----------------------*
*CALL FUNCTION 'BAPI_BUPA_FRG0040_CREATE'
*  EXPORTING
*    BUSINESSPARTNER = BAPI_BP_DATA-BPARTNER
*    DATA = BAPI_BP_SALESCLASS_DATA
**    DATAX = BAPI_BP_SALESCLASSX_DATA
*TABLES
*  RETURN = lT_return.
*
*CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*  EXPORTING
*    wait = 'X'
*IMPORTING
*  RETURN = ls_return.
*
*IF SY-SUBRC EQ 0.
*  WRITE:/' BP ',BAPI_BP_DATA-BPARTNER,' Sales Classification SUCCESS! '.
*  CONCATENATE ' BP   ' BAPI_BP_DATA-BPARTNER ' Sales Classification SUCCESS! ' INTO IT_LOG-LOG.
*  APPEND IT_LOG.
*ENDIF.
*
*
***/6/-------------------BP sale area data ADD----------------------*
**---NEW ORG----*
**NEW SALE OFFICE
**NEW SALE GROUP
**NEW SALE DIETRICT
*
*CALL FUNCTION 'BAPI_BUPA_FRG0010_ADD'
*  EXPORTING
*    BUSINESSPARTNER = BAPI_BP_DATA-BPARTNER
*    SALES_AREA = BAPI_BP_SALEAREA_DATA
*    DATA = BAPI_BP_SALES_DATA
*TABLES
*  RETURN = lT_return.
*
*CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*  EXPORTING
*    wait = 'X'
*IMPORTING
*  RETURN = ls_return.
*
**--------------ATTENTION-------------*
**SUBMIT HRBCI_ATTRIBUTES_BUFFER_UPDATE.
**HRBCI_ATTRIBUTES_BUFFER_UPDATE
**--------------ATTENTION-------------*
*
*IF SY-SUBRC EQ 0.
*  WRITE:/' BP ',BAPI_BP_DATA-BPARTNER,' SALE AREA DATA ADDING SUCCESS! '.
*  CONCATENATE ' BP   ' BAPI_BP_DATA-BPARTNER ' SALE AREA DATA  ADDING SUCCESS! ' INTO IT_LOG-LOG.
*  APPEND IT_LOG.
*ENDIF.
*
***/7/-------------------BP sale area SHIPPING  data ADD----------------------*
**---NEW SHIPPING DATA----*
**---
*
*CALL FUNCTION 'BAPI_BUPA_FRG0020_ADD'
*  EXPORTING
*    BUSINESSPARTNER = BAPI_BP_DATA-BPARTNER
*    SALES_AREA = BAPI_BP_SALEAREA_DATA
*    DATA = BAPI_BP_SHIPPING_DATA
*TABLES
*  RETURN = lT_return.
*
*CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*  EXPORTING
*    wait = 'X'
*IMPORTING
*  RETURN = ls_return.
*
*IF SY-SUBRC EQ 0.
*  WRITE:/' BP ',BAPI_BP_DATA-BPARTNER,' SALE AREA DATA ADDING SUCCESS! '.
*  CONCATENATE ' BP   ' BAPI_BP_DATA-BPARTNER ' SALE AREA DATA  ADDING SUCCESS! ' INTO IT_LOG-LOG.
*  APPEND IT_LOG.
*ENDIF.
*
***/8/-------------------BP sale area BILLING  data ADD----------------------*
**---NEW SHIPPING DATA----*
**---
*
*CALL FUNCTION 'BAPI_BUPA_FRG0030_ADD'
*  EXPORTING
*    BUSINESSPARTNER = BAPI_BP_DATA-BPARTNER
*    SALES_AREA = BAPI_BP_SALEAREA_DATA
*    DATA = BAPI_BP_PRICING_DATA
*TABLES
*  RETURN = lT_return.
*
*CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*  EXPORTING
*    wait = 'X'
*IMPORTING
*  RETURN = ls_return.
*
*IF SY-SUBRC EQ 0.
*  WRITE:/' BP ',BAPI_BP_DATA-BPARTNER,' PRICE DATA ADDING SUCCESS! '.
*  CONCATENATE ' BP   ' BAPI_BP_DATA-BPARTNER ' PRICE DATA  ADDING SUCCESS! ' INTO IT_LOG-LOG.
*  APPEND IT_LOG.
*ENDIF.
*
*
***/9/-------------------BP Organizational Data  ADD----------------------*
**---NEW SHIPPING DATA----*
**---
*
*CALL FUNCTION 'BAPI_BUPA_FRG0140_ADD'
*  EXPORTING
*    BUSINESSPARTNER = BAPI_BP_DATA-BPARTNER
*    SALES_AREA = BAPI_BP_SALEAREA_DATA
*    DATA = BAPI_BP_ORG_DATA
*TABLES
*  RETURN = lT_return.
*
*CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*  EXPORTING
*    wait = 'X'
*IMPORTING
*  RETURN = ls_return.
*
*IF SY-SUBRC EQ 0.
*  WRITE:/' BP ',BAPI_BP_DATA-BPARTNER,' BP Organizational Data ADDING SUCCESS! '.
*  CONCATENATE ' BP   ' BAPI_BP_DATA-BPARTNER ' BP Organizational Data  ADDING SUCCESS! ' INTO IT_LOG-LOG.
*  APPEND IT_LOG.
*ENDIF.
*
***-------------------------BP CREATING ACTULLY SUCCESS---------------------------*
*WRITE :/'BP' , BAPI_BP_DATA-BPARTNER,' WAS CREATED ! '.
*CONCATENATE ' BP   ' BAPI_BP_DATA-BPARTNER '  CREATING SUCCESS! ' INTO IT_LOG-LOG.
*  APPEND IT_LOG.
**-------------------------BP COMPANY CREATING FINSHED----------------------------*
*
*ENDLOOP.
*
*


********************************************
*********************************************
*********************************************

 

 

 

 

 

 

APPEND LINES OF IT_LOG TO IT_LOG_FINAL.
CLEAR IT_LOG.
REFRESH IT_LOG.

CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
    FILENAME = LOG_PATH
    WRITE_LF = 'X'
    FILETYPE = 'ASC'
  TABLES
    DATA_TAB = IT_LOG_FINAL      "I_OUTTAB
  EXCEPTIONS
    OTHERS   = 4.

*refresh it_log_final.
*--------------------------------

### 将Excel数据动态插入到ABAP内部 在处理将外部Excel文件中的数据导入至SAP系统的内部时,可以采用多种方式实现这一目标。这里介绍一种基于`CL_GUI_FRONTEND_SERVICES`类的方法来读取本地磁盘上的Excel文件,并将其内容加载到内中。 #### 使用`CL_GUI_FRONTEND_SERVICES`读取Excel文件 通过调用`cl_gui_frontend_services=>gui_upload`方法可以直接从客户端计算机上选取并上传指定路径下的Excel文件。此过程允许程序获取整个工作簿的内容作为字符串数组返回给后台服务器端的应用逻辑处理器(ALP),之后再进一步解析这些原始数据换成适合存储于内存结构体内的格式。 对于具体实施细节如下: 1. **定义数据对象** 为了能够接收来自前端传来的每一行记录,在开始之前先声明必要的变量与格类型用于暂存中间状态的数据项以及最终要填充的目标内实例化后的副本。 ```abap DATA: lv_filename TYPE string, lt_excel_data TYPE TABLE OF string. TYPES: BEGIN OF ty_itab, field1 TYPE char20, "假设这是你要映射的第一个字段 field2 TYPE i, "第二个整型字段... ... END OF ty_itab. DATA: lt_final_table TYPE STANDARD TABLE OF ty_itab. ``` 2. **选择并上传文件** 利用对话框让用户挑选待处理的工作薄位置,接着执行实际的传输动作。 ```abap CALL METHOD cl_gui_frontend_services=>file_open_dialog CHANGING filename = lv_filename. IF NOT lv_filename IS INITIAL. CALL METHOD cl_gui_frontend_services=>gui_upload EXPORTING filename = lv_filename filetype = 'ASC' IMPORTING filelength = DATA(lv_file_length) CHANGING data_tab = lt_excel_data[] EXCEPTIONS OTHERS = 1. ENDIF. ``` 3. **解析CSV/TSV格式文本** 如果所选文件是以逗号分隔值(Comma-Separated Values)或制符分割(Tab-Separated Values)的形式保存,则需逐行拆解每条目之间的界限以便正确分配各列对应的属性名及其关联的实际值得关系对儿。 4. **构建内部** 最后一步就是遍历经过初步清理过的临时容器(`lt_excel_data`)里的每一个元素,依据预设好的规则完成向目的集合(`lt_final_table`)里追加新成员的操作流程。 ```abap LOOP AT lt_excel_data INTO DATA(ls_line). SPLIT ls_line AT ',' INTO FIELD-SYMBOL(<fs_field>) VALUE (lv_value). APPEND INITIAL LINE TO lt_final_table ASSIGNING FIELD-SYMBOL(<ls_target>). <ls_target>-field1 = COND #( WHEN sy-tabix EQ 1 THEN lv_value ). <ls_target>-field2 = COND #( WHEN sy-tabix EQ 2 THEN lv_value AS INT ). CLEAR: ls_line, lv_value. ENDLOOP. ``` 上述代码片段仅提供了一个简化版的概念验证模型,真实场景下可能还需要考虑更多因素如异常情况捕获机制、性能优化措施等[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值