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


FUNCTION SD_CUSTOMER_CHECK.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"       IMPORTING
*"             VALUE(PI_BAPIKNA101) LIKE  BAPIKNA101
*"                             STRUCTURE  BAPIKNA101
*"             VALUE(PI_BAPIKNA102) LIKE  BAPIKNA102
*"                             STRUCTURE  BAPIKNA102
*"       EXPORTING
*"             VALUE(PE_COUNTRY) LIKE  BAPIKNA101-COUNTRY
*"             VALUE(PE_LANGUAGE) LIKE  BAPIKNA101-LANGU
*"             VALUE(PE_CURRENCY) LIKE  BAPIKNA101-CURRENCY
*"             VALUE(PE_RETURN) LIKE  BAPIRETURN STRUCTURE  BAPIRETURN
*"----------------------------------------------------------------------
*
*-(1) initial routines-------------------------------------------------*
*
*     (i) data declaration: fields, items, tables:
*

  DATA: ADDRESS_01 LIKE BAPIKNA101,
        ADDRESS_02 LIKE BAPIKNA102,
        COUNTRY LIKE BAPIKNA101-COUNTRY,                             "01
        COUNTRY_UNIQUE_FLAG LIKE BDWFAP_PAR-CALLTRANS,               "..
        LANGUAGE LIKE BAPIKNA101-LANGU,
        CURRENCY LIKE BAPIKNA101-CURRENCY,
        CURRENCY_UNIQUE_FLAG LIKE BDWFAP_PAR-CALLTRANS,              "01
        BUKRS LIKE TVKO-BUKRS,                                       "..
        TEL1_EXT LIKE BAPIKNA101_1-TEL1_EXT,
        FAX_EXTENS LIKE BAPIKNA101_1-FAX_EXTENS,
        NUMBER_NORMAL LIKE  ADR2-TELNR_LONG,                         "..
        WORST_ERROR LIKE  ADDR_ERROR-MSG_TYPE,                       "01
        CHAR1 TYPE C,
        I_BAPIADDR2 LIKE BAPIADDR2,                                  "01
        T_MESSAGES LIKE ADDR_ERROR OCCURS 0 WITH HEADER LINE,        "01

  BEGIN OF DPLTAB OCCURS 3,
           KUNNR LIKE KNA1-KUNNR,
           NAME1 LIKE KNA1-NAME1,
           STRAS LIKE KNA1-STRAS,
           PSTLZ LIKE KNA1-PSTLZ,
           ORT01 LIKE KNA1-ORT01,
           LAND1 LIKE KNA1-LAND1,
         END   OF DPLTAB.

  STATICS: MCOD1 LIKE KNA1-MCOD1,
           MCOD2 LIKE KNA1-MCOD2,
           MCOD3 LIKE KNA1-MCOD3.

  CLEAR  PE_RETURN.
*
*     (ii) fill data
*
  ADDRESS_01 = PI_BAPIKNA101.
  ADDRESS_02 = PI_BAPIKNA102.
*
*-(2) Checks:----------------------------------------------------------*
*
* (a) required data:
*
  IF ADDRESS_01-NAME IS INITIAL
  OR ADDRESS_01-CITY IS INITIAL.
    PE_RETURN-TYPE = 'E'.
    SY-MSGID = C_MSG_ID.
    SY-MSGNO = '827'.
    SY-MSGV1 = SPACE.
    SY-MSGV2 = SPACE.
    SY-MSGV3 = SPACE.
    SY-MSGV4 = SPACE.
  ELSE.
  ENDIF.
  CHECK PE_RETURN IS INITIAL.

  IF ADDRESS_01-COUNTRY IS INITIAL
  AND ADDRESS_01-COUNTRYISO IS INITIAL.
*****  and address_01-countrniso eq space                            "01
*****  and address_01-countraiso eq space.                           "01
    PE_RETURN-TYPE = 'E'.
    SY-MSGID = C_MSG_ID.
    SY-MSGNO = '827'.
    SY-MSGV1 = SPACE.
    SY-MSGV2 = SPACE.
    SY-MSGV3 = SPACE.
    SY-MSGV4 = SPACE.
  ELSE.
  ENDIF.
  CHECK PE_RETURN IS INITIAL.
