BP创建接口

FUNCTION ZFM_SD_BP_CREATE.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IS_HEADER) TYPE  ZSD_BPBC_S
*"     VALUE(IS_CR) TYPE  ZSD_BP_CR_S
*"     VALUE(I_TESTRUN) TYPE  CHAR1 OPTIONAL
*"     VALUE(IS_CRM) TYPE  ZSDT024 OPTIONAL
*"  EXPORTING
*"     VALUE(E_CODE) TYPE  CHAR1
*"     VALUE(E_MSG) TYPE  STRING
*"     VALUE(E_NUMBER) TYPE  BU_PARTNER
*"  TABLES
*"      ET_RETURN STRUCTURE  BAPIRET2
*"      IT_ROLES STRUCTURE  ZSD_BP_ROLE_S OPTIONAL
*"      IT_FKNVI STRUCTURE  FKNVI OPTIONAL
*"      IT_FKNVD STRUCTURE  FKNVD OPTIONAL
*"      IT_FKNVP STRUCTURE  FKNVP OPTIONAL
*"      IT_FKNBK STRUCTURE  FKNBK OPTIONAL
*"      IT_FKNAS STRUCTURE  FKNAS OPTIONAL
*"      IT_KNB1 STRUCTURE  ZBP_KNB1 OPTIONAL
*"----------------------------------------------------------------------
  DATA: E_BU_PARTNER_GUID TYPE BU_PARTNER_GUID .
  CLEAR :E_NUMBER, E_CODE ,E_MSG.
***********EHR同步到SAP*************
*  IF LINES( IT_YGBP ) GT 0 AND IS_CR-I_EHR2SAP EQ 'X'.
*    LOOP AT IT_YGBP INTO GS_YGBP.
*      PERFORM FRM_EHR2SAP USING GS_YGBP. "把同步数据维护到SAP表中记录。
*      CLEAR:GS_YGBP.
*    ENDLOOP.
*    E_CODE = 'S'.
*    E_MSG = 'EHR同步到SAP!'.
*    CLEAR:LS_RETURN.
*    LS_RETURN-TYPE = E_CODE.
*    LS_RETURN-MESSAGE = E_CODE.
*    APPEND LS_RETURN TO ET_RETURN.
*  ENDIF.

*----------begin of  by  Luolin 21.08.2020 13:43:36----------
*校验员工外是否名字重复
  IF IS_HEADER-NAME1 IS INITIAL.
    E_CODE   = 'E'.
    E_MSG    = 'BP名称不允许空值!'.
    RETURN.
  ELSEIF IS_HEADER-PARTN_GRP NE 'Z006'.
    SELECT COUNT(*) FROM BUT000 WHERE NAME_ORG1 EQ IS_HEADER-NAME1 AND BU_GROUP NE 'Z006'.
    IF SY-SUBRC EQ 0.
      E_CODE = 'E'.
      SELECT SINGLE ZNAME FROM ZSDT027 INTO @DATA(LV_ZNAME).
      E_MSG = 'SAP系统BP名称已创建,不允许重复创建,如果该客商在本公司下查询不到请找' && LV_ZNAME && '扩充即可。!'.
      RETURN.
    ENDIF.
  ENDIF.
*----------end of  by Luolin 21.08.2020 13:43:36----------

**********员工BP的工号**********

  IF IS_HEADER-BPARTNER IS INITIAL AND IS_CR-FLAG EQ '1'.
    DATA:LS_BP TYPE BUT000.
    SELECT SINGLE *  INTO LS_BP  FROM BUT000 WHERE BU_SORT1 = IS_HEADER-SEARCHTERM1.
    IF LS_BP IS NOT INITIAL.
      E_CODE   = 'E'.
      E_MSG    = '该员工已经存在系统中'.
      E_NUMBER = LS_BP-PARTNER.
      RETURN.
    ENDIF.

    PERFORM FRM_GET_NEW_BPNUMBER  USING IS_HEADER-PARTN_GRP
                                  CHANGING IS_HEADER-BPARTNER.

  ENDIF.

**********检查客户BP的税号是否重复**********
  DATA:LV_COUNT_TAX TYPE INT4,
       LS_FKNAS     TYPE FKNAS.
  IF IS_CR-KNAS EQ 'X'.
    LOOP AT IT_FKNAS INTO LS_FKNAS WHERE STCEG IS NOT INITIAL..
      SELECT COUNT( * ) INTO LV_COUNT_TAX FROM   DFKKBPTAXNUM WHERE  TAXNUM = LS_FKNAS-STCEG.
      IF LV_COUNT_TAX GT 0.
        E_CODE   = 'E'.
        E_MSG    = '系统中存在相同的客户税号!!!'.
        RETURN.
      ENDIF.
    ENDLOOP.
  ENDIF.


**********检查客户BP的同一控制**********
  DATA :LS_KNVP      TYPE  FKNVP,
        LT_KNVP      TYPE STANDARD TABLE OF FKNVP,
        LV_COUNT_ZA  TYPE INT4, "检查同一控制
        LV_COUNT_GRP TYPE INT4 "检查销售范围和公司
        .
  IF IS_CR-KNVP EQ 'X'.
    LOOP AT IT_FKNVP INTO LS_KNVP.
      IF LS_KNVP-PARVW EQ 'ZA'.
*        LS_KNVP-KUNN2  = LS_KNVP-KUNN2 ."  客户编号

        SELECT COUNT( * ) INTO LV_COUNT_ZA
        FROM KNVV
        WHERE VKORG  = IS_HEADER-VKORG "  销售组织
          AND VTWEG  = IS_HEADER-VTWEG "  分销渠道
          AND SPART = IS_HEADER-SPART. "  产品组
        IF LV_COUNT_ZA EQ 0.
          E_CODE   = 'E'.
          E_MSG    = '同一控制代码客户尚未扩展到对应销售组织!!!'.
          RETURN.
        ENDIF.
      ENDIF.
    ENDLOOP.
  ENDIF.

