*-------------------------------------------------------------------*
* Report Name: ZORAVEND
* Generated At: Monday, May 02, 2005 11:46:50
* CPI-C Special Notes:
* 1) To execute this job, user type must be CPI-c.
* 2) Add communication partner in TXCOM using SM54.
*-------------------------------------------------------------------*


REPORT ZORAVEND.


* Step 1. Declare Table
TABLES:
     LFA1.


* Step 2. Declare Structure
DATA:  BEGIN OF ST_1 OCCURS 1,
         F_1(10) TYPE C, " For LFA1~LIFNR,
         F_2(3) TYPE C, " For LFA1~LAND1,
         F_3(35) TYPE C, " For LFA1~NAME1,
         F_4(4) TYPE C, " For LFA1~KTOKK,
         F_5(35) TYPE C, " For LFA1~ORT01,
         F_6(10) TYPE C, " For LFA1~PSTLZ,
         F_7(3) TYPE C, " For LFA1~REGIO,
         F_8(35) TYPE C, " For LFA1~STRAS,
         F_9(8) TYPE C, " For LFA1~ERDAT,
         F_10(8) TYPE C, " For LFA1~UPDAT,
END OF ST_1.
DATA:  IT_1 LIKE ST_1 OCCURS 0 WITH HEADER LINE.


* Declare Structure for INTO clause
DATA:  BEGIN OF ST_2 OCCURS 1,
         F_1 LIKE LFA1-LIFNR, " For LFA1~LIFNR,
         F_2 LIKE LFA1-LAND1, " For LFA1~LAND1,
         F_3 LIKE LFA1-NAME1, " For LFA1~NAME1,
         F_4 LIKE LFA1-KTOKK, " For LFA1~KTOKK,
         F_5 LIKE LFA1-ORT01, " For LFA1~ORT01,
         F_6 LIKE LFA1-PSTLZ, " For LFA1~PSTLZ,
         F_7 LIKE LFA1-REGIO, " For LFA1~REGIO,
         F_8 LIKE LFA1-STRAS, " For LFA1~STRAS,
         F_9 LIKE LFA1-ERDAT, " For LFA1~ERDAT,
         F_10 LIKE LFA1-UPDAT, " For LFA1~UPDAT,
END OF ST_2.


* Step 3. Table and structure for CPI-C
TABLES:  TCPIC.
INCLUDE: RSCPICDF.


* Step 4. Declare CPI-C communication variables
DATA:  COM_ID(8)     TYPE C,    " Communication ID
       COM_IN(100)   TYPE C,    " Init signal buffer
       COM_D(4)      TYPE X,    " Dataset Info
       COM_S(4)      TYPE X,    " Status Info
       COM_L(4)      TYPE X,    " Buffer Length
       D_PACK(32000) TYPE C,    " CPI-C Data Pack
       D_OFFSET      TYPE I,    " Offset
       D_LEN         TYPE I.    " Next Pack Length
EXIT.


*-------------------------------------------------------------------*
* Form CPIC is a dynamic call and will be used by                    
* communication partner like DataStage.                              
*-------------------------------------------------------------------*


FORM CPIC.
* Step 5. CPI-C Initialization
*-------------------------------------------------------------------*
* Establish communication, get communication ID                      
*-------------------------------------------------------------------*
COMMUNICATION ACCEPT ID COM_ID.
IF SY-SUBRC <> 0.
    EXIT.
ENDIF.


*-------------------------------------------------------------------*
* Receive init signal from communication partner                     
*-------------------------------------------------------------------*
COM_S = 0.
WHILE COM_S = 0.
    COMMUNICATION RECEIVE ID COM_ID BUFFER COM_IN DATAINFO COM_D
                  STATUSINFO COM_S
                  RECEIVED   COM_L.
    IF SY-SUBRC <> CM_OK AND SY-SUBRC <> CM_DEALLOCATED_NORMAL.
        EXIT.
    ENDIF.
ENDWHILE.


D_PACK = ''.
D_OFFSET = 0.
D_LEN = D_OFFSET + 151.
CLEAR IT_1.
REFRESH IT_1.
SELECT

      LFA1~LIFNR 

      LFA1~LAND1 

      LFA1~NAME1 

      LFA1~KTOKK 

      LFA1~ORT01 

      LFA1~PSTLZ 

      LFA1~REGIO 

      LFA1~STRAS 

      LFA1~ERDAT 

      LFA1~UPDAT

INTO (ST_2-F_1,
      ST_2-F_2,
      ST_2-F_3,
      ST_2-F_4,
      ST_2-F_5,
      ST_2-F_6,
      ST_2-F_7,
      ST_2-F_8,
      ST_2-F_9,
      ST_2-F_10)
FROM

LFA1 AS LFA1.
 IT_1-F_1 = ST_2-F_1. 
 IT_1-F_2 = ST_2-F_2. 
 IT_1-F_3 = ST_2-F_3. 
 IT_1-F_4 = ST_2-F_4. 
 IT_1-F_5 = ST_2-F_5. 
 IT_1-F_6 = ST_2-F_6. 
 IT_1-F_7 = ST_2-F_7. 
 IT_1-F_8 = ST_2-F_8. 
 IT_1-F_9 = ST_2-F_9. 
 IT_1-F_10 = ST_2-F_10. 
      IF D_LEN < 32000.
         D_PACK+D_OFFSET(151) = IT_1.
         D_OFFSET = D_OFFSET + 151.
         D_LEN = D_OFFSET + 151.
         CLEAR IT_1.
         REFRESH IT_1.
      ELSE.
         PERFORM SEND_RECORD USING D_PACK.
         D_PACK = IT_1.
         D_OFFSET = 151.
         D_LEN = D_OFFSET + 151.
      ENDIF.
ENDSELECT.
PERFORM SEND_RECORD USING D_PACK.


ENDFORM.


*-------------------------------------------------------------------*
* Send one record to communication partner                          
*-------------------------------------------------------------------*
FORM SEND_RECORD USING P_REC_BUF.
    COMMUNICATION SEND ID COM_ID BUFFER P_REC_BUF LENGTH D_OFFSET.
    IF SY-SUBRC <> 0.
        COMMUNICATION DEALLOCATE ID COM_ID.
        EXIT.
    ENDIF.
ENDFORM.
