ABAP-批导供应商主数据

*&---------------------------------------------------------------------*
*& Report ZMMR_033
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmmr_033.

TABLES sscrfields.
INCLUDE <list>.
INCLUDE <icon>.

CONSTANTS :gc_objid TYPE wwwdatatab-objid VALUE 'ZMMR_033'.

CONSTANTS : gc_black  TYPE char04 VALUE '@EB@',
            gc_red    TYPE char04 VALUE '@0A@',
            gc_green  TYPE char04 VALUE '@08@',
            gc_yellow TYPE char04 VALUE '@09@'.

CONSTANTS: gc_begin_col TYPE VALUE '2',
           gc_begin_row TYPE VALUE '7',
           gc_end_col   TYPE VALUE '36',
           gc_end_row   TYPE VALUE '50000'.

DATABEGIN OF gt_alv OCCURS 0,

*        ZALTKN         TYPE LFB1-ALTKN,       "旧供应商编号
        partner(10),                          "供应商代码-自动创建
        title_key(4),                         " 称谓
        bu_group(4),                          "业务伙伴分组
*        ktokk(4),                             " 账户组
        name_org1(40),                        "名称1
        name_org2(40),                        "名称2
        bu_sort1(20),                         "检索项:测试客户-wtx
*        BU_SORT2(20),                         "检索项:测试客户-wtx
        land1(3),                             "国家:CN  中国
        regio(3),                             "地区
        city1(40),                            "城市:杭州
        street(60),                           "地址:街道名称-客户测试
        post_code1(10),                       "邮政编码:311107
*        LANGU(2),                             "语言:ZH 中文
        tel_number(30),                       "电话:0571-86397805
*        TEL_EXTENS(10),                       "电话-分机
        mob_number(30),                       "移动电话:159581640000
        fax_number(30),                       "传真
*        FAX_EXTENS(10),                       "传真-分机
        smtp_addr(241),                       "E-mail:494066891@qq.com
        taxnum(20),                           "业务伙伴税号

*        banks(3),                         "银行国家
*        bankl(15),                        "银行代码
*        bankn(38),                          "银行账号:
*        BKONT          TYPE BU_BKONT, "银行控制码
*        koinh(60),                            "账户持有人:
*        bkdsc          TYPE bus000flds-bkdsc,        "银行名称

        ekorg(4),                             "采购组织:1020 单泵
        waers(5),                             "币种:CNY  中国人民币;
        zterm1(4),                            "采购付款条件
        webre(1),"基于收货的发票校验
        lebre(1),                             " 基于服务的发票校验
        kalsk(2)"方案组
        verkf(30),                            "供应商联系人
        telf1(16),                            "供应商电话

        bukrs(4),                             "公司代码
        akont(10),                            "统驭科目:
        zterm2(4),                             "财务付款条件:
        zuawa(3),                             "排序码(3):
        dzwels(10),                           "付款方式
*        hbkid          TYPE lfb1-hbkid,               "开户银行
        reprf          TYPE lfb1-reprf,                "检查重复发票
*        fdgrv          TYPE lfb1-fdgrv,                "计划组
        sel            TYPE c,                "选择标记
        icon_a         TYPE char10,           "指示灯
        remark         TYPE char255,          "备注(返回的消息)
*        KTONR(8) ,                            "采购伙伴功能
*        EKGRP(3),                             "采购组
        lfa1f(1),                           "基本视图
        lfm1f(1),                           "销售视图
        lfb1f(1),                           "公司视图
      END OF gt_alv.

DATA: gs_alv         LIKE LINE OF gt_alv,
      g_function_key TYPE smp_dyntxt.         "功能按钮

DATA: gv_err TYPE c.
DATA: gv_remark TYPE string.


DATA: g_partner TYPE bu_partner.       "业务伙伴编号

*DATA: L_BPARTNER                    TYPE BAPIBUS1006_HEAD-BPARTNER,                       "业务伙伴编码
*
*      L_PARTN_CAT                   TYPE BAPIBUS1006_HEAD-PARTN_CAT,                      "业务伙伴类别
*      L_PARTN_GRP                   TYPE BAPIBUS1006_HEAD-PARTN_GRP,                      "业务伙伴分组
**        L_CONTROLDUPLICATEMESSAGE     TYPE BAPIBUS1006_HEAD-CONTROLDUPLICATEMESSAGE,
*
*      LS_CENTRAL                    TYPE BAPIBUS1006_CENTRAL,                             "一般 BP 数据,与业务伙伴类别无关
**        LS_CENTRAL_PERSON             TYPE BAPIBUS1006_CENTRAL_PERSON,
*      LS_CENTRAL_ORGAN              TYPE BAPIBUS1006_CENTRAL_ORGAN,                       "SAP BP: 组织数据的 BAPI 结构
**        LS_CENTRAL_GROUP              TYPE BAPIBUS1006_CENTRAL_GROUP,
*      LS_ADDRESS                    TYPE BAPIBUS1006_ADDRESS,                             "SAP BP: 地址数据的 BAPI 结构
*
*      LS_BAPIBUS1006_INDUSTRYSECTOR TYPE BAPIBUS1006_INDUSTRYSECTOR,
*
*      LS_BAPIBUS1006_BANKDETAIL     TYPE BAPIBUS1006_BANKDETAIL,
*
*      WA_CUSTOMER                   TYPE CMDS_EI_EXTERN,
*      LT_MASTER_DATA                TYPE VMDS_EI_MAIN,
*      LS_MASTER_DATA                TYPE VMDS_EI_EXTERN,
*      LS_COMPANY                    TYPE VMDS_EI_COMPANY,
*      LS_PURCHASING                 TYPE VMDS_EI_PURCHASING,
*      LS_FUNCTIONS                  TYPE VMDS_EI_FUNCTIONS,
**        LT_FUNCTIONS                  TYPE VMDS_EI_FUNCTIONS_T,
*
*      WA_CUSTOMERS                  TYPE CMDS_EI_MAIN,
*      WA_CORRECT                    TYPE CMDS_EI_MAIN,
*      WA_DEFECTIVE                  TYPE CMDS_EI_MAIN,
*      WA_MES_CORRECT                TYPE CVIS_MESSAGE,
*      WA_MES_ERROR                  TYPE CVIS_MESSAGE,
*
*      L1                            TYPE VMDS_EI_MAIN,
*      L2                            TYPE CVIS_MESSAGE,
*      L3                            TYPE VMDS_EI_MAIN,
*      L4                            TYPE CVIS_MESSAGE,
*      L5                            TYPE CVIS_MESSAGE,
*
*      LT_BAPIADTEL                  LIKE BAPIADTEL  OCCURS 0 WITH HEADER LINE,            "电话号码的 BAPI 结构(办公地址服务)
*      LT_BAPIADFAX                  LIKE BAPIADFAX  OCCURS 0 WITH HEADER LINE,            "传真号码的 BAPI 结构(办公地址服务)
*      LT_BAPIADSMTP                 LIKE BAPIADSMTP OCCURS 0 WITH HEADER LINE,            "电子邮件地址的 BAPI 结构(办公地址服务)
*      LT_GUID                       LIKE BUS000___I OCCURS 0 WITH HEADER LINE,            "CBP: 一般数据和状态信息
*      LT_CUSTO                      LIKE BUS000_EEW OCCURS 0 WITH HEADER LINE,            "SAP BP: 传输用于 CI 包括 BP 扩展的结构
*      LT_RETURN1                    LIKE BAPIRET2   OCCURS 0 WITH HEADER LINE,            "返回参数
*      LT_RETURN2                    LIKE BAPIRET2   OCCURS 0 WITH HEADER LINE,            "返回参数
*      LT_RETURN3                    LIKE BAPIRET2   OCCURS 0 WITH HEADER LINE,            "返回参数
*      LT_RETURN4                    LIKE BAPIRET2   OCCURS 0 WITH HEADER LINE,            "返回参数
*      LT_RETURN5                    LIKE BAPIRET2   OCCURS 0 WITH HEADER LINE,            "返回参数
*
*      LT_FKNVI                      LIKE FKNVI      OCCURS 0 WITH HEADER LINE,
*      LT_FKNVP                      LIKE FKNVP      OCCURS 0 WITH HEADER LINE.

*DATA : L_CUSTOMER TYPE KUNNR,
*       L_VENDOR   TYPE LIFNR.

*DATA: L_MSG1(255)   TYPE C,                          "返回消息
*      L_MSG1_1(255) TYPE C,                          "返回消息
*      L_MSG2(255)   TYPE C,                          "返回消息
*      L_MSG3(255)   TYPE C,                          "返回消息
*      L_MSG4(255)   TYPE C,                          "返回消息
*      L_MSG5(255)   TYPE C,                          "返回消息
*      L_MSGL4(255)  TYPE C,                          "返回消息
*      L_MSGL5(255)  TYPE C,                          "返回消息
DATA:      g_grid        TYPE REF TO cl_gui_alv_grid.

*----------------------------------------------------------------------*
*           SELECTION-SCREEN                                           *
*----------------------------------------------------------------------*
SELECTION-SCREEN FUNCTION KEY 1.

*SELECTION-SCREEN BEGIN OF BLOCK BLK01 WITH FRAME TITLE TEXT-001.
*SELECTION-SCREEN BEGIN OF LINE.
*PARAMETERS: RB1 RADIOBUTTON GROUP RB USER-COMMAND SELE DEFAULT 'X'.       "单选按钮1-新增&扩展
*SELECTION-SCREEN COMMENT 3(30) TEXT-002.
*SELECTION-SCREEN END OF LINE.
*
*SELECTION-SCREEN BEGIN OF LINE.
*PARAMETERS: RB2 RADIOBUTTON GROUP RB.                                     "单选按钮2-修改
*SELECTION-SCREEN COMMENT 3(30) TEXT-003.
*SELECTION-SCREEN END OF LINE.
*
*SELECTION-SCREEN BEGIN OF LINE.
*PARAMETERS: RB3 RADIOBUTTON GROUP RB.                                     "单选按钮3-扩展
*SELECTION-SCREEN COMMENT 3(30) TEXT-004.
*SELECTION-SCREEN END OF LINE.
*SELECTION-SCREEN END OF BLOCK BLK01.

SELECTION-SCREEN BEGIN OF BLOCK blk02 WITH FRAME TITLE TEXT-t01.
PARAMETERS p_file LIKE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK blk02.

*SELECTION-SCREEN BEGIN OF BLOCK BLK03 WITH FRAME TITLE TEXT-006.
*SELECTION-SCREEN:
**  COMMENT /2(75) T1,
*  COMMENT /2(75) T2.
*SELECTION-SCREEN END OF BLOCK BLK03.

*----------------------------------------------------------------------*
*           INITIALIZATION                                             *
*----------------------------------------------------------------------*
INITIALIZATION.
* 工具栏添加下载模板按钮
  CLEAR g_function_key.
  g_function_key-icon_id   '@49@'.
  g_function_key-icon_text '供应商导入模版下载'.
  g_function_key-quickinfo '供应商导入模版下载'.
  sscrfields-functxt_01 = g_function_key.

*  SELECTION-SCREEN FUNCTION KEY 2.
*  CLEAR G_FUNCTION_KEY.
*  G_FUNCTION_KEY-ICON_ID   = ICON_DISPLAY_MORE.
*  G_FUNCTION_KEY-ICON_TEXT = '批量导入银行信息'.
*  G_FUNCTION_KEY-QUICKINFO = '业务伙伴批量导入银行信息'.
*  SSCRFIELDS-FUNCTXT_02 = G_FUNCTION_KEY.

*----------------------------------------------------------------------*
*           AT SELECTION-SCREEN OUTPUT                                 *
*----------------------------------------------------------------------*
*显示注释
AT SELECTION-SCREEN OUTPUT.
*  MOVE '1、请选择正确的模板填写数据'  TO T1.
*  MOVE '1、请严格按照模板要求填写数据'  TO T2.


*----------------------------------------------------------------------*
*           AT SELECTION-SCREEN                                        *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
* 下载数据导入模板
  IF sscrfields-ucomm 'FC01'.
    PERFORM frm_excel_down.
    sscrfields-ucomm ''.
*  ELSEIF SSCRFIELDS-UCOMM = 'FC02'.
*    CALL TRANSACTION 'ZFI001'." AND SKIP FIRST SCREEN.
*    SSCRFIELDS-UCOMM = ''.
  ENDIF.


*----------------------------------------------------------------------*
*           AT SELECTION-SCREEN  ON VALUE-REQUEST                      *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* 选择文件搜索帮助
  PERFORM frm_set_file_f4 USING p_file.


*----------------------------------------------------------------------*
*           START-OF-SELECTION                                         *
*----------------------------------------------------------------------*
START-OF-SELECTION.
* 文件必输校验
  PERFORM frm_file_obligatory.
* 批量导入数据
  PERFORM frm_upload_data.
* 检查数据
  PERFORM frm_check_data.

* alv显示
  PERFORM frm_display_data.
*----------------------------------------------------------------------*
*           END-OF-SELECTION                                           *
*----------------------------------------------------------------------*
END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  FRM_SET_STATUS
*&---------------------------------------------------------------------*
*       设定状态栏
*----------------------------------------------------------------------*
FORM frm_set_status USING extab TYPE slis_t_extab.
  "SET PF-STATUS 'S1000'.

*  SET PF-STATUS 'ZSTANDARD_FULLSCREEN'.
  SET PF-STATUS 'STANDARD_ALV1'.

ENDFORM" FRM_SET_STATUS


*&---------------------------------------------------------------------*
*&      Form  FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*      命令按钮
*----------------------------------------------------------------------*
*     -->I_UCOMM     命令按钮
*     -->I_SELFIELD  选择值
*----------------------------------------------------------------------*
FORM frm_user_command USING i_ucomm LIKE sy-ucomm                            i_selfield 
TYPE slis_selfield.

*  获取自定义按钮的内表更新  
DATA lr_grid TYPE REF TO cl_gui_alv_grid.  
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'    
IMPORTING      e_grid 
= lr_grid.  
CALL METHOD lr_grid->check_changed_data.  

CASE i_ucomm.    
WHEN 'BACK'.      
LEAVE TO SCREEN 0.    

WHEN 'EXIT'.      
LEAVE PROGRAM.    

WHEN 'IMPORT'.      
PERFORM frm_data_import.            "供应商创建及扩展

*    WHEN 'CHANGE'.
*      PERFORM FRM_DATA_CHANGE.            "供应商信息修改
*
*    WHEN 'INSERT'.
*      PERFORM FRM_DATA_INSERT.            "已存在供应商扩展
*
*    WHEN 'INSERT2'.
*      " PERFORM FRM_DATA_INSERT2.           "客户扩展供应商
*
****    WHEN 'EXPORT'.                                    "------------------------------------20160722注销,采用系统标准电子表格。
****      PERFORM FRM_DATA_EXPORT.    

WHEN OTHERS.  
ENDCASE.  i_selfield
-refresh 'X'.
ENDFORM" FRM_USER_COMMAND

*----------------------------------------------------------------------*
***INCLUDE ZMMRP0004_DISPLAY.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_display_data .
* alv相关变量定义  
DATA:lt_fcat TYPE lvc_t_fcat,       ls_layo 
TYPE lvc_s_layo.

* FIELDCAT字段填充  
CLEAR lt_fcat[].  
PERFORM frm_fill_fcat TABLES lt_fcat.

* 布局设置  
CLEAR ls_layo.  ls_layo
-zebra      'X'.    "斑马线  ls_layo
-cwidth_opt 'X'.    "最优宽  ls_layo
-box_fname  'SEL'.  "选择模式

* ALV显示数据  
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'    
EXPORTING      i_callback_program       
= sy-repid      is_layout_lvc            
= ls_layo      i_callback_pf_status_set 
'FRM_SET_STATUS'      i_callback_user_command  
'FRM_USER_COMMAND'      it_fieldcat_lvc          
= lt_fcat[]      i_save                   
'A'    
TABLES      t_outtab                 
= gt_alv[]    
EXCEPTIONS      program_error            
1      
OTHERS                   2.
* 数据显示失败  
IF sy-subrc NE 0.    
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno             
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.  
ENDIF.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  FRM_FILL_FCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LT_FCAT  text
*----------------------------------------------------------------------*
FORM frm_fill_fcat TABLES t_fcat TYPE lvc_t_fcat.  
"局部变量的定义  
DATA ls_fcat TYPE lvc_s_fcat.  

DEFINE m_fieldcat.    
CLEAR ls_fcat.    ls_fcat
-fieldname = &1.    ls_fcat
-coltext   = &2.    ls_fcat
-outputlen = &3.    ls_fcat
-no_zero   = &4.    
IF ls_fcat-fieldname 'ICON_A'.      ls_fcat
-icon 'X'.    
ENDIF.    
APPEND ls_fcat TO t_fcat.  
END-OF-DEFINITION.  m_fieldcat 

'ICON_A    '  '指示灯                  ' '' ''.  m_fieldcat 
'REMARK    '  '消息内容                    ' '' ''.  m_fieldcat 
'LFA1F    '  '基本视图                    ' '' ''.  m_fieldcat 
'LFM1F    '  '采购视图                    ' '' ''.  m_fieldcat 
'LFB1F    '  '公司视图                    ' '' ''.

*  M_FIELDCAT 'ZALTKN    '  '旧供应商编号            ' '' ''.  m_fieldcat 
'PARTNER   '  '供应商代码              ' '' ''.  m_fieldcat 
'TITLE_KEY   '  '称谓              ' '' ''.  m_fieldcat 
'BU_GROUP  '  '业务伙伴分组                    ' '' ''.
*  m_fieldcat 'KTOKK  '  '账户组                    ' '' ''.  m_fieldcat 
'NAME_ORG1 '  '名称1                   ' '' ''.  m_fieldcat 
'NAME_ORG2 '  '名称2                   ' '' ''.  m_fieldcat 
'BU_SORT1  '  '检索项1                  ' '' ''.
*  M_FIELDCAT 'BU_SORT2  '  '检索项2                  ' '' ''.  m_fieldcat 
'LAND1     '  '国家                    ' '' ''.  m_fieldcat 
'REGIO     '  '地区                    ' '' ''.  m_fieldcat 
'CITY1     '  '城市                    ' '' ''.  m_fieldcat 
'STREET    '  '地址                    ' '' ''.  m_fieldcat 
'POST_CODE1'  '邮政编码                ' '' ''.
*  M_FIELDCAT 'LANGU     '  '语言                    ' '' ''.  m_fieldcat 
'TEL_NUMBER'  '电话                    ' '' ''.
*  M_FIELDCAT 'TEL_EXTENS'  '电话-分机               ' '' ''.  m_fieldcat 
'MOB_NUMBER'  '移动电话                ' '' ''.  m_fieldcat 
'FAX_NUMBER'  '传真                    ' '' ''.
*  M_FIELDCAT 'FAX_EXTENS'  '传真-分机               ' '' ''.  m_fieldcat 
'SMTP_ADDR '  'E-mail                  ' '' ''.  m_fieldcat 
'TAXNUM    '  '业务伙伴税号            ' '' ''.
*  m_fieldcat 'BANK_LAND '  '银行国家                ' '' ''.
*  m_fieldcat 'BANKL '  '银行代码                ' '' ''.
*  M_FIELDCAT 'BANK_NO   '  '银行账号                ' '' ''.
*  m_fieldcat 'BANKN'  '银行账号' '' ''.
*  M_FIELDCAT 'BKONT   '  '银行控制码                ' '' ''.
*  m_fieldcat 'KOINH'  '账户持有人 ' '' ''.
*  m_fieldcat 'BKDSC'  '银行名称 ' '' ''.  m_fieldcat 
'EKORG     '  '采购组织                ' '' ''.  m_fieldcat 
'WAERS     '  '币种                    ' '' ''.  m_fieldcat 
'ZTERM1     '  '采购付款条件                ' '' ''.  m_fieldcat 
'WEBRE     '  '基于收货的发票校验' '' ''.  m_fieldcat 
'LEBRE     '  '基于服务的发票校验' '' ''.  m_fieldcat 
'KALSK     '  '方案组' '' ''.  m_fieldcat 
'VERKF     '  '供应商联系人            ' '' ''.  m_fieldcat 
'TELF1     '  '供应商联系电话          ' '' ''.  m_fieldcat 
'BUKRS     '  '公司代码                ' '' ''.  m_fieldcat 
'AKONT     '  '统驭科目                ' '' ''.  m_fieldcat 
'ZTERM2    '  '财务付款条件            ' '' ''.  m_fieldcat 
'ZUAWA     '  '排序码                  ' '' ''.  m_fieldcat 
'DZWELS    '  '付款方式                ' '' ''.
*  m_fieldcat 'HBKID    '  '开户银行            ' '' ''.  m_fieldcat 
'REPRF     '  '检查是否重复发票                  ' '' ''.
*  m_fieldcat 'FDGRV    '  '计划组                ' '' ''.

