Tuesday, February 2, 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

IDOCs Information

IDOCs:
- IDOC is an Intermediate Document'. It is simply a data container used to exchange information between any two processes that can understand the syntax and semantics of the data.
An IDOC is created as a result of executing an Outbound ALE or EDI process.
In an inbound ALE or EDI process, an IDOC serves as input to create an application document.

-When an IDOC is created in the system , an unique number(16 Digits) is assigned to it. This number is unique with in the client.
- IDOCs are independent of the sending and receiving systems.
- IDOCs are independent of the direction of data exchange.
- In the IDOCs, data is stored in text format.

- IDOC will wait until the Remote System is Active.
*IDOC Definition Components
--------------------------
- Basic Idoc Type: Basic Idoc type defines the structure and format of the business document that is to be exchanged between two systems. Basic Idoc type can refer to an SAP provided basic IDOC type or a customer developed basic IDOC type.

- A basic IDOC type has the following characteristics:
Name : A basic Idoc type can be assigned upto a thirty character name.
List of permitted segments: The segments make up the IDOC structure.
Hierarchy of segments : The hierarchy of segments specifies the physical sequence and any parent - child relationship in the segments.Mandatory Vs Optional Segments : When used in the IDOC type, each segment has an attribute that defines whether the segment is option or mandatory.Minimum/Maximum range for each segment: It defines the maximum and minimum number of timesa data record corresponding to a segment cn exist in an IDOC.
- Segments : A segment defines the format and structure of a data record.
Segments are reusable componets. A segment consists of various fields that represent data in data record.

* IDOC Run time components:
-------------------------
- A unique IDOC number 16 digits is allocated.
- One control record is attached to the IDOC.
- Segments translate into data records.
- Status records are attached.
- Sytax rules are checked.

* IDOC Record Types:
------------------
1. Control Record : The control record contains all of the control information about an IDOC,this information basically includes the IDOC number, sender and receiver information, and information such as the message type it represents and the IDOC type.
- there is only one control record per IDOC.
- The stucture of the control record is the same for all the IDOCs and is defined by SAP.
- The structure of the control record is defined by the data dictionary structure EDI_DC40.
- The control record is stored in the EDIDC table.
2. Data Record : Data records contain the application data. A data record has two sections
Administrative Section and a Data section.
- The Administrative section cotain the segment name, client, IDOC number, segment number,
hierarchy level information.
- The Data section of a data record is a stram of 1000 bytes where the actual data resides.
- The data record is defined by the data dictionary structure EDI_DD40.
- Data records for IDOCs stored in the EDID4 table.
3. Status Record : Status records are attaced to an IDOC throughout the process as
the IDOC achieves different milestones or encounters an error. At every milestone a statu code, date and time are assigned.
- Status codes 01 to 49 are reserved for OUtbound process, 50 and above are reserved for inbound processes.

* Message Type: Identifies what type of information transformed between logical systems or partners. Message type is not a local object type , it is transportable.
* Port : A Port defines the medium in which data is exchanged between the two systems in the ALE process, IDocs are transferred via memory.
1. TRFC ports are used for ALE communicaion.
2. File Ports used by EDI
3. CPI-C ports used to communicate with R/2 systems.
4. Internet ports used to connect with Internet Applications.
5. ABAP-PI ports used to process data via the ABAP programming interface.
6. XML ports used to process files in XML format.

* Partner Profiles:
A partner profile has three views, which maintain different parameters for the partner.
1. The General Parameters View : Values are stored in table EDPP1.
2. The Outbound Parameters view : Values are stored in table EDP13, except for the
Message control parameter , which are stored in table EDP12.
3. The Inbound Parameters View: Values are stored in table EDP21.


* Transaction Codes :
WE31- Segment Creation
WE30 - IDOC structure
WE81 - Message type creation
WE82 - Link between Message type and IDOC type.
WE21 - Creation of POrt
WE20 - Partner Profile creation
WE19 - Test tool for IDOC Processing.
SALE - ALE (Application Linking and Enabling) settings

External Perform In SCRIPTs/ Adding Additional Fields to the Standard Form

/: PERFORM DATE IN PROGRAM ZDATE
/: USING &DATE1&
/: USING &DATE21&
/: CHANGING &YEAR&
/: CHANGING &MONTH&
/: CHANGING &DATE&
/: ENDPERFORM




IN PROGRAM ZDATE,


