본문 바로가기
SAP

BUS7 (Event : DCHECK)

by 뚜~ 2023. 1. 30.

① DCHECK 선택하고 '이벤트->function 모듈' 더블클릭

② 항목 '9000001' '9000002' 에 BP 저장 전 체크로직 추가

9000001 ZCVIV_BUPA_EVENT_DCHCK CVIV  공급업체 링크
9000002 ZCVIC_BUPA_EVENT_DCHCK CVIC  고객 링크

  공급업체 링크 ( 함수 : ZCVIV_BUPA_EVENT_DCHCK )

FUNCTION ZCVIV_BUPA_EVENT_DCHCK.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"----------------------------------------------------------------------

  DATA: LS_LFA1  TYPE LFA1,
        LS_LFB1  TYPE LFB1,
        LT_LFB1  LIKE TABLE OF LS_LFB1,
        LV_ERROR TYPE C.

  CVI_BDT_ADAPTER=>DATA_PBO_WITH_COMPANY_CODE(
    EXPORTING
      I_TABLE_NAME = 'LFB1'
    IMPORTING
      E_DATA_TABLE = LT_LFB1[]
  ).

  READ TABLE LT_LFB1 INTO LS_LFB1 INDEX 1.
  SELECT SINGLE KTOKK FROM LFA1
    INTO CORRESPONDING FIELDS OF LS_LFA1
   WHERE LIFNR = LS_LFB1-LIFNR.

  CHECK SY-SUBRC IS INITIAL.

* 조정 계정의 통제
  CASE LS_LFA1-KTOKK.
    WHEN '1000'.           "UBQ 국내거래처
      CASE LS_LFB1-AKONT.
        WHEN '0021101010'  "외상매입금-원화
          OR '0021101020'  "외상매입금-외화
          OR '0021203010'  "미지급금-원화
          OR '0022401010'. "장기미지급금(비유동)
        WHEN OTHERS.
          LV_ERROR = 'X'.  "에러
      ENDCASE.

    WHEN '2000'.           "UBQ 해외거래처
      CASE LS_LFB1-AKONT.
        WHEN '0021101010'  "외상매입금-원화
          OR '0021101020'  "외상매입금-외화
          OR '0021203010'  "미지급금-원화
          OR '0022401010'. "장기미지급금(비유동)
        WHEN OTHERS.
          LV_ERROR = 'X'.  "에러
      ENDCASE.

    WHEN '3000'.           "UBQ 개인거래처
      CASE LS_LFB1-AKONT.
        WHEN '0021101010'  "외상매입금-원화
          OR '0021101020'  "외상매입금-외화
          OR '0021203010'  "미지급금-원화
          OR '0022401010'. "장기미지급금(비유동)
        WHEN OTHERS.
          LV_ERROR = 'X'.  "에러
      ENDCASE.

    WHEN '4000'.           "UBQ 납품처

    WHEN '9100'.           "UBQ 은행 정부기관
      CASE LS_LFB1-AKONT.
        WHEN '0021203010'  "미지급금-원화
          OR '0022401010'. "장기미지급금(비유동)
        WHEN OTHERS.
          LV_ERROR = 'X'.  "에러
      ENDCASE.

    WHEN '9200'.           "UBQ 임직원
      CASE LS_LFB1-AKONT.
        WHEN '0021203050'  "미수금-임직원
          OR '0021203060'. "미지급금-경상비 2022.12.31 ABAP01
        WHEN OTHERS.
          LV_ERROR = 'X'.  "에러
      ENDCASE.

    WHEN '9300'.           "UBQ 자금상품

    WHEN '9400'.           "UBQ 자금조달
      CASE LS_LFB1-AKONT.
        WHEN '0021301010'  "단기차입금-원화
          OR '0021301020'  "단기차입금-외화
          OR '0021301030'  "단기차입금-계열사
          OR '0021401010'  "파생상품부채
          OR '0021501010'  "장기차입금-원화
          OR '0021501020'  "장기차입금-외화
          OR '0021501030'  "장기차입금-계열사
          OR '0022201010'. "상환전환우선주부채(비유동)-일반
        WHEN OTHERS.
          LV_ERROR = 'X'.  "에러
      ENDCASE.

  ENDCASE.

  IF LV_ERROR EQ 'X'.
    MESSAGE E000(ZFI01) WITH '공급업체 조정 계정을 확인해주시기 바랍니다.'.
    CALL FUNCTION 'BUS_MESSAGE_STORE'
      EXPORTING
        ARBGB = 'ZFI01'
        MSGTY = 'E'
        TXTNR = '000'
        MSGV1 = '공급업체 조정 계정을 확인해주시기 바랍니다.'.
  ENDIF.

