SAP ALE IDOC EDI-Kor_03.3.3 Inbound Interface – Interface 작동

출판된 한글판 도서


ERP SAP R/3 ALE, EDI & IDOC 기술


Original Book Contents


3.3.3    Interface 작동

 

interface에 대한 ALE 설정이 완료되었으므로, 이제는 그것을 테스트해보는 흥미로운 작업을 시작하겠다. outbound interface의 경우에는 SAP 내에 자료가 이미 있거나, 최소한의 노력으로 자료를 생성할 수 있으므로, 설정내용을 테스트해보는 것이 아주 용이했다. 하지만 inbound ALE interface의 경우는 IDOC을 생성해서 SAP 안으로 전송하는 추가적인 작업를 해야 한다. 테스트와 프로토타입핑(prototyping) 목적을 위해서, 간단한 ABAP/4 프로그램을 작성하여 file형태의 IDOC를 생성해 내고, 이것을 정상적인 방법으로 SAP 안으로 전송하면, 이러한 목적을 간단히 달성할 수 있다. Interface를 프로토타입(prototype)한 다음에는, 외부시스템의 record layout IDOC type을 비교하여 mapping 문서를 만들어 내는 것이 매우 중요하다. 외부시스템의 record IDOC으로 변환시켜주는 mapping 도구이나 translator 소프트웨어를 사용할 수도 있다. ALE/EDI interface에 대하여 SAP에서 인증 받은(certified) mapping 소프트웨어제품들이 많이 있다. 이들 제품들은 또한 외부시스템을 R/3 시스템과 연결시켜주는 ALE Adapter 기능을 가지고 있어서, 외부시스템과 R/3 시스템 간의 interface을 완벽하게 처리해 줄 수도 있다. 우리는 mapping 도구의 역할에 대하여 제 6장에서 논의할 것이다.

 

  File형태의 IDOC 생성 Program 작성

 

우리의 interface를 테스트하기 위해서, 우리는 file형태의 IDOC을 생성해 내는 ABAP/4 프로그램을 작성할 필요가 있다. 또한 그 interface를 성공적으로 프로토타입(prototype)하기 위해서는 IDOC type안에 있는 여러 가지 segment들과 그 field들에 대하여 잘 이해하는 것이 중요하다. 예를 들면, 특정 field의 어떤 값은 application으로 하여금 사전에 지정한 방식대로 자료를 처리하게끔 할 수도 있고, 잘못 처리되게 할 수도 있다. 따라서 interface를 프로토타입(prototype)하기 전에, IDOC type에 대한 문서를(transaction WE60을 이용하여)를 면밀히 읽어 보아야 한다.

 

IDOC Type WMMBID02은 두 개의 segment로 구성되어 있는데, (1) header data를 나타내는 E1MBXYH (2) item data를 나타내는 E1MBXYI가 그것이다. 두 가지 모두 필수 segment이며, 모든 IDOC E1MBXYH EDIDD record 자료가 하나 나오고, 그 다음으로 하나 또는 그 이상의 E1MBXYI EDIDD record가 나오는 형식으로 구성되어 있다. 물론 각각의 IDOC은 맨 처음에 EDIDC record를 가지고 있다. header segment는 전기일자(posting date), 문서일자(document date), document reference number, text, transaction code, 기타의 field들로 구성되어 있고, 반면에 item segment는 자재 번호, 이동 유형(movement type), plant, storage location, 구매주문 번호, 물량, 단위 등과 같은 정보를 포함하고 있는 여러 field를 가지고 있다(WMMBID02 IDOC type의 상세한 내용은 부록 F를 참조하기 바란다). 그러한 field 중에서 E1MBXYI segment에는 SAP application에서 문서들의 처리를 지시하고, 통제하는 flag가 있다. 예를 들면 E1MBXYI-KZBEW field는 구매주문(purchase order)에 대한 자재입고(goods receipt)인 경우는 반드시 B 값을 가져야 하고, 생산지시(production order)에 대해서는 F값을 가져야 한다. 만약 interface가 많은 양의 자료를 처리해야 하거나, 업무상 필요한 경우에는 하나의 header에 여러 개의 line item을 하나로 묶어서 처리할 수가 있는데, 이때는 모든 line item  사용할 transaction code  모두 동일하다는 것이 전제되어야 한다. 하지만 기술적인 관점에서 반드시 이렇게 할 필요는 없다.

 

