Showing posts with label ABAP Development Faqs. Show all posts
Showing posts with label ABAP Development Faqs. Show all posts

Thursday, December 20, 2007

How to do the EXCISE ANNEXURE10 report?

REPORT YMS_EXIN_DOC_ALV_HEADER_ANNEXURE10 NO STANDARD PAGE HEADING LINE-SIZE 350 MESSAGE-ID E4.

TABLES : J_1IEXCHDR, " header table
J_1IEXCDTL, " item table
J_1IPART2, " Excise Part II details
LFA1, " vendor master table
J_1IMOVEND, " vendor excise details table
MSEG, " Document Segment: Material
MKPF, " Header: Material Document
DD07T, " domain text table
T001W. " Plant and Branch Details

DATA : BEGIN OF IT_CHDR OCCURS 100,
DOCNO LIKE J_1IEXCHDR-DOCNO,
DOCYR LIKE J_1IEXCHDR-DOCYR,
EXNUM LIKE J_1IEXCHDR-EXNUM,
EXDAT LIKE J_1IEXCHDR-EXDAT,
WERKS LIKE J_1IEXCHDR-WERKS,
EXBED LIKE J_1IEXCHDR-EXBED,
EXSED LIKE J_1IEXCHDR-EXSED,
EXCCD LIKE J_1IEXCHDR-EXCCD,
ECS LIKE J_1IEXCHDR-ECS,
END OF IT_CHDR.

DATA : BEGIN OF IT_CHDR_H OCCURS 100,
DOCNO LIKE J_1IEXCHDR-DOCNO,
DOCYR LIKE J_1IEXCHDR-DOCYR,
EXNUM LIKE J_1IEXCHDR-EXNUM,
EXDAT LIKE J_1IEXCHDR-EXDAT,
LIFNR LIKE J_1IEXCHDR-LIFNR,
WERKS LIKE J_1IEXCHDR-WERKS,
EXBED LIKE J_1IEXCHDR-EXBED,
EXSED LIKE J_1IEXCHDR-EXSED,
EXCCD LIKE J_1IEXCHDR-EXCCD,
ECS LIKE J_1IEXCHDR-ECS,
TRNTYP LIKE J_1IEXCHDR-TRNTYP,
END OF IT_CHDR_H.

DATA IT_CHDR_H2 LIKE IT_CHDR_H OCCURS 0 WITH HEADER LINE.

DATA : BEGIN OF IT_CDTL OCCURS 100,
DOCNO LIKE J_1IEXCDTL-DOCNO,
DOCYR LIKE J_1IEXCDTL-DOCYR,
EXNUM LIKE J_1IEXCDTL-EXNUM,
EXDAT LIKE J_1IEXCDTL-EXDAT,
LIFNR LIKE J_1IEXCDTL-LIFNR,
MATNR LIKE J_1IEXCDTL-MATNR,
MAKTX LIKE J_1IEXCDTL-MAKTX,
CHAPID LIKE J_1IEXCDTL-CHAPID,
EXBAS LIKE J_1IEXCDTL-EXBAS,
EXBED LIKE J_1IEXCDTL-EXBED,
EXSED LIKE J_1IEXCDTL-EXSED,
ECS LIKE J_1IEXCDTL-ECS,
MENGE LIKE J_1IEXCDTL-MENGE,
MEINS LIKE J_1IEXCDTL-MEINS,
RDOC2 LIKE J_1IEXCDTL-RDOC2,
RDOC3 LIKE J_1IEXCDTL-RDOC3,
TRNTYP LIKE J_1IEXCDTL-TRNTYP,
END OF IT_CDTL.

DATA TEXT(10).

DATA : BEGIN OF IT_OUT OCCURS 0,
SERIALNO LIKE J_1IPART2-SERIALNO,
TEXT1 LIKE TEXT,
EXNUM LIKE J_1IEXCDTL-EXNUM,
EXDAT LIKE J_1IEXCDTL-EXDAT,
NAME LIKE LFA1-NAME1,
DDTEXT LIKE DD07T-DDTEXT,
EXCCD LIKE J_1IEXCHDR-EXCCD,
BUDAT LIKE MKPF-BUDAT,
EXBAS(13) TYPE C ,
EXBED LIKE IT_CDTL-EXBED,
EXSED LIKE J_1IEXCDTL-EXSED,
ECS LIKE IT_CDTL-ECS,
MATNR LIKE IT_CDTL-MATNR,
MAKTX LIKE IT_CDTL-MAKTX,
CHAPID LIKE IT_CDTL-CHAPID,
MENGE LIKE IT_CDTL-MENGE,
MEINS LIKE IT_CDTL-MEINS,
DEL_IND(3) TYPE C,
TRNTYP(4) TYPE C,
END OF IT_OUT.

DATA IT_PART2 LIKE J_1IPART2 OCCURS 0 WITH HEADER LINE.
DATA S_NO(4) .
DATA DB_CNT LIKE SY-TABIX.
DATA EBELN_T LIKE MSEG-EBELN .

