SAP/ABAP 개발

ZPPA_GET_GR_HISTORY bk20090915

KindKay 2010. 10. 4. 00:42


FUNCTION ZPPA_GET_GR_HISTORY.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(GUBUN) TYPE  CHAR1
*"     VALUE(LIFNR) TYPE  LIFNR
*"     VALUE(AEDAT) TYPE  CHAR8
*"  EXPORTING
*"     VALUE(RETURN) LIKE  ZPPASRETURN STRUCTURE  ZPPASRETURN
*"  TABLES
*"      T_EXPORTA STRUCTURE  ZPPAS0041
*"----------------------------------------------------------------------
* 2008/09/10 거래명세표 양식변경(항목추가) : ZPPAS0026 구조변경
*"----------------------------------------------------------------------
** MATNR          CHAR  18    0     자재코드
** VERKF    CHAR 30 0 공급업체 오피스의 담당영업사원
** TELF1  CHAR 16 0 영업사원전화
** ADDWE2  CHAR 72 0 물류센터주소
** TELF2  CHAR 16 0 물류센터전화
*"----------------------------------------------------------------------

  DATA : LT_0029  LIKE ZPPAT0029 OCCURS 0 WITH HEADER LINE,
         LT_T001W LIKE T001W      OCCURS 0 WITH HEADER LINE.

  DATA : BEGIN OF LT_EMAKT OCCURS 0,
          EBELN   LIKE EKPO-EBELN,
          EBELP   LIKE EKPO-EBELP,
          MATNR   LIKE EKPO-MATNR,
          MEINS   LIKE EKPO-MEINS,
          WERKS   LIKE EKPO-WERKS,
          LGORT   LIKE EKPO-LGORT,
          MAKTX   LIKE MAKT-MAKTX,
         END   OF LT_EMAKT.

  DATA : BEGIN OF LT_AMAKT OCCURS 0,
          AUFNR   LIKE AFKO-AUFNR,
          PLNBEZ  LIKE AFKO-PLNBEZ,
          MAKTX   LIKE MAKT-MAKTX,
          VERID   LIKE AFPO-VERID,
         END   OF LT_AMAKT.

  DATA : LS_WJ    LIKE J_1BBRANCH,
         LS_WJADD LIKE ADRC,
         LS_ADD   LIKE LFA1 .

  REFRESH T_EXPORTA.

  SELECT * FROM ZPPAT0029 INTO TABLE LT_0029
   WHERE ACTYP      = 'R'       "입고
     AND ZRFCRESULT = '00'      "성공
     AND LIFNR      = LIFNR
     AND WJTYP      = '2'       "웅진납품
     AND GUBUN      = GUBUN
     AND AEDAT      = AEDAT.

  IF SY-SUBRC NE 0.
    RETURN-TYPE    = 'N'.
    RETURN-MESSAGE = TEXT-M01.
    EXIT.
  ENDIF.


* 관련 구매오더 정보 읽기
  SELECT EKPO~EBELN EKPO~EBELP EKPO~MATNR EKPO~MEINS
         EKPO~WERKS EKPO~LGORT
         MAKT~MAKTX
    FROM EKPO
    LEFT JOIN MAKT ON EKPO~MATNR = MAKT~MATNR
                  AND MAKT~SPRAS = SY-LANGU
    INTO TABLE LT_EMAKT
     FOR ALL ENTRIES IN LT_0029
   WHERE EKPO~EBELN = LT_0029-EBELN
     AND EKPO~EBELP = LT_0029-EBELP.
  IF SY-SUBRC = 0.
    SELECT WERKS NAME1 FROM T001W
      INTO CORRESPONDING FIELDS OF TABLE LT_T001W
       FOR ALL ENTRIES IN LT_EMAKT
     WHERE WERKS = LT_EMAKT-WERKS.
  ENDIF.

* 관련 생산오더 정보 읽기
  LOOP AT LT_0029 WHERE AUFNR NE SPACE.
    EXIT.
  ENDLOOP.
  IF SY-SUBRC = 0.
    SELECT AFKO~AUFNR AFKO~PLNBEZ MAKT~MAKTX AFPO~VERID
        FROM AFKO
        JOIN AFPO ON AFPO~AUFNR = AFKO~AUFNR
        JOIN MAKT ON MAKT~MATNR = AFKO~PLNBEZ
                 AND MAKT~SPRAS = SY-LANGU
        INTO TABLE LT_AMAKT
         FOR ALL ENTRIES IN LT_0029
       WHERE AFKO~AUFNR = LT_0029-AUFNR.
  ENDIF.