이제 file형태의 IDOC을 생성하는 program의 일반적인 구조를 검사해 보자. file 내에 작성되는 첫 번째 record EDIDC record인데, 여기에는 client, 전달방향(direction), 송신 partner의 상세정보, 수신 partner의 상세 정보, port, message type, IDOC type과 같은 IDOC에 대한 control 정보가 포함되어 있다(IDOC record의 구조에 대해서는 부록 E를 참조하라). 이때 사용되는 port이름은 기본적으로 SAP<SID>의 값을 가지고 있는데, 이때 <SID> instance의 이름이다. 예를 들면 instanceFST이면, port이름은 SAPFST가 될 것이다. EDIDD record EDIDC record뒤에 나온다. 우리는 먼저 segment name과 같은 EDIDD record structure의 주요 정보를 채운다. 여러분은 segment number hierarchy level과 같은 field는 공백으로 두어도 되는데, 이는 R/3 시스템에서 IDOC이 생성될 때, SAP가 자동적으로 처리해 주기 때문이다. 그 다음은 E1MBXYH header에 자료를 채우고, 이를 EDIDD record SDATA field로 옮기는 것이다. 그 다음 이 EDIDD record file에 기록한다. E1MBXYI detail line에 대해서도 동일한 작업을 수행하고, EDIDD record file에 기록한다. 이렇게 하여 하나의 IDOC file로 생성하는 작업이 완료된다. 필요하다면, 동일한 file안에 자료의 내용이 다른 여러 개의 IDOC을 생성할 수 있다. [그림 3-16]의 프로그램 코드를 참조하라.

 

(참고 : [그림 3-16]에 있는 프로그램을 이용하여 file형태의 IDOC을 생성할 때는 프로그램의 내용 중 일부를 여러분의 시스템에 맞게 조정해야 한다. 예를 들어, 송신 partner, 수신 partner, port 등과 같은 ALE 설정사항 뿐만 아니라, document/posting date, plant, storage location, 자재(material) 등과 같은 정보를 상황에 맞게 수정해야 한다).

 

             NOTE

outbound inbound에서 동시에 사용할 수 있는 IDOC type이 있으면, outbound용으로 만들어진 IDOC file을 이용하여 이러한 IDOC type에 대응되는 inbound message type에 대한 테스트 작업을 진행할 수 있다. 이미 생성되어 있는 outbound IDOC file inbound 용으로 수정하려고 하면, transaction WE12를 사용할 수 있다. 하지만 이를 위해서는 먼저 outbound IDOC file을 생성시켜야 한다.

 

 


 

 

REPORT ZWMMBXY1.

*

************************************************************************

*** This is an IDOC shell program to create WMMBID02 IDocs for       ***

*** the Goods Movement interface between an external warehouse       ***

*** management system and SAP R/3's Inventory Management module.     ***

************************************************************************

TABLES :

    E2MBXYH,                " WMMBID02 IDOC Type's header segment

    E2MBXYI.                " WMMBID02 IDOC Type's detail segment

*      idoc control record

DATA:  BEGIN OF IDOC_CONTROL.

         INCLUDE STRUCTURE EDI_DC.

DATA:  END OF IDOC_CONTROL.

 

*      idoc data record

DATA: BEGIN OF INT_EDIDD.

        INCLUDE STRUCTURE EDI_DD.

DATA: END OF INT_EDIDD.

*

PARAMETERS:

*  SAP IM Inbound Test file of IDocs

   OUTFILE(70)  TYPE C  LOWER CASE     " output filename

                DEFAULT '\USR\SAP\FST\SYS\GLOBAL\INBOUND\WMMBXY.TXT'.

*

START-OF-SELECTION.

*

***** Open the output file

*

  OPEN DATASET OUTFILE FOR OUTPUT IN TEXT MODE.

  IF SY-SUBRC NE 0.

    WRITE: / 'Error opening outfile!', SY-SUBRC.

    EXIT.

  ENDIF.

*******

  CLEAR:  IDOC_CONTROL, INT_EDIDD.

************************************************************************

*     SET CONTROL VARIABLES AND WRITE CONTROL RECORD

************************************************************************

*

  IDOC_CONTROL-TABNAM     = 'EDI_DC'.         "Table name

  IDOC_CONTROL-MANDT      = SY-MANDT.         "Client

  IDOC_CONTROL-DOCREL     = SY-SAPRL.         "SAP release