TYPE-POOLS : SLIS.

DATA : AFIELD TYPE SLIS_FIELDCAT_ALV.

DATA : LIST_HEADER TYPE SLIS_T_LISTHEADER,
FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
LS_FTCAT TYPE LVC_S_FCAT,
SORTCAT TYPE SLIS_T_SORTINFO_ALV,
SORTCAT_LN LIKE LINE OF SORTCAT,
G_REPID LIKE SY-REPID,
G_BACK_GROUND(70), "like bapibds01-objkey,
GS_VARIANT LIKE DISVARIANT,
G_SAVE ,
GT_EVENTS TYPE SLIS_T_EVENT,
ALV_EVENT TYPE SLIS_ALV_EVENT,
EVENTCAT TYPE SLIS_T_EVENT,
EVENTCAT_LN LIKE LINE OF EVENTCAT,
LAYOUT_IN TYPE SLIS_LAYOUT_ALV,
LAYOUT_IN1 TYPE SLIS_LAYOUT_ALV.

CONSTANTS : GC_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE',
GC_FORMNAME_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND',
GC_FORMNAME_BEFORE_OUTPUT TYPE SLIS_FORMNAME VALUE 'BEFORE_OUTPUT'.

DATA EX_NO LIKE IT_CHDR-EXNUM VALUE 0.
DATA REGTYP_1 LIKE J_1IPART2-REGTYP.

SELECTION-SCREEN BEGIN OF BLOCK B WITH FRAME TITLE R.
PARAMETERS WERKS TYPE J_1IEXCHDR-WERKS OBLIGATORY DEFAULT '1100'.
SELECT-OPTIONS : BUDAT FOR J_1IEXCHDR-EXDAT.
PARAMETERS : R1 RADIOBUTTON GROUP GRP DEFAULT 'X',
R2 RADIOBUTTON GROUP GRP.
SELECTION-SCREEN END OF BLOCK B.

INITIALIZATION.
R = 'Excise Report'.
G_REPID = SY-REPID.
G_SAVE = 'A'.
PERFORM ALV_EVENT_INIT.

AT SELECTION-SCREEN.
REFRESH LIST_HEADER.
PERFORM TOP_OF_PAGE_LIST_HEADER USING LIST_HEADER.

START-OF-SELECTION.

G_REPID = SY-REPID.
G_BACK_GROUND = ' ' .

IF R1 = 'X'.
CLEAR R2. CLEAR : REGTYP_1.
REGTYP_1 = 'A'.
ELSEIF R2 = 'X'.
CLEAR R1.CLEAR : REGTYP_1.
REGTYP_1 = 'C'.
ENDIF.

SELECT * FROM J_1IPART2
INTO CORRESPONDING FIELDS OF TABLE IT_PART2
WHERE REGTYP = REGTYP_1 AND
( TRNTYP = 'GRPO' OR
TRNTYP = 'MRDY' OR
TRNTYP = 'DIEX' ) AND
BUDAT IN BUDAT.
LOOP AT IT_PART2.

SELECT SINGLE * FROM J_1IEXCHDR
INTO CORRESPONDING FIELDS OF IT_CHDR
WHERE ( TRNTYP = 'GRPO' OR
TRNTYP = 'MRDY' OR
TRNTYP = 'DIEX' ) AND
DOCYR = IT_PART2-DOCYR AND
DOCNO = IT_PART2-DOCNO AND
WERKS = WERKS AND
BUDAT IN BUDAT.
IF SY-SUBRC = 0.
APPEND IT_CHDR.
ELSE.
CONTINUE.
ENDIF.

ENDLOOP.

LOOP AT IT_PART2.
SELECT SINGLE * FROM J_1IEXCHDR
INTO CORRESPONDING FIELDS OF IT_CHDR_H
WHERE ( TRNTYP = 'GRPO' OR
TRNTYP = 'MRDY' OR
TRNTYP = 'DIEX' ) AND
DOCYR = IT_PART2-DOCYR AND
DOCNO = IT_PART2-DOCNO AND
WERKS = WERKS AND
BUDAT IN BUDAT.
IF SY-SUBRC = 0.
APPEND IT_CHDR_H.
ELSE.
CONTINUE.
ENDIF.
ENDLOOP.

LOOP AT IT_CHDR.

SELECT * FROM J_1IEXCDTL
INTO CORRESPONDING FIELDS OF IT_CDTL
WHERE ( TRNTYP = 'GRPO' OR
TRNTYP = 'MRDY' OR
TRNTYP = 'DIEX' ) AND
DOCNO = IT_CHDR-DOCNO AND
DOCYR = IT_CHDR-DOCYR AND
EXNUM = IT_CHDR-EXNUM AND
EXDAT = IT_CHDR-EXDAT AND
WERKS = IT_CHDR-WERKS.
IF SY-SUBRC = 0.
APPEND IT_CDTL.
ELSE.
CONTINUE.
ENDIF.
ENDSELECT.
ENDLOOP.

