Tuesday, December 28, 2010

Formatting the display of variables

http://help.sap.com/saphelp_470/helpdata/en/9f/db9e3d35c111d1829f0000e829fbfe/content.htm

Monday, December 27, 2010

SY-SUBRC value return in ABAP Programming

Different SY-SUBRC values.
Return value set by the following ABAP statements. In general, a content of 0 means that the statement was executed without problems.

• ASSIGN sets SY-SUBRC to 0 if assignment to field symbol is possible, otherwise 4.
• ASSIGN ->* sets SY-SUBRC to 0 if dereferencing is possible, otherwise 4.
• AUTHORITY-CHECK sets SY-SUBRC to 0 if the user has the necessary authorization, otherwise 4, 8, 12, 16, 24, 28, 32, or 36 depending on the cause.
• CALL DIALOG with USING sets SY-SUBRC to 0, if processing was successful, otherwise <>0.
• CALL FUNCTION sets SY-SUBRC according to the exception handling.
• CALL METHOD sets SY-SUBRC according to the exception handling.
• CALL SELECTION-SCREEN : sets SY-SUBRC to 0 if the user chose Enter or Execute and 4 if the user chose Cancel.
• CALL TRANSACTION : with USING sets SY-SUBRC to 0 if processing was successful, otherwise <>0.
• CATCH SYSTEM-EXCEPTIONS sets SY-SUBRC if there are runtime errors after the ENDCATCH statement. The value is specified in the program.
• COMMIT WORK sets SY-SUBRC to 0.
• COMMIT WORK AND WAIT sets SY-SUBRC to 0 if update was successful, otherwise <>0.
• COMMUNICATION INIT DESTINATION ... RETURNCODE sets SY-SUBRC as specified.
• CONCATENATE sets SY-SUBRC to 0 if the result fits into target variable, otherwise 4.
• CREATE OBJECT sets SY-SUBRC if the exceptions of the instance constructor are handled.
• CREATE OBJECT in OLE2 sets SY-SUBRC to 0 if an external object was created, otherwise 1,2, 3 with different causes.
• DELETE sets SY-SUBRC to 0 if the operation was successful, otherwise 4 or <> 0 depending on cause.
• DEMAND ... MESSAGES INTO sets SY-SUBRC to 0 if a message table is empty, otherwise <> 0.
• DESCRIBE LIST sets SY-SUBRC to 0 if row or list exists, otherwise 4 or 8.
• EXEC SQL - ENDEXEC sets SY-SUBRC to 0 in almost all cases. Only if no set was read with FETCH is SY-SUBRC 4.
• FETCH sets SY-SUBRC to 0 if at least one row was read, otherwise 4.
• GENERATE SUBROUTINE POOL sets SY-SUBRC to 0 if generation was successful, otherwise 8.
• GET CURSOR sets SY-SUBRC to 0 if the cursor is correctly positioned, otherwise 4.
• GET PARAMETER sets SY-SUBRC to 0 if value found in SAP Memory, otherwise 4.
• IMPORT sets SY-SUBRC to 0 if import of data objects was successful, otherwise 4.
• IMPORT sets SY-SUBRC to 0 if import of data objects was successful, otherwise 4.
• LOAD REPORT sets SY-SUBRC to 0 if the operation was successful, otherwise 4 or 8 depending on cause.
• LOOP sets SY-SUBRC to 0 if loop over extract was passed at least once, otherwise 4.
• LOOP AT sets SY-SUBRC to 0 if loop over internal table was passed at least once, otherwise 4.
• MODIFY sets SY-SUBRC to 0 if operation was successful, otherwise 4.
• MODIFY LINE sets SY-SUBRC to 0 if list row was changed, otherwise <> 0.
• MODIFY sets SY-SUBRC to 0 if operation was successful, otherwise 4.
• OLE2 automation, bundled commands set SY-SUBRC to 0 if all were successfully executed, otherwise 1, 2, 3, 4 depending on cause.
• OPEN DATASET sets SY-SUBRC to 0 if the file was opened, otherwise 8.
• Open SQL commands set SY-SUBRC to 0 if operation was successful, otherwise <>0.
• OVERLAY sets SY-SUBRC to 0 if at least one character is overlayed, otherwise 4.
• READ DATASET sets SY-SUBRC to 0 if the read operation was successful, otherwise 4 or 8 depending on cause.
• READ LINE sets SY-SUBRC to 0 if list row exists, otherwise <> 0.
• READ TABLE sets SY-SUBRC to 0 if the table row was found, otherwise 2, 4, 8 depending on cause.
• REPLACE sets SY-SUBRC to 0 if search string could be replaced, otherwise <> 0.
• ROLLBACK WORK always sets SY-SUBRC to 0.
• SCROLL sets SY-SUBRC to 0 if scrolling in list successful, otherwise 4 or 8 depending on cause.
• SEARCH sets SY-SUBRC to 0 if search string was found, otherwise 4.
• SELECT sets SY-SUBRC to 0 if at least one row was read, otherwise 4 or even 8 with SELECT SINGLE FOR UPDATE.
• SET COUNTRY sets SY-SUBRC to 0 if country ID was found in table T005X, otherwise 4.
• SET BIT sets SY-SUBRC to 0 if bit was set, otherwise <> 0.
• SET TITLEBAR sets SY-SUBRC to 0 if title exists, otherwise 4.
• SHIFT ... UP TO sets SY-SUBRC to 0 if position was found in character string, otherwise 4.
• SPLIT sets SY-SUBRC to 0 if size of target fields is sufficient, otherwise 4.
• UPDATE sets SY-SUBRC to 0 if operation successful, otherwise 4.
• WRITE ... TO sets SY-SUBRC to 0 if assignment successful, otherwise 4.

Wednesday, March 24, 2010

VA01 Screen Exit Link

http://wiki.sdn.sap.com/wiki/display/SI/Implementation+of+SAPV45A+User-exit+Screen

Wednesday, March 17, 2010

MULTIPLE SELECTION in F4

PARAMETERS carrid TYPE sflight-carrid.
DATA : BEGIN OF itab OCCURS 0,
carrid TYPE sflight-carrid,
END OF itab.
DATA : rtab TYPE TABLE OF ddshretval WITH HEADER LINE,
ptab TYPE TABLE OF ddshretval WITH HEADER LINE.
REFRESH rtab.
rtab-fieldname = 'CARRID'.
APPEND rtab.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR carrid.
SELECT carrid FROM sflight INTO TABLE itab.
IF sy-subrc = 0.
SORT itab BY carrid.
DELETE ADJACENT DUPLICATES FROM itab COMPARING carrid.
ENDIF.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'CARRID'
* PVALKEY = ' '
dynpprog = sy-repid
dynpnr = sy-dynnr
* DYNPROFIELD = ' '
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
value_org = 'S'
multiple_choice = 'X' " Allows to select multiple records
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = itab
* FIELD_TAB =
return_tab = rtab " This holds multiple records
* DYNPFLD_MAPPING =
* EXCEPTIONS
* PARAMETER_ERROR = 1
* NO_VALUES_FOUND = 2
* OTHERS = 3
.


IF sy-subrc = 0.
ptab[] = rtab[]. " After F4 event rtab holds one value
* only so store them in other internal table
ENDIF.

START-OF-SELECTION. " Press F8 to see the output

LOOP AT ptab.
WRITE :/ ptab-fieldval. " This is a test program
ENDLOOP.

Monday, March 8, 2010

Smarform Driver Program for Displaying Vouchers from a Report

*----------------------------------------------------------------------*
* DATABASE TABLES *
*----------------------------------------------------------------------*
TABLES : BKPF. "Billing Document: Header Data
*----------------------------------------------------------------------*
* INTERNAL TABLE DECLARATIONS *
*----------------------------------------------------------------------*
*---- Internal table to hold Quality Notification data
DATA: IT_BKPF LIKE BKPF OCCURS 0 WITH HEADER LINE,
*--- Internal table to hold the data for printing
IT_BSIS LIKE BSIS OCCURS 0 WITH HEADER LINE,
*--- Internal table to hold the data for printing
IT_PRINT_DOC LIKE IT_BKPF OCCURS 0 WITH HEADER LINE.
*--- Internal table to hold the data for Accounting Document Segment
DATA: IT_BSEG TYPE FAGL_T_BSEG,
*--- Internal table to hold the data for Accounting Document Segment
IT_BSEG1 LIKE BSEG OCCURS 0 WITH HEADER LINE,
*--- Internal table to hold the data for Accounting Document Segment
T_BSEG LIKE IT_BSEG1 OCCURS 0 WITH HEADER LINE,
*--- Internal table to hold the data for Document Types
IT_T003 LIKE T003 OCCURS 0 WITH HEADER LINE.
DATA: WA_BKPF LIKE IT_BKPF OCCURS 0 WITH HEADER LINE,
*--- Internal table to hold the data for Accounting Document Segment
WA_BSEG LIKE IT_BSEG1 OCCURS 0 WITH HEADER LINE.
*--- Internal table to hold the data for Company Codes
DATA: IT_T001 LIKE T001 OCCURS 0 WITH HEADER LINE,
*--- Internal table to hold the data for Accounting: Secondary Index for Vendors
IT_BSIK LIKE BSIK OCCURS 0 WITH HEADER LINE,
*--- Internal table to hold the data for Vendor Master (General Section)
IT_LFA1 LIKE LFA1 OCCURS 0 WITH HEADER LINE,
*--- Internal table to hold the data for Texts for Profit Center Master Data
IT_CEPCT LIKE CEPCT OCCURS 0 WITH HEADER LINE,
*--- Internal table to hold the data for Texts for Profit Center Master Data
IT_VBKPF LIKE VBKPF OCCURS 0 WITH HEADER LINE,
*--- Internal table to hold the data for General Data in Customer Master
IT_KNA1 LIKE KNA1 OCCURS 0 WITH HEADER LINE,
*--- Internal table
IT_EENO_DYNP LIKE EENO_DYNP OCCURS 0 WITH HEADER LINE,
IT_TLINE LIKE TLINE OCCURS 0 WITH HEADER LINE,
IT_TCJ_POSITIONS LIKE TCJ_POSITIONS OCCURS 0 WITH HEADER LINE.

*--- Internal table to hold the function codes.
DATA: BEGIN OF IT_FCODE OCCURS 0,
FCODE(5),
END OF IT_FCODE.
**---------------------------------------------------------------------*
** DATA DECLARATIONS *
**---------------------------------------------------------------------*
DATA : LF_FORMNAME(30),
LF_FM_NAME(30),
V_MESG(500) TYPE C, " Message
V_NAME LIKE THEAD-TDNAME. " Object Name

DATA: F_COLOR, " For color
V_SELKZ, " To select the Check Box
V_TXT(50).
*----------------------------------------------------------------------*
* FLAGS *
*----------------------------------------------------------------------*
DATA: F_STOP.

*----------------------------------------------------------------------*
* CONSTANTS *
*----------------------------------------------------------------------*
CONSTANTS: C_X TYPE C VALUE 'X'.
*---------------------------------------------------------------------*
* SELECTION SCREEN
*---------------------------------------------------------------------*
*------ Selection Block for Date,Notification Type And Plant
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_BUKRS LIKE BKPF-BUKRS OBLIGATORY, " Company code
P_GJAHR LIKE BKPF-GJAHR OBLIGATORY. " Fiscal Year
SELECT-OPTIONS: S_BUDAT FOR BKPF-BUDAT, "OBLIGATORY, " Posting date
S_BELNR FOR BKPF-BELNR, " Document Number
S_BLART FOR BKPF-BLART NO-DISPLAY. " DOCUMENT TYPE

SELECTION-SCREEN END OF BLOCK BLK1.

SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-002.
*--- Radio Buttons for selecting REPORT
PARAMETERS: P_RAD1 RADIOBUTTON GROUP GRP1 DEFAULT 'X', " Vendor Invoice
P_RAD2 RADIOBUTTON GROUP GRP1, " Customer Incoming Payment
P_RAD3 RADIOBUTTON GROUP GRP1, " Customer Incoming Payment
P_RAD4 RADIOBUTTON GROUP GRP1, " Journal Document
P_RAD5 RADIOBUTTON GROUP GRP1, " Receipts Voucher
P_RAD6 RADIOBUTTON GROUP GRP1, " Payments Voucher
P_RAD7 RADIOBUTTON GROUP GRP1. " Vendor Outgoing Payment
SELECTION-SCREEN END OF BLOCK BLK2.
*---------------------------------------------------------------------*
* AT SELECTION-SCREEN *
*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON P_BUKRS.
*--- Perform to validate the company code
PERFORM VALIDATE_COMPANY_CODE.
*---------------------------------------------------------------------*
* START-OF-SELECTION *
*---------------------------------------------------------------------*
START-OF-SELECTION.
SET PF-STATUS 'LITL'.
*--- Perform to get Accounting Document Header data
PERFORM GET_BKPF_DATA.
*--- Perform to get Document Types Document Types
PERFORM GET_T003_DATA.
*--- Perform to get Document Types printing Company Codes
PERFORM GET_T001_DATA.
*--- Perform to get Document Types Accounting: Secondary Index for Vendors
PERFORM GET_BSIK_DATA.
*--- Perform to get Document Types
PERFORM GET_VBKPF_DATA.
*--- Perform to display the report
PERFORM DISPLAY_REPORT.
*----------------------------------------------------------------------*
* AT USER-COMMAND *
*----------------------------------------------------------------------*
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'SALL'.
V_SELKZ = 'X'.
*--- Perform to select all the PO'S
PERFORM SET_CHKBOXES USING V_SELKZ.
WHEN 'DSALL'.
CLEAR V_SELKZ.
*--- Perform to select all the PO'S
PERFORM SET_CHKBOXES USING V_SELKZ.
WHEN 'DISP'.
CLEAR IT_PRINT_DOC. REFRESH IT_PRINT_DOC.
*--- Perform to get the PO's
PERFORM GET_SELECTED_DOCS_TOPRINT.
*--- Perform to get The Accounting Document Segment
PERFORM GET_BSEG_DATA.
IF IT_PRINT_DOC[] IS INITIAL.
MESSAGE S001(ZLITL_MSGCLASS) WITH 'Select atleast one document'.
ELSE.
*--- Perform to call the Smart Form
PERFORM GET_SFORM.
CLEAR: T_BSEG[], T_BSEG.
ENDIF.