*  m_fieldcat 'KTONR     '  '伙伴功能:ER负责雇员    ' '' ''.
*  m_fieldcat 'EKGRP     '  '采购组' '' ''.

ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  FRM_DATA_IMPORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_data_import .  
DATA: l_grid     TYPE REF TO cl_gui_alv_grid.  

RANGES: r_bu_group FOR but000-bu_group.  
DATA: lv_lifnr TYPE lfa1-lifnr.  

REFRESH: r_bu_group.  r_bu_group

-option 'EQ'.  r_bu_group
-sign 'I'.  r_bu_group
-low 'Z011'.  
APPEND r_bu_group.  r_bu_group
-option 'EQ'.  r_bu_group
-sign 'I'.  r_bu_group
-low 'Z012'.  
APPEND r_bu_group.  r_bu_group
-option 'EQ'.  r_bu_group
-sign 'I'.  r_bu_group
-low 'Z013'.  
APPEND r_bu_group.  r_bu_group
-option 'EQ'.  r_bu_group
-sign 'I'.  r_bu_group
-low 'Z014'.  
APPEND r_bu_group.  r_bu_group
-option 'EQ'.  r_bu_group
-sign 'I'.  r_bu_group
-low 'Z015'.  
APPEND r_bu_group.  r_bu_group
-option 'EQ'.  r_bu_group
-sign 'I'.  r_bu_group
-low 'Z016'.  
APPEND r_bu_group.  

LOOP AT gt_alv  INTO gs_alv WHERE sel 'X'.    

CLEAR: gv_err,gv_remark.    

CHECK gs_alv-icon_a NE gc_red.    
IF gs_alv-lfa1f IS INITIAL.      
SELECT SINGLE lifnr FROM lfa1 INTO lv_lifnr       
WHERE lifnr EQ gs_alv-partner .      
IF sy-subrc EQ 0.        gs_alv
-icon_a  = gc_yellow.        gs_alv
-remark   = gs_alv-remark && '/' && '供应商基本视图已存在'.        gs_alv
-lfa1f 'X'.      
ELSE.        
CLEAR: gv_err.        
PERFORM frm_bp_but000.      
ENDIF.    

ENDIF.    
IF gs_alv-lfa1f 'X'.
*      IF NOT gs_alv-bankl IS INITIAL .
*        PERFORM frm_append_bank.
*      ENDIF.      
IF NOT gs_alv-taxnum IS INITIAL .        
PERFORM frm_append_taxnum.      
ENDIF.      
IF gs_alv-lfm1f IS INITIAL AND gs_alv-ekorg IS NOT INITIAL." AND gs_alv-bu_group IN r_bu_group .        
SELECT SINGLE lifnr FROM lfm1 INTO lv_lifnr        
WHERE lifnr EQ gs_alv-partner        
AND ekorg EQ gs_alv-ekorg.        
IF sy-subrc EQ 0.          gs_alv
-lfm1f 'X'.          gs_alv
-icon_a  = gc_yellow.          gs_alv
-remark   = gs_alv-remark && '/' && '供应商采购组织视图已存在'.        
ELSE.          
CLEAR: gv_err.          
PERFORM frm_bp_lfm1.        
ENDIF.      
ENDIF.      
IF gs_alv-lfb1f IS INITIAL AND gs_alv-bukrs IS NOT INITIAL.        
SELECT SINGLE lifnr FROM lfb1 INTO lv_lifnr         
WHERE lifnr EQ gs_alv-partner           
AND bukrs EQ gs_alv-bukrs.        
IF sy-subrc EQ 0.          gs_alv
-lfb1f 'X'.          gs_alv
-icon_a  = gc_yellow.          gs_alv
-remark   = gs_alv-remark && '/' && '供应商公司代码视图已存在'.        
ELSE.          
CLEAR: gv_err.          
PERFORM frm_bp_lfb1.        
ENDIF.      
ENDIF.    
ENDIF.    

IF gs_alv-lfa1f 'X' AND gs_alv-lfm1f 'X' AND gs_alv-lfb1f 'X'.      gs_alv
-icon_a = gc_green.      gs_alv
-remark  '导入已完成'.    
ENDIF.    

MODIFY gt_alv FROM gs_alv.


*    IF GS_ALV-BU_GROUP IN r_bu_group.
*      IF GS_ALV-TAXNUM <> ''.
*        CLEAR LV_PARTNER.
*        SELECT SINGLE BUT000~PARTNER FROM BUT000
*          INNER JOIN DFKKBPTAXNUM ON BUT000~PARTNER = DFKKBPTAXNUM~PARTNER INTO LV_PARTNER
*        WHERE BUT000~NAME_ORG1 = GS_ALV-NAME_ORG1 OR DFKKBPTAXNUM~TAXNUM = GS_ALV-TAXNUM.
*        IF LV_PARTNER = ''.      "SY-SUBRC <> 0.
*          PERFORM FRM_BP01.       "新建并扩展
*
*        ELSE.                    "IF SY-SUBRC = 0.
*          CONCATENATE '该业务伙伴已存在,编号为' LV_PARTNER INTO GS_ALV-REMARK.
*          GS_ALV-PARTNER = LV_PARTNER.
*          GS_ALV-ICON_A = ICON_RED_LIGHT.
*          MODIFY GT_ALV FROM GS_ALV TRANSPORTING PARTNER ICON_A REMARK
*            WHERE NAME_ORG1 = GS_ALV-NAME_ORG1 AND TAXNUM = GS_ALV-TAXNUM AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*          CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv
*            IMPORTING
*              E_GRID = L_GRID.
*
*          CALL METHOD L_GRID->CHECK_CHANGED_DATA. "获取alv改变值
*          CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY. "刷新ALV界面
*        ENDIF.
*
*      ELSEIF GS_ALV-TAXNUM = ''.
*        CLEAR LV_PARTNER.
*        SELECT SINGLE PARTNER FROM BUT000 INTO LV_PARTNER WHERE NAME_ORG1 = GS_ALV-NAME_ORG1.
*        IF LV_PARTNER = ''.       "SY-SUBRC <> 0.
*          PERFORM FRM_BP01.       "新建并扩展
*
*        ELSE.                    "IF SY-SUBRC = 0.
*          CONCATENATE '该业务伙伴已存在,编号为' LV_PARTNER INTO GS_ALV-REMARK.
*          GS_ALV-ICON_A = ICON_RED_LIGHT.
*          GS_ALV-PARTNER = LV_PARTNER.
*          MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK
*          WHERE NAME_ORG1 = GS_ALV-NAME_ORG1 AND TAXNUM = GS_ALV-TAXNUM AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*          CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv
*            IMPORTING
*              E_GRID = L_GRID.
*
*          CALL METHOD L_GRID->CHECK_CHANGED_DATA. "获取alv改变值
*          CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY. "刷新ALV界面
*        ENDIF.
*
*      ENDIF.
*
*    ELSE.
*      PERFORM FRM_BP01.       "新建并扩展
*
*    ENDIF.  

ENDLOOP.

ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  FRM_DATA_CHANGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_data_change .  
DATA: lv_partner TYPE but000-partner,        l_grid     
TYPE REF TO cl_gui_alv_grid.  

LOOP AT gt_alv  INTO gs_alv WHERE sel 'X'.    g_partner 
= gs_alv-partner.    
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'      
EXPORTING        
input  = gs_alv-partner      
IMPORTING        
output = gs_alv-partner.    

CLEAR lv_partner.    
SELECT SINGLE partner FROM but000 INTO lv_partner WHERE partner = gs_alv-partner.    
IF lv_partner <> ''.      
PERFORM frm_bp02.    

ELSE.      gs_alv
-remark '请正确填写业务伙伴编号。'.      gs_alv
-icon_a = icon_red_light.      
MODIFY gt_alv FROM gs_alv TRANSPORTING icon_a remark WHERE partner = g_partner.      

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv        
IMPORTING          e_grid 
= l_grid.      

CALL METHOD l_grid->check_changed_data"获取alv改变值      
CALL METHOD l_grid->refresh_table_display"刷新ALV界面    
ENDIF.  

ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_DATA_INSERT
*&---------------------------------------------------------------------*
*       供应商数据扩展
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_data_insert.  
DATA: lv_partner TYPE but000-partner,        l_grid     
TYPE REF TO cl_gui_alv_grid.  

LOOP AT gt_alv  INTO gs_alv WHERE sel 'X'.    g_partner 
= gs_alv-partner.    
IF gs_alv-partner <> ''.      
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'        
EXPORTING          
input  = gs_alv-partner        
IMPORTING          
output = gs_alv-partner.      

CLEAR lv_partner.      
SELECT SINGLE partner FROM but000 INTO lv_partner WHERE partner = gs_alv-partner.      
IF lv_partner ''.            "SY-SUBRC <> 0.        gs_alv
-remark '请输入正确的业务伙伴号!'.        gs_alv
-icon_a = icon_red_light.        
MODIFY gt_alv FROM gs_alv TRANSPORTING icon_a remark WHERE partner = g_partner AND bukrs = gs_alv-bukrs AND ekorg = gs_alv-ekorg.        

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv          
IMPORTING            e_grid 
= l_grid.        

CALL METHOD l_grid->check_changed_data"获取alv改变值        
CALL METHOD l_grid->refresh_table_display"刷新ALV界面      

ELSE.                     "IF SY-SUBRC = 0.        
PERFORM frm_bp03.       "扩展      
ENDIF.    

ELSEIF gs_alv-partner ''.      gs_alv
-remark '业务伙伴号不能为空!'.      gs_alv
-icon_a = icon_red_light.      
MODIFY gt_alv FROM gs_alv TRANSPORTING icon_a remark WHERE partner = g_partner AND bukrs = gs_alv-bukrs AND ekorg = gs_alv-ekorg.      

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv        
IMPORTING          e_grid 
= l_grid.      

CALL METHOD l_grid->check_changed_data"获取alv改变值      
CALL METHOD l_grid->refresh_table_display"刷新ALV界面    

ENDIF.  
ENDLOOP.

ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  FRM_DATA_INSERT2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_data_insert2 .  
DATA: lv_partner TYPE but000-partner,        l_grid     
TYPE REF TO cl_gui_alv_grid.  

LOOP AT gt_alv  INTO gs_alv WHERE sel 'X'.    g_partner 
= gs_alv-partner.    
IF gs_alv-partner <> ''.      
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'        
EXPORTING          
input  = gs_alv-partner        
IMPORTING          
output = gs_alv-partner.      

CLEAR lv_partner.      
SELECT SINGLE partner FROM but000 INTO lv_partner WHERE partner = gs_alv-partner.      
IF lv_partner ''.            "SY-SUBRC <> 0.        gs_alv
-remark '请输入正确的业务伙伴号!'.        gs_alv
-icon_a = icon_red_light.        
MODIFY gt_alv FROM gs_alv TRANSPORTING icon_a remark WHERE partner = g_partner AND bukrs = gs_alv-bukrs AND ekorg = gs_alv-ekorg.        

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv          
IMPORTING            e_grid 
= l_grid.        

CALL METHOD l_grid->check_changed_data"获取alv改变值        
CALL METHOD l_grid->refresh_table_display"刷新ALV界面      

ELSE.                     "IF SY-SUBRC = 0.        
PERFORM frm_bp04.       "扩展      
ENDIF.    

ELSEIF gs_alv-partner ''.      gs_alv
-remark '业务伙伴号不能为空!'.      gs_alv
-icon_a = icon_red_light.      
MODIFY gt_alv FROM gs_alv TRANSPORTING icon_a remark WHERE partner = g_partner AND bukrs = gs_alv-bukrs AND ekorg = gs_alv-ekorg.      

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv        
IMPORTING          e_grid 
= l_grid.      

CALL METHOD l_grid->check_changed_data"获取alv改变值      
CALL METHOD l_grid->refresh_table_display"刷新ALV界面    

ENDIF.    