**********检查客户BP的销售组织**********
  IF IS_HEADER-VKORG IS NOT INITIAL AND IS_HEADER-BUKRS IS NOT INITIAL.

    SELECT COUNT( * )
      INTO @LV_COUNT_GRP
      FROM T001 AS T001
           INNER JOIN TVKO AS TVKO ON T001~BUKRS  = TVKO~BUKRS
           INNER JOIN TVKOT AS TVKOT ON TVKO~VKORG  = TVKOT~VKORG
           LEFT  JOIN TASSIGN_SD_VKORG ON TVKO~VKORG  = TASSIGN_SD_VKORG~VKORG
    WHERE TVKO~VKORG  = @IS_HEADER-VKORG "  销售组织
      AND T001~BUKRS  = @IS_HEADER-BUKRS. " 公司

    IF  LV_COUNT_GRP EQ 0.
      E_CODE = 'S'.
      E_MSG  = '销售组织为分配销售公司,不允许创建,请确定销售组织分配!'.
      RETURN.
    ENDIF.
  ENDIF.

**********创建BP的基本视图**********
  IF IS_CR-FLAG EQ '2'.
    "更改


  ELSE.
    IF IS_HEADER IS NOT INITIAL AND IS_CR-I_BPVIEW_BC EQ 'X'  AND IS_CR-FLAG NE '2'.
      CLEAR:LS_RETURN,LT_RETURN,LT_RETURN[].
      PERFORM FRM_CREATE_BCVIEW  CHANGING IS_HEADER E_NUMBER E_CODE E_MSG E_BU_PARTNER_GUID.
      LS_RETURN-TYPE    = E_CODE.
      IF  E_CODE EQ 'E' OR E_CODE EQ 'A'.
        LS_RETURN-MESSAGE = 'SAP创建基本视图出错'.
      ELSE.
        LS_RETURN-MESSAGE = 'SAP创建基本视图!'.
      ENDIF.
      APPEND LS_RETURN TO  LT_RETURN.

      APPEND LINES OF LT_RETURN TO ET_RETURN.
      DELETE LT_RETURN WHERE TYPE EQ 'S' OR TYPE EQ 'I' OR TYPE EQ 'W' OR TYPE IS INITIAL.
      IF LINES( LT_RETURN ) GT 0.
        PERFORM FRM_ROLLBACK USING LS_RETURN.
        E_CODE = 'E'.
        E_MSG = '创建BP的基本视图出现错误,请查看消息!'.
        RETURN .
      ELSE.
        IF I_TESTRUN IS INITIAL.
*----------begin of  by  Luolin 15.09.2020 15:53:51----------
*新增CRM传入的开票标记数据
          IF IS_CRM IS NOT INITIAL.
            IS_CRM-KUNNR = E_NUMBER.
            MODIFY ZSDT024 FROM IS_CRM.
          ENDIF.
*----------end of  by Luolin 15.09.2020 15:53:51----------
          PERFORM FRM_COMMIT USING LS_RETURN.
          E_CODE = 'S'.
          E_MSG = '创建BP的基本视图成功处理!'.
          IF E_NUMBER IS NOT INITIAL .
            IS_HEADER-BPARTNER = E_NUMBER.
          ENDIF.
        ELSE.
          PERFORM FRM_ROLLBACK USING LS_RETURN.
          E_CODE = 'S'.
          E_MSG = '测试运行!基本视图校验通过!'.
          RETURN.
        ENDIF.

      ENDIF.
      CLEAR:LS_RETURN.
      LS_RETURN-TYPE = E_CODE.
      LS_RETURN-MESSAGE = E_MSG.
      APPEND LS_RETURN TO ET_RETURN.

    ENDIF.

  ENDIF.
**********添加角色分类**********
  IF  LINES( IT_ROLES ) GT 0 AND IS_CR-I_BP_ADD_ROLE EQ 'X'.
    CLEAR:LV_ADD_ROLE,LT_RETURN,LT_RETURN[].
    LOOP AT IT_ROLES INTO LS_ROLE.
      LV_ADD_ROLE = LS_ROLE-ROLE ."'FLCU01'.
      "添加角色分类
      CLEAR:LS_RETURN,LT_RETURN,LT_RETURN[].
      PERFORM FRM_ADD_ROLE USING  LS_ROLE  IS_HEADER-BPARTNER.
      APPEND LINES OF LT_RETURN TO ET_RETURN.
      DELETE LT_RETURN WHERE TYPE EQ 'S' OR TYPE EQ 'I' OR TYPE EQ 'W' OR TYPE IS INITIAL.
      IF LINES( LT_RETURN ) GT 0.
        PERFORM FRM_ROLLBACK USING LS_RETURN.
        E_CODE = 'E'.
        E_MSG = '出现错误,请查看消息!'.
      ELSE.
        PERFORM FRM_COMMIT USING LS_RETURN.
        E_CODE = 'S'.
        E_MSG = '成功处理!'.
      ENDIF.
      CLEAR:LS_RETURN .
      LS_RETURN-TYPE = E_CODE.
      CONCATENATE LS_ROLE-ROLE E_MSG INTO LS_RETURN-MESSAGE .
      APPEND LS_RETURN TO ET_RETURN.
    ENDLOOP.

  ENDIF.


**********扩展销售范围前获取基本数据**********
  PERFORM FRM_GET_EXT_BC CHANGING IS_HEADER.