* 주소정보 읽기
* ..웅진(발주처) 주소 읽기
  PERFORM GET_WJ_ADD_DATA IN PROGRAM ZPPAP0005
                          CHANGING LS_WJ.
  CLEAR LS_WJADD.
  SELECT SINGLE * FROM ADRC INTO LS_WJADD
          WHERE ADDRNUMBER = LS_WJ-ADRNR
            AND DATE_FROM <= SY-DATUM
            AND DATE_TO   >= SY-DATUM.
* .. 납품처 주소 읽기
  SELECT SINGLE * FROM LFA1 INTO LS_ADD
         WHERE LIFNR = LIFNR AND LOEVM = SPACE.


  SORT LT_EMAKT BY EBELN EBELP.
  SORT LT_T001W BY WERKS.
  SORT LT_AMAKT BY AUFNR.

* 데이터 정렬
  LOOP AT LT_0029.
    CLEAR : T_EXPORTA, LT_AMAKT, LT_EMAKT, LT_T001W.

    READ TABLE LT_EMAKT WITH KEY EBELN = LT_0029-EBELN
                                 EBELP = LT_0029-EBELP
                                 BINARY SEARCH.
    READ TABLE LT_T001W WITH KEY WERKS = LT_EMAKT-WERKS
                                 BINARY SEARCH.
    READ TABLE LT_AMAKT WITH KEY AUFNR = LT_0029-AUFNR
                                 BINARY SEARCH.

    T_EXPORTA-BUDAT = LT_0029-BUDAT.
    T_EXPORTA-TXZ01 = LT_0029-TXZ01.
    T_EXPORTA-STONO = LT_0029-EBELN.
    T_EXPORTA-STOPO = LT_0029-EBELP.
    T_EXPORTA-MATNR = LT_AMAKT-PLNBEZ.
    T_EXPORTA-MEINS = LT_EMAKT-MEINS.
    T_EXPORTA-AEDAT = LT_0029-AEDAT.
    T_EXPORTA-AEZET = LT_0029-AEZET.

*   공급업체 영업사원/전화번호
    SELECT SINGLE VERKF TELF1
      INTO (T_EXPORTA-VERKF, T_EXPORTA-TELF1)
      FROM LFM1
     WHERE LIFNR = LIFNR
       AND EKORG IN ('2000','3000')
       AND LOEVM = SPACE
       AND TELF1 NE SPACE.


*   거래명세표 센터주소/전화번호
    CASE LT_EMAKT-WERKS.
      WHEN '1000'.
        IF LT_EMAKT-LGORT = '3000'.
          T_EXPORTA-ADDWE2 = '웅진씽크빅 본사(단행본)'.
          T_EXPORTA-TELF2  = '02-3670-1509'.
        ELSE.
          T_EXPORTA-ADDWE2 = '웅진씽크빅'.
          T_EXPORTA-TELF2  = '031-956-7279'.
        ENDIF.
      WHEN '2000'.
        IF LT_EMAKT-LGORT = '3000'.
          T_EXPORTA-ADDWE2 = '대전 대덕구 평촌동 121 웅진씽크빅(신탄진)'.
          T_EXPORTA-TELF2  = '042-671-0341~2'.
        ELSEIF LT_EMAKT-LGORT = '1010'.
*          T_EXPORTA-ADDWE2 = '충남 금산군 추부면 용지리 614-8번지'
*          E동9호 웅진씽크빅(유성우체국)'.
          CONCATENATE '충남 금산군 추부면 용지리 614-8번지'
                      'E동9호 웅진씽크빅(유성우체국)'
                      INTO T_EXPORTA-ADDWE2.
          T_EXPORTA-TELF2  = '041-753-6660'.
        ELSE.
          T_EXPORTA-ADDWE2 = '대전 유성구 대정동 301-2 웅진씽크빅'.
          T_EXPORTA-TELF2  = '042-544-6403'.
        ENDIF.
      WHEN '3000'.
        T_EXPORTA-ADDWE2 = '경기도 파주시 교하읍 문발리 535-6 웅진씽크빅'.
        T_EXPORTA-TELF2  = '031-955-2941'.
    ENDCASE.


    CASE GUBUN.
      WHEN '1'.    "제품