CLEAR: gs_alv.  
ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_BP01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_bp01 .
**  LS_CENTRAL-TITLELETTER     = GS_ALV-ZALTKN.    "旧供应商编号
*  L_BPARTNER                 = GS_ALV-PARTNER.   "业务伙伴号
*  L_PARTN_CAT                = '2'.              "业务伙伴类型
*  L_PARTN_GRP                = GS_ALV-BU_GROUP.  "业务伙伴分组
*
**  LS_CENTRAL-TITLE_KEY       = '0003'.           "称谓
*
*  LS_CENTRAL_ORGAN-NAME1     = GS_ALV-NAME_ORG1. "名称1
*  LS_CENTRAL_ORGAN-NAME2     = GS_ALV-NAME_ORG2. "名称2
*
*  LS_CENTRAL-SEARCHTERM1     = GS_ALV-BU_SORT1.  "检索项
**  LS_CENTRAL-SEARCHTERM2     = GS_ALV-BU_SORT2.  "检索项
*
*  LS_ADDRESS-COUNTRY         = GS_ALV-LAND1.     "国家
*  LS_ADDRESS-REGION          = GS_ALV-REGIO.     "地区
*  LS_ADDRESS-CITY            = GS_ALV-CITY1.     "城市
*  LS_ADDRESS-STREET          = GS_ALV-STREET.    "街道
*  LS_ADDRESS-POSTL_COD1      = GS_ALV-POST_CODE1."邮编
*
**  CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
**    EXPORTING
**      INPUT            = GS_ALV-LANGU
**    IMPORTING
**      OUTPUT           = LS_ADDRESS-LANGU     "语言
**    EXCEPTIONS
**      UNKNOWN_LANGUAGE = 1
**      OTHERS           = 2.
**  IF SY-SUBRC <> 0.
*** Implement suitable error handling here
**  ENDIF.
*  LS_ADDRESS-LANGU  = '1'.
*
*  CLEAR LT_BAPIADTEL.
*  LT_BAPIADTEL-COUNTRY   = LS_ADDRESS-COUNTRY.
*  LT_BAPIADTEL-STD_NO    = 'X'.
*  LT_BAPIADTEL-TELEPHONE = GS_ALV-TEL_NUMBER.    "电话
**  LT_BAPIADTEL-EXTENSION = GS_ALV-TEL_EXTENS.    "电话-分机
*  APPEND LT_BAPIADTEL.
*
*  CLEAR LT_BAPIADTEL.
*  LT_BAPIADTEL-COUNTRY   = LS_ADDRESS-COUNTRY.
*  LT_BAPIADTEL-STD_NO    = 'X'.
*  LT_BAPIADTEL-R_3_USER  = '2'.                  "标识符:电话是移动电话
*  LT_BAPIADTEL-TELEPHONE = GS_ALV-MOB_NUMBER.    "移动电话
*  APPEND LT_BAPIADTEL.
*
*  CLEAR LT_BAPIADFAX.
*  LT_BAPIADFAX-COUNTRY   = LS_ADDRESS-COUNTRY.
*  LT_BAPIADFAX-STD_NO    = 'X'.
*  LT_BAPIADFAX-FAX       = GS_ALV-FAX_NUMBER.    "传真
**  LT_BAPIADFAX-EXTENSION = GS_ALV-FAX_EXTENS.    "传真-分机
*  APPEND LT_BAPIADFAX.
*
*  CLEAR LT_BAPIADSMTP.
**  LT_BAPIADSMTP-COUNTRY   = LS_ADDRESS-COUNTRY.
*  LT_BAPIADSMTP-STD_NO    = 'X'.
*  LT_BAPIADSMTP-E_MAIL    = GS_ALV-SMTP_ADDR.     "E-mail
*  APPEND LT_BAPIADSMTP.
*
*  CLEAR: LT_RETURN1, LT_RETURN1[].
*  CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
*    EXPORTING
*      BUSINESSPARTNEREXTERN   = L_BPARTNER
*      PARTNERCATEGORY         = L_PARTN_CAT
*      PARTNERGROUP            = L_PARTN_GRP
*      CENTRALDATA             = LS_CENTRAL
**     CENTRALDATAPERSON       = LS_CENTRAL_PERSON
*      CENTRALDATAORGANIZATION = LS_CENTRAL_ORGAN
**     CENTRALDATAGROUP        =
*      ADDRESSDATA             = LS_ADDRESS
**     DUPLICATE_MESSAGE_TYPE  =
**     ACCEPT_ERROR            = ' '
*    IMPORTING
*      BUSINESSPARTNER         = L_BPARTNER
*    TABLES
*      TELEFONDATA             = LT_BAPIADTEL
*      FAXDATA                 = LT_BAPIADFAX
**     TELETEXDATA             =
**     TELEXDATA               =
*      E_MAILDATA              = LT_BAPIADSMTP
**     RMLADDRESSDATA          =
**     X400ADDRESSDATA         =
**     RFCADDRESSDATA          =
**     PRTADDRESSDATA          =
**     SSFADDRESSDATA          =
**     URIADDRESSDATA          =
**     PAGADDRESSDATA          =
**     ADDRESSNOTES            =
**     COMMUNICATIONNOTES      =
**     COMMUNICATIONUSAGE      =
**     TELEFONDATANONADDRESS   =
**     FAXDATANONADDRESS       =
**     TELETEXDATANONADDRESS   =
**     TELEXDATANONADDRESS     =
**     E_MAILDATANONADDRESS    =
**     RMLADDRESSDATANONADDRESS           =
**     X400ADDRESSDATANONADDRESS          =
**     RFCADDRESSDATANONADDRESS           =
**     PRTADDRESSDATANONADDRESS           =
**     SSFADDRESSDATANONADDRESS           =
**     URIADDRESSDATANONADDRESS           =
**     PAGADDRESSDATANONADDRESS           =
**     COMMUNICATIONNOTESNONADDRESS       =
**     COMMUNICATIONUSAGENONADDRESS       =
*      RETURN                  = LT_RETURN1
**     ADDRESSDUPLICATES       =
*    .
*
*  CLEAR L_MSG1.                                             "20160721新增
*  LOOP AT LT_RETURN1 WHERE TYPE = 'E' OR TYPE = 'A'.      " OR TYPE = 'W'.
*    CONCATENATE LT_RETURN1-MESSAGE L_MSG1 INTO L_MSG1 SEPARATED BY ';'.
*    CONDENSE L_MSG1.
*  ENDLOOP.
*  IF L_MSG1 = ''.                                           "20160721新增
*********  IF LT_RETURN1[] IS INITIAL.                            "20160721注销
******    CALL FUNCTION 'BUP_MEMORY_BUT000_GET'
******      EXPORTING
******        IV_PARTNER       = L_BPARTNER
*******       IV_PARTNER_GUID  =
*******       IV_PARTNER_EXTERNAL       =
*******       IV_VALDT_SEL     = SY-DATLO
******      IMPORTING
******        ES_BUT000        = LT_GUID
*******       ES_BUT000_OLD    =
*******   TABLES
*******       ET_PARTNER       =
*******       ET_BUT000_TD_NEW =
*******       ET_BUT000_TD_OLD =
*******       ET_VBUT000_TD_OLD         =
******      EXCEPTIONS
******        NOT_FOUND        = 1
******        PARAMETER_ERROR  = 2
******        BPEXT_NOT_UNIQUE = 3
******        OTHERS           = 4.
******    IF SY-SUBRC <> 0.
*******   Implement suitable error handling here
******    ENDIF.
******
******    READ TABLE LT_GUID INDEX 1.
******    LT_CUSTO-PARTNR_GUID = LT_GUID-PARTNER_GUID.
******    APPEND LT_CUSTO.
******
******    CALL FUNCTION 'BUPA_CENTRAL_CI_CHANGE'              "20160728注销
******      EXPORTING
******        IS_BUS000_EEW = LT_CUSTO
*******       IS_BUS000_EEW_X       =
*******       IV_XSAVE      = 'X'
*******   IMPORTING
*******       ET_RETURN     =
******      .
*
******    IF SY-SUBRC EQ 0.
*    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'             "commit--信息提交
*      EXPORTING
*        WAIT = 'X'.                                     "地址信息提交
*
*    CLEAR L_MSG1_1.
*    CONCATENATE '业务伙伴地址信息创建成功,编号为' L_BPARTNER INTO L_MSG1_1.
*    CONDENSE L_MSG1_1.
*    CLEAR:LT_BAPIADTEL[], LT_BAPIADTEL, LT_BAPIADTEL, LT_BAPIADTEL[], LT_BAPIADFAX, LT_BAPIADFAX[], LT_BAPIADSMTP, LT_BAPIADSMTP[].
*
** 银行明细追加
*    DATA LV_BANKL TYPE BNKA-BANKL.
*    CLEAR LV_BANKL.
*    "取得银行代码
**    SELECT SINGLE bankl FROM bnka INTO lv_bankl WHERE banka = gs_alv-bank_name.
**    IF lv_bankl <> ''.
**      ls_bapibus1006_bankdetail-bank_key = lv_bankl.
**    ELSE.
*    "创建银行代码(暂不启用)
**      DATA: LV_BANK_CTRY    LIKE BAPI1011_KEY-BANK_CTRY,
**            LT_BANK_ADDRESS LIKE BAPI1011_ADDRESS OCCURS 0 WITH HEADER LINE,
**            LT_RETURN_BK    LIKE BAPIRET2   OCCURS 0 WITH HEADER LINE.
**              L_MSG_BK(255)   TYPE C.
*
**      LV_BANK_CTRY              = GS_ALV-BANK_LAND.
**      LT_BANK_ADDRESS-BANK_NAME = GS_ALV-BANK_NAME.
**      APPEND LT_BANK_ADDRESS.
*
**      CLEAR: LT_RETURN_BK,LT_RETURN_BK[].
**      CALL FUNCTION 'BAPI_BANK_CREATE'
**        EXPORTING
**          BANK_CTRY    = LV_BANK_CTRY
**         BANK_KEY     =
**          BANK_ADDRESS = LT_BANK_ADDRESS
**         BANK_METHOD  =
**         BANK_FORMATTING                    =
**         BANK_ADDRESS1                      =
**         I_XUPDATE    = 'X'
**         I_CHECK_BEFORE_SAVE                =
**         BANK_IBAN_RULE                     =
**         BANK_B2B_SUPPORTED                 =
**         BANK_COR1_SUPPORTED                =
**         BANK_R_TRANSACTION_SUPPORTED       =
**        IMPORTING
**          RETURN       = LT_RETURN_BK
**         BANKCOUNTRY  =
**          BANKKEY      = LS_BAPIBUS1006_BANKDETAIL-BANK_KEY.
**    ENDIF.
*
*    LS_BAPIBUS1006_BANKDETAIL-BANK_KEY = GS_ALV-BANK_ID.
*    LS_BAPIBUS1006_BANKDETAIL-BANK_CTRY       = GS_ALV-BANK_LAND.        "银行国家
*    LS_BAPIBUS1006_BANKDETAIL-ACCOUNTHOLDER   = GS_ALV-KOINH.            "账户持有人
*    LS_BAPIBUS1006_BANKDETAIL-BANK_ACCT       = GS_ALV-BANK_NO+0(18).    "银行账户
*    LS_BAPIBUS1006_BANKDETAIL-BANK_REF        = GS_ALV-BANK_NO+18(20).   "参考明细
**    LS_BAPIBUS1006_BANKDETAIL-CTRL_KEY        = GS_ALV-BKONT.   "控制码
*    "LS_BAPIBUS1006_BANKDETAIL-BANKACCOUNTNAME = GS_ALV-BANK_NO.         "账户名称
*
*
**      IF LS_BAPIBUS1006_BANKDETAIL-BANKACCOUNTNAME <> ''.
**        CLEAR LV_BANKL.
**        SELECT SINGLE BANKL FROM BNKA INTO LV_BANKL WHERE BANKA = GS_ALV-BANK_NAME.
**        IF SY-SUBRC = 0.
**          LS_BAPIBUS1006_BANKDETAIL-BANK_KEY = LV_BANKL.
**        ELSE.
**          DATA: LV_BANK_CTRY    LIKE BAPI1011_KEY-BANK_CTRY,
**                LT_BANK_ADDRESS LIKE BAPI1011_ADDRESS OCCURS 0 WITH HEADER LINE,
**                LT_RETURN_BK    LIKE BAPIRET2   OCCURS 0 WITH HEADER LINE,
**                L_MSG_BK(255)   TYPE C.
**
**          LV_BANK_CTRY    = LS_BAPIBUS1006_BANKDETAIL-BANK_CTRY.
**          LT_BANK_ADDRESS-BANK_NAME = LS_BAPIBUS1006_BANKDETAIL-BANKACCOUNTNAME.
**          APPEND LT_BANK_ADDRESS.
**
**          CLEAR: LT_RETURN_BK,LT_RETURN_BK[].
**          CALL FUNCTION 'BAPI_BANK_CREATE'
**            EXPORTING
**              BANK_CTRY    = LV_BANK_CTRY
***             BANK_KEY     =
**              BANK_ADDRESS = LT_BANK_ADDRESS
***             BANK_METHOD  =
***             BANK_FORMATTING                    =
***             BANK_ADDRESS1                      =
***             I_XUPDATE    = 'X'
***             I_CHECK_BEFORE_SAVE                =
***             BANK_IBAN_RULE                     =
***             BANK_B2B_SUPPORTED                 =
***             BANK_COR1_SUPPORTED                =
***             BANK_R_TRANSACTION_SUPPORTED       =
**            IMPORTING
**              RETURN       = LT_RETURN_BK
***             BANKCOUNTRY  =
**              BANKKEY      = LS_BAPIBUS1006_BANKDETAIL-BANK_KEY.
**        ENDIF.
*
*    CLEAR: LT_RETURN2, LT_RETURN2[].
*    CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_ADD'
*      EXPORTING
*        BUSINESSPARTNER = L_BPARTNER
**       BANKDETAILID    =
*        BANKDETAILDATA  = LS_BAPIBUS1006_BANKDETAIL
**           IMPORTING
**       BANKDETAILIDOUT =
*      TABLES
*        RETURN          = LT_RETURN2.
*
*    CLEAR L_MSG2.                                           "20160721新增
*    LOOP AT LT_RETURN2 WHERE TYPE = 'E' OR TYPE = 'A'. " OR TYPE = 'W'.
*      CONCATENATE LT_RETURN2-MESSAGE L_MSG2 INTO L_MSG2 SEPARATED BY ';'.        "银行信息创建不成功
*      CONDENSE L_MSG2.
*    ENDLOOP.
*    IF L_MSG2 = ''.                                         "20160721新增
****      IF LT_RETURN2[] IS INITIAL.                        "20160721注销
*      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*        EXPORTING
*          WAIT = 'X'.                                            "银行信息提交(即银行信息创建成功)
*    ELSE.
*      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
**       IMPORTING
**         RETURN        =
*        .
****        CLEAR L_MSG2.                                           "20160721注销
****        LOOP AT LT_RETURN2 WHERE TYPE = 'E' OR TYPE = 'A'.
****          CONCATENATE L_MSG2 LT_RETURN2-MESSAGE INTO L_MSG2 SEPARATED BY ';'.        "银行信息创建不成功
****          CONDENSE L_MSG2.
****        ENDLOOP.
*    ENDIF.
*
**      ENDIF.
*
*** 税号追加
*    DATA LS_DFKKBPTAXNUM TYPE DFKKBPTAXNUM.
*    IF L_BPARTNER IS NOT INITIAL AND GS_ALV-TAXNUM IS NOT INITIAL.
*      LS_DFKKBPTAXNUM-PARTNER = L_BPARTNER.
*      LS_DFKKBPTAXNUM-TAXTYPE = 'CN0'.
*      LS_DFKKBPTAXNUM-TAXNUM = GS_ALV-TAXNUM.
**    INSERT INTO DFKKBPTAXNUM VALUES @LS_DFKKBPTAXNUM.            "直接更新数据库表--业务合作伙伴的税号
*      MODIFY DFKKBPTAXNUM FROM @LS_DFKKBPTAXNUM.
*      COMMIT WORK AND WAIT.
*    ENDIF.
*
**    CLEAR: LT_RETURN3,LT_RETURN3[].
**    CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
**      EXPORTING
**        BUSINESSPARTNER = L_BPARTNER
**        TAXTYPE         = 'CN0'
**        TAXNUMBER       = GT_ALV-TAXNUM
**      TABLES
**        RETURN          = LT_RETURN3.
**    IF LT_RETURN3[] IS INITIAL.
**      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
**        EXPORTING
**          WAIT = 'X'.
**    ELSE.
**      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
***       IMPORTING
***         RETURN        =
**        .
**      CLEAR L_MSG3.
**      LOOP AT LT_RETURN3 WHERE TYPE = 'E' OR TYPE = 'A'.
**        CONCATENATE L_MSG3 LT_RETURN3-MESSAGE INTO L_MSG3.
**        CONDENSE L_MSG3.
**      ENDLOOP.
**    ENDIF.
*
*
**---------------------------供应商扩展开始---------------------------------*
**  财务数据部分
*    CLEAR: LT_RETURN4,LT_RETURN4[].
*    CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2'
*      EXPORTING
*        BUSINESSPARTNER             = L_BPARTNER
*        BUSINESSPARTNERROLECATEGORY = 'FLVN00'
**       ALL_BUSINESSPARTNERROLES    = ' '
*        BUSINESSPARTNERROLE         = 'FLVN00'
**       DIFFERENTIATIONTYPEVALUE    =
**       VALIDFROMDATE               =
**       VALIDUNTILDATE              = '99991231'
*      TABLES
*        RETURN                      = LT_RETURN4.
*
*    CLEAR L_MSG4.                                           "20160721新增
*    LOOP AT LT_RETURN4 WHERE TYPE = 'E' OR TYPE = 'A'.    " OR TYPE = 'W'.
*      CONCATENATE LT_RETURN4-MESSAGE L_MSG4 INTO L_MSG4 SEPARATED BY ';'.
*      CONDENSE L_MSG4.
*    ENDLOOP.
*    IF L_MSG4 = ''.
****      IF LT_RETURN4[] IS INITIAL.                                      "20160721注销
*      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'                                "角色信息提交(即角色创建成功)
*        EXPORTING
*          WAIT = 'X'.
*
*      "PERFORM FRM_GET_VEN_FROM_PATCD USING L_BPARTNER CHANGING L_VENDOR.     "根据业务伙伴号抓取供应商号
*      L_VENDOR = L_BPARTNER.
*
*      CLEAR: LS_MASTER_DATA,LS_COMPANY,LT_MASTER_DATA.
*      LS_MASTER_DATA-HEADER-OBJECT_TASK              = 'M'.
*      LS_MASTER_DATA-HEADER-OBJECT_INSTANCE-LIFNR    = L_VENDOR.
*
*      DATA:LV_KTOKK1 TYPE TBC001-KTOKK.
*      CLEAR LV_KTOKK1.
*      SELECT SINGLE KTOKK FROM TBC001 INTO LV_KTOKK1 WHERE BU_GROUP = L_PARTN_GRP.
*      LS_MASTER_DATA-CENTRAL_DATA-CENTRAL-DATA-KTOKK  = LV_KTOKK1. "供应商帐户组
*      LS_MASTER_DATA-CENTRAL_DATA-CENTRAL-DATAX-KTOKK = 'X'. "供应商帐户组
*
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-NAME         = GS_ALV-NAME_ORG1.      "名称1
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-NAME_2       = GS_ALV-NAME_ORG2.      "名称2
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-SORT1        = GS_ALV-BU_SORT1.       "属性(SAP为搜索项 1)
**      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-SORT2        = GS_ALV-BU_SORT2.       "属性(SAP为搜索项 2)
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-STREET       = GS_ALV-STREET.         "街道/门牌号
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-POSTL_COD1   = GS_ALV-POST_CODE1.     "邮政编码
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-CITY         = GS_ALV-CITY1.          "城市
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-COUNTRY      = GS_ALV-LAND1.          "国家
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-REGION       = GS_ALV-REGIO.          "地区
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-LANGU        = '1'.                   "语言
*
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-NAME         = 'X'.                  "名称1
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-NAME_2       = 'X'.                  "名称2
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-SORT1        = 'X'.                  "属性(SAP为搜索项 1)
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-STREET       = 'X'.                  "街道/门牌号
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-POSTL_COD1   = 'X'.                  "邮政编码
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-CITY         = 'X'.                  "城市
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-COUNTRY      = 'X'.                  "国家
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-REGION       = 'X'.                  "地区
*      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-LANGU        = 'X'.                  "语言
*
**        LS_MASTER_DATA-COMPANY_DATA-COMPANY            = ''.                      "COMPANY关联类型即LS_COMPANY的关联类型
*      LS_COMPANY-TASK                                = 'M'.
*      LS_COMPANY-DATA_KEY-BUKRS                      = GS_ALV-BUKRS.             "公司代码
*      LS_COMPANY-DATA-AKONT                          = GS_ALV-AKONT.             "统驭科目
*      LS_COMPANY-DATAX-AKONT                         = 'X'.
*      LS_COMPANY-DATA-ZUAWA                          = GS_ALV-ZUAWA.             "排序码
*      LS_COMPANY-DATAX-ZUAWA                         = 'X'.
*      LS_COMPANY-DATA-ZTERM                          = GS_ALV-ZTERM.             "付款条件
*      LS_COMPANY-DATAX-ZTERM                         = 'X'.
*      LS_COMPANY-DATA-ZWELS                          = GS_ALV-DZWELS.            "付款方式
*      LS_COMPANY-DATAX-ZWELS                         = 'X'.
*      LS_COMPANY-DATA-KVERM                          = GS_ALV-ZALTKN.            "旧供应商编码
*      LS_COMPANY-DATAX-KVERM                         = 'X'.
*      "LS_COMPANY-DATA-TOGRR                          = 'Z000'.            "容差组
*      "LS_COMPANY-DATAX-TOGRR                         = 'X'.
*      LS_COMPANY-DATA-REPRF                          = 'X'.            "检查重复发票
*      LS_COMPANY-DATAX-REPRF                         = 'X'.
*
*      APPEND LS_COMPANY TO LS_MASTER_DATA-COMPANY_DATA-COMPANY.
*      APPEND LS_MASTER_DATA TO  LT_MASTER_DATA-VENDORS[].
*
*
*      VMD_EI_API=>INITIALIZE( ).
*
*      CALL METHOD VMD_EI_API=>MAINTAIN_BAPI                                      "VMD_EI_API=>MAINTAIN_DIRECT_INPUT
*        EXPORTING
*          IS_MASTER_DATA           = LT_MASTER_DATA
*        IMPORTING
*          ES_MASTER_DATA_CORRECT   = L1
*          ES_MESSAGE_CORRECT       = L2
*          ES_MASTER_DATA_DEFECTIVE = L3
*          ES_MESSAGE_DEFECTIVE     = L4.
*
*      IF L4-IS_ERROR = ''.
*        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*          EXPORTING
*            WAIT = 'X'.
*      ELSE.
*        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*
*        DATA LS_L4 LIKE LINE OF L4-MESSAGES.
*        LOOP AT L4-MESSAGES INTO LS_L4 WHERE TYPE = 'E' OR TYPE = 'A'.
*          CONCATENATE L_MSGL4 LS_L4-MESSAGE INTO L_MSGL4 SEPARATED BY ';'.
*          CONDENSE L_MSGL4.
*        ENDLOOP.
*
*      ENDIF.
*
*    ELSE.
*      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
**       IMPORTING
**         RETURN        =
*        .
**        CLEAR L_MSG4.                                                               "20160721注销
**        LOOP AT LT_RETURN4 WHERE TYPE = 'E' OR TYPE = 'A'.
**          CONCATENATE L_MSG4 LT_RETURN4-MESSAGE INTO L_MSG4 SEPARATED BY ';'.
**          CONDENSE L_MSG4.
**        ENDLOOP.
*
*    ENDIF.
*
*    IF GS_ALV-BU_GROUP <> 'BP03'.
**  采购数据部分
*      CLEAR: LT_RETURN5,LT_RETURN5[].
*      CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2'
*        EXPORTING
*          BUSINESSPARTNER             = L_BPARTNER
*          BUSINESSPARTNERROLECATEGORY = 'FLVN01'
**         ALL_BUSINESSPARTNERROLES    = ' '
*          BUSINESSPARTNERROLE         = 'FLVN01'
**         DIFFERENTIATIONTYPEVALUE    =
**         VALIDFROMDATE               =
**         VALIDUNTILDATE              = '99991231'
*        TABLES
*          RETURN                      = LT_RETURN5.
*
*      CLEAR L_MSG5.                                         "20160721新增
*      LOOP AT LT_RETURN5 WHERE TYPE = 'E' OR TYPE = 'A'.   " OR TYPE = 'W'.
*        CONCATENATE LT_RETURN5-MESSAGE L_MSG5 INTO L_MSG4 SEPARATED BY ';'.
*        CONDENSE L_MSG5.
*      ENDLOOP.
*      IF L_MSG5 = ''.
****      IF LT_RETURN5[] IS INITIAL.                                          "20160721注销
*        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'                                "角色信息提交(即角色创建成功)
*          EXPORTING
*            WAIT = 'X'.
*
*        "PERFORM FRM_GET_VEN_FROM_PATCD USING L_BPARTNER CHANGING L_VENDOR.     "根据业务伙伴号抓取供应商号
*        L_VENDOR = L_BPARTNER.
*
*        FREE: LS_MASTER_DATA,LS_PURCHASING,LT_MASTER_DATA.
*
*        LS_MASTER_DATA-HEADER-OBJECT_TASK              = 'M'.
*        LS_MASTER_DATA-HEADER-OBJECT_INSTANCE-LIFNR    = L_VENDOR.
*
*        DATA:LV_KTOKK2 TYPE TBC001-KTOKK.
*        CLEAR LV_KTOKK2.
*        SELECT SINGLE KTOKK FROM TBC001 INTO LV_KTOKK2 WHERE BU_GROUP = L_PARTN_GRP.
*        LS_MASTER_DATA-CENTRAL_DATA-CENTRAL-DATA-KTOKK  = LV_KTOKK2. "供应商帐户组
*        LS_MASTER_DATA-CENTRAL_DATA-CENTRAL-DATAX-KTOKK = 'X'. "供应商帐户组
*
**        LS_MASTER_DATA-PURCHASING_DATA-PURCHASING           = ''.                      "PURCHASING关联类型即LS_PURCHASING的关联类型
*        "LS_PURCHASING-TASK                                = 'M'.
*        LS_PURCHASING-TASK                                = 'I'.
*        LS_PURCHASING-DATA_KEY-EKORG                      = GS_ALV-EKORG.             "采购组织
*        LS_PURCHASING-DATA-WAERS                          = GS_ALV-WAERS.             "币种
*        LS_PURCHASING-DATAX-WAERS                         = 'X'.
*        LS_PURCHASING-DATA-ZTERM                          = GS_ALV-ZTERM2.            "付款条件
*        LS_PURCHASING-DATAX-ZTERM                         = 'X'.
*        LS_PURCHASING-DATA-EKGRP                          = GS_ALV-EKGRP.            "采购组20160913
*        LS_PURCHASING-DATAX-EKGRP                         = 'X'.
*        LS_PURCHASING-DATA-VERKF                          = GS_ALV-VERKF.            "供应商联系人
*        LS_PURCHASING-DATAX-VERKF                         = 'X'.
*        LS_PURCHASING-DATA-TELF1                          = GS_ALV-TELF1.            "供应商联系电话
*        LS_PURCHASING-DATAX-TELF1                         = 'X'.
*        LS_PURCHASING-DATA-WEBRE                          = GS_ALV-WEBRE.                     "基于收货的发票校验
*        LS_PURCHASING-DATAX-WEBRE                         = 'X'.
*        LS_PURCHASING-DATA-KALSK                         = GS_ALV-KALSK. "方案组
*        LS_PURCHASING-DATAX-KALSK                         = 'X'.
*
*        LS_FUNCTIONS-TASK = 'M'.
*
*        IF GS_ALV-KTONR <> ''.
*          LS_FUNCTIONS-DATA_KEY-PARVW = 'ZM'.                "ER内外部转换后为ZM
**        LS_FUNCTIONS-DATA-DEFPA = ''.
*          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*            EXPORTING
*              INPUT  = GS_ALV-KTONR
*            IMPORTING
*              OUTPUT = GS_ALV-KTONR.
*          LS_FUNCTIONS-DATA-PARTNER = GS_ALV-KTONR.
*          LS_FUNCTIONS-DATAX-PARTNER =  'X'.
*          APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*        ENDIF.
*
*        LS_FUNCTIONS-DATA_KEY-PARVW = 'BA'.
*        APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*        LS_FUNCTIONS-DATA_KEY-PARVW = 'LF'.
*        APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*        LS_FUNCTIONS-DATA_KEY-PARVW = 'RS'.
*        APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*        APPEND LS_PURCHASING TO LS_MASTER_DATA-PURCHASING_DATA-PURCHASING.
*        APPEND LS_MASTER_DATA TO  LT_MASTER_DATA-VENDORS[].
*
**        LS_FUNCTIONS-DATA_KEY-PARVW = 'OA'.
**        APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
**
**        LS_FUNCTIONS-DATA_KEY-PARVW = 'VN'.
**        APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
**
**        LS_FUNCTIONS-DATA_KEY-PARVW = 'PI'.
**        LS_FUNCTIONS-DATA-DEFPA = ''.
**        APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*        VMD_EI_API=>INITIALIZE( ).
*
*        CALL METHOD VMD_EI_API=>MAINTAIN_BAPI                                      "VMD_EI_API=>MAINTAIN_DIRECT_INPUT
*          EXPORTING
*            IV_COLLECT_MESSAGES      = 'X'
*            IS_MASTER_DATA           = LT_MASTER_DATA
*          IMPORTING
*            ES_MASTER_DATA_CORRECT   = L1
*            ES_MESSAGE_CORRECT       = L2
*            ES_MASTER_DATA_DEFECTIVE = L3
*            ES_MESSAGE_DEFECTIVE     = L5.
*
*        IF L5-IS_ERROR = ''.
*          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*            EXPORTING
*              WAIT = 'X'.
*        ELSE.
*          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*
*          DATA LS_L5 LIKE LINE OF L5-MESSAGES.
*          LOOP AT L5-MESSAGES INTO LS_L5 WHERE TYPE = 'E' OR TYPE = 'A'.
*            CONCATENATE L_MSGL5 LS_L5-MESSAGE INTO L_MSGL5 SEPARATED BY ';'.
*            CONDENSE L_MSGL5.
*          ENDLOOP.
*
*        ENDIF.
*
*      ELSE.
*        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
**       IMPORTING
**         RETURN        =
*          .
****        CLEAR L_MSG4.                                           "20160721注销
****        LOOP AT LT_RETURN4 WHERE TYPE = 'E' OR TYPE = 'A'.
****          CONCATENATE L_MSG4 LT_RETURN4-MESSAGE INTO L_MSG4 SEPARATED BY ';'.
****          CONDENSE L_MSG4.
****        ENDLOOP.
*
*      ENDIF.
*    ENDIF.
*
**---------------------------供应商扩展结束---------------------------------*
*    IF L_MSG1 = '' AND L_MSG2 = '' AND L_MSG3 = '' AND L_MSG4 = '' AND L_MSG5 = '' AND L4-MESSAGES[] IS INITIAL  AND L5-MESSAGES[] IS INITIAL. "20160721新增
****      IF LT_RETURN1[] IS INITIAL AND LT_RETURN2[] IS INITIAL AND LT_RETURN4[] IS INITIAL AND L4-MESSAGES[] IS INITIAL  AND L5-MESSAGES[] IS INITIAL.      "20160721注销
*      CONCATENATE '业务伙伴创建成功,编号为' L_BPARTNER INTO GS_ALV-REMARK.
*      CONDENSE GS_ALV-REMARK.
*      GS_ALV-ICON_A = ICON_GREEN_LIGHT.
*      GS_ALV-PARTNER = L_BPARTNER.
*      MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK
*        WHERE NAME_ORG1 = GS_ALV-NAME_ORG1 AND BU_SORT1 = GS_ALV-BU_SORT1 AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*    ELSE.
*      CONCATENATE L_MSG1_1 L_MSG2 L_MSG3 L_MSGL4 L_MSGL5 L_MSG4 INTO GS_ALV-REMARK.
*      CONDENSE GS_ALV-REMARK.
*      GS_ALV-ICON_A = ICON_RED_LIGHT.
*      MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK
*        WHERE NAME_ORG1 = GS_ALV-NAME_ORG1 AND BU_SORT1 = GS_ALV-BU_SORT1 AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*    ENDIF.
*
******  ELSE.                             "对应516行 IF SY-SUBRC EQ 0.
******    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'               "20160728注销
*******       IMPORTING
*******         RETURN        =
******      .
******    L_MSG1_1 = '业务伙伴编号创建不成功!'.        "针对CALL FUNCTION 'BUPA_CENTRAL_CI_CHANGE'的执行失败,即地址信息都未提交
******    GS_ALV-REMARK = L_MSG1_1.
******    GS_ALV-ICON_A = ICON_RED_LIGHT.
******    MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK WHERE NAME_ORG1 = GS_ALV-NAME_ORG1 AND BU_SORT1 = GS_ALV-BU_SORT1 AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
******
******  ENDIF.
*
*  ELSE.
*
****    CLEAR L_MSG1.                                                                     "20160721注销
****    LOOP AT LT_RETURN1 WHERE TYPE = 'E' OR TYPE = 'A'.
****      CONCATENATE L_MSG1 LT_RETURN1-MESSAGE INTO L_MSG1 SEPARATED BY ';'.
****      CONDENSE L_MSG1.
****    ENDLOOP.
**- 消息
*    GS_ALV-REMARK = L_MSG1.
*    GS_ALV-ICON_A = ICON_RED_LIGHT.
*    MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK
*      WHERE NAME_ORG1 = GS_ALV-NAME_ORG1 AND BU_SORT1 = GS_ALV-BU_SORT1 AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*  ENDIF.
*
** 获取alv
*  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
*    IMPORTING
*      E_GRID = L_GRID.
*
** 获取alv改变值
*  CALL METHOD L_GRID->CHECK_CHANGED_DATA.
*
** 刷新ALV界面
*  CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_BP02
*&---------------------------------------------------------------------*
*       供应商数据修改
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_bp02 .

