z2soo's Blog

배치 특성 값으로 배치 조회 본문

SAP/ABAP

배치 특성 값으로 배치 조회

z2soo 2022. 4. 4. 16:10
반응형

1. 기본 설정값과 특성값

배치는 기본 설정값(Basic)과 특성값(Classification)을 가진다. 

  • T-Code : MSC1~3N
  • 기본 설정값 : 배치를 생성할 때 입력하는 기본적인 설정값(생성일, 유효기간, 원산지 등)
  • 배치 특성값 : 기본적인 설정값과 외, 배치 클래스를 추가적으로 설정한 경우 해당 클래스의 특성값

Basic Data

기본 값은 해당 배치의 생산일, 유효기간, 상태, 원산지 등에 대한 정보로 테이블 MCH1에서 조회 가능하다.

 

Classification of Batch

Classification 정보는 해당 배치에 배치 클래스가 지정/생성된 경우에만 설정 가능하다. 즉, 필수 값은 아니다.

 

Classification of Batch - 생성 전

 

배치에 Classification을 위한 Class를 생성하려면 T-code: CL01~4에서 관리되는 Class 값을 넣고 생성 버튼을 눌러준다.해당 배치에 Classification을 위한 Class가 생성되면, MCH1-CUOBJ_BM 값이 not initial 이 된다.

( MCHA에도 CUOBJ_BM 값이 있지만 이 값은 Class 생성되어도 is initial )

 

Classification of Batch - 생성

 

Classification of Batch - 생성 후

 

배치 클래스를 입력해주면 Classification 값을 입력할 수 있는 파트가 보이며, 이 값들은 Class 관리에서 설정 가능하다. 

  • T-Code : CL01~4

T-Code: CL03에서 조회한 배치의 Class

 

2. 배치 특성으로 배치 조회

Batch classification에 설정된 값인, 배치 특성으로 배치(charg) 값을 찾기 위해서 아래 사항을 참고하여 MCH1, MCHA, AUSP 테이블을 사용한다. 

 

  • Basic data(공급업체, 제조일, 만료일, 원산지 등)에 해당하는 정보는 MCH1에 저장됨
  • Batch Classification Class 생성된 경우 MCH1-CUOBJ_BM 값이 not initial
  • 특성값 중 숫자, 날짜, 시간 타입은 AUSP-ATFLV 에 해당
  • 특성값 중 문자 타입은 AUSP-ATWRT 에 해당
  • 특성 이름은 AUSP-ATINN에 해당되며, conversion 필요
  • 특성값 중 initial 값이 있는 항목 유의
DATA: BEGIN OF lt_cuobj OCCURS 0,  #배치번호로 찾은 배치특성번호
        matnr    TYPE matnr,
        cuobj_bm TYPE cuobj,
        charg    TYPE charg_d,
      END OF lt_cuobj.
DATA: BEGIN OF ls_conv_char,      #특성필드명 변환
        zatinn  TYPE atinn,
        zch_val TYPE c LENGTH 70,
      END OF ls_conv_char.
DATA: lt_conv_char LIKE TABLE OF ls_conv_char.

  
# 입력받은 배치 특성명은 아래 conversion 하여 lt_conv_char로 넣어줌
CALL FUNCTION 'CONVERSION_EXIT_ATINN_INPUT'
  EXPORTING
    input  = #입력받은 배치특성명
  IMPORTING
    output = ls_conv_char-zatinn.
    
# 주어진 조건(특성)에 해당하는 배치, cuobj_bm 조회
SELECT matnr, cuobj_bm, charg
  FROM mch1
  WHERE #조건: 자재, basic data, 플랜트 등 필요시 mcha와 join하여 활용
  AND cuobj_bm IS NOT INITIAL	#배치 클래스가 생성된 것만
  INTO CORRESPONDING FIELDS OF TABLE @lt_cuobj.

  LOOP AT lt_cuobj INTO DATA(ls_cuobj).
    lv_idx = sy-tabix.

    LOOP AT lt_conv_char INTO ls_conv_char.
      SELECT SINGLE atfor	#배치특성의 타입 조회
        FROM cabn
        WHERE atinn = @ls_conv_char-zatinn
        INTO @DATA(lv_atfor).

      CLEAR: lv_objek.
      CASE lv_atfor.
        WHEN 'CHAR' OR 'UDEF'.
          SELECT SINGLE objek
            FROM ausp
            WHERE objek = @ls_cuobj-cuobj_bm
            AND atinn = @ls_conv_char-zatinn
            AND atwrt = @ls_conv_char-zch_val
            INTO @lv_objek.

          IF sy-subrc <> 0 OR lv_objek IS INITIAL.
            DELETE lt_cuobj INDEX lv_idx.
            exit.
          ENDIF.

        WHEN  'NUM' OR 'DATE' OR 'TIME'.
          #문자열이 아닌 경우 온점을 비롯한 특수문자 제거.
          REPLACE ALL OCCURRENCES OF REGEX '[[:punct:]]'
                  IN ls_conv_char-zch_val WITH ''.
          CALL FUNCTION 'CTCV_CONVERT_DATE_TO_FLOAT'
            EXPORTING
              date  = ls_conv_char-zch_val
            IMPORTING
              float = lv_float.
          SELECT SINGLE objek
            FROM ausp
            WHERE objek = @ls_cuobj-cuobj_bm
            AND atinn = @ls_conv_char-zatinn
            #AND atflv = @ls_conv_char-zch_val
            AND atflv = @lv_float
            INTO @lv_objek.

          IF sy-subrc <> 0 OR lv_objek IS INITIAL.
            DELETE lt_cuobj INDEX lv_idx.
            exit.
          ENDIF.
      ENDCASE.
    ENDLOOP.
  ENDLOOP.
    
# 남은 lt_cuobj의 cuobj_bm 값으로 charg 조회
SELECT matnr, werks, lgort, charg, clabs
  FROM mchb	#배치별 재고 조회도 원하는 경우
  FOR ALL ENTRIES IN @lt_cuobj[]
  WHERE charg = @lt_cuobj-charg	
  INTO CORRESPONDING FIELDS OF TABLE @t_batch[].
  
SELECT matnr, werks, charg
  FROM mcha
  FOR ALL ENTRIES IN @lt_cuobj[]
  WHERE charg = @lt_cuobj-charg
  INTO CORRESPONDING FIELDS OF TABLE @t_batch[].

 

반응형
Comments