*
* (b) "internal" checks: Structure address_01 / address_02
*     (i) required data:
*         - language
*
  IF ADDRESS_01-LANGU IS INITIAL
  AND ADDRESS_01-LANGU_ISO IS INITIAL.
    PE_RETURN-TYPE = 'E'.
    SY-MSGID = C_MSG_ID.
    SY-MSGNO = '885'.
    SY-MSGV1 = 'PI_ADDRESS'.
    SY-MSGV2 = SPACE.
    SY-MSGV3 = SPACE.
    SY-MSGV4 = SPACE.
  ENDIF.
  CHECK PE_RETURN IS INITIAL.
*
*         - reference customer
*
  CALL FUNCTION 'VIEW_KNA1'
       EXPORTING
            KUNDE         = ADDRESS_02-REF_CUSTMR
       IMPORTING
            ANSCHRIFT     = KNA1
       EXCEPTIONS
            NO_KNA1       = 1
            ERROR_MESSAGE = 2.
  CASE SY-SUBRC.
    WHEN 1 OR 2.
      PE_RETURN-TYPE = 'E'.
      SY-MSGID = C_MSG_ID.
      SY-MSGNO = '890'.
      SY-MSGV1 = SPACE.                                          "02(ii)
      SY-MSGV2 = SPACE.
      SY-MSGV3 = SPACE.
      SY-MSGV4 = SPACE.
  ENDCASE.
  CHECK PE_RETURN IS INITIAL.
*
*         - sales organisation
*
  SELECT * FROM TVKO
           WHERE VKORG = ADDRESS_02-SALESORG.
  ENDSELECT.
  IF SY-SUBRC <> 0.
    PE_RETURN-TYPE = 'E'.
    SY-MSGID = C_MSG_ID.
    SY-MSGNO = '892'.
    SY-MSGV1 = SPACE.                                            "02(ii)
    SY-MSGV2 = SPACE.
    SY-MSGV3 = SPACE.
    SY-MSGV4 = SPACE.
  ELSE.                                                              "01
    BUKRS = TVKO-BUKRS.                                              "01
  ENDIF.
  CHECK PE_RETURN IS INITIAL.
*
*              - company code data
*
  IF NOT ADDRESS_01-INTERNET IS INITIAL.                             "#1
    SELECT * FROM KNB1                                               "..
             WHERE KUNNR EQ ADDRESS_02-REF_CUSTMR
             AND BUKRS EQ BUKRS.
    ENDSELECT.
    IF SY-SUBRC <> 0.
      PE_RETURN-TYPE = 'E'.
      SY-MSGID = C_MSG_ID.
      SY-MSGNO = '889'.                                          "02(ii)
      SY-MSGV1 = SPACE.                                          "02(ii)
      SY-MSGV2 = SPACE.
      SY-MSGV3 = SPACE.
      SY-MSGV4 = SPACE.
    ENDIF.
    CHECK PE_RETURN IS INITIAL.                                      "..
  ENDIF.                                                             "01
*
*         - distribution channel and division
*
  VTCOM-MANDT = SY-MANDT.
  VTCOM-KUNNR = ADDRESS_02-REF_CUSTMR.
  VTCOM-VKORG = ADDRESS_02-SALESORG.
  VTCOM-VTWEG = ADDRESS_02-DISTR_CHAN.
  VTCOM-SPART = ADDRESS_02-DIVISION.

  CALL FUNCTION 'VIEW_KNVV'
       EXPORTING
            COMWA         = VTCOM
       IMPORTING
            KNVV_WA       = KNVV
       EXCEPTIONS
            NO_KNVV       = 1
            ERROR_MESSAGE = 2.
  CASE SY-SUBRC.
    WHEN 1 OR 2.
      PE_RETURN-TYPE = 'E'.
      SY-MSGID = C_MSG_ID.
      SY-MSGNO = '893'.
      SY-MSGV1 = SPACE.                                          "02(ii)
      SY-MSGV2 = SPACE.
      SY-MSGV3 = SPACE.
      SY-MSGV4 = SPACE.
  ENDCASE.
  CHECK PE_RETURN IS INITIAL.
*
*         - for reference customer entry in tax table KNVI
*
  SELECT * FROM KNVI
           WHERE KUNNR EQ ADDRESS_02-REF_CUSTMR.
  ENDSELECT.
  IF SY-SUBRC <> 0.
    PE_RETURN-TYPE = 'E'.
    SY-MSGID = C_MSG_ID.
    SY-MSGNO = '891'.                                            "02(ii)
    SY-MSGV1 = SPACE.                                            "02(ii)
    SY-MSGV2 = SPACE.
    SY-MSGV3 = SPACE.
    SY-MSGV4 = SPACE.
  ENDIF.
  CHECK PE_RETURN IS INITIAL.