** 更改供应商所需变量
*  DATA:L_XFELD   TYPE XFELD,               "复选框
*       LS_DATA   TYPE VMDS_EI_MAIN,        "供应商总数据
*       LS_MSG1   TYPE VMDS_EI_MAIN,
*       LS_MSG2   TYPE CVIS_MESSAGE,
*       LS_MSG3   TYPE VMDS_EI_MAIN,
*       LS_MSG4   TYPE CVIS_MESSAGE,
*       L_MSG_TMP TYPE CHAR255.
** 复杂外部接口的供应商
*  DATA:LS_VENDOR TYPE VMDS_EI_EXTERN,
*       LT_VENDOR TYPE VMDS_EI_EXTERN_T.
*
** 供应商抬头数据
*  DATA LS_HEADER TYPE VMDS_EI_HEADER.
*  LS_HEADER-OBJECT_INSTANCE-LIFNR = GS_ALV-PARTNER.
*  LS_HEADER-OBJECT_TASK           = 'U'.
** 供应商中心数据
*  DATA LS_CENTRAL_DATA TYPE VMDS_EI_CENTRAL_DATA.
*  LS_CENTRAL_DATA-ADDRESS-TASK                     = 'U'.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATA-NAME         = GS_ALV-NAME_ORG1.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATAX-NAME        = 'X'.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATA-NAME_2       = GS_ALV-NAME_ORG2.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATAX-NAME_2      = 'X'.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATA-SORT1        = GS_ALV-BU_SORT1.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATAX-SORT1       = 'X'.
**  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATA-SORT2        = GS_ALV-BU_SORT2.
**  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATAX-SORT2       = 'X'.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATA-STREET       = GS_ALV-STREET.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATAX-STREET      = 'X'.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATA-POSTL_COD1   = GS_ALV-POST_CODE1.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATAX-POSTL_COD1  = 'X'.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATA-CITY         = GS_ALV-CITY1.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATAX-CITY        = 'X'.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATA-POBOX_CTRY   = GS_ALV-LAND1.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATAX-POBOX_CTRY  = 'X'.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATA-REGIOGROUP   = GS_ALV-REGIO.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATA-REGIOGROUP   = 'X'.
**  CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
**    EXPORTING
**      INPUT            = GS_ALV-LANGU
**    IMPORTING
**      OUTPUT           = GS_ALV-LANGU
**    EXCEPTIONS
**      UNKNOWN_LANGUAGE = 1
**      OTHERS           = 2.
**  IF SY-SUBRC <> 0.
*** Implement suitable error handling here
**  ENDIF.
**  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATA-LANGU        = GS_ALV-LANGU.
**  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATAX-LANGU       = 'X'.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATA-LANGU        = '1'.
*  LS_CENTRAL_DATA-ADDRESS-POSTAL-DATAX-LANGU       = 'X'.
*
******************************************************************************************
** 银行信息
*  DATA: LV_BANKL                  TYPE BNKA-BANKL,
**        LS_BANK  TYPE CVIS_EI_CVI_BANKDETAIL,
**        LT_BANK  TYPE CVIS_EI_BANKDETAIL_T.
*        LS_BAPIBUS1006_BANKDETAIL TYPE BAPIBUS1006_BANKDETAIL.
*
*  CLEAR LV_BANKL.
**  SELECT SINGLE bankl FROM bnka INTO lv_bankl WHERE banka = gs_alv-bank_name.
**  IF lv_bankl <> ''.
**    ls_bapibus1006_bankdetail-bank_key = lv_bankl.
**
**  ELSE.
*  "暂不直接创建供应商
**    DATA: LV_BANK_CTRY    LIKE BAPI1011_KEY-BANK_CTRY,
**          LT_BANK_ADDRESS LIKE BAPI1011_ADDRESS OCCURS 0 WITH HEADER LINE,
**          LT_RETURN_BK    LIKE BAPIRET2   OCCURS 0 WITH HEADER LINE.
**
**    LV_BANK_CTRY              = GS_ALV-BANK_LAND.
**    LT_BANK_ADDRESS-BANK_NAME = GS_ALV-BANK_NAME.
**    APPEND LT_BANK_ADDRESS.
**
**    CLEAR: LT_RETURN_BK,LT_RETURN_BK[].
**    CALL FUNCTION 'BAPI_BANK_CREATE'
**      EXPORTING
**        BANK_CTRY    = LV_BANK_CTRY
***       BANK_KEY     =
**        BANK_ADDRESS = LT_BANK_ADDRESS
***       BANK_METHOD  =
***       BANK_FORMATTING                    =
***       BANK_ADDRESS1                      =
***       I_XUPDATE    = 'X'
***       I_CHECK_BEFORE_SAVE                =
***       BANK_IBAN_RULE                     =
***       BANK_B2B_SUPPORTED                 =
***       BANK_COR1_SUPPORTED                =
***       BANK_R_TRANSACTION_SUPPORTED       =
**      IMPORTING
**        RETURN       = LT_RETURN_BK
***       BANKCOUNTRY  =
**        BANKKEY      = LS_BAPIBUS1006_BANKDETAIL-BANK_KEY.
**  ENDIF.
*  LS_BAPIBUS1006_BANKDETAIL-BANK_KEY = GS_ALV-BANK_ID.
*  LS_BAPIBUS1006_BANKDETAIL-BANK_CTRY       = GS_ALV-BANK_LAND.  "银行国家
**  LS_BAPIBUS1006_BANKDETAIL-ACCOUNTHOLDER   = GS_ALV-KOINH.      "账户持有人
*  LS_BAPIBUS1006_BANKDETAIL-BANK_ACCT       = GS_ALV-BANKN+0(18).    "银行账户
*  LS_BAPIBUS1006_BANKDETAIL-BANK_REF        = GS_ALV-BANKN+18(20).   "参考明细
*  "LS_BAPIBUS1006_BANKDETAIL-BANKACCOUNTNAME = GS_ALV-BANK_NO.         "账户名称
*
*  CLEAR: LT_RETURN2, LT_RETURN2[].
*  CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_CHANGE'
*    EXPORTING
*      BUSINESSPARTNER = GS_ALV-PARTNER
*      BANKDETAILID    = '0001'
*      BANKDETAILDATA  = LS_BAPIBUS1006_BANKDETAIL
**     BANKDETAILDATA_X       =
*    TABLES
*      RETURN          = LT_RETURN2.
*
**  CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_ADD'
**    EXPORTING
**      BUSINESSPARTNER = GS_ALV-PARTNER
***     BANKDETAILID    =
**      BANKDETAILDATA  = LS_BAPIBUS1006_BANKDETAIL
***           IMPORTING
***     BANKDETAILIDOUT =
**    TABLES
**      RETURN          = LT_RETURN2.
*
*  CLEAR L_MSG2.
*  LOOP AT LT_RETURN2 WHERE TYPE = 'E' OR TYPE = 'A'.
*    CONCATENATE LT_RETURN2-MESSAGE L_MSG2 INTO L_MSG2 SEPARATED BY ';'.
*    CONDENSE L_MSG2.
*  ENDLOOP.
*
*  IF L_MSG2 = ''.
*    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*      EXPORTING
*        WAIT = 'X'.
*  ELSE.
*    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
**       IMPORTING
**         RETURN        =
*      .
*  ENDIF.
*
***************************************************************************
** 电话信息更改
*  DATA:LS_CONTACT TYPE CVIS_EI_PHONE_STR,
*       LT_CONTACT TYPE CVIS_EI_PHONE_T.
*  LS_CONTACT-CONTACT-TASK = 'U'.
*  LS_CONTACT-CONTACT-DATA-TELEPHONE = GS_ALV-TEL_NUMBER.
*  LS_CONTACT-CONTACT-DATAX-TELEPHONE = 'X'.
**  LS_CONTACT-CONTACT-DATA-EXTENSION = GS_ALV-TEL_EXTENS.
**  LS_CONTACT-CONTACT-DATAX-EXTENSION = 'X'.
*  APPEND LS_CONTACT TO LT_CONTACT.
*  LS_CENTRAL_DATA-ADDRESS-COMMUNICATION-PHONE-PHONE[] = LT_CONTACT.
*
*  LS_CONTACT-CONTACT-TASK = 'U'.
*  LS_CONTACT-CONTACT-DATA-R_3_USER = '2'.
*  LS_CONTACT-CONTACT-DATAX-R_3_USER = 'X'.
*  LS_CONTACT-CONTACT-DATA-TELEPHONE = GS_ALV-MOB_NUMBER.
*  LS_CONTACT-CONTACT-DATAX-TELEPHONE = 'X'.
*  APPEND LS_CONTACT TO LT_CONTACT.
*  LS_CENTRAL_DATA-ADDRESS-COMMUNICATION-PHONE-PHONE[] = LT_CONTACT.
*
** 传真信息更改
*  DATA:LS_FAX TYPE CVIS_EI_FAX_STR,
*       LT_FAX TYPE CVIS_EI_FAX_T.
*  LS_FAX-CONTACT-TASK = 'U'.
*  LS_FAX-CONTACT-DATA-FAX        = GS_ALV-FAX_NUMBER.
*  LS_FAX-CONTACT-DATAX-FAX       = 'X'.
**  LS_FAX-CONTACT-DATA-EXTENSION  = GS_ALV-FAX_EXTENS.
**  LS_FAX-CONTACT-DATAX-EXTENSION = 'X'.
*  APPEND LS_FAX TO LT_FAX.
*  LS_CENTRAL_DATA-ADDRESS-COMMUNICATION-FAX-FAX[] = LT_FAX[].
*
** 电子邮箱
*  DATA:LS_SMTP TYPE CVIS_EI_SMTP_STR,
*       LT_SMTP TYPE CVIS_EI_SMTP_T.
*  LS_SMTP-CONTACT-TASK = 'U'.
*  LS_SMTP-CONTACT-DATA-E_MAIL  = GS_ALV-SMTP_ADDR.
*  LS_SMTP-CONTACT-DATAX-E_MAIL = 'X'.
*  APPEND LS_SMTP TO LT_SMTP.
*  LS_CENTRAL_DATA-ADDRESS-COMMUNICATION-SMTP-SMTP[] = LT_SMTP[].
*
** 税号
**  DATA:LT_VAT_NUMBERS TYPE CVIS_EI_VAT_T,
**       LS_VAT_NUMBERS TYPE CVIS_EI_VAT.
**  LS_VAT_NUMBERS-TASK           = 'U'.
**  LS_VAT_NUMBERS-DATA_KEY-LAND1 = GS_ALV-LAND1.
**  LS_VAT_NUMBERS-DATA-STCEG     = GS_ALV-TAXNUM.
**  LS_VAT_NUMBERS-DATAX-STCEG    = 'X'.
**  APPEND LS_VAT_NUMBERS TO LT_VAT_NUMBERS.
**  LS_CENTRAL_DATA-VAT_NUMBER-VAT_NUMBERS[] = LT_VAT_NUMBERS[].
*  MOVE-CORRESPONDING LS_HEADER       TO LS_VENDOR-HEADER.   "20160905
*  MOVE-CORRESPONDING LS_CENTRAL_DATA TO LS_VENDOR-CENTRAL_DATA. "20160905
*
** 公司数据
*  DATA:LS_COMPANY_DATA TYPE VMDS_EI_VMD_COMPANY,
*       LS_COMPANY      TYPE VMDS_EI_COMPANY,
*       LT_COMPANY      TYPE VMDS_EI_COMPANY_T.
*  LS_COMPANY-TASK = 'U'.
*  LS_COMPANY-DATA_KEY-BUKRS = GS_ALV-BUKRS.
*  LS_COMPANY-DATA-AKONT     = GS_ALV-AKONT.
*  LS_COMPANY-DATAX-AKONT    = 'X'.
*  LS_COMPANY-DATA-ZUAWA     = GS_ALV-ZUAWA.
*  LS_COMPANY-DATAX-ZUAWA    = 'X'.
*  LS_COMPANY-DATA-ZTERM     = GS_ALV-ZTERM.
*  LS_COMPANY-DATAX-ZTERM    = 'X'.
*  LS_COMPANY-DATA-ZWELS     = GS_ALV-DZWELS.
*  LS_COMPANY-DATAX-ZWELS    = 'X'.
*  LS_COMPANY-DATA-ALTKN     = GS_ALV-ZALTKN.
*  LS_COMPANY-DATAX-ALTKN    = 'X'.
*  LS_COMPANY-DATA-REPRF     = 'X'.            "检查重复发票
*  LS_COMPANY-DATAX-REPRF    = 'X'.
*  APPEND LS_COMPANY TO LT_COMPANY.
*  LS_COMPANY_DATA-COMPANY[] = LT_COMPANY[].
*  MOVE-CORRESPONDING LS_COMPANY_DATA TO LS_VENDOR-COMPANY_DATA.
*
** 组织数据
*  DATA:LS_PURCHASING_DATA TYPE VMDS_EI_VMD_PURCHASING,
*       LS_PURCHASING      TYPE VMDS_EI_PURCHASING,
*       LT_PURCHASING      TYPE VMDS_EI_PURCHASING_T.
*  LS_PURCHASING-TASK           = 'U'.
*  LS_PURCHASING-DATA_KEY-EKORG = GS_ALV-EKORG.
*  LS_PURCHASING-DATA-WAERS     = GS_ALV-WAERS.
*  LS_PURCHASING-DATAX-WAERS    = 'X'.
*  LS_PURCHASING-DATA-ZTERM     = GS_ALV-ZTERM2.
*  LS_PURCHASING-DATAX-ZTERM    = 'X'.
*  LS_PURCHASING-DATA-EKGRP     = GS_ALV-EKGRP.   "采购组20160913
*  LS_PURCHASING-DATAX-EKGRP    = 'X'.
*  LS_PURCHASING-DATA-TELF1     = GS_ALV-TELF1.
*  LS_PURCHASING-DATAX-TELF1    = 'X'.
*  LS_PURCHASING-DATA-VERKF     = GS_ALV-VERKF.
*  LS_PURCHASING-DATAX-VERKF    = 'X'.
*  LS_PURCHASING-DATA-WEBRE     = GS_ALV-WEBRE.                     "基于收货的发票校验
*  LS_PURCHASING-DATAX-WEBRE    = 'X'.
*  LS_PURCHASING-DATA-KALSK                         = GS_ALV-KALSK. "方案组
*  LS_PURCHASING-DATAX-KALSK                         = 'X'.
*
*  LS_FUNCTIONS-TASK = 'U'.
*  IF GS_ALV-KTONR <> ''.
*    LS_FUNCTIONS-DATA_KEY-PARVW = 'ZM'.                "ER内外部转换后为ZM
**        LS_FUNCTIONS-DATA-DEFPA = ''.
*    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*      EXPORTING
*        INPUT  = GS_ALV-KTONR
*      IMPORTING
*        OUTPUT = GS_ALV-KTONR.
*    LS_FUNCTIONS-DATA-PARTNER = GS_ALV-KTONR.
*    LS_FUNCTIONS-DATAX-PARTNER =  'X'.
*    APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*  ENDIF.
*
*  APPEND LS_PURCHASING TO LT_PURCHASING.
*  MOVE-CORRESPONDING LS_PURCHASING_DATA TO LS_VENDOR-PURCHASING_DATA.
*
*  APPEND LS_VENDOR TO LT_VENDOR.
*
*  LS_DATA-VENDORS[] = LT_VENDOR[].
*  VMD_EI_API=>INITIALIZE( ).
*
*  CALL METHOD VMD_EI_API=>MAINTAIN_BAPI
*    EXPORTING
*      IV_COLLECT_MESSAGES      = 'X'
*      IS_MASTER_DATA           = LS_DATA
*    IMPORTING
*      ES_MASTER_DATA_CORRECT   = LS_MSG1
*      ES_MESSAGE_CORRECT       = LS_MSG2
*      ES_MASTER_DATA_DEFECTIVE = LS_MSG3
*      ES_MESSAGE_DEFECTIVE     = LS_MSG4.
*
*  IF LS_MSG4-IS_ERROR = ''.
*    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*      EXPORTING
*        WAIT = 'X'.
*  ELSE.
*    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*
*    DATA LS_MSG4_TMP LIKE LINE OF LS_MSG4-MESSAGES.
*    LOOP AT LS_MSG4-MESSAGES INTO LS_MSG4_TMP WHERE TYPE = 'E' OR TYPE = 'A'.
*      CONCATENATE L_MSG_TMP LS_MSG4_TMP-MESSAGE INTO L_MSG_TMP SEPARATED BY ';'.
*      CONDENSE L_MSG_TMP.
*    ENDLOOP.
*  ENDIF.
*
*  CLEAR: LS_CONTACT, LT_CONTACT[], LS_CONTACT, LT_CONTACT[], LS_FAX, LT_FAX[], LS_SMTP, LT_SMTP[].
*
*  IF L_MSG2 = '' AND L_MSG_TMP = ''.
*    GS_ALV-REMARK = '信息修改成功。'.
*    GS_ALV-ICON_A = ICON_GREEN_LIGHT.
*    MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK WHERE PARTNER = G_PARTNER AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv
*      IMPORTING
*        E_GRID = L_GRID.
*
*    CALL METHOD L_GRID->CHECK_CHANGED_DATA. "获取alv改变值
*    CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY. "刷新ALV界面
*
*  ELSE.
*    CONCATENATE L_MSG2 L_MSG_TMP INTO GS_ALV-REMARK SEPARATED BY ';'.
*    GS_ALV-ICON_A = ICON_RED_LIGHT.
*    MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK WHERE PARTNER = G_PARTNER AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv
*      IMPORTING
*        E_GRID = L_GRID.
*
*    CALL METHOD L_GRID->CHECK_CHANGED_DATA. "获取alv改变值
*    CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY. "刷新ALV界面
*
*  ENDIF.

ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  FRM_BP03
*&---------------------------------------------------------------------*
*       供应商数据扩展
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_bp03 .
*  财务数据部分

