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


REPORT ZORAACCT.


* Step 1. Declare Table
TABLES:
     SKB1,
     SKA1,
     T001.


* Step 2. Declare Internal table
DATA:  BEGIN OF IT_SKB1 OCCURS 0.
         INCLUDE STRUCTURE SKB1.
DATA:  END OF IT_SKB1.


DATA:  BEGIN OF IT_SKA1 OCCURS 0.
         INCLUDE STRUCTURE SKA1.
DATA:  END OF IT_SKA1.


DATA:  BEGIN OF IT_T001 OCCURS 0.
         INCLUDE STRUCTURE T001.
DATA:  END OF IT_T001.


* Step 3. Declare Structure
DATA:  BEGIN OF ST_1 OCCURS 1,
         F_1(3) TYPE C, " For SKB1-MANDT,
         F_2(4) TYPE C, " For SKB1-BUKRS,
         F_3(10) TYPE C, " For SKB1-SAKNR,
         F_4(12) TYPE C, " For SKB1-ERNAM,
         F_5(50) TYPE C, " For SKB1-STEXT,
         F_6(5) TYPE C, " For SKB1-WAERS,
         F_7(3) TYPE C, " For SKA1-MANDT,
         F_8(4) TYPE C, " For SKA1-KTOPL,
         F_9(10) TYPE C, " For SKA1-SAKNR,
         F_10(10) TYPE C, " For SKA1-BILKT,
         F_11(3) TYPE C, " For T001-MANDT,
         F_12(4) TYPE C, " For T001-BUKRS,
         F_13(25) TYPE C, " For T001-BUTXT,
         F_14(4) TYPE C, " For T001-KTOPL,
END OF ST_1.
DATA:  IT_1 LIKE ST_1 OCCURS 0 WITH HEADER LINE.


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


* Step 5. 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 6. 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 + 147.
CLEAR IT_1.
REFRESH IT_1.
CLEAR IT_SKB1.
REFRESH IT_SKB1.
CLEAR IT_SKA1.
REFRESH IT_SKA1.
CLEAR IT_T001.
REFRESH IT_T001.
SELECT
    MANDT
    BUKRS
    SAKNR
    ERNAM
    STEXT
    WAERS
INTO (IT_SKB1-MANDT,
      IT_SKB1-BUKRS,
      IT_SKB1-SAKNR,
      IT_SKB1-ERNAM,
      IT_SKB1-STEXT,
      IT_SKB1-WAERS)
FROM SKB1.
    SELECT
        MANDT
        KTOPL
        SAKNR
        BILKT
    INTO (IT_SKA1-MANDT,
          IT_SKA1-KTOPL,
          IT_SKA1-SAKNR,
          IT_SKA1-BILKT)
    FROM SKA1
    WHERE
SAKNR = IT_SKB1-SAKNR.
        SELECT
            MANDT
            BUKRS
            BUTXT
            KTOPL
        INTO (IT_T001-MANDT,
              IT_T001-BUKRS,
              IT_T001-BUTXT,
              IT_T001-KTOPL)
        FROM T001
        WHERE
KTOPL = IT_SKA1-KTOPL AND

BUKRS = IT_SKB1-BUKRS.
          IT_1-F_1 = IT_SKB1-MANDT.
          IT_1-F_2 = IT_SKB1-BUKRS.
          IT_1-F_3 = IT_SKB1-SAKNR.
          IT_1-F_4 = IT_SKB1-ERNAM.
          IT_1-F_5 = IT_SKB1-STEXT.
          IT_1-F_6 = IT_SKB1-WAERS.
          IT_1-F_7 = IT_SKA1-MANDT.
          IT_1-F_8 = IT_SKA1-KTOPL.
          IT_1-F_9 = IT_SKA1-SAKNR.
          IT_1-F_10 = IT_SKA1-BILKT.
          IT_1-F_11 = IT_T001-MANDT.
          IT_1-F_12 = IT_T001-BUKRS.
          IT_1-F_13 = IT_T001-BUTXT.
          IT_1-F_14 = IT_T001-KTOPL.
      IF D_LEN < 32000.
              D_PACK+D_OFFSET(147) = IT_1.
              D_OFFSET = D_OFFSET + 147.
              D_LEN = D_OFFSET + 147.
              CLEAR IT_1.
              REFRESH IT_1.
           ELSE.
              PERFORM SEND_RECORD USING D_PACK.
              D_PACK = IT_1.
         D_OFFSET = 147.
              D_LEN = D_OFFSET + 147.
           ENDIF.
          CLEAR IT_T001.
          REFRESH IT_T001.
        ENDSELECT.
          CLEAR IT_SKA1.
          REFRESH IT_SKA1.
    ENDSELECT.
          CLEAR IT_SKB1.
          REFRESH IT_SKB1.
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.