*
* (c) "external" checks: Structure address_01
*     (i) data checks:
*         (1) check data: country valid
*
*****        Comment: In the following the field address_01-country  "01
*                      has the same value like the value which will  "..
*                      be write in the data-base file KNA1
*
*  if address_01-country eq space.
*    if address_01-countrniso eq space.
*      address_01-country = address_01-countraiso.
*    else.
*      address_01-country = address_01-countrniso.
*    endif.
*****  endif.

*               If countryiso is not initial call convert function
*               currency_code_iso_to_sap.
*               If at the same time country is initial carry out the
*               following checks with the convert value of countryiso
*
  IF NOT ADDRESS_01-COUNTRYISO IS INITIAL.
    CALL FUNCTION 'COUNTRY_CODE_ISO_TO_SAP'
         EXPORTING
              ISO_CODE  = ADDRESS_01-COUNTRYISO
         IMPORTING
              SAP_CODE  = COUNTRY
              UNIQUE    = COUNTRY_UNIQUE_FLAG
         EXCEPTIONS
              NOT_FOUND = 1
              OTHERS    = 2.
    IF SY-SUBRC <> 0.
      PE_RETURN-TYPE = 'E'.
      SY-MSGID = C_MSG_ID.
      SY-MSGNO = '013'.
      SY-MSGV1 = ADDRESS_01-COUNTRYISO.
      SY-MSGV2 = SPACE.
      SY-MSGV3 = SPACE.
      SY-MSGV4 = SPACE.
    ENDIF.
    CHECK PE_RETURN IS INITIAL.
  ENDIF.

  IF ADDRESS_01-COUNTRY IS INITIAL.
    ADDRESS_01-COUNTRY = COUNTRY.                                    "..
  ENDIF.                                                             "01

  IF T005-LAND1 NE ADDRESS_01-COUNTRY.
    SELECT SINGLE * FROM T005 WHERE LAND1 = ADDRESS_01-COUNTRY.
    IF SY-SUBRC NE 0.
      PE_RETURN-TYPE = 'E'.
      SY-MSGID = C_MSG_ID.
      SY-MSGNO = '013'.
      SY-MSGV1 = ADDRESS_01-COUNTRY.
      SY-MSGV2 = SPACE.
      SY-MSGV3 = SPACE.
      SY-MSGV4 = SPACE.
    ENDIF.
  ENDIF.
  CHECK PE_RETURN IS INITIAL.
*
*         (2) Check datas: country / postal_code
*             (fct. module from group SSRV)

  CALL FUNCTION 'POSTAL_CODE_CHECK'
       EXPORTING
            COUNTRY          = ADDRESS_01-COUNTRY
            ONE_TIME_ACCOUNT = ' '
            POSTAL_CODE      = ADDRESS_01-POSTL_CODE
       EXCEPTIONS
            NOT_VALID        = 4
            ERROR_MESSAGE    = 5
            OTHERS           = 1.
  CASE SY-SUBRC.
    WHEN 4 OR 5.
*
*         remark: subscreens can not support positioning of the cursor,
*                  hence: set cursor field 'g_pstlz' has no meaning.
*
      PE_RETURN-TYPE = 'E'.
  ENDCASE.
  CHECK PE_RETURN IS INITIAL.
*
*         (3) postal code essential ?
*
  IF  ADDRESS_01-POSTL_CODE IS INITIAL.
    IF NOT ADDRESS_01-COUNTRY IS INITIAL.
      IF T005-LAND1 <> ADDRESS_01-COUNTRY.
        SELECT SINGLE * FROM T005 WHERE LAND1 = ADDRESS_01-COUNTRY.
        IF SY-SUBRC <> 0.
          PE_RETURN-TYPE = 'E'.
          SY-MSGID = C_MSG_ID.
          SY-MSGNO = '013'.
          SY-MSGV1 = ADDRESS_01-COUNTRY.
          SY-MSGV2 = SPACE.
          SY-MSGV3 = SPACE.
          SY-MSGV4 = SPACE.
        ENDIF.
      ENDIF.
      IF T005-LNPLZ > 0.
        PE_RETURN-TYPE = 'E'.
        SY-MSGID = C_MSG_ID.
        SY-MSGNO = '200'.
        SY-MSGV1 = SPACE.
        SY-MSGV2 = SPACE.
        SY-MSGV3 = SPACE.
        SY-MSGV4 = SPACE.
      ENDIF.
    ENDIF.
  ENDIF.
  CHECK PE_RETURN IS INITIAL.