LOOP AT IT_CDTL.
CLEAR TEXT.
DB_CNT = DB_CNT + 1.
READ TABLE IT_CHDR WITH KEY EXNUM = IT_CDTL-EXNUM.
READ TABLE IT_PART2 WITH KEY DOCNO = IT_CDTL-DOCNO.

IT_OUT-SERIALNO = IT_PART2-SERIALNO.

SELECT SINGLE NAME1 FROM LFA1
INTO IT_OUT-NAME
WHERE LIFNR = IT_CDTL-LIFNR.

SELECT SINGLE * FROM LFA1
WHERE LIFNR = IT_CDTL-LIFNR.

IF LFA1-LAND1 EQ 'IN'.
TEXT = 'INVOICE'.
IT_OUT-TEXT1 = TEXT.
ELSE.
TEXT = 'BOE'.
IT_OUT-TEXT1 = TEXT.
ENDIF.

SELECT SINGLE * FROM J_1IMOVEND
WHERE LIFNR = IT_CDTL-LIFNR.

SELECT SINGLE * FROM DD07T
WHERE DOMNAME = 'J_1IVTYP' AND
DDLANGUAGE = 'EN' AND
DOMVALUE_L = J_1IMOVEND-J_1IVTYP.

IF DD07T-DDTEXT = 'First Stage Dealer of indigenous excisable goods' OR
DD07T-DDTEXT = 'Second Stage Dealer of indigenous excisable goods'.
DD07T-DDTEXT = 'Dealer'.
ENDIF.

IT_OUT-DDTEXT = DD07T-DDTEXT.

CLEAR EBELN_T.
SELECT SINGLE MBLNR FROM MSEG
INTO EBELN_T
WHERE MBLNR = IT_CDTL-RDOC2 .

SELECT * FROM MSEG
WHERE SMBLN = EBELN_T AND
BWART = '106'.

ENDSELECT.

IF SY-SUBRC = 0.
IT_OUT-DEL_IND = 'X'.
ELSE.
IT_OUT-DEL_IND = ' '.
ENDIF.

SELECT SINGLE BUDAT FROM MKPF
INTO IT_OUT-BUDAT
WHERE MBLNR = EBELN_T .

IT_OUT-EXNUM = IT_CDTL-EXNUM.
IT_OUT-EXDAT = IT_CDTL-EXDAT.
IT_OUT-EXCCD = IT_CHDR-EXCCD.

IF IT_CDTL-TRNTYP = 'DIEX'.
IT_OUT-TRNTYP = 'JV+'.
IT_OUT-EXBAS = IT_CDTL-RDOC3.
ELSEIF IT_CDTL-TRNTYP = 'MRDY'.
IT_OUT-TRNTYP = 'JV-'.
IT_OUT-EXBAS = IT_CDTL-RDOC3.

IT_OUT-EXBAS = ( IT_CDTL-EXBAS * -1 ).
IT_OUT-EXBED = ( IT_CDTL-EXBED * -1 ).
IT_OUT-EXSED = ( IT_CDTL-EXSED * -1 ).
IT_OUT-ECS = ( IT_CDTL-ECS * -1 ).

ELSEIF IT_CDTL-TRNTYP = 'GRPO'.
IT_OUT-TRNTYP = 'MIGO'.
IT_OUT-EXBAS = IT_CDTL-EXBAS.
IT_OUT-EXBED = IT_CDTL-EXBED.
IT_OUT-EXSED = IT_CDTL-EXSED.
IT_OUT-ECS = IT_CDTL-ECS.
IT_OUT-MATNR = IT_CDTL-MATNR.
IT_OUT-MAKTX = IT_CDTL-MAKTX.
IT_OUT-CHAPID = IT_CDTL-CHAPID.
IT_OUT-MENGE = IT_CDTL-MENGE.
IT_OUT-MEINS = IT_CDTL-MEINS.
ENDIF.

IF REGTYP_1 = 'C'.
IT_OUT-EXBED = ( IT_OUT-EXBED / 2 ).
IT_OUT-EXSED = ( IT_OUT-EXSED / 2 ).
IT_OUT-ECS = ( IT_OUT-ECS / 2 ).
ENDIF.
APPEND IT_OUT.
CLEAR IT_OUT.
READ TABLE IT_CHDR_H WITH KEY DOCNO = IT_CHDR-DOCNO.
DELETE IT_CHDR_H WHERE DOCNO EQ IT_CDTL-DOCNO.
LOOP AT IT_CHDR_H.
ENDLOOP.
ENDLOOP.

LOOP AT IT_CHDR_H.

DB_CNT = DB_CNT + 1.
READ TABLE IT_PART2 WITH KEY DOCNO = IT_CHDR_H-DOCNO.