* 정렬키 통제
* LS_LFB1-ZUAWA = '000' 만 가능
  IF LS_LFB1-ZUAWA NE '000'.
* step 1: update xo memory from dypro structure
    LS_LFB1-ZUAWA = '000'.

    MODIFY LT_LFB1 FROM LS_LFB1 INDEX 1 TRANSPORTING ZUAWA.

    CVI_BDT_ADAPTER=>DATA_PAI_WITH_COMPANY_CODE(
      I_TABLE_NAME = 'LFB1'
      I_DATA_NEW   = LT_LFB1[]
      I_VALIDATE   = FALSE
    ).

  ENDIF.

ENDFUNCTION.

 

  고객 링크 ( 함수 : ZCVIC_BUPA_EVENT_DCHCK )

FUNCTION ZCVIC_BUPA_EVENT_DCHCK.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"----------------------------------------------------------------------

  DATA: LS_KNA1  TYPE KNA1,
        LS_KNB1  TYPE KNB1,
        LT_KNB1  LIKE TABLE OF LS_KNB1,
        LV_ERROR TYPE C.

  CVI_BDT_ADAPTER=>DATA_PBO_WITH_COMPANY_CODE(
    EXPORTING
      I_TABLE_NAME = 'KNB1'
    IMPORTING
      E_DATA_TABLE = LT_KNB1[]
  ).

  READ TABLE LT_KNB1 INTO LS_KNB1 INDEX 1.
  SELECT SINGLE KTOKD FROM KNA1
    INTO CORRESPONDING FIELDS OF LS_KNA1
   WHERE KUNNR = LS_KNB1-KUNNR.

  CHECK SY-SUBRC IS INITIAL.