*
*         (4) cross-check country / region
*
  IF NOT ADDRESS_01-REGION IS INITIAL
  AND NOT ADDRESS_01-COUNTRY IS INITIAL.
    SELECT SINGLE * FROM T005S WHERE LAND1 = ADDRESS_01-COUNTRY
                               AND   BLAND = ADDRESS_01-REGION.
    IF SY-SUBRC NE 0.
      PE_RETURN-TYPE = 'E'.
      SY-MSGID = C_MSG_ID.
      SY-MSGNO = '031'.
      SY-MSGV1 = ADDRESS_01-REGION.
      SY-MSGV2 = ADDRESS_01-COUNTRY.
      SY-MSGV3 = SPACE.
      SY-MSGV4 = SPACE.
    ENDIF.
  ENDIF.
  CHECK PE_RETURN IS INITIAL.
*
*         (5) check e-mail address
*
  IF NOT ADDRESS_01-INTERNET IS INITIAL.
    IF ADDRESS_01-INTERNET CS '@'.
    ELSE.
      PE_RETURN-TYPE = 'E'.
      SY-MSGID = C_MSG_ID.
      SY-MSGNO = '830'.
      SY-MSGV1 = ADDRESS_01-INTERNET.
      SY-MSGV2 = SPACE.
      SY-MSGV3 = SPACE.
      SY-MSGV4 = SPACE.
    ENDIF.
  ENDIF.
  CHECK PE_RETURN IS INITIAL.
*
*         (6) check date of birth is valid
*
  IF NOT ADDRESS_01-DATE_BIRTH IS INITIAL.
    IF ADDRESS_01-DATE_BIRTH GT SY-DATUM.
      PE_RETURN-TYPE = 'E'.
      SY-MSGID = C_MSG_ID.
      SY-MSGNO = '835'.
      SY-MSGV1 = SPACE.
      SY-MSGV2 = SPACE.
      SY-MSGV3 = SPACE.
      SY-MSGV4 = SPACE.
    ENDIF.
  ENDIF.
  CHECK PE_RETURN IS INITIAL.
*                                                                    "01
*           (7) check language and language iso                      "..
*
*               If language iso is not initial call convert function
*               language_code_iso_to_sap.
*               If at the same time language is initial carry out the
*               following checks with the convert value of language iso
*
  IF NOT ADDRESS_01-LANGU_ISO IS INITIAL.
    CALL FUNCTION 'LANGUAGE_CODE_ISO_TO_SAP'
         EXPORTING
              ISO_CODE  = ADDRESS_01-LANGU_ISO
         IMPORTING
              SAP_CODE  = LANGUAGE
         EXCEPTIONS
              NOT_FOUND = 1
              OTHERS    = 2.
    IF SY-SUBRC <> 0.
      PE_RETURN-TYPE = 'E'.
      SY-MSGID = C_MSG_ID.
      SY-MSGNO = '016'.
      SY-MSGV1 = ADDRESS_01-LANGU_ISO.
      SY-MSGV2 = SPACE.
      SY-MSGV3 = SPACE.
      SY-MSGV4 = SPACE.
    ENDIF.
    CHECK PE_RETURN IS INITIAL.
  ENDIF.

  IF ADDRESS_01-LANGU IS INITIAL.
    ADDRESS_01-LANGU = LANGUAGE.
  ENDIF.

  IF T002-SPRAS NE ADDRESS_01-LANGU .
    SELECT SINGLE * FROM T002 WHERE SPRAS = ADDRESS_01-LANGU.
    IF SY-SUBRC NE 0.
      PE_RETURN-TYPE = 'E'.
      SY-MSGID = C_MSG_ID.
      SY-MSGNO = '016'.
      SY-MSGV1 = ADDRESS_01-LANGU.
      SY-MSGV2 = SPACE.
      SY-MSGV3 = SPACE.
      SY-MSGV4 = SPACE.
    ENDIF.
  ENDIF.
  CHECK PE_RETURN IS INITIAL.

