Загрузка данных


FUNCTION BAPI_CUSTOMER_CREATEFROMDATA1.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(PI_PERSONALDATA) LIKE  BAPIKNA101_1 STRUCTURE
*"        BAPIKNA101_1
*"     VALUE(PI_OPT_PERSONALDATA) LIKE  BAPIKNA105 STRUCTURE
*"        BAPIKNA105 OPTIONAL
*"     VALUE(PI_COMPANYDATA) LIKE  BAPIKNA106 STRUCTURE  BAPIKNA106
*"       OPTIONAL
*"     VALUE(PI_OPT_COMPANYDATA) LIKE  BAPIKNA105 STRUCTURE  BAPIKNA105
*"       OPTIONAL
*"     VALUE(PI_CONSUMEREN) LIKE  BAPIKNA107-CONSUMER_FLAG OPTIONAL
*"     VALUE(PI_COPYREFERENCE) LIKE  BAPIKNA102 STRUCTURE  BAPIKNA102
*"     VALUE(PI_CREDIT_CONTROL_FLAG) LIKE  BAPIKNA108-X_FLAG OPTIONAL
*"  EXPORTING
*"     VALUE(CUSTOMERNO) LIKE  BAPIKNA103-CUSTOMER
*"     VALUE(RETURN) LIKE  BAPIRETURN1 STRUCTURE  BAPIRETURN1
*"----------------------------------------------------------------------
*
*-(1) initial routines ------------------------------------------------*
*
*     (i) data declaration: fields, items, tables:
*
  DATA: SUBRC LIKE SY-SUBRC,
        COUNTRY LIKE BAPIKNA101_1-COUNTRY,
        LANGUAGE LIKE BAPIKNA101_1-LANGU_P,
        POSTFLAG LIKE WDL_FLAG-XFLAG,
        CURRENCY LIKE BAPIKNA101_1-CURRENCY,
        REF_KUNNR LIKE TKUNDEVTBER-KUNNR,
        TITLE LIKE  BAPIKNA101_1-TITLE_P,
        PERS_COMP_FLAG TYPE XFELD,
        CONSUMEREN TYPE XFELD,
        CONSUMEREN_INFO TYPE XFELD,
        CREDIT_CONTROL_FLAG like BAPIKNA108-X_FLAG,
        lv_knkk_modify TYPE C,

        I_BAPIKNA101_1 LIKE BAPIKNA101_1,
        I_BAPIKNA102 LIKE BAPIKNA102,
        I_BAPIKNA103 LIKE BAPIKNA103,
        I_BAPIKNA105 LIKE BAPIKNA105,
        I_BAPIKNA105_2 LIKE BAPIKNA105,
        I_BAPIKNA106 LIKE BAPIKNA106,

        I_BAPIADDR1_01 LIKE BAPIADDR1,
        I_BAPIADDR2_01 LIKE BAPIADDR2,

        I_KNA1_01 LIKE KNA1,
        I_KNB1_01 LIKE KNB1,
        I_KNVV_01 LIKE KNVV,

        T_XKNBK_01 LIKE FKNBK OCCURS 0 WITH HEADER LINE,
        T_XKNVI_01 LIKE FKNVI OCCURS 0 WITH HEADER LINE,
        T_XKNVK_01 LIKE FKNVK OCCURS 0 WITH HEADER LINE,
        T_XKNVP_01 LIKE FKNVP OCCURS 0 WITH HEADER LINE,
        T_XKNB5_01 LIKE FKNB5 OCCURS 0 WITH HEADER LINE,
        T_YKNBK_01 LIKE FKNBK OCCURS 0 WITH HEADER LINE,
        T_YKNVI_01 LIKE FKNVI OCCURS 0 WITH HEADER LINE,
        T_YKNVK_01 LIKE FKNVK OCCURS 0 WITH HEADER LINE,
        T_YKNVP_01 LIKE FKNVP OCCURS 0 WITH HEADER LINE,
        T_YKNB5_01 LIKE FKNB5 OCCURS 0 WITH HEADER LINE.
*
*     (ii) reset exporting data and sy-subrc
*
  CLEAR: CUSTOMERNO,
         RETURN,
         SY-SUBRC.

*
*     (iii) fill temporary interface data i_bapikna1_0x, i_bapikna10x
*           (in the following: importing data unchanged, work only with
*            temporary interface data)
*
  MOVE-CORRESPONDING PI_PERSONALDATA TO I_BAPIKNA101_1.
  MOVE-CORRESPONDING PI_OPT_PERSONALDATA TO I_BAPIKNA105.
  MOVE-CORRESPONDING PI_COPYREFERENCE TO I_BAPIKNA102.
  MOVE-CORRESPONDING PI_COMPANYDATA TO I_BAPIKNA106.
  MOVE-CORRESPONDING PI_OPT_COMPANYDATA TO I_BAPIKNA105_2.
  CONSUMEREN = PI_CONSUMEREN.
  CREDIT_CONTROL_FLAG = PI_CREDIT_CONTROL_FLAG.
*
*     (iv) reset data of function kernel
*
  CLEAR: I_KNA1_01,
         I_KNB1_01,
         I_KNVV_01,
         I_BAPIADDR2_01,
         I_BAPIADDR1_01,
         I_BAPIKNA103.
  REFRESH: T_XKNBK_01,
           T_XKNVI_01,
           T_XKNVK_01,
           T_XKNVP_01,
           T_XKNB5_01,
           T_YKNBK_01,
           T_YKNVI_01,
           T_YKNVK_01,
           T_YKNVP_01,
           T_YKNB5_01.