* IDOC_CONTROL-DOCNUM     =                   "edi docnumber

  IDOC_CONTROL-DOCTYP     = 'WMMBID02'.       "IDOC Type

  IDOC_CONTROL-DIRECT     = '2'.              "Direction

  IDOC_CONTROL-RCVPOR     = 'SAPFST'.         "Receiver Port

  IDOC_CONTROL-RCVPRT     = 'LS'.             "Receiver Partner Type

  IDOC_CONTROL-RCVPRN     = 'FSTCLNT100'.     "Receiver Partner

  IDOC_CONTROL-SNDPOR     = 'SAPFST'.         "Sender Port

  IDOC_CONTROL-SNDPRT     = 'LS'.             "Partner Type for sender

  IDOC_CONTROL-SNDPRN     = 'GOODSMVT01'.     "Sender Partner

  IDOC_CONTROL-SNDPFC     = SPACE.            "Sender Partner function

  IDOC_CONTROL-MESTYP     = 'WMMBXY'.         "Message Type

  IDOC_CONTROL-IDOCTYP    = 'WMMBID02'.       "IDOC Type

* IDOC_CONTROL-CIMTYP     =                   "Extension type

* IDOC_CONTROL-SERIAL     =                   "Serial number for serlzn

*

  TRANSFER IDOC_CONTROL TO OUTFILE.            "write control record

  IF SY-SUBRC NE 0.

     WRITE: / 'ERROR EDIDC 1'.

  ENDIF.

 

************************************************************************

************************************************************************

  CLEAR INT_EDIDD.

  INT_EDIDD-TABNAM     = 'EDI_DD'.

  INT_EDIDD-SEGNAM     = 'E2MBXYH'.

* INT_EDIDD-SEGNUM     =

* INT_EDIDD-PSGNUM     =

* INT_EDIDD-HLEVEL     =

*

CLEAR: E2MBXYH.

*

E2MBXYH-BLDAT = '19980825'.       "   8   Document date in document

E2MBXYH-BUDAT = '19980825'.       "   8   Posting data in document

E2MBXYH-XBLNR = 'testgood'.       "  16   Reference document number

E2MBXYH-BKTXT = 'testgdsrecp'.    "  25   Document header text

*E2MBXYH-FRBNR            CHAR C     16   Number of bill of lading

*E2MBXYH-XABLN            CHAR C     10   Goods receipt/issue slip

E2MBXYH-TCODE = 'MB1C'. " CHAR C      4   Session: Current transaction

*

INT_EDIDD-SDATA = E2MBXYH.

*

TRANSFER INT_EDIDD TO OUTFILE.

IF SY-SUBRC NE 0.

   WRITE: / 'Error writing EDIDD 1'.

ENDIF.

*

  CLEAR INT_EDIDD.

  INT_EDIDD-TABNAM     = 'EDI_DD'.

  INT_EDIDD-SEGNAM     = 'E2MBXYI'.

* INT_EDIDD-SEGNUM     =

* INT_EDIDD-PSGNUM     =

* INT_EDIDD-HLEVEL     =

*

CLEAR E2MBXYI.

*

*2MBXYI-BEAKZ             CHAR C      1       Indicator: line already e

*2MBXYI-XSTOB             CHAR C      1       Flag: Reverse posting

E2MBXYI-MATNR = '000000TESTMATERIAL'.     "   Material number

E2MBXYI-WERKS = 'PLNT'. " CHAR C      4       Plant

E2MBXYI-LGORT = '0001'.        "              Storage Location

E2MBXYI-CHARG = 'TESTBTCH'.    "              Batch number

E2MBXYI-BWART = '561'.         "      3       Movement type (inventory

*2MBXYI-INSMK = 'S'.    " CHAR C      1       stock type

*2MBXYI-SOBKZ             CHAR C      1       Special stock indicator

*2MBXYI-KZVBR             CHAR C      1       Indicator: consumption po

*2MBXYI-LIFNR             CHAR C     10       Vendor (creditor) account

*2MBXYI-KUNNR             CHAR C     10       Customer number

*2MBXYI-KDAUF             CHAR C     10       Sales order number

*2MBXYI-KDPOS             CHAR C      6       Item number in customer o

*2MBXYI-KDEIN             CHAR C      4       Scheduling of customer or

*2MBXYI-SHKZG             CHAR C      1       Debit/credit indicator

*2MBXYI-WAERS             CHAR C      5       Currency key

*2MBXYI-DMBTR             CHAR C     15       Amount in local currency

*2MBXYI-BWTAR             CHAR C     10       Valuation type

E2MBXYI-ERFMG = '555.000'.     "              Quantity in unit of entry

E2MBXYI-ERFME = 'CS'. "   CHAR C      3       Unit of entry in char.for

*2MBXYI-BPMNG             CHAR C     15       Quantity in order price q