SELECT SINGLE NAME1 FROM LFA1 INTO IT_OUT-NAME
WHERE LIFNR = IT_CHDR_H-LIFNR.

SELECT SINGLE * FROM LFA1 WHERE LIFNR = IT_CHDR_H-LIFNR.

IT_OUT-SERIALNO = IT_PART2-SERIALNO.
IT_OUT-EXNUM = IT_CHDR_H-EXNUM.
IT_OUT-EXDAT = IT_CHDR_H-EXDAT.

IF IT_CHDR_H-TRNTYP = 'DIEX'.
IT_OUT-TRNTYP = 'JV+'.
IT_OUT-EXBED = IT_CHDR_H-EXBED.
IT_OUT-EXSED = IT_CHDR_H-EXSED.
IT_OUT-ECS = IT_CHDR_H-ECS.

ELSEIF IT_CHDR_H-TRNTYP = 'MRDY'.
IT_OUT-TRNTYP = 'JV-'.
IT_OUT-EXBED = ( IT_CHDR_H-EXBED * -1 ).
IT_OUT-EXSED = ( IT_CHDR_H-EXSED * -1 ).
IT_OUT-ECS = ( IT_CHDR_H-ECS * -1 ).

ELSEIF IT_CHDR_H-TRNTYP = 'GRPO'.
IT_OUT-TRNTYP = 'MIGO'.
IT_OUT-EXBED = IT_CHDR_H-EXBED.
IT_OUT-EXSED = IT_CHDR_H-EXSED.
IT_OUT-ECS = IT_CHDR_H-ECS.

ENDIF.

APPEND IT_OUT.
CLEAR IT_OUT.
ENDLOOP.

IF REGTYP_1 = 'A'.
SET TITLEBAR 'BALAJI' WITH DB_CNT.
ELSEIF REGTYP_1 = 'C'.
SET TITLEBAR 'BALAJI1' WITH DB_CNT.
ENDIF.

AFIELD-COL_POS = 1.
AFIELD-FIELDNAME = 'SERIALNO'.
AFIELD-SELTEXT_L = 'INPUTS'.
AFIELD-JUST = 'L'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 2.
AFIELD-FIELDNAME = 'TEXT1'.
AFIELD-SELTEXT_L = 'TYPE OF DOC'.
AFIELD-JUST = 'L'.
AFIELD-DECIMALS_OUT = '0'.
AFIELD-NO_ZERO = 'X'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 3.
AFIELD-FIELDNAME = 'EXNUM'.
AFIELD-SELTEXT_L = 'DOC.NO'.
AFIELD-JUST = 'L'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 4.
AFIELD-FIELDNAME = 'EXDAT'.
AFIELD-SELTEXT_L = 'DOC.DATE'.
AFIELD-JUST = 'C'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 5.
AFIELD-FIELDNAME = 'NAME'.
AFIELD-SELTEXT_L = 'NAME OF THE SUPPLIER'.
AFIELD-NO_ZERO = 'X'.
AFIELD-JUST = 'L'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 6.
AFIELD-FIELDNAME = 'DDTEXT'.
AFIELD-SELTEXT_L = 'TYPE-OF-SUPPLIER'.
AFIELD-JUST = 'L'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 7.
AFIELD-FIELDNAME = 'EXCCD'.
AFIELD-SELTEXT_L = 'ECC OF THE SUPPLIER'.
AFIELD-NO_ZERO = 'X'.
AFIELD-JUST = 'L'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 8.
AFIELD-FIELDNAME = 'BUDAT'.
AFIELD-SELTEXT_L = 'INPUT RECV DATE'.
AFIELD-JUST = 'C'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 9.
AFIELD-FIELDNAME = 'EXBAS'.
AFIELD-SELTEXT_L = 'ASSESSABLE-VALUE'.
AFIELD-DO_SUM = 'X'.
AFIELD-JUST = 'R'.
AFIELD-DECIMALS_OUT = '2'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 10.
AFIELD-FIELDNAME = 'EXBED'.
AFIELD-SELTEXT_L = 'DET OF CREDIT TAKEN CENVAT'.
AFIELD-JUST = 'R'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 11.
AFIELD-FIELDNAME = 'EXSED'.
AFIELD-SELTEXT_L = 'DET OF CREDIT TAKEN SED'.
AFIELD-JUST = 'R'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 12.
AFIELD-FIELDNAME = 'ECS'.
AFIELD-SELTEXT_L = 'DET OF CREDIT TAKEN E-CESS'.
AFIELD-JUST = 'R'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 13.
AFIELD-FIELDNAME = 'MATNR'.
AFIELD-SELTEXT_L = 'MATERIAL-CODE'.
AFIELD-JUST = 'L'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 14.
AFIELD-FIELDNAME = 'MAKTX'.
AFIELD-SELTEXT_L = 'DESCRIPTION'.
AFIELD-JUST = 'L'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 15.
AFIELD-FIELDNAME = 'CHAPID'.
AFIELD-SELTEXT_L = 'TARIFF-ID'.
AFIELD-JUST = 'L'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 16.
AFIELD-FIELDNAME = 'MENGE'.
AFIELD-SELTEXT_L = 'QUANTITY'.
AFIELD-JUST = 'R'.
AFIELD-DO_SUM = ' '.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 17.
AFIELD-FIELDNAME = 'MEINS'.
AFIELD-SELTEXT_L = 'UOM'.
AFIELD-JUST = 'C'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 18.
AFIELD-FIELDNAME = 'DEL_IND'.
AFIELD-SELTEXT_L = 'Deleted'.
AFIELD-JUST = 'C'.
APPEND AFIELD TO FIELDCAT.