**********扩展销售视图**********
  CLEAR:LT_RETURN,LT_RETURN[].
  DATA:LS_KNA1 TYPE KNA1.
  IF IS_CR-KNA1 EQ 'X'.

    LS_KNA1-KUNNR = IS_HEADER-BPARTNER.
    LS_KNA1-LAND1 = IS_HEADER-COUNTRY." 'CN'.
    LS_KNA1-NAME1 = IS_HEADER-NAME1." IS_HEADER-SEARCHTERM1.
    LS_KNA1-ORT01 = IS_HEADER-ORT01." '北京市'.
    LS_KNA1-PSTLZ = IS_HEADER-PSTLZ.                        " '234560'.
    LS_KNA1-SORTL = IS_HEADER-SORTL." '北京分公司'.
    LS_KNA1-MCOD1 = IS_HEADER-MCOD1." '科顺防水科技股份有限公司'.
    LS_KNA1-MCOD3 = IS_HEADER-MCOD3." '北京市'.
    LS_KNA1-KTOKD = IS_HEADER-PARTN_GRP." 'Z006'.
    LS_KNA1-SPRAS = IS_HEADER-LANGU." '1'.
    LS_KNA1-REGIO = IS_HEADER-REGION.
    LS_KNA1-TELF1 = IS_HEADER-TELF1.

    LS_KNA1-PFACH   = IS_HEADER-PSTLZ."邮政信箱
    LS_KNA1-PSTL2   = IS_HEADER-PSTLZ."邮箱邮政编码
*    LS_KNA1-CITYC   = IS_HEADER-REGION."城市代码

*    LS_KNA1-ZZTELF1 = IS_HEADER-ZZTELF1.
*    LS_KNA1-ZZTELF2 = IS_HEADER-ZZTELF2.
*    LS_KNA1-ZZTELF3 = IS_HEADER-ZZTELF3.
*    LS_KNA1-ZZSMTPADDR1 = IS_HEADER-ZZSMTPADDR1.
*    LS_KNA1-ZZSMTPADDR2 = IS_HEADER-ZZSMTPADDR2.
*    LS_KNA1-ZZSMTPADDR3 = IS_HEADER-ZZSMTPADDR3.
*    LS_KNA1-ZZNAMTEXT1 = IS_HEADER-ZZNAMTEXT1.
*    LS_KNA1-ZZNAMTEXT2 = IS_HEADER-ZZNAMTEXT2.
*    LS_KNA1-ZZNAMTEXT3 = IS_HEADER-ZZNAMTEXT3.

  ENDIF.


  DATA:LS_KNB1 TYPE KNB1.
  IF IS_CR-KNA1 EQ 'X'.
    LS_KNB1-KUNNR = IS_HEADER-BPARTNER ." 客户编号
    LS_KNB1-BUKRS = IS_HEADER-BUKRS." '1000' ." 公司代码
    LS_KNB1-XZVER = 'X'.
    LS_KNB1-ZUAWA = IS_HEADER-ZUAWA." '001'.
    LS_KNB1-AKONT = IS_HEADER-AKONT ." '1221999999'.
    IF IS_HEADER-ZTERM_FI  IS NOT INITIAL.
      LS_KNB1-ZTERM = IS_HEADER-ZTERM_FI ." 财务付款条款
    ENDIF.

*    LS_KNB1-PERNR = IS_HEADER-BPARTNER." 人员编号
  ENDIF.

  DATA:LS_KNVV TYPE KNVV.
  IF IS_CR-KNVV EQ 'X'.
    LS_KNVV-KUNNR  = IS_HEADER-BPARTNER ."  客户编号
    LS_KNVV-VKORG  = IS_HEADER-VKORG ." '1001'."销售组织
    LS_KNVV-VTWEG  = IS_HEADER-VTWEG. " '10'."  分销渠道
    LS_KNVV-SPART  = IS_HEADER-SPART. " '00'."  产品组

    "  用于定价过程确定的客户分类
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = IS_HEADER-KALKS
      IMPORTING
        OUTPUT = LS_KNVV-KALKS.

*    LS_KNVV-KALKS  = '1'."IS_HEADER-KALKS. " '01'.
    LS_KNVV-WAERS  = IS_HEADER-WAERS. " 'CNY'." 货币
    LS_KNVV-AWAHR  = '100'." 订单可能性
    LS_KNVV-KZAZU  = 'X'."订单组合标识
    LS_KNVV-KTGRD  = IS_HEADER-KTGRD."
    IF IS_HEADER-VKGRP IS NOT INITIAL.
      LS_KNVV-VKGRP  = IS_HEADER-VKGRP."销售组
      LS_KNVV-VKBUR  = IS_HEADER-VKBUR."销售办事处
    ENDIF.
    IF  IS_HEADER-INCO1 IS NOT INITIAL.
      LS_KNVV-INCO1  = IS_HEADER-INCO1."国际贸易条款
*      LS_KNVV-INCO2  = IS_HEADER-INCO2."国际贸易条款(第 2 部分)
      LS_KNVV-INCO2_L  = IS_HEADER-INCO2.
    ENDIF.
    IF IS_HEADER-ZTERM IS NOT INITIAL.
      LS_KNVV-ZTERM  = IS_HEADER-ZTERM."收付条件代码
    ENDIF.
  ENDIF.


  DATA:LS_KNVI TYPE FKNVI,
       LT_KNVI TYPE STANDARD TABLE OF FKNVI.
  IF IS_CR-KNVI EQ 'X'.
    LOOP AT IT_FKNVI INTO LS_KNVI.
      LS_KNVI-KUNNR  = IS_HEADER-BPARTNER ."  客户编号
      APPEND LS_KNVI TO LT_KNVI.

    ENDLOOP.
  ENDIF.

*  DATA :LS_KNVK TYPE FKNVK,
*        LT_KNVK TYPE STANDARD TABLE OF FKNVK.
*  LS_KNVK-KUNNR = IS_HEADER-BPARTNER.
*  LS_KNVK-TELF1 = IS_HEADER-TELF1.
*  LS_KNVK-NAMEV = IS_HEADER-SEARCHTERM1.
*  LS_KNVK-NAME1 = IS_HEADER-SEARCHTERM1.
*  LS_KNVK-KZ = 'I'.
*  APPEND LS_KNVK TO LT_KNVK.


  DATA :LT_KNVD TYPE STANDARD TABLE OF FKNVD,
        LS_KNVD TYPE FKNVD.
  IF IS_CR-KNVD EQ 'X'.
    LOOP AT IT_FKNVD INTO LS_KNVD.
      LS_KNVD-KUNNR  = IS_HEADER-BPARTNER ."  客户编号
      APPEND LS_KNVD TO LT_KNVD.
    ENDLOOP.