*2MBXYI-BPRME             CHAR C      3       Order price quantity unit

*2MBXYI-EBELN =                "     10       Purchasing docum

*2MBXYI-EBELP =                "      5       Item number of purchasing

*2MBXYI-ELIKZ = 'X'. "    CHAR C      1       "Delivery completed" indi

*2MBXYI-SGTXT             CHAR C     50       Line item text

*2MBXYI-WEMPF             CHAR C     12       Goods recipient

*2MBXYI-ABLAD             CHAR C     25       Unloading point

*2MBXYI-KOSTL             CHAR C     10       Cost center

*2MBXYI-AUFNR =                "     12       Order Number

*2MBXYI-ANLN1             CHAR C     12       Asset main number

*2MBXYI-ANLN2             CHAR C      4       Asset sub-number

*2MBXYI-RSNUM             CHAR C     10       Number of reservation / d

*2MBXYI-RSPOS             CHAR C      4       Item number of reservatio

*2MBXYI-KZEAR             CHAR C      1       Indicator: final issue fo

*2MBXYI-UMMAT             CHAR C     18       Receiving/issuing materia

*2MBXYI-UMWRK =           CHAR C      4       Receiving Plant/Issuing P

*2MBXYI-UMLGO = '  '.          "      4       Receiving/Issuing Storage

*2MBXYI-UMCHA             CHAR C     10       Receiving/Issuing Batch

*2MBXYI-KZBEW =                "      1       Movement Indicator

*2MBXYI-WEUNB             CHAR C      1       Indicator: goods receipt

*2MBXYI-LGNUM             CHAR C      3       Warehouse number/complex

*2MBXYI-LGTYP             CHAR C      3       Storage type

*2MBXYI-LGPLA             CHAR C     10       Storage bin

*2MBXYI-GRUND =                "      4       Indicator:Reason for Good

*2MBXYI-EVERS             CHAR C      2       Shipping instructions

*2MBXYI-EVERE             CHAR C      2       Compliance with shipping

*2MBXYI-IMKEY             CHAR C      8       Internal key for real est

*2MBXYI-KSTRG             CHAR C     12       Cost object

*2MBXYI-PAOBJNR           CHAR C     10       Number for business segme

*2MBXYI-PRCTR             CHAR C     10       Profit center

*2MBXYI-PS_PSP_PNR        CHAR C      8       Project structure plan el

*2MBXYI-NPLNR             CHAR C     12       Network number for accoun

*2MBXYI-AUFPL             CHAR C     10       Planning number for trans

*2MBXYI-APLZL             CHAR C      8       Counter for distinguishin

*2MBXYI-AUFPS             CHAR C      4       Number of order item in C

*2MBXYI-VPTNR             CHAR C     10       Partner account number

*2MBXYI-FIPOS             CHAR C     14       Commitment item

*2MBXYI-GSBER             CHAR C      4       Business area

*2MBXYI-BSTMG             CHAR C     15       Goods receipt quantity in

*2MBXYI-BSTME             CHAR C      3       Order unit

*2MBXYI-EXBWR             CHAR C     15       Posting amount in local c

*2MBXYI-KONTO             CHAR C     10       G/L account number

*2MBXYI-RSHKZ             CHAR C      1       Debit/credit indicator

*2MBXYI-BDMNG             CHAR C     15       Requirement quantity in C

*2MBXYI-ENMNG             CHAR C     15       Issued quantity in char.f

*2MBXYI-QPLOS             CHAR C     12       Inspection lot number in

*2MBXYI-UMZST             CHAR C      1       Status of receiving batch

*2MBXYI-UMZUS             CHAR C      1       Status key of transfer ba

*2MBXYI-UMBAR             CHAR C     10       Valuation type of transfe

**MBXYI-UMSOK             CHAR C      1       Special stock indicator f

*2MBXYI-LFBJA             CHAR C      4       Fiscal year of a referenc

*2MBXYI-LFBNR             CHAR C     10       Document number of a refe

*2MBXYI-LFPOS             CHAR C      4       Item in a reference docum

*2MBXYI-SJAHR             CHAR C      4       Material document year in

*2MBXYI-SMBLN             CHAR C     10       Number of a material docu

*2MBXYI-SMBLP             CHAR C      4       Item in material document

*2MBXYI-EXVKW             CHAR C     15       Sales value specified ext

*2MBXYI-QM_ZUSTD          CHAR C      1       Batch status with status

*2MBXYI-POSNR             CHAR C      6       Delivery item for subsyst