*
*           (8) check currency and currency iso
*
*               If currency iso is not initial call convert function
*               currency_code_iso_to_sap.
*               If at the same time currency is initial carry out the
*               following checks with the convert value of currency iso
*
  IF NOT ADDRESS_01-CURRENCY_ISO IS INITIAL.
    CALL FUNCTION 'CURRENCY_CODE_ISO_TO_SAP'
         EXPORTING
              ISO_CODE  = ADDRESS_01-CURRENCY_ISO
         IMPORTING
              SAP_CODE  = CURRENCY
              UNIQUE    = CURRENCY_UNIQUE_FLAG
         EXCEPTIONS
              NOT_FOUND = 1
              OTHERS    = 2.

    IF SY-SUBRC <> 0.
      PE_RETURN-TYPE = 'E'.
      SY-MSGID = C_MSG_ID.
      SY-MSGNO = '034'.
      SY-MSGV1 = ADDRESS_01-CURRENCY_ISO.
      SY-MSGV2 = SPACE.
      SY-MSGV3 = SPACE.
      SY-MSGV4 = SPACE.
    ENDIF.
    CHECK PE_RETURN IS INITIAL.
  ENDIF.

  IF ADDRESS_01-CURRENCY IS INITIAL.
    ADDRESS_01-CURRENCY = CURRENCY.
  ENDIF.

  IF TCURC-WAERS NE ADDRESS_01-CURRENCY.
    SELECT SINGLE * FROM TCURC WHERE WAERS = ADDRESS_01-CURRENCY.
    IF SY-SUBRC NE 0.
      PE_RETURN-TYPE = 'E'.
      SY-MSGID = C_MSG_ID.
      SY-MSGNO = '034'.
      SY-MSGV1 = ADDRESS_01-CURRENCY.
      SY-MSGV2 = SPACE.
      SY-MSGV3 = SPACE.
      SY-MSGV4 = SPACE.
    ENDIF.
  ENDIF.
  CHECK PE_RETURN IS INITIAL.
*
* (9) title check, if ZAV is active
*
  IF ZAV_FLAG = C_X.
    IF NOT ADDRESS_01-FORM_OF_AD IS INITIAL.
      SELECT SINGLE * FROM TSAD3T WHERE TITLE_MEDI
                                              = ADDRESS_01-FORM_OF_AD.
      IF SY-SUBRC NE 0.
        PE_RETURN-TYPE = 'E'.
        SY-MSGID = C_MSG_ID.
        SY-MSGNO = '838'.
        SY-MSGV1 = SPACE.
        SY-MSGV2 = SPACE.
        SY-MSGV3 = SPACE.
        SY-MSGV4 = SPACE.
      ENDIF.
    ENDIF.
  ENDIF.
