S4 BP供应商批导
业务场景和目的
批量创建S4 BP供应商
本文重点讨论的业务场景:使用用户上传的EXCLE文件批量创建供应商,节省时间操作时间。
开发申请要求:给出前台(TCODE:BP)创建供应商相关数据,批量创建供应商。
前台操作,根据界面底部的消息提示一步一步输入BP供应商的相关数据。
2.1 BAPI_BUPA_CREATE_FROM_DATA (创建供应商主要数据)
2.1.1功能描述
根据供应商主数据创建供应商数据相关信息(主要数据)。
2.1.2调用代码示例
CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
EXPORTING
BUSINESSPARTNEREXTERN = GS_ALV-LIFNR
PARTNERCATEGORY = G_CAT
PARTNERGROUP = G_GRP
CENTRALDATA = IT_CENTR
* CENTRALDATAPERSON = T_CENTRALDATAPERSON
CENTRALDATAORGANIZATION = T_ORGANIZATION
ADDRESSDATA = IT_ADDR
IMPORTING
BUSINESSPARTNER = G_BP
TABLES
RETURN = I_RETURN
TELEFONDATA = I_TELEFONDATA
FAXDATA = I_FAXDATA
E_MAILDATA = I_E_MAILDATA
COMMUNICATIONNOTES = I_COMMUNICATIONNOTES
* ROLES = T_ROLES
.
2.2 BAPI_BUPA_BANKDETAIL_ADD(创建银行数据)
代码示例
CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_ADD'
EXPORTING
BUSINESSPARTNER = GS_ALV-LIFNR
BANKDETAILDATA = LS_BANKDETAIL
TABLES
RETURN = I_RETURN.
2.3 BAPI_BUPA_ROLE_ADD(角色添加)
对于前台控制页签下的税分类相关数据,如下图,需要用BAPI_BUTX_FRG0010_ADD才能添加进去。
调用代码示例:
G_ROLL = 'FLVN00'.
CALL FUNCTION 'BAPI_BUPA_ROLE_ADD'
EXPORTING
BUSINESSPARTNER = GS_ALV-LIFNR
BUSINESSPARTNERROLE = G_ROLL.
2.4 VMD_EI_API=>MAINTAIN_DIRECT_INPUT(采购数据、公司代码数据等)
调用代码示例
*&----调用类
CALL METHOD VMD_EI_API=>MAINTAIN_DIRECT_INPUT
EXPORTING
* IV_TEST_RUN = SPACE
IS_MASTER_DATA = LS_MAIN
IMPORTING
ES_MASTER_DATA_CORRECT = LS_COR1 "正确
ES_MESSAGE_CORRECT = LS_MESG2
ES_MASTER_DATA_DEFECTIVE = LS_COR2 "错误
ES_MESSAGE_DEFECTIVE = LS_MESG.
代码示例
REPORT ZMM020.
*----------------------------------------------------------------------*
* 表声明
*----------------------------------------------------------------------*
TABLES:SSCRFIELDS.
*----------------------------------------------------------------------*
* ALV参数声明
*----------------------------------------------------------------------*
DATA:GT_FIELDCAT TYPE LVC_T_FCAT, " 字段目录内表
GS_FIELDCAT TYPE LVC_S_FCAT, " 字段目录工作区
LAYOUT TYPE LVC_S_LAYO. " ALV布局
*----------------------------------------------------------------------*
* 数据声明
*----------------------------------------------------------------------*
TYPES:BEGIN OF TY_ALV,
LIFNR TYPE LFA1-LIFNR, " 供应商编号
BUKRS TYPE BUKRS, " 公司代码
EKORG TYPE EKORG, " 采购组织
KTOKK TYPE LFA1-KTOKK, " 帐户组
TITLE TYPE ADRC-TITLE, " 称谓 WD 2
NAME1 TYPE LFA1-NAME1, " 供应商名称
MCOD1 TYPE LFA1-MCOD1, " 搜索项1
STRAS TYPE LFA1-STRAS, " 地址
CITY1 TYPE LFA1-ORT01, " 城市
LAND1 TYPE LFA1-LAND1, " 国家 WD
REGION TYPE LFA1-ORT02, " 地区
PSTLZ TYPE LFA1-PSTLZ, " 邮政编码
SPRAS TYPE LFA1-SPRAS, " 语言 WD
NAME1_K TYPE KNVK-NAME1, " 联系人姓名 WD 地址注释
TELF1 TYPE LFA1-TELF1, " 第一个电话号
TELF2 TYPE LFA1-TELF2, " 移动电话
TELFX TYPE LFA1-TELFX, " 传真
TELBX TYPE C LENGTH 200, " 电子邮件
BANKS TYPE BANKS, " 银行国家代码
BANKL TYPE BANKL, " 银行代码
BANK TYPE C LENGTH 40, " 银行账号
BKREF TYPE BU_BKREF, " 银行细目的参考明细
KOINH TYPE LFBK-KOINH, " 账号持有人 WD
ACCNAME TYPE LFBK-EBPP_ACCNAME, " 账号名称 WD
AKONT TYPE AKONT, " 统驭科目
ZUAWA TYPE LFB1-ZUAWA, " 排序码
ZTERM1 TYPE LFB1-ZTERM, " 付款条件(财务)
REPRF TYPE LFB1-REPRF, " 检查双重发票或信贷凭单的标志 WD
WAERS TYPE LFM1-WAERS, " 财务订单货币
ZTERM TYPE LFB1-ZTERM, " 付款条件(后勤)
WEBRE TYPE LFM1-WEBRE, " 基于收货的发票验证
INCO1 TYPE LFM1-INCO1, " 贸易条款 WD
INCO2_L TYPE LFM1-INCO2_L, " 国际贸易条款位置 1 WD
* HOUSE_NUM1 TYPE ADDR1_DATA-HOUSE_NUM1, " 门牌号
* TEL_EXTENS TYPE LFA1-TELF1, " 电话分机
* FAX_EXTENS TYPE LFA1-TELFX, " 传真分机
* KRAUS TYPE LFA1-KRAUS, " 邓白氏码
* KUNNR TYPE KUNNR, " 客户
* VBUND TYPE VBUND, " 贸易伙伴
* STCD1 TYPE LFA1-STCD1, " 税务登记证号
* VERKF TYPE LFM1-VERKF, " 联系人
* TELF3 TYPE LFM1-TELF1, " 电话
* EKGRP TYPE LFM1-EKGRP, " 采购组
* TOGRU TYPE LFB1-TOGRU, " 容差组
* ZWELS TYPE LFB1-ZWELS, " 付款方式
ICON TYPE C LENGTH 4,
MESSAGE TYPE C LENGTH 360,
BOX TYPE C LENGTH 1,
END OF TY_ALV.
DATA:GT_ALV TYPE STANDARD TABLE OF TY_ALV,
GS_ALV TYPE TY_ALV.
DATA:GT_TEMP TYPE STANDARD TABLE OF TY_ALV,
GS_TEMP TYPE TY_ALV.
TYPES:BEGIN OF TY_TAB,
LIFNR TYPE LFA1-LIFNR, " 供应商编号
BUKRS TYPE BUKRS, " 公司代码
EKORG TYPE EKORG, " 采购组织
KTOKK TYPE LFA1-KTOKK, " 帐户组
TITLE TYPE ADRC-TITLE, " 称谓 WD W
NAME1 TYPE LFA1-NAME1, " 供应商名称
MCOD1 TYPE LFA1-MCOD1, " 搜索项1
STRAS TYPE LFA1-STRAS, " 地址
CITY1 TYPE LFA1-ORT01, " 城市
LAND1 TYPE LFA1-LAND1, " 国家 WD
REGION TYPE LFA1-ORT02, " 地区
PSTLZ TYPE LFA1-PSTLZ, " 邮政编码
SPRAS TYPE LFA1-SPRAS, " 语言 WD
NAME1_K TYPE KNVK-NAME1, " 联系人姓名 WD W
TELF1 TYPE LFA1-TELF1, " 第一个电话号
TELF2 TYPE LFA1-TELF2, " 移动电话
TELFX TYPE LFA1-TELFX, " 传真
TELBX TYPE C LENGTH 200, " 电子邮件
BANKS TYPE BANKS, " 银行国家代码
BANKL TYPE BANKL, " 银行代码
BANK TYPE C LENGTH 40, " 银行账号
BKREF TYPE BU_BKREF, " 银行细目的参考明细
KOINH TYPE LFBK-KOINH, " 账号持有人 WD
ACCNAME TYPE LFBK-EBPP_ACCNAME, "账号名称 WD
AKONT TYPE AKONT, " 统驭科目
ZUAWA TYPE LFB1-ZUAWA, " 排序码
ZTERM1 TYPE LFB1-ZTERM, " 付款条件(财务)
REPRF TYPE LFB1-REPRF, " 检查双重发票或信贷凭单的标志 WD
WAERS TYPE LFM1-WAERS, " 采购订单货币
ZTERM TYPE LFB1-ZTERM, " 付款条件(后勤)
WEBRE TYPE LFM1-WEBRE, " 基于收货的发票验证
INCO1 TYPE LFM1-INCO1, " 贸易条款 WD
INCO2_L TYPE LFM1-INCO2_L, " 国际贸易条款位置 1 WD
END OF TY_TAB.
DATA:I_TAB TYPE TY_TAB OCCURS 0 WITH HEADER LINE.
DATA:I_FILETABLE TYPE FILETABLE,
FILENAME TYPE STRING,
I_RC TYPE I.
DATA:I_FILENAME TYPE RLGRAP-FILENAME .
DATA:ITAB TYPE STANDARD TABLE OF ALSMEX_TABLINE WITH HEADER LINE. .
DATA:L_BANKN TYPE C LENGTH 40.
DATA:IT_HEADER TYPE BAPIBUS1006_HEAD OCCURS 0 WITH HEADER LINE.
DATA:IT_CENTR TYPE BAPIBUS1006_CENTRAL OCCURS 0 WITH HEADER LINE.
DATA:G_BP LIKE BAPIBUS1006_HEAD-BPARTNER.
DATA:G_CAT LIKE BAPIBUS1006_HEAD-PARTN_CAT VALUE '2',
G_GRP LIKE BAPIBUS1006_HEAD-PARTN_GRP.
DATA:LS_BANKDETAIL TYPE BAPIBUS1006_BANKDETAIL.
DATA:IT_GUID LIKE BUS000___I OCCURS 0 WITH HEADER LINE.
DATA:IT_CUSTO LIKE BUS000_EEW OCCURS 0 WITH HEADER LINE.
DATA:IT_ADDR LIKE BAPIBUS1006_ADDRESS OCCURS 0 WITH HEADER LINE.
DATA:I_TELETEXDATA LIKE BAPIADTTX OCCURS 0 WITH HEADER LINE.
DATA:I_TELEFONDATA LIKE BAPIADTEL OCCURS 0 WITH HEADER LINE.
DATA:I_FAXDATA LIKE BAPIADFAX OCCURS 0 WITH HEADER LINE.
DATA:I_E_MAILDATA LIKE BAPIADSMTP OCCURS 0 WITH HEADER LINE.
DATA:I_COMMUNICATIONNOTES LIKE BAPICOMREM OCCURS 0 WITH HEADER LINE.
DATA:I_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
DATA:I_CENTRALDATAPERSON LIKE BAPIBUS1006_CENTRAL_PERSON OCCURS 0 WITH
HEADER LINE.
DATA:T_CENTRALDATAPERSON LIKE BAPIBUS1006_CENTRAL_PERSON OCCURS 0 WITH
HEADER LINE.
DATA:T_ORGANIZATION LIKE BAPIBUS1006_CENTRAL_ORGAN OCCURS 0 WITH HEADER LINE.
DATA:I_TIMES TYPE N LENGTH 3 VALUE 1.
DATA:T_ROLES TYPE BAPIBUSISB990_BPROLES OCCURS 0 WITH HEADER LINE.
*****
DATA: G_ROLL TYPE BAPIBUS1006_HEAD-PARTNERROLE.
****
FIELD-SYMBOLS: <FS>.
DATA:MESTX TYPE BAPIRET2.
DATA:IT_ERROR_MESSAGE TYPE ESP1_MESSAGE_TAB_TYPE WITH HEADER LINE.
DATA:V_LINENO TYPE MESG-ZEILE.
DATA: LT_RETURN TYPE BAPIRET2 OCCURS 0 WITH HEADER LINE,
LIFNR TYPE LIFNR.
DATA:LV_FLG,
LV_IF03 TYPE C ."是否主账号与支付账号相同
DATA:LS_MAIN TYPE VMDS_EI_MAIN,
LS_MAIN1 TYPE VMDS_EI_MAIN,
LS_MESG TYPE CVIS_MESSAGE,
LT_MSG TYPE BAPIRET2_T,
LWA_MSG TYPE BAPIRET2,
LT_VEND TYPE VMDS_EI_EXTERN_T, "扩展数据
LWA_VEND TYPE VMDS_EI_EXTERN,
LT_COMPANY TYPE VMDS_EI_COMPANY_T, "公司代码数据
LWA_COMPANY TYPE VMDS_EI_COMPANY,
LT_BANKDETAILS TYPE CVIS_EI_BANKDETAIL_T, "银行
LWA_BANKDETAILS TYPE CVIS_EI_CVI_BANKDETAIL,
LT_PURCHASING TYPE VMDS_EI_PURCHASING_T, "外部接口:商业组织
LWA_PURCHASING TYPE VMDS_EI_PURCHASING,
LT_FUNCTIONS TYPE VMDS_EI_FUNCTIONS_T, "外部界面:合作伙伴角色
LWA_FUNCTIONS TYPE VMDS_EI_FUNCTIONS.
DATA:LW_LFA1 TYPE LFA1.
DATA:L_FLAG TYPE C VALUE '',
L_TASK TYPE VMD_EI_OBJECT_TASK VALUE 'M'.
DATA :LS_MESG2 TYPE CVIS_MESSAGE,
LS_COR1 TYPE VMDS_EI_MAIN,
LS_COR2 TYPE VMDS_EI_MAIN.
DATA LT_PHONE TYPE CVIS_EI_PHONE_T."电话
DATA LW_PHONE TYPE CVIS_EI_PHONE_STR.
DATA LT_FAX TYPE CVIS_EI_FAX_T."传真
DATA LW_FAX TYPE CVIS_EI_FAX_STR.
DATA LT_SMTP TYPE CVIS_EI_SMTP_T."邮件
DATA LW_SMTP TYPE CVIS_EI_SMTP_STR.
DATA LT_REMARKS TYPE CVIS_EI_REM_T."备注
DATA LW_REMARKS TYPE CVIS_EI_REM.
DATA LT_EXT TYPE VMDS_EI_EXTERN_T.
DATA LW_EXT TYPE VMDS_EI_EXTERN.
DATA L_LIFNR TYPE LIFNR.
DATA L_BAHNS TYPE LFA1-BAHNS.
*--进度条
"进度条标志
DATA:V_FLAG TYPE C.
"进度条变量
DATA:V_TABIX TYPE I.
"上传模板条目数
DATA:LV_LINES TYPE I.
*----------------------------------------------------------------------*
* 选择屏幕
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK SC1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_FILE TYPE RLGRAP-FILENAME MEMORY ID M1.
SELECTION-SCREEN END OF BLOCK SC1.
SELECTION-SCREEN FUNCTION KEY 1. "在初始屏幕上出现下载按钮
*----------------------------------------------------------------------*
* INITIALIZATION事件
*----------------------------------------------------------------------*
INITIALIZATION.
SSCRFIELDS-FUNCTXT_01 = '@[email protected]下载导入模板'.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN事件
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = '选择数据文件'
MULTISELECTION = SPACE
FILE_FILTER = 'Excel Files(*.xls)|*.xls;*.XLS;*.xlsx;*.XLSX'
CHANGING
FILE_TABLE = I_FILETABLE
RC = I_RC
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC = 0 AND I_RC = 1. "判断是否成功打开
READ TABLE I_FILETABLE INTO P_FILE INDEX 1.
FILENAME = P_FILE.
ENDIF.
AT SELECTION-SCREEN.
IF SSCRFIELDS-UCOMM = 'FC01'.
PERFORM DOWNLOAD_TEMPLATE. "下载SWM0上传过的模版
ENDIF.
*----------------------------------------------------------------------*
* START-OF-SELECTION事件
*----------------------------------------------------------------------*
START-OF-SELECTION.
IF P_FILE IS INITIAL.
MESSAGE '请选择文件!' TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ELSE.
FILENAME = P_FILE.
PERFORM UPLOAD_DATA. "上载数据
PERFORM FRM_SET_LAYOUT. " 设置布局
PERFORM FRM_SET_FIELDCAT. " 设置字段目录
PERFORM FRM_DISPLAY_DATA. " 展示数据
CLEAR:I_FILETABLE.
ENDIF.
*&---------------------------------------------------------------------*
*& 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 = 'ZMM020'.
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 UPLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UPLOAD_DATA .
I_FILENAME = FILENAME.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = I_FILENAME
I_BEGIN_COL = 1
I_BEGIN_ROW = 2
I_END_COL = 255
I_END_ROW = 65535
TABLES
INTERN = ITAB
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
IF ITAB[] IS NOT INITIAL.
LOOP AT ITAB.
ON CHANGE OF ITAB-ROW.
IF SY-TABIX NE 1.
APPEND I_TAB.
CLEAR I_TAB.
ENDIF.
ENDON.
ASSIGN COMPONENT ITAB-COL OF STRUCTURE I_TAB TO <FS>.
<FS> = ITAB-VALUE.
ENDLOOP.
APPEND I_TAB.
CLEAR I_TAB.
ENDIF.
LOOP AT I_TAB.
CLEAR GS_ALV.
MOVE-CORRESPONDING I_TAB TO GS_ALV.
APPEND GS_ALV TO GT_ALV.
CLEAR I_TAB.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_LAYOUT .
CLEAR LAYOUT.
LAYOUT-BOX_FNAME = 'BOX'.
LAYOUT-SEL_MODE = 'A'. "选择行模式
LAYOUT-CWIDTH_OPT = 'X'. "优化列宽设置
LAYOUT-ZEBRA = 'X'. "设置斑马线
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT .
CLEAR:GS_FIELDCAT,GT_FIELDCAT.
*&--field宏设置
DEFINE FC.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-scrtext_l = &2.
gs_fieldcat-ref_table = &3.
gs_fieldcat-ref_field = &4.
gs_fieldcat-no_zero = &5.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
FC 'ICON' '预警信号灯' '' '' ''.
FC 'MESSAGE' '消息' '' '' ''.
FC 'LIFNR' '供应商编号' '' '' 'X'.
FC 'BUKRS' '公司代码' '' '' ''.
FC 'EKORG' '采购组织' '' '' ''.
FC 'KTOKK' '帐户组' '' '' ''.
FC 'TITLE' '称谓 ' '' '' ''.
FC 'NAME1' '供应商名称' '' '' ''.
FC 'MCOD1' '搜索项' '' '' ''.
FC 'STRAS' '地址' '' '' ''.
FC 'CITY1' '城市' '' '' ''.
FC 'LAND1' '国家' '' '' ''.
FC 'REGION' '地区' '' '' ''.
FC 'PSTLZ' '邮政编码' '' '' ''.
FC 'SPRAS' '语言' '' '' ''.
FC 'NAME1_K' '联系人姓名' '' '' ''.
FC 'TELF1' '第一个电话号' '' '' ''.
FC 'TELF2' '移动电话' '' '' ''.
FC 'TELFX' '传真' '' '' ''.
FC 'TELBX' '电子邮件' '' '' ''.
FC 'BANKS' '银行国家代码' '' '' ''.
FC 'BANKL' '银行代码' '' '' ''.
FC 'BANK' '银行账户' '' '' ''.
FC 'BKREF' '银行细目的参考明细' '' '' ''.
FC 'KOINH' '账号持有人' '' '' ''.
FC 'ACCNAME' '账号名称' '' '' ''.
FC 'AKONT' '统驭科目' '' '' ''.
FC 'ZUAWA' '排序码' '' '' ''.
FC 'ZTERM1' '付款条件(财务)' '' '' ''.
FC 'REPRF' '检查双重发票或信贷凭单的标志)' '' '' ''.
FC 'WAERS' '采购订单货币' '' '' ''.
FC 'ZTERM' '付款条件(后勤)' '' '' ''.
FC 'WEBRE' '基于收货的发票校验' '' '' ''.
FC 'INCO1' '贸易条款' '' '' ''.
FC 'INCO2_L' '国际贸易条款位置' '' '' ''.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_DATA .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'FRM_SET_STATUS'
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
IS_LAYOUT_LVC = LAYOUT
IT_FIELDCAT_LVC = GT_FIELDCAT
TABLES
T_OUTTAB = GT_ALV
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_STATUS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STANDARD_FULLSCREEN' .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
"实时更新内表数据
DATA:REF_GRID TYPE REF TO CL_GUI_ALV_GRID.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF_GRID. " 获取全局变量
CALL METHOD REF_GRID->CHECK_CHANGED_DATA. " 获取响应事件
RS_SELFIELD-REFRESH = 'X'.
CASE R_UCOMM.
WHEN 'CREATE'.
PERFORM FRM_CALL_BAPI.
ENDCASE.
"刷新ALV
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF_GRID. " 获取全局变量
CALL METHOD REF_GRID->CHECK_CHANGED_DATA. " 获取响应事件
RS_SELFIELD-REFRESH = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CALL_BAPI
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_CALL_BAPI .
DATA:L_PARTNER TYPE BP001-PARTNER.
DATA:BUSINESSPARTNEREXTERN TYPE BU_PARTNER.
CLEAR:GS_TEMP,GT_TEMP.
DATA:LT_REMARKS TYPE CVIS_EI_REM_T,
LS_REMARKS TYPE CVIS_EI_REM.
GT_TEMP = GT_ALV.
* DELETE GT_TEMP WHERE BOX <> 'X'. "导入所有
*&---进度条使用标志
CLEAR:V_FLAG.
*&---循环导入
V_TABIX = 0.
DESCRIBE TABLE GT_TEMP LINES LV_LINES .
IF GT_TEMP IS INITIAL.
MESSAGE '请选择一行进行导入!' TYPE 'E'.
ELSE.
LOOP AT GT_ALV INTO GS_ALV WHERE BOX = 'X'.
*----------------进度条----------------------------------------------------*
*&---当前条目
V_TABIX = V_TABIX + 1.
*&---进度条
* WAIT UP TO 3 SECONDS.
PERFORM FRM_INDICATOR USING V_TABIX.
CLEAR:IT_CENTR,IT_CENTR[],T_ORGANIZATION,T_ORGANIZATION[],
IT_ADDR,IT_ADDR[],I_RETURN,I_RETURN[],
I_TELEFONDATA,I_TELEFONDATA[],I_FAXDATA,I_FAXDATA[],
I_E_MAILDATA,I_E_MAILDATA[].
SELECT SINGLE PARTNER INTO L_PARTNER FROM BP001
WHERE PARTNER = GS_ALV-LIFNR.
IF SY-SUBRC <> 0.
G_GRP = GS_ALV-KTOKK. " 分组
IT_CENTR-TITLE_KEY = '0003'. " 地址关键字的表格
IT_CENTR-SEARCHTERM1 = GS_ALV-MCOD1. " 搜索项1
APPEND IT_CENTR.
T_ORGANIZATION-NAME1 = GS_ALV-NAME1. " 供应商名称
APPEND T_ORGANIZATION.
IT_ADDR-COUNTRY = GS_ALV-LAND1 . " 国家代码
IT_ADDR-CITY = GS_ALV-CITY1. " 城市
IT_ADDR-REGION = GS_ALV-REGION. " 地区
IT_ADDR-STREET = GS_ALV-STRAS. " 街道
* IT_ADDR-HOUSE_NO = GS_ALV-HOUSE_NUM1. " 门牌号
IT_ADDR-POSTL_COD1 = GS_ALV-PSTLZ. " 邮政编码
IT_ADDR-LANGU = '1'.
APPEND IT_ADDR.
IT_ADDR-COUNTRY = GS_ALV-LAND1 . " 国家代码
I_TELEFONDATA-TELEPHONE = GS_ALV-TELF1. " 办公电话
* I_TELEFONDATA-EXTENSION = GS_ALV-TEL_EXTENS. " 电话分机
APPEND I_TELEFONDATA.
CLEAR I_TELEFONDATA.
IT_ADDR-COUNTRY = GS_ALV-LAND1 . " 国家代码
I_FAXDATA-FAX = GS_ALV-TELFX. " 传真
* I_FAXDATA-EXTENSION = GS_ALV-FAX_EXTENS. " 传真分机
APPEND I_FAXDATA.
CLEAR I_FAXDATA..
I_E_MAILDATA-E_MAIL = GS_ALV-TELBX. " EMAIL地址
APPEND I_E_MAILDATA.
CLEAR I_E_MAILDATA.
IT_ADDR-COUNTRY = GS_ALV-LAND1 . " 国家代码
I_TELEFONDATA-TELEPHONE = GS_ALV-TELF2. " 供应商手机
APPEND I_TELEFONDATA.
CLEAR I_TELEFONDATA.
I_COMMUNICATIONNOTES[] = VALUE #( ( COMM_TYPE = 'TEL'
LANGU = SY-LANGU
COMM_NOTES = GS_ALV-NAME1_K
)
).
CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
EXPORTING
BUSINESSPARTNEREXTERN = GS_ALV-LIFNR
PARTNERCATEGORY = G_CAT
PARTNERGROUP = G_GRP
CENTRALDATA = IT_CENTR
* CENTRALDATAPERSON = T_CENTRALDATAPERSON
CENTRALDATAORGANIZATION = T_ORGANIZATION
ADDRESSDATA = IT_ADDR
IMPORTING
BUSINESSPARTNER = G_BP
TABLES
RETURN = I_RETURN
TELEFONDATA = I_TELEFONDATA
FAXDATA = I_FAXDATA
E_MAILDATA = I_E_MAILDATA
COMMUNICATIONNOTES = I_COMMUNICATIONNOTES
* ROLES = T_ROLES
.
READ TABLE I_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC = 0.
GS_ALV-ICON = ICON_RED_LIGHT.
GS_ALV-MESSAGE = I_RETURN-MESSAGE.
ELSE.
READ TABLE I_RETURN WITH KEY TYPE = 'A'.
IF SY-SUBRC = 0.
GS_ALV-ICON = ICON_RED_LIGHT.
GS_ALV-MESSAGE = I_RETURN-MESSAGE.
ELSE.
**银行数据
GS_ALV-LIFNR = G_BP.
CLEAR LS_BANKDETAIL.
IF GS_ALV-BANK IS NOT INITIAL.
LS_BANKDETAIL-BANK_CTRY = GS_ALV-BANKS. " 银行国家代码
LS_BANKDETAIL-BANK_KEY = GS_ALV-BANKL. " 银行代码
LS_BANKDETAIL-BANK_ACCT = GS_ALV-BANK. " 银行帐户号码
LS_BANKDETAIL-BANK_REF = GS_ALV-BKREF. " 银行帐户的参考规定
LS_BANKDETAIL-ACCOUNTHOLDER = GS_ALV-KOINH."账号持有人 WD
LS_BANKDETAIL-BANKACCOUNTNAME = GS_ALV-ACCNAME . "账号名称 WD
IF STRLEN( GS_ALV-BANK ) GT 18.
CLEAR L_BANKN.
L_BANKN = GS_ALV-BANK.
SHIFT L_BANKN BY 18 PLACES.
CONDENSE L_BANKN.
LS_BANKDETAIL-BANK_REF = L_BANKN.
ENDIF.
CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_ADD'
EXPORTING
BUSINESSPARTNER = GS_ALV-LIFNR
BANKDETAILDATA = LS_BANKDETAIL
TABLES
RETURN = I_RETURN.
READ TABLE I_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC = 0.
GS_ALV-ICON = ICON_RED_LIGHT.
GS_ALV-MESSAGE = I_RETURN.
ENDIF.
ENDIF.
G_ROLL = 'FLVN00'.
CALL FUNCTION 'BAPI_BUPA_ROLE_ADD'
EXPORTING
BUSINESSPARTNER = GS_ALV-LIFNR
BUSINESSPARTNERROLE = G_ROLL.
G_ROLL = 'FLVN01'.
CALL FUNCTION 'BAPI_BUPA_ROLE_ADD'
EXPORTING
BUSINESSPARTNER = GS_ALV-LIFNR
BUSINESSPARTNERROLE = G_ROLL.
ENDIF.
ENDIF.
ELSE.
GS_ALV-ICON = ICON_RED_LIGHT.
GS_ALV-MESSAGE = '合作伙伴已存在,只能更新!'.
ENDIF.
IF GS_ALV-ICON = ICON_RED_LIGHT.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
WAIT UP TO '0.5' SECONDS.
CLEAR:L_LIFNR,LS_MAIN,L_BAHNS.
CLEAR:LS_COR1, LS_MESG2, LS_COR2 , LS_MESG,LV_FLG.
CLEAR:LS_MAIN1 ,LS_MESG,LT_MSG,LWA_MSG,LT_VEND,LWA_VEND,
LT_COMPANY,LWA_COMPANY,LT_BANKDETAILS, LWA_BANKDETAILS,
LT_PURCHASING,LWA_PURCHASING,LT_FUNCTIONS, LWA_FUNCTIONS.
L_LIFNR = GS_ALV-LIFNR.
* IF I_TAB-KTOKK = 'Z003'.
* I_TAB-KTOKK = 'Z006'.
* ENDIF.
LWA_VEND-HEADER-OBJECT_INSTANCE-LIFNR = GS_ALV-LIFNR.
LWA_VEND-CENTRAL_DATA-CENTRAL-DATA-KTOKK = GS_ALV-KTOKK."账户组
LWA_VEND-CENTRAL_DATA-CENTRAL-DATAX-KTOKK = 'X'.
* 主数据
LWA_VEND-HEADER-OBJECT_TASK = L_TASK.
* LWA_VEND-CENTRAL_DATA-CENTRAL-DATA-STENR = GS_ALV-STCD1." 税号
LWA_VEND-CENTRAL_DATA-CENTRAL-DATAX-STENR = 'X'.
* LWA_VEND-CENTRAL_DATA-CENTRAL-DATA-KRAUS = GS_ALV-KRAUS. " 邓白氏码
LWA_VEND-CENTRAL_DATA-CENTRAL-DATAX-KRAUS = 'X'.
*地址数据
* IF GS_ALV-KUNNR IS NOT INITIAL.
* LWA_VEND-CENTRAL_DATA-CENTRAL-DATA-KUNNR = GS_ALV-KUNNR.
* LWA_VEND-CENTRAL_DATA-CENTRAL-DATAX-KUNNR = 'X'.
* ENDIF.
* IF GS_ALV-VBUND IS NOT INITIAL.
* LWA_VEND-CENTRAL_DATA-CENTRAL-DATA-VBUND = GS_ALV-VBUND.
* LWA_VEND-CENTRAL_DATA-CENTRAL-DATAX-VBUND = 'X'.
* ENDIF.
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA-LANGU = GS_ALV-SPRAS."语言
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-LANGU = 'X'.
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA-SORT1 = GS_ALV-MCOD1."简称
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-SORT1 = 'X'.
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA-COUNTRY = 'CN'."国家
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-COUNTRY = 'X'.
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA-REGION = GS_ALV-REGION."地区
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-REGION = 'X'.
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA-CITY = GS_ALV-CITY1."城市
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-CITY = 'X'.
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA-POSTL_COD1 = GS_ALV-PSTLZ. "邮政编码
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-POSTL_COD1 = 'X'.
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA-STREET = GS_ALV-STRAS."地址
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-STREET = 'X'.
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATA-NAME = GS_ALV-NAME1. "名称
LWA_VEND-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-NAME = 'X'.
*地址注释
CLEAR LS_REMARKS.
REFRESH LT_REMARKS.
LS_REMARKS-TASK = 'I'.
LS_REMARKS-DATA-LANGU = GS_ALV-SPRAS.
LS_REMARKS-DATA-ADR_NOTES = GS_ALV-NAME1_K.
LS_REMARKS-DATAX-LANGU = 'X'.
LS_REMARKS-DATAX-ADR_NOTES = 'X'.
APPEND LS_REMARKS TO LT_REMARKS.
LWA_VEND-CENTRAL_DATA-ADDRESS-REMARK-CURRENT_STATE = 'X'.
LWA_VEND-CENTRAL_DATA-ADDRESS-REMARK-REMARKS = LT_REMARKS.
I_TELEFONDATA-R_3_USER = '3'. "
APPEND I_TELEFONDATA.
CLEAR I_TELEFONDATA.
* 公司代码数据
LWA_COMPANY-TASK = L_TASK.
LWA_COMPANY-DATA_KEY-BUKRS = GS_ALV-BUKRS. " 公司代码
LWA_COMPANY-DATA-AKONT = GS_ALV-AKONT. " 统驭科目
LWA_COMPANY-DATA-ZUAWA = GS_ALV-ZUAWA. " 排序码
LWA_COMPANY-DATA-ZTERM = GS_ALV-ZTERM1. " 付款条件
* LWA_COMPANY-DATA-ZWELS = GS_ALV-ZWELS. " 付款方式
* LWA_COMPANY-DATA-REPRF = 'X'. " 双重发票校验
* LWA_COMPANY-DATA-TOGRU = GS_ALV-TOGRU. " 单独收付标识
LWA_COMPANY-DATA-REPRF = GS_ALV-REPRF."检查双重发票或信贷凭单的标志 WD
LWA_COMPANY-DATAX-AKONT = 'X'.
LWA_COMPANY-DATAX-ZUAWA = 'X'.
LWA_COMPANY-DATAX-ZTERM = 'X'.
LWA_COMPANY-DATAX-ZWELS = 'X'.
LWA_COMPANY-DATAX-REPRF = 'X'.
LWA_COMPANY-DATAX-TOGRU = 'X'.
APPEND LWA_COMPANY TO LT_COMPANY.
LWA_VEND-COMPANY_DATA-COMPANY = LT_COMPANY.
*采购数据
LWA_PURCHASING-TASK = L_TASK.
LWA_PURCHASING-DATA_KEY-EKORG = GS_ALV-EKORG.
LWA_PURCHASING-DATA-WAERS = GS_ALV-WAERS. " 货币
LWA_PURCHASING-DATA-ZTERM = GS_ALV-ZTERM. " 付款条件
* LWA_PURCHASING-DATA-VERKF = GS_ALV-VERKF. " 销售人
* LWA_PURCHASING-DATA-TELF1 = GS_ALV-TELF1. " 电话
LWA_PURCHASING-DATA-WEBRE = GS_ALV-WEBRE. " 标识:基于收货的发票验证
* LWA_PURCHASING-DATA-EKGRP = GS_ALV-EKGRP. " 采购组
LWA_PURCHASING-DATA-INCO1 = GS_ALV-INCO1. "贸易条款 WD
LWA_PURCHASING-DATA-INCO2_L = GS_ALV-INCO2_L. "国际贸易条款位置 1 WD
LWA_PURCHASING-DATAX-WAERS = 'X'.
LWA_PURCHASING-DATAX-ZTERM = 'X'.
LWA_PURCHASING-DATAX-VERKF = 'X'.
LWA_PURCHASING-DATAX-TELF1 = 'X'.
LWA_PURCHASING-DATAX-WEBRE = 'X'.
LWA_PURCHASING-DATAX-EKGRP = 'X'.
LWA_PURCHASING-DATAX-INCO1 = 'X'. "贸易条款 WD
LWA_PURCHASING-DATAX-INCO2_L = 'X'."国际贸易条款位置 1 WD
*功能
LWA_FUNCTIONS-TASK = L_TASK.
LWA_FUNCTIONS-DATA_KEY-PARVW = 'BA'.
LWA_FUNCTIONS-DATA-PARTNER = L_LIFNR. " SD业务合作伙伴号
LWA_FUNCTIONS-DATAX-PARTNER = 'X'. " SD业务合作伙伴号
APPEND LWA_FUNCTIONS TO LT_FUNCTIONS.
LWA_FUNCTIONS-TASK = L_TASK.
LWA_FUNCTIONS-DATA_KEY-PARVW = 'LF'.
LWA_FUNCTIONS-DATA-PARTNER = L_LIFNR. "SD业务合作伙伴号
LWA_FUNCTIONS-DATAX-PARTNER = 'X'. "SD业务合作伙伴号
APPEND LWA_FUNCTIONS TO LT_FUNCTIONS.
LWA_FUNCTIONS-TASK = L_TASK.
LWA_FUNCTIONS-DATA_KEY-PARVW = 'RS'.
LWA_FUNCTIONS-DATA-PARTNER = L_LIFNR. "SD业务合作伙伴号
LWA_FUNCTIONS-DATAX-PARTNER = 'X'. "SD业务合作伙伴号
APPEND LWA_FUNCTIONS TO LT_FUNCTIONS.
LWA_PURCHASING-FUNCTIONS-FUNCTIONS = LT_FUNCTIONS.
APPEND LWA_PURCHASING TO LT_PURCHASING.
LWA_VEND-PURCHASING_DATA-PURCHASING = LT_PURCHASING.
APPEND LWA_VEND TO LT_VEND.
LS_MAIN-VENDORS = LT_VEND.
*&----调用类
CALL METHOD VMD_EI_API=>MAINTAIN_DIRECT_INPUT
EXPORTING
* IV_TEST_RUN = SPACE
IS_MASTER_DATA = LS_MAIN
IMPORTING
ES_MASTER_DATA_CORRECT = LS_COR1 "正确
ES_MESSAGE_CORRECT = LS_MESG2
ES_MASTER_DATA_DEFECTIVE = LS_COR2 "错误
ES_MESSAGE_DEFECTIVE = LS_MESG.
LT_MSG = LS_MESG-MESSAGES.
DELETE LT_MSG WHERE TYPE = 'W'.
LOOP AT LT_MSG INTO LWA_MSG.
IF LWA_MSG-TYPE = 'E' OR LWA_MSG-TYPE = 'A'.
LV_FLG = 'X'.
CONCATENATE LWA_MSG-MESSAGE_V1 LWA_MSG-MESSAGE_V2 LWA_MSG-MESSAGE_V3 LWA_MSG-MESSAGE_V4 INTO GS_ALV-MESSAGE.
ENDIF.
ENDLOOP.
IF LV_FLG IS INITIAL.
* IF GS_ALV-VBUND IS NOT INITIAL.
* UPDATE BP001 SET VBUND = GS_ALV-VBUND WHERE PARTNER = GS_ALV-LIFNR.
* ENDIF.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
GS_ALV-ICON = ICON_GREEN_LIGHT.
LT_EXT = LS_COR1-VENDORS .
READ TABLE LT_EXT INTO LW_EXT INDEX 1.
GS_ALV-LIFNR = LW_EXT-HEADER-OBJECT_INSTANCE-LIFNR.
CONCATENATE '供应商' GS_ALV-LIFNR '创建成功' INTO GS_ALV-MESSAGE.
ELSE.
GS_ALV-LIFNR = ''.
GS_ALV-ICON = ICON_RED_LIGHT.
ROLLBACK WORK.
ENDIF.
ENDIF.
MODIFY GT_ALV FROM GS_ALV.
CLEAR GS_ALV.
ENDLOOP.
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