ENDCASE.
*&---------------------------------------------------------------------*
*& Form GET_BKPF_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GET_BKPF_DATA .

DATA: LV_RAD(3).
S_BLART-OPTION = 'EQ'.
S_BLART-SIGN = 'I'.
*--- Selection Screen Radiobuttions
IF P_RAD1 = 'X'.
S_BLART-LOW = 'KR'.
APPEND S_BLART.
ELSEIF P_RAD2 = 'X' .
S_BLART-LOW = 'DZ'.
APPEND S_BLART.
S_BLART-LOW = 'BR'.
APPEND S_BLART.
ELSEIF P_RAD3 = 'X' .
S_BLART-LOW = 'DR'.
APPEND S_BLART.
ELSEIF P_RAD4 = 'X' .
S_BLART-LOW = 'SA'.
APPEND S_BLART.
S_BLART-LOW = 'IB'.
APPEND S_BLART.
S_BLART-LOW = 'K'.
APPEND S_BLART.
S_BLART-LOW = 'DA'.
APPEND S_BLART.
S_BLART-LOW = 'KA'.
APPEND S_BLART.
S_BLART-LOW = 'AB'.
APPEND S_BLART.
S_BLART-LOW = 'D1'.
APPEND S_BLART.
S_BLART-LOW = 'K1'.
*Start changes by Harini as on 14-11-07
APPEND S_BLART.
S_BLART-LOW = 'S1'.
*End changes by Harini as on 14-11-07
*Start changes by Harini as on 21-11-07
APPEND S_BLART.
S_BLART-LOW = 'KG'.
APPEND S_BLART.
S_BLART-LOW = 'DG'.
APPEND S_BLART.
*End changes by Harini as on 21-11-07
*Start changes by Harini as on 28-12-07
S_BLART-LOW = 'AA'.
APPEND S_BLART.
*Start changes by Harini as on 28-12-07
ELSEIF P_RAD5 = 'X' .
S_BLART-LOW = 'SK'.
APPEND S_BLART.
ELSEIF P_RAD6 = 'X' .
S_BLART-LOW = 'SK'.
APPEND S_BLART.
ELSEIF P_RAD7 = 'X' .
S_BLART-LOW = 'KZ'.
APPEND S_BLART.
S_BLART-LOW = 'BP'.
APPEND S_BLART.
ENDIF.

SELECT * FROM BKPF
INTO TABLE IT_BKPF
WHERE BUKRS = P_BUKRS AND
BELNR IN S_BELNR AND
BLART IN S_BLART AND
GJAHR = P_GJAHR AND
BUDAT IN S_BUDAT.
IF SY-SUBRC = 0.
SORT IT_BKPF BY BELNR.
IF P_RAD5 = 'X' OR P_RAD6 = 'X'.
PERFORM GET_TCJ_POSITIONS.
ENDIF.
ELSE.
MESSAGE S002(ZLITL_MSGCLASS) WITH 'No Data Exists For The Selection Criteria'(001).
F_STOP = 'X'.
STOP.
ENDIF.

ENDFORM. " GET_BKPF_DATA
*&---------------------------------------------------------------------*
*& Form GET_BSIS_DATA
*&---------------------------------------------------------------------*
FORM GET_BSEG_DATA .
*--- Getting BSEG DATA
LOOP AT IT_PRINT_DOC.
CALL FUNCTION 'FAGL_GET_BSEG'
EXPORTING
I_BUKRS = IT_PRINT_DOC-BUKRS
I_BELNR = IT_PRINT_DOC-BELNR
I_GJAHR = IT_PRINT_DOC-GJAHR
I_BSTAT = ' '
IMPORTING
ET_BSEG = IT_BSEG
EXCEPTIONS
NOT_FOUND = 1.

APPEND LINES OF IT_BSEG TO IT_BSEG1.
ENDLOOP.
*--- PERFROM TO GET PROFITCENTER TEXT
PERFORM GET_CEPCT_DATA.
*--- Perfrom to Get General Data in Customer Master
PERFORM GET_KNA1_DATA.
**--- Perform to get Document Types Vendor Master (General Section)
PERFORM GET_LFA1_DATA.

ENDFORM. " GET_BSEG_DATA
*&---------------------------------------------------------------------*
*& Form GET_SFORM
*&---------------------------------------------------------------------*
FORM GET_SFORM .
*--Smart Form name
LF_FORMNAME = 'Z_FI_SF_VOUCHER_PRINT'.

*--Determine smartform function module for invoice
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING FORMNAME = LF_FORMNAME
* variant = ' '
* direct_call = ' '
IMPORTING FM_NAME = LF_FM_NAME
EXCEPTIONS NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* error handling
ENDIF.

CALL FUNCTION LF_FM_NAME
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
* CONTROL_PARAMETERS =
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
* OUTPUT_OPTIONS =
* USER_SETTINGS = 'X'
P_RAD5 = P_RAD5
P_RAD6 = P_RAD6
IMPORTING
* DOCUMENT_OUTPUT_INFO =
* JOB_OUTPUT_INFO =
* JOB_OUTPUT_OPTIONS =
WA_BKPF = WA_BKPF
WA_BSEG = WA_BSEG

TABLES
IT_BSEG1 = IT_BSEG1
IT_BKPF = IT_BKPF
IT_PRINT_DOC = IT_PRINT_DOC
IT_BSEG = IT_BSEG
IT_T003 = IT_T003
IT_T001 = IT_T001
IT_BSIK = IT_BSIK
IT_LFA1 = IT_LFA1
IT_CEPCT = IT_CEPCT
IT_VBKPF = IT_VBKPF
IT_KNA1 = IT_KNA1
IT_TLINE = IT_TLINE
IT_EENO_DYNP = IT_EENO_DYNP
IT_TCJ_POSITIONS = IT_TCJ_POSITIONS
* EXCEPTIONS
* FORMATTING_ERROR = 1
* INTERNAL_ERROR = 2
* SEND_ERROR = 3
* USER_CANCELED = 4
* OTHERS = 5
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " GET_SFORM
*&---------------------------------------------------------------------*
*& Form GET_LIST_DATA
*&---------------------------------------------------------------------*
FORM GET_LIST_DATA .
LOOP AT IT_BKPF.
PERFORM COLOR_FILL.
WRITE: /1(1) SY-VLINE,
* 2 V_CKBOX AS CHECKBOX,
4(1) SY-VLINE,
5(10) IT_BKPF-BELNR,
15(01) SY-VLINE,
16(04) IT_BKPF-GJAHR,
20(01) SY-VLINE,
21(02) IT_BKPF-BLART,
23(01) SY-VLINE,
24(10) IT_BKPF-BUDAT,
34(01) SY-VLINE,
35(10) IT_BKPF-XBLNR,
45(01) SY-VLINE.
ENDLOOP.

ENDFORM. " GET_LIST_DATA
*&---------------------------------------------------------------------*
*& Form COLOR_FILL
*&---------------------------------------------------------------------*
FORM COLOR_FILL .
IF F_COLOR = SPACE.
FORMAT INTENSIFIED OFF.
FORMAT COLOR 2.
F_COLOR = 'X'.
ELSE.
FORMAT INTENSIFIED ON.
FORMAT COLOR 2.
CLEAR F_COLOR.
ENDIF.

ENDFORM. " COLOR_FILL
*&---------------------------------------------------------------------*
*& Form DISPLAY_REPORT
*&---------------------------------------------------------------------*
FORM DISPLAY_REPORT .
DATA: V_CKBOX.
IF NOT IT_BKPF[] IS INITIAL.
WRITE: 1(45) SY-ULINE.
FORMAT COLOR 5.
FORMAT COLOR INTENSIFIED OFF.
FORMAT COLOR 3.
WRITE: /1(1) SY-VLINE,
2(2) 'Ck',
4(1) SY-VLINE,
5(10)'Acc.Doc.No',
15(01) SY-VLINE,
16(04)'Year',
20(01) SY-VLINE,
21(04) 'Type',
23(01) SY-VLINE,
24(10) 'Post. Date',
34(01) SY-VLINE,
35(10) 'Ref. Doc',
45(01) SY-VLINE,
/1(45) SY-ULINE.

LOOP AT IT_BKPF.

IF P_RAD5 = 'X' OR P_RAD6 = 'X'.
CLEAR IT_TCJ_POSITIONS.
READ TABLE IT_TCJ_POSITIONS WITH KEY COMP_CODE = IT_BKPF-BUKRS
POSTING_NUMBER = IT_BKPF-AWKEY+0(10).
IF SY-SUBRC = 0.
IF IT_TCJ_POSITIONS-P_RECEIPTS IS INITIAL AND P_RAD5 = 'X'.
CONTINUE.
ELSEIF IT_TCJ_POSITIONS-P_PAYMENTS IS INITIAL AND P_RAD6 = 'X'.
CONTINUE.
ENDIF.
ENDIF.
ENDIF.
PERFORM COLOR_FILL.
WRITE: /1(1) SY-VLINE,
2 V_CKBOX AS CHECKBOX,
4(1) SY-VLINE,
5(10) IT_BKPF-BELNR,
15(01) SY-VLINE,
16(04) IT_BKPF-GJAHR,
20(01) SY-VLINE,
21(02) IT_BKPF-BLART,
23(01) SY-VLINE,
24(10) IT_BKPF-BUDAT,
34(01) SY-VLINE,
35(10) IT_BKPF-XBLNR,
45(01) SY-VLINE.
ENDLOOP.
WRITE: /1(45) SY-ULINE.
ENDIF.

ENDFORM. " DISPLAY_REPORT
*&---------------------------------------------------------------------*
*& Form GET_SELECTED_DOCS_TOPRINT
*&---------------------------------------------------------------------*
FORM GET_SELECTED_DOCS_TOPRINT .
DATA: LV_BELNR LIKE BKPF-BELNR,
LV_FLAG,
LV_CHK,
LV_TABIX LIKE SY-TABIX,
LV_INDEX LIKE SY-INDEX.
DO.
READ LINE SY-INDEX.
IF SY-SUBRC = 0.
LV_BELNR = SY-LISEL+4(10).
LV_CHK = SY-LISEL+1(1).
IF LV_CHK = C_X.
*--- Padding zeros for ebeln
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_BELNR
IMPORTING
OUTPUT = LV_BELNR.

READ TABLE IT_BKPF WITH KEY BELNR = LV_BELNR.
IF SY-SUBRC = 0.
LV_TABIX = SY-TABIX.
IT_PRINT_DOC = IT_BKPF.
APPEND IT_PRINT_DOC.
CLEAR IT_PRINT_DOC.
ENDIF.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDDO.

ENDFORM. " GET_SELECTED_DOCS_TOPRINT
*&---------------------------------------------------------------------*
*& Form EXCLUDE_PF_STATUS
*&---------------------------------------------------------------------*
FORM EXCLUDE_PF_STATUS .

IT_FCODE-FCODE = 'SALL'.
APPEND IT_FCODE.
IT_FCODE-FCODE = 'DSALL'.
APPEND IT_FCODE.
IT_FCODE-FCODE = 'DISP'.
APPEND IT_FCODE.
SET PF-STATUS 'LITL' EXCLUDING IT_FCODE.


*--- Perform to exclude the pf-status
PERFORM EXCLUDE_PF_STATUS.

ENDFORM. " DISPLAY_VOUCHERS

*&---------------------------------------------------------------------*
*& Form SET_CHKBOXES
*&---------------------------------------------------------------------*
FORM SET_CHKBOXES USING F_SELKZ.
DATA: LV_BELNR LIKE BKPF-BELNR,
LV_FLAG,
LV_INDEX LIKE SY-INDEX.
CLEAR IT_BKPF.
DO.
READ LINE SY-INDEX.
IF SY-SUBRC = 0.
LV_BELNR = SY-LISEL+4(10).
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_BELNR
IMPORTING
OUTPUT = LV_BELNR.

IF LV_FLAG = SPACE.
READ TABLE IT_BKPF WITH KEY BELNR = LV_BELNR.
IF SY-SUBRC = 0.
LV_FLAG = 'X'.
ENDIF.
ENDIF.
IF LV_FLAG = 'X'.
SY-LISEL+1(1) = F_SELKZ.
MODIFY LINE SY-INDEX.
ENDIF.
ELSE.
SY-LISEL+1(1) = '-'.
LV_INDEX = SY-INDEX - 1.
MODIFY LINE LV_INDEX.
EXIT.
ENDIF.
ENDDO.

ENDFORM. " SET_CHKBOXES
*&---------------------------------------------------------------------*
*& Form get_T003_data
*&---------------------------------------------------------------------*
FORM GET_T003_DATA .
IF NOT IT_BKPF[] IS INITIAL.
SELECT * FROM T003 INTO TABLE IT_T003
FOR ALL ENTRIES IN IT_BKPF
WHERE BLART = IT_BKPF-BLART.
ENDIF.

ENDFORM. " get_T003_data
*&---------------------------------------------------------------------*
*& Form get_t001_data
*&---------------------------------------------------------------------*
FORM GET_T001_DATA .
IF NOT IT_BKPF[] IS INITIAL.
SELECT * FROM T001 INTO TABLE IT_T001
FOR ALL ENTRIES IN IT_BKPF
WHERE BUKRS = IT_BKPF-BUKRS.
ENDIF.

ENDFORM. " get_t001_data
*&---------------------------------------------------------------------*
*& Form get_bsik_data
*&---------------------------------------------------------------------*
FORM GET_BSIK_DATA .
IF NOT IT_BKPF[] IS INITIAL.
SELECT * FROM BSIK INTO TABLE IT_BSIK
FOR ALL ENTRIES IN IT_BKPF
WHERE BUKRS = IT_BKPF-BUKRS.
ENDIF.

ENDFORM. " get_bsik_data
*&---------------------------------------------------------------------*
*& Form get_lfa1_data
*&---------------------------------------------------------------------*
FORM GET_LFA1_DATA .
IF NOT IT_BSEG1[] IS INITIAL.
SELECT * FROM LFA1 INTO TABLE IT_LFA1
FOR ALL ENTRIES IN IT_BSEG1 "IT_BSIK
WHERE LIFNR = IT_BSEG1-LIFNR." IT_BSIK-LIFNR.
ENDIF.