*  DATA: LV_BUKRS     TYPE LFB1-BUKRS,
*        L_MSKZ1(255) TYPE C.
*
*  CLEAR LV_BUKRS.
*  SELECT SINGLE BUKRS FROM LFB1 INTO LV_BUKRS WHERE LIFNR = GS_ALV-PARTNER AND BUKRS = GS_ALV-BUKRS.
*  IF LV_BUKRS = ''.
*    CLEAR: LS_MASTER_DATA,LS_COMPANY,LT_MASTER_DATA.
*    LS_MASTER_DATA-HEADER-OBJECT_TASK              = 'M'.
*    LS_MASTER_DATA-HEADER-OBJECT_INSTANCE-LIFNR    = GS_ALV-PARTNER.
*
*    DATA:LV_KTOKK1 TYPE TBC001-KTOKK.
*    CLEAR LV_KTOKK1.
*    SELECT SINGLE KTOKK FROM TBC001 INTO LV_KTOKK1 WHERE BU_GROUP = GS_ALV-BU_GROUP.
*    LS_MASTER_DATA-CENTRAL_DATA-CENTRAL-DATA-KTOKK  = LV_KTOKK1. "供应商帐户组
*    LS_MASTER_DATA-CENTRAL_DATA-CENTRAL-DATAX-KTOKK = 'X'. "供应商帐户组
*
*
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-NAME         = GS_ALV-NAME_ORG1.      "名称1
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-NAME_2       = GS_ALV-NAME_ORG2.      "名称2
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-SORT1        = GS_ALV-BU_SORT1.       "属性(SAP为搜索项 1)
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-SORT2        = GS_ALV-BU_SORT2.       "属性(SAP为搜索项 2)
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-STREET       = GS_ALV-STREET.         "街道/门牌号
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-POSTL_COD1   = GS_ALV-POST_CODE1.     "邮政编码
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-CITY         = GS_ALV-CITY1.          "城市
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-COUNTRY      = GS_ALV-LAND1.          "国家
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-REGION       = GS_ALV-REGIO.          "地区
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-LANGU        = '1'.                   "语言
*
*
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-NAME         = 'X'.                  "名称1
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-NAME_2       = 'X'.                  "名称2
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-SORT1        = 'X'.                  "属性(SAP为搜索项 1)
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-STREET       = 'X'.                  "街道/门牌号
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-POSTL_COD1   = 'X'.                  "邮政编码
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-CITY         = 'X'.                  "城市
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-COUNTRY      = 'X'.                  "国家
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-REGION       = 'X'.                  "地区
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-LANGU        = 'X'.                  "语言
*
**        LS_MASTER_DATA-COMPANY_DATA-COMPANY            = ''.                      "COMPANY关联类型即LS_COMPANY的关联类型
*    LS_COMPANY-TASK                                = 'M'.
*    LS_COMPANY-DATA_KEY-BUKRS                      = GS_ALV-BUKRS.             "公司代码
*    LS_COMPANY-DATA-AKONT                          = GS_ALV-AKONT.             "统驭科目
*    LS_COMPANY-DATAX-AKONT                         = 'X'.
*    LS_COMPANY-DATA-ZUAWA                          = GS_ALV-ZUAWA.             "排序码
*    LS_COMPANY-DATAX-ZUAWA                         = 'X'.
*    LS_COMPANY-DATA-ZTERM                          = GS_ALV-ZTERM.             "付款条件
*    LS_COMPANY-DATAX-ZTERM                         = 'X'.
*    LS_COMPANY-DATA-ZWELS                          = GS_ALV-DZWELS.            "付款方式
*    LS_COMPANY-DATAX-ZWELS                         = 'X'.
*    LS_COMPANY-DATA-KVERM                          = GS_ALV-ZALTKN.            "旧供应商编码
*    LS_COMPANY-DATAX-KVERM                         = 'X'.
*    LS_COMPANY-DATA-REPRF                          = 'X'.                      "检查重复发票
*    LS_COMPANY-DATAX-REPRF                         = 'X'.
*    APPEND LS_COMPANY TO LS_MASTER_DATA-COMPANY_DATA-COMPANY.
*    APPEND LS_MASTER_DATA TO  LT_MASTER_DATA-VENDORS[].
*
*    CALL METHOD VMD_EI_API=>MAINTAIN_BAPI                                      "VMD_EI_API=>MAINTAIN_DIRECT_INPUT
*      EXPORTING
*        IS_MASTER_DATA           = LT_MASTER_DATA
*      IMPORTING
*        ES_MASTER_DATA_CORRECT   = L1
*        ES_MESSAGE_CORRECT       = L2
*        ES_MASTER_DATA_DEFECTIVE = L3
*        ES_MESSAGE_DEFECTIVE     = L4.
*
*    IF L4-IS_ERROR = ''.
*      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*        EXPORTING
*          WAIT = 'X'.
*    ELSE.
*      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*
*      DATA LS_L4 LIKE LINE OF L4-MESSAGES.
*      LOOP AT L4-MESSAGES INTO LS_L4 WHERE TYPE = 'E' OR TYPE = 'A'.
*        CONCATENATE L_MSGL4 LS_L4-MESSAGE INTO L_MSGL4 SEPARATED BY ';'.
*        CONDENSE L_MSGL4.
*      ENDLOOP.
*
*    ENDIF.
*
*  ELSE.
*    L_MSKZ1 = '该公司已扩展,请输入正确的公司代码!'.
*
*  ENDIF.
*
*  IF GS_ALV-BU_GROUP <> 'BP03'.
**  采购数据部分
*    DATA: LV_EKORG     TYPE LFM1-EKORG,
*          L_MSKZ2(255) TYPE C.
*
*    CLEAR LV_EKORG.
*    SELECT SINGLE EKORG FROM LFM1 INTO LV_EKORG WHERE LIFNR = GS_ALV-PARTNER AND EKORG = GS_ALV-EKORG.
*    IF LV_EKORG = ''.
*      FREE: LS_MASTER_DATA,LS_PURCHASING,LT_MASTER_DATA.
*
*      LS_MASTER_DATA-HEADER-OBJECT_TASK              = 'M'.
*      LS_MASTER_DATA-HEADER-OBJECT_INSTANCE-LIFNR    = GS_ALV-PARTNER.
*
*      DATA:LV_KTOKK2 TYPE TBC001-KTOKK.
*      CLEAR LV_KTOKK2.
*      SELECT SINGLE KTOKK FROM TBC001 INTO LV_KTOKK2 WHERE BU_GROUP = GS_ALV-BU_GROUP.
*      LS_MASTER_DATA-CENTRAL_DATA-CENTRAL-DATA-KTOKK  = LV_KTOKK2. "供应商帐户组
*      LS_MASTER_DATA-CENTRAL_DATA-CENTRAL-DATAX-KTOKK = 'X'. "供应商帐户组
*
**        LS_MASTER_DATA-PURCHASING_DATA-PURCHASING           = ''.                      "PURCHASING关联类型即LS_PURCHASING的关联类型
*      LS_PURCHASING-TASK                                = 'M'.
*      LS_PURCHASING-DATA_KEY-EKORG                      = GS_ALV-EKORG.             "采购组织
*      LS_PURCHASING-DATA-WAERS                          = GS_ALV-WAERS.             "币种
*      LS_PURCHASING-DATAX-WAERS                         = 'X'.
*      LS_PURCHASING-DATA-ZTERM                          = GS_ALV-ZTERM2.            "付款条件
*      LS_PURCHASING-DATAX-ZTERM                         = 'X'.
*      LS_PURCHASING-DATA-EKGRP                          = GS_ALV-EKGRP.            "采购组
*      LS_PURCHASING-DATAX-EKGRP                         = 'X'.
*      LS_PURCHASING-DATA-VERKF                          = GS_ALV-VERKF.            "供应商联系人
*      LS_PURCHASING-DATAX-VERKF                         = 'X'.
*      LS_PURCHASING-DATA-TELF1                          = GS_ALV-TELF1.            "供应商联系电话
*      LS_PURCHASING-DATAX-TELF1                         = 'X'.
*      LS_PURCHASING-DATA-WEBRE                          = GS_ALV-WEBRE.                     "基于收货的发票校验
*      LS_PURCHASING-DATAX-WEBRE                         = 'X'.
*      LS_PURCHASING-DATA-KALSK                         = GS_ALV-KALSK. "方案组
*      LS_PURCHASING-DATAX-KALSK                         = 'X'.
*
*      LS_FUNCTIONS-TASK = 'M'.
*      IF GS_ALV-KTONR <> ''.
*        LS_FUNCTIONS-DATA_KEY-PARVW = 'ZM'.                "ER内外部转换后为ZM
**        LS_FUNCTIONS-DATA-DEFPA = ''.
*        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*          EXPORTING
*            INPUT  = GS_ALV-KTONR
*          IMPORTING
*            OUTPUT = GS_ALV-KTONR.
*        LS_FUNCTIONS-DATA-PARTNER = GS_ALV-KTONR.
*        LS_FUNCTIONS-DATAX-PARTNER =  'X'.
*
*        APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*      ENDIF.
*
*      LS_FUNCTIONS-DATA_KEY-PARVW = 'BA'.
*      APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*      LS_FUNCTIONS-DATA_KEY-PARVW = 'LF'.
*      APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*      LS_FUNCTIONS-DATA_KEY-PARVW = 'RS'.
*      APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*      APPEND LS_PURCHASING TO LS_MASTER_DATA-PURCHASING_DATA-PURCHASING.
*      APPEND LS_MASTER_DATA TO  LT_MASTER_DATA-VENDORS[].
*
*      VMD_EI_API=>INITIALIZE( ).
*
*      CALL METHOD VMD_EI_API=>MAINTAIN_BAPI                                      "VMD_EI_API=>MAINTAIN_DIRECT_INPUT
*        EXPORTING
*          IV_COLLECT_MESSAGES      = 'X'
*          IS_MASTER_DATA           = LT_MASTER_DATA
*        IMPORTING
*          ES_MASTER_DATA_CORRECT   = L1
*          ES_MESSAGE_CORRECT       = L2
*          ES_MASTER_DATA_DEFECTIVE = L3
*          ES_MESSAGE_DEFECTIVE     = L5.
*
*      IF L5-IS_ERROR = ''.
*        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*          EXPORTING
*            WAIT = 'X'.
*      ELSE.
*        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*
*        DATA LS_L5 LIKE LINE OF L5-MESSAGES.
*        LOOP AT L5-MESSAGES INTO LS_L5 WHERE TYPE = 'E' OR TYPE = 'A'.
*          CONCATENATE L_MSGL5 LS_L5-MESSAGE INTO L_MSGL5 SEPARATED BY ';'.
*          CONDENSE L_MSGL5.
*        ENDLOOP.
*
*      ENDIF.
*
*    ELSE.
*      L_MSKZ2 = '该采购组织数据已存在,请输入正确的采购组织!'.
*
*    ENDIF.
*
*  ENDIF.
*
**------------------------------------------------消息反馈-------------------------------------------------*
*  IF  L_MSKZ1 <> '' AND  L_MSKZ2 <> ''.
*    CONCATENATE L_MSKZ1 L_MSKZ2 INTO GS_ALV-REMARK.
*    GS_ALV-ICON_A = ICON_RED_LIGHT.
*    MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK WHERE PARTNER = G_PARTNER AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv
*      IMPORTING
*        E_GRID = L_GRID.
*
*    CALL METHOD L_GRID->CHECK_CHANGED_DATA. "获取alv改变值
*    CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY. "刷新ALV界面
*
*  ELSEIF  L_MSKZ1 = '' AND  L_MSKZ2 <> ''.
*    IF L4-IS_ERROR = ''.
*      CONCATENATE '财务数据扩展成功' L_MSKZ2 INTO GS_ALV-REMARK SEPARATED BY ';'.
*      GS_ALV-ICON_A = ICON_RED_LIGHT.
*      MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK WHERE PARTNER = G_PARTNER AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv
*        IMPORTING
*          E_GRID = L_GRID.
*
*      CALL METHOD L_GRID->CHECK_CHANGED_DATA. "获取alv改变值
*      CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY. "刷新ALV界面
*
*    ELSE.
*      CONCATENATE L_MSGL4 L_MSKZ2 INTO GS_ALV-REMARK SEPARATED BY ';'.
*      GS_ALV-ICON_A = ICON_RED_LIGHT.
*      MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK WHERE PARTNER = G_PARTNER AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv
*        IMPORTING
*          E_GRID = L_GRID.
*
*      CALL METHOD L_GRID->CHECK_CHANGED_DATA. "获取alv改变值
*      CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY. "刷新ALV界面
*
*    ENDIF.
*
*  ELSEIF  L_MSKZ1 <> '' AND  L_MSKZ2 = ''.
*    IF L5-IS_ERROR = ''.
*      CONCATENATE L_MSKZ1 '采购数据扩展成功。'  INTO GS_ALV-REMARK SEPARATED BY ';'.
*      GS_ALV-ICON_A = ICON_RED_LIGHT.
*      MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK WHERE PARTNER = G_PARTNER AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv
*        IMPORTING
*          E_GRID = L_GRID.
*
*      CALL METHOD L_GRID->CHECK_CHANGED_DATA. "获取alv改变值
*      CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY. "刷新ALV界面
*
*    ELSE.
*      CONCATENATE L_MSKZ1 L_MSGL5 INTO GS_ALV-REMARK SEPARATED BY ';'.
*      GS_ALV-ICON_A = ICON_RED_LIGHT.
*      MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK WHERE PARTNER = G_PARTNER AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv
*        IMPORTING
*          E_GRID = L_GRID.
*
*      CALL METHOD L_GRID->CHECK_CHANGED_DATA. "获取alv改变值
*      CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY. "刷新ALV界面
*
*    ENDIF.
*
*  ELSEIF  L_MSKZ1 = '' AND  L_MSKZ2 = ''.
*    IF L4-IS_ERROR = '' AND L5-IS_ERROR = ''.
*      GS_ALV-REMARK = '财务及采购数据扩展成功。'.
*      GS_ALV-ICON_A = ICON_GREEN_LIGHT.
*      MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK WHERE PARTNER = G_PARTNER AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv
*        IMPORTING
*          E_GRID = L_GRID.
*
*      CALL METHOD L_GRID->CHECK_CHANGED_DATA. "获取alv改变值
*      CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY. "刷新ALV界面
*
*    ELSEIF L4-IS_ERROR = '' AND L5-IS_ERROR <> ''.
*      CONCATENATE '财务数据扩展成功' L_MSGL5 INTO GS_ALV-REMARK SEPARATED BY ';'.
*      GS_ALV-ICON_A = ICON_RED_LIGHT.
*      MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK WHERE PARTNER = G_PARTNER AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv
*        IMPORTING
*          E_GRID = L_GRID.
*
*      CALL METHOD L_GRID->CHECK_CHANGED_DATA. "获取alv改变值
*      CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY. "刷新ALV界面
*
*    ELSEIF L4-IS_ERROR <> '' AND L5-IS_ERROR = ''.
*      CONCATENATE L_MSGL4 '采购数据扩展成功。' INTO GS_ALV-REMARK SEPARATED BY ';'.
*      GS_ALV-ICON_A = ICON_RED_LIGHT.
*      MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK WHERE PARTNER = G_PARTNER AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv
*        IMPORTING
*          E_GRID = L_GRID.
*
*      CALL METHOD L_GRID->CHECK_CHANGED_DATA. "获取alv改变值
*      CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY. "刷新ALV界面
*
*    ELSEIF L4-IS_ERROR <> '' AND L5-IS_ERROR <> ''.
*      CONCATENATE L_MSGL4 L_MSGL5 INTO GS_ALV-REMARK SEPARATED BY ';'.
*      GS_ALV-ICON_A = ICON_RED_LIGHT.
*      MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK WHERE PARTNER = G_PARTNER AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'                     "获取alv
*        IMPORTING
*          E_GRID = L_GRID.
*
*      CALL METHOD L_GRID->CHECK_CHANGED_DATA. "获取alv改变值
*      CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY. "刷新ALV界面
*
*    ENDIF.
*
*  ENDIF.

ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  FRM_BP04
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_bp04 .
*  L_BPARTNER                 = GS_ALV-PARTNER.   "业务伙伴号
*  L_PARTN_CAT                = '2'.              "业务伙伴类型
*  L_PARTN_GRP                = GS_ALV-BU_GROUP.  "业务伙伴分组
*
**  财务数据部分
*  CLEAR: LT_RETURN4,LT_RETURN4[].
*  CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2'
*    EXPORTING
*      BUSINESSPARTNER             = L_BPARTNER
*      BUSINESSPARTNERROLECATEGORY = 'FLVN00'
**     ALL_BUSINESSPARTNERROLES    = ' '
*      BUSINESSPARTNERROLE         = 'FLVN00'
**     DIFFERENTIATIONTYPEVALUE    =
**     VALIDFROMDATE               =
**     VALIDUNTILDATE              = '99991231'
*    TABLES
*      RETURN                      = LT_RETURN4.
*
*  CLEAR L_MSG4.                                             "20160721新增
*  LOOP AT LT_RETURN4 WHERE TYPE = 'E' OR TYPE = 'A'.      " OR TYPE = 'W'.
*    CONCATENATE LT_RETURN4-MESSAGE L_MSG4 INTO L_MSG4 SEPARATED BY ';'.
*    CONDENSE L_MSG4.
*  ENDLOOP.
*  IF L_MSG4 = ''.
*    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'                                "角色信息提交(即角色创建成功)
*      EXPORTING
*        WAIT = 'X'.
*
*    L_VENDOR = L_BPARTNER.
*    CLEAR: LS_MASTER_DATA,LS_COMPANY,LT_MASTER_DATA.
*    LS_MASTER_DATA-HEADER-OBJECT_TASK              = 'M'.
*    LS_MASTER_DATA-HEADER-OBJECT_INSTANCE-LIFNR    = L_VENDOR.
*
*    DATA:LV_KTOKK1 TYPE TBC001-KTOKK.
*    CLEAR LV_KTOKK1.
*    SELECT SINGLE KTOKK FROM TBC001 INTO LV_KTOKK1 WHERE BU_GROUP = L_PARTN_GRP.
*    LS_MASTER_DATA-CENTRAL_DATA-CENTRAL-DATA-KTOKK  = LV_KTOKK1. "供应商帐户组
*    LS_MASTER_DATA-CENTRAL_DATA-CENTRAL-DATAX-KTOKK = 'X'. "供应商帐户组
*
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-NAME         = GS_ALV-NAME_ORG1.      "名称1
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-NAME_2       = GS_ALV-NAME_ORG2.      "名称2
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-SORT1        = GS_ALV-BU_SORT1.       "属性(SAP为搜索项 1)
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-SORT2        = GS_ALV-BU_SORT2.       "属性(SAP为搜索项 2)
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-STREET       = GS_ALV-STREET.         "街道/门牌号
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-POSTL_COD1   = GS_ALV-POST_CODE1.     "邮政编码
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-CITY         = GS_ALV-CITY1.          "城市
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-COUNTRY      = GS_ALV-LAND1.          "国家
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-REGION       = GS_ALV-REGIO.          "地区
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-LANGU        = '1'.                   "语言
*
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-NAME         = 'X'.                  "名称1
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-NAME_2       = 'X'.                  "名称2
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-SORT1        = 'X'.                  "属性(SAP为搜索项 1)
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-STREET       = 'X'.                  "街道/门牌号
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-POSTL_COD1   = 'X'.                  "邮政编码
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-CITY         = 'X'.                  "城市
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-COUNTRY      = 'X'.                  "国家
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-REGION       = 'X'.                  "地区
*    LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-LANGU        = 'X'.                  "语言
*
**        LS_MASTER_DATA-COMPANY_DATA-COMPANY            = ''.                      "COMPANY关联类型即LS_COMPANY的关联类型
*    LS_COMPANY-TASK                                = 'M'.
*    LS_COMPANY-DATA_KEY-BUKRS                      = GS_ALV-BUKRS.             "公司代码
*    LS_COMPANY-DATA-AKONT                          = GS_ALV-AKONT.             "统驭科目
*    LS_COMPANY-DATAX-AKONT                         = 'X'.
*    LS_COMPANY-DATA-ZUAWA                          = GS_ALV-ZUAWA.             "排序码
*    LS_COMPANY-DATAX-ZUAWA                         = 'X'.
*    LS_COMPANY-DATA-ZTERM                          = GS_ALV-ZTERM.             "付款条件
*    LS_COMPANY-DATAX-ZTERM                         = 'X'.
*    LS_COMPANY-DATA-ZWELS                          = GS_ALV-DZWELS.            "付款方式
*    LS_COMPANY-DATAX-ZWELS                         = 'X'.
*    LS_COMPANY-DATA-KVERM                          = GS_ALV-ZALTKN.            "旧供应商编码
*    LS_COMPANY-DATAX-KVERM                         = 'X'.
*    LS_COMPANY-DATA-REPRF                          = 'X'.            "检查重复发票
*    LS_COMPANY-DATAX-REPRF                         = 'X'.
*
*    APPEND LS_COMPANY TO LS_MASTER_DATA-COMPANY_DATA-COMPANY.
*    APPEND LS_MASTER_DATA TO  LT_MASTER_DATA-VENDORS[].
*
*    VMD_EI_API=>INITIALIZE( ).
*
*    CALL METHOD VMD_EI_API=>MAINTAIN_BAPI                                      "VMD_EI_API=>MAINTAIN_DIRECT_INPUT
*      EXPORTING
*        IS_MASTER_DATA           = LT_MASTER_DATA
*      IMPORTING
*        ES_MASTER_DATA_CORRECT   = L1
*        ES_MESSAGE_CORRECT       = L2
*        ES_MASTER_DATA_DEFECTIVE = L3
*        ES_MESSAGE_DEFECTIVE     = L4.
*
*    IF L4-IS_ERROR = ''.
*      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*        EXPORTING
*          WAIT = 'X'.
*    ELSE.
*      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*
*      DATA LS_L4 LIKE LINE OF L4-MESSAGES.
*      LOOP AT L4-MESSAGES INTO LS_L4 WHERE TYPE = 'E' OR TYPE = 'A'.
*        CONCATENATE L_MSGL4 LS_L4-MESSAGE INTO L_MSGL4 SEPARATED BY ';'.
*        CONDENSE L_MSGL4.
*      ENDLOOP.
*
*    ENDIF.
*
*  ELSE.
*    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
**       IMPORTING
**         RETURN        =
*      .
*
*  ENDIF.
*
*  IF GS_ALV-BU_GROUP <> 'BP03'.
**  采购数据部分
*    CLEAR: LT_RETURN5,LT_RETURN5[].
*    CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2'
*      EXPORTING
*        BUSINESSPARTNER             = L_BPARTNER
*        BUSINESSPARTNERROLECATEGORY = 'FLVN01'
**       ALL_BUSINESSPARTNERROLES    = ' '
*        BUSINESSPARTNERROLE         = 'FLVN01'
**       DIFFERENTIATIONTYPEVALUE    =
**       VALIDFROMDATE               =
**       VALIDUNTILDATE              = '99991231'
*      TABLES
*        RETURN                      = LT_RETURN5.
*
*    CLEAR L_MSG5.                                           "20160721新增
*    LOOP AT LT_RETURN5 WHERE TYPE = 'E' OR TYPE = 'A'.    " OR TYPE = 'W'.
*      CONCATENATE LT_RETURN5-MESSAGE L_MSG5 INTO L_MSG4 SEPARATED BY ';'.
*      CONDENSE L_MSG5.
*    ENDLOOP.
*    IF L_MSG5 = ''.
*      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'                                "角色信息提交(即角色创建成功)
*        EXPORTING
*          WAIT = 'X'.
*
*      L_VENDOR = L_BPARTNER.
*      FREE: LS_MASTER_DATA,LS_PURCHASING,LT_MASTER_DATA.
*      LS_MASTER_DATA-HEADER-OBJECT_TASK              = 'M'.
*      LS_MASTER_DATA-HEADER-OBJECT_INSTANCE-LIFNR    = L_VENDOR.
*
*      DATA:LV_KTOKK2 TYPE TBC001-KTOKK.
*      CLEAR LV_KTOKK2.
*      SELECT SINGLE KTOKK FROM TBC001 INTO LV_KTOKK2 WHERE BU_GROUP = L_PARTN_GRP.
*      LS_MASTER_DATA-CENTRAL_DATA-CENTRAL-DATA-KTOKK  = LV_KTOKK2. "供应商帐户组
*      LS_MASTER_DATA-CENTRAL_DATA-CENTRAL-DATAX-KTOKK = 'X'. "供应商帐户组
*
**        LS_MASTER_DATA-PURCHASING_DATA-PURCHASING           = ''.                      "PURCHASING关联类型即LS_PURCHASING的关联类型
*      "LS_PURCHASING-TASK                                = 'M'.
*      LS_PURCHASING-TASK                                = 'I'.
*      LS_PURCHASING-DATA_KEY-EKORG                      = GS_ALV-EKORG.             "采购组织
*      LS_PURCHASING-DATA-WAERS                          = GS_ALV-WAERS.             "币种
*      LS_PURCHASING-DATAX-WAERS                         = 'X'.
*      LS_PURCHASING-DATA-ZTERM                          = GS_ALV-ZTERM2.            "付款条件
*      LS_PURCHASING-DATAX-ZTERM                         = 'X'.
*      LS_PURCHASING-DATA-EKGRP                          = GS_ALV-EKGRP.            "采购组
*      LS_PURCHASING-DATAX-EKGRP                         = 'X'.
*      LS_PURCHASING-DATA-VERKF                          = GS_ALV-VERKF.            "供应商联系人
*      LS_PURCHASING-DATAX-VERKF                         = 'X'.
*      LS_PURCHASING-DATA-TELF1                          = GS_ALV-TELF1.            "供应商联系电话
*      LS_PURCHASING-DATAX-TELF1                         = 'X'.
*      LS_PURCHASING-DATA-WEBRE                          = GS_ALV-WEBRE.                     "基于收货的发票校验
*      LS_PURCHASING-DATAX-WEBRE                         = 'X'.
*      LS_PURCHASING-DATA-KALSK                         = GS_ALV-KALSK. "方案组
*      LS_PURCHASING-DATAX-KALSK                         = 'X'.
*
*      LS_FUNCTIONS-TASK = 'M'.
*
*      IF GS_ALV-KTONR <> ''.
*        LS_FUNCTIONS-DATA_KEY-PARVW = 'ZM'.                "ER内外部转换后为ZM
**        LS_FUNCTIONS-DATA-DEFPA = ''.
*        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*          EXPORTING
*            INPUT  = GS_ALV-KTONR
*          IMPORTING
*            OUTPUT = GS_ALV-KTONR.
*        LS_FUNCTIONS-DATA-PARTNER = GS_ALV-KTONR.
*        LS_FUNCTIONS-DATAX-PARTNER =  'X'.
*        APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*      ENDIF.
*
*      LS_FUNCTIONS-DATA_KEY-PARVW = 'BA'.
*      APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*      LS_FUNCTIONS-DATA_KEY-PARVW = 'LF'.
*      APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*      LS_FUNCTIONS-DATA_KEY-PARVW = 'RS'.
*      APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*      APPEND LS_PURCHASING TO LS_MASTER_DATA-PURCHASING_DATA-PURCHASING.
*      APPEND LS_MASTER_DATA TO  LT_MASTER_DATA-VENDORS[].
*
*      VMD_EI_API=>INITIALIZE( ).
*
*      CALL METHOD VMD_EI_API=>MAINTAIN_BAPI                                      "VMD_EI_API=>MAINTAIN_DIRECT_INPUT
*        EXPORTING
*          IV_COLLECT_MESSAGES      = 'X'
*          IS_MASTER_DATA           = LT_MASTER_DATA
*        IMPORTING
*          ES_MASTER_DATA_CORRECT   = L1
*          ES_MESSAGE_CORRECT       = L2
*          ES_MASTER_DATA_DEFECTIVE = L3
*          ES_MESSAGE_DEFECTIVE     = L5.
*
*      IF L5-IS_ERROR = ''.
*        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*          EXPORTING
*            WAIT = 'X'.
*      ELSE.
*        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*
*        DATA LS_L5 LIKE LINE OF L5-MESSAGES.
*        LOOP AT L5-MESSAGES INTO LS_L5 WHERE TYPE = 'E' OR TYPE = 'A'.
*          CONCATENATE L_MSGL5 LS_L5-MESSAGE INTO L_MSGL5 SEPARATED BY ';'.
*          CONDENSE L_MSGL5.
*        ENDLOOP.
*
*      ENDIF.
*
*    ELSE.
*      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
**       IMPORTING
**         RETURN        =
*        .
*
*    ENDIF.
*
*  ENDIF.
**------------------------------------------------消息反馈-------------------------------------------------*
*  IF  L_MSG4 = '' AND L_MSG5 = '' AND L4-MESSAGES[] IS INITIAL  AND L5-MESSAGES[] IS INITIAL.
*    CONCATENATE '业务伙伴创建成功,编号为' L_BPARTNER INTO GS_ALV-REMARK.
*    CONDENSE GS_ALV-REMARK.
*    GS_ALV-ICON_A = ICON_GREEN_LIGHT.
*    MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK WHERE NAME_ORG1 = GS_ALV-NAME_ORG1 AND BU_SORT1 = GS_ALV-BU_SORT1 AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*  ELSE.
*    CONCATENATE L_MSG4 L_MSGL4 L_MSG5 L_MSGL5 INTO GS_ALV-REMARK.
*    CONDENSE GS_ALV-REMARK.
*    GS_ALV-ICON_A = ICON_RED_LIGHT.
*    MODIFY GT_ALV FROM GS_ALV TRANSPORTING ICON_A REMARK WHERE NAME_ORG1 = GS_ALV-NAME_ORG1 AND BU_SORT1 = GS_ALV-BU_SORT1 AND BUKRS = GS_ALV-BUKRS AND EKORG = GS_ALV-EKORG.
*
*  ENDIF.
*
** 获取alv
*  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
*    IMPORTING
*      E_GRID = L_GRID.
*
** 获取alv改变值
*  CALL METHOD L_GRID->CHECK_CHANGED_DATA.
*
** 刷新ALV界面
*  CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY.