*    MOVE-CORRESPONDING IT_FKNVD[] TO LT_KNVD[].
  ENDIF.

  DATA: LS_ADDR  TYPE BAPIADDR1,
        LS_ADDR2 TYPE BAPIADDR2.
  IF IS_CR-ADDR EQ 'X'.
    LS_ADDR-TITLE   = IS_HEADER-SEARCHTERM1.
    LS_ADDR-NAME    = IS_HEADER-NAME1.
    LS_ADDR-SORT1   = IS_HEADER-SEARCHTERM1.
    LS_ADDR-CITY    = IS_HEADER-CITY1.

    LS_ADDR-STREET  = IS_HEADER-STREET.
    LS_ADDR-REGION  = IS_HEADER-REGION.
    LS_ADDR-POSTL_COD1  = IS_HEADER-PSTLZ.
    LS_ADDR-POSTL_COD2  = IS_HEADER-PSTLZ.
    LS_ADDR-PO_BOX      = IS_HEADER-PSTLZ.
    LS_ADDR-TEL1_NUMBR  = IS_HEADER-TELF1.
*    ls_addr-ADR_NOTES   = IS_HEADER-TELF1.


*    LS_ADDR-POSTL_COD1 = ''.
    LS_ADDR-COUNTRY    = 'CN'.
    LS_ADDR-LANGU      = '1'.

  ENDIF.

*  DATA :LS_KNVP TYPE  FKNVP,
*        LT_KNVP TYPE STANDARD TABLE OF FKNVP.
  DATA:LV_KUNNR TYPE KUNN2. "客户编号去掉前导零
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
      INPUT  = IS_HEADER-BPARTNER
    IMPORTING
      OUTPUT = LV_KUNNR.
  IF IS_CR-KNVP EQ 'X'.
    LOOP AT IT_FKNVP INTO LS_KNVP.
      IF LS_KNVP-PARVW EQ 'ZA'.
        LS_KNVP-KUNN2  = LS_KNVP-KUNN2 ."  客户编号
*        APPEND LS_KNVP TO LT_KNVP.
      ENDIF.
      LS_KNVP-KUNNR = LV_KUNNR ."IS_HEADER-BPARTNER ."  客户编号
      APPEND LS_KNVP TO LT_KNVP.
    ENDLOOP.
  ENDIF.


*  DATA :LT_KNBK TYPE STANDARD TABLE OF FKNBK,
*        LS_KNBK TYPE FKNBK.
*  IF IS_CR-KNBK EQ 'X'.
*    LOOP AT IT_FKNBK INTO LS_KNBK.
*      LS_KNBK-KUNNR  = IS_HEADER-BPARTNER ."  客户编号
*      APPEND LS_KNBK TO LT_KNBK.
*    ENDLOOP.
**    MOVE-CORRESPONDING IT_FKNBK[] TO LT_KNBK[].
*  ENDIF.

  DATA:LT_KNAS TYPE STANDARD TABLE OF FKNAS,
       LS_KNAS TYPE FKNAS.
  IF IS_CR-KNAS EQ 'X'.
    LOOP AT IT_FKNAS INTO LS_KNAS.
      LS_KNAS-KUNNR  = IS_HEADER-BPARTNER ."  客户编号
      APPEND LS_KNAS TO LT_KNAS.
    ENDLOOP.
*    MOVE-CORRESPONDING IT_FKNAS[] TO LT_KNAS.
  ENDIF.

  CLEAR:LS_ADDR2.
*  LS_ADDR2-PERS_NO     =   IS_HEADER-BPARTNER ."  客户编号
  LS_ADDR2-TEL1_NUMBR  = IS_HEADER-TELF1.
  LS_ADDR2-TITLE_P     = IS_HEADER-SEARCHTERM1.
  LS_ADDR2-FIRSTNAME   = IS_HEADER-NAME1.
  LS_ADDR2-SORT1_P     = IS_HEADER-SEARCHTERM1.
  LS_ADDR2-CITY        = IS_HEADER-CITY1.

  LS_ADDR2-STREET      = IS_HEADER-STREET.
  LS_ADDR2-REGION      = IS_HEADER-REGION.
  LS_ADDR2-POSTL_COD1  = IS_HEADER-PSTLZ.
  LS_ADDR2-POSTL_COD2  = IS_HEADER-PSTLZ.
  LS_ADDR2-PO_BOX      = IS_HEADER-PSTLZ.
  LS_ADDR2-TEL1_NUMBR  = IS_HEADER-TELF1.
  LS_ADDR2-COUNTRY     = 'CN'.
  LS_ADDR2-LANGU_P     = '1'.

  CLEAR:LS_RETURN,LT_RETURN,LT_RETURN[].
  CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
    EXPORTING
      I_KNA1                     = LS_KNA1
      I_KNB1                     = LS_KNB1
      I_KNVV                     = LS_KNVV
      I_BAPIADDR1                = LS_ADDR
      I_BAPIADDR2                = LS_ADDR2
      I_MAINTAIN_ADDRESS_BY_KNA1 = 'X'
*     I_KNB1_REFERENCE           = ' '
*     I_FORCE_EXTERNAL_NUMBER_RANGE = 'X'
*     I_NO_BANK_MASTER_UPDATE    = 'X'
*     I_CUSTOMER_IS_CONSUMER     = ' '
*     I_RAISE_NO_BTE             = ' '
      PI_POSTFLAG                = 'X'