*--> 2009.08.19 cykim - Plant Name 가져오는 로직 변경 ZPPAT0060에서 발취.
*        T_EXPORTA-NAME1 = LT_T001W-NAME1.
**       책읽기 신탄진/유성우체국 창고명
*        IF LT_EMAKT-WERKS = '2000' AND LT_EMAKT-LGORT = '3000'.
*          T_EXPORTA-NAME1 = '신탄진'.
*        ELSEIF LT_EMAKT-WERKS = '2000' AND LT_EMAKT-LGORT = '1010'.
*          T_EXPORTA-NAME1 = '우체국'.
*        ENDIF.
*
*        T_EXPORTA-MAKTX = LT_AMAKT-MAKTX.
*
**       곰돌이 생산버젼
*        IF LT_AMAKT-VERID IS NOT INITIAL.
*          CONCATENATE LT_AMAKT-MAKTX ' #' LT_AMAKT-VERID '호'
*                      INTO T_EXPORTA-MAKTX.
*        ENDIF.

        SELECT single werks WERKS_NM
          INTO (T_EXPORTA-werks, T_EXPORTA-name1)
          FROM ZPPAT0060
         WHERE AUFNR eq LT_0029-AUFNR
           and lifnr eq lifnr.

*--> 2009.08.19 cykim  - end .

      WHEN '2'.    "상품
        T_EXPORTA-MAKTX = LT_EMAKT-MAKTX.
    ENDCASE.

    WRITE LT_0029-AUFNR TO T_EXPORTA-ORDNO USING EDIT MASK '==ALPHA'.
    WRITE LT_0029-MENGE TO T_EXPORTA-MENGE UNIT LT_EMAKT-MEINS.

*   납품처 정보
    T_EXPORTA-LIFWE(3)   = LIFNR(3).
    T_EXPORTA-LIFWE+3(1) = '-'.
    T_EXPORTA-LIFWE+4(2) = LIFNR+3(2).
    T_EXPORTA-LIFWE+6(1) = '-'.
    T_EXPORTA-LIFWE+7(5) = LIFNR+5(5).
    T_EXPORTA-NAMWE      = LS_ADD-NAME1.
    T_EXPORTA-REPWE      = LS_ADD-J_1KFREPRE.
    CONCATENATE LS_ADD-ORT01 LS_ADD-STRAS INTO T_EXPORTA-ADDWE
                                          SEPARATED BY SPACE.

*   발주처 정보(회사정보)
    T_EXPORTA-LIFAG(3)   = LS_WJ-STCD2(3).
    T_EXPORTA-LIFAG+3(1) = '-'.
    T_EXPORTA-LIFAG+4(2) = LS_WJ-STCD2+3(2).
    T_EXPORTA-LIFAG+6(1) = '-'.
    T_EXPORTA-LIFAG+7(5) = LS_WJ-STCD2+5(5).
    T_EXPORTA-NAMAG = LS_WJ-NAME.
    T_EXPORTA-REPAG = LS_WJ-KR_REPRES.
    CONCATENATE LS_WJADD-CITY1 LS_WJADD-STREET INTO T_EXPORTA-ADDAG
                                               SEPARATED BY SPACE.

*   해피올 제작이관 관련 - 송장항목 변경(2009/04/06)
    T_EXPORTA-NAMWE = '(주)웅진해피올'.
    T_EXPORTA-LIFWE = '101-81-54322'.
    T_EXPORTA-REPWE = '송인회'.
    T_EXPORTA-ADDWE = '서울 중구 충무로3가 극동빌딩3층'.
    CONCATENATE T_EXPORTA-TELF1 '(' T_EXPORTA-VERKF ')'
                INTO T_EXPORTA-TELF1.   "담당자전화/담당자명
*   T_EXPORTA-VERKF = LS_ADD-NAME1.     "실공급업체
    CONCATENATE LS_ADD-NAME1 '(' LIFNR(3) '-'
                LIFNR+3(2) '-' LIFNR+5(5) ')'
                INTO T_EXPORTA-VERKF.   "실공급업체

    APPEND T_EXPORTA.
  ENDLOOP.

  IF T_EXPORTA[] IS NOT INITIAL.
    RETURN-TYPE    = 'S'.
    RETURN-MESSAGE = TEXT-M02.
    SORT T_EXPORTA BY AEDAT AEZET ORDNO STONO STOPO.
  ELSE.
    RETURN-TYPE    = 'N'.
    RETURN-MESSAGE = TEXT-M01.
  ENDIF.

*  SORT T_EXPORTA BY BUDAT STONO STOPO.
  SORT T_EXPORTA BY MAKTX BUDAT STONO STOPO.

ENDFUNCTION.

 


--------------------------------------------------