*
*           (10) check telephone and fax number
*
  IF ZAV_FLAG = C_X.
    IF NOT ADDRESS_01-TELEPHONE IS INITIAL.
      I_BAPIADDR2-TEL1_NUMBR = ADDRESS_01-TELEPHONE.
      TEL1_EXT = 0.
      CALL FUNCTION 'TELNUMBER_STRUCT_TO_NORMAL'
       EXPORTING
            COUNTRY       = ADDRESS_01-COUNTRY
            TELNUMBER     = I_BAPIADDR2-TEL1_NUMBR
            EXTENSION_IN  = TEL1_EXT
       IMPORTING
            NUMBER_NORMAL = NUMBER_NORMAL
            WORST_ERROR   = WORST_ERROR
       TABLES
            MESSAGES      =  T_MESSAGES
       EXCEPTIONS
           ERROR_MESSAGE  = 1.
    ENDIF.
    IF NOT T_MESSAGES IS INITIAL.
      IF WORST_ERROR = 'E'.
        PE_RETURN-TYPE = 'E'.
        SY-MSGID = T_MESSAGES-MSG_ID.
        SY-MSGNO = T_MESSAGES-MSG_NUMBER.
        SY-MSGV1 = T_MESSAGES-MSG_VAR1.
        SY-MSGV2 = T_MESSAGES-MSG_VAR2.
        SY-MSGV3 = T_MESSAGES-MSG_VAR3.
        SY-MSGV4 = T_MESSAGES-MSG_VAR4.
      ELSE.
        REFRESH T_MESSAGES.
        CLEAR T_MESSAGES.
      ENDIF.
    ENDIF.
    CHECK PE_RETURN IS INITIAL.

    IF NOT ADDRESS_01-FAX_NUMBER IS INITIAL.
      I_BAPIADDR2-FAX_NUMBER = ADDRESS_01-FAX_NUMBER.
      FAX_EXTENS = 0.
      CALL FUNCTION 'TELNUMBER_STRUCT_TO_NORMAL'
       EXPORTING
            COUNTRY       = ADDRESS_01-COUNTRY
            TELNUMBER     = I_BAPIADDR2-FAX_NUMBER
            EXTENSION_IN  = FAX_EXTENS
       IMPORTING
            NUMBER_NORMAL = NUMBER_NORMAL
            WORST_ERROR   = WORST_ERROR
       TABLES
            MESSAGES      =  T_MESSAGES
       EXCEPTIONS
           ERROR_MESSAGE  = 1.
    ENDIF.
    IF NOT T_MESSAGES IS INITIAL.
      IF WORST_ERROR = 'E'.
        PE_RETURN-TYPE = 'E'.
        SY-MSGID = T_MESSAGES-MSG_ID.
        SY-MSGNO = T_MESSAGES-MSG_NUMBER.
        SY-MSGV1 = T_MESSAGES-MSG_VAR1.
        SY-MSGV2 = T_MESSAGES-MSG_VAR2.
        SY-MSGV3 = T_MESSAGES-MSG_VAR3.
        SY-MSGV4 = T_MESSAGES-MSG_VAR4.
      ELSE.
        REFRESH T_MESSAGES.
        CLEAR T_MESSAGES.
      ENDIF.
    ENDIF.
    CHECK PE_RETURN IS INITIAL.                                     "..
  ENDIF.                                                             "01

*
*-(3) Fill the converted iso fields -----------------------------------*
*
  PE_COUNTRY = COUNTRY.                                              "01
  PE_LANGUAGE = LANGUAGE.                                            "01
  PE_CURRENCY = CURRENCY.                                            "01

*
* (4) Special check: --------------------------------------------------*
*             check duplicate, if and only if entry (char1 <> '-')
*             in T100C (see transaction OBA5)
*             Remark: If mcod1-3 (see table TFMC) is equal to
*                     the corresponding fields of table KNA1,
*                     then they new entry is a duplicate from the
*                     old one.
*
*             (i) compare address with another address;
*                 if they are equal, fill dpltab;
*

  CALL FUNCTION 'READ_CUSTOMIZED_MESSAGE'
       EXPORTING
            I_ARBGB = 'F2'
            I_DTYPE = '-'
            I_MSGNR = '145'
       IMPORTING
            E_MSGTY = CHAR1.

  CHECK CHAR1 <> '-'.
*
*                 fill the fields kna1-mcod1-3
*
  PERFORM MATCHCODEFIELDS_FILL USING ADDRESS_01.
*
*                 check only for changed fields
*
  CHECK KNA1-MCOD1 <> MCOD1
     OR KNA1-MCOD2 <> MCOD2
     OR KNA1-MCOD3 <> MCOD3.

  CLEAR   DPLTAB.
  REFRESH DPLTAB.
  CLEAR KNA1-KUNNR.
  SELECT * FROM KNA1 INTO *KNA1
                       WHERE MCOD1 =  KNA1-MCOD1
                         AND MCOD2 =  KNA1-MCOD2
                         AND MCOD3 =  KNA1-MCOD3
                         AND KUNNR <> KNA1-KUNNR.
    MOVE-CORRESPONDING *KNA1 TO DPLTAB.
    APPEND DPLTAB.
  ENDSELECT.
*
*             (ii) warning message: There are customers with same
*                  address data (the duplicates are in table dpltab)
*
  MCOD1 = KNA1-MCOD1.
  MCOD2 = KNA1-MCOD2.
  MCOD3 = KNA1-MCOD3.

  IF SY-SUBRC = 0.
    CALL FUNCTION 'CUSTOMIZED_MESSAGE'
         EXPORTING
              I_ARBGB = 'F2'
              I_DTYPE = 'W'
              I_MSGNR = '145'.
    PE_RETURN-TYPE = 'E'.
  ENDIF.
  CHECK PE_RETURN IS INITIAL.

ENDFUNCTION.