ENDFORM. " get_lfa1_data
*&---------------------------------------------------------------------*
*& Form get_cepct_data
*&---------------------------------------------------------------------*
FORM GET_CEPCT_DATA .
IF NOT IT_BSEG1[] IS INITIAL.
SELECT * FROM CEPCT INTO TABLE IT_CEPCT
FOR ALL ENTRIES IN IT_BSEG1
WHERE PRCTR = IT_BSEG1-PRCTR
AND SPRAS = 'EN'.
ENDIF.

ENDFORM. " get_cepct_data
*&---------------------------------------------------------------------*
*& Form GET_VBKPF_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GET_VBKPF_DATA .
IF NOT IT_BKPF[] IS INITIAL.
SELECT * FROM VBKPF INTO TABLE IT_VBKPF
FOR ALL ENTRIES IN IT_BKPF
WHERE BUKRS = IT_BKPF-BUKRS
AND BELNR = IT_BKPF-BELNR.
ENDIF.

ENDFORM. " GET_VBKPF_DATA
*&---------------------------------------------------------------------*
*& Form GET_KNA1_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GET_KNA1_DATA .
IF NOT IT_BSEG1[] IS INITIAL.
SELECT * FROM KNA1 INTO TABLE IT_KNA1
FOR ALL ENTRIES IN IT_BSEG1
WHERE KUNNR = IT_BSEG1-KUNNR.
ENDIF.

ENDFORM. " GET_KNA1_DATA
*&---------------------------------------------------------------------*
*& Form VALIDATE_COMPANY_CODE
*&---------------------------------------------------------------------*
FORM VALIDATE_COMPANY_CODE .
DATA: L_BUKRS LIKE BKPF-BUKRS. " Company code
*--- Select construct against the check table for a valid Company Code
SELECT SINGLE BUKRS
INTO L_BUKRS
FROM T001
WHERE BUKRS = P_BUKRS.
IF SY-SUBRC <> 0.
*--- Display Message if invalid Company Code has been entered
MESSAGE S001(ZLITL_MSGCLASS) WITH 'Enter a valid Company Code'(002).
ENDIF.

ENDFORM. " VALIDATE_COMPANY_CODE
*&---------------------------------------------------------------------*
*& Form get_tcj_positions
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GET_TCJ_POSITIONS .
* Local table to hold AWKEY values
DATA:
BEGIN OF LT_TEMP OCCURS 10,
BUKRS LIKE BKPF-BUKRS,
AWKEY LIKE BKPF-AWKEY,
LV_AWKEY LIKE TCJ_POSITIONS-POSTING_NUMBER,
END OF LT_TEMP.

IF NOT IT_BKPF[] IS INITIAL.
* Populating the local table
LOOP AT IT_BKPF.
LT_TEMP-BUKRS = IT_BKPF-AWKEY+14(4).
LT_TEMP-LV_AWKEY = IT_BKPF-AWKEY+0(10).
CONCATENATE IT_BKPF-BELNR IT_BKPF-GJAHR INTO LT_TEMP-AWKEY.
APPEND LT_TEMP.
CLEAR LT_TEMP.
ENDLOOP.

SELECT * FROM TCJ_POSITIONS INTO TABLE IT_TCJ_POSITIONS
FOR ALL ENTRIES IN LT_TEMP
WHERE COMP_CODE = LT_TEMP-BUKRS
AND POSTING_NUMBER = LT_TEMP-LV_AWKEY.
ENDIF.

ENDFORM. " get_tcj_positions

Wednesday, February 24, 2010

Tables in a Tcode

*&---------------------------------------------------------------------*
*& Report ZRP_TABLES_IN_TCODE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZRP_TABLES_IN_TCODE.
TABLES: D010TAB, DD02L, TSTC, TSTCT, DD02T.

************************************************************************
* Types Defined *
************************************************************************
TYPES: BEGIN OF TY_DETAIL,
TCODE LIKE TSTCT-TCODE,
TTEXT LIKE TSTCT-TTEXT,
TABNAME LIKE D010TAB-TABNAME,
DDTEXT LIKE DD02T-DDTEXT,
END OF TY_DETAIL.

************************************************************************
* Declaration of Internal Tables & Variables *
************************************************************************
DATA: IT_DETAIL TYPE STANDARD TABLE OF TY_DETAIL WITH HEADER LINE,
WA_DETAIL LIKE LINE OF IT_DETAIL,
CURSOR_FIELD(30).

************************************************************************
* SELECTION SCREEN *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK A WITH FRAME TITLE TEXT-001 NO INTERVALS.
SELECT-OPTIONS: SOTCODE FOR TSTCT-TCODE NO INTERVALS MEMORY ID AAA,
SOTEXT FOR TSTCT-TTEXT NO INTERVALS,
SOTNAME FOR D010TAB-TABNAME NO INTERVALS,
SODDTEXT FOR DD02T-DDTEXT NO INTERVALS.
SELECTION-SCREEN END OF BLOCK A.

************************************************************************
* AT SELECTION-SCREEN *
************************************************************************
AT SELECTION-SCREEN.

IF SOTCODE[] IS INITIAL AND SOTEXT[] IS INITIAL AND SOTNAME[] IS INITIAL AND SODDTEXT[] IS INITIAL.
MESSAGE 'You must select minimum one option' TYPE 'E'.
ENDIF.

************************************************************************
* START-OF-SELECTION *
************************************************************************
START-OF-SELECTION.

SELECT TSTCT~TCODE TSTCT~TTEXT D010TAB~TABNAME DD02T~DDTEXT
INTO CORRESPONDING FIELDS OF TABLE IT_DETAIL
FROM TSTC INNER JOIN TSTCT ON ( TSTC~TCODE = TSTCT~TCODE )
INNER JOIN D010TAB ON ( TSTC~PGMNA = D010TAB~MASTER )
INNER JOIN DD02L ON ( D010TAB~TABNAME = DD02L~TABNAME )
INNER JOIN DD02T ON ( DD02L~TABNAME = DD02T~TABNAME )
WHERE TSTCT~SPRSL EQ 'E'
AND DD02L~AS4LOCAL EQ 'A'
AND DD02L~AS4VERS EQ '0000'
AND DD02L~TABCLASS EQ 'TRANSP'
AND DD02T~DDLANGUAGE EQ 'E'
AND TSTCT~TCODE IN SOTCODE
AND TSTCT~TTEXT IN SOTEXT
AND D010TAB~TABNAME IN SOTNAME
AND DD02T~DDTEXT IN SODDTEXT.
IF SY-SUBRC EQ 0.

SORT: IT_DETAIL BY TCODE TABNAME.

WRITE: 1(149) SY-ULINE,
/1(1) '|',
3(20) 'Transaction Code' CENTERED COLOR 1,
24(1) '|',
26(36) 'Transaction Text' CENTERED COLOR 1,
63(1) '|',
65(20) 'Table Name' CENTERED COLOR 1,
86(1) '|',
88(60) 'Table Description' CENTERED COLOR 1,
149(1) '|',
/1(149) SY-ULINE.

LOOP AT IT_DETAIL INTO WA_DETAIL.

WRITE: /1(1) '|',
3(20) WA_DETAIL-TCODE HOTSPOT ON,
24(1) '|',
26(36) WA_DETAIL-TTEXT HOTSPOT ON,
63(1) '|',
65(20) WA_DETAIL-TABNAME HOTSPOT ON,
86(1) '|',
88(60) WA_DETAIL-DDTEXT HOTSPOT ON,
149(1) '|'.
HIDE: WA_DETAIL.

ENDLOOP.
WRITE: /1(149) SY-ULINE.

ELSE.
MESSAGE: 'Sorry, DATA not found for Given Criteria' TYPE 'S'.
ENDIF.


AT LINE-SELECTION.

GET CURSOR FIELD CURSOR_FIELD.

CASE CURSOR_FIELD.
WHEN 'WA_DETAIL-TCODE' OR 'WA_DETAIL-TTEXT'.
PERFORM SHOW_TRANSACTION USING WA_DETAIL-TCODE.
WHEN 'WA_DETAIL-TABNAME' OR 'WA_DETAIL-DDTEXT'.
PERFORM SHOW_TABLE USING WA_DETAIL-TABNAME.
WHEN OTHERS.
ENDCASE.

*&---------------------------------------------------------------------*
*& Form show_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->TABLE_NAME text
*----------------------------------------------------------------------*
FORM SHOW_TABLE USING TABLE_NAME.

CALL FUNCTION 'RS_DD_TABL_EDIT'
EXPORTING
OBJNAME = TABLE_NAME
EDIT_MODE = 'S'
EXCEPTIONS
OBJECT_NOT_FOUND = 1
OBJECT_NOT_SPECIFIED = 2
PERMISSION_FAILURE = 3
NOT_EXECUTED = 4
OTHERS = 5.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. "show_table


*&---------------------------------------------------------------------*
*& Form show_transaction
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FIELD_VALUE text
*----------------------------------------------------------------------*
FORM SHOW_TRANSACTION USING TCODE_IN.

DATA: TCODE LIKE TSTC-TCODE.
TCODE = TCODE_IN.

CALL FUNCTION 'RS_TRANSACTION_SHOW'
EXPORTING
OBJECTNAME = TCODE
MONITOR_ACTIVATE = ' '
EXCEPTIONS
OBJECT_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. "show_transaction

Tuesday, February 16, 2010

ABAP Tips

http://www.henrikfrank.dk/abaptips/abapindex.htm
http://www.sapdevelopment.co.uk/tips/tipshome.htm
http://www.kabai.com/abaps/q.htm
http://www.onestopsap.com/
http://www.planetsap.com/Tips_and_Tricks.htm

Tuesday, February 2, 2010

VK11 BDC with Flat File and Recording

*&---------------------------------------------------------------------*
*& Report Z_SD_BDC_CIN_CONDITIONS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Z_SD_BDC_CIN_CONDITIONS NO STANDARD PAGE HEADING
MESSAGE-ID ZSAS_MSGCLASS
LINE-SIZE 132
LINE-COUNT 65.
************************************************************************
* Program Name : Z_SD_BDC_CIN_CONDITIONS *
* Description : BDC for CIN conditions *
* Functional : Srinivas *
* Developer : Vijaya Lakshmi *
* Development class : zsas_dev *
* Description : *
* *
* 1. Read input file *
* 2. Check the mandatory fields and if any one of them is missing *
* move the record to error file. *
* 3. Fill the bdcdata and call VK11 transaction *
* 4. If any errors format the message and send it for reporting *
* 5. If any errors, it downloads the error file *
* 6. Based on user input, this programs does the follwoing *
* a).Call transaction and in case of errors add to a session *
* B).Create session *
* 7. Display the Audit report *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Request No. Created Date Developer name *
*----------------------------------------------------------------------*
* SMDK900449 24/04/2009 Vijaya Lakshmi.T
*----------------------------------------------------------------------*
* TABLES *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* FLAGS *
*----------------------------------------------------------------------*
DATA: FG_STOP TYPE C, " Flag used to stop processing
FG_COLOR TYPE C, " Flag to set Background color
FG_OPENSESSION TYPE C. " Flag for Open Sesssion
*----------------------------------------------------------------------*
* INTERNAL TABLE DECLARATIONS *
*----------------------------------------------------------------------*
*--- Internal table for input file for ascii data load
DATA: BEGIN OF I_INFILE_ASC OCCURS 0,
STRING(1500) TYPE C,
END OF I_INFILE_ASC.

*--- Internal table to store messages from Call Transaction.
DATA : I_BDCMSGCOLL TYPE STANDARD TABLE OF BDCMSGCOLL WITH HEADER LINE,

*--- Internal table for BDC data
IT_BDCTAB TYPE BDCDATA OCCURS 0 WITH HEADER LINE.

*----- Internal to hold the records in the text file
DATA : BEGIN OF IT_DATA OCCURS 0,
KSCHL(4), " Condition type
SELKZ(1), " Selection indicator for list screens
VKORG(4), " Sales Organization
VTWEG(2), " Distribution Channel
MATNR(18), " Material Number
DATAB(10), " Validity start date of the condition record
DATBI(10), " Validity end date of the condition record
END OF IT_DATA.

*--- Internal table to hold the error records.
DATA : BEGIN OF IT_ERROR OCCURS 0.
INCLUDE STRUCTURE IT_DATA.
DATA : MESSAGE(80) TYPE C,
END OF IT_ERROR.

*--- Internal table for session names
DATA : BEGIN OF IT_SESSION OCCURS 0,
NAME(12),
END OF IT_SESSION.

*--- Internal table to hold Collecting messages in the SAP System
DATA : IT_MSG LIKE BDCMSGCOLL OCCURS 10 WITH HEADER LINE.

*--- Internal table to hold error records to be downloaded
DATA : BEGIN OF I_FINAL OCCURS 0,
STRING(1000),
END OF I_FINAL.

*--- Internal table for session names
DATA : BEGIN OF I_SESSION OCCURS 0,
NAME(12),
END OF I_SESSION.

*--- Internal table to hold data from Excel
DATA : IT_INTERN TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.

*----------------------------------------------------------------------*
* CONSTANTS *
*----------------------------------------------------------------------*
CONSTANTS : C_FILETYPE LIKE RLGRAP-FILETYPE VALUE 'DAT', " Filetype
C_TCODE LIKE TSTC-TCODE VALUE 'VK11', " Transaction
C_MODE(1) VALUE 'A', " Mode
C_UPDATE(1) VALUE 'S', " Update
C_SESS(12) TYPE C VALUE 'COND_REC'. " Session Name

*----------------------------------------------------------------------*
* DATA DECLARATIONS *
*----------------------------------------------------------------------*
DATA : G_TABIX LIKE SY-TABIX, " Table Index
G_MESG(80) TYPE C, " Message,
G_ERROR TYPE I, " No.of Errors
G_SUCCESS TYPE I, " No.of successes
G_BDC_SESS TYPE APQI-GROUPID VALUE 'UPLOAD', " Queue info defn
G_MAX TYPE I VALUE '900', " Max records
G_LINES TYPE I, " No.of records
G_INSERT TYPE I, " Insert
G_COUNTER(2) TYPE N, " No.of Sessions
G_EMPTY TYPE I, " No. of empty records
G_TOTAL TYPE I, " Total no. of records

with data
G_SESSION TYPE APQI-GROUPID, " Session name
G_DEL(4) TYPE C VALUE '09', " To seperate fields in