*     PI_CAM_CHANGED             = ' '
*     PI_ADD_ON_DATA             =
      I_FROM_CUSTOMERMASTER      = 'X'
    IMPORTING
*     E_KUNNR                    = E_NUMBER
      O_KNA1                     = LS_KNA1
*     E_SD_CUST_1321_DONE        =
    TABLES
*     T_XKNAS                    = LT_KNAS
*     T_XKNBK                    = LT_KNBK
*     T_XKNB5                    =
*     T_XKNVA                    =
      T_XKNVD                    = LT_KNVD
      T_XKNVI                    = LT_KNVI
*     T_XKNVK                    = LT_KNVK
*     T_XKNVL                    =
      T_XKNVP                    = LT_KNVP
*     T_XKNZA                    =
*     T_YKNAS                    =
*     T_YKNBK                    =
*     T_YKNB5                    =
*     T_YKNVA                    =
*     T_YKNVD                    =
*     T_YKNVI                    =
*     T_YKNVK                    =
*     T_YKNVL                    =
*     T_YKNVP                    =
*     T_YKNZA                    =
*     T_UPD_TXT                  = LT_UPD
    EXCEPTIONS
      CLIENT_ERROR               = 1
      KNA1_INCOMPLETE            = 2
      KNB1_INCOMPLETE            = 3
      KNB5_INCOMPLETE            = 4
      KNVV_INCOMPLETE            = 5
      KUNNR_NOT_UNIQUE           = 6
      SALES_AREA_NOT_UNIQUE      = 7
      SALES_AREA_NOT_VALID       = 8
      INSERT_UPDATE_CONFLICT     = 9
      NUMBER_ASSIGNMENT_ERROR    = 10
      NUMBER_NOT_IN_RANGE        = 11
      NUMBER_RANGE_NOT_EXTERN    = 12
      NUMBER_RANGE_NOT_INTERN    = 13
      ACCOUNT_GROUP_NOT_VALID    = 14
      PARNR_INVALID              = 15
      BANK_ADDRESS_INVALID       = 16
      TAX_DATA_NOT_VALID         = 17
      NO_AUTHORITY               = 18
      COMPANY_CODE_NOT_UNIQUE    = 19
      DUNNING_DATA_NOT_VALID     = 20
      KNB1_REFERENCE_INVALID     = 21
      CAM_ERROR                  = 22
      OTHERS                     = 23.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4  INTO E_MSG.
    E_CODE = SY-MSGTY.
    CLEAR:LS_RETURN.
    LS_RETURN-TYPE    = E_CODE.
    LS_RETURN-MESSAGE = E_MSG.
    APPEND LS_RETURN TO ET_RETURN.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
      IMPORTING
        RETURN = LS_RETURN.
  ELSE.
    CLEAR:LS_RETURN.
    LS_RETURN-TYPE    = 'S'.
    LS_RETURN-MESSAGE = '成功扩展BP视图'.
    APPEND LS_RETURN TO ET_RETURN.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT   = 'X'
      IMPORTING
        RETURN = LS_RETURN.
  ENDIF.

  IF LS_RETURN IS NOT INITIAL.
    APPEND LS_RETURN TO ET_RETURN.
  ENDIF.

*****************纳税号****************
  DATA:LV_BUSINESSPARTNER TYPE  BAPIBUS1006_HEAD-BPARTNER,
       LV_TAXTYPE         TYPE  BAPIBUS1006TAX-TAXTYPE,
       LV_TAXNUMBER       TYPE  BAPIBUS1006TAX-TAXNUMBER.


  LOOP AT LT_KNAS INTO LS_KNAS.
    MOVE E_NUMBER TO LV_BUSINESSPARTNER.
    MOVE LS_KNAS-LAND1 TO LV_TAXTYPE .
    MOVE LS_KNAS-STCEG TO LV_TAXNUMBER.

    CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
      EXPORTING
        BUSINESSPARTNER = E_NUMBER
        TAXTYPE         = LV_TAXTYPE
        TAXNUMBER       = LV_TAXNUMBER
      TABLES
        RETURN          = LT_RETURN.

  ENDLOOP.

  IF SY-SUBRC <> 0.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
      IMPORTING
        RETURN = LS_RETURN.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT   = 'X'
      IMPORTING
        RETURN = LS_RETURN.
  ENDIF.
  APPEND LINES OF LT_RETURN TO ET_RETURN.


  DATA :LS_BANK TYPE   BAPIBUS1006_BANKDETAIL,
        LS_KNBK TYPE FKNBK.
  IF IS_CR-KNBK EQ 'X'.
    LOOP AT IT_FKNBK INTO LS_KNBK.

      CLEAR:LS_BANK.
      LS_BANK-BANK_CTRY = LS_KNBK-BANKS."  银行所属国家/地区代码
      LS_BANK-BANK_KEY  = LS_KNBK-BANKL."   银行代码
      LS_BANK-BANK_ACCT = LS_KNBK-BANKN."   银行帐户号码
      LS_BANK-BANK_REF  = LS_KNBK-BKREF."   银行帐户号码

      LS_BANK-ACCOUNTHOLDER  = LS_KNBK-KOINH."  帐户持有人姓名
*      BANKACCOUNTNAME   = LS_KNBK-BANKS."  银行帐户的名称
      LS_BANK-BANKDETAILVALIDFROM  = LS_KNBK-KOVON."  有效日期(有效起始日期)
      LS_BANK-BANKDETAILVALIDTO  = LS_KNBK-KOBIS."  有效日期(有效截止日期)
      LS_BANK-BANK_ACCOUNT_TYPE  = LS_KNBK-BVTYP."  银行账户类型

      CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_ADD'
        EXPORTING
          BUSINESSPARTNER = IS_HEADER-BPARTNER "  客户编号
*         BANKDETAILID    =
          BANKDETAILDATA  = LS_BANK