FORM DATE TABLES INTAB STRUCTURE ITCSY
OUTAB STRUCTURE ITCSY.

DATA: L_DATE_1 TYPE SY-DATUM,
L_DATE_2 TYPE SY-DATUM.
DATA: L_YEAR(2),
L_MONTH(2),
L_DATE(2).

READ TABLE INTAB WITH KEY NAME = 'DATE1'.
IF SY-SUBRC = 0.
L_DATE_1 = INTAB-VALUE.
ENDIF.

READ TABLE INTAB WITH KEY NAME = 'DATE2'.
IF SY-SUBRC = 0.
L_DATE_2 = INTAB-VALUE.
ENDIF.

CALL FUNCTION 'HR_AUPBS_MONTH_DAY'
EXPORTING
BEG_DA = L_DATE_1
END_DA = L_DATE_2
IMPORTING
NO_YEAR = L_YEAR
NO_MONTH = L_MONTH
NO_DAY = L_DAY
* NO_CAL_DAY = CAL_DAY.

CLEAR OUTTAB.
READ TABLE OUTAB WITH KEY NAME = 'YEAR'.
IF SY-SUBRC = 0.
OUTAB-VALUE = L_YEAR.
MODIFY OUTAB INDEX SY-TABIX.
ENDIF.

'.
IF SY-SUBRC = 0.
OUTAB-VALUE = L_MONTH.
MODIFY OUTAB INDEX SY-TABIX.
ENDIF.

READ TABLE OUTAB WITH KEY NAME = 'DATE'.
IF SY-SUBRC = 0.
OUTAB-VALUE = L_DATE.
MODIFY OUTAB INDEX SY-TABIX.
ENDIF.

*****************************************************************

FORM INCR_NUM TABLES INTAB STRUCTURE ITCSY
OUTAB STRUCTURE ITCSY.

DATA: V_DATE LIKE SY-DATUM , V_CHAR(10) TYPE C.
READ TABLE OUTAB WITH KEY NAME = 'GV'.
IF SY-SUBRC = 0.
V_DATE = SY-DATUM + 1.
CONCATENATE V_DATE+4(2) V_DATE+6(2) V_DATE+0(4) INTO V_CHAR
SEPARATED BY '.'.
OUTAB-VALUE = V_CHAR.
CONDENSE OUTAB-VALUE.
MODIFY OUTAB INDEX SY-TABIX.
ENDIF.
ENDFORM.


write these lines in your script.

/: DEFINE &AB& TYPE I,
/: &GV&
/: &AB& = 1
/: PERFORM INCR_NUM IN PROGRAM ZTESTPDF
/: USING &AB&
/: CHANGING &GV&
/: TABLES INPUT_TABLE
/: OUTPUT_TABLE
/: ENDPERFORM

Reading the Long Text of PO

Go to Change mode of Purchase Order and go for the header details of the selected Texts.Get the ID, NAME, LANGUAGE and OBJECT details of the text.

LV_NAME = IT_EKKO-EBELN
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = 'F02'
LANGUAGE = SY-LANGU
NAME = LV_NAME
OBJECT = 'EKKO'
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
* IMPORTING
* HEADER =
TABLES
LINES = IT_TLINE
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.

and while displaying the text check for the condition IT_TLINE # SPACE.

Monday, November 2, 2009

Get No of Days in given Date Range

DATA: LV_DATE LIKE P0001-BEGDA VALUE '20090401',
LV_DAT LIKE P0001-BEGDA VALUE '20090601',
F_DAYS LIKE P0347-SCRDD.


CALL FUNCTION 'HR_HK_DIFF_BT_2_DATES'
EXPORTING
DATE1 = LV_DAT
DATE2 = LV_DATE
OUTPUT_FORMAT = '02'
IMPORTING
DAYS = F_DAYS
EXCEPTIONS
INVALID_DATES_SPECIFIED = 1
OTHERS = 2.

WRITE : / F_DAYS.

Link for Date Calculations

http://wiki.sdn.sap.com/wiki/display/ABAP/Function+Module+related+on+Date+calculations

Monday, October 19, 2009

Debugging Smartform code in PRD

/1BCDWB/SF00000038 IF this the FM that gets generated when u execute a Smartform copy this and Go to SE38 TCODE and /1BCDWB/LSF00000038F01 make the FM as follows and Say display scroll down and find ur code and place the Break Point there..

NOTE: This is applicable only if u have authorizations to debug in PRD