AFIELD-COL_POS = 19.
AFIELD-FIELDNAME = 'TRNTYP'.
AFIELD-SELTEXT_L = 'Transaction Type'.
AFIELD-JUST = 'L'.
APPEND AFIELD TO FIELDCAT.

LAYOUT_IN-COLWIDTH_OPTIMIZE = 'X'.
LAYOUT_IN-ZEBRA = 'X'.
LAYOUT_IN-GET_SELINFOS = 'X'.
LAYOUT_IN-CONFIRMATION_PROMPT = 'X'.
LAYOUT_IN-DETAIL_POPUP = 'X' .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_SAVE = G_SAVE
IS_VARIANT = GS_VARIANT
IT_FIELDCAT = FIELDCAT
IT_SORT = SORTCAT
IS_LAYOUT = LAYOUT_IN
IT_EVENTS = EVENTCAT
TABLES
T_OUTTAB = IT_OUT.

*&--------------------------------------------------------------------*
*& Form TOP_OF_PAGE_LIST_HEADER
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->LIST_HEADERtext
*---------------------------------------------------------------------*
FORM TOP_OF_PAGE_LIST_HEADER USING LIST_HEADER TYPE SLIS_T_LISTHEADER.

DATA : HLINE TYPE SLIS_LISTHEADER,
TEXT(60) TYPE C.

CLEAR : HLINE,TEXT.
HLINE-TYP = 'S'.
WRITE 'L.G.BALAKRISHNAN & BROS' TO TEXT.
HLINE-INFO = TEXT.
APPEND HLINE TO LIST_HEADER.

SELECT SINGLE * FROM T001W WHERE WERKS = WERKS.

CLEAR : HLINE,TEXT.
HLINE-TYP = 'S'.
WRITE 'PLANT :' TO TEXT.
WRITE WERKS TO TEXT+8.
HLINE-INFO = TEXT.
APPEND HLINE TO LIST_HEADER.

CLEAR : HLINE,TEXT.
HLINE-TYP = 'S'.
WRITE T001W-NAME1 TO TEXT.
HLINE-INFO = TEXT.
APPEND HLINE TO LIST_HEADER.

CLEAR : HLINE,TEXT.
HLINE-TYP = 'S'.
WRITE T001W-STRAS TO TEXT.
HLINE-INFO = TEXT.
APPEND HLINE TO LIST_HEADER.

CLEAR : HLINE,TEXT.
HLINE-TYP = 'S'.
WRITE T001W-ORT01 TO TEXT.
HLINE-INFO = TEXT.
APPEND HLINE TO LIST_HEADER.

CLEAR : HLINE,TEXT.
HLINE-TYP = 'S'.
WRITE 'DATE :' TO TEXT.
WRITE BUDAT-LOW TO TEXT+7.

IF BUDAT-HIGH IS NOT INITIAL.
WRITE 'TO' TO TEXT+18.
WRITE BUDAT-HIGH TO TEXT+22.
ENDIF.
HLINE-INFO = TEXT.
APPEND HLINE TO LIST_HEADER.

ENDFORM. "TOP_OF_PAGE_LIST_HEADER

*&--------------------------------------------------------------------*
*& Form ALV_EVENT_INIT
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM ALV_EVENT_INIT .

CLEAR ALV_EVENT.
ALV_EVENT-NAME = SLIS_EV_TOP_OF_PAGE.
ALV_EVENT-FORM = 'ALV_TOP_OF_PAGE'.
APPEND ALV_EVENT TO EVENTCAT.

CLEAR ALV_EVENT.
ALV_EVENT-NAME = SLIS_EV_TOP_OF_LIST.
ALV_EVENT-FORM = 'ALV_TOP_OF_LIST'.
APPEND ALV_EVENT TO EVENTCAT.

ENDFORM. "ALV_EVENT_INIT

*&--------------------------------------------------------------------*
*& Form ALV_TOP_OF_PAGE
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM ALV_TOP_OF_PAGE.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = LIST_HEADER
I_LOGO = 'ENJOYSAP_LOGO'.
ENDFORM. "ALV_TOP_OF_PAGE