case of Dat
G_SFILE(255), " File path
G_FILEEXT(3). " File Extension

*----------------------------------------------------------------------*
* SELECTION SCREEN. *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK SCR1 WITH FRAME TITLE TEXT-001.
PARAMETER : P_FILE TYPE RLGRAP-FILENAME OBLIGATORY DEFAULT

'C:/CUSTOMER_MASTER.TXT', " Input File
P_ERR TYPE RLGRAP-FILENAME OBLIGATORY DEFAULT

'C:/CUSTOMER_MASTER_ERR.TXT', " Error File
P_FTYPE LIKE RLGRAP-FILETYPE DEFAULT 'DAT'.

" File Type
SELECTION-SCREEN END OF BLOCK SCR1.

SELECTION-SCREEN BEGIN OF BLOCK MODE WITH FRAME TITLE TEXT-002.
PARAMETER : P_CT RADIOBUTTON GROUP BDC, " Call

Transaction
P_BDC RADIOBUTTON GROUP BDC DEFAULT 'X'. " Create BDC

sess

PARAMETER : P_SESS1 TYPE APQI-GROUPID OBLIGATORY DEFAULT C_SESS. " Session name

PARAMETER : P_MAX(4) OBLIGATORY DEFAULT '100', " No.of recs in

a session
P_TEST AS CHECKBOX DEFAULT 'X'. " Test mode
PARAMETERS: P_HEADER TYPE I DEFAULT 0. " Header Lines
PARAMETERS: P_BEGCOL TYPE I DEFAULT 1 NO-DISPLAY, " Start Column
P_BEGROW TYPE I DEFAULT 1 NO-DISPLAY, " Start Row
P_ENDCOL TYPE I DEFAULT 150 NO-DISPLAY, " End Column
P_ENDROW TYPE I DEFAULT 32000 NO-DISPLAY. " End Row
SELECTION-SCREEN END OF BLOCK MODE.

*---------------------------------------------------------------------*
* AT SELECTION-SCREEN *
*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
*--- Validating file
PERFORM VALIDATE_FILE USING P_FILE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_ERR.
*--- Validating file
PERFORM VALIDATE_FILE USING P_ERR.

*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.

*--- Perform to store the data to an internal table
PERFORM READ_INPUT_FILE_DATA.
*--- Process data in non test mode only
IF P_TEST = SPACE.
IF NOT IT_DATA[] IS INITIAL.
*--- Perform to process data
PERFORM PROCESS_DATA.
ELSE.
G_MESG = 'Error in Processing BDC Data'(001).
MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG.
FG_STOP = 'X'.
STOP.
ENDIF.
ENDIF.

*----------------------------------------------------------------------*
* END OF SELECTION. *
*----------------------------------------------------------------------*
END-OF-SELECTION.