function zppa_get_gr_history.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(GUBUN) TYPE  CHAR1
*"     VALUE(LIFNR) TYPE  LIFNR
*"     VALUE(AEDAT) TYPE  CHAR8
*"  EXPORTING
*"     VALUE(RETURN) LIKE  ZPPASRETURN STRUCTURE  ZPPASRETURN
*"  TABLES
*"      T_EXPORTA STRUCTURE  ZPPAS0041
*"----------------------------------------------------------------------
* 2008/09/10 거래명세표 양식변경(항목추가) : ZPPAS0026 구조변경
*"----------------------------------------------------------------------
** MATNR          CHAR  18    0     자재코드
** VERKF      CHAR  30  0 공급업체 오피스의 담당영업사원
** TELF1    CHAR  16  0 영업사원전화
** ADDWE2   CHAR  72  0 물류센터주소
** TELF2    CHAR  16  0 물류센터전화
*"----------------------------------------------------------------------

  data : lt_0029  like zppat0029 occurs 0 with header line,
         lt_t001w like t001w      occurs 0 with header line.

  data : ls_wj    like j_1bbranch,
         ls_wjadd like adrc,
         ls_add   like lfa1 .

  refresh t_exporta.

  data: lt_zppat0062 like table of zppat0062 with header line,
        lt_zppat0062_temp like table of zppat0062 with header line.

  select *
    into corresponding fields of table lt_zppat0062
    from zppat0062
   where lifnr eq lifnr
     and budat eq aedat.

  delete lt_zppat0062 where cangb eq 'X'
                         or loekz eq 'X'.

* 주소정보 읽기
* ..웅진(발주처) 주소 읽기
  perform get_wj_add_data in program zppap0005
                            changing ls_wj.

  clear ls_wjadd.
  select single *
    into corresponding fields of ls_wjadd
    from adrc
   where addrnumber = ls_wj-adrnr
     and date_from <= sy-datum
     and date_to   >= sy-datum.

* .. 납품처 주소 읽기
  select single *
    into CORRESPONDING FIELDS OF ls_add
    from lfa1
   where lifnr eq lifnr
     and loevm eq space
     and spras eq sy-langu.


  loop at lt_zppat0062.

    t_exporta-budat = lt_zppat0062-budat.
    t_exporta-name1 = lt_zppat0062-werks_nm.

    call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
      exporting
        input         = lt_zppat0062-matnr
      importing
        output        = t_exporta-matnr.

    t_exporta-maktx = lt_zppat0062-maktx.
    t_exporta-ordno = lt_zppat0062-aufnr.
    t_exporta-stono = lt_zppat0062-ebeln.
    t_exporta-stopo = lt_zppat0062-ebelp.
    t_exporta-werks = lt_zppat0062-werks.
    t_exporta-menge = lt_zppat0062-menge.
    t_exporta-meins = lt_zppat0062-meins.
    t_exporta-aedat = lt_zppat0062-zfdat.
    t_exporta-aezet = lt_zppat0062-zftms.

*   공급업체 영업사원/전화번호
    select single verkf telf1
      into (t_exporta-verkf, t_exporta-telf1)
      from lfm1
     where lifnr eq lifnr
       and ekorg in ('2000','3000')
       and loevm eq space
       and telf1 ne space.

*   납품처 정보
    t_exporta-lifwe(3)   = lifnr(3).
    t_exporta-lifwe+3(1) = '-'.
    t_exporta-lifwe+4(2) = lifnr+3(2).
    t_exporta-lifwe+6(1) = '-'.
    t_exporta-lifwe+7(5) = lifnr+5(5).
    t_exporta-namwe      = ls_add-name1.
    t_exporta-repwe      = ls_add-j_1kfrepre.
    concatenate ls_add-ort01 ls_add-stras into t_exporta-addwe
                                          separated by space.

*   발주처 정보(회사정보)
    t_exporta-lifag(3)   = ls_wj-stcd2(3).
    t_exporta-lifag+3(1) = '-'.
    t_exporta-lifag+4(2) = ls_wj-stcd2+3(2).
    t_exporta-lifag+6(1) = '-'.
    t_exporta-lifag+7(5) = ls_wj-stcd2+5(5).
    t_exporta-namag = ls_wj-name.
    t_exporta-repag = ls_wj-kr_repres.
    concatenate ls_wjadd-city1 ls_wjadd-street into t_exporta-addag
                                               separated by space.

    append t_exporta.
  endloop.

  if t_exporta[] is not initial.
    return-type    = 'S'.
    return-message = text-m02.
    sort t_exporta by aedat aezet ordno stono stopo.
  else.
    return-type    = 'N'.
    return-message = text-m01.
  endif.

  sort t_exporta by maktx budat stono stopo.

endfunction.