* IMPORTING
*         BANKDETAILIDOUT =
        TABLES
          RETURN          = LT_RETURN.


      IF SY-SUBRC <> 0.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
          IMPORTING
            RETURN = LS_RETURN.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            WAIT   = 'X'
          IMPORTING
            RETURN = LS_RETURN.
      ENDIF.
      APPEND LINES OF LT_RETURN TO ET_RETURN.


    ENDLOOP.
  ENDIF.

******************************[扩展BP的公司代码]*****************************
  IF IS_CR-ZBP_KNB1 EQ 'X'.
    DATA:LS_ZBP_KNB1 TYPE ZBP_KNB1.

    CLEAR:LS_KNB1.
    LOOP AT IT_KNB1 INTO LS_ZBP_KNB1.
      CLEAR:LS_KNB1.
      MOVE-CORRESPONDING LS_ZBP_KNB1 TO LS_KNB1.
      LS_KNB1-KUNNR = IS_HEADER-BPARTNER.

      CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
        EXPORTING
*         I_KNA1                  =
          I_KNB1                  = LS_KNB1
*         I_KNVV                  =
*         I_BAPIADDR1             =
*         I_BAPIADDR2             =
*         I_MAINTAIN_ADDRESS_BY_KNA1          = ' '
*         I_KNB1_REFERENCE        = ' '
*         I_FORCE_EXTERNAL_NUMBER_RANGE       = ' '
*         I_NO_BANK_MASTER_UPDATE = ' '
          I_CUSTOMER_IS_CONSUMER  = 'X'
*         I_RAISE_NO_BTE          = ' '
          PI_POSTFLAG             = 'X'
*         PI_CAM_CHANGED          = ' '
*         PI_ADD_ON_DATA          =
          I_FROM_CUSTOMERMASTER   = 'X'
* IMPORTING
*         E_KUNNR                 =
*         O_KNA1                  =
*         E_SD_CUST_1321_DONE     =
* TABLES
*         T_XKNAS                 =
*         T_XKNBK                 =
*         T_XKNB5                 =
*         T_XKNVA                 =
*         T_XKNVD                 =
*         T_XKNVI                 =
*         T_XKNVK                 =
*         T_XKNVL                 =
*         T_XKNVP                 =
*         T_XKNZA                 =
*         T_YKNAS                 =
*         T_YKNBK                 =
*         T_YKNB5                 =
*         T_YKNVA                 =
*         T_YKNVD                 =
*         T_YKNVI                 =
*         T_YKNVK                 =
*         T_YKNVL                 =
*         T_YKNVP                 =
*         T_YKNZA                 =
*         T_UPD_TXT               =
        EXCEPTIONS
          CLIENT_ERROR            = 1
          KNA1_INCOMPLETE         = 2
          KNB1_INCOMPLETE         = 3
          KNB5_INCOMPLETE         = 4
          KNVV_INCOMPLETE         = 5
          KUNNR_NOT_UNIQUE        = 6
          SALES_AREA_NOT_UNIQUE   = 7
          SALES_AREA_NOT_VALID    = 8
          INSERT_UPDATE_CONFLICT  = 9
          NUMBER_ASSIGNMENT_ERROR = 10
          NUMBER_NOT_IN_RANGE     = 11
          NUMBER_RANGE_NOT_EXTERN = 12
          NUMBER_RANGE_NOT_INTERN = 13
          ACCOUNT_GROUP_NOT_VALID = 14
          PARNR_INVALID           = 15
          BANK_ADDRESS_INVALID    = 16
          TAX_DATA_NOT_VALID      = 17
          NO_AUTHORITY            = 18
          COMPANY_CODE_NOT_UNIQUE = 19
          DUNNING_DATA_NOT_VALID  = 20
          KNB1_REFERENCE_INVALID  = 21
          CAM_ERROR               = 22
          OTHERS                  = 23.
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4  INTO E_MSG.
        E_CODE = SY-MSGTY.
        CLEAR:LS_RETURN.
        LS_RETURN-TYPE    = E_CODE.
        LS_RETURN-MESSAGE = E_MSG.
        APPEND LS_RETURN TO ET_RETURN.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
          IMPORTING
            RETURN = LS_RETURN.
      ELSE.
        CLEAR:LS_RETURN.
        LS_RETURN-TYPE    = 'S'.
        LS_RETURN-MESSAGE = '成功扩展BP视图'.
        APPEND LS_RETURN TO ET_RETURN.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            WAIT   = 'X'
          IMPORTING
            RETURN = LS_RETURN.
      ENDIF.

      IF LS_RETURN IS NOT INITIAL.
        APPEND LS_RETURN TO ET_RETURN.
      ENDIF.

    ENDLOOP.

  ENDIF.
ENDFUNCTION.



LZFG_BP_MAINTAINF01