* 조정 계정의 통제
  CASE LS_KNA1-KTOKD.
    WHEN '1000'.           "UBQ 국내거래처
      CASE LS_KNB1-AKONT.
        WHEN '0011201010'  "외상매출금-원화
          OR '0011201020'  "외상매출금-외화
          OR '0011301010'  "미수금-원화
          OR '0011301020'. "미수금-외화
        WHEN OTHERS.
          LV_ERROR = 'X'.  "에러
      ENDCASE.

    WHEN '2000'.           "UBQ 해외거래처
      CASE LS_KNB1-AKONT.
        WHEN '0011201010'  "외상매출금-원화
          OR '0011201020'  "외상매출금-외화
          OR '0011301010'  "미수금-원화
          OR '0011301020'. "미수금-외화
        WHEN OTHERS.
          LV_ERROR = 'X'.  "에러
      ENDCASE.

    WHEN '3000'.           "UBQ 개인거래처
      CASE LS_KNB1-AKONT.
        WHEN '0011201010'  "외상매출금-원화
          OR '0011201020'  "외상매출금-외화
          OR '0011301010'  "미수금-원화
          OR '0011301020'. "미수금-외화
        WHEN OTHERS.
          LV_ERROR = 'X'.  "에러
      ENDCASE.

    WHEN '4000'.           "UBQ 납품처

    WHEN '9100'.           "UBQ 은행 정부기관
      CASE LS_KNB1-AKONT.
        WHEN '0011301010'  "미수금-원화
          OR '0011301020'. "미수금-외화
        WHEN OTHERS.
          LV_ERROR = 'X'.  "에러
      ENDCASE.

    WHEN '9200'.           "UBQ 임직원
      CASE LS_KNB1-AKONT.
        WHEN '0011301030'. "미수금-종업원
        WHEN OTHERS.
          LV_ERROR = 'X'.  "에러
      ENDCASE.

    WHEN '9300'.           "UBQ 자금상품
      CASE LS_KNB1-AKONT.
        WHEN '0011105010'  "정기예금-원화
          OR '0011105020'  "정기예금-외화
          OR '0011404990'  "AC-기타
          OR '0011405990'  "FVPL-기타
          OR '0011406990'  "FVOCI-기타
          OR '0011407010'  "파생상품자산
          OR '0011404010'  "AC-채무상품
          OR '0011405010'  "FVPL-채무상품
          OR '0011405010'  "FVPL-채무상품
          OR '0011405020'  "FVPL-지분상품
          OR '0011405030'  "FVPL-파생상품
          OR '0011405030'  "FVPL-파생상품
          OR '0011406010'  "FVOCI-채무상품
          OR '0011406010'  "FVOCI-채무상품
          OR '0011406020'  "FVOCI-지분상품
          OR '0011406030'  "FVOCI-파생상품
          OR '0011406030'  "FVOCI-파생상품
          OR '0012501010'  "종속기업투자주식-종속기업
          OR '0012501010'  "종속기업투자주식-종속기업
          OR '0012601010'  "관계기업적용투자주식-관계기업
          OR '0012601010'  "관계기업적용투자주식-관계기업
          OR '0012803010'  "AC(비유동)-채무상품
          OR '0012803010'  "AC(비유동)-채무상품
          OR '0012803010'  "AC(비유동)-채무상품
          OR '0012803010'  "AC(비유동)-채무상품
          OR '0012803990'  "AC(비유동)-기타
          OR '0012803990'  "AC(비유동)-기타
          OR '0012804010'  "FVPL(비유동)-채무상품
          OR '0012804010'  "FVPL(비유동)-채무상품
          OR '0012804010'  "FVPL(비유동)-채무상품
          OR '0012804020'  "FVPL(비유동)-지분상품
          OR '0012804020'  "FVPL(비유동)-지분상품
          OR '0012804020'  "FVPL(비유동)-지분상품
          OR '0012804030'  "FVPL(비유동)-파생상품
          OR '0012804030'  "FVPL(비유동)-파생상품
          OR '0012804030'  "FVPL(비유동)-파생상품
          OR '0012804030'  "FVPL(비유동)-파생상품
          OR '0012804990'  "FVPL(비유동)-기타
          OR '0012804990'  "FVPL(비유동)-기타
          OR '0012805010'  "FVOCI(비유동)-채무상품
          OR '0012805010'  "FVOCI(비유동)-채무상품
          OR '0012805010'  "FVOCI(비유동)-채무상품
          OR '0012805010'  "FVOCI(비유동)-채무상품
          OR '0012805020'  "FVOCI(비유동)-지분상품
          OR '0012805020'  "FVOCI(비유동)-지분상품
          OR '0012805020'  "FVOCI(비유동)-지분상품
          OR '0012805030'  "FVOCI(비유동)-파생상품
          OR '0012805030'  "FVOCI(비유동)-파생상품
          OR '0012805030'  "FVOCI(비유동)-파생상품
          OR '0012805030'  "FVOCI(비유동)-파생상품
          OR '0012805990'  "FVOCI(비유동)-기타
          OR '0012805990'  "FVOCI(비유동)-기타
          OR '0012806010'  "파생상품자산(비유동)
          OR '0012806010'. "파생상품자산(비유동)
        WHEN OTHERS.
          LV_ERROR = 'X'.  "에러
      ENDCASE.

    WHEN '9400'.                                     " UBQ 자금조달
  ENDCASE.

  IF LV_ERROR EQ 'X'.
    MESSAGE E000(ZFI01) WITH '고객 조정 계정을 확인해주시기 바랍니다.'.
    CALL FUNCTION 'BUS_MESSAGE_STORE'
      EXPORTING
        ARBGB = 'ZFI01'
        MSGTY = 'E'
        TXTNR = '000'
        MSGV1 = '고객 조정 계정을 확인해주시기 바랍니다.'.
  ENDIF.

* 정렬키 통제
* KNB1-ZUAWA = '000' 만 가능
  IF LS_KNB1-ZUAWA NE '000'.

* step 1: update xo memory from dypro structure
    LS_KNB1-ZUAWA = '000'.

    MODIFY LT_KNB1 FROM LS_KNB1 INDEX 1 TRANSPORTING ZUAWA.

    CVI_BDT_ADAPTER=>DATA_PAI_WITH_COMPANY_CODE(
      I_TABLE_NAME = 'KNB1'
      I_DATA_NEW   = LT_KNB1[]
      I_VALIDATE   = FALSE
    ).

  ENDIF.

ENDFUNCTION.

'SAP' 카테고리의 다른 글

[FBL1N] / [FBL3N] / [FBL5N] ALV에 계정 명, G/L계정 명 필드 추가  (0) 2023.03.22
[KE30] / [CKM3]  (0) 2023.02.23
[BAdI] FAA_DC_CUSTOMER  (0) 2022.12.09
SM21 - Online System Log Analysis  (0) 2022.12.08
ST05  (0) 2022.12.08

댓글