IF FG_STOP = SPACE.
*--- Perform to display the selection screen of the rep`ort
PERFORM DISPLAY_SEL_SCR_REPORT.
*--- Perform to display the session report
PERFORM SESSION_REPORT.
*--- Perform to display the no.of records,success and error records
PERFORM DISPLAY_SUMMARY_REPORT.
*--- Downloading error records.
PERFORM DOWNLOAD_ERROR_FILES.
*---- Perform to display the error records
PERFORM DISPLAY_ERROR_RECORDS.
ENDIF.
*----------------------------------------------------------------------*
* Form : validate_input_file
*----------------------------------------------------------------------*
* Description : To provide F4 help for file if read from PC
*----------------------------------------------------------------------*
FORM VALIDATE_FILE USING F_FILE TYPE RLGRAP-FILENAME.
*--- Call function to get the File (user specified)
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
CHANGING
FILE_NAME = F_FILE
EXCEPTIONS
MASK_TOO_LONG = 1
OTHERS = 2.

IF SY-SUBRC <> 0.
*--- Display message if error occurs in getting file
G_MESG = 'Error in getting the Filename'(002).
MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG. " Error in getting filename.
ENDIF.

ENDFORM. " validate_input_file

*----------------------------------------------------------------------*
* Form : Read_inputfile
*----------------------------------------------------------------------*
* Description : To upload the data into internal table
*----------------------------------------------------------------------*
FORM READ_INPUTFILE TABLES F_INFILE
USING F_FILE TYPE RLGRAP-FILENAME
F_FILTYP TYPE RLGRAP-FILETYPE.
*--- Local variable declarations
DATA : LV_DEL TYPE CHAR01,
LV_FILE TYPE STRING.
*--- Clear and initialize variables
CLEAR F_INFILE.
REFRESH F_INFILE.
LV_FILE = F_FILE.

*--- Function module to upload the input file
IF F_FILTYP = 'DAT'.
LV_DEL = '|'.
ENDIF.
*--- Call function GUI_UPLOAD to upload data from flat file to internal table
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = LV_FILE
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = LV_DEL
TABLES
DATA_TAB = F_INFILE
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.

IF SY-SUBRC <> 0.
*--- Display message if error occurs in uploading data from file
G_MESG = 'Error in uploading the file'(003).
MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG. " 'Error in uploading the file'.
CLEAR G_MESG.
FG_STOP = 'X'.
STOP.
ENDIF.

ENDFORM. "Read_inputfile
*&---------------------------------------------------------------------*
*& Form FORMAT_ASC_DATA
*&---------------------------------------------------------------------*
* To format the ASCII data
*----------------------------------------------------------------------*
FORM FORMAT_ASC_DATA.
*--- Loop to format ASCII data
LOOP AT I_INFILE_ASC.
IT_DATA-KSCHL = I_INFILE_ASC-STRING+0(4).
IT_DATA-SELKZ = I_INFILE_ASC-STRING+4(1).
IT_DATA-VKORG = I_INFILE_ASC-STRING+5(4).
IT_DATA-VTWEG = I_INFILE_ASC-STRING+9(2).
IT_DATA-MATNR = I_INFILE_ASC-STRING+11(18).
IT_DATA-DATAB = I_INFILE_ASC-STRING+29(10).
IT_DATA-DATBI = I_INFILE_ASC-STRING+39(10).

ENDLOOP.

ENDFORM. " FORMAT_ASC_DATA


*&---------------------------------------------------------------------*
*& Form error_processing
*&---------------------------------------------------------------------*
* To process the error records
*----------------------------------------------------------------------*
FORM ERROR_PROCESSING USING F_IT_DATA
F_MESG.
G_ERROR = G_ERROR + 1.
IT_ERROR = F_IT_DATA.
IT_ERROR-MESSAGE = F_MESG.
APPEND IT_ERROR.
CLEAR IT_ERROR.

ENDFORM. " ERROR_PROCESSING

*---------------------------------------------------------------------*
* Form : process_data *
*---------------------------------------------------------------------*
* --- Populating the BDC Data *
*---------------------------------------------------------------------*
FORM PROCESS_DATA .

LOOP AT IT_DATA.

CLEAR :IT_BDCTAB,
I_BDCMSGCOLL.
REFRESH:IT_BDCTAB,
I_BDCMSGCOLL.
*--- To fill the data from the text file

PERFORM FILL_BDCDATA.
IF P_CT EQ 'X'.
*--- Posts data using call transaction method.
PERFORM CALL_TRANSACTION.
ELSE.
*--- Posts data using session method.
PERFORM CALL_SESSION USING C_TCODE P_MAX P_SESS1.
ENDIF.

ENDLOOP.
IF FG_OPENSESSION = 'X'.
*--- Perform to close BDC session
PERFORM CLOSE_SESSION.
ENDIF.

ENDFORM. " PROCESS_DATA

*&---------------------------------------------------------------------*
*& Form FILL_BDCDATA
*&---------------------------------------------------------------------*
* To populate the data
*----------------------------------------------------------------------*
FORM FILL_BDCDATA.

*---- Perform to fill the fields in the screen 0100
PERFORM FILL_SCREEN_0100.
*---- Perform to fill the fields in the screen 0100
PERFORM FILL_SCREEN1_0100.
*---- Perform to fill the fields in the screen 1004
PERFORM FILL_SCREEN_1004.
*---- Perform to fill the fields in the screen 1004
PERFORM FILL_SCREEN_1004_1.

ENDFORM. " FILL_BDCDATA

*&---------------------------------------------------------------------*
*& Form FILL_SCREEN_0100
*&---------------------------------------------------------------------*
* To fill the fields in the screen 0100
*----------------------------------------------------------------------*
FORM FILL_SCREEN_0100 .

PERFORM BDC_DYNPRO USING 'SAPMV13A' '0100'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RV13A-KSCHL'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_FIELD USING 'RV13A-KSCHL' IT_DATA-KSCHL.

ENDFORM. " FILL_SCREEN_0100
.
*&---------------------------------------------------------------------*
*& Form FILL_SCREEN1_0100
*&---------------------------------------------------------------------*
* To fill the fields in screen 100
*----------------------------------------------------------------------*
FORM FILL_SCREEN1_0100 .

PERFORM BDC_DYNPRO USING 'SAPLV14A' '0100'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RV130-SELKZ(03)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=WEIT'.
* PERFORM BDC_FIELD USING 'RV130-SELKZ(01)' IT_DATA-SELKZ.
* PERFORM BDC_FIELD USING 'RV130-SELKZ(02)' IT_DATA-SELKZ.
PERFORM BDC_FIELD USING 'RV130-SELKZ(03)' IT_DATA-SELKZ.
ENDFORM. " FILL_SCREEN1_0100
*&---------------------------------------------------------------------*
*& Form FILL_SCREEN_1004
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FILL_SCREEN_1004 .
PERFORM BDC_DYNPRO USING 'SAPMV13A' '1004'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'RV13A-DATBI(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/00'.
PERFORM BDC_FIELD USING 'KOMG-VKORG' IT_DATA-VKORG.
PERFORM BDC_FIELD USING 'KOMG-VTWEG' IT_DATA-VTWEG.
PERFORM BDC_FIELD USING 'KOMG-MATNR(01)' IT_DATA-MATNR.
PERFORM BDC_FIELD USING 'RV13A-DATAB(01)' IT_DATA-DATAB.
PERFORM BDC_FIELD USING 'RV13A-DATBI(01)' IT_DATA-DATBI.

ENDFORM. " FILL_SCREEN_1004

*&---------------------------------------------------------------------*
*& Form FILL_SCREEN_1004
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FILL_SCREEN_1004_1 .
PERFORM BDC_DYNPRO USING 'SAPMV13A' '1004'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'KOMG-MATNR(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=SICH'.

ENDFORM. " FILL_SCREEN_1004

*&---------------------------------------------------------------------*
*& Form BDC_DYNPRO
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING F_PROGRAM F_DYNPRO.
CLEAR IT_BDCTAB.
IT_BDCTAB-PROGRAM = F_PROGRAM.
IT_BDCTAB-DYNPRO = F_DYNPRO.
IT_BDCTAB-DYNBEGIN = 'X'.
APPEND IT_BDCTAB.
ENDFORM. "BDC_DYNPRO

*&---------------------------------------------------------------------*
*& Form BDC_FIELD
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> SPACE.
CLEAR IT_BDCTAB.
IT_BDCTAB-FNAM = FNAM.
IT_BDCTAB-FVAL = FVAL.
APPEND IT_BDCTAB.
ENDIF.
ENDFORM. "BDC_FIELD
*&---------------------------------------------------------------------*
*& Form call_transaction
*&---------------------------------------------------------------------*
* Posts data using call transaction method. *
*----------------------------------------------------------------------*
FORM CALL_TRANSACTION.

CLEAR: G_LINES,
G_MESG.
*--- Call transaction method
CALL TRANSACTION C_TCODE USING IT_BDCTAB
MODE C_MODE
UPDATE C_UPDATE
MESSAGES INTO I_BDCMSGCOLL.
IF SY-SUBRC <> 0.
DESCRIBE TABLE I_BDCMSGCOLL LINES G_LINES.
READ TABLE I_BDCMSGCOLL INDEX G_LINES TRANSPORTING ALL FIELDS.
*--- Formats message returned by call transaction.
PERFORM FORMAT_MESSAGE.
*--- Perform to process error processing
PERFORM ERROR_PROCESSING USING IT_DATA G_MESG.
PERFORM CALL_SESSION USING C_TCODE P_MAX P_SESS1.
ELSE. "If call transaction is successful.
G_SUCCESS = G_SUCCESS + 1.
ENDIF.

ENDFORM. " CALL_TRANSACTION

*&---------------------------------------------------------------------*
*& Form format_message
*&---------------------------------------------------------------------*
* Reading messages
*----------------------------------------------------------------------*
FORM FORMAT_MESSAGE.
CLEAR G_MESG.

*--- Function module to get the message.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = I_BDCMSGCOLL-MSGID
LANG = SY-LANGU
NO = I_BDCMSGCOLL-MSGNR
V1 = I_BDCMSGCOLL-MSGV1
V2 = I_BDCMSGCOLL-MSGV2
V3 = I_BDCMSGCOLL-MSGV3
V4 = I_BDCMSGCOLL-MSGV4
IMPORTING
MSG = G_MESG.

ENDFORM. " FORMAT_MESSAGE

*----------------------------------------------------------------------*
* Form : call_session
*----------------------------------------------------------------------*
* To call the session either for FSP0 or FSP2
*----------------------------------------------------------------------*
FORM CALL_SESSION USING FP_TCODE TYPE ANY
F_MAX TYPE ANY
F_SESS1 TYPE ANY.
* To open the session
PERFORM OPEN_SESSION USING F_MAX F_SESS1.
* Perform Insert BDC Session
PERFORM BDC_INSERT USING FP_TCODE.
* To close the session
IF G_INSERT = F_MAX .
PERFORM CLOSE_SESSION.
ENDIF.
ENDFORM. " call_session

*----------------------------------------------------------------------*
* Form : open_session
*----------------------------------------------------------------------*
* To open BDC open group.
*----------------------------------------------------------------------*
FORM OPEN_SESSION USING F_MAX TYPE ANY
F_SESS1 TYPE ANY.

IF G_INSERT = F_MAX OR FG_OPENSESSION = SPACE.
G_COUNTER = G_COUNTER + 1.
CLEAR G_SESSION.
CONCATENATE F_SESS1 '_' G_COUNTER INTO G_SESSION.
* Opening the BDC Session
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = G_SESSION
KEEP = 'X'
USER = SY-UNAME
EXCEPTIONS
CLIENT_INVALID = 1
DESTINATION_INVALID = 2
GROUP_INVALID = 3
GROUP_IS_LOCKED = 4
HOLDDATE_INVALID = 5
INTERNAL_ERROR = 6
QUEUE_ERROR = 7
RUNNING = 8
SYSTEM_LOCK_ERROR = 9
USER_INVALID = 10
OTHERS = 11.
IF SY-SUBRC <> 0.
G_MESG = 'Error in Opening the Session'(004) .
MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG. " 'Error in Opening the

Session'.
EXIT.
ELSE.
CLEAR G_INSERT.
FG_OPENSESSION = 'X'.
ENDIF.
ENDIF.
ENDFORM. " OPEN_SESSION

*----------------------------------------------------------------------*
* Form : bdc_insert
*----------------------------------------------------------------------*
* To Insert data.
*----------------------------------------------------------------------*
FORM BDC_INSERT USING FP_TCODE TYPE ANY.

* Inserting BDC
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = FP_TCODE
TABLES
DYNPROTAB = IT_BDCTAB
EXCEPTIONS
INTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_INVALID = 4
PRINTING_INVALID = 5
POSTING_INVALID = 6
OTHERS = 7.
IF SY-SUBRC <> 0.
G_MESG = 'Error in inserting the record'(005).
MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG. " 'Error in inserting the record'.
CLEAR G_MESG.
ELSE.
G_INSERT = G_INSERT + 1.
ENDIF.

ENDFORM. " BDC_INSERT

*----------------------------------------------------------------------*
* Form : close_session
*----------------------------------------------------------------------*
* To close the session
*----------------------------------------------------------------------*
FORM CLOSE_SESSION.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.

IF SY-SUBRC <> 0.
G_MESG = 'Session cannot be closed'(006).
MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG. " 'Session cannot be closed'.
CLEAR G_MESG.
ELSE.
I_SESSION-NAME = G_SESSION.
APPEND I_SESSION.
CLEAR I_SESSION.
CLEAR FG_OPENSESSION.
ENDIF.
ENDFORM. " CLOSE_SESSION

*---------------------------------------------------------------------*
* Form DOWNLOAD_ERROR_FILES
*---------------------------------------------------------------------*
* Downloading the error records to error file
*----------------------------------------------------------------------*
FORM DOWNLOAD_ERROR_FILES.

DATA : LV_DEL TYPE CHAR01,
LV_FILE TYPE STRING.

IF NOT IT_ERROR[] IS INITIAL.
IF P_FTYPE = 'DAT'.
LOOP AT IT_ERROR.


CONCATENATE IT_ERROR-KSCHL
IT_ERROR-SELKZ
IT_ERROR-VKORG
IT_ERROR-VTWEG
IT_ERROR-MATNR
IT_ERROR-DATAB
IT_ERROR-DATBI

INTO I_FINAL-STRING SEPARATED BY G_DEL.
APPEND I_FINAL.
CLEAR I_FINAL.
ENDLOOP.
CLEAR I_FINAL.
ELSEIF P_FTYPE = 'ASC'.

LOOP AT IT_ERROR.
I_FINAL-STRING+0(4) = IT_ERROR-KSCHL.
I_FINAL-STRING+4(1) = IT_ERROR-SELKZ.
I_FINAL-STRING+5(4) = IT_ERROR-VKORG.
I_FINAL-STRING+9(2) = IT_ERROR-VTWEG.
I_FINAL-STRING+11(18) = IT_ERROR-MATNR.
I_FINAL-STRING+29(10) = IT_ERROR-DATAB.
I_FINAL-STRING+39(10) = IT_ERROR-DATBI.


APPEND I_FINAL.
CLEAR I_FINAL.
ENDLOOP.
ENDIF. "IF P_FTYPE = 'DAT'.

LV_FILE = P_ERR.

IF P_FTYPE = 'DAT'.
LV_DEL = '|'.
ENDIF.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
FILENAME = LV_FILE
FILETYPE = 'ASC'
* APPEND = ' '
WRITE_FIELD_SEPARATOR = LV_DEL
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* IMPORTING
* FILELENGTH =
TABLES
DATA_TAB = I_FINAL
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.
IF SY-SUBRC <> 0.
G_MESG = 'Error in downloading the file'(007).
MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG. " Error in downloading the

file.
CLEAR G_MESG.
ENDIF.

ENDIF. "IF NOT I_FILE_ERROR[] IS INITIAL.

ENDFORM. " DOWNLOAD_ERROR_FILES

*&---------------------------------------------------------------------*
*& Form READ_INPUT_DATA
*&---------------------------------------------------------------------*
* To Read the input file data
*----------------------------------------------------------------------*
FORM READ_INPUT_FILE_DATA.

*--- Splitting the filename and its extension
PERFORM SPLIT_FILENAME_EXT.

CASE G_FILEEXT.

WHEN 'XLS'.
*--- Perform to convert the Excel data into an internal table
PERFORM CONVERT_XLS_ITAB.
WHEN 'TXT'.
IF P_FTYPE = 'ASC'.
*--- Uploading the data from server
PERFORM READ_INPUTFILE TABLES I_INFILE_ASC
USING P_FILE P_FTYPE.
*--- Perform Formating ASC type data
PERFORM FORMAT_ASC_DATA.
ELSEIF P_FTYPE = 'DAT'.
*--- Uploading the data from server
PERFORM READ_INPUTFILE TABLES IT_DATA
USING P_FILE P_FTYPE.
ENDIF.
WHEN OTHERS.
G_MESG = 'Invalid Operation'(029).
MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG.
CLEAR G_MESG.
FG_STOP = 'X'.
STOP.
ENDCASE.
IF NOT IT_DATA[] IS INITIAL.
*--- Perform to delete Header lines
PERFORM DELETE_HEADER_EMPTY_RECS.
ENDIF.
ENDFORM. " READ_INPUT_FILE_DATA

*&---------------------------------------------------------------------*
*& Form SPLIT_FILENAME_EXT
*&---------------------------------------------------------------------*
* To split the filename and the extension
*----------------------------------------------------------------------*
FORM SPLIT_FILENAME_EXT.

MOVE P_FILE TO G_SFILE.
*--- To get the extensions of the file
CALL FUNCTION 'CV120_SPLIT_FILE'
EXPORTING
PF_FILE = G_SFILE
IMPORTING
* PFX_FILE =
PFX_EXTENSION = G_FILEEXT
* PFX_DOTEXTENSION =
.
*--- Checking the case of file extension
IF G_FILEEXT NA SY-ABCDE.
TRANSLATE G_FILEEXT TO UPPER CASE.
ENDIF.

ENDFORM. " SPLIT_FILENAME_EXT

*&---------------------------------------------------------------------*
*& Form MOVE_DATA
*&---------------------------------------------------------------------*
* To move the input file data to an internal table
*----------------------------------------------------------------------*
FORM MOVE_DATA.

DATA : LV_INDEX TYPE I.
FIELD-SYMBOLS .
*--- Sorting the internal table
SORT IT_INTERN BY ROW COL.
CLEAR IT_INTERN.

LOOP AT IT_INTERN.
MOVE IT_INTERN-COL TO LV_INDEX.
*--- Assigning the each record to an internal table row
ASSIGN COMPONENT LV_INDEX OF STRUCTURE IT_DATA TO .
IF SY-SUBRC = 0.
*--- Asigning the field value to a field symbol
MOVE IT_INTERN-VALUE TO .
ENDIF.
AT END OF ROW.
APPEND IT_DATA.
CLEAR IT_DATA.
ENDAT.
ENDLOOP.

ENDFORM. " MOVE_DATA

*&---------------------------------------------------------------------*
*& Form CONVER_XLS_ITAB
*&---------------------------------------------------------------------*
* To convert the excel data into an internal table
*----------------------------------------------------------------------*
FORM CONVERT_XLS_ITAB.

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = P_BEGCOL
I_BEGIN_ROW = P_BEGROW
I_END_COL = P_ENDCOL
I_END_ROW = P_ENDROW
TABLES
INTERN = IT_INTERN
* EXCEPTIONS
* INCONSISTENT_PARAMETERS = 1
* UPLOAD_OLE = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0. "#EC *
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

IF NOT IT_INTERN[] IS INITIAL.
*--- Perform to move the data into an internal data
PERFORM MOVE_DATA.
ELSE.
G_MESG = 'No values found'(008).
MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG.
CLEAR G_MESG.
FG_STOP = 'X'.
STOP.
ENDIF.

ENDFORM. " CONVERT_XLS_ITAB

*&---------------------------------------------------------------------*
*& Form DELETE_HEADER_EMPTY_RECS
*&---------------------------------------------------------------------*
* To delete the Header and empty records
*----------------------------------------------------------------------*
FORM DELETE_HEADER_EMPTY_RECS.

DATA: LV_TABIX LIKE SY-TABIX. " Table Index

IF NOT P_HEADER IS INITIAL.
LOOP AT IT_DATA.
IF P_HEADER > 0 AND NOT IT_DATA IS INITIAL.
DELETE IT_DATA FROM 1 TO P_HEADER.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.

CLEAR IT_DATA.
*--- To delete the empty lines from internal table
LOOP AT IT_DATA.
LV_TABIX = SY-TABIX.
IF IT_DATA IS INITIAL.
G_EMPTY = G_EMPTY + 1.
DELETE IT_DATA INDEX LV_TABIX..
ENDIF.
ENDLOOP.

CLEAR IT_DATA.
*--- Total no of recs in file
DESCRIBE TABLE IT_DATA LINES G_TOTAL.
IF G_TOTAL = 0.
G_MESG = 'No records in the file'(009).
MESSAGE I000(ZSAS_MSGCLASS) WITH G_MESG. " No records in the file
CLEAR G_MESG.
FG_STOP = 'X'.
STOP.
ENDIF.

ENDFORM. " DELETE_HEADER_EMPTY_RECS

*&---------------------------------------------------------------------*
*& Form DISPLAY_SELECTION_SCR
*&---------------------------------------------------------------------*
* To display the selection screen input
*----------------------------------------------------------------------*
FORM DISPLAY_SEL_SCR_REPORT.

WRITE :/1(132) SY-ULINE.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE :/1(1) SY-VLINE,
65(65) 'SELECTION SCREEN DATA'(010),
132(1) SY-VLINE.
WRITE :/1(132) SY-ULINE.
FORMAT INTENSIFIED OFF.

*--- Input file name
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'Input File name'(011),
27(2) ' : ',
30(100) P_FILE,
132(1) SY-VLINE.

IF NOT IT_ERROR[] IS INITIAL.
*--- Setting the Error file name to .CSV
PERFORM FILL_COLOR.
IF G_FILEEXT = 'XLS'.
IF NOT P_ERR CS '.XLS'.
IF P_ERR CA '.'.
P_ERR = P_ERR(SY-FDPOS).
CONCATENATE P_ERR '.CSV' INTO P_ERR.
ENDIF.
ENDIF.
P_FTYPE = 'DAT'.
G_DEL = '2C'. " Hexadecimal value for ','
ENDIF.
*--- Error File name
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'Error File name'(012),
27(2) ' : ',
30(100) P_ERR,
132(1) SY-VLINE.
ENDIF.
*--- File type
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'File Type'(013),
27(2) ' : '.
IF G_FILEEXT = 'XLS'.
WRITE :30 'XLS',
132(1) SY-VLINE.
ELSE.
WRITE :30 P_FTYPE,
132(1) SY-VLINE.
ENDIF.
*--- BDC methods
PERFORM FILL_COLOR.
IF P_CT = 'X'.
WRITE :/1(1) SY-VLINE,
2(24) 'Call Transaction'(014),
27(2) ' : ',
30 P_CT,
132(1) SY-VLINE.
ELSE.
WRITE :/1(1) SY-VLINE,
2(24) 'Create Session'(015),
27(2) ' : ',
30 P_BDC,
132(1) SY-VLINE.
ENDIF.
*--- Test Mode
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'Test Mode'(016),
27(2) ' : ',
30 P_TEST,
132(1) SY-VLINE.
*--- Header lines
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'Header Lines'(017),
27(2) ' : ',
30 P_HEADER LEFT-JUSTIFIED,
132(1) SY-VLINE.
WRITE :/1(132) SY-ULINE.

ENDFORM. " DISPLAY_SELECTION_SCR

*&---------------------------------------------------------------------*
*& Form DISPLAY_SUCCESS_ERROR_DATA
*&---------------------------------------------------------------------*
* To display the no.of records,success and error records
*----------------------------------------------------------------------*
FORM DISPLAY_SUMMARY_REPORT.
SKIP 3.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE :/1(132) SY-ULINE.
WRITE :/1(1) SY-VLINE,
65 'SUMMARY REPORT'(018) CENTERED,
132(1) SY-VLINE.
FORMAT INTENSIFIED OFF.
PERFORM FILL_COLOR.
WRITE :/1(132) SY-ULINE.
WRITE :/1(1) SY-VLINE,
2(24) 'Processed Records'(019),
27(2) ' : ',
30 G_TOTAL,
132(1) SY-VLINE.
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'Successfully Uploaded'(020),
27(2) ' : ',
30 G_SUCCESS,
132(1) SY-VLINE.
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'Error Records'(021),
27(2) ' : ',
30 G_ERROR,
132(1) SY-VLINE.
PERFORM FILL_COLOR.
WRITE :/1(1) SY-VLINE,
2(24) 'Empty Records'(022),
27(2) ' : ',
30 G_EMPTY,
132(1) SY-VLINE.
WRITE :/1(132) SY-ULINE.

ENDFORM. " DISPLAY_SUMMARY_REPORT

*----------------------------------------------------------------------*
* Form : session_report
*----------------------------------------------------------------------*
* To display the list of sessions created
*----------------------------------------------------------------------*
FORM SESSION_REPORT .
IF NOT I_SESSION[] IS INITIAL.
FORMAT COLOR COL_HEADING.
WRITE :/01(132) SY-ULINE.
WRITE :/01(01) SY-VLINE,
65 'SESSIONS CREATED'(023) CENTERED,
132(01) SY-VLINE.
WRITE :/01(132) SY-ULINE.
FORMAT INTENSIFIED OFF.

FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE :/01(132) SY-ULINE.
LOOP AT I_SESSION.
WRITE : /1 SY-VLINE.
AT FIRST.
WRITE : 5 'Session names'(O24).
ENDAT.
WRITE : 27 ':', 30 I_SESSION-NAME,
132 SY-VLINE.
ENDLOOP.
WRITE : /01(132) SY-ULINE.
ENDIF.

ENDFORM. " session_report

*&---------------------------------------------------------------------*
*& Form DISPLAY_ERROR_RECORDS
*&---------------------------------------------------------------------*
* To display the error records
*----------------------------------------------------------------------*
FORM DISPLAY_ERROR_RECORDS.

IF G_ERROR > 0.
* ---- Perform to display the error header
PERFORM DISPLAY_ERROR_HEADER.
* ---- Perform to display the error records
PERFORM DISPLAY_ERROR_DETAIL.
ENDIF.

ENDFORM. " DISPLAY_ERROR_RECORDS

*&---------------------------------------------------------------------*
*& Form DISPLAY_ERROR_HEADER
*&---------------------------------------------------------------------*
* To display the error header
*----------------------------------------------------------------------*
FORM DISPLAY_ERROR_HEADER.

FORMAT COLOR COL_HEADING INTENSIFIED ON.
SKIP.
WRITE :/1(132) SY-ULINE.
WRITE :/1(1) SY-VLINE,
65 'ERROR RECORDS'(025) CENTERED,
132(1) SY-VLINE.
FORMAT INTENSIFIED OFF.
FORMAT COLOR COL_HEADING.
WRITE :/1(132) SY-ULINE.
WRITE :/1(1) SY-VLINE,
2(12) 'Condition type'(026),
15(1) SY-VLINE,
16(20) 'Sales Organization'(027),
37(1) SY-VLINE,
38(50) 'Error Message'(028),
132(1) SY-VLINE.
WRITE :/1(132) SY-ULINE.
FORMAT INTENSIFIED OFF.

ENDFORM. " DISPLAY_ERROR_HEADER

*&---------------------------------------------------------------------*
*& Form DISPLAY_ERROR_DETAIL
*&---------------------------------------------------------------------*
* To display the error records
*----------------------------------------------------------------------*
FORM DISPLAY_ERROR_DETAIL.

FORMAT COLOR 1 INTENSIFIED OFF .
LOOP AT IT_ERROR.
PERFORM FILL_COLOR.
WRITE : /1(1) SY-VLINE,
2(12) IT_ERROR-KSCHL,
15(1) SY-VLINE,
* 16(20) IT_ERROR-VKORG,
37(1) SY-VLINE,
38(50) IT_ERROR-MESSAGE,
132(1) SY-VLINE.
ENDLOOP.
WRITE :/1(132) SY-ULINE.

ENDFORM. " DISPLAY_ERROR_DETAIL

*&---------------------------------------------------------------------*
*& Form FILL_COLOR
*&---------------------------------------------------------------------*
* To display the background color
*----------------------------------------------------------------------*
FORM FILL_COLOR.

IF FG_COLOR = SPACE.
FORMAT COLOR 2.
FG_COLOR = 'X'.
ELSE.
FORMAT COLOR 4.
CLEAR FG_COLOR.
ENDIF.
ENDFORM.

*******************Recording************************
0000 T VK11 BS AA X F
SAPMV13A 0100 X
0000 BDC_CURSOR RV13A-KSCHL
0000 BDC_OKCODE /00
0000 RV13A-KSCHL JEXP
SAPLV14A 0100 X
0000 BDC_CURSOR RV130-SELKZ(03)
0000 BDC_OKCODE =WEIT
0000 RV130-SELKZ(01)
0000 RV130-SELKZ(03) X
SAPMV13A 1004 X
0000 BDC_CURSOR RV13A-DATBI(01)
0000 BDC_OKCODE /00
0000 KOMG-VKORG SAS
0000 KOMG-VTWEG 02
0000 KOMG-MATNR(01) t103
0000 RV13A-DATAB(01) 01.01.2009
0000 RV13A-DATBI(01) 01.04.2010
SAPMV13A 1004 X
0000 BDC_CURSOR KOMG-MATNR(01)
0000 BDC_OKCODE =SICH

****************** Flat File****************
JEXP X SAS 02 test12345 01.01.2009 01.04.2010
JEXP X SAS 02 test23456 01.01.2009 01.04.2010

Pricing Routines using VOFM transaction to change the Net Price in Billing to Basic Price

FORM FRM_KONDI_WERT_901.
*{ INSERT SMDK900281 1
**--- Routine for ZGPR
*---------------------------------------------------------------------*
* CONSTANTS DECLARATION
*---------------------------------------------------------------------*

CONSTANTS: C_ZGRP(4) VALUE 'ZGRP',
C_PR00(4) VALUE 'PR00',
C_JEXP(4) VALUE 'JEXP',
C_JEAP(4) VALUE 'JEAP',
C_JECE(4) VALUE 'JECE',
C_JESC(4) VALUE 'JESC',
C_ZS01(4) VALUE 'ZS01'.
*---------------------------------------------------------------------*
* DATA DECLARATION
*---------------------------------------------------------------------*
DATA: lv_ZGRP_KWERT like konv-kwert, "Condition Value of NET RATE
lv_JEXP_KWERT like konv-kwert, "Condition Value of A/R BED%
lv_JEAP_KWERT like konv-kwert, "Condition Value of A/R AED%
lv_JECE_KWERT like konv-kwert, "Condition Value of ECSS
lv_JESC_KWERT like konv-kwert, "Condition Value of SECSS
lv_PR00_KWERT like KONV-kwert, "Condition Value of Gross Price
lv_PR00_KBETR like komv-kbetr, "Amount for the condition PR00
lv_ZS01_KWERT like konv-kwert, "Condition Value of Cash Discount
LV_SUM_KWERT(16) type p decimals 2,
LV_XKWERT(16) TYPE P DECIMALS 2,
LV_RED_KWERT like konv-kwert,
LV_KPEIN(13) type C,
LV_CVAL_KWERT like komv-kwert,
lv_afd_KWERT like komv-kwert.

DATA: LTXKOMV LIKE XKOMV OCCURS 0 WITH HEADER LINE.

IF NOT XKOMV[] IS INITIAL.
LTXKOMV[] = XKOMV[].
clear : XKWERT , YKBETR, LV_CVAL_KWERT,lv_PR00_KBETR.
loop at ltxkomv.
CASE LTXKOMV-KSCHL.

WHEN C_ZGRP.
read table LTXKOMV with key kschl = C_ZGRP.
if sy-subrc = 0.
lv_ZGRP_KWERT = LTXKOMV-kwert.
endif.

WHEN C_ZS01.
read table LTXKOMV with key kschl = C_ZS01.
if sy-subrc = 0.
lv_ZS01_KWERT = LTXKOMV-kwert.
endif.

WHEN C_JEXP.
read table LTXKOMV with key kschl = C_JEXP.
if sy-subrc = 0.
lv_JEXP_KWERT = LTXKOMV-kwert.
endif.

WHEN C_JEAP.
read table LTXKOMV with key kschl = C_JEAP.
if sy-subrc = 0.
lv_JEAP_KWERT = LTXKOMV-kwert.
endif.

WHEN C_JECE.
read table LTXKOMV with key kschl = C_JECE.
if sy-subrc = 0.
lv_JECE_KWERT = LTXKOMV-kwert.
endif.

WHEN C_JESC.
read table LTXKOMV with key kschl = C_JESC.
if sy-subrc = 0.
lv_JESC_KWERT = LTXKOMV-kwert.
endif.

ENDCASE.

*--remove the discount amt from zgpr value
lv_afd_KWERT = lv_ZGRP_KWERT.
*--- Summ all the Excise Amounts
LV_SUM_KWERT = lv_JEXP_KWERT + lv_JEAP_KWERT + lv_JECE_KWERT + lv_JESC_KWERT.
*--- Subtract from the netamount without Discount
LV_RED_KWERT = lv_afd_KWERT - LV_SUM_KWERT.
LV_CVAL_KWERT = LV_RED_KWERT.

*--- For getting the Quantity
LV_KPEIN = xmenge.
*--- Call function Module to reamove the Decimal Zeros
CALL FUNCTION 'FTR_CORR_SWIFT_DELETE_ENDZERO'
CHANGING
C_VALUE = LV_KPEIN.
*--- Check for the availability of Quantity
if lv_kpein <> 0.
lv_PR00_KBETR = LV_CVAL_KWERT / LV_KPEIN.
endif.

endloop.
endif.

if not lv_SUM_KWERT is initial.

XKWERT = LV_CVAL_KWERT.

*---- Read table Conditions for the Condition Type Gross Price
read table ltxkomv with key kschl = C_PR00.
if sy-subrc = 0.
YKBETR = lv_PR00_KBETR.
ltxkomv-kbetr = YKBETR.
else.
YKBETR = lv_PR00_KBETR.
ltxkomv-kbetr = YKBETR.
endif.
*--- Populate the YKBETR value to get the Amount for the Condition PR00
xkomv-kbetr = YKBETR.
else.
XKWERT = LV_CVAL_KWERT.
endif.

*} INSERT
ENDFORM.

All ALVs LIST, GRID , HSEQ

REPORT Z_ALL_ALV MESSAGE-ID ZB3_KKMSG NO STANDARD PAGE HEADING LINE-SIZE 155 LINE-COUNT 37(3).

************************************************************************************************************
* C O N S T A N T S D E C L A R A T I O N
************************************************************************************************************
CONSTANTS: C_AUN(20) VALUE 'AUN', " Constant for storing the parameter id of vbeln
C_MAT(20) VALUE 'MAT', " Constant for storing the parameter id of matnr
C_VA03(20) VALUE 'VA03', " Constant for storing the tcode VA03
C_MM03(20) VALUE 'MM03', " Constant for storing the tcode MM03
C_TOP(45) VALUE 'SALES ORDER ITEM INFORMATION', " Constant to pass the Top Of Page
C_TITL(35) VALUE 'SALES ORDER DETAILS', " Constant to pass the window titlebar
C_URL(45) VALUE 'www.lgsglobal.com', " Constant to hold the url address
C_STIT(70) VALUE 'ITEM DETAILS', " Constant to hold the title of the secondary grid
C_BTIT(70) VALUE 'HEADER DETAILS'. " Constant to hold the title of the basic grid

************************************************************************************************************
* D A T A D E C L A R A T I O N
************************************************************************************************************

DATA: F_COLOR TYPE I, " Flag to change color
F_STOP TYPE C, " Flag to exit from program
V_VBELN TYPE VBAK-VBELN, " Variable for select options
P_LAYVAR1 TYPE DISVARIANT. " Variable for variant name

TYPE-POOLS : SLIS.

************************************************************************************************************
* T Y P E S D E C L A R A T I O N
************************************************************************************************************
TYPES: BEGIN OF TY_VBAK, " Declaration of Sales Order header type
VBELN TYPE VBAK-VBELN, " Sales document no
ERDAT TYPE VBAK-ERDAT, " Sales document created date
ERNAM TYPE VBAK-ERNAM, " Sales document created by
NETWR TYPE VBAK-NETWR, " Net value of sales document
VKORG TYPE VBAK-VKORG, " Sales organisation
END OF TY_VBAK. " End of declaration of sales order header

TYPES: BEGIN OF TY_VBAP, " Declaration of Sales Order Item type
VBELN TYPE VBAP-VBELN, " Sales Document No
POSNR TYPE VBAP-POSNR, " Sales Document Item No
MATNR TYPE VBAP-MATNR, " Material No
NETWR TYPE VBAP-NETWR, " Sales Document Item Material Price
MATKL TYPE VBAP-MATKL, " Material Group
POSAR TYPE VBAP-POSAR, " Item type
END OF TY_VBAP. " End of Declaration of Sales Order Item

TYPES: BEGIN OF TY_MAKT, " Declaration of Material master type
MATNR TYPE MARA-MATNR, " Material Number
MAKTX TYPE MAKT-MAKTX, " Material Description
END OF TY_MAKT. " End of Declaration of Material master

TYPES: BEGIN OF TY_ITEM, " Declaration of Item Output Table type
VBELN TYPE VBAK-VBELN, " Sales Document No
POSNR TYPE VBAP-POSNR, " Sales Document Item No
MATNR TYPE VBAP-MATNR, " Material No
NETWR TYPE VBAP-NETWR, " Sales Document Material Price
MAKTX TYPE MAKT-MAKTX, " Material Description
MATKL TYPE VBAP-MATKL, " Material Group
POSAR TYPE VBAP-POSAR, " Item type
END OF TY_ITEM. " End of Declaration of item table

************************************************************************************************************
* W O R K A R E A D E C L A R A T I O N
************************************************************************************************************
DATA: WA_VBAK TYPE TY_VBAK, " Work area for sales order header details
WA_VBAP TYPE TY_VBAP, " Work area for sales order item details
WA_MAKT TYPE TY_MAKT, " Work area for material description details
WA_ITEM TYPE TY_ITEM. " Work area for item details

* Work areas for ALV header
DATA: WA_FLDCAT TYPE SLIS_FIELDCAT_ALV, " Work area for fieldcatalog basic
WA_LAYOUT TYPE SLIS_LAYOUT_ALV, " Work area for layout basic
WA_EVENTS TYPE SLIS_ALV_EVENT, " Work area for events basic
WA_SORT TYPE SLIS_SORTINFO_ALV. " Workarea for ALV Sort table

* Work areas for ALV item
DATA: WA_FLDCAT1 TYPE SLIS_FIELDCAT_ALV, " Work area for fieldcatalog secondary
WA_LAYOUT1 TYPE SLIS_LAYOUT_ALV, " Work area for layout secondary
WA_EVENTS1 TYPE SLIS_ALV_EVENT, " Work area for events secondary
WA_SORT1 TYPE SLIS_SORTINFO_ALV. " Workarea for ALV Sort table

* Work areas for ALV variant
DATA: WA_VARIANT TYPE DISVARIANT, " Workarea for ALV variants display
WA_VARIANT1 TYPE DISVARIANT. " Workarea for ALV variants check

DATA: WA_KEYINFO TYPE SLIS_KEYINFO_ALV. " Workarea for specifying keyinfo.

************************************************************************************************************
* I N T E R N A L T A B L E S D E C L A R A T I O N
************************************************************************************************************

DATA: IT_VBAK TYPE STANDARD TABLE OF TY_VBAK, " Internal table declaration for so header
IT_VBAP TYPE STANDARD TABLE OF TY_VBAP, " Internal table declaration for so item
IT_MAKT TYPE STANDARD TABLE OF TY_MAKT, " Internal table declaration for material desc.
IT_ITEM TYPE STANDARD TABLE OF TY_ITEM. " Internal table declaration for item details.

* internal tables for ALV header
DATA: IT_FLDCAT TYPE SLIS_T_FIELDCAT_ALV, " Internal table for basic list fieldcatalog
IT_EVENTS TYPE SLIS_T_EVENT, " Internal table for basic list events
IT_SORT TYPE SLIS_T_SORTINFO_ALV. " Internal table for ALV sort

* internal tables for ALV item.
DATA: IT_FLDCAT1 TYPE SLIS_T_FIELDCAT_ALV, " Internal table for secondary list fieldcatalog
IT_EVENTS1 TYPE SLIS_T_EVENT, " Internal table for secondary list events
IT_SORT1 TYPE SLIS_T_SORTINFO_ALV. " Internal table for ALV sort

************************************************************************************************************
* S E L E C T I O N S C R E E N
************************************************************************************************************

SELECTION-SCREEN BEGIN OF BLOCK K WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_VBELN FOR V_VBELN. " Selection criteria for sales document number
*PARAMETERS: p_layvar TYPE disvariant-variant. " Parameter for specifying the layout variant
SELECTION-SCREEN END OF BLOCK K.

SELECTION-SCREEN BEGIN OF BLOCK K1 WITH FRAME TITLE TEXT-040.
PARAMETERS: R_A1 RADIOBUTTON GROUP RG1,
R_A2 RADIOBUTTON GROUP RG1,
R_A3 RADIOBUTTON GROUP RG1.
SELECTION-SCREEN END OF BLOCK K1.

************************************************************************************************************
* I N I T I A L I Z A T I O N
************************************************************************************************************
INITIALIZATION.
S_VBELN-SIGN = 'I'. " Giving initial values to select-options.
S_VBELN-OPTION = 'BT'.
S_VBELN-LOW = 5000.
S_VBELN-HIGH = 5010.
APPEND S_VBELN TO S_VBELN.

************************************************************************************************************
* A T S E L E C T I O N S C R E E N E V E N T
************************************************************************************************************
AT SELECTION-SCREEN.

SELECT VBELN
FROM VBAK
INTO V_VBELN
UP TO 1 ROWS
WHERE VBELN IN S_VBELN. " Checking if records are available in the database
ENDSELECT.

IF SY-SUBRC NE 0. " If user enters wrong selection
CLEAR S_VBELN.
MESSAGE E004 WITH 'please enter a valid input'(002).
ENDIF.

IF S_VBELN-HIGH CN '1234567890 '. " If user gives invalid characters
CLEAR S_VBELN.
MESSAGE E004 WITH 'please enter a valid input'(002) .
ENDIF.

IF S_VBELN-LOW CN '1234567890 '. " If user gives invalid characters
CLEAR S_VBELN.
MESSAGE E004 WITH 'please enter a valid input'(002) .
ENDIF.

* wa_variant1-report = sy-cprog.
* wa_variant1-variant = p_layvar.
* CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
** EXPORTING
** I_SAVE = ' '
* CHANGING
* cs_variant = wa_variant1
* EXCEPTIONS
* wrong_input = 1
* not_found = 2
* program_error = 3
* OTHERS = 4
* .
* IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ENDIF.

************************************************************************************************************
* A T S E L E C T I O N S C R E E N F4
************************************************************************************************************

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_layvar .
* wa_variant-report = sy-cprog.

* CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
* EXPORTING
* is_variant = wa_variant
** I_TABNAME_HEADER =
** I_TABNAME_ITEM =
** IT_DEFAULT_FIELDCAT =
** I_SAVE = ' '
** I_DISPLAY_VIA_GRID = ' '
* IMPORTING
** E_EXIT =
* es_variant = p_layvar1
* EXCEPTIONS
* not_found = 1
* program_error = 2
* OTHERS = 3
* .
* IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ENDIF.
* p_layvar = p_layvar1-variant.

************************************************************************************************************
* S T A R T O F S E L E C T I O N
************************************************************************************************************

START-OF-SELECTION.

PERFORM GET_VBAK_DATA. " Getting data from vbak into it_vbak
SORT IT_VBAK BY VBELN. " sorting table for read statement using binary search

************************************************************************************************************
* E N D O F S E L E C T I O N
************************************************************************************************************

END-OF-SELECTION.

IF F_STOP = 'X'.
MESSAGE I004 WITH 'given range doesnot exist in the database'(007) .
EXIT.
ENDIF.
PERFORM FLDCAT_POPULATE . " Populating the fieldcat
PERFORM SORT_FOR_SUBTOT. " Sorting for finding subtotals
PERFORM LAYOUT_POPULATE. " Populating the layout
PERFORM EVENT_ON_ALVLIST. " Populating the events
PERFORM GIVE_KEYINFO. " Populating the keyinfo.

IF R_A1 = 'X'.
PERFORM DISP_ALV. " Displaying the basic list
ELSEIF R_A2 = 'X'.
PERFORM GET_SEC.
PERFORM BLOCK_INIT. " Initialising the block alv
PERFORM BLOCK_APP1. " Appending first list to block
PERFORM BLOCK_APP2. " Appending first list to block
PERFORM BLOCK_DISP. " Displaying the block
ELSE.
PERFORM GET_SEC.
PERFORM HIERCHSEQ. " Display heierarchial list
ENDIF.

*-----------------------------------------------------P E R F O R M S---------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form get_vbak_data
*----------------------------------------------------------------------*
* Populating the header internal table
*----------------------------------------------------------------------*

FORM GET_VBAK_DATA .

SELECT VBELN " Populating the header table with data from vbak table
ERDAT
ERNAM
NETWR
VKORG
FROM VBAK
INTO TABLE IT_VBAK
WHERE VBELN IN S_VBELN.
IF SY-SUBRC <> 0.
F_STOP = 'X'.
STOP. "#EC *
ENDIF.

ENDFORM. " get_vbak_data

*&---------------------------------------------------------------------*
*& Form get_vbap_data
*----------------------------------------------------------------------*
* Populating the item internal table
*----------------------------------------------------------------------*

FORM GET_VBAP_DATA .

SELECT VBELN " Populating the item table with data from vbap table
POSNR
MATNR
NETWR
MATKL
POSAR
FROM VBAP
INTO TABLE IT_VBAP
WHERE VBELN IN S_VBELN.
ENDFORM. " get_vbap_data

*&---------------------------------------------------------------------*
*& Form get_mara_data
*----------------------------------------------------------------------*
* Populating the material description in the internal table
*----------------------------------------------------------------------*

FORM GET_MAKT_DATA.

IF IT_VBAP[] IS NOT INITIAL.
SELECT MATNR " Getting the material descriptions
MAKTX
FROM MAKT
INTO TABLE IT_MAKT
FOR ALL ENTRIES IN IT_VBAP
WHERE MATNR = IT_VBAP-MATNR
AND SPRAS = 'EN'.
ENDIF.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
ENDFORM. " get_makt_data

*&---------------------------------------------------------------------*
*& Form populate_result_table
*----------------------------------------------------------------------*
* Populating the item internal table
*----------------------------------------------------------------------*

FORM POPULATE_ITEM_TABLE .

LOOP AT IT_VBAP INTO WA_VBAP.
WA_ITEM-VBELN = WA_VBAP-VBELN.
WA_ITEM-POSNR = WA_VBAP-POSNR.
WA_ITEM-MATNR = WA_VBAP-MATNR.
WA_ITEM-NETWR = WA_VBAP-NETWR.
WA_ITEM-MATKL = WA_VBAP-MATKL.
WA_ITEM-POSAR = WA_VBAP-POSAR.
READ TABLE IT_MAKT "Reading the material descriptions into the final table
INTO WA_MAKT
WITH KEY MATNR = WA_VBAP-MATNR
BINARY SEARCH.
IF SY-SUBRC EQ 0.
WA_ITEM-MAKTX = WA_MAKT-MAKTX.
ENDIF.
APPEND WA_ITEM TO IT_ITEM.
CLEAR WA_ITEM.
ENDLOOP.

ENDFORM. " populate_result_table


*&---------------------------------------------------------------------*
*& Form color_change
*----------------------------------------------------------------------*
* Setting flag for alternate colors
*----------------------------------------------------------------------*

FORM COLOR_CHANGE. "#EC CALLED

F_COLOR = SY-TABIX MOD 2. " Changing colors for alternate rows
IF F_COLOR = 0.
FORMAT COLOR 1 .
ELSE.
FORMAT COLOR 2 .
ENDIF.

ENDFORM. " color_change

*&---------------------------------------------------------------------*
*& Form fldcat_populate
*&---------------------------------------------------------------------*
* populating the fieldcatalog of basic list manually
*----------------------------------------------------------------------*
FORM FLDCAT_POPULATE .
DEFINE FLDCATB. " Macro to populate fieldcat of basic list.
WA_FLDCAT-FIELDNAME = &1.
WA_FLDCAT-ROW_POS = 1.
WA_FLDCAT-COL_POS = &2.
WA_FLDCAT-SELTEXT_L = &3.
WA_FLDCAT-SELTEXT_M = &4.
WA_FLDCAT-SELTEXT_S = &5.
WA_FLDCAT-HOTSPOT = &6.
WA_FLDCAT-KEY = &7.
WA_FLDCAT-DO_SUM = &8.
WA_FLDCAT-TABNAME = &9.

APPEND WA_FLDCAT TO IT_FLDCAT.

END-OF-DEFINITION.

FLDCATB 'VBELN' '1' 'SORDER NUM' 'SO NUM' 'SNUM' 'X' 'X' ' ' 'IT_VBAK'. "calling the macro

FLDCATB 'ERDAT' '2' 'SORDER DATE' 'SO DATE' 'SDAT' ' ' ' ' ' ' 'IT_VBAK'.

FLDCATB 'ERNAM' '3' 'SORDER NAME' 'SO NAME' 'SNAM' ' ' ' ' ' ' 'IT_VBAK'.

FLDCATB 'NETWR' '4' 'NET PRICE' 'NET PRICE' 'NET PRICE' ' ' ' ' 'X' 'IT_VBAK'.

FLDCATB 'VKORG' '5' 'SALES ORG' 'S ORG' 'SORG' ' ' ' ' ' ' 'IT_VBAK'.

ENDFORM. " fldcat_populate

*&---------------------------------------------------------------------*
*& Form event_on_alvlist
*&---------------------------------------------------------------------*
* Populating the events on basic list
*----------------------------------------------------------------------*
FORM EVENT_ON_ALVLIST . " Populating the events table for basic list

WA_EVENTS-NAME = 'TOP_OF_PAGE'.
WA_EVENTS-FORM = 'SUB_TOP'.
APPEND WA_EVENTS TO IT_EVENTS.

WA_EVENTS-NAME = 'USER_COMMAND'.
WA_EVENTS-FORM = 'SUB_USERCOMAND'.
APPEND WA_EVENTS TO IT_EVENTS.

ENDFORM. " event_on_alvlist

*&---------------------------------------------------------------------*
*& Form disp_alv
*&---------------------------------------------------------------------*
* Displaying the basic alv list
*----------------------------------------------------------------------*
FORM DISP_ALV .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' " Displaying the basic list
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = SY-CPROG
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
I_GRID_TITLE = C_BTIT
* I_GRID_SETTINGS =
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = IT_FLDCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
IT_SORT = IT_SORT
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = 'A'
IS_VARIANT = P_LAYVAR1
IT_EVENTS = IT_EVENTS
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = IT_VBAK
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " disp_alv

*&---------------------------------------------------------------------*
*& Form SUB_TOP
*&---------------------------------------------------------------------*
* Dynamic perform for basic list Top Of Page
*----------------------------------------------------------------------*

FORM SUB_TOP. "#EC CALLED

DATA: LT_COMM TYPE SLIS_T_LISTHEADER, " Top of page for basic list
LX_COMM TYPE SLIS_LISTHEADER.
LX_COMM-TYP = 'H'. " Heading type
LX_COMM-INFO = 'SALES ORDER HEADER INFORMATION'.
APPEND LX_COMM TO LT_COMM.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = LT_COMM
I_LOGO = 'SAS_LOGO'.
ENDFORM. "SUB_TOP

*&---------------------------------------------------------------------*
*& Form SUB_USERCOMAND
*&---------------------------------------------------------------------*
* Dynamic perform for USER COMMAND of basic list
*----------------------------------------------------------------------*

FORM SUB_USERCOMAND USING RUCOMM TYPE SY-UCOMM
LX_SEL TYPE SLIS_SELFIELD. "#EC CALLED
CASE RUCOMM.
WHEN '&IC1' . " Checking for user action
IF LX_SEL-VALUE IS INITIAL.
MESSAGE I004 WITH 'click on the field values only'(003).
ELSE.

READ TABLE IT_VBAK INTO WA_VBAK INDEX LX_SEL-TABINDEX . " Getting teh fieldname and values on the clicked line.
IF SY-SUBRC <> 0.
MESSAGE I004 WITH 'click on the field values only'(003).
ENDIF.
CASE LX_SEL-FIELDNAME.
WHEN 'VBELN'.
PERFORM GET_VBAP_DATA. " Getting data from vbap into it_vbap
WHEN OTHERS.
MESSAGE I004 WITH 'click only on so number'(004).
EXIT.
ENDCASE.

SORT IT_VBAP BY VBELN POSNR. " Sorting table for read statement usingbinary search
PERFORM GET_MAKT_DATA. " Getting data from mara into it_mara
PERFORM POPULATE_ITEM_TABLE. " Populating the out put table
SORT IT_ITEM BY VBELN POSNR.

REFRESH: IT_FLDCAT1, " Clearing itab for every new secondary list.
IT_EVENTS1.
PERFORM FLDCAT_POPULATE1. " Populating the fieldcat itab for secondary list
PERFORM SORT_FOR_SUBTOT_SEC. " Sorting for finding subtotals
PERFORM LAYOUT_SEC_POPULATE. " Populating the layout for secondary list
PERFORM EVENT_ON_ALVLIST_SEC. " Populating the events itab for secondary list
PERFORM DISP_ALV_SEC. " Displaying the secondary list
ENDIF.
ENDCASE.

ENDFORM. "SUB_USERCOMAND

*&---------------------------------------------------------------------*
*& Form fldcat_populate1
*&---------------------------------------------------------------------*
* Populating the fieldcatalog for secondary list
*----------------------------------------------------------------------*
FORM FLDCAT_POPULATE1 .

DEFINE FLDCATB1. " Macro to populate fieldcat list.
WA_FLDCAT1-FIELDNAME = &1.
WA_FLDCAT1-COL_POS = &2.
WA_FLDCAT1-SELTEXT_L = &3.
WA_FLDCAT1-SELTEXT_M = &4.
WA_FLDCAT1-SELTEXT_S = &5.
WA_FLDCAT1-NO_OUT = &6.
WA_FLDCAT1-DO_SUM = &7.

APPEND WA_FLDCAT1 TO IT_FLDCAT1.

END-OF-DEFINITION.

FLDCATB1 'VBELN' '1' 'SORDER NUM' 'SO NUM' 'SNUM' ' ' ' '.
FLDCATB1 'POSNR' '2' 'SORDER ITEM' 'SO ITEM' 'SITM' ' ' ' '.
FLDCATB1 'MATNR' '3' 'MATERIAL NO' 'MAT NO' 'MTNO' ' ' ' '.
FLDCATB1 'NETWR' '4' 'NET PRICE' 'NET PRICE' 'NET PRICE' ' ' 'X'.
FLDCATB1 'MAKTX' '5' 'MATERIAL DESCRIPTION' 'MAT DESC' 'M DESC' ' ' ' '.
FLDCATB1 'MATKL' '6' 'MATERIAL GROUP' 'MAT GROUP' 'M GRP' ' ' ' '.
FLDCATB1 'POSAR' '7' 'ITEM TYPE' 'ITEM TYP' 'I TYP' ' ' ' '.

ENDFORM. "fldcat_populate1

*&---------------------------------------------------------------------*
*& Form event_on_alvlist_sec
*&---------------------------------------------------------------------*
* Populating the events for secondary alv list
*----------------------------------------------------------------------*
FORM EVENT_ON_ALVLIST_SEC .

WA_EVENTS1-NAME = 'TOP_OF_PAGE'. " Populating the list of events for secondary list
WA_EVENTS1-FORM = 'SUB_TOP_SECONDARY'.
APPEND WA_EVENTS1 TO IT_EVENTS1.

WA_EVENTS1-NAME = 'USER_COMMAND'.
WA_EVENTS1-FORM = 'SUB_USRCMD_SEC'.
APPEND WA_EVENTS1 TO IT_EVENTS1.

ENDFORM. " event_on_alvlist_sec

*&---------------------------------------------------------------------*
*& Form SUB_TOP_SECONDARY
*&---------------------------------------------------------------------*
* Dynamic perform for secondary list Top Of Page
*----------------------------------------------------------------------*
FORM SUB_TOP_SECONDARY. "#EC CALLED

DATA: LT_COMM TYPE SLIS_T_LISTHEADER, " Top of page for secondary list
LX_COMM TYPE SLIS_LISTHEADER.
LX_COMM-TYP = 'H'.
LX_COMM-INFO = C_TOP.
APPEND LX_COMM TO LT_COMM.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = LT_COMM
I_LOGO = 'SAS_LOGO'
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.
ENDFORM. "SUB_TOP_SECONDARY

*&---------------------------------------------------------------------*
*& Form disp_alv_sec
*&---------------------------------------------------------------------*
* displaying secondary alv list
*----------------------------------------------------------------------*
FORM DISP_ALV_SEC .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' " Displaying the secondary list
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = SY-CPROG
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
I_GRID_TITLE = C_STIT
* I_GRID_SETTINGS =
IS_LAYOUT = WA_LAYOUT1
IT_FIELDCAT = IT_FLDCAT1
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
IT_SORT = IT_SORT1
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
IT_EVENTS = IT_EVENTS1
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = IT_ITEM
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " disp_alv_sec

*&---------------------------------------------------------------------*
*& Form SUB_USERCOMAND
*&---------------------------------------------------------------------*
* Dynamic perform for user command of secondary list
*----------------------------------------------------------------------*
FORM SUB_USRCMD_SEC USING RUCOMM TYPE SY-UCOMM
LX_SEL TYPE SLIS_SELFIELD. "#EC CALLED
CASE RUCOMM.
WHEN '&IC1'.
IF LX_SEL-VALUE IS INITIAL.
MESSAGE I004 WITH 'click on the field values only'(003).
ELSE.
READ TABLE IT_ITEM INTO WA_ITEM INDEX LX_SEL-TABINDEX.

CASE LX_SEL-FIELDNAME.
WHEN 'VBELN'.
SET PARAMETER ID C_AUN FIELD LX_SEL-VALUE.
CALL TRANSACTION C_VA03 AND SKIP FIRST SCREEN. " Call the VA03 transaction
CLEAR LX_SEL-VALUE. " Clear Hide Work Area

WHEN 'MATNR'.
SET PARAMETER ID C_MAT FIELD LX_SEL-VALUE.
CALL TRANSACTION C_MM03 AND SKIP FIRST SCREEN. " Call the MM03 transaction
CLEAR LX_SEL-VALUE. " Clear Hide Work Area

WHEN 'MAKTX'.
CALL FUNCTION 'CALL_BROWSER' " Calling the browser
EXPORTING
URL = C_URL
EXCEPTIONS
FRONTEND_NOT_SUPPORTED = 1
FRONTEND_ERROR = 2
PROG_NOT_FOUND = 3
NO_BATCH = 4
UNSPECIFIED_ERROR = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
MESSAGE I004 WITH 'browser cannot be called'(006).
ENDIF.
WHEN OTHERS.
MESSAGE I004 WITH 'choose correct field'(005).
EXIT.
ENDCASE.
ENDIF.
ENDCASE.
ENDFORM. "SUB_USRCMD_SEC


*&---------------------------------------------------------------------*
*& Form layout_populate
*&---------------------------------------------------------------------*
* populating the layout for basic alv list
*----------------------------------------------------------------------*
FORM LAYOUT_POPULATE .

WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. " Getting the optimum length
WA_LAYOUT-WINDOW_TITLEBAR = C_TITL.
WA_LAYOUT-ZEBRA = 'X'. " Getting alternate colors.

ENDFORM. " layout_populate


*&---------------------------------------------------------------------*
*& Form layout_sec_populate
*&---------------------------------------------------------------------*
* populating the layout for secondary alv list
*----------------------------------------------------------------------*
FORM LAYOUT_SEC_POPULATE .

WA_LAYOUT1-COLWIDTH_OPTIMIZE = 'X'. "getting the optimum length
WA_LAYOUT1-ZEBRA = 'X'. "getting alternate colors.

ENDFORM. " layout_sec_populate

*&---------------------------------------------------------------------*
*& Form sort_for_subtot
*&---------------------------------------------------------------------*
* defining the sort criterion for basic list
*----------------------------------------------------------------------*

FORM SORT_FOR_SUBTOT .

WA_SORT-FIELDNAME = 'VBELN'.
WA_SORT-SPOS = 1.
WA_SORT-UP = 'X'.
WA_SORT-SUBTOT = 'X'.
APPEND WA_SORT TO IT_SORT.

ENDFORM. " sort_for_subtot

*&---------------------------------------------------------------------*
*& Form sort_for_subtot_sec
*&---------------------------------------------------------------------*
* defining the sort criterion for secondary list
*----------------------------------------------------------------------*
FORM SORT_FOR_SUBTOT_SEC .

WA_SORT1-FIELDNAME = 'POSNR'.
WA_SORT1-SPOS = 2.
WA_SORT1-UP = 'X'.
WA_SORT1-SUBTOT = 'X'.
APPEND WA_SORT1 TO IT_SORT1.

ENDFORM. " sort_for_subtot_sec

*&---------------------------------------------------------------------*
*& Form block_init
*&---------------------------------------------------------------------*
* Initializing the block
*----------------------------------------------------------------------*
FORM BLOCK_INIT .
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* IT_EXCLUDING =
.
ENDFORM. " block_init

*&---------------------------------------------------------------------*
*& Form block_app1
*&---------------------------------------------------------------------*
* Adding the first list to block
*----------------------------------------------------------------------*
FORM BLOCK_APP1 .
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = IT_FLDCAT
I_TABNAME = 'IT_VBAK'
IT_EVENTS = IT_EVENTS
IT_SORT = IT_SORT
* I_TEXT = ' '
TABLES
T_OUTTAB = IT_VBAK[]
EXCEPTIONS
PROGRAM_ERROR = 1
MAXIMUM_OF_APPENDS_REACHED = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " block_app1

*&---------------------------------------------------------------------*
*& Form block_disp
*&---------------------------------------------------------------------*
* displaying the block
*----------------------------------------------------------------------*
FORM BLOCK_DISP .

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
* EXPORTING
* I_INTERFACE_CHECK = ' '
* IS_PRINT =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " block_disp

*&---------------------------------------------------------------------*
*& Form block_app2
*&---------------------------------------------------------------------*
* appending the second list
*----------------------------------------------------------------------*
FORM BLOCK_APP2 .

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = WA_LAYOUT1
IT_FIELDCAT = IT_FLDCAT1
I_TABNAME = 'IT_ITEM'
IT_EVENTS = IT_EVENTS1
IT_SORT = IT_SORT1
* I_TEXT = ' '
TABLES
T_OUTTAB = IT_ITEM[]
EXCEPTIONS
PROGRAM_ERROR = 1
MAXIMUM_OF_APPENDS_REACHED = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " block_app2

*&---------------------------------------------------------------------*
*& Form get_sec
*&---------------------------------------------------------------------*
* Getting values for secondary list.
*----------------------------------------------------------------------*
FORM GET_SEC .
PERFORM GET_VBAP_DATA. " Getting data from vbap into it_vbap
SORT IT_VBAP BY VBELN POSNR. " Sorting table for read statement usingbinary search
PERFORM GET_MAKT_DATA. " Getting data from mara into it_mara
PERFORM POPULATE_ITEM_TABLE. " Populating the out put table
SORT IT_ITEM BY VBELN POSNR.
REFRESH: IT_FLDCAT1, " Clearing itab for every new secondary list.
IT_EVENTS1.
PERFORM FLDCAT_POPULATE1. " Populating the fieldcat itab for secondary list
IF R_A3 = 'X'.
PERFORM FLDCAT_HIER. " Populating the fieldcat for hierarchial list.
ENDIF.
PERFORM SORT_FOR_SUBTOT_SEC. " Sorting for finding subtotals
PERFORM LAYOUT_SEC_POPULATE. " Populating the layout for secondary list
PERFORM EVENT_ON_ALVLIST_SEC. " Populating the events itab for secondary list
ENDFORM. " get_sec

*&---------------------------------------------------------------------*
*& Form hierch
*&---------------------------------------------------------------------*
* hierarchial alv list display
*----------------------------------------------------------------------*
FORM HIERCHSEQ .
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
I_CALLBACK_PROGRAM = SY-CPROG
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = IT_FLDCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
I_TABNAME_HEADER = 'IT_VBAK'
I_TABNAME_ITEM = 'IT_ITEM'
* I_STRUCTURE_NAME_HEADER =
* I_STRUCTURE_NAME_ITEM =
IS_KEYINFO = WA_KEYINFO
* IS_PRINT =
* IS_REPREP_ID =
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
* IR_SALV_HIERSEQ_ADAPTER =
* IT_EXCEPT_QINFO =
* I_SUPPRESS_EMPTY_DATA = ABAP_FALSE
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB_HEADER = IT_VBAK[]
T_OUTTAB_ITEM = IT_ITEM[]
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " hierch

*&---------------------------------------------------------------------*
*& Form give_keyinfo
*&---------------------------------------------------------------------*
* give the key info values
*----------------------------------------------------------------------*
FORM GIVE_KEYINFO .
WA_KEYINFO-HEADER01 = 'VBELN'.
WA_KEYINFO-ITEM01 = 'VBELN'.
ENDFORM. " give_keyinfo

*&---------------------------------------------------------------------*
*& Form fldcat_hier
*&---------------------------------------------------------------------*
* populating fieldcat for hierarchial list.
*----------------------------------------------------------------------*
FORM FLDCAT_HIER.
CLEAR WA_FLDCAT.
DEFINE FLDCATB1. " Macro to populate fieldcat list.
WA_FLDCAT-FIELDNAME = &1.
WA_FLDCAT-COL_POS = &2.
WA_FLDCAT-SELTEXT_L = &3.
WA_FLDCAT-SELTEXT_M = &4.
WA_FLDCAT-SELTEXT_S = &5.
WA_FLDCAT-NO_OUT = &6.
WA_FLDCAT-DO_SUM = &7.
WA_FLDCAT-ROW_POS = &8.
WA_FLDCAT-TABNAME = &9.


APPEND WA_FLDCAT TO IT_FLDCAT.

END-OF-DEFINITION.

FLDCATB1 'VBELN' '1' 'SORDER NUM' 'SO NUM' 'SNUM' ' ' ' ' '1' 'IT_ITEM'.
FLDCATB1 'POSNR' '2' 'SORDER ITEM' 'SO ITEM' 'SITM' ' ' ' ' '1' 'IT_ITEM'.
FLDCATB1 'MATNR' '3' 'MATERIAL NO' 'MAT NO' 'MTNO' ' ' ' ' '1' 'IT_ITEM'.
FLDCATB1 'NETWR' '4' 'NET PRICE' 'NET PRICE' 'NET PRICE' ' ' 'X' '1' 'IT_ITEM'.
FLDCATB1 'MAKTX' '5' 'MATERIAL DESCRIPTION' 'MAT DESC' 'M DESC' ' ' ' ' '1' 'IT_ITEM'.
FLDCATB1 'MATKL' '6' 'MATERIAL GROUP' 'MAT GROUP' 'M GRP' 'X' ' ' '1' 'IT_ITEM'.
FLDCATB1 'POSAR' '7' 'ITEM TYPE' 'ITEM TYP' 'I TYP' 'X' ' ' '1' 'IT_ITEM'.

ENDFORM. " fldcat_hier