批量创建S4 BP客户
考虑使用CVI_EI_INBOUND_MAIN。
本文重点讨论的业务场景:使用用户上传的EXCLE文件批量创建客户,节省时间操作时间。
开发申请要求:给出前台(TCODE:BP)创建客户相关数据,批量创建客户。
前台操作,根据界面底部的消息提示一步一步输入BP客户的相关数据。
根据客户主数据创建客户数据相关信息。
接收数据的结构,改方法只有一个导入参数,所有的信息都在这个导入参数里面。
主要的数据填充在CUSTOMER这个组件内
对于CUSTOMER这个组件,分别填充客户的相关数据到对应组件
这里主要有三个组件CENTRAL_DATA(中心数据)、COMPANY_DATA(公司代码数据)、SALES_DATA(销售数据),分别在根据所需数据的类别分别填入对应的组件里。
对于前台标识页签下的税号相关数据,需要采用BAPI_BUPA_TAX_ADD进行维护
代码示例
CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
EXPORTING
BUSINESSPARTNER =
TAXTYPE =
TAXNUMBER =
TABLES
RETURN = LT_RETURN_TAX.
对于前台控制页签下的税分类相关数据,如下图,需要用BAPI_BUTX_FRG0010_ADD才能添加进去。
调用代码示例:
CALL FUNCTION 'BAPI_BUTX_FRG0010_ADD'
EXPORTING
BUSINESSPARTNER =
TAXCOUNTRY =
TAXREGION = '' "地区
TAXTYPE =
DATA =
TABLES
RETURN = LT_RETURN_FRG.
对于信用参数文件页签下的计分相关数据,如下图,需要采用类IO_BUPA_FACTORY下的方法GET_CREDIT_ACCOUNT进行维护。
调用代码示例
FORM FRM_ADD_UKMBP CHANGING C_RETURN TYPE UKM_T_MONITOR_RETURN.
DATA: IO_FACADE TYPE REF TO CL_UKM_FACADE,
IO_BUPA_FACTORY TYPE REF TO CL_UKM_BUPA_FACTORY,
IO_PARTNER TYPE REF TO CL_UKM_BUSINESS_PARTNER,
IO_ACCOUNT TYPE REF TO CL_UKM_ACCOUNT,
LW_BP_CREDIT_SGM TYPE UKM_S_BP_CMS_SGM.
DATA: LWA_UKM_S_BP_CMS TYPE UKM_S_BP_CMS.
DATA: LV_PARTNER TYPE BU_PARTNER,
LV_CREDIT_SGMNT TYPE UKM_CREDIT_SGMNT.
* 创建'MAINTAIN'对象
IO_FACADE = CL_UKM_FACADE=>CREATE( I_ACTIVITY = CL_UKM_CNST_EVENTING=>BP_MAINTENANCE ).
IO_BUPA_FACTORY = IO_FACADE->GET_BUPA_FACTORY( ).
LV_PARTNER =
LV_CREDIT_SGMNT =
IO_PARTNER = IO_BUPA_FACTORY->GET_BUSINESS_PARTNER( LV_PARTNER ).
IO_PARTNER->GET_BP_CMS( IMPORTING ES_BP_CMS = LWA_UKM_S_BP_CMS ).
LWA_UKM_S_BP_CMS-RISK_CLASS =
LWA_UKM_S_BP_CMS-CHECK_RULE =
LWA_UKM_S_BP_CMS-LIMIT_RULE =
LWA_UKM_S_BP_CMS-CREDIT_GROUP =
IO_PARTNER->SET_BP_CMS( LWA_UKM_S_BP_CMS ).
CALL METHOD IO_BUPA_FACTORY->GET_CREDIT_ACCOUNT
EXPORTING
I_PARTNER = LV_PARTNER
I_CREDIT_SGMNT = LV_CREDIT_SGMNT
RECEIVING
RO_CREDIT_ACCOUNT = IO_ACCOUNT.
IO_ACCOUNT->GET_BP_CMS_SGM( IMPORTING ES_BP_CMS_SGM = LW_BP_CREDIT_SGM ).
LW_BP_CREDIT_SGM-CREDIT_LIMIT =
IO_ACCOUNT->SET_BP_CMS_SGM( EXPORTING IS_BP_CMS_SGM = LW_BP_CREDIT_SGM ).
IO_BUPA_FACTORY->SAVE_ALL( EXPORTING I_UPD_TASK = ABAP_FALSE
RECEIVING ET_RETURN = C_RETURN ).
ENDFORM.
代码示例
REPORT ZSD010.
TABLES:SSCRFIELDS.
TYPE-POOLS: OLE2 ,ICON ,SLIS.
*----------------alv报表结构定义----------------------------------------------------*
TYPES : BEGIN OF TY_UPLOAD_DATA,
PARTNER TYPE BUT000-PARTNER, "业务伙伴编号
TYPE TYPE BUT000-TYPE, "合作伙伴类别
CUS001X TYPE CHAR7, "角色 WD
KTOKD TYPE BUT000-BU_GROUP, "客户账户组
ANRED TYPE KNA1-ANRED, "称谓
NAME1 TYPE KNA1-NAME1, "名称1
NAME2 TYPE KNA1-NAME2, "名称2
NAME3 TYPE KNA1-NAME3, "名称3 WD
NAME4 TYPE KNA1-NAME4, "名称4 WD
SORTL TYPE KNA1-SORTL, "搜索项
NAME_CO TYPE AD_NAME_CO, "代收人
STREET TYPE AD_STREET, "街道
STR_SUPPL1 TYPE AD_STRSPP1, "街道2 WD
STR_SUPPL2 TYPE AD_STRSPP2, "街道3 WD
STR_SUPPL3 TYPE AD_STRSPP3, "街道4
LOCATION TYPE AD_LCTN, "街道5
CITY1 TYPE ADRC-CITY1, "城市 WD
PSTLZ TYPE KNA1-PSTLZ, "邮政编码
LAND1 TYPE KNA1-LAND1, "国家/地区
REGIO TYPE REGIO, "地区
LANGU TYPE LAISO, "语言
TELF1 TYPE KNA1-TELF1, "电话
PHONE TYPE ADRC-TEL_NUMBER, "移动电话
EMAIL TYPE AD_SMTPADR, "电子邮件
*--WD-------------------------------------------------------*
FAX_NUMBER TYPE ADRC-FAX_NUMBER, "传真
REMARK TYPE ADRCT-REMARK, "联系人
TAXTYPE TYPE DFKKBPTAXNUM-TAXTYPE, "类别
TAXNUMXL TYPE CHAR20, "DFKKBPTAXNUM-TAXNUMXL, "税号
TAX_CTY TYPE BUT_FRG0011-TAX_CTY, "税分类国家/地区
TAX_TYPE TYPE BUT_FRG0011-TAX_TYPE, "税收类型
TAX_GROUP TYPE BUT_FRG0011-TAX_GROUP, "税收组
LIMIT_RULE TYPE UKMBP_CMS-LIMIT_RULE, "规则
RISK_CLASS TYPE UKMBP_CMS-RISK_CLASS, "风险类
CHECK_RULE TYPE UKMBP_CMS-CHECK_RULE, "检查规则
CREDIT_GROUP TYPE UKMBP_CMS-CREDIT_GROUP, "客户组
*--WD-------------------------------------------------------*
KUKLA TYPE KNA1-KUKLA, "客户分类
BRAN1 TYPE KNA1-BRAN1, " 行业代码1 WD
BUKRS TYPE BUKRS, "公司代码
AKONT TYPE KNB1-AKONT, "统驭科目
ZUAWA TYPE KNB1-ZUAWA, "排序码
ZTERM TYPE KNB1-ZTERM, "付款条款
ZWELS TYPE KNB1-ZWELS, "付款方式
VKORG TYPE KNVV-VKORG, "销售组织
VTWEG TYPE KNVV-VTWEG, "分销渠道
SPART TYPE KNVV-SPART, "分部 (产品组)
BZIRK TYPE KNVV-BZIRK, "销售区域 WD
KDGRP TYPE KNVV-KDGRP, "客户组 WD
VKBUR TYPE KNVV-VKBUR, "销售部门
VKGRP TYPE KNVV-VKGRP, "销售组
KTONR TYPE GPANR, "货运代理编号
WAERS TYPE KNVV-WAERS, "币种
KALKS TYPE KNVV-KALKS, "定价过程
VWERK TYPE KNVV-VWERK, "交货工厂
VSBED TYPE KNVV-VSBED, "装运条件
PODKZ TYPE KNVV-PODKZ, "pod相关
INCO1 TYPE KNVV-INCO1, "国际贸易术语解释通则
INCO2 TYPE KNVV-INCO2, "国际贸易条款位置
ZTERM1 TYPE KNVV-ZTERM, "付款条款
KTGRD TYPE KNVV-KTGRD, "客户科目分配组
TAXKD TYPE KNVI-TAXKD, "税分类
KVGR1 TYPE KVGR1 , "客户组1 WD
KVGR2 TYPE KVGR2 , "客户组2 WD
KVGR3 TYPE KVGR3 , "客户组3 WD
KVGR4 TYPE KVGR4 , "客户组4 WD
KVGR5 TYPE KVGR5 , "客户组5 WD
CREDIT_SGMNT TYPE UKMBP_CMS_SGM-CREDIT_SGMNT , "信用段 WD
CREDIT_LIMIT TYPE UKMBP_CMS_SGM-CREDIT_LIMIT , "额度 WD
CHECK,
MEMO(200), "消息文本
END OF TY_UPLOAD_DATA.
DATA: GS_ALV_DATA TYPE TY_UPLOAD_DATA,
GT_ALV_DATA TYPE TABLE OF TY_UPLOAD_DATA.
FIELD-SYMBOLS:
DATA: GV_FULLPATH TYPE STRING,
GV_PATH TYPE STRING,
GV_NAME TYPE STRING.
" 标识模拟导入还是正式导入
CONSTANTS : C_PARVW1 TYPE PARVW VALUE 'SP', "售达方
C_PARVW2 TYPE PARVW VALUE 'BP', "收票方
C_PARVW3 TYPE PARVW VALUE 'PY', "付款方
C_PARVW4 TYPE PARVW VALUE 'CR', "货运代理
C_PARVW5 TYPE PARVW VALUE 'SH'. "送达方
DATA: "报表定义
GS_LAYOUT TYPE LVC_S_LAYO,
GT_FIELDCAT TYPE LVC_T_FCAT,
GS_FIELDCAT LIKE LINE OF GT_FIELDCAT,
GT_EVENTS TYPE SLIS_T_EVENT,
GS_EVENTS LIKE LINE OF GT_EVENTS,
GT_EXCLUDING TYPE SLIS_T_EXTAB,
GS_EXCLUDING TYPE SLIS_EXTAB,
GT_SORT TYPE LVC_T_SORT,
GS_SORT TYPE LVC_S_SORT,
GT_EXCLUDE TYPE SLIS_T_EXTAB,
GS_EXCLUDE TYPE SLIS_EXTAB.
* 根据伙伴GUID取出客户编号
DATA : LT_PARTNERGUID_LIST TYPE BU_PARTNER_GUID_T,
LS_PARTNERGUID_LIST LIKE LINE OF LT_PARTNERGUID_LIST.
DATA : LT_CUSTOMER_LIST TYPE CVIS_CUST_LINK_T,
LS_CUSTOMER_LIST TYPE CVI_CUST_LINK.
DATA : LS_DATA TYPE CVIS_EI_EXTERN,
LT_DATA TYPE CVIS_EI_EXTERN_T,
LT_RETURN TYPE BAPIRETM,
LS_RETURN TYPE BAPIRETI,
LS_MSG TYPE BAPIRETC.
DATA : LS_PARTNER TYPE BUS_EI_EXTERN,
LS_CUSTOMER TYPE CMDS_EI_EXTERN.
DATA : LS_HEADER TYPE CMDS_EI_HEADER,
LS_CENTRAL_DATA TYPE CMDS_EI_CENTRAL_DATA,
LS_COMPANY_DATA TYPE CMDS_EI_CMD_COMPANY,
LS_SALES_DATA TYPE CMDS_EI_CMD_SALES.
DATA : LT_ROLES TYPE BUS_EI_BUPA_ROLES_T,
LS_ROLES TYPE BUS_EI_BUPA_ROLES,
LT_IDENT_NUMBERS TYPE BUS_EI_BUPA_IDENTIFICATION_T,
LS_IDENT_NUMBERS TYPE BUS_EI_BUPA_IDENTIFICATION,
LT_ADDRESSES TYPE BUS_EI_BUPA_ADDRESS_T,
LS_ADDRESSES TYPE BUS_EI_BUPA_ADDRESS,
LT_PHONE TYPE BUS_EI_BUPA_TELEPHONE_T,
LS_PHONE TYPE BUS_EI_BUPA_TELEPHONE,
LT_FAX TYPE BUS_EI_BUPA_FAX_T,
LS_FAX TYPE BUS_EI_BUPA_FAX,
LT_SMTP TYPE BUS_EI_BUPA_SMTP_T,
LS_SMTP TYPE BUS_EI_BUPA_SMTP,
LS_REMARKS TYPE BUS_EI_BUPA_COMREM,
LT_REMARKS TYPE BUS_EI_BUPA_COMREM_T,
LT_COMPANY TYPE CMDS_EI_COMPANY_T,
LS_COMPANY TYPE CMDS_EI_COMPANY,
LT_SALES TYPE CMDS_EI_SALES_T,
LS_SALES TYPE CMDS_EI_SALES,
LT_FUNCTIONS TYPE CMDS_EI_FUNCTIONS_T,
LS_FUNCTIONS TYPE CMDS_EI_FUNCTIONS,
LS_CENTRAL TYPE CMDS_EI_CMD_CENTRAL,
LT_TAX_IND TYPE CMDS_EI_TAX_IND_T,
LS_TAX_IND TYPE CMDS_EI_TAX_IND,
*--地址注释 WD
LT_REMARKS_A TYPE BUS_EI_BUPA_ADDRESSREMARK_T,
LS_REMARKS_A TYPE BUS_EI_BUPA_ADDRESSREMARK.
*--进度条
"进度条标志
DATA:V_FLAG TYPE C.
"进度条变量
DATA:V_TABIX TYPE I.
"上传模板条目数
DATA:LV_LINES TYPE I.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_PATH TYPE STRING MODIF ID M1. " 导入文件
*PARAMETERS: P_UP RADIOBUTTON GROUP GRP1 DEFAULT 'X' USER-COMMAND COMM. " 上传文件
*PARAMETERS: P_DOWN RADIOBUTTON GROUP GRP1 . "下载模板
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN FUNCTION KEY 1. "在初始屏幕上出现下载按钮
*----------------------------------------------------------------------*
* INITIALIZATION事件
*----------------------------------------------------------------------*
INITIALIZATION.
SSCRFIELDS-FUNCTXT_01 = '@49@下载导入模板'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PATH.
PERFORM FRM_BROWSER_FILE. "选择屏幕获取本地excel
AT SELECTION-SCREEN.
IF SSCRFIELDS-UCOMM = 'FC01'.
PERFORM DOWNLOAD_TEMPLATE. "下载SWM0上传过的模版
ENDIF.
*-----------------------------------------------------------------------
* 控制选择画面 文件选择框的显隐
*-----------------------------------------------------------------------
*AT SELECTION-SCREEN OUTPUT.
* LOOP AT SCREEN.
* IF SCREEN-GROUP1 = 'M1' OR SCREEN-GROUP1 = 'M2'.
**下载/日志隐藏
* IF P_DOWN = 'X'.
* SCREEN-ACTIVE = 0.
* ENDIF.
**上传文件显示
* IF P_UP = 'X' AND SCREEN-GROUP1 = 'M2'.
* SCREEN-ACTIVE = 0.
* ENDIF.
*
* MODIFY SCREEN.
* ENDIF.
* ENDLOOP.
START-OF-SELECTION.
* IF P_DOWN = 'X'.
* PERFORM FRM_GET_FULLPATH CHANGING GV_FULLPATH GV_PATH GV_NAME.
*
** 路径为空则退出
* IF GV_FULLPATH IS INITIAL.
* MESSAGE '用户取消操作' TYPE 'S'.
* RETURN.
* ENDIF.
*
* "下载模板
* PERFORM FRM_DOWN USING GV_FULLPATH.
* ENDIF .
*
* IF P_PATH IS INITIAL AND P_UP = 'X'.
* MESSAGE '请选择导入文件' TYPE 'S' DISPLAY LIKE 'W'.
* STOP.
* ENDIF.
* IF P_UP = 'X' AND P_PATH IS NOT INITIAL.
PERFORM FRM_UPLOAD_DATA. " 将本地excel文件上传到程序
PERFORM FRM_DISPLAY. "报表展示导入结果
* ENDIF.
*&---------------------------------------------------------------------*
*& Form FRM_BROWSER_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_BROWSER_FILE .
DATA: LV_RC TYPE I,
LV_USER TYPE I,
LT_FILE TYPE FILETABLE,
LS_FILE TYPE FILE_TABLE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = '选择文件'
FILE_FILTER = 'Excel文件(*.XLSX)|*.XLSX|全部文件 (*.*)|*.*|'
CHANGING
FILE_TABLE = LT_FILE
RC = LV_RC
USER_ACTION = LV_USER
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
CHECK LV_RC = 1
AND LV_USER <> 9.
READ TABLE LT_FILE INTO LS_FILE INDEX 1.
P_PATH = LS_FILE-FILENAME.
ENDIF.
ENDFORM. " FRM_BROWSER_FILE
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_UPLOAD_DATA .
DATA: LS_DATA TYPE TRUXS_T_TEXT_DATA,
LS_PATH TYPE RLGRAP-FILENAME.
LS_PATH = P_PATH.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
I_LINE_HEADER = 'X'
I_TAB_RAW_DATA = LS_DATA
I_FILENAME = LS_PATH
TABLES
I_TAB_CONVERTED_DATA = GT_ALV_DATA
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* LOOP AT gt_alv_data ASSIGNING
* IF
* IF
*
* ENDIF.
* ENDIF.
*
* IF
* IF
*
* ENDIF.
* ENDIF.
* ENDLOOP.
ENDFORM. " FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY .
PERFORM FRM_LAYOUT.
PERFORM FRM_FIELDCAT.
PERFORM FRM_OUTPUT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_LAYOUT .
GS_LAYOUT-ZEBRA = 'X'.
GS_LAYOUT-CWIDTH_OPT = 'X'.
GS_LAYOUT-BOX_FNAME = 'CHECK'.
GS_LAYOUT-SEL_MODE = 'A'.
ENDFORM.
DEFINE INIT_FIELDCAT. "宏定义 用于alv报表输出的样式设计
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-coltext = &2.
gs_fieldcat-ref_table = &3.
gs_fieldcat-ref_field = &4.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_FIELDCAT .
INIT_FIELDCAT 'MEMO' TEXT-F01 '' ''.
INIT_FIELDCAT 'PARTNER' TEXT-F02 '' ''. " 业务伙伴
INIT_FIELDCAT 'TYPE' '' 'BUT000' 'TYPE'. " 业务伙伴类别
INIT_FIELDCAT 'CUS001X' '角色' '' ''. " 业务伙伴角色
INIT_FIELDCAT 'KTOKD' '' 'BUT000' 'BU_GROUP'. " 客户账户组
INIT_FIELDCAT 'ANRED' '' 'KNA1' 'ANRED'. " 称谓
INIT_FIELDCAT 'NAME1' '' 'KNA1' 'NAME1'. " 名称1
INIT_FIELDCAT 'NAME2' '' 'KNA1' 'NAME2'. " 名称2
INIT_FIELDCAT 'NAME3' '' 'KNA1' 'NAME3'. " 名称3 WD
INIT_FIELDCAT 'NAME4' '' 'KNA1' 'NAME4'. " 名称4 WD
INIT_FIELDCAT 'SORTL' '' 'KNA1' 'SORTL'. " 搜索项
INIT_FIELDCAT 'NAME_CO' TEXT-F03 '' ''. " 代收人
INIT_FIELDCAT 'STREET' TEXT-F04 '' ''. " 街道
INIT_FIELDCAT 'STR_SUPPL1' '街道2' '' ''. " 街道2 WD
INIT_FIELDCAT 'STR_SUPPL2' '街道3' '' ''. " 街道3 WD
INIT_FIELDCAT 'STR_SUPPL3' TEXT-F05 '' ''. " 街道4
INIT_FIELDCAT 'LOCATION' TEXT-F06 '' ''. " 街道5
INIT_FIELDCAT 'CITY1' '城市' '' ''. "WD
INIT_FIELDCAT 'PSTLZ' '' 'KNA1' 'PSTLZ'. " 邮政编码
INIT_FIELDCAT 'LAND1' '' 'KNA1' 'LAND1'. " 国家/地区
INIT_FIELDCAT 'REGIO' TEXT-F07 '' ''. " 地区
INIT_FIELDCAT 'LANGU' TEXT-F11 '' ''. " 语言
INIT_FIELDCAT 'TELF1' '' 'KNA1' 'TELF1'. " 电话
INIT_FIELDCAT 'PHONE' '' 'ADRC' 'TEL_NUMBER'. "移动电话
INIT_FIELDCAT 'EMAIL' TEXT-F08 '' ''. " 电子邮件
*--WD-------------------------------------------------------*
INIT_FIELDCAT 'FAX_NUMBER ' '传真' '' ''. "
INIT_FIELDCAT 'REMARK ' '联系人' '' ''. "
INIT_FIELDCAT 'TAXTYPE ' '类别' '' ''. "
INIT_FIELDCAT 'TAXNUMXL ' '税号' '' ''. "
INIT_FIELDCAT 'TAX_CTY ' '税分类国家/地区' '' ''. "
INIT_FIELDCAT 'TAX_TYPE ' '税收类型' '' ''. "
INIT_FIELDCAT 'TAX_GROUP ' '税收组' '' ''. "
INIT_FIELDCAT 'LIMIT_RULE ' '规则' '' ''. "
INIT_FIELDCAT 'RISK_CLASS ' '风险类' '' ''. "
INIT_FIELDCAT 'CHECK_RULE ' '检查规则' '' ''. "
INIT_FIELDCAT 'CREDIT_GROUP' '客户组' '' ''. "
* INIT_FIELDCAT '' '' '' ''. "
*--WD-------------------------------------------------------*
INIT_FIELDCAT 'KUKLA' '' 'KNA1' 'KUKLA'. "客户分类
INIT_FIELDCAT 'BRAN1' '行业代码1' '' ''. "行业代码1 WD
INIT_FIELDCAT 'BUKRS' TEXT-F09 '' ''. "公司代码
INIT_FIELDCAT 'AKONT' '' 'KNB1' 'AKONT'. "统驭科目
INIT_FIELDCAT 'ZUAWA' '' 'KNB1' 'ZUAWA'. "排序码
INIT_FIELDCAT 'ZTERM' '' 'KNB1' 'ZTERM'. "付款条款
INIT_FIELDCAT 'ZWELS' '' 'KNB1' 'ZWELS'. "付款方式
INIT_FIELDCAT 'VKORG' '' 'KNVV' 'VKORG' ."销售组织
INIT_FIELDCAT 'VTWEG' '' 'KNVV' 'VTWEG' ."分销渠道
INIT_FIELDCAT 'SPART' '' 'KNVV' 'SPART'. "产品组
INIT_FIELDCAT 'VKBUR' '销售部门' '' ''. " 销售部门 WD
INIT_FIELDCAT 'VKGRP' '销售组' '' ''. " 销售组 WD
INIT_FIELDCAT 'VKBUR' '' 'KNVV' 'VKBUR' ."销售部门
INIT_FIELDCAT 'VKGRP' '' 'KNVV' 'VKGRP' ."销售组
INIT_FIELDCAT 'KTONR' TEXT-F10 '' '' . "货运代理编号
INIT_FIELDCAT 'WAERS' '' 'KNVV' 'WAERS' ."币种
INIT_FIELDCAT 'KALKS' '' 'KNVV' 'KALKS' ."定价过程
INIT_FIELDCAT 'VWERK' '' 'KNVV' 'VWERK' ."交货工厂
INIT_FIELDCAT 'VSBED' '' 'KNVV' 'VSBED' ."装运条件
INIT_FIELDCAT 'PODKZ' '' 'KNVV' 'PODKZ' ."pod相关
INIT_FIELDCAT 'INCO1' '' 'KNVV' 'INCO1' ."国际贸易术语解释通则
INIT_FIELDCAT 'INCO2' '' 'KNVV' 'INCO2' ."国际贸易条款位置
INIT_FIELDCAT 'ZTERM1' '' 'KNVV' 'ZTERM'. "付款条款
INIT_FIELDCAT 'KTGRD' '' 'KNVV' 'KTGRD' ."客户科目分配组
INIT_FIELDCAT 'TAXKD' '' 'KNVI' 'TAXKD' ."税分类
INIT_FIELDCAT 'CREDIT_SGMNT' '信用段' '' '' ."信用段 WD
INIT_FIELDCAT 'CREDIT_LIMIT' '额度' '' '' . "额度 WD
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_OUTPUT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'ALV_STATUS'
I_CALLBACK_USER_COMMAND = 'ALV_COMMAND'
IS_LAYOUT_LVC = GS_LAYOUT
IT_FIELDCAT_LVC = GT_FIELDCAT
TABLES
T_OUTTAB = GT_ALV_DATA
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " FRM_OUTPUT
*& Form ALV_PF_STATUS
*&---------------------------------------------------------------------*
* GUI状态设置
*----------------------------------------------------------------------*
* -->RT_EXTAB GUI状态设置
*----------------------------------------------------------------------*
FORM ALV_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM. "ALV_PF_STATUS
*&---------------------------------------------------------------------*
*& Form ALV_USER_COMMAND
*&---------------------------------------------------------------------*
* ALV执行查询后的事件响应
*----------------------------------------------------------------------*
* -->R_UCOMN 响应码
* -->RS_SELFIELD 当前行信息
*----------------------------------------------------------------------*
FORM ALV_COMMAND USING PV_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA:LV_INDEX TYPE SY-TABIX.
CASE PV_UCOMM.
WHEN 'IMPORT'.
PERFORM FRM_BAPI. "CHANGING l_subrc l_icon l_memo.
* PERFORM refurbish_alv.
WHEN OTHERS.
ENDCASE.
RS_SELFIELD-REFRESH = 'X'.
ENDFORM. "ALV_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form FRM_BAPI
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_BAPI .
DATA : LV_MSG TYPE STRING.
DATA : LV_MSG1 TYPE STRING.
DATA : LV_BPARTNERGUID TYPE BU_PARTNER_GUID_BAPI.
* LOOP AT gt_alv_data ASSIGNING
* IF
* MESSAGE: '请先处理错误数据再进行导入!' TYPE 'S' DISPLAY LIKE 'E'.
* RETURN.
* ENDIF.
* ENDLOOP.
DATA:LT_RETURN_TAX TYPE TABLE OF BAPIRET2 WITH HEADER LINE,
LT_RETURN_FRG TYPE TABLE OF BAPIRET2 WITH HEADER LINE.
DATA:LT_RETURN_UKMBP TYPE UKM_T_MONITOR_RETURN .
*&---进度条使用标志
CLEAR:V_FLAG.
*&---循环导入
V_TABIX = 0.
DESCRIBE TABLE GT_ALV_DATA LINES LV_LINES .
LOOP AT GT_ALV_DATA ASSIGNING
*&---当前条目
V_TABIX = V_TABIX + 1.
*&---进度条
* WAIT UP TO 3 SECONDS.
PERFORM FRM_INDICATOR USING V_TABIX.
CLEAR:LS_CENTRAL_DATA,LS_COMPANY_DATA,LS_SALES_DATA,LS_PARTNER,LS_CUSTOMER.
CLEAR:LS_PARTNERGUID_LIST,LT_PARTNERGUID_LIST,LT_CUSTOMER_LIST,LS_CUSTOMER_LIST,LT_DATA,LS_DATA,LV_BPARTNERGUID,
LT_RETURN,LV_MSG,LT_TAX_IND,LS_TAX_IND,LS_CENTRAL,LS_COMPANY,LT_COMPANY,LS_SALES,LT_SALES,LS_FUNCTIONS,LT_FUNCTIONS.
TRY .
LV_BPARTNERGUID = CL_UUID_FACTORY=>CREATE_SYSTEM_UUID( )->CREATE_UUID_X16( ).
CATCH CX_UUID_ERROR.
"返回消息
ENDTRY.
CHECK LV_BPARTNERGUID IS NOT INITIAL.
LS_PARTNER-HEADER-OBJECT_TASK = 'I'.
LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNERGUID = LV_BPARTNERGUID.
LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNER =
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-CATEGORY = 2. "业务伙伴类别
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-GROUPING =
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME1 =
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME2 =
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME3 =
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME4 =
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-SEARCHTERM1 =
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-TITLE_KEY =
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME1 = ABAP_TRUE.
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME2 = ABAP_TRUE.
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_CENTRALDATA-TITLE_KEY = ABAP_TRUE.
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_CENTRALDATA-SEARCHTERM1 = ABAP_TRUE.
CLEAR:LT_ROLES.
*----------------------------此处根据业务不同需要添加的BP角色也不同,先注释掉,需要用的请自行解掉注释并且根据业务添加所需角色,此处为必须要的字段
* IF
* LS_ROLES-TASK = 'I'.
* LS_ROLES-DATA_KEY = 'ZYCU00'. "公司角色
* APPEND LS_ROLES TO LT_ROLES.
* ENDIF.
*
* IF
* LS_ROLES-TASK = 'I'.
* LS_ROLES-DATA_KEY = 'ZYCU01'. "销售角色
* APPEND LS_ROLES TO LT_ROLES.
* ENDIF.
LS_ROLES-TASK = 'I'.
LS_ROLES-DATA_KEY =
APPEND LS_ROLES TO LT_ROLES.
IF
LS_ROLES-TASK = 'I'.
LS_ROLES-DATA_KEY = 'FLCU00'. "角色
APPEND LS_ROLES TO LT_ROLES.
LS_ROLES-TASK = 'I'.
LS_ROLES-DATA_KEY = 'UKM000'. "角色
APPEND LS_ROLES TO LT_ROLES.
ELSE.
ENDIF.
LS_PARTNER-CENTRAL_DATA-ROLE-ROLES = LT_ROLES.
CLEAR:LS_ADDRESSES,LT_ADDRESSES.
LS_ADDRESSES-TASK = 'I'.
LS_ADDRESSES-DATA-POSTAL-DATA-POSTL_COD1 =
LS_ADDRESSES-DATA-POSTAL-DATA-COUNTRY =
LS_ADDRESSES-DATA-POSTAL-DATA-REGION =
LS_ADDRESSES-DATA-POSTAL-DATA-C_O_NAME =
LS_ADDRESSES-DATA-POSTAL-DATA-STREET =
LS_ADDRESSES-DATA-POSTAL-DATA-STR_SUPPL1 =
LS_ADDRESSES-DATA-POSTAL-DATA-STR_SUPPL2 =
LS_ADDRESSES-DATA-POSTAL-DATA-STR_SUPPL3 =
LS_ADDRESSES-DATA-POSTAL-DATA-LOCATION =
LS_ADDRESSES-DATA-POSTAL-DATA-LANGUISO =
LS_ADDRESSES-DATA-POSTAL-DATAX-POSTL_COD1 = ABAP_TRUE. " 邮政编码
LS_ADDRESSES-DATA-POSTAL-DATAX-COUNTRY = ABAP_TRUE. " 国家代码
LS_ADDRESSES-DATA-POSTAL-DATAX-REGION = ABAP_TRUE. " 地区代码
LS_ADDRESSES-DATA-POSTAL-DATAX-C_O_NAME = ABAP_TRUE. " 代收人
LS_ADDRESSES-DATA-POSTAL-DATAX-STREET = ABAP_TRUE. " 街道
LS_ADDRESSES-DATA-POSTAL-DATAX-STR_SUPPL3 = ABAP_TRUE. " 街道4
LS_ADDRESSES-DATA-POSTAL-DATAX-LOCATION = ABAP_TRUE. " 街道5
LS_ADDRESSES-DATA-POSTAL-DATAX-LANGU_ISO = ABAP_TRUE."语言
CLEAR:LS_PHONE,LT_PHONE.
LS_PHONE-CONTACT-TASK = 'I'.
LS_PHONE-CONTACT-DATA-TELEPHONE =
LS_PHONE-CONTACT-DATAX-TELEPHONE = ABAP_TRUE.
APPEND LS_PHONE TO LT_PHONE.
CLEAR:LS_PHONE.
LS_PHONE-CONTACT-TASK = 'I'.
LS_PHONE-CONTACT-DATA-TELEPHONE =
LS_PHONE-CONTACT-DATA-R_3_USER = '3'. "3表示移动电话
LS_PHONE-CONTACT-DATAX-TELEPHONE = ABAP_TRUE.
LS_PHONE-CONTACT-DATAX-R_3_USER = ABAP_TRUE.
APPEND LS_PHONE TO LT_PHONE.
LS_ADDRESSES-DATA-COMMUNICATION-PHONE-PHONE = LT_PHONE.
CLEAR:LS_SMTP,LT_SMTP.
LS_SMTP-CONTACT-TASK = 'I'.
LS_SMTP-CONTACT-DATA-E_MAIL =
LS_SMTP-CONTACT-DATAX-E_MAIL = ABAP_TRUE.
APPEND LS_SMTP TO LT_SMTP.
LS_ADDRESSES-DATA-COMMUNICATION-SMTP-SMTP = LT_SMTP.
*--传真 WD
CLEAR:LS_FAX.
REFRESH LT_FAX.
LS_FAX-CONTACT-TASK = 'I'.
LS_FAX-CONTACT-DATA-FAX =
LS_FAX-CONTACT-DATAX-FAX = ABAP_TRUE.
APPEND LS_FAX TO LT_FAX .
LS_ADDRESSES-DATA-COMMUNICATION-FAX-FAX = LT_FAX.
*--地址注释 WD(联系人)
REFRESH LT_REMARKS_A.
CLEAR:LS_REMARKS_A.
LS_REMARKS_A-TASK = 'I'.
LS_REMARKS_A-DATA-LANGU = SY-LANGU..
LS_REMARKS_A-DATAX-LANGU = ABAP_TRUE.
LS_REMARKS_A-DATA-ADR_NOTES =
LS_REMARKS_A-DATAX-ADR_NOTES = ABAP_TRUE.
APPEND LS_REMARKS_A TO LT_REMARKS_A .
LS_ADDRESSES-DATA-REMARK-REMARKS = LT_REMARKS_A.
APPEND LS_ADDRESSES TO LT_ADDRESSES.
LS_PARTNER-CENTRAL_DATA-ADDRESS-ADDRESSES = LT_ADDRESSES.
****客户数据表头**********************************************
LS_HEADER-OBJECT_TASK = 'I'.
LS_CUSTOMER-HEADER = LS_HEADER.
****中心数据****************************************************
"数据已经在BP里面录入了,此处不需重复的填写了
* IF
LS_CENTRAL-DATA-KUKLA =
LS_CENTRAL-DATAX-KUKLA = 'X'.
LS_CENTRAL-DATA-BRAN1 =
LS_CENTRAL-DATAX-BRAN1 = 'X'.
LS_CENTRAL_DATA-CENTRAL = LS_CENTRAL.
*
"客户销售的出发票
LS_TAX_IND-TASK = 'I'.
LS_TAX_IND-DATA_KEY-ALAND = 'CN'.
LS_TAX_IND-DATA_KEY-TATYP = 'MWST'.
LS_TAX_IND-DATA-TAXKD =
LS_TAX_IND-DATAX-TAXKD = 'X'.
APPEND LS_TAX_IND TO LT_TAX_IND.
LS_CENTRAL_DATA-TAX_IND-TAX_IND = LT_TAX_IND.
LS_CUSTOMER-CENTRAL_DATA = LS_CENTRAL_DATA.
* ENDIF.
****公司代码数据************************************************
IF
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT =
IMPORTING
OUTPUT =
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' " 统驭科目补零
EXPORTING
INPUT =
IMPORTING
OUTPUT =
LS_COMPANY-TASK = 'I'.
LS_COMPANY-DATA_KEY-BUKRS =
LS_COMPANY-DATA-AKONT =
LS_COMPANY-DATA-ZUAWA =
LS_COMPANY-DATA-ZTERM =
LS_COMPANY-DATA-ZWELS =
LS_COMPANY-DATAX-AKONT = ABAP_TRUE.
LS_COMPANY-DATAX-ZUAWA = ABAP_TRUE.
LS_COMPANY-DATAX-ZTERM = ABAP_TRUE.
LS_COMPANY-DATAX-ZWELS = ABAP_TRUE.
APPEND LS_COMPANY TO LT_COMPANY.
LS_COMPANY_DATA-COMPANY = LT_COMPANY.
LS_CUSTOMER-COMPANY_DATA = LS_COMPANY_DATA.
ENDIF.
*****销售数据****************************************************
* IF
IF
AND
AND
LS_SALES-TASK = 'I'.
LS_SALES-DATA_KEY-VKORG =
LS_SALES-DATA_KEY-VTWEG =
LS_SALES-DATA_KEY-SPART =
LS_SALES-DATA-VKBUR =
LS_SALES-DATA-VKGRP =
LS_SALES-DATA-WAERS =
LS_SALES-DATA-KALKS =
LS_SALES-DATA-VWERK =
LS_SALES-DATA-VSBED =
LS_SALES-DATA-PODKZ =
LS_SALES-DATA-INCO1 =
LS_SALES-DATA-INCO2 =
LS_SALES-DATA-ZTERM =
LS_SALES-DATA-KTGRD =
LS_SALES-DATA-BZIRK =
LS_SALES-DATA-KDGRP =
LS_SALES-DATA-KVGR1 =
LS_SALES-DATA-KVGR2 =
LS_SALES-DATA-KVGR3 =
LS_SALES-DATA-KVGR4 =
LS_SALES-DATA-KVGR5 =
LS_SALES-DATAX-VKBUR = ABAP_TRUE.
LS_SALES-DATAX-VKGRP = ABAP_TRUE.
LS_SALES-DATAX-WAERS = ABAP_TRUE.
LS_SALES-DATAX-KALKS = ABAP_TRUE.
LS_SALES-DATAX-VWERK = ABAP_TRUE.
LS_SALES-DATAX-VSBED = ABAP_TRUE.
LS_SALES-DATAX-PODKZ = ABAP_TRUE.
LS_SALES-DATAX-INCO1 = ABAP_TRUE.
LS_SALES-DATAX-INCO2 = ABAP_TRUE.
LS_SALES-DATAX-ZTERM = ABAP_TRUE.
LS_SALES-DATAX-KTGRD = ABAP_TRUE.
LS_SALES-DATAX-BZIRK = ABAP_TRUE. "销售区域 WD
LS_SALES-DATAX-KDGRP = ABAP_TRUE. "客户组 WD
LS_SALES-DATAX-KVGR1 =
LS_SALES-DATAX-KVGR2 =
LS_SALES-DATAX-KVGR3 =
LS_SALES-DATAX-KVGR4 =
LS_SALES-DATAX-KVGR5 =
"Function伙伴功能
LS_FUNCTIONS-TASK = 'I'.
*begin of 业务伙伴 此处为业务所需的限制,根据客户的账户组进行限制,需要用到的可以根据业务进行修改
IF
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
INPUT = C_PARVW1 "售达方
IMPORTING
OUTPUT = LS_FUNCTIONS-DATA_KEY-PARVW.
APPEND LS_FUNCTIONS TO LT_FUNCTIONS.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
INPUT = C_PARVW2 "收票方
IMPORTING
OUTPUT = LS_FUNCTIONS-DATA_KEY-PARVW.
APPEND LS_FUNCTIONS TO LT_FUNCTIONS.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
INPUT = C_PARVW5 "送达方
IMPORTING
OUTPUT = LS_FUNCTIONS-DATA_KEY-PARVW.
APPEND LS_FUNCTIONS TO LT_FUNCTIONS.
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
INPUT = C_PARVW3 "付款方
IMPORTING
OUTPUT = LS_FUNCTIONS-DATA_KEY-PARVW.
APPEND LS_FUNCTIONS TO LT_FUNCTIONS.
ENDIF.
IF
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
INPUT = C_PARVW5 "送达方
IMPORTING
OUTPUT = LS_FUNCTIONS-DATA_KEY-PARVW.
APPEND LS_FUNCTIONS TO LT_FUNCTIONS.
ENDIF.
IF
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
INPUT = C_PARVW3 "付款方
IMPORTING
OUTPUT = LS_FUNCTIONS-DATA_KEY-PARVW.
APPEND LS_FUNCTIONS TO LT_FUNCTIONS.
ENDIF.
*此处为业务需求,对货运代理这个业务伙伴的货运代理编号进行更换,如无此业务可以自行删除
* IF
* CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
* EXPORTING
* INPUT = C_PARVW4 "货运代理
* IMPORTING
* OUTPUT = LS_FUNCTIONS-DATA_KEY-PARVW.
* IF
* LS_FUNCTIONS-DATA-PARTNER =
* LS_FUNCTIONS-DATAX-PARTNER = ABAP_TRUE.
* ENDIF.
* APPEND LS_FUNCTIONS TO LT_FUNCTIONS.
* ENDIF.
*END of 业务伙伴 此处为业务所需的限制,需要用到的可以根据业务进行修改
LS_SALES-FUNCTIONS-FUNCTIONS = LT_FUNCTIONS.
APPEND LS_SALES TO LT_SALES.
LS_SALES_DATA-SALES = LT_SALES.
LS_CUSTOMER-SALES_DATA = LS_SALES_DATA.
ENDIF.
* ENDIF.
LS_DATA-PARTNER = LS_PARTNER.
LS_DATA-CUSTOMER = LS_CUSTOMER.
APPEND LS_DATA TO LT_DATA.
CALL FUNCTION 'CVI_EI_INBOUND_MAIN'
EXPORTING
I_DATA = LT_DATA
* I_EXT_DATA =
IMPORTING
E_RETURN = LT_RETURN.
CLEAR LV_MSG.
LOOP AT LT_RETURN INTO LS_RETURN.
LOOP AT LS_RETURN-OBJECT_MSG INTO LS_MSG WHERE TYPE = 'E' OR TYPE = 'A'.
CONCATENATE LV_MSG LS_MSG-MESSAGE INTO LV_MSG.
ENDLOOP.
ENDLOOP.
IF LV_MSG IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = ABAP_TRUE.
* 根据伙伴GUID取出客户编号
LS_PARTNERGUID_LIST = LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNERGUID.
APPEND LS_PARTNERGUID_LIST TO LT_PARTNERGUID_LIST.
LT_CUSTOMER_LIST = CVI_MAPPER=>GET_INSTANCE( )->GET_ASSIGNED_CUSTOMERS_FOR_BPS(
I_PARTNER_GUIDS = LT_PARTNERGUID_LIST ).
IF LT_CUSTOMER_LIST IS NOT INITIAL.
READ TABLE LT_CUSTOMER_LIST INTO LS_CUSTOMER_LIST INDEX 1 .
IF SY-SUBRC EQ 0.
CONCATENATE '客户' LS_CUSTOMER_LIST-CUSTOMER '创建成功!' INTO
ENDIF.
ELSE.
"可能创建成功了BP,但未创建成功customer
DATA : LS_CVIS_ERROR TYPE CVIS_ERROR.
* LT_RETURN TYPE BAPIRET2_T,
* LS_RETURN TYPE BAPIRET2.
LS_CVIS_ERROR = CVI_MAPPER=>GET_INSTANCE( )->UNDO_ASSIGNMENTS(
I_FOR_PARTNERS = LT_PARTNERGUID_LIST ).
ENDIF.
*--BAPI_BUPA_TAX_ADD 类别 税号
CLEAR LV_MSG1 .
CLEAR:LT_RETURN_TAX.
REFRESH LT_RETURN_TAX[].
CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
EXPORTING
BUSINESSPARTNER =
TAXTYPE =
TAXNUMBER =
TABLES
RETURN = LT_RETURN_TAX.
LOOP AT LT_RETURN_TAX WHERE TYPE = 'E' OR TYPE = 'A'.
CONCATENATE LV_MSG1 LT_RETURN_TAX-MESSAGE INTO LV_MSG1.
ENDLOOP.
IF LV_MSG1 IS INITIAL .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = ABAP_TRUE.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
ENDIF.
*--BAPI_BUTX_FRG0010_ADD 税分类国家/地区 税收类型 税收组
CLEAR LV_MSG1 .
CLEAR:LT_RETURN_FRG.
REFRESH LT_RETURN_FRG[].
CALL FUNCTION 'BAPI_BUTX_FRG0010_ADD'
EXPORTING
BUSINESSPARTNER =
TAXCOUNTRY =
TAXREGION = '' "地区
TAXTYPE =
DATA =
TABLES
RETURN = LT_RETURN_FRG.
LOOP AT LT_RETURN_FRG WHERE TYPE = 'E' OR TYPE = 'A'.
CONCATENATE LV_MSG1 LT_RETURN_FRG-MESSAGE INTO LV_MSG1.
ENDLOOP.
IF LV_MSG1 IS INITIAL .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = ABAP_TRUE.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
ENDIF.
*--维护信用段数据
CLEAR:LV_MSG1.
REFRESH LT_RETURN_UKMBP[].
PERFORM FRM_ADD_UKMBP CHANGING LT_RETURN_UKMBP .
LOOP AT LT_RETURN_FRG WHERE TYPE = 'E' OR TYPE = 'A'.
CONCATENATE LV_MSG1 LT_RETURN_FRG-MESSAGE INTO LV_MSG1.
ENDLOOP.
IF LV_MSG1 IS INITIAL .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = ABAP_TRUE.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_FULLPATH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_L_FULLPATH text
* <--P_L_PATH text
*----------------------------------------------------------------------*
FORM FRM_GET_FULLPATH CHANGING PV_FULLPATH TYPE STRING
PV_PATH TYPE STRING
PV_NAME TYPE STRING.
DATA: LV_INIT_PATH TYPE STRING,
LV_INIT_FNAME TYPE STRING,
LV_PATH TYPE STRING,
LV_FILENAME TYPE STRING,
LV_FULLPATH TYPE STRING.
* 初始名称(输出的文件名称)
* concatenate 'Material_Doc_' SY-DATUM '.xslx' into L_INIT_FNAME.
LV_INIT_FNAME = TEXT-003.
* 获取桌面路径
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_DESKTOP_DIRECTORY
CHANGING
DESKTOP_DIRECTORY = LV_INIT_PATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
* 用户选择名称、路径
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
* window_title = '指定保存文件名'
* default_extension = 'DOC'
DEFAULT_FILE_NAME = LV_INIT_FNAME
* FILE_FILTER = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
* FILE_FILTER = CL_GUI_FRONTEND_SERVICES=>FILETYPE_WORD
INITIAL_DIRECTORY = LV_INIT_PATH
PROMPT_ON_OVERWRITE = 'X'
CHANGING
FILENAME = LV_FILENAME
PATH = LV_PATH
FULLPATH = LV_FULLPATH
* USER_ACTION =
* FILE_ENCODING =
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC = 0.
PV_FULLPATH = LV_FULLPATH.
PV_PATH = LV_PATH.
ENDIF.
ENDFORM. " FRM_GET_FULLPATH
*&---------------------------------------------------------------------*
*& Form FRM_DOWN
*&---------------------------------------------------------------------*
* 下载xls模板
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DOWN USING PR_FILENAME.
DATA: LV_OBJDATA LIKE WWWDATATAB,
LV_MIME LIKE W3MIME,
LV_DESTINATION LIKE RLGRAP-FILENAME,
LV_OBJNAM TYPE STRING,
LV_RC LIKE SY-SUBRC,
LV_ERRTXT TYPE STRING.
DATA: LV_FILENAME TYPE STRING,
LV_RESULT,
LV_SUBRC TYPE SY-SUBRC.
DATA: LV_OBJID TYPE WWWDATATAB-OBJID .
LV_OBJID = 'ZSDB_802'. "上传的模版名称
"查找文件是否存在。
SELECT SINGLE RELID OBJID
FROM WWWDATA
INTO CORRESPONDING FIELDS OF LV_OBJDATA
WHERE SRTF2 = 0
AND RELID = 'MI'
AND OBJID = LV_OBJID.
"判断模版不存在则报错
IF SY-SUBRC NE 0 OR LV_OBJDATA-OBJID EQ SPACE.
CONCATENATE '模板文件:' LV_OBJID '不存在,请用TCODE:SMW0进行加载'
INTO LV_ERRTXT.
MESSAGE E000(SU) WITH LV_ERRTXT.
ENDIF.
LV_FILENAME = PR_FILENAME.
"判断本地地址是否已经存在此文件。
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
EXPORTING
FILE = LV_FILENAME
RECEIVING
RESULT = LV_RESULT
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
WRONG_PARAMETER = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
ENDIF.
IF LV_RESULT EQ 'X'. "如果存在则删除原始文件,重新覆盖
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_DELETE
EXPORTING
FILENAME = LV_FILENAME
CHANGING
RC = LV_SUBRC
EXCEPTIONS
FILE_DELETE_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
FILE_NOT_FOUND = 4
ACCESS_DENIED = 5
UNKNOWN_ERROR = 6
NOT_SUPPORTED_BY_GUI = 7
WRONG_PARAMETER = 8
OTHERS = 9.
IF LV_SUBRC <> 0. "如果删除失败,则报错。
CONCATENATE '同名EXCEL文件已打开' '请关闭该EXCEL后重试。'
INTO LV_ERRTXT.
MESSAGE E000(SU) WITH LV_ERRTXT.
ENDIF.
ENDIF.
LV_DESTINATION = PR_FILENAME.
"下载模版。
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = LV_OBJDATA
DESTINATION = LV_DESTINATION
IMPORTING
RC = LV_RC.
IF LV_RC NE 0.
CONCATENATE '模板文件' '下载失败' INTO LV_ERRTXT.
MESSAGE E000(SU) WITH LV_ERRTXT.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ADD_UKMBP
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_ADD_UKMBP CHANGING C_RETURN TYPE UKM_T_MONITOR_RETURN.
DATA: IO_FACADE TYPE REF TO CL_UKM_FACADE,
IO_BUPA_FACTORY TYPE REF TO CL_UKM_BUPA_FACTORY,
IO_PARTNER TYPE REF TO CL_UKM_BUSINESS_PARTNER,
IO_ACCOUNT TYPE REF TO CL_UKM_ACCOUNT,
LW_BP_CREDIT_SGM TYPE UKM_S_BP_CMS_SGM.
DATA: LWA_UKM_S_BP_CMS TYPE UKM_S_BP_CMS.
DATA: LV_PARTNER TYPE BU_PARTNER,
LV_CREDIT_SGMNT TYPE UKM_CREDIT_SGMNT.
* 创建'MAINTAIN'对象
IO_FACADE = CL_UKM_FACADE=>CREATE( I_ACTIVITY = CL_UKM_CNST_EVENTING=>BP_MAINTENANCE ).
IO_BUPA_FACTORY = IO_FACADE->GET_BUPA_FACTORY( ).
LV_PARTNER =
LV_CREDIT_SGMNT =
IO_PARTNER = IO_BUPA_FACTORY->GET_BUSINESS_PARTNER( LV_PARTNER ).
IO_PARTNER->GET_BP_CMS( IMPORTING ES_BP_CMS = LWA_UKM_S_BP_CMS ).
LWA_UKM_S_BP_CMS-RISK_CLASS =
LWA_UKM_S_BP_CMS-CHECK_RULE =
LWA_UKM_S_BP_CMS-LIMIT_RULE =
LWA_UKM_S_BP_CMS-CREDIT_GROUP =
IO_PARTNER->SET_BP_CMS( LWA_UKM_S_BP_CMS ).
CALL METHOD IO_BUPA_FACTORY->GET_CREDIT_ACCOUNT
EXPORTING
I_PARTNER = LV_PARTNER
I_CREDIT_SGMNT = LV_CREDIT_SGMNT
RECEIVING
RO_CREDIT_ACCOUNT = IO_ACCOUNT.
IO_ACCOUNT->GET_BP_CMS_SGM( IMPORTING ES_BP_CMS_SGM = LW_BP_CREDIT_SGM ).
LW_BP_CREDIT_SGM-CREDIT_LIMIT =
IO_ACCOUNT->SET_BP_CMS_SGM( EXPORTING IS_BP_CMS_SGM = LW_BP_CREDIT_SGM ).
IO_BUPA_FACTORY->SAVE_ALL( EXPORTING I_UPD_TASK = ABAP_FALSE
RECEIVING ET_RETURN = C_RETURN ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ADD_TAX
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* <--P_LT_RETURN_TAX text
*&---------------------------------------------------------------------*
FORM FRM_ADD_TAX CHANGING P_LT_RETURN_TAX.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM DOWNLOAD_TEMPLATE .
DATA: LS_WWWDATATAB LIKE WWWDATATAB,
LT_MIME LIKE W3MIME OCCURS 10,
LV_FILENAME TYPE STRING,
LV_PATH TYPE STRING,
LV_FULLPATH TYPE STRING,
WINDOW_TITLE TYPE STRING,
DEFAULT_FILE_NAME TYPE STRING.
CLEAR: LS_WWWDATATAB,LT_MIME[],LV_FILENAME,LV_PATH,LV_FULLPATH,WINDOW_TITLE,DEFAULT_FILE_NAME.
LS_WWWDATATAB-RELID = 'MI'. "IMPORT/EXPORT 数据表中的区域
CASE SSCRFIELDS-UCOMM.
WHEN 'FC01'.
LS_WWWDATATAB-OBJID = 'ZSD010'.
LS_WWWDATATAB-TEXT = '客户导入程序模版.xlsx'."WWWDATA 对象的短文本
DEFAULT_FILE_NAME = '客户导入程序模版.xlsx'.
ENDCASE.
WINDOW_TITLE = '下载导入模板'.
CALL FUNCTION 'WWWDATA_IMPORT' "#EC *
EXPORTING
KEY = LS_WWWDATATAB
TABLES
MIME = LT_MIME
EXCEPTIONS
WRONG_OBJECT_TYPE = 1
IMPORT_ERROR = 2
OTHERS = 3.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
WINDOW_TITLE = WINDOW_TITLE
DEFAULT_EXTENSION = 'xlsx'
DEFAULT_FILE_NAME = DEFAULT_FILE_NAME
FILE_FILTER = 'EXCEL'
CHANGING
FILENAME = LV_FILENAME
PATH = LV_PATH
FULLPATH = LV_FULLPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
STOP.
ENDIF.
IF LV_FULLPATH IS NOT INITIAL.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = LV_FULLPATH
FILETYPE = 'BIN'
TABLES
DATA_TAB = LT_MIME.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_INDICATOR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p_1 text
* <-- p_2 text
*----------------------------------------------------------------------*
FORM FRM_INDICATOR USING P_INDEX.
"data declaration/进度条变量
CONSTANTS LC_STEP_WIDTH TYPE I VALUE 1." 5. "Width of each step
DATA: LV_STEP TYPE I VALUE LC_STEP_WIDTH, "current step
* lv_lines TYPE i, "total records to be processed
LV_LINESC TYPE C LENGTH 20, "total records to be processed of string
LV_INDEX TYPE I, "current records being processed
LV_PERCENTAGE TYPE F, "percentage of processed records
LV_REMAINING TYPE I, "remaining records to be processed
LV_TEXT TYPE C LENGTH 80, "info displayed at progress indicator
LV_START TYPE TIMESTAMP. "time stamp of process started
"process logic
LV_INDEX = P_INDEX.
"Initialization
IF V_FLAG IS INITIAL."sy-batch IS INITIAL.
V_FLAG = 'X'.
GET TIME STAMP FIELD LV_START.
ENDIF.
"show progress indicator/显示进度条
IF LV_LINES GE LC_STEP_WIDTH AND LV_INDEX >= LV_STEP.
ADD LC_STEP_WIDTH TO LV_STEP.
"当前占比%
LV_PERCENTAGE = LV_INDEX / LV_LINES * 100.
"剩余条目数
LV_REMAINING = LV_LINES - LV_INDEX.
"数字文本强制转换
WRITE LV_LINES TO LV_LINESC LEFT-JUSTIFIED.
WRITE LV_REMAINING TO LV_TEXT LEFT-JUSTIFIED.
"进度条(记录)
CONCATENATE TEXT-904 "'Processing remaining'(005)
LV_TEXT
'/'
LV_LINESC
TEXT-905"'items'(007)
INTO LV_TEXT SEPARATED BY SPACE.
"时间记录
PERFORM ESTIMATE_REMAINING_TIME USING LV_START
LV_INDEX
LV_LINES
CHANGING LV_TEXT.
"SAP GUI 进度条
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = LV_PERCENTAGE
TEXT = LV_TEXT.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ESTIMATE_REMAINING_TIME
*&---------------------------------------------------------------------*
* text 时间设定
*----------------------------------------------------------------------*
* -->P_LV_START text
* -->P_LV_INDEX text
* -->P_LV_LINES text
* <--P_LV_TEXT text
*----------------------------------------------------------------------*
FORM ESTIMATE_REMAINING_TIME
USING PV_START TYPE P "timestamp of start processing
PV_INDEX TYPE I "current record being processed
PV_TOTAL TYPE I "total number of records to be processed
CHANGING PV_TEXT TYPE C."text to display remaining time
"Data declaration/进度条时间变量
DATA:LV_CURRENT TYPE TIMESTAMP, "当前时间戳
LV_DURATION TYPE TZNTSTMPL, "持续时间
LV_REMAINING TYPE C LENGTH 15, "剩余时间
LV_HOURS TYPE C LENGTH 4, "换算小时数
LV_MINUTES TYPE N LENGTH 2, "换算分钟数
LV_SECONDS TYPE N LENGTH 2. "换算秒数
"Get current time stamp/获取当前时间戳
GET TIME STAMP FIELD LV_CURRENT.
"calculate execution time (so far)/计算持续时间
TRY.
CALL METHOD CL_ABAP_TSTMP=>SUBTRACT
EXPORTING
TSTMP1 = LV_CURRENT
TSTMP2 = PV_START
RECEIVING
R_SECS = LV_DURATION.
CATCH CX_PARAMETER_INVALID_RANGE . "#EC NO_HANDLER
CATCH CX_PARAMETER_INVALID_TYPE . "#EC NO_HANDLER
ENDTRY.
"estimate remaining execution time/剩余执行时间
LV_REMAINING = LV_DURATION / PV_INDEX * ( PV_TOTAL - PV_INDEX ).
"整小时数
LV_HOURS = LV_REMAINING DIV 3600.
"剩余分钟数
LV_REMAINING = LV_REMAINING MOD 3600.
"整分钟数
LV_MINUTES = LV_REMAINING DIV 60.
"剩余秒数
LV_SECONDS = LV_REMAINING MOD 60.
"append to the text/文本
CONCATENATE PV_TEXT
' ('
TEXT-906" 'estimated remaining time:'(006)
LV_HOURS
':'
LV_MINUTES
':'
LV_SECONDS
')'
INTO PV_TEXT.
ENDFORM. " ESTIMATE_REMAINING_TIME