ENDFORM.


*----------------------------------------------------------------------*
***INCLUDE ZMMRP0004_EXCEL.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FRM_EXCEL_DOWN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_excel_down .
* 相关变量定义  
DATA:lo_objdata     LIKE wwwdatatab,       lo_mime        
LIKE w3mime,       lc_filename    
TYPE string VALUE '供应商批导模版',       lc_fullpath    
TYPE string VALUE 'c:\',       lc_path        
TYPE string VALUE 'c:\',       ls_destination 
LIKE rlgrap-filename,       ls_objnam      
TYPE string,       l_rc           
LIKE sy-subrc,       ls_errtxt      
TYPE string,
*       L_OBJID        TYPE WWWDATATAB-OBJID,       l_dest         
LIKE sapb-sappfad.

* 模版上传的对象名
*  L_OBJID = 'ZMMRP0004'.
* 模板下载路径名  
CALL METHOD cl_gui_frontend_services=>file_save_dialog    
EXPORTING      window_title              
'模板下载'      default_extension         
'xlsx'      default_file_name         
= lc_filename    
CHANGING      filename                  
= lc_filename      path                      
= lc_path      fullpath                  
= lc_fullpath    
EXCEPTIONS      cntl_error                
1      error_no_gui              
2      not_supported_by_gui      
3      invalid_default_file_name 
4      
OTHERS                    5.
* 没有选择路径  
IF lc_fullpath ''.    
MESSAGE  '请选择正确的路径!' TYPE 'E'.  
ELSE.
*-  路径名    l_dest 
= lc_fullpath.    

SELECT SINGLE           relid                   
"IMPORT/EXPORT 记录中的区域           objid                   
"SAP WWW 网关对象名      
FROM wwwdata      
INTO CORRESPONDING FIELDS OF lo_objdata     
WHERE srtf2 0      
AND relid 'MI'      
AND objid = gc_objid.    

IF sy-subrc <> OR lo_objdata-objid IS INITIAL.      
MESSAGE '没有获得模板数据' TYPE 'E'.    
ENDIF.    ls_destination 

= l_dest.    
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'      
EXPORTING        
key         = lo_objdata        destination 
= ls_destination      
IMPORTING        rc          
= l_rc.    
IF l_rc <> 0.      
MESSAGE '模板下载失败' TYPE 'E'.    
ENDIF.  
ENDIF.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  FRM_SET_FILE_F4
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_FILE  text
*----------------------------------------------------------------------*
FORM frm_set_file_f4 USING i_file TYPE rlgrap-filename.
* 局部变量-文件名定义  
DATA l_filename TYPE rlgrap-filename.  
CLEAR l_filename.
* 选择文件搜索帮助  
CALL FUNCTION 'WS_FILENAME_GET'    
EXPORTING      def_path         
= i_file      
mask             ',*.xlsx,*.XLSX,*.xls,*.XLS.'      
mode             '0'      
title            TEXT-002    
IMPORTING      filename         
= l_filename    
EXCEPTIONS      inv_winsys       
1      no_batch         
2      selection_cancel 
3      selection_error  
4      
OTHERS           5.
* 如果选择了文件  
IF sy-subrc AND l_filename IS NOT INITIAL.    p_file 
= l_filename.  
ENDIF.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  FRM_FILE_OBLIGATORY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_file_obligatory .
* 文件必输校验  
IF p_file IS INITIAL.    
MESSAGE '请选择导入的文件' TYPE 'S' DISPLAY LIKE 'E'.    
LEAVE LIST-PROCESSING.  
ENDIF.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_upload_data .
* 局部变量的定义  
DATA:lt_excel TYPE TABLE OF alsmex_tabline.        "参照类型有标准的调整为ZALSMEX_TABLINE_LINE。  
DATA:    ls_excel TYPE alsmex_tabline.

***  IF RB1 = 'X'.  
CLEAR gt_alv.
* 选择文件后做后续处理  
CHECK p_file IS NOT INITIAL.
* 把文件的数据变成内表  
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'    
EXPORTING      filename                
= p_file      i_begin_col             
= gc_begin_col      i_begin_row             
= gc_begin_row      i_end_col               
= gc_end_col      i_end_row               
= gc_end_row      
"SHEET_NAME              = '新增修改扩展'    
TABLES      intern                  
= lt_excel    
EXCEPTIONS      inconsistent_parameters 
1      upload_ole              
2      
OTHERS                  3.

* 处理内表数据  
DATA: l_index    TYPE i.  
CLEAR ls_excel.  
LOOP AT lt_excel INTO ls_excel.    
MOVE ls_excel-col TO l_index.    
ASSIGN COMPONENT l_index OF STRUCTURE gs_alv TO FIELD-SYMBOL(<f>).    

TRY.        
MOVE ls_excel-value TO <f>.      
CATCH cx_root INTO DATA(cx).        gs_alv
-remark = cx->get_text).        gs_alv
-icon_a = icon_led_red.    
ENDTRY.
*
*    CASE LS_EXCEL-COL.
*      WHEN 1.
*        GS_ALV-BU_GROUP           = LS_EXCEL-VALUE.
*      WHEN 2.
*        GS_ALV-PARTNER            = LS_EXCEL-VALUE.
*      WHEN 3.
*        GS_ALV-NAME_ORG1          = LS_EXCEL-VALUE.
*      WHEN 4.
*        GS_ALV-NAME_ORG2          = LS_EXCEL-VALUE.
*      WHEN 5.
*        GS_ALV-BU_SORT1           = LS_EXCEL-VALUE.
*      WHEN 6.
*        GS_ALV-STREET             = LS_EXCEL-VALUE.
*      WHEN 7.
*        GS_ALV-POST_CODE1         = LS_EXCEL-VALUE.
*      WHEN 8.
*        GS_ALV-CITY1              = LS_EXCEL-VALUE.
*      WHEN 9.
*        GS_ALV-LAND1              = LS_EXCEL-VALUE.
*      WHEN 10.
*        GS_ALV-REGIO              = LS_EXCEL-VALUE.
*      WHEN 11.
*        GS_ALV-LANGU              = LS_EXCEL-VALUE.
*      WHEN 12.
*        GS_ALV-TEL_NUMBER         = LS_EXCEL-VALUE.
*      WHEN 13.
*        GS_ALV-TEL_EXTENS         = LS_EXCEL-VALUE.
*      WHEN 14.
*        GS_ALV-MOB_NUMBER         = LS_EXCEL-VALUE.
*      WHEN 15.
*        GS_ALV-FAX_NUMBER         = LS_EXCEL-VALUE.
*      WHEN 16.
*        GS_ALV-FAX_EXTENS         = LS_EXCEL-VALUE.
*      WHEN 17.
*        GS_ALV-SMTP_ADDR          = LS_EXCEL-VALUE.
*      WHEN 18.
*        GS_ALV-TAXNUM             = LS_EXCEL-VALUE.
*      WHEN 19.
*        GS_ALV-ZALTKN             = LS_EXCEL-VALUE.
*      WHEN 20.
*        GS_ALV-BUKRS              = LS_EXCEL-VALUE.
*      WHEN 21.
*        GS_ALV-AKONT              = LS_EXCEL-VALUE.
*      WHEN 22.
*        GS_ALV-ZUAWA              = LS_EXCEL-VALUE.
*      WHEN 23.
*        GS_ALV-ZTERM              = LS_EXCEL-VALUE.
*      WHEN 24.
*        GS_ALV-DZWELS             = LS_EXCEL-VALUE.
*      WHEN 25.
*        GS_ALV-BANK_LAND          = LS_EXCEL-VALUE.
*      WHEN 26.
*        GS_ALV-BANK_ID          = LS_EXCEL-VALUE.
*      WHEN 27.
*        GS_ALV-BANK_NO            = LS_EXCEL-VALUE.
*      WHEN 28.
*        GS_ALV-BKONT            = LS_EXCEL-VALUE.
*      WHEN 29.
*        GS_ALV-KOINH              = LS_EXCEL-VALUE.
*      WHEN 30.
*        GS_ALV-EKORG              = LS_EXCEL-VALUE.
*      WHEN 31.
*        GS_ALV-WAERS              = LS_EXCEL-VALUE.
*      WHEN 32.
*        GS_ALV-ZTERM2             = LS_EXCEL-VALUE.
**      WHEN 33.
**        gs_alv-verkf              = ls_excel-value.
**      WHEN 34.
**        gs_alv-telf1              = ls_excel-value.
**      WHEN 35.
**        gs_alv-ktonr              = ls_excel-value.
**      WHEN 36.
**        gs_alv-ekgrp              = ls_excel-value.
*      WHEN 33.
*        GS_ALV-KALSK              = LS_EXCEL-VALUE.
*      WHEN 34.
*        GS_ALV-WEBRE              = LS_EXCEL-VALUE.
*      WHEN OTHERS.
*    ENDCASE.    
AT END OF row.      gs_alv
-icon_a = icon_yellow_light.      
APPEND gs_alv TO gt_alv.      
CLEAR gs_alv.    
ENDAT.  
ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_BP_BUT000
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_bp_but000 .  

DATA: l_bpartner       TYPE bapibus1006_head-bpartner,           "业务伙伴编码        l_partn_cat      
TYPE bapibus1006_head-partn_cat,          "业务伙伴类别        l_partn_grp      
TYPE bapibus1006_head-partn_grp,          "业务伙伴分组        ls_central       
TYPE bapibus1006_central,                 "一般 BP 数据,与业务伙伴类别无关        ls_central_organ 
TYPE bapibus1006_central_organ,           "SAP BP: 组织数据的 BAPI 结构        ls_address       
TYPE bapibus1006_address,                 "SAP BP: 地址数据的 BAPI 结构        lt_bapiadtel     
LIKE bapiadtel  OCCURS WITH HEADER LINE"电话号码的 BAPI 结构(办公地址服务)        lt_bapiadfax     
LIKE bapiadfax  OCCURS WITH HEADER LINE"传真号码的 BAPI 结构(办公地址服务)        lt_bapiadsmtp    
LIKE bapiadsmtp OCCURS WITH HEADER LINE"电子邮件地址的 BAPI 结构(办公地址服务)        ls_guid          
TYPE bus000___i,                          "CBP: 一般数据和状态信息        ls_custo         
TYPE bus000_eew,                          "SAP BP: 传输用于 CI 包括 BP 扩展的结构        lt_return        
LIKE bapiret2   OCCURS WITH HEADER LINE"返回参数        lt_return_tax    
LIKE bapiret2   OCCURS WITH HEADER LINE,        lt_return1       
TYPE bus_bapiret2_t,        ls_return1       
LIKE LINE OF lt_return1.  
CLEAR:l_bpartner,l_partn_cat,l_partn_grp,ls_central,ls_central_organ,ls_address,        lt_bapiadtel[]
,lt_bapiadfax[],lt_bapiadsmtp[],ls_guid,ls_custo,lt_return[],        lt_return_tax[]
,lt_return1[],ls_return1.