*&---------------------------------------------------------------------*
*& Form BUILD_EVENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_EVENTS[] text
*----------------------------------------------------------------------*
FORM BUILD_EVENT USING P_EVENTS TYPE SLIS_T_EVENT.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = P_EVENTS
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2.

READ TABLE P_EVENTS WITH KEY NAME = SLIS_EV_USER_COMMAND INTO ALV_EVENT.

IF SY-SUBRC = 0.
MOVE GC_FORMNAME_USER_COMMAND TO ALV_EVENT-FORM.
APPEND ALV_EVENT TO P_EVENTS.
ENDIF.

READ TABLE P_EVENTS WITH KEY NAME = SLIS_EV_BEFORE_LINE_OUTPUT INTO ALV_EVENT.

IF SY-SUBRC = 0.
MOVE GC_FORMNAME_BEFORE_OUTPUT TO ALV_EVENT-FORM.
APPEND ALV_EVENT TO P_EVENTS.
ENDIF.

ENDFORM. " BUILD_EVENT

How to calculate last date of the month?

Mostly this problem arises since the months have variable end date and we need to know at runtime, whether last date is 31 or 30 or in case of Feb 28 or29!!

Here's what can be done:

Data : lv_date type DATS,
lv_lastday type DATS,
wf_date type DATS,
lv_month(2) type n.

wf_date = sy-datlo. "This is just for demo
*wf_date contains the date in the format 20071026

lv_month = wf_date+4(2) + 1.
concatenate wf_date+0(4) lv_month '01' into lv_date.
lv_lastday = lv_date - 1.

This method is better:
Use the function module FIMA_DATE_CREATE

data: lv_actual_date type sy-datum,
lv_end_of_month_date type sy-datum.

lv_actual_date = sy-datum.

CALL FUNCTION 'FIMA_DATE_CREATE'
EXPORTING
I_DATE = lv_actual_date
* I_FLG_END_OF_MONTH = ' '
* I_YEARS = 0
* I_MONTHS = 0
* I_DAYS = 0
* I_CALENDAR_DAYS = 0
I_SET_LAST_DAY_OF_MONTH = 'X'
IMPORTING
E_DATE = lv_end_of_month_date
.

With the other Exporting Parameters you can get the date of other years or months.
For example: I_YEARS = 2 => Input_Years = 2005 Output_Years = 2007
I_MONTHS = '-3' => Input_Month = 07 Output_Month = 04

How to change the deadline of the workitem programmatically in SAP?

Following code is used to changes the deadline of any work item which is in WAITING state. The FMs needs the input like the object type for which the workflow has executed, the workflow ID to which the workitem belongs and the Task id of the standard task which is executed and in waiting state.

DATA: lit_deadline TYPE TABLE OF swwdeadlin,
lt_workitem TYPE TABLE OF swr_wihdr,
lt_rel_wi TYPE TABLE OF swwwihead,
w_workitem TYPE swr_wihdr,
w_rel_wi TYPE swwwihead,
w_deadline TYPE swwdeadlin,
l_objkey TYPE swo_typeid,
l_retcode TYPE sy-subrc.
* Retrieve the work items executed for desired Object type
CALL FUNCTION 'SAP_WAPI_WORKITEMS_TO_OBJECT'
EXPORTING
objtype = l_objtype
objkey = l_objkey
top_level_items = space
selection_status_variant = '0001'
IMPORTING
return_code = l_ret_code
TABLES
worklist = lt_workitem.
* Select the workitems executed for particular Workflow.
SORT lt_workitem BY wi_rh_task wi_stat.
READ TABLE lt_workitem
INTO w_workitem
WITH KEY wi_rh_task = 'WS91001143'
wi_stat = 'STARTED'
BINARY SEARCH.
* Select the dependent workitems of 'WS91001143'.
CALL FUNCTION 'SWI_GET_DEPENDENT_WORKITEMS'
EXPORTING
wi_id = w_workitem-wi_id
TABLES
dependent_wis = lt_rel_wi.
* Select the workitems for which the deadline needs to be changed.
SORT lt_rel_wi BY wi_rh_task wi_stat.
READ TABLE lt_rel_wi
INTO w_rel_wi
WITH KEY wi_rh_task = 'TS91001414'
wi_stat = 'WAITING'
BINARY SEARCH.
* Update the deadline of the waiting task.
w_deadline-wi_dattype = 'DS'.
w_deadline-wi_date = l_new_date.
w_deadline-wi_time = '000001'.
APPEND w_deadline TO lt_deadline.
CALL FUNCTION 'SWW_WI_DEADLINES_CHANGE'
EXPORTING
wi_id = w_rel_wi-wi_id
do_commit = 'X'
TABLES
deadline_attributes = lt_deadline
EXCEPTIONS
no_authorization = 1
invalid_type = 2
update_failed = 3
invalid_status = 4
OTHERS = 5.
if sy-subrc <> 0.

endif.

How to convert from one currency value to other?

