Posted: Fri Jan 22, 2010 4:12 pm Post subject: OLE/2 demo. Extracts information on accounts in GL
Code:
*&---------------------------------------------------------------------*
*& Report ZOLETEST *
*& *
*&---------------------------------------------------------------------*
*& OLE/2 demo. *
*& Program extracts information on accounts in GL *
*& (c) Miroslav Samoilenko, Price Waterhouse Moscow *
*&---------------------------------------------------------------------*
REPORT ZOLETEST .
TABLES SKAT. " Descriptions for accounts
TABLES T001. " Master data for company codes
TABLES SKB1. " Master data for accounts (company code)
TYPES:
BEGIN OF GT_DATA, " type to hold data about an account
KTOPL LIKE T001-KTOPL, " chart of accounts
BUKRS LIKE T001-BUKRS, " company code
BUTXT LIKE T001-BUTXT, " description of company code
SAKNR LIKE SKB1-SAKNR, " account number
END OF GT_DATA.
INCLUDE OLE2INCL.
DATA: XLAPP TYPE OLE2_OBJECT, " Excel application OLE object
WORKBOOK TYPE OLE2_OBJECT, " Excel workbook OLE object
SHEET TYPE OLE2_OBJECT, " Excel worksheet OLE object
CELLS TYPE OLE2_OBJECT. " Excel cell OLE object
DATA CURRENTLINE TYPE I. " Current line in spreadsheet
DATA INT_DATA TYPE GT_DATA " Table of accounts
OCCURS 1000 WITH HEADER LINE.
SELECT-OPTIONS S_KTOPL FOR T001-KTOPL.
SELECT-OPTIONS S_BUKRS FOR T001-BUKRS.
* Make Excel application visible
SET PROPERTY OF XLAPP 'Visible' = 1.
PERFORM ERRORS.
* Get the list of workbooks
CALL METHOD OF XLAPP 'Workbooks' = WORKBOOK.
PERFORM ERRORS.
* Add new workbook (create a file)
CALL METHOD OF WORKBOOK 'Add'.
PERFORM ERRORS.
* Get the created worksheet
CALL METHOD OF XLAPP 'Worksheets' = SHEET EXPORTING #1 = 1.
PERFORM ERRORS.
* Activate (select) the first sheet
CALL METHOD OF SHEET 'Activate'.
PERFORM ERRORS.
CURRENTLINE = 1.
* We need to select data from the database into an internal table
* because OLE Automation seems to call COMMIT WORK which is
* forbidden within a SELECT loop.
SELECT A~KTOPL A~BUKRS A~BUTXT B~SAKNR " select necessary fields
INTO TABLE INT_DATA " into an internal table
FROM T001 AS A INNER JOIN SKB1 AS B " from Ccode and Account masters
ON ( A~BUKRS = B~BUKRS " tables are linked through
AND A~MANDT = B~MANDT ) " company code
WHERE A~KTOPL IN S_KTOPL
AND A~BUKRS IN S_BUKRS
ORDER BY A~KTOPL A~BUKRS B~SAKNR. " sort records by CoA and CCode
* go through selected data
LOOP AT INT_DATA.
* when CoA is changed, print out CoA header
ON CHANGE OF INT_DATA-KTOPL.
PERFORM NEWCHART.
ENDON.
* when CCode is changed, print out CCode header
ON CHANGE OF INT_DATA-BUKRS.
PERFORM NEWCCODE.
ENDON.
* print out an account
PERFORM NEWACCOUNT.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
ENDLOOP.
* clean up memory
FREE OBJECT XLAPP.
******************************************************************
* Outputs current OLE error
*****************************************************************
FORM ERRORS.
IF SY-SUBRC NE 0.
WRITE: / 'Error in OLE call', SY-MSGLI.
EXIT.
ENDIF.
ENDFORM.
*****************************************************************
* Prints out the CoA header
*****************************************************************
FORM NEWCHART.
* Output CoA header into report
WRITE:/ 'Chart of accounts', INT_DATA-KTOPL.
* Get current cell on the worksheet
CALL METHOD OF SHEET 'Cells' = CELLS
EXPORTING #1 = CURRENTLINE #2 = 1.
PERFORM ERRORS.
* Output standard text into the selected cell
SET PROPERTY OF CELLS 'Value' = 'Chart of accounts:'.
PERFORM ERRORS.
* Get the next cell
CALL METHOD OF SHEET 'Cells' = CELLS
EXPORTING #1 = CURRENTLINE #2 = 2.
PERFORM ERRORS.
* Output current CoA into the selected cell
SET PROPERTY OF CELLS 'Value' = INT_DATA-KTOPL.
PERFORM ERRORS.
* Move to the next line in the spreadsheet
ADD 1 TO CURRENTLINE.
ENDFORM.
*****************************************************************
* Prints out the CCode header
*****************************************************************
FORM NEWCCODE.
WRITE:/ 'Company Code:', INT_DATA-BUKRS, INT_DATA-BUTXT.
CALL METHOD OF SHEET 'Cells' = CELLS
EXPORTING #1 = CURRENTLINE #2 = 2.
PERFORM ERRORS.
SET PROPERTY OF CELLS 'Value' = 'Company Code:'.
PERFORM ERRORS.
CALL METHOD OF SHEET 'Cells' = CELLS
EXPORTING #1 = CURRENTLINE #2 = 3.
PERFORM ERRORS.
SET PROPERTY OF CELLS 'Value' = INT_DATA-BUKRS.
PERFORM ERRORS.
CALL METHOD OF SHEET 'Cells' = CELLS
EXPORTING #1 = CURRENTLINE #2 = 4.
PERFORM ERRORS.
SET PROPERTY OF CELLS 'Value' = INT_DATA-BUTXT.
PERFORM ERRORS.
ADD 1 TO CURRENTLINE.
ENDFORM.
*****************************************************************
* Prints out account information
*****************************************************************
FORM NEWACCOUNT.
WRITE:/ 'Account number:', INT_DATA-SAKNR.
* get description for the current account number
SELECT SINGLE * FROM SKAT
WHERE KTOPL = INT_DATA-KTOPL
AND SAKNR = INT_DATA-SAKNR
AND SPRAS = SY-LANGU.
WRITE: SKAT-TXT20.
CALL METHOD OF SHEET 'Cells' = CELLS
EXPORTING #1 = CURRENTLINE #2 = 4.
PERFORM ERRORS.
SET PROPERTY OF CELLS 'Value' = INT_DATA-SAKNR.
PERFORM ERRORS.
CALL METHOD OF SHEET 'Cells' = CELLS
EXPORTING #1 = CURRENTLINE #2 = 5.
PERFORM ERRORS.
SET PROPERTY OF CELLS 'Value' = SKAT-TXT20.
PERFORM ERRORS.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.