*  LS_CENTRAL-TITLELETTER     = GS_ALV-ZALTKN.    "旧供应商编号  l_bpartner                 
= gs_alv-partner.   "业务伙伴号  l_partn_cat                
'2'.              "业务伙伴类型  l_partn_grp                
= gs_alv-bu_group.  "业务伙伴分组

*  LS_CENTRAL-TITLE_KEY       = '0003'.           "称谓  ls_central
-title_key   = gs_alv-title_key.  ls_central
-searchterm1 = gs_alv-bu_sort1.  "检索项  ls_central_organ
-name1 = gs_alv-name_org1"名称1  ls_central_organ
-name2 = gs_alv-name_org2"名称2

*  LS_CENTRAL-SEARCHTERM2     = GS_ALV-BU_SORT2.  "检索项  ls_address

-country         = gs_alv-land1.     "国家  ls_address
-region          = gs_alv-regio.     "地区  ls_address
-city            = gs_alv-city1.     "城市  ls_address
-street          = gs_alv-street.    "街道  ls_address
-postl_cod1      = gs_alv-post_code1."邮编

*  CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
*    EXPORTING
*      INPUT            = GS_ALV-LANGU
*    IMPORTING
*      OUTPUT           = LS_ADDRESS-LANGU     "语言
*    EXCEPTIONS
*      UNKNOWN_LANGUAGE = 1
*      OTHERS           = 2.
*  IF SY-SUBRC <> 0.
** Implement suitable error handling here
*  ENDIF.  ls_address
-langu  '1'.  

CLEAR lt_bapiadtel.  lt_bapiadtel
-country   = ls_address-country.  lt_bapiadtel
-std_no    'X'.  lt_bapiadtel
-telephone = gs_alv-tel_number.    "电话
*  LT_BAPIADTEL-EXTENSION = GS_ALV-TEL_EXTENS.    "电话-分机  
APPEND lt_bapiadtel.  

CLEAR lt_bapiadtel.  lt_bapiadtel
-country   = ls_address-country.  lt_bapiadtel
-std_no    'X'.  lt_bapiadtel
-r_3_user  '2'.                  "标识符:电话是移动电话  lt_bapiadtel
-telephone = gs_alv-mob_number.    "移动电话  
APPEND lt_bapiadtel.  

CLEAR lt_bapiadfax.  lt_bapiadfax
-country   = ls_address-country.  lt_bapiadfax
-std_no    'X'.  lt_bapiadfax
-fax       = gs_alv-fax_number.    "传真
*  LT_BAPIADFAX-EXTENSION = GS_ALV-FAX_EXTENS.    "传真-分机  
APPEND lt_bapiadfax.  

CLEAR lt_bapiadsmtp.
*  LT_BAPIADSMTP-COUNTRY   = LS_ADDRESS-COUNTRY.  lt_bapiadsmtp
-std_no    'X'.  lt_bapiadsmtp
-e_mail    = gs_alv-smtp_addr.     "E-mail  
APPEND lt_bapiadsmtp.  

CLEAR: lt_return1, lt_return1[].  
CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'    
EXPORTING      businesspartnerextern   
= l_bpartner      partnercategory         
= l_partn_cat      partnergroup            
= l_partn_grp      centraldata             
= ls_central
*     CENTRALDATAPERSON       = LS_CENTRAL_PERSON      centraldataorganization 
= ls_central_organ
*     CENTRALDATAGROUP        =      addressdata             
= ls_address
*     DUPLICATE_MESSAGE_TYPE  =
*     ACCEPT_ERROR            = ' '    
IMPORTING      businesspartner         
= l_bpartner    
TABLES      telefondata             
= lt_bapiadtel      faxdata                 
= lt_bapiadfax
*     TELETEXDATA             =
*     TELEXDATA               =      e_maildata              
= lt_bapiadsmtp
*     RMLADDRESSDATA          =
*     X400ADDRESSDATA         =
*     RFCADDRESSDATA          =
*     PRTADDRESSDATA          =
*     SSFADDRESSDATA          =
*     URIADDRESSDATA          =
*     PAGADDRESSDATA          =
*     ADDRESSNOTES            =
*     COMMUNICATIONNOTES      =
*     COMMUNICATIONUSAGE      =
*     TELEFONDATANONADDRESS   =
*     FAXDATANONADDRESS       =
*     TELETEXDATANONADDRESS   =
*     TELEXDATANONADDRESS     =
*     E_MAILDATANONADDRESS    =
*     RMLADDRESSDATANONADDRESS           =
*     X400ADDRESSDATANONADDRESS          =
*     RFCADDRESSDATANONADDRESS           =
*     PRTADDRESSDATANONADDRESS           =
*     SSFADDRESSDATANONADDRESS           =
*     URIADDRESSDATANONADDRESS           =
*     PAGADDRESSDATANONADDRESS           =
*     COMMUNICATIONNOTESNONADDRESS       =
*     COMMUNICATIONUSAGENONADDRESS       =      
return                  = lt_return
*     ADDRESSDUPLICATES       =    
.  

LOOP AT lt_return WHERE type 'A' OR type 'E'.    gv_err 
'X'.    gs_alv
-icon_a = gc_red.    gs_alv
-remark = gs_alv-remark && lt_return-message.    
EXIT.  
ENDLOOP.  
IF gv_err 'X'.    
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.    
RETURN.  
ELSE.    
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'      
EXPORTING        
wait 'X'.    gs_alv
-icon_a   = gc_yellow.    gs_alv
-lfa1f 'X'.    gs_alv
-remark = gs_alv-remark && '供应商基本视图扩展成功'.  
ENDIF.



ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_APPEND_BANK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_append_bank .
***  DATA: ls_bnka           TYPE bnka.
***  DATA: lv_strlenth1 TYPE i,
***        lv_strlenth2 TYPE i.
***  DATA: ls_bankdetaildata TYPE bapibus1006_bankdetail, "SAP BP:银行细目数据的 BAPI 结构
***        lt_return         LIKE bapiret2   OCCURS 0 WITH HEADER LINE.
***
***  DATA: l_lifnr TYPE lifnr.
***  DATA: lv_bankn    TYPE but0bk-bankn,
***        lv_bank_ref TYPE but0bk-bkref.
***
*****  通过业务伙伴得到业务编号
****  PERFORM FRM_GET_CUSCD_FROM_PATCD USING GW_LIST-KUNNR CHANGING L_CUSTOMER.
***
******  SELECT SINGLE * FROM bnka INTO ls_bnka
******   WHERE banks EQ gs_alv-banks
******     AND bankl EQ gs_alv-bankl.
***  IF sy-subrc NE 0.
***    gs_alv-icon_a  = gc_yellow.
***    gs_alv-remark   = gs_alv-remark && '/' && '银行代码不存在'.
***  ELSE.
******    lv_bankn = gs_alv-bankn.
******    lv_strlenth1 = strlen( gs_alv-bankn ).
***    IF lv_strlenth1 > 18.
***      lv_bank_ref = gs_alv-bankn+18(20).
***    ENDIF.
***    IF  lv_bank_ref IS INITIAL.
***
***      SELECT SINGLE bankn  FROM but0bk INTO lv_bankn
***        WHERE partner = gs_alv-partner AND bankn = lv_bankn  .
***    ELSE.
***      SELECT SINGLE bankn  FROM but0bk INTO lv_bankn
***        WHERE partner = gs_alv-partner AND bankn = lv_bankn AND bkref = lv_bank_ref .
***    ENDIF.
***    IF sy-subrc = 0.
***      gs_alv-icon_a  = gc_yellow.
***      gs_alv-remark   = gs_alv-remark && '/' && '银行账户已经存在'.
***      RETURN.
***    ENDIF.
***    CLEAR: ls_bankdetaildata,lt_return[].
***    ls_bankdetaildata-bank_ctry           = gs_alv-banks.    "银行国家
***    ls_bankdetaildata-bank_key            = gs_alv-bankl.    "银行代码
****    LS_BANKDETAILDATA-CTRL_KEY           = GS_ALV-BKONT.    "银行控制码
***    ls_bankdetaildata-bank_acct           = gs_alv-bankn.    "银行账号
****     LS_BANKDETAILDATA-BANKACCOUNTNAME    = GS_ALV-ACCNAME.    "银行账户名称
***    lv_strlenth1 = strlen( gs_alv-bankn ).
***    IF lv_strlenth1 > 18.
***      ls_bankdetaildata-bank_ref = gs_alv-bankn+18(20).
***    ENDIF.
***    ls_bankdetaildata-accountholder = gs_alv-koinh.    "账户持有人
****   银行信息追加
***    CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_ADD'
***      EXPORTING
***        businesspartner = gs_alv-partner
***        bankdetaildata  = ls_bankdetaildata
***      TABLES
***        return          = lt_return.
***
***    LOOP AT lt_return WHERE type = 'A' OR type = 'E'.
***      gs_alv-icon_a  = gc_yellow.
***      gs_alv-remark = gs_alv-remark && '/' && lt_return-message.
***    ENDLOOP.
***    IF sy-subrc EQ 0.
***      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
***    ELSE.
***      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
***        EXPORTING
***          wait = 'X'.
***      gs_alv-icon_a = gc_yellow.
***      gs_alv-remark = gs_alv-remark && '/' && '已扩展银行信息'.
***    ENDIF.
***  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_APPEND_TAXNUM
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_append_taxnum .  
DATA: lt_return         LIKE bapiret2   OCCURS WITH HEADER LINE.

* DATA: L_CUSTOMER TYPE KUNNR.  
DATA lv_taxnum TYPE dfkkbptaxnum-taxnum.

**  通过业务伙伴得到业务编号
*  PERFORM FRM_GET_CUSCD_FROM_PATCD USING GW_LIST-KUNNR CHANGING L_CUSTOMER.  

SELECT SINGLE taxnum FROM dfkkbptaxnum INTO lv_taxnum      
WHERE taxnum = gs_alv-taxnum AND partner = gs_alv-partner.  
IF sy-subrc 0.    gs_alv
-icon_a  = gc_yellow.    gs_alv
-remark   = gs_alv-remark && '/' && '增值税号已经存在'.  
ELSE.

*   增值税信息增加    
CALL FUNCTION 'BAPI_BUPA_TAX_ADD'      
EXPORTING        businesspartner 
= gs_alv-partner        taxtype         
'CN0'        taxnumber       
= gs_alv-taxnum      
TABLES        
return          = lt_return.    

LOOP AT lt_return WHERE type 'A' OR type 'E'.      gs_alv
-icon_a  = gc_yellow.      gs_alv
-remark = gs_alv-remark && '/' && lt_return-message.    
ENDLOOP.    
IF sy-subrc EQ 0.      
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.    
ELSE.      
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'        
EXPORTING          
wait 'X'.      gs_alv
-icon_a = gc_yellow.      gs_alv
-remark = gs_alv-remark && '/' && '已增加增值税号信息'.    
ENDIF.  
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BP_LFM1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_bp_lfm1 .  
DATA: ls_phone TYPE cvis_ei_phone_str,        ls_fax   
TYPE cvis_ei_fax_str,        ls_smtp  
TYPE cvis_ei_smtp_str.  
DATA: lt_return      LIKE bapiret2   OCCURS WITH HEADER LINE,           "返回参数.        ls_purchasing  
TYPE vmds_ei_purchasing,        ls_functions   
TYPE vmds_ei_functions,        lt_functions   
TYPE vmds_ei_functions_t,        lt_master_data 
TYPE vmds_ei_main,        ls_master_data 
TYPE vmds_ei_extern.  
DATA: lv_lifnr TYPE lfa1-lifnr.  

CLEAR: lt_return.  
REFRESH: lt_return.  
CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2'    
EXPORTING      businesspartner             
= gs_alv-partner      businesspartnerrolecategory 
'FLVN01'
*     ALL_BUSINESSPARTNERROLES    = ' '      businesspartnerrole         
'FLVN01'
*     DIFFERENTIATIONTYPEVALUE    =
*     VALIDFROMDATE               =
*     VALIDUNTILDATE              = '99991231'    
TABLES      
return                      = lt_return.                                                            
"20160721新增  
LOOP AT lt_return WHERE type 'A' OR type 'E'.
*    GW_LIST-ICON = GC_RED.
*    GW_LIST-MSG  = LT_RETURN-MESSAGE.    gv_err 
'X'.    
EXIT.  
ENDLOOP.  

IF gv_err 'X'.  
ELSE.    
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'      
EXPORTING        
wait 'X'.  
ENDIF.  

CLEAR: ls_master_data,ls_purchasing,ls_master_data,lt_master_data.  
REFRESH:lt_functions.  ls_master_data

-header-object_task              'M'.  ls_master_data
-header-object_instance-lifnr    = gs_alv-partner.  

DATA:lv_ktokk2 TYPE tbc001-ktokk.  
CLEAR lv_ktokk2.  
SELECT SINGLE ktokk FROM tbc001 INTO lv_ktokk2 WHERE bu_group = gs_alv-bu_group.  ls_master_data
-central_data-central-data-ktokk  = lv_ktokk2"供应商帐户组  ls_master_data
-central_data-central-datax-ktokk 'X'"供应商帐户组  

SELECT SINGLE lifnr    
INTO lv_lifnr    
FROM lfa1    
WHERE lifnr = gs_alv-partner.  
IF sy-subrc <> 0.    ls_master_data
-central_data-address-task 'I'.    ls_master_data
-central_data-address-postal-data-title       = gs_alv-title_key.  " 地址关键字的表格    ls_master_data
-central_data-address-postal-datax-title      'X'.    ls_master_data
-central_data-address-postal-data-name        = gs_alv-name_org1.  " 名称1    ls_master_data
-central_data-address-postal-datax-name       'X'.    ls_master_data
-central_data-address-postal-data-name_2      = gs_alv-name_org2.  " 名称2    ls_master_data
-central_data-address-postal-datax-name_2     'X'.    ls_master_data
-central_data-address-postal-data-sort1       = gs_alv-bu_sort1.   " 搜索词 1    ls_master_data
-central_data-address-postal-datax-sort1      'X'.    ls_master_data
-central_data-address-postal-data-country     = gs_alv-land1.      " 国家    ls_master_data
-central_data-address-postal-datax-country    'X'.    ls_master_data
-central_data-address-postal-data-region      = gs_alv-regio.      " 地区    ls_master_data
-central_data-address-postal-datax-region     'X'.    ls_master_data
-central_data-address-postal-data-city        = gs_alv-city1.      " 城市    ls_master_data
-central_data-address-postal-datax-city       'X'.    ls_master_data
-central_data-address-postal-data-street      = gs_alv-street.     " 街道    ls_master_data
-central_data-address-postal-datax-street     'X'.    ls_master_data
-central_data-address-postal-data-postl_cod1  = gs_alv-post_code1" 邮编    ls_master_data
-central_data-address-postal-datax-postl_cod1 'X'.    ls_master_data
-central_data-address-postal-data-langu       1.                 " 语言    ls_master_data
-central_data-address-postal-datax-langu      'X'.    

CLEAR ls_phone.    ls_phone
-contact-task 'I'.    ls_phone
-contact-data-country    = gs_alv-land1.      " 国家.    ls_phone
-contact-datax-country   'X'.    ls_phone
-contact-data-std_no     'X'.    ls_phone
-contact-datax-std_no    'X'.    ls_phone
-contact-data-home_flag  'X'.    ls_phone
-contact-datax-home_flag 'X'.    ls_phone
-contact-data-telephone  = gs_alv-tel_number" 电话.    ls_phone
-contact-datax-telephone 'X'.    ls_phone
-contact-data-r_3_user  '1'.    ls_phone
-contact-datax-r_3_user 'X'.    
APPEND ls_phone TO ls_master_data-central_data-address-communication-phone-phone[].    

CLEAR ls_phone.    ls_phone
-contact-task 'I'.    ls_phone
-contact-data-country    = gs_alv-land1.      " 国家.    ls_phone
-contact-datax-country   'X'.    ls_phone
-contact-data-telephone  = gs_alv-tel_number" 移动电话    ls_phone
-contact-datax-telephone 'X'.    ls_phone
-contact-data-r_3_user  '3'.    ls_phone
-contact-datax-r_3_user 'X'.    
APPEND ls_phone TO ls_master_data-central_data-address-communication-phone-phone[].    

CLEAR ls_fax.    ls_fax
-contact-task          'I'.    ls_fax
-contact-data-country    = gs_alv-land1.           " 国家.    ls_fax
-contact-datax-country   'X'.    ls_fax
-contact-data-std_no     'X'.    ls_fax
-contact-datax-std_no    'X'.    ls_fax
-contact-data-home_flag  'X'.    ls_fax
-contact-datax-home_flag 'X'.    ls_fax
-contact-data-fax        = gs_alv-fax_number.      " 传真    ls_fax
-contact-datax-fax       'X'.    
APPEND ls_fax TO ls_master_data-central_data-address-communication-fax-fax[].    

CLEAR ls_smtp.    ls_smtp
-contact-task 'I'.    ls_smtp
-contact-data-std_no     'X'.    ls_smtp
-contact-datax-std_no    'X'.    ls_smtp
-contact-data-home_flag  'X'.    ls_smtp
-contact-datax-home_flag 'X'.    ls_smtp
-contact-data-e_mail     = gs_alv-smtp_addr.   " 邮箱    ls_smtp
-contact-datax-e_mail    'X'.    
APPEND ls_smtp TO ls_master_data-central_data-address-communication-smtp-smtp[].  
ENDIF.  ls_purchasing
-task                              'I'.  ls_purchasing
-data_key-ekorg                    = gs_alv-ekorg.    " 采购组织  ls_purchasing
-data-waers                        = gs_alv-waers.    " 币种  ls_purchasing
-datax-waers                       'X'.  ls_purchasing
-data-zterm                        = gs_alv-zterm1.   " 付款条件  ls_purchasing
-datax-zterm                       'X'.
*    LS_PURCHASING-DATA-EKGRP                     = GS_ALV-EKGRP.    " 采购组20160913
*    LS_PURCHASING-DATAX-EKGRP                    = 'X'.  ls_purchasing
-data-verkf                        = gs_alv-verkf.    " 供应商联系人  ls_purchasing
-datax-verkf                       'X'.  ls_purchasing
-data-telf1                        = gs_alv-telf1.    " 供应商联系电话  ls_purchasing
-datax-telf1                       'X'.  ls_purchasing
-data-webre                        = gs_alv-webre.    " 基于收货的发票校验  ls_purchasing
-datax-webre                       'X'.  ls_purchasing
-data-lebre                        = gs_alv-lebre.    " 基于服务的发票校验标识  ls_purchasing
-datax-lebre                       'X'.  ls_purchasing
-data-kalsk                        = gs_alv-kalsk.    " 方案组  ls_purchasing
-datax-kalsk                       'X'.  ls_functions

-task 'M'.

*    IF GS_ALV-KTONR <> ''.
*      LS_FUNCTIONS-DATA_KEY-PARVW = 'ZM'.                "ER内外部转换后为ZM
**    LS_FUNCTIONS-DATA-DEFPA = ''.
*      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*        EXPORTING
*          INPUT  = GS_ALV-KTONR
*        IMPORTING
*          OUTPUT = GS_ALV-KTONR.
*      LS_FUNCTIONS-DATA-PARTNER = GS_ALV-KTONR.
*      LS_FUNCTIONS-DATAX-PARTNER =  'X'.
*      APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*    ENDIF.  ls_functions

-data_key-parvw 'BA'.  
APPEND ls_functions TO ls_purchasing-functions-functions.  ls_functions

-data_key-parvw 'LF'.  
APPEND ls_functions TO ls_purchasing-functions-functions.  ls_functions

-data_key-parvw 'RS'.  
APPEND ls_functions TO ls_purchasing-functions-functions.  

APPEND ls_purchasing TO ls_master_data-purchasing_data-purchasing.  
APPEND ls_master_data TO  lt_master_data-vendors[].

*    LS_FUNCTIONS-DATA_KEY-PARVW = 'OA'.
*    APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*    LS_FUNCTIONS-DATA_KEY-PARVW = 'VN'.
*    APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.
*
*    LS_FUNCTIONS-DATA_KEY-PARVW = 'PI'.
*    LS_FUNCTIONS-DATA-DEFPA = ''.
*    APPEND LS_FUNCTIONS TO LS_PURCHASING-FUNCTIONS-FUNCTIONS.  

DATA ls_msg1 TYPE vmds_ei_main.  
DATA ls_msg2 TYPE cvis_message.  
DATA ls_msg3 TYPE vmds_ei_main.  
DATA ls_msg4 TYPE cvis_message.  
DATA ls_msg  TYPE bapiret2.  vmd_ei_api

=>initialize).  