*2MBXYI-VBELN             CHAR C     10       Delivery

*2MBXYI-QM_UMZST          CHAR C      1       Status of receiv. batch w

*2MBXYI-BWLVS             CHAR C      3       Movement type for Whse Mg

*2MBXYI-UMREZ = '   '.         "      5       NUMERATOR FOR CONVERTING

*2MBXYI-UMREN = '   '.         "      5       DENOMINATOR FOR CONVERSIO

*2MBXYI-VFDAT = '        '.    "      8       EXPIRATION DATE OR BEST-B

*2MBXYI-DABRZ             DATS D      8       Reference date for accoun

*

******************************** write EDIDD record ********************

INT_EDIDD-SDATA = E2MBXYI.

TRANSFER INT_EDIDD TO OUTFILE.

IF SY-SUBRC NE 0.

   WRITE: / 'ERROR EDIDD 2'.

ENDIF.

************************************************************************

*

그림 3‑16 IDOC 생성 Program 예제

 

 

 

  File형태의 IDOC R/3 안으로 전송하기

 

우리의 IDOC 생성 program을 이용하여 file형태의 IDOC을 생성했기 때문에, 이제 IDOC R/3 시스템 안으로 전송할 준비가 완료되었다. 이 작업은 SAP표준 프로그램 RSEINB00을 사용하면 간단히 처리할 수 있다이렇게 하기 위해서는 다음 작업들을 수행한다. [그림 3-17] [그림 3-18]을 참조하라.

 

n  프로그램 RSEINB00을 실행한다.

n  IDOC file이 있는 directory 경로와 file 이름을 입력한다.

n  프로그램을 실행한다.

n  여러분은 file ALE layer로 전송되었음을 보여주는 안내 메시지를 보게 될 것이다.

 

transaction WE16을 사용하거나 transaction WEDI à [Test] à [Inbound Processing of Original Inbound File]을 실행해도 유사한 작업을 할 수 있다. transaction WE02WE05를 사용하여 앞에서 생성된 IDOC을 조회해 보라. IDOC들의 status53(application document posted) 인지를 확인하라. 우리가 partner profile을 설정할 때, 처리방식(processing option)으로 Trigger immediately를 선택했음을 기억하기 바란다. 만약 우리가 background 방식의 처리를 선택했다면, IDOC application으로 반영하기 위해서는 프로그램 RBDAPP01을 별도로 실행할 필요가 있을 것이다. IDOC은 처리가 진행됨에 따라 여러 단계의 status를 거쳐가는데, 예를 들면 50(IDOC added), 64(IDOC ready to passed to application), 62(IDOC passed to application), 그리고 53(application document posted) 등이 그러한 예들이다.

 

 

 


 


그림 3‑17 File형태의 IDOC SAP 안으로 전송하기


그림 3‑18 생성된 Inbound IDOC


 

이 절을 읽으면서 여러분이 인식했겠지만, transaction data에 대한 ALE interface는 별로 어려움이 없이, 그리고 짧은 기간 내에 설정을 하고, 프로토타입(prototype)해 볼 수가 있다. 하지만 중요한 것은 interface에 대한 업무 상의 요구사항을 정확히 파악하고, 이를 SAP표준 기능에 맞추어 나가는 것이다. 만약 SAP가 제공하는 ALE 기능이 처리할 수 없는 gap이 있다면, 우리는 ALE function module enhance하거나, IDOC extension을 통하여 이러한 문제를 극복해 나갈 수 있다. 이러한 절차는 다음 장에서 논의될 것이다.

 

R/3 시스템에서 활용할 수 있는 ALE message type을 조회해 보면(부록 B를 보거나 보다 상세한 내용이 필요하면 transaction WE81을 이용하라), SAP 내에서 ALE 기능이 지원되는 업무영역이 수백 개 있다는 것을 발견할 수 있을 것이다. 그들 중 대부분이 이 절에서 우리가 프로토타입(prototype)해 본 것과 같은 transaction data를 처리하는 것이다. 그들은 SAP의 거의 모든 application module에 걸쳐 있다. 또한 제 5장에서 우리가 배우겠지만, 필요하다면 상대적으로 최소한의 노력을 들여서 새로운 ALE function을 생성할 수도 있다. R/3 시스템을 설치하는데 필요한 설치비용과 노력을 절감하고, 신뢰할 만한 시스템을 만들어 내기 위해서는 고급수준의 디자인 과정의 일부로서, SAP에서 기본적으로 제공해 주는 강력하고, 견고한 ALE 시나리오를 검토하는 것이 매우 중요하다.