*----------------------------------------------------------------------*
***INCLUDE LZFG_BP_MAINTAINF01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_EHR2SAP
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> LS_YGBP
*&---------------------------------------------------------------------*
FORM FRM_EHR2SAP  USING    LS_YGBP TYPE ZEHR_YGBP.

  CASE LS_YGBP-STATU."员工状态:1.新增 2.更改 3.冻结
    WHEN 1.
      LS_YGBP-MANDT = SY-MANDT.
      INSERT ZEHR_YGBP FROM LS_YGBP.
    WHEN 2 OR 3.
      UPDATE   ZEHR_YGBP SET   BUKRS     = LS_YGBP-BUKRS       "公司代码
                               PARTNER   = LS_YGBP-PARTNER     "合伙人号码
                               NAME_ORG1 = LS_YGBP-NAME_ORG1   "名称
                               BU_SORT1  = LS_YGBP-BU_SORT1    "业务伙伴的搜索词 1
                               ORT01     = LS_YGBP-ORT01       "城市
                               STATU     = LS_YGBP-STATU       "员工状态
                               .
    WHEN OTHERS.
  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_BCVIEW
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CREATE_BCVIEW  CHANGING
                          IS_HEADER         TYPE  ZSD_BPBC_S
                          E_BUSINESSPARTNER TYPE  BU_PARTNER
                          E_CODE TYPE CHAR1
                          E_MSG TYPE STRING
                          E_BU_PARTNER_GUID TYPE BU_PARTNER_GUID.


  LV_BPARTNER                = IS_HEADER-BPARTNER.    "  '117030100'."  业务伙伴编号
  LV_CATEGORY                = '2' .                  " 1 .人员  2.组织   3.组
  LV_PARTNERGROUP            = IS_HEADER-PARTN_GRP.   "'Z006'. "员工BP
  LS_CENTRALDATA-SEARCHTERM1 = IS_HEADER-SEARCHTERM1. " '梁其华'."  业务伙伴的搜索词 1
  LS_CENTRALDATA-SEARCHTERM2 = IS_HEADER-SEARCHTERM2. " '2019012101'."  业务伙伴的搜索词 2  --- >工号
  LS_CENTRALDATA-TITLELETTER = IS_HEADER-BU_TITLE_LET. "  问候
*  LS_CENTRALDATA-PARTNERLANGUAGE  = '1'."  业务伙伴:语言
  LS_ORG-NAME1        = IS_HEADER-NAME1." 组织名称 1
*  LS_ADDRESS-CITY     = IS_HEADER-STREET.
  LS_ADDRESS-COUNTRY  = IS_HEADER-COUNTRY.
  LS_ADDRESS-LANGU    = IS_HEADER-LANGU.
  LS_ADDRESS-STREET   = IS_HEADER-STREET.
  LS_ADDRESS-CITY_NO  = IS_HEADER-CITY1.
  LS_ADDRESS-REGION   = IS_HEADER-REGION.


  LS_ADDRESS-POSTL_COD1   = IS_HEADER-PSTLZ."邮政信箱

*----------begin of  by  Luolin 18.08.2020 15:09:25----------
*自动匹配城市编码信息
  IF IS_HEADER-ORT01 IS NOT INITIAL.
    DATA LV_CITY_CODE TYPE CITY_CODE.
    SELECT COUNT(*) FROM ADRCITYT "校验传入的是否是地址码
     WHERE CITY_NAME EQ @IS_HEADER-ORT01.
    IF SY-SUBRC EQ 0.
      LV_CITY_CODE = IS_HEADER-ORT01.
    ELSE.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT  = IS_HEADER-ORT01
        IMPORTING
          OUTPUT = LV_CITY_CODE.
      SELECT SINGLE CITY_NAME FROM ADRCITYT
       WHERE CITY_CODE EQ @LV_CITY_CODE
        INTO @DATA(LV_CITY_NAME).
    ENDIF.

    IS_HEADER-ORT01 = LV_CITY_NAME." '北京市'.
  ENDIF.
*----------end of  by Luolin 18.08.2020 15:09:25----------

  LS_ADDRESS-CITY   = IS_HEADER-ORT01."城市代码

  DATA:LT_BAPIADTEL TYPE STANDARD TABLE OF BAPIADTEL,
       LS_BAPIADTEL TYPE BAPIADTEL.

  LS_BAPIADTEL-TELEPHONE = IS_HEADER-TELF1.
  LS_BAPIADTEL-TEL_NO = IS_HEADER-TEL_NO.
  APPEND LS_BAPIADTEL TO LT_BAPIADTEL.


  DATA:LS_ADDRESSNOTES TYPE  BAPIAD_REM,
       LT_ADDRESSNOTES TYPE STANDARD TABLE OF  BAPIAD_REM.

  IF IS_HEADER-ADR_NOTES IS NOT INITIAL.
    LS_ADDRESSNOTES-ADR_NOTES = IS_HEADER-ADR_NOTES.   "REMARK  联系人及电话
    LS_ADDRESSNOTES-LANGU     = '1'.
    APPEND LS_ADDRESSNOTES TO LT_ADDRESSNOTES.
  ENDIF.

  CLEAR :LT_RETURN,LT_RETURN[].
  CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
    EXPORTING
      BUSINESSPARTNEREXTERN   = LV_BPARTNER
      PARTNERCATEGORY         = LV_CATEGORY
      PARTNERGROUP            = LV_PARTNERGROUP
      CENTRALDATA             = LS_CENTRALDATA
*     CENTRALDATAPERSON       =
      CENTRALDATAORGANIZATION = LS_ORG
*     CENTRALDATAGROUP        =
      ADDRESSDATA             = LS_ADDRESS
*     DUPLICATE_MESSAGE_TYPE  =
*     ACCEPT_ERROR            = ' '
    IMPORTING
      BUSINESSPARTNER         = E_BUSINESSPARTNER
    TABLES
      TELEFONDATA             = LT_BAPIADTEL
*     FAXDATA                 =
*     TELETEXDATA             =
*     TELEXDATA               =
*     E_MAILDATA              =
*     RMLADDRESSDATA          =
*     X400ADDRESSDATA         =
*     RFCADDRESSDATA          =
*     PRTADDRESSDATA          =
*     SSFADDRESSDATA          =
*     URIADDRESSDATA          =
*     PAGADDRESSDATA          =
      ADDRESSNOTES            = LT_ADDRESSNOTES
*     COMMUNICATIONNOTES      =
*     COMMUNICATIONUSAGE      =
*     TELEFONDATANONADDRESS   =
*     FAXDATANONADDRESS       =
*     TELETEXDATANONADDRESS   =
*     TELEXDATANONADDRESS     =
*     E_MAILDATANONADDRESS    =
*     RMLADDRESSDATANONADDRESS           =
*     X400ADDRESSDATANONADDRESS          =
*     RFCADDRESSDATANONADDRESS           =
*     PRTADDRESSDATANONADDRESS           =
*     SSFADDRESSDATANONADDRESS           =
*     URIADDRESSDATANONADDRESS           =
*     PAGADDRESSDATANONADDRESS           =
*     COMMUNICATIONNOTESNONADDRESS       =
*     COMMUNICATIONUSAGENONADDRESS       =
      RETURN                  = LT_RETURN
*     ADDRESSDUPLICATES       =
    .

  IF  LINES( LT_RETURN ) GT 0.
    LOOP AT  LT_RETURN INTO LS_RETURN WHERE TYPE EQ 'E'.
      E_CODE = 'E'.
      CONCATENATE LS_RETURN-MESSAGE E_MSG INTO E_MSG.
      RETURN .
    ENDLOOP.
  ENDIF.

  DATA: LT_GUID   LIKE BUS000___I OCCURS 0 WITH HEADER LINE.

  CALL FUNCTION 'BUP_MEMORY_BUT000_GET'
    EXPORTING
      IV_PARTNER = E_BUSINESSPARTNER
    IMPORTING
      ES_BUT000  = LT_GUID.

  READ TABLE LT_GUID INDEX 1.


  DATA: LT_CUSTO  LIKE BUS000_EEW OCCURS 0 WITH HEADER LINE.
  CLEAR LT_CUSTO.
  REFRESH LT_CUSTO.
  LT_CUSTO-PARTNR_GUID = LT_GUID-PARTNER_GUID.

  E_BU_PARTNER_GUID = LT_GUID-PARTNER_GUID.

  LT_CUSTO-ZZTELF1 = IS_HEADER-ZZTELF1.
  LT_CUSTO-ZZTELF2 = IS_HEADER-ZZTELF2.
  LT_CUSTO-ZZTELF3 = IS_HEADER-ZZTELF3.
  LT_CUSTO-ZZSMTPADDR1 = IS_HEADER-ZZSMTPADDR1.
  LT_CUSTO-ZZSMTPADDR2 = IS_HEADER-ZZSMTPADDR2.
  LT_CUSTO-ZZSMTPADDR3 = IS_HEADER-ZZSMTPADDR3.
  LT_CUSTO-ZZNAMTEXT1 = IS_HEADER-ZZNAMTEXT1.
  LT_CUSTO-ZZNAMTEXT2 = IS_HEADER-ZZNAMTEXT2.
  LT_CUSTO-ZZNAMTEXT3 = IS_HEADER-ZZNAMTEXT3.


  APPEND LT_CUSTO.

  CLEAR :LT_RETURN,LT_RETURN[].
  CALL FUNCTION 'BUPA_CENTRAL_CI_CHANGE'
    EXPORTING
      IS_BUS000_EEW = LT_CUSTO
*     IS_BUS000_EEW_X       =
*     IV_XSAVE      = 'X'
    IMPORTING
      ET_RETURN     = LT_RETURN.

  IF  LINES( LT_RETURN ) GT 0.
    LOOP AT  LT_RETURN INTO LS_RETURN WHERE TYPE EQ 'E'.
      E_CODE = 'E'.
      CONCATENATE LS_RETURN-MESSAGE '  .  ' E_MSG INTO E_MSG.
      RETURN.
    ENDLOOP.
  ENDIF.



ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ADD_ROLE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> LV_ADD_ROLE
*&---------------------------------------------------------------------*
FORM FRM_ADD_ROLE  USING LS_ROLE     TYPE ZSD_BP_ROLE_S
                            LV_BPARTNER TYPE BU_PARTNER .

  IF LS_ROLE-FROM IS INITIAL.
    LS_ROLE-FROM = SY-DATUM.
  ENDIF.
  IF LS_ROLE-TO IS INITIAL.
    LS_ROLE-TO = '99991231'.
  ENDIF.

  CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2'
    EXPORTING
      BUSINESSPARTNER             = LV_BPARTNER
      BUSINESSPARTNERROLECATEGORY = LS_ROLE-ROLE
*     ALL_BUSINESSPARTNERROLES    = ' '
*     BUSINESSPARTNERROLE         =
*     DIFFERENTIATIONTYPEVALUE    =
      VALIDFROMDATE               = LS_ROLE-FROM
      VALIDUNTILDATE              = LS_ROLE-TO
    TABLES
      RETURN                      = LT_RETURN.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ROLLBACK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> LS_RETURN
*&---------------------------------------------------------------------*
FORM FRM_ROLLBACK  USING    LS_RETURN TYPE BAPIRET2.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
    IMPORTING
      RETURN = LS_RETURN.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_COMMIT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> LS_RETURN
*&---------------------------------------------------------------------*
FORM FRM_COMMIT  USING    LS_RETURN TYPE BAPIRET2..
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      WAIT   = 'X'
    IMPORTING
      RETURN = LS_RETURN.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_NEW_BPNUMBER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- IS_HEADER_BPARTNER
*&---------------------------------------------------------------------*
FORM FRM_GET_NEW_BPNUMBER USING PARTN_GRP  CHANGING IS_HEADER_BPARTNER.


  SELECT  MAX( KUNNR )  INTO IS_HEADER_BPARTNER
    FROM KNA1
    WHERE KTOKD EQ PARTN_GRP AND KUNNR NE '0199999999'.

  IF IS_HEADER_BPARTNER IS NOT INITIAL.
    IS_HEADER_BPARTNER = IS_HEADER_BPARTNER + 1.
  ELSE.
    IS_HEADER_BPARTNER = '100000000'.
  ENDIF.


  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  = IS_HEADER_BPARTNER
    IMPORTING
      OUTPUT = IS_HEADER_BPARTNER.



ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_EXT_BC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- IS_HEADER
*&---------------------------------------------------------------------*
FORM FRM_GET_EXT_BC  CHANGING P_IS_HEADER.

ENDFORM.


关键词: ABAP

网友评论

发表评论