CALL METHOD vmd_ei_api=>maintain_bapi                                      "VMD_EI_API=>MAINTAIN_DIRECT_INPUT    
EXPORTING      iv_collect_messages      
'X'      is_master_data           
= lt_master_data    
IMPORTING      es_master_data_correct   
= ls_msg1      es_message_correct       
= ls_msg2      es_master_data_defective 
= ls_msg3      es_message_defective     
= ls_msg4.  

IF ls_msg4-is_error ''.    
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'      
EXPORTING        
wait 'X'.    gs_alv

-lfm1f 'X'.    gs_alv
-icon_a  = gc_yellow.    gs_alv
-remark = gs_alv-remark && '供应商采购视图扩展成功'.  
ELSE.    
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.    
LOOP AT ls_msg4-messages INTO ls_msg.      gs_alv
-remark = gs_alv-remark && '/' && ls_msg-message.    
ENDLOOP.    gs_alv
-icon_a  = gc_red.  

ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BP_LFB1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_bp_lfb1 .  
DATA: ls_phone TYPE cvis_ei_phone_str,        ls_fax   
TYPE cvis_ei_fax_str,        ls_smtp  
TYPE cvis_ei_smtp_str.  
DATA:lt_return LIKE bapiret2   OCCURS WITH HEADER LINE.  
DATA: lv_lifnr TYPE lfa1-lifnr.  

CLEAR: lt_return,lt_return[].  


CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2'    
EXPORTING      businesspartner             
= gs_alv-partner      businesspartnerrolecategory 
'FLVN00'
*     ALL_BUSINESSPARTNERROLES    = ' '      businesspartnerrole         
'FLVN00'
*     DIFFERENTIATIONTYPEVALUE    =
*     VALIDFROMDATE               =
*     VALIDUNTILDATE              = '99991231'    
TABLES      
return                      = lt_return.  

LOOP AT lt_return WHERE type 'A' OR type 'E'.

*     GW_LIST-ICON = GC_RED.
*     GW_LIST-MSG  = LT_RETURN-MESSAGE.    gv_err 

'X'.    
EXIT.  
ENDLOOP.  

IF gv_err 'X'.
*    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*    RETURN.  
ELSE.    
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'      
EXPORTING        
wait 'X'.  
ENDIF.  

DATA: lt_master_data TYPE vmds_ei_main,        ls_master_data 
TYPE vmds_ei_extern,        ls_company     
TYPE vmds_ei_company.  

CLEAR: ls_master_data,ls_company,lt_master_data.  ls_master_data


-header-object_task              'M'.  ls_master_data
-header-object_instance-lifnr    = gs_alv-partner.  

DATA:lv_ktokk2 TYPE tbc001-ktokk.  
CLEAR lv_ktokk2.  
SELECT SINGLE ktokk FROM tbc001 INTO lv_ktokk2 WHERE bu_group = gs_alv-bu_group.  ls_master_data
-central_data-central-data-ktokk  = lv_ktokk2"供应商帐户组  ls_master_data
-central_data-central-datax-ktokk 'X'"供应商帐户组
*
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-NAME         = GS_ALV-NAME_ORG1.      "名称1
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-NAME_2       = GS_ALV-NAME_ORG2.      "名称2
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-SORT1        = GS_ALV-BU_SORT1.       "属性(SAP为搜索项 1)
**      LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-SORT2        = GS_ALV-BU_SORT2.       "属性(SAP为搜索项 2)
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-STREET       = GS_ALV-STREET.         "街道/门牌号
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-POSTL_COD1   = GS_ALV-POST_CODE1.     "邮政编码
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-CITY         = GS_ALV-CITY1.          "城市
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-COUNTRY      = GS_ALV-LAND1.          "国家
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-REGION       = GS_ALV-REGIO.          "地区
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATA-LANGU        = '1'.                   "语言
*
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-NAME         = 'X'.                  "名称1
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-NAME_2       = 'X'.                  "名称2
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-SORT1        = 'X'.                  "属性(SAP为搜索项 1)
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-STREET       = 'X'.                  "街道/门牌号
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-POSTL_COD1   = 'X'.                  "邮政编码
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-CITY         = 'X'.                  "城市
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-COUNTRY      = 'X'.                  "国家
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-REGION       = 'X'.                  "地区
*  LS_MASTER_DATA-CENTRAL_DATA-ADDRESS-POSTAL-DATAX-LANGU        = 'X'.                  "语言

*    LS_MASTER_DATA-COMPANY_DATA-COMPANY            = ''.                      "COMPANY关联类型即LS_COMPANY的关联类型  
SELECT SINGLE lifnr    
INTO lv_lifnr    
FROM lfa1    
WHERE lifnr = gs_alv-partner.  
IF sy-subrc <> 0.    ls_master_data
-central_data-address-task 'I'.    ls_master_data
-central_data-address-postal-data-title       = gs_alv-title_key.  " 地址关键字的表格    ls_master_data
-central_data-address-postal-datax-title      'X'.    ls_master_data
-central_data-address-postal-data-name        = gs_alv-name_org1.  " 名称1    ls_master_data
-central_data-address-postal-datax-name       'X'.    ls_master_data
-central_data-address-postal-data-name_2      = gs_alv-name_org2.  " 名称2    ls_master_data
-central_data-address-postal-datax-name_2     'X'.    ls_master_data
-central_data-address-postal-data-sort1       = gs_alv-bu_sort1.   " 搜索词 1    ls_master_data
-central_data-address-postal-datax-sort1      'X'.    ls_master_data
-central_data-address-postal-data-country     = gs_alv-land1.      " 国家    ls_master_data
-central_data-address-postal-datax-country    'X'.    ls_master_data
-central_data-address-postal-data-region      = gs_alv-regio.      " 地区    ls_master_data
-central_data-address-postal-datax-region     'X'.    ls_master_data
-central_data-address-postal-data-city        = gs_alv-city1.      " 城市    ls_master_data
-central_data-address-postal-datax-city       'X'.    ls_master_data
-central_data-address-postal-data-street      = gs_alv-street.     " 街道    ls_master_data
-central_data-address-postal-datax-street     'X'.    ls_master_data
-central_data-address-postal-data-postl_cod1  = gs_alv-post_code1" 邮编    ls_master_data
-central_data-address-postal-datax-postl_cod1 'X'.    ls_master_data
-central_data-address-postal-data-langu       1.                 " 语言    ls_master_data
-central_data-address-postal-datax-langu      'X'.    

CLEAR ls_phone.    ls_phone
-contact-task 'I'.    ls_phone
-contact-data-country    = gs_alv-land1.      " 国家.    ls_phone
-contact-datax-country   'X'.    ls_phone
-contact-data-std_no     'X'.    ls_phone
-contact-datax-std_no    'X'.    ls_phone
-contact-data-home_flag  'X'.    ls_phone
-contact-datax-home_flag 'X'.    ls_phone
-contact-data-telephone  = gs_alv-tel_number" 电话.    ls_phone
-contact-datax-telephone 'X'.    ls_phone
-contact-data-r_3_user  '1'.    ls_phone
-contact-datax-r_3_user 'X'.    
APPEND ls_phone TO ls_master_data-central_data-address-communication-phone-phone[].    

CLEAR ls_phone.    ls_phone
-contact-task 'I'.    ls_phone
-contact-data-country    = gs_alv-land1.      " 国家.    ls_phone
-contact-datax-country   'X'.    ls_phone
-contact-data-telephone  = gs_alv-tel_number" 移动电话    ls_phone
-contact-datax-telephone 'X'.    ls_phone
-contact-data-r_3_user  '3'.    ls_phone
-contact-datax-r_3_user 'X'.    
APPEND ls_phone TO ls_master_data-central_data-address-communication-phone-phone[].    

CLEAR ls_fax.    ls_fax
-contact-task          'I'.    ls_fax
-contact-data-country    = gs_alv-land1.           " 国家.    ls_fax
-contact-datax-country   'X'.    ls_fax
-contact-data-std_no     'X'.    ls_fax
-contact-datax-std_no    'X'.    ls_fax
-contact-data-home_flag  'X'.    ls_fax
-contact-datax-home_flag 'X'.    ls_fax
-contact-data-fax        = gs_alv-fax_number.      " 传真    ls_fax
-contact-datax-fax       'X'.    
APPEND ls_fax TO ls_master_data-central_data-address-communication-fax-fax[].    

CLEAR ls_smtp.    ls_smtp
-contact-task 'I'.    ls_smtp
-contact-data-std_no     'X'.    ls_smtp
-contact-datax-std_no    'X'.    ls_smtp
-contact-data-home_flag  'X'.    ls_smtp
-contact-datax-home_flag 'X'.    ls_smtp
-contact-data-e_mail     = gs_alv-smtp_addr.   " 邮箱    ls_smtp
-contact-datax-e_mail    'X'.    
APPEND ls_smtp TO ls_master_data-central_data-address-communication-smtp-smtp[].  
ENDIF.  ls_company
-task                                'M'.  ls_company
-data_key-bukrs                      = gs_alv-bukrs.             "公司代码  ls_company
-data-akont                          = gs_alv-akont.             "统驭科目  ls_company
-datax-akont                         'X'.  ls_company
-data-zuawa                          = gs_alv-zuawa.             "排序码  ls_company
-datax-zuawa                         'X'.  ls_company
-data-zterm                          = gs_alv-zterm2.             "付款条件  ls_company
-datax-zterm                         'X'.  ls_company
-data-zwels                          = gs_alv-dzwels.            "付款方式  ls_company
-datax-zwels                         'X'.
*  ls_company-data-hbkid                          = gs_alv-hbkid.            "开户行
*  ls_company-datax-hbkid                         = 'X'.
*  ls_company-data-fdgrv                          = gs_alv-fdgrv.            "计划组
*  ls_company-datax-fdgrv                         = 'X'.
*  LS_COMPANY-DATA-KVERM                          = GS_ALV-ZALTKN.            "旧供应商编码
*  LS_COMPANY-DATAX-KVERM                         = 'X'.  
"LS_COMPANY-DATA-TOGRR                          = 'Z000'.            "容差组  
"LS_COMPANY-DATAX-TOGRR                         = 'X'.  ls_company
-data-reprf                          'X'.            "检查重复发票  ls_company
-datax-reprf                         'X'.  

APPEND ls_company TO ls_master_data-company_data-company.  
APPEND ls_master_data TO  lt_master_data-vendors[].  

DATA ls_msg1 TYPE vmds_ei_main.  
DATA ls_msg2 TYPE cvis_message.  
DATA ls_msg3 TYPE vmds_ei_main.  
DATA ls_msg4 TYPE cvis_message.  
DATA ls_msg  TYPE bapiret2.  vmd_ei_api

=>initialize).  

CALL METHOD vmd_ei_api=>maintain_bapi                                      "VMD_EI_API=>MAINTAIN_DIRECT_INPUT    
EXPORTING      is_master_data           
= lt_master_data    
IMPORTING      es_master_data_correct   
= ls_msg1      es_message_correct       
= ls_msg2      es_master_data_defective 
= ls_msg3      es_message_defective     
= ls_msg4.  

IF ls_msg4-is_error ''.    
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'      
EXPORTING        
wait 'X'.    gs_alv
-lfb1f 'X'.    gs_alv
-icon_a  = gc_yellow.    gs_alv
-remark = gs_alv-remark && '供应商公司代码视图扩展成功'.  
ELSE.    
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.    
LOOP AT ls_msg4-messages INTO ls_msg.      gs_alv
-remark = gs_alv-remark && '/' && ls_msg-message.    
ENDLOOP.    gs_alv
-icon_a  = gc_red.  

ENDIF.



ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_check_data .  
IF gt_alv[] IS INITIAL.    
MESSAGE s000(ooWITH '没有上传数据' DISPLAY LIKE 'E'.    
STOP.  
ENDIF.  

DATA: lv_msg    TYPE string,        ls_bnka   
TYPE bnka,        ls_lfa1   
TYPE lfa1,        ls_but000 
TYPE but000,        ls_lfb1   
TYPE lfb1,        ls_lfm1   
TYPE lfm1.  

RANGES: r_bu_group FOR but000-bu_group.  

DATA:lv_partner TYPE but000-partner,       lv_lifnr   
TYPE lfa1-lifnr.  

REFRESH: r_bu_group.  r_bu_group

-option 'EQ'.  r_bu_group
-sign 'I'.  r_bu_group
-low 'Z011'.  
APPEND r_bu_group.  r_bu_group
-option 'EQ'.  r_bu_group
-sign 'I'.  r_bu_group
-low 'Z012'.  
APPEND r_bu_group.  r_bu_group
-option 'EQ'.  r_bu_group
-sign 'I'.  r_bu_group
-low 'Z013'.  
APPEND r_bu_group.  r_bu_group
-option 'EQ'.  r_bu_group
-sign 'I'.  r_bu_group
-low 'Z014'.  
APPEND r_bu_group.  r_bu_group
-option 'EQ'.  r_bu_group
-sign 'I'.  r_bu_group
-low 'Z015'.  
APPEND r_bu_group.  r_bu_group
-option 'EQ'.  r_bu_group
-sign 'I'.  r_bu_group
-low 'Z016'.  
APPEND r_bu_group.  

LOOP AT gt_alv INTO gs_alv.    
CLEAR lv_msg.    

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'      
EXPORTING        
input  = gs_alv-partner      
IMPORTING        
output = gs_alv-partner.    

IF gs_alv-bu_group IS INITIAL.      lv_msg 
= lv_msg && '/' && '账户组必填'.    
ENDIF.    

IF gs_alv-partner IS INITIAL.      lv_msg 
= lv_msg && '/' && '供应商编码必填'.    
ENDIF.    
IF gs_alv-title_key IS INITIAL.      lv_msg 
= lv_msg && '/' && '关键字必填'.    
ENDIF.    

IF gs_alv-name_org1 IS INITIAL.      lv_msg 
= lv_msg && '/' && '供应商名称1必填'.    
ELSE.
*      SELECT SINGLE * FROM lfa1 INTO ls_lfa1
*       WHERE lifnr EQ gs_alv-partner.      
SELECT SINGLE * FROM but000 INTO ls_but000       
WHERE partner EQ gs_alv-partner.      
IF sy-subrc EQ 0.        lv_msg 
= lv_msg && '/' && '供应商基本视图已存在' && gs_alv-name_org1.        gs_alv
-lfa1f 'X'.      
ELSE.
*        IF gs_alv-bu_group IN r_bu_group.        
"基本视图        
IF gs_alv-bu_sort1 IS INITIAL.          lv_msg 
= lv_msg && '/' && '检索项必填'.        
ENDIF.        

IF gs_alv-land1 IS INITIAL.          lv_msg 
= lv_msg && '/' && '国家必填'.        
ENDIF.        

IF gs_alv-regio IS INITIAL .          lv_msg 
= lv_msg && '/' && '地区(省)必填'.        
ENDIF.        

IF gs_alv-city1 IS INITIAL .          lv_msg 
= lv_msg && '/' && '城市必填'.        
ENDIF.        

IF gs_alv-street  IS INITIAL.          lv_msg 
= lv_msg && '/' && '街道必填'.        
ENDIF.        
IF gs_alv-post_code1  IS INITIAL.          lv_msg 
= lv_msg && '/' && '邮编必填'.        
ENDIF.
*        IF gs_alv-taxnum IS INITIAL .
*          lv_msg = lv_msg && '/' && '税号必填'.
*        ENDIF.
*        ENDIF.      

ENDIF.    
ENDIF.    

IF NOT gs_alv-lfa1f IS INITIAL.      
IF NOT gs_alv-ekorg IS INITIAL .        
SELECT SINGLE * FROM lfm1 INTO ls_lfm1         
WHERE lifnr EQ gs_alv-partner           
AND ekorg EQ gs_alv-ekorg.        
IF sy-subrc EQ 0.          lv_msg 
= lv_msg && '/' && '供应商采购组织视图已存在'.          gs_alv
-lfm1f 'X'.        
ENDIF.      
ENDIF.      
IF gs_alv-bukrs IS NOT INITIAL.        
SELECT SINGLE * FROM lfb1 INTO ls_lfb1         
WHERE lifnr EQ gs_alv-partner           
AND bukrs EQ gs_alv-bukrs.        
IF sy-subrc EQ 0.          lv_msg 
= lv_msg && '/' && '供应商公司视图已存在' .          gs_alv
-lfb1f 'X'.        
ENDIF.      
ENDIF.    
ENDIF.

*    IF gs_alv-bankl IS NOT INITIAL.
*      SELECT SINGLE * FROM bnka INTO ls_bnka
*       WHERE banks EQ gs_alv-banks
*         AND bankl EQ gs_alv-bankl.
*      IF sy-subrc NE 0.
*        lv_msg = lv_msg && '/' && '银行代码不存在'.
*      ENDIF.
*    ENDIF.    

IF gs_alv-lfm1f IS INITIAL AND gs_alv-ekorg IS NOT INITIAL.      
IF gs_alv-ekorg IS INITIAL.        lv_msg 
= lv_msg && '/' && '采购组织必填'.      
ENDIF.      
IF gs_alv-waers IS INITIAL.        lv_msg 
= lv_msg && '/' && '货币必填'.      
ENDIF.
*      IF gs_alv-zterm1 IS INITIAL.
*        lv_msg = lv_msg && '/' && '销售付款条件必填'.
*      ENDIF.      
IF gs_alv-webre IS INITIAL.        lv_msg 
= lv_msg && '/' && '基于收货的发票校验必填'.      
ENDIF.      
IF gs_alv-lebre IS INITIAL.        lv_msg 
= lv_msg && '/' && '基于服务的发票校验必填'.      
ENDIF.

*      IF gs_alv-kalsk IS INITIAL.
*        lv_msg = lv_msg && '/' && '方案组供应商必填'.
*      ENDIF.
*      IF gs_alv-verkf IS INITIAL.
*        lv_msg = lv_msg && '/' && '销售人员必填'.
*      ENDIF.
*      IF gs_alv-telf1 IS INITIAL.
*        lv_msg = lv_msg && '/' && '销售人员电话必填'.
*      ENDIF.    

ENDIF.    

IF gs_alv-lfb1f IS INITIAL AND gs_alv-bukrs IS NOT INITIAL.      
IF gs_alv-bukrs IS INITIAL.        lv_msg 
= lv_msg && '/' && '公司代码必填'.      
ENDIF.      
IF gs_alv-akont IS INITIAL.        lv_msg 
= lv_msg && '/' && '统驭科目必填'.      
ENDIF.
*      IF gs_alv-zterm2 IS INITIAL.
*        lv_msg = lv_msg && '/' && '财务付款条件必填'.
*      ENDIF.
*      IF gs_alv-zuawa IS INITIAL.
*        lv_msg = lv_msg && '/' && '排序码必填'.
*      ENDIF.
*      IF gs_alv-dzwels IS INITIAL.
*        lv_msg = lv_msg && '/' && '付款方式必填'.
*      ENDIF.
*      IF gs_alv-hbkid IS INITIAL.
*        lv_msg = lv_msg && '/' && '开户银行必填'.
*      ENDIF.      
IF gs_alv-reprf IS INITIAL.        lv_msg 
= lv_msg && '/' && '检查重复发票必填'.      
ENDIF.
*      IF gs_alv-fdgrv IS INITIAL.
*        lv_msg = lv_msg && '/' && '计划组必填'.
*      ENDIF.    

ENDIF.    

IF NOT lv_msg IS INITIAL.      
IF gs_alv-lfa1f IS INITIAL AND gs_alv-lfm1f IS INITIAL AND gs_alv-lfb1f IS INITIAL.        gs_alv
-icon_a = gc_red.      
ELSE.        gs_alv
-icon_a = gc_yellow.      
ENDIF.      gs_alv
-remark  = lv_msg.    
ENDIF.

* 检查税号是否已经存在    
SELECT SINGLE but000~partner FROM but000          INNER 
JOIN dfkkbptaxnum ON but000~partner = dfkkbptaxnum~partner INTO lv_partner        
WHERE but000~name_org1 <> gs_alv-name_org1 AND dfkkbptaxnum~taxnum = gs_alv-taxnum.    
IF sy-subrc 0." AND gs_alv-bu_group IN r_bu_group.      gs_alv
-icon_a = gc_red.      gs_alv
-remark   = gs_alv-remark && '/' && '税号与其他供应商税号重复!'.    
ENDIF.
*检查名称是否已经重复    
SELECT SINGLE lifnr FROM lfa1 INTO lv_lifnr        
WHERE name1 <> gs_alv-name_org1 AND lifnr = gs_alv-partner.    
IF sy-subrc EQ 0." AND gs_alv-bu_group IN r_bu_group.      gs_alv
-icon_a = gc_red.      gs_alv
-remark   = gs_alv-remark && '/' && '供应商编号与其他供应商编号重复!'.    
ENDIF.    

MODIFY gt_alv FROM gs_alv.  
ENDLOOP.

ENDFORM.

posted @ 2021-12-17 11:18  東東東東  阅读(318)  评论(0编辑  收藏  举报