*
*-(2) work routines ---------------------------------------------------*
*
*     (i) call "check function"
*
  CALL FUNCTION 'SD_CUSTOMER_CHECK_1'
       EXPORTING
            PI_BAPIKNA101_1    = I_BAPIKNA101_1
            PI_BAPIKNA105      = I_BAPIKNA105
            PI_BAPIKNA102      = I_BAPIKNA102
            PI_CUSTOMER        = SPACE
            PI_BAPIKNA106      = I_BAPIKNA106
            PI_BAPIKNA105_2    = I_BAPIKNA105_2
            PI_CONSUMEREN      = CONSUMEREN
       IMPORTING
            PE_COUNTRY         = COUNTRY
            PE_LANGUAGE        = LANGUAGE
            PE_CURRENCY        = CURRENCY
            PE_REF_KUNNR       = REF_KUNNR
*           PE_CONSUMEREN      = CONSUMEREN
            PE_PERS_COMP_FLAG  = PERS_COMP_FLAG
            PE_BAPIKNA105      = I_BAPIKNA105
            PE_TITLE           = TITLE
            PE_RETURN1         = RETURN
       EXCEPTIONS
            ERROR_MESSAGE      = 2
            OTHERS             = 1.
*
*         error-handling
*
  IF NOT RETURN IS INITIAL
  OR SY-SUBRC = 2.
*
*         set return value "return" and leave the function          --->
*
    PERFORM BAPIRETURN_FILL_1 USING SY-MSGID
                                    SY-MSGNO
                                    SY-MSGV1
                                    SY-MSGV2
                                    SY-MSGV3
                                    SY-MSGV4
                           CHANGING RETURN.
  ENDIF.

  CHECK RETURN IS INITIAL.
*
*     (ii) fill exporting data of "kernel function"
*
  PERFORM FILLEDFK_1 TABLES  T_XKNVK_01
                             T_XKNVI_01
                             T_XKNB5_01
                  USING      CONSUMEREN
                             PERS_COMP_FLAG
                             REF_KUNNR
                             COUNTRY
                             LANGUAGE
                             CURRENCY
                             TITLE
                             I_BAPIKNA105
                             I_BAPIKNA102
                             I_BAPIKNA103
                    CHANGING I_BAPIKNA101_1
                             I_BAPIKNA106
                             I_BAPIADDR1_01
                             I_BAPIADDR2_01
                             I_KNA1_01
                             I_KNB1_01
                             I_KNVV_01.
*
*     (iii) call "kernel function" post synchron (postflag = X)
*
  CONSUMEREN_INFO = CONSUMEREN.
  IF NOT I_BAPIADDR1_01 IS INITIAL.
    CLEAR CONSUMEREN_INFO.
  ENDIF.
  POSTFLAG = 'X'.
  CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
       EXPORTING
            I_KNA1                  = I_KNA1_01
            I_KNB1                  = I_KNB1_01
            I_KNVV                  = I_KNVV_01
            I_BAPIADDR1             = I_BAPIADDR1_01
            I_BAPIADDR2             = I_BAPIADDR2_01
            I_KNB1_REFERENCE        = CONSUMEREN_INFO
            I_CUSTOMER_IS_CONSUMER  = CONSUMEREN_INFO
            PI_POSTFLAG             = POSTFLAG
       IMPORTING
            E_KUNNR                 = I_BAPIKNA103-CUSTOMER
       TABLES
            T_XKNBK                 = T_XKNBK_01
            T_XKNB5                 = T_XKNB5_01
            T_XKNVI                 = T_XKNVI_01
            T_XKNVK                 = T_XKNVK_01
            T_XKNVP                 = T_XKNVP_01
            T_YKNBK                 = T_YKNBK_01
            T_YKNB5                 = T_YKNB5_01
            T_YKNVI                 = T_YKNVI_01
            T_YKNVK                 = T_YKNVK_01
            T_YKNVP                 = T_YKNVP_01
       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                  = 25.
*
*     (iv) insert the credit control data
*
  IF CREDIT_CONTROL_FLAG = 'X'
  AND SY-SUBRC = 0.
    IF NOT CONSUMEREN_INFO IS INITIAL
     AND NOT I_BAPIKNA102-REF_CUSTMR IS INITIAL
     AND NOT I_BAPIKNA103-CUSTOMER IS INITIAL
     AND NOT REF_KUNNR IS INITIAL.
      lv_knkk_modify = 'X'.
    ENDIF.
    CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_KNKA_K'
        EXPORTING
            PI_REF_CUSTOMER   = I_BAPIKNA102-REF_CUSTMR
            PI_CUSTOMER       = I_BAPIKNA103-CUSTOMER
            PI_KNKK_MODIFY    = lv_knkk_modify
        EXCEPTIONS
            KNKA_INSERT_ERROR = 23
            KNKK_INSERT_ERROR = 24.
  ENDIF.
*
*     (v) return-value "kernel function"
*
*           (1) reset data of function kernel
*
  CLEAR: I_KNA1_01,
         I_KNB1_01,
         I_KNVV_01,
         I_BAPIADDR1_01,
         I_BAPIADDR2_01.
*
*           (2) error-handling
*               return value sy-subrc, only in case sy-subrc = 0
*               the exporting data customer_number (customerno)
*               will be changed
*
  SUBRC = SY-SUBRC.
  CLEAR SY-SUBRC.
*
*-(3) set return values and leave the function ------------------------*
*     customerno (key-field of BO KNA1), pe_customer, return
*
  PERFORM RETURNSUBRC_1
             USING    SUBRC
                      I_BAPIKNA103-CUSTOMER
             CHANGING CUSTOMERNO
                      RETURN.

ENDFUNCTION.