We can Use the Following Function Module to convert from one Currency vale to other
In following function module we need to pass Foreign currency, Local Currency type_rate:Type of rate M=Average rate G=Bank buying rate B=bank selling rate

We Get Exchange rate for that day, foreign factor, Local factor.
And Foreign currency can be calculated as below mentioned in IF ENDIF

DATA: l_er TYPE tcurr-ukurs, "
l_ff TYPE tcurr-ffact,
l_lf TYPE tcurr-tfact,
l_erate(12) TYPE c,

CALL FUNCTION 'READ_EXCHANGE_RATE'
EXPORTING
date = sy-datum
foreign_currency = wa_bseg-pswsl
local_currency = c_euro
type_of_rate = 'M'
IMPORTING
exchange_rate = l_er
foreign_factor = l_ff
local_factor = l_lf
EXCEPTIONS
no_rate_found = 1
no_factors_found = 2
no_spread_found = 3
derived_2_times = 4
overflow = 5
OTHERS = 6.
IF sy-subrc = 0.
l_erate = l_er / ( l_ff / l_lf ).
wa_itab-wrbtr = wa_itab-wrbtr * l_erate.

ENDIF.

How do I display / add the Terms and Conditions to the business document?

I would suggest that you create separate SMART Form for the Terms and conditions and call that right after the PO main smart form. It gives the flexibility in calling the same smart form for other documents also, as generally these are the same Terms and Conditions for all the documents that a company uses.

We can have the Terms and Conditions stored as long texts in SO10 (Standard Text, TDOBJECT - TEXT and TDID - ST and TEXTNAME - Whatever name you want to give). This way if you want to change the text, its easy to change and you can transport the changes using program RSTXTRAN.

We have a text element in the smart form, and the general attributes of the text change the type to "Include Text". This will change the screen and you should be able enter the parameter values of Object, ID and name.

This will automatically print the entire long text on the smart form, we just need to make sure that this is a part of the main window of the smart form as the text might run into multiple pages.

How do I create a long text for a document?*

Please refer to the important parameters that are discussed in the previous question of reading texts. We will need the same parameters for saving the text as well. The function modules that you can use for this will be SAVE_TEXT followed by COMMIT_TEXT. The parameters play a very important roles as you might not see the saved text in the standard transaction if you give wrong parameter values.

CALL FUNCTION 'SAVE_TEXT'
EXPORTING
* CLIENT = SY-MANDT
HEADER =
* INSERT = ' '
* SAVEMODE_DIRECT = ' '
* OWNER_SPECIFIED = ' '
* LOCAL_CAT = ' '
* IMPORTING
* FUNCTION =
* NEWHEADER =
TABLES
LINES =
* EXCEPTIONS
* ID = 1
* LANGUAGE = 2
* NAME = 3
* OBJECT = 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.

CALL FUNCTION 'COMMIT_TEXT'
* EXPORTING
* OBJECT = '*'
* NAME = '*'
* ID = '*'
* LANGUAGE = '*'
* SAVEMODE_DIRECT = ' '
* KEEP = ' '
* LOCAL_CAT = ' '
* IMPORTING
* COMMIT_COUNT =
* TABLES
* T_OBJECT =
* T_NAME =
* T_ID =
* T_LANGUAGE =
.

Where are the long texts of a document stored and how to access the same?*

The long texts of a document are stored in a encrypted format in the STXH and STXL tables, where STXH stores the header information of the long text like TDOBJECT, which indicates which text object the long text belongs to, TDID which indicates the Text ID and TDNAME which is the actual name of the long text.

As these texts are stored in a encrypted format, the text cannot be read using a SELECT statement. You will have to use the function READ_TEXT. The easiest way of getting to know the parameter values is to go to a document, open the long text in a full screen mode. For example, when you wan to see the long text for a Purchase order, go to transaction ME23n. Assume, you want to see the parameters for the Header Text. In the first Tab Strip Control, click on the Texts tab and select the Header Text node on the left hand side, which will display the text on the right hand side. Now, double click on the text editor on the right hand side. This will open the text in the full screen mode. In the menu Go To --> Header, you should be able to see the values for all the three parameters we discussed above. We will have to do the same thing for whichever text parameters we want to see.

CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
ID =
LANGUAGE =
NAME =
OBJECT =
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
* IMPORTING
* HEADER =
TABLES
LINES =
* EXCEPTIONS
* ID = 1
* LANGUAGE = 2
* NAME = 3
* NOT_FOUND = 4
* OBJECT = 5
* REFERENCE_CHECK = 6
* WRONG_ACCESS_TO_ARCHIVE = 7
* OTHERS = 8
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

I am using a SELECT query on a database table. Since the number of records in the table is very large, the program dumps due to insufficient memory. H

n this case you could use the PACKAGE SIZE addition in the SELECT query to process in limited amount of data, thus avoiding the memory overloads.

Eg:

SELECT *
FROM <table>
INTO TABLE itab
PACKAGE SIZE <n>.

IF sy-subrc EQ 0.
*" Process the n records
ENDIF.

ENDSELECT.

How can I convert numerals into the corresponding text?

Use the Function Module SPELL_AMOUNT to convert the integer into text.

DATA v_int TYPE i VALUE '1000'.
DATA words LIKE SPELL.

CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
AMOUNT = v_int
LANGUAGE = SY-LANGU
IMPORTING
IN_WORDS = words
.
WRITE words-word.

How can I read an Excel file from presentation server?

You can use the Function module ALSM_EXCEL_TO_INTERNAL_TABLE to read the Excel file into the internal table of type alsmex_tabline. From this internal table you can fill the target internal table.

TYPES:
BEGIN OF ty_upload,
field1 TYPE c length 12,
field2 TYPE c length 12,
field3 TYPE c length 12,
END OF ty_upload.
DATA it_upload TYPE STANDARD TABLE OF ty_upload WITH DEFAULT KEY.
DATA wa_upload TYPE ty_upload.
DATA itab TYPE STANDARD TABLE OF alsmex_tabline WITH DEFAULT KEY.
FIELD-SYMBOLS: <wa> type alsmex_tabline.

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = filename
i_begin_col = 1
i_begin_row = 1
i_end_col = 3
i_end_row = 65535
TABLES
intern = itab.

LOOP AT itab ASSIGNING <wa>.
CASE <wa>-col.
WHEN '0001'.
wa_upload-field1 = <wa>-value.
WHEN '0002'.
wa_upload-field2 = <wa>-value.
WHEN '0003'.
wa_upload-field3 = <wa>-value.
ENDCASE.
APPEND wa_upload TO it_upload.
CLEAR wa_upload.
ENDLOOP.

How can I download my internal table into an Excel file?

Use the function module SAP_CONVERT_TO_XLS_FORMAT to download the internal table to an excel file.

PARAMETERS: p_file LIKE rlgrap-filename DEFAULT 'c:\tmp\test.xls'.
DATA: t100_Lines TYPE STANDARD TABLE OF t001 WITH DEFAULT KEY.

SELECT * FROM t001 INTO TABLE t100_Lines.

CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT'
EXPORTING
i_filename = p_file
TABLES
i_tab_sap_data = t100_Lines.

Or get much more control by creating an XML file

How can I get the IP address of the system programmatically?

You can use cl_gui_frontend_services to get the system IP address.

DATA ip_addr TYPE c LENGTH 50.
CALL METHOD cl_gui_frontend_services=>get_ip_address
RECEIVING
ip_address = ip_addr
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
DATA terminal LIKE USR41-TERMINAL.
CALL FUNCTION 'TERMINAL_ID_GET'
EXPORTING
USERNAME = sy-uname
IMPORTING
TERMINAL = terminal.

How do I download data in my internal table in a CSV file?

Use the Function Module SAP_CONVERT_TO_CSV_FORMAT to convert the internal table into Comma seperated format then download this internal table using the Function Module GUI_DOWNLOAD.

See a sample program below:

TYPE-POOLS: truxs.
TYPES:
BEGIN OF ty_Line,
vbeln LIKE vbap-vbeln,
posnr LIKE vbap-posnr,
END OF ty_Line.
ty_Lines TYPE STANDARD TABLE of ty_Line WITH DEFAULT KEY.
DATA: itab TYPE ty_Lines.
DATA: itab1 TYPE truxs_t_text_data.

SELECT
vbeln
posnr
UP TO 10 ROWS
FROM vbap
INTO TABLE itab.

CALL FUNCTION 'SAP_CONVERT_TO_CSV_FORMAT'
EXPORTING
i_field_seperator = ';'
TABLES
i_tab_sap_data = itab
CHANGING
i_tab_converted_data = itab1
EXCEPTIONS
conversion_failed = 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.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = 'C:\TEMP\test.txt'
TABLES
data_tab = itab1
EXCEPTIONS
OTHERS = 1.

How to convert a date to internal or external format?

Use the functions modules CONVERT_DATE_TO_EXTERNAL or CONVERT_DATE_TO_INTERNAL
to convert the date. When converting to external format, the date format from the user's user profile will be used. When converting to internal format, the result will be in YYYYMMDD format.

How are RANGES different from SELECT-OPTIONS?

They are the same, except SELECT-OPTIONS will provide an interface
on the selection screen for the user to input data.

What does R/3 stands for ?

R/3 stands for Real time data processing / 3 tier architecture (as against mainframe's 2 tier architecture).

Full Size| Edit Diagram

What does ABAP stand for?

ABAP currently stands for Advanced Business Application Programming; however the original meaning was Allgemeiner Berichtsaufbereitungsprozessor, which is German for "generic report preparation processor"
A different explanation is Anfänger Basteln An Programmen, which is german for "beginners tinker with programs"

It is a structured language like C.

What is this new transaction 'n' all about?

It is actually a quickstart transaction for se16n

Blog Archive