SY-DATUM ISSUE.....

Hi All,
When I write the statement like this: WRITE: /1 sy-datum, its printing the date 01/28/2008, but my requirement is I wanted to print like this: 01/28/08, how to do please let me know.
Akshitha.

Hi,
ther are many options. but uthis case if u change the user master record.or select the date format in table usr01.
the hard coating is not at all god and it also have limitation .
this function module also helps u.
CONVERT_DATE_TO_EXTERNAL Converts date from system storage format to users specified display format
let me know if u are not able to get it.
reward all help full answers
/: SET DATE MASK = 'date_mask'
In the date mask, you can use the following codes:
DD: day (two digits)
DDD: day name - abbreviated
DDDD: day name - written out in full
MM: month (two digits)
MMM: month name - abbreviated
MMMM: month name - written out in full
YY: year (two digits)
YYYY: year (four digits)
LD: day (formatted as for the L option)
LM: month (formatted as for the L option)
LY: year (formatted as for the L option)
Assuming the current system date is March 1st, 1997.
/: SET DATE MASK = 'Foster City, MM/DD/YY'
&DATE& -> Foster City, 03/01/97
/: SET DATE MASK = 'MMMM DD, YYYY'
&DATE& -> March 01, 1997
The date mask may be reset to the default setting by using an empty string:
/: SET DATE MASK = ' '
In most print programs there is a function module called as below.
By setting the export parameter PI_COUNTRY one can set the form to print all dates according to country without any further coding.
CALL FUNCTION 'WFMC_PREPARE_SMART_FORM'
EXPORTING
PI_NAST = NAST
PI_COUNTRY = IS_DLV-LAND
PI_ADDR_KEY = IS_ADDR_KEY
PI_REPID = LF_REPID
PI_SCREEN = XSCREEN
IMPORTING
PE_RETURNCODE = CF_RETCODE
PE_ITCPO = LS_ITCPO
PE_DEVICE = LF_DEVICE
PE_RECIPIENT = CS_RECIPIENT
PE_SENDER = CS_SENDER.
or
If the input is always in the format DD.MM.YYYY..Then check this..
Use the sub field operation to get the values and then use concanate..
Ex.
DATA: V_INPUT(10) VALUE '27.03.2007'.
DATA: V_OUTPUT(10).
CONCATENATE V_INPUT3(2) '/' V_INPUT(2) '/' V_INPUT6(4)
INTO V_OUTPUT.
WRITE: / V_OUTPUT.
or
You can use function module CONVERSION_EXIT_SDATE_OUTPUT to convert the date format
If your problem is solved please set the question as answered.
Regards,
Chandru

Similar Messages

  • Regarding Goods Reversal and Goods Issue process for Production orders

    Hi,
    I have a issue regarding <b>Goods Reversal</b> and <b>Goods Issue</b> process for <b>Production orders</b>.
    Actually I am having a Z - Function Module in that i am passing <b>production order number other details</b> to
    make the <b>Goods Reversal</b> happen.
    The code for the above is as below:
                       i_mvtit-material      = wa_mdfa-matnr.
                        i_mvtit-plant         = i_resb-werks.
                        i_mvtit-spec_stock    = 'Q'.          "New
                        i_mvtit-stge_loc      = 'ZWIP'.
                        i_mvtit-stge_type     = i_resb-lgtyp. "New
                        i_mvtit-batch         = i_resb-charg. "New
                        i_mvtit-orderid       = i_resb-aufnr.
                        i_mvtit-spec_stock    = i_resb-sobkz.
                        i_mvtit-entry_qnt     = i_resb-enmng.
                        i_mvtit-entry_uom     = i_resb-erfme.
                        i_mvtit-entry_uom_iso = i_resb-meins. "New
                        i_mvtit-wbs_elem      = v_frwbs.
                        i_mvtit-move_type     = '262'.
                        i_mvtit-xstob         = 'X'.
                        i_mvtit-gr_rcpt       = i_resb-aufnr. "New
                        i_mvtit-reserv_no     = i_resb-rsnum.
                        i_mvtit-res_item      = i_resb-rspos.
                        APPEND i_mvtit.
    * HEADER ELEMENTS
                        k_gmvt_code-gm_code    = '03'.
                        k_gmvt_head-pstng_date = sy-datum.
                        k_gmvt_head-doc_date   = sy-datum.
    * CREATE GOODS MOVEMENTS
                        CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
                          EXPORTING
                            goodsmvt_header = k_gmvt_head
                            goodsmvt_code   = k_gmvt_code
                          TABLES
                            goodsmvt_item   = i_mvtit
                            return          = i_return.
    The Above code does the <b>Goods Reversal</b> but then i will update one Z Table with fields like
    Production Order Number[AUFNR], Number of Reservation[RSNUM], Item Number of Reservation [RSPOS], Material Number [MATNR], Requirement Quantity [BDMNG], WBS element[PSPNR] etc. If Above BAPI runs sucessfully.
    That is happening correctly.
    But Then actual issue is i have do <b>Goods Issue</b> for those Z-Table records.
    There i will give Production order Number's & Storage Location in Selection-Criteria.
    Then i need to do <b>Goods Issue</b> for that order.
    The code i had written as follows.
    * POPULATE VALUES FOR BAPI CALL
            i_mvtit-material      = i_zpsi7603_01-matnr.
            i_mvtit-plant         = i_resb-werks.
            i_mvtit-spec_stock    = 'Q'.                "New
            i_mvtit-stge_loc      = p_sloc.
            i_mvtit-stge_type     = i_resb-lgtyp.       "New
            i_mvtit-batch         = i_resb-charg.
            i_mvtit-orderid       = i_resb-aufnr.
            i_mvtit-spec_stock    = i_resb-sobkz.
            i_mvtit-entry_qnt     = i_resb-enmng.
            i_mvtit-entry_uom     = i_resb-erfme.
            i_mvtit-entry_uom_iso = i_resb-meins.       "New
            i_mvtit-wbs_elem      = v_frwbs.
            i_mvtit-move_type     = c_261.
            i_mvtit-mvt_ind       = 'F'.                "New
            i_mvtit-xstob         = c_x.
            i_mvtit-gr_rcpt       = i_resb-aufnr.       "New
            i_mvtit-reserv_no     = i_resb-rsnum.
            i_mvtit-res_item      = i_resb-rspos.
            APPEND i_mvtit.
    * HEADER ELEMENTS
            k_gmvt_code-gm_code    = c_03.
            k_gmvt_head-pstng_date = sy-datum.
            k_gmvt_head-doc_date   = sy-datum.
    * CREATE GOODS MOVEMENTS
            CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
              EXPORTING
                goodsmvt_header = k_gmvt_head
                goodsmvt_code   = k_gmvt_code
              TABLES
                goodsmvt_item   = i_mvtit
                return          = i_return.
            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                wait = c_x.
            READ TABLE i_return INDEX 1.
            IF i_return-type EQ c_s.
              DELETE FROM zpsi7603_01 WHERE aufnr = i_resb-aufnr AND
                                            rsnum = i_resb-rsnum AND
                                            rspos = i_resb-rspos.
            ENDIF.
    If i run above code for <b>Goods Issue</b> it is giving error can anybody tell me what changes i need to do to make it work.
    The <b>Error Message</b> i am getting is as below:
    <b>Qty and / or "delivery completed" ind. or final issue ind. are missing</b>
    <b>Error Number for the above is : 264.</b>
    Can anybody solve my issue.
    Any help will be appreciated.
    Thanks in advance.
    Thanks & Regards,
    Rayeez.

    Hi,
    Thanks boss.
    It is working now correctly.
    The issue is the  i_mvtit-XSTOB should be equal space in case of Goods issue while incase of Reversal it should be equal to X.
    Thanks for ur efforts.
    I had awarded you points.
    Thanks a lot.
    Thanks & Regards,
    Rayeez.

  • Issue in ALV List display

    Issue in ALV List display  
    Posted: Apr 5, 2008 10:25 AM     Edit      E-mail this message      Reply 
    Hi Friends,
    Can any one help me out in the logic to display the output in the ALV list.
    i want to get the out put as
    based on the field4 i have to display fieds5, field6 and field 7 values as mentioned below.
    field1 field2 field3 field4 field5 field6 field7
    0L 123 456 2008  001 123.00 456.00
    -    -     -       -     002  213.00 789.00
    -      -       -     003 0.00     0.00
    -      -       -     004 0.00     0.00
    -      -        -    005 0.00     0.00
    -       -       -     006 0.00     0.00
                                   336.00  1245.00
    Thanks,
    Vijay

    for display you have to define fieldcatlaog and use Fm RESUE_ALV_GRID_DISPLAY,
    Go through this program
    *& Report  Z_OPEN_CLOSE                                                *
    REPORT  Z_OPEN_CLOSE MESSAGE-ID YW2 LINE-SIZE 231 LINE-COUNT 45
    NO STANDARD PAGE HEADING.
    Type Declaration *
    TYPE-POOLS SLIS.
    Tables *
    TABLES: MKPF, " Material Document: Header Data
            MSEG, " Material Document: Item Data
            MARA,
            MARD,
            S031,
            EKKO,
            EKPO,
            LIKP,
            MAKT,
            J_1IWRKCUS,
            T001W,
            WB2_V_MKPF_MSEG2,
            MMIM_REP_PRINT,
            YW2_STKMOVEMENTS,
            YPLNT,
            MARDH.
    Internal Tables *
    DATA: I_WERKS LIKE J_1IWRKCUS OCCURS 0 WITH HEADER LINE.
    DATA: BEGIN OF I_YPLNT OCCURS 0,
             PPLNT LIKE YPLNT-PPLNT,
             WPLNT LIKE YPLNT-WPLNT,
          END OF I_YPLNT.
    DATA: BEGIN OF I_MKPF OCCURS 0,
            MBLNR LIKE MKPF-MBLNR,
            MJAHR LIKE MKPF-MJAHR,
            BUDAT LIKE MKPF-BUDAT,
            VGART LIKE MKPF-VGART,
            BWART LIKE MSEG-BWART,
            MATNR LIKE MSEG-MATNR,
            WERKS LIKE MSEG-WERKS,
            LGORT LIKE MSEG-LGORT,
            MENGE LIKE MSEG-MENGE,
            MEINS LIKE MSEG-MEINS,
            KUNNR LIKE MSEG-KUNNR,
            ZEILE LIKE MSEG-ZEILE,
            XAUTO LIKE MSEG-XAUTO,
            SHKZG LIKE MSEG-SHKZG,
            MATNR1 LIKE MSEG-MATNR,
          END OF I_MKPF.
    DATA: BEGIN OF I_MARDH OCCURS 0,
           WERKS LIKE MARDH-WERKS,
           MEINS LIKE MARA-MEINS,
           MATNR LIKE MARDH-MATNR,
           LGORT LIKE MARDH-LGORT,
           LABST LIKE MARDH-LABST,
           LFGJA LIKE MARDH-LFGJA, "Added -MB
           LFMON LIKE MARDH-LFMON, "Added -MB
           PERIO(6),
           INSME LIKE MARDH-LABST,
           EINME LIKE MARDH-LABST,
           SPEME LIKE MARDH-LABST,
           RETME LIKE MARDH-LABST,
           O_STK LIKE MARDH-LABST, " Opening Stock
           C_STK LIKE MARDH-LABST, " Closing Stock
          END OF I_MARDH.
    DATA: BEGIN OF I_MARD OCCURS 0,
           WERKS LIKE MARD-WERKS,
           MATNR LIKE MARD-MATNR,
           LGORT LIKE MARD-LGORT,
           LABST LIKE MARD-LABST,
           INSME LIKE MARD-LABST,
           MEINS LIKE MARA-MEINS,
           EINME LIKE MARD-LABST,
           SPEME LIKE MARD-LABST,
           RETME LIKE MARD-LABST,
          END OF I_MARD.
    DATA: I_MARD1 LIKE I_MARD OCCURS 0 WITH HEADER LINE.
    DATA: I_MARDH1 LIKE I_MARDH OCCURS 0 WITH HEADER LINE.
    DATA: BEGIN OF I_MKPF1 OCCURS 0,
            MBLNR LIKE MKPF-MBLNR,
            WERKS LIKE MSEG-WERKS,
            MATNR LIKE MSEG-MATNR,
            BUDAT LIKE MKPF-BUDAT,
            BWART LIKE MSEG-BWART,
            MJAHR LIKE MKPF-MJAHR,
            VGART LIKE MKPF-VGART,
            LGORT LIKE MSEG-LGORT,
            MENGE LIKE MSEG-MENGE,
            MEINS LIKE MSEG-MEINS,
            XAUTO LIKE MSEG-XAUTO,
            SHKZG LIKE MSEG-SHKZG,
          END OF I_MKPF1.
    DATA: BEGIN OF I_MKPF2 OCCURS 0,
           WERKS LIKE MSEG-WERKS,
           MATNR LIKE MSEG-MATNR,
           BUDAT LIKE MKPF-BUDAT,
           BWART LIKE MSEG-BWART,
           MJAHR LIKE MKPF-MJAHR,
           VGART LIKE MKPF-VGART,
           LGORT LIKE MSEG-LGORT,
           MENGE LIKE MSEG-MENGE,
           MEINS LIKE MSEG-MEINS,
           XAUTO LIKE MSEG-XAUTO,
         END OF I_MKPF2.
    DATA: BEGIN OF I_FINAL5 OCCURS 0,
           WERKS LIKE MSEG-WERKS, " Plant
           MATNR LIKE MSEG-MATNR, " Material
           LGORT LIKE MSEG-LGORT, " Storage Location
           BUDAT LIKE MKPF-BUDAT, " Posting Date
           MTART LIKE MARA-MTART, " Material Type
           SPMON LIKE S031-SPMON, " Month
           MAKTX LIKE MAKT-MAKTX, " Description
    meins(3), " UOM
            MEINS LIKE MSEG-MEINS,
            O_STK LIKE MARDH-LABST, " opening stock
            TRECEP LIKE MARDH-LABST, " total receipts
            PRODU LIKE MARDH-LABST, " Net Receipts - Production
            RECEP LIKE MARDH-LABST, " Net Receipts - Receipts
            SAL_RET LIKE MARDH-LABST, " Net Receipts - Sales Return
            TDISP LIKE MARDH-LABST, " total dispatches
            CUSTMR LIKE MARDH-LABST, " Net Dispatches - Customers
            OPLANT LIKE MARDH-LABST, " Net Dispatches - To Other Plant
            TLOSS LIKE MARDH-LABST, " Total Loss
            TRLOSS LIKE MARDH-LABST, " Transit Loss
            WHLOSS LIKE MARDH-LABST, " Warehouse Loss
            C_STK LIKE MARDH-LABST, " Closing Stock
            TRFSTK LIKE MARDH-LABST, "Transfer stock
            MENGE LIKE MSEG-MENGE,
            OTHADJ LIKE MARDH-LABST,
          END OF I_FINAL5.
    DATA: BEGIN OF I_FINAL OCCURS 0,
            WERKS LIKE MSEG-WERKS, " Plant
            MATNR LIKE MSEG-MATNR, " Material
            BUDAT LIKE MKPF-BUDAT, " Posting Date
            MTART LIKE MARA-MTART, " Material Type
            SPMON LIKE S031-SPMON, " Month
            MAKTX LIKE MAKT-MAKTX, " Description
    meins(3), " UOM
            MEINS LIKE MSEG-MEINS,
            O_STK LIKE MARDH-LABST, " opening stock
            TRECEP LIKE MARDH-LABST, " total receipts
            PRODU LIKE MARDH-LABST, " Net Receipts - Production
            RECEP LIKE MARDH-LABST, " Net Receipts - Receipts
            SAL_RET LIKE MARDH-LABST, " Net Receipts - Sales Return
            TDISP LIKE MARDH-LABST, " total dispatches
            CUSTMR LIKE MARDH-LABST, " Net Dispatches - Customers
            OPLANT LIKE MARDH-LABST, " Net Dispatches - To Other Plant
            TRFSTK LIKE MARDH-LABST, "Material Transfer stock
            TRLOSS LIKE MARDH-LABST, " Transit Loss
            WHLOSS LIKE MARDH-LABST, " Warehouse Loss
            TLOSS LIKE MARDH-LABST, " Total Loss
            C_STK LIKE MARDH-LABST, " Closing Stock
            OTHADJ LIKE MARDH-LABST,
           END OF I_FINAL.
    DATA: I_FINAL1 LIKE I_FINAL OCCURS 0 WITH HEADER LINE.
    DATA: BEGIN OF I_FINAL_TEMP OCCURS 0,
            WERKS LIKE MSEG-WERKS, " Plant
            MATNR LIKE MSEG-MATNR, " Material
            MTART LIKE MARA-MTART, " Material Type
            MAKTX LIKE MAKT-MAKTX, " Description
            MEINS LIKE MSEG-MEINS,
            O_STK LIKE MARDH-LABST, " opening stock
            TRECEP LIKE MARDH-LABST, " total receipts
            PRODU LIKE MARDH-LABST, " Net Receipts - Production
            RECEP LIKE MARDH-LABST, " Net Receipts - Receipts
            SAL_RET LIKE MARDH-LABST, " Net Receipts - Sales Return
            TDISP LIKE MARDH-LABST, " total dispatches
            CUSTMR LIKE MARDH-LABST, " Net Dispatches - Customers
            OPLANT LIKE MARDH-LABST, " Net Dispatches - To Other Plant
            TRFSTK LIKE MARDH-LABST, "Material Transfer stock
            TRLOSS LIKE MARDH-LABST, " Transit Loss
            WHLOSS LIKE MARDH-LABST, " Warehouse Loss
            TLOSS LIKE MARDH-LABST, " Total Loss
            C_STK LIKE MARDH-LABST, " Closing Stock
            OTHADJ LIKE MARDH-LABST,
          END OF I_FINAL_TEMP.
    For Materials
    DATA: BEGIN OF I_MARA OCCURS 0,
           MATNR TYPE MARA-MATNR,
           MTART TYPE MARA-MTART,
           MEINS LIKE MARA-MEINS,
           LABST TYPE MARD-LABST,
           MAKTX LIKE MAKT-MAKTX,
          END OF I_MARA.
    DATA: BEGIN OF I_STKMVMNTS OCCURS 0,
           BWART LIKE MSEG-BWART,
           SHKZG LIKE MSEG-SHKZG,
           VZBEW LIKE YW2_STKMOVEMENTS-VZBEW,
          END OF I_STKMVMNTS.
    DATA: BEGIN OF I_FINALT OCCURS 0,
           WERKS LIKE MSEG-WERKS, " Plant
           MATNR LIKE MSEG-MATNR, " Material
           BUDAT LIKE MKPF-BUDAT, " Posting Date
           MTART LIKE MARA-MTART, " Material Type
           SPMON LIKE S031-SPMON, " Month
           MAKTX LIKE MAKT-MAKTX, " Description
    meins(3), " UOM
           MEINS LIKE MSEG-MEINS,
           O_STK LIKE MARDH-LABST, " opening stock
           TRECEP LIKE MARDH-LABST, " total receipts
           PRODU LIKE MARDH-LABST, " Net Receipts - Production
           RECEP LIKE MARDH-LABST, " Net Receipts - Receipts
           SAL_RET LIKE MARDH-LABST, " Net Receipts - Sales Return
           TDISP LIKE MARDH-LABST, " total dispatches
           CUSTMR LIKE MARDH-LABST, " Net Dispatches - Customers
           OPLANT LIKE MARDH-LABST, " Net Dispatches - To Other Plant
           TRFSTK LIKE MARDH-LABST, "Material Transfer stock
           TRLOSS LIKE MARDH-LABST, " Transit Loss
           WHLOSS LIKE MARDH-LABST, " Warehouse Loss
           TLOSS LIKE MARDH-LABST, " Total Loss
           C_STK LIKE MARDH-LABST, " Closing Stock
           OTHADJ LIKE MARDH-LABST,
           MONTH(8) ,
          END OF I_FINALT.
    DATA: IMKPFT LIKE I_MKPF OCCURS 0 WITH HEADER LINE.
    DATA: IMKPFT1 LIKE I_MKPF1 OCCURS 0 WITH HEADER LINE.
    DATA: IMARDT LIKE I_MARD OCCURS 0 WITH HEADER LINE.
    DATA: IMARDHT LIKE I_MARDH OCCURS 0 WITH HEADER LINE.
    DATA: T_FINAL LIKE I_MKPF OCCURS 0 WITH HEADER LINE.
    DATA: IMKPFT2 LIKE I_MKPF OCCURS 0 WITH HEADER LINE.
    FCAT is used for the field catalog
    DATA: FCAT TYPE TABLE OF SLIS_FIELDCAT_ALV WITH NON-UNIQUE DEFAULT KEY
                      WITH HEADER LINE INITIAL SIZE 0,
    for excluding the ICONs from the application toolbar
          FEXC TYPE TABLE OF SLIS_EXTAB WITH NON-UNIQUE DEFAULT KEY
                     WITH HEADER LINE INITIAL SIZE 0,
    FS_LAYO is used for Grid Layout
          FS_LAYO TYPE SLIS_LAYOUT_ALV,
    FEVENTS to handle the events TOP OF PAGE & USER_COMMAND
          FEVENTS TYPE TABLE OF SLIS_ALV_EVENT WITH NON-UNIQUE DEFAULT KEY
                     WITH HEADER LINE INITIAL SIZE 0,
    FHEADER is used for List header
          FHEADER TYPE TABLE OF SLIS_LISTHEADER WITH NON-UNIQUE DEFAULT KEY
                     WITH HEADER LINE INITIAL SIZE 0,
    sort is used for sorting
          FSORT TYPE TABLE OF SLIS_SORTINFO_ALV WITH NON-UNIQUE DEFAULT KEY
                     WITH HEADER LINE INITIAL SIZE 0,
          FCAT1 TYPE TABLE OF SLIS_FIELDCAT_ALV WITH NON-UNIQUE DEFAULT KEY
                    WITH HEADER LINE INITIAL SIZE 0,
          FS_LAYO1 TYPE SLIS_LAYOUT_ALV,
          GT_LIST_TOP_OF_PAGE1 TYPE SLIS_T_LISTHEADER,
          FEVENTS1 TYPE TABLE OF SLIS_ALV_EVENT WITH NON-UNIQUE DEFAULT KEY
                 WITH HEADER LINE INITIAL SIZE 0,
           FHEADER1 TYPE TABLE OF SLIS_LISTHEADER WITH NON-UNIQUE DEFAULT  
                  KEY WITH HEADER LINE INITIAL SIZE 0,
           G_STATU_071 TYPE SLIS_FORMNAME VALUE 'Z_PFSTATUS',
           ALV_VARIANT1 LIKE DISVARIANT.
    Variable Declaration *
    TYPES: TRFF_TYPE_DEC_6_5(6) TYPE P DECIMALS 5.
    DATA: FYEAR(4),
          MON(2),
          FYEAR1(4),
          MON1(2),
          OBAL LIKE MARD-LABST,
          CBAL LIKE MARD-LABST,
          INDEX TYPE I,
          COUNT,
          COUNT1 TYPE I,
          O_STK TYPE P DECIMALS 3,
          C_STK TYPE P DECIMALS 3,
          V_MJAHR LIKE MKPF-MJAHR,
          MONTHS TYPE TRFF_TYPE_DEC_6_5,
          MONTH TYPE I.
    Global variables for handling ALV functionality
    DATA: ALV_KEYINFO TYPE SLIS_KEYINFO_ALV,
          ALV_VARIANT LIKE DISVARIANT,
          ALV_LAYOUT TYPE SLIS_LAYOUT_ALV,
          ALV_REPID LIKE SY-REPID,
          ALV_PRINT TYPE SLIS_PRINT_ALV,
          ALV_DETAIL_FUNC(30),
          ALV_DEFAULT_VARIANT LIKE DISVARIANT-VARIANT,
          ALV_COLOURIZE_FIELDS LIKE MMIM_REP_PRINT-COLOR.
    RANGES: R_BUDAT FOR MKPF-BUDAT.
    *Added by Prabhu for year on 26.4.05.
    DATA: IDATE LIKE R_BUDAT OCCURS 0 WITH HEADER LINE.
    Selection Screen Elements *
    SELECTION-SCREEN BEGIN OF BLOCK BLK WITH FRAME TITLE TEXT-001.
      SELECT-OPTIONS: S_WERKS FOR MARD-WERKS OBLIGATORY NO INTERVALS.
      PARAMETER: P_SPMON LIKE S031-SPMON NO-DISPLAY .
      SELECT-OPTIONS: S_MATNR FOR MARA-MATNR OBLIGATORY,
                      S_LGORT FOR MSEG-LGORT NO-EXTENSION NO INTERVALS,
                      S_MBLNR FOR MKPF-MBLNR,
                      S_BUDAT FOR MKPF-BUDAT OBLIGATORY .
    SELECTION-SCREEN END OF BLOCK BLK.
    SELECTION-SCREEN BEGIN OF BLOCK BLK3 WITH FRAME TITLE TEXT-004.
          PARAMETER : MTART LIKE MARA-MTART DEFAULT 'FERT' NO-DISPLAY.
    SELECTION-SCREEN END OF BLOCK BLK3.
    SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-003.
    SELECTION-SCREEN END OF BLOCK BLK2.
    ADDED BY PRABHU FOR DAY-WISE REPORT.
    SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-007.
      PARAMETERS: D1 RADIOBUTTON GROUP P1 DEFAULT 'X',
                  M1 RADIOBUTTON GROUP P1,
                  Y1 RADIOBUTTON GROUP P1.
    SELECTION-SCREEN END OF BLOCK B3.
    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-006.
    PARAMETERS: ALV_DEF LIKE DISVARIANT-VARIANT.
    SELECTION-SCREEN END OF BLOCK B2.
    DATA: S_BUDAT1 LIKE S_BUDAT OCCURS 0 WITH HEADER LINE."prabhu
    Initialization *
    INITIALIZATION.
      PERFORM ALV_INIT.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR ALV_DEF.
      PERFORM ALV_F4.
    At Selection Screen
    *AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_spmon.
    PERFORM monat_f4.
    At Selection Screen *
    AT SELECTION-SCREEN.
    checking for the layout
      PERFORM ALV_CHECK.
    authorisation check for the Plant
    PERFORM auth_check.
    Validation for the Plant
      PERFORM VALIDITY_CHECK.
      IF MTART NE 'FERT'.
        MESSAGE E041 WITH 'Material Type must be FERT Only...'.
      ENDIF.
      IF D1 = 'X'." On 26.4.05.
        P_SPMON0(4) = S_BUDAT-LOW0(4).
        P_SPMON4(2) = S_BUDAT-LOW4(2).
      ELSE.
        P_SPMON0(4) = S_BUDAT-LOW0(4).
        P_SPMON4(2) = S_BUDAT-LOW4(2).
      ENDIF.
      LOOP AT S_BUDAT.
        IF S_BUDAT-HIGH IS INITIAL.
          S_BUDAT-HIGH = S_BUDAT-LOW.
          MODIFY S_BUDAT.
        ENDIF.
      ENDLOOP.
      IDATE-LOW = S_BUDAT-LOW.
      IDATE-HIGH = S_BUDAT-HIGH.
      CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
        EXPORTING
           I_DATE_FROM = IDATE-LOW
           I_DATE_TO = IDATE-HIGH
       IMPORTING
    E_DAYS =
          E_MONTHS = MONTH
    E_YEARS =
      DATA: I(3) TYPE C.
      I = S_BUDAT-LOW+4(2).
      CLEAR: R_BUDAT.
      REFRESH: R_BUDAT.
    *added by Prabhu for Only for Oneday.on 18.5.5
      IF MONTH EQ '0'.
        MONTH = MONTH + 1.
      ENDIF.
    *added by Prabhu for Only for Oneday.on 18.5.5
      DO MONTH TIMES.
        R_BUDAT-LOW = S_BUDAT-LOW.
        APPEND R_BUDAT.
      ENDDO.
      I = 0.
      LOOP AT R_BUDAT.
        R_BUDAT-LOW4(2) = S_BUDAT-LOW4(2) + I.
        I = I + 1.
        R_BUDAT-LOW+6(2) = '01'.
        MODIFY R_BUDAT.
      ENDLOOP.
      LOOP AT R_BUDAT.
        CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
           EXPORTING
             DAY_IN = R_BUDAT-LOW
           IMPORTING
             LAST_DAY_OF_MONTH = R_BUDAT-HIGH
          EXCEPTIONS
            DAY_IN_NO_DATE = 1
            OTHERS = 2
        MODIFY R_BUDAT.
      ENDLOOP.
      LOOP AT R_BUDAT.
        IF R_BUDAT-LOW4(2) = S_BUDAT-LOW4(2).
          R_BUDAT-LOW = S_BUDAT-LOW.
          MODIFY R_BUDAT.
        ENDIF.
        IF R_BUDAT-HIGH4(2) = S_BUDAT-HIGH4(2).
          R_BUDAT-HIGH = S_BUDAT-HIGH.
          MODIFY R_BUDAT.
        ENDIF.
    For Summary on 26.4.05.
        IF Y1 = 'X'.
          CLEAR R_BUDAT.
          REFRESH R_BUDAT.
          R_BUDAT-LOW = S_BUDAT-LOW.
          R_BUDAT-HIGH = S_BUDAT-HIGH.
          APPEND R_BUDAT.
          CLEAR R_BUDAT.
        ENDIF.
      ENDLOOP.
    At Selection Screen *
    AT SELECTION-SCREEN OUTPUT.
    Start of Selection *
    START-OF-SELECTION.
      V_MJAHR = P_SPMON+0(4).
    Get plant distinction warehouse/production
      PERFORM GET_PLANT_DISTINCTION.
    Collect the data from various tables
      PERFORM GETDATA_FG_STOCK.
    here the number of rows in the output table is found
      PERFORM OUTPUT_TABLE_CHECK.
    here the top of the page code is written, that is to be displayed
    in the output
      PERFORM Z_TOP_OF_PAGE.
    here ALV layout properties are set
      PERFORM Z_LAYOUT_SETTINGS.
    ALV EVENTS for TOP OF PAGE and for USER COMMAND
      PERFORM Z_ALV_EVENTS.
    The field catalog is defined for the Primary List is defined in
    the subroutine CREATE_FIELD_CATALOG include program ZPRRDOCR_FCAT
      PERFORM Z_CREATE_FIELD_CATALOG.
    This is for displaying the output
      PERFORM Z_REUSE_ALV_GRID_DISPLAY.
    *& Form getdata_fg_stock
    Getting data from standard tables
    FORM GETDATA_FG_STOCK.
    For getting the Start date & end date of the month
    PERFORM get_month_dates.
    Getting the Opening Stock from MARDH table
      IF MON EQ '01'.
        MON1 = MON.
        FYEAR1 = FYEAR.
        MON = '12'.
        FYEAR = FYEAR - 1.
      ELSE.
        MON1 = MON.
        FYEAR1 = FYEAR.
        MON = MON - 1.
        FYEAR = FYEAR.
      ENDIF.
      PERFORM GET_RECORDS_FROM_DB.
    *added for Month Summary on 26.4.05.
      LOOP AT R_BUDAT.
        S_BUDAT-LOW = R_BUDAT-LOW.
        S_BUDAT-HIGH = R_BUDAT-HIGH.
    *for Month
        P_SPMON0(4) = S_BUDAT-LOW0(4).
        P_SPMON4(2) = S_BUDAT-LOW4(2).
    *for summary.
        IF Y1 = 'X'.
          LOOP AT S_BUDAT.
            S_BUDAT1-SIGN = 'I'.
            S_BUDAT1-OPTION = 'NB'.
            S_BUDAT1-LOW = S_BUDAT-LOW.
            S_BUDAT1-HIGH = S_BUDAT-HIGH.
            APPEND S_BUDAT1.
            CLEAR S_BUDAT1.
          ENDLOOP.
        ENDIF.
        IMKPFT[] = I_MKPF[].
        IMKPFT2[] = I_MKPF[].
        IMARDT[] = I_MARD[].
        IMARDHT[] = I_MARDH[].
        PERFORM MONTH_WISE.
        PERFORM PROCESS_MOVEMENTS.
        PERFORM CALCULATE_OPENING_STOCK.
        PERFORM UPDATE_NON_TRANSACTION_ITMS.
        PERFORM DELETE_EMPTY_RECORDS.
        CLEAR: IMARDHT,IMARDT,IMKPFT1,IMKPFT,I_FINAL,I_FINAL5.
        REFRESH: IMARDHT,IMARDT,IMKPFT1,I_FINAL,I_FINAL5,IMKPFT.
      ENDLOOP.
      CLEAR: R_BUDAT.
      REFRESH: R_BUDAT.
    *end of changes for month.
    ENDFORM. " getdata_fg_stock
    FORM MONAT_F4 *
    F4-Hilfe für Monat *
    FORM MONAT_F4.
      DATA: BEGIN OF MF_DYNPFIELDS OCCURS 1.
              INCLUDE STRUCTURE DYNPREAD.
      DATA: END OF MF_DYNPFIELDS.
      DATA: MF_RETURNCODE LIKE SY-SUBRC,
             MF_MONAT LIKE ISELLIST-MONTH,
             MF_HLP_REPID LIKE SY-REPID.
      FIELD-SYMBOLS: .
    Wert von Dynpro lesen
      GET CURSOR FIELD MF_DYNPFIELDS-FIELDNAME.
      APPEND MF_DYNPFIELDS.
      MF_HLP_REPID = SY-REPID.
      DO 2 TIMES.
        CALL FUNCTION 'DYNP_VALUES_READ'
          EXPORTING
            DYNAME               = MF_HLP_REPID
            DYNUMB               = SY-DYNNR
          TABLES
            DYNPFIELDS           = MF_DYNPFIELDS
          EXCEPTIONS
            INVALID_ABAPWORKAREA = 01
            INVALID_DYNPROFIELD  = 02
            INVALID_DYNPRONAME   = 03
            INVALID_DYNPRONUMMER = 04
            INVALID_REQUEST      = 05
            NO_FIELDDESCRIPTION  = 06
            UNDEFIND_ERROR       = 07.
        IF SY-SUBRC = 3.
    Aktuelles Dynpro ist Wertemengenbild
          MF_HLP_REPID = 'SAPLALDB'.
        ELSE.
          READ TABLE MF_DYNPFIELDS INDEX 1.
    Unterstriche durch Blanks ersetzen
          TRANSLATE MF_DYNPFIELDS-FIELDVALUE USING '_ '.
          EXIT.
        ENDIF.
      ENDDO.
      IF SY-SUBRC = 0.
    Konvertierung ins interne Format
        CALL FUNCTION 'CONVERSION_EXIT_PERI_INPUT'
          EXPORTING
            INPUT         = MF_DYNPFIELDS-FIELDVALUE
          IMPORTING
            OUTPUT        = MF_MONAT
          EXCEPTIONS
            ERROR_MESSAGE = 1.
        IF MF_MONAT IS INITIAL.
    Monat ist initial => Vorschlagswert aus akt. Datum ableiten
          MF_MONAT = SY-DATLO(6).
        ENDIF.
        CALL FUNCTION 'POPUP_TO_SELECT_MONTH'
          EXPORTING
            ACTUAL_MONTH               = MF_MONAT
          IMPORTING
            SELECTED_MONTH             = MF_MONAT
            RETURN_CODE                = MF_RETURNCODE
          EXCEPTIONS
            FACTORY_CALENDAR_NOT_FOUND = 01
            HOLIDAY_CALENDAR_NOT_FOUND = 02
            MONTH_NOT_FOUND            = 03.
        IF SY-SUBRC = 0 AND MF_RETURNCODE = 0.
    ASSIGN (MF_DYNPFIELDS-FIELDNAME) TO <MF_FELD>. " ==>> note 148804
    <MF_FELD> = MF_MONAT.
          CALL FUNCTION 'CONVERSION_EXIT_PERI_OUTPUT'
            EXPORTING
              INPUT  = MF_MONAT
            IMPORTING
              OUTPUT = MF_DYNPFIELDS-FIELDVALUE.
          COLLECT MF_DYNPFIELDS.
          CALL FUNCTION 'DYNP_VALUES_UPDATE'
            EXPORTING
              DYNAME               = MF_HLP_REPID
              DYNUMB               = SY-DYNNR
            TABLES
              DYNPFIELDS           = MF_DYNPFIELDS
            EXCEPTIONS
              INVALID_ABAPWORKAREA = 01
              INVALID_DYNPROFIELD  = 02
              INVALID_DYNPRONAME   = 03
              INVALID_DYNPRONUMMER = 04
              INVALID_REQUEST      = 05
              NO_FIELDDESCRIPTION  = 06
              UNDEFIND_ERROR       = 07. "<<== note 148804
        ENDIF.
      ENDIF.
    ENDFORM.                                                    "MONAT_F4
    *& Form get_month_dates
    Calculating the Month Start & End Date
    FORM GET_MONTH_DATES.
      IF M1 = 'X'.
        FYEAR = P_SPMON+0(4).
        MON = P_SPMON+4(2).
        CONCATENATE FYEAR MON '01' INTO R_BUDAT-LOW.
        R_BUDAT-SIGN = 'I'.
        R_BUDAT-OPTION = 'BT'.
        CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
          EXPORTING
            I_DATE = R_BUDAT-LOW
          IMPORTING
            E_DATE = R_BUDAT-HIGH.
        APPEND R_BUDAT.
        CLEAR S_BUDAT.
        REFRESH S_BUDAT.
        S_BUDAT-SIGN = 'I'.
        S_BUDAT-OPTION = 'BT'.
        S_BUDAT-LOW = R_BUDAT-LOW.
        S_BUDAT-HIGH = R_BUDAT-HIGH.
        APPEND S_BUDAT.
      ELSE.
        FYEAR = P_SPMON+0(4).
        MON = P_SPMON+4(2).
        CONCATENATE FYEAR MON '01' INTO R_BUDAT-LOW.
        R_BUDAT-SIGN = 'I'.
        R_BUDAT-OPTION = 'BT'.
        CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
          EXPORTING
            I_DATE = R_BUDAT-LOW
          IMPORTING
            E_DATE = R_BUDAT-HIGH.
        APPEND R_BUDAT.
      ENDIF.
    ENDFORM. " get_month_dates
    *& Form output_table_Check
    checking for records for output
    FORM OUTPUT_TABLE_CHECK .
      DESCRIBE TABLE I_FINALT LINES INDEX.
      IF INDEX EQ 0.
        MESSAGE I041 WITH TEXT-005.
        LEAVE LIST-PROCESSING.
      ENDIF.
    ENDFORM. "OUTPUT_TABLE_CHECK
    *& Form Z_TOP_OF_PAGE
    for setting the details in the top of page *
    has no formal paramters *
    FORM Z_TOP_OF_PAGE.
      DATA: V_MON(2),
      V_YR(40),
      V_FIN(18),
      V_FIN1(48),
      LOW(10),
      HIGH(10).
      V_MON = P_SPMON+4(2).
      V_YR = P_SPMON+0(4).
      FHEADER-TYP = 'H'.
      FHEADER-INFO = 'Stock Register Report (FG Stock)'.
      APPEND FHEADER.
      CLEAR FHEADER.
    *if m1 = 'X'.
    CONCATENATE 'Month = ' v_mon '.' v_yr INTO v_fin.
    fheader-typ = 'H'.
    fheader-info = v_fin.
    APPEND fheader.
    CLEAR fheader.
    *endif."prabhu on 18.5.5
      IF D1 = 'X'.
        CLEAR S_BUDAT.
        LOOP AT S_BUDAT.
          CONCATENATE S_BUDAT-LOW6(2) '/' S_BUDAT-LOW4(2) '/'
          S_BUDAT-LOW+0(4) INTO LOW.
          CONCATENATE S_BUDAT-HIGH6(2) '/' S_BUDAT-HIGH4(2) '/'
          S_BUDAT-HIGH+0(4) INTO HIGH.
          CONCATENATE 'Date = ' LOW ' - ' HIGH INTO V_FIN1.
          FHEADER-TYP = 'H'.
          FHEADER-INFO = V_FIN1.
          APPEND FHEADER.
          CLEAR FHEADER.
        ENDLOOP.
      ENDIF.
    ENDFORM. " Z_TOP_OF_PAGE
    *& Form Z_LAYOUT_SETTINGS
    this is done for setting the properties for the layout of the *
    grid *
    has no formal paramters *
    FORM Z_LAYOUT_SETTINGS.
      FS_LAYO-ZEBRA = 'X'. " Output in Zebra pattern
      FS_LAYO-DETAIL_POPUP = 'X'. " A popup window appears to give
      FS_LAYO-DETAIL_TITLEBAR = TEXT-022.
      FS_LAYO-COLWIDTH_OPTIMIZE = 'X'.
    ENDFORM. " Z_LAYOUT_SETTINGS
    *& Form Z_ALV_EVENTS
    This is used for handling the events TOP OF PAGE and the USER *
    COMMAND event *
    has no formal paramters *
    FORM Z_ALV_EVENTS.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
        EXPORTING
          I_LIST_TYPE = 0
        IMPORTING
          ET_EVENTS   = FEVENTS[].
      READ TABLE FEVENTS WITH KEY NAME = 'TOP_OF_PAGE'.
      IF SY-SUBRC = 0.
        FEVENTS-FORM = 'Z_TOPOFPAGE'.
        MODIFY FEVENTS INDEX SY-TABIX.
        CLEAR FEVENTS.
      ENDIF.
      READ TABLE FEVENTS WITH KEY NAME = 'USER_COMMAND'.
      IF SY-SUBRC = 0.
        FEVENTS-FORM = 'Z_USER_COMMAND'.
        MODIFY FEVENTS INDEX SY-TABIX.
        CLEAR FEVENTS.
      ENDIF.
    ENDFORM. "Z_ALV_EVENTS
    *& Form Z_CREATE_FIELD_CATALOG
    here the field catalog is created for the primary list *
    no formal parameters *
    FORM Z_CREATE_FIELD_CATALOG.
    for the Plant
      FCAT-FIELDNAME = 'WERKS'.
      FCAT-KEY = 'X'.
      FCAT-OUTPUTLEN = '000005'.
      FCAT-JUST = 'L'.
      FCAT-SELTEXT_M = 'Plant'.
      FCAT-DDICTXT = 'M'.
      FCAT-INTTYPE = 'C'.
      FCAT-DATATYPE = 'CHAR'.
      APPEND FCAT.
      CLEAR FCAT.
    for the Material Type
      FCAT-FIELDNAME = 'MTART'.
      FCAT-KEY = 'X'.
      FCAT-OUTPUTLEN = '000006'.
      FCAT-JUST = 'L'.
      FCAT-SELTEXT_M = 'MatTyp'.
      FCAT-DDICTXT = 'M'.
      FCAT-INTTYPE = 'C'.
      FCAT-DATATYPE = 'CHAR'.
      APPEND FCAT.
      CLEAR FCAT.
    for the Material No.
      FCAT-FIELDNAME = 'MATNR'.
      FCAT-KEY = 'X'.
    fcat-hotspot = 'X'.
      FCAT-OUTPUTLEN = '000018'.
      FCAT-JUST = 'L'.
      FCAT-SELTEXT_M = 'Material'.
      FCAT-DDICTXT = 'M'.
      FCAT-INTTYPE = 'C'.
      FCAT-DATATYPE = 'CHAR'.
      APPEND FCAT.
      CLEAR FCAT.
    for the Material Description
      FCAT-FIELDNAME = 'MAKTX'.
      FCAT-KEY = ''.
      FCAT-OUTPUTLEN = '000040'.
      FCAT-JUST = 'L'.
      FCAT-SELTEXT_M = 'Description'.
      FCAT-DDICTXT = 'M'.
      FCAT-INTTYPE = 'C'.
      FCAT-DATATYPE = 'CHAR'.
      APPEND FCAT.
      CLEAR FCAT.
    for the Unit of Measure
      FCAT-FIELDNAME = 'MEINS'.
      FCAT-KEY = ''.
      FCAT-OUTPUTLEN = '03'.
      FCAT-JUST = 'C'.
      FCAT-SELTEXT_M = 'UOM'.
      FCAT-DDICTXT = 'M'.
      FCAT-INTTYPE = 'C'.
      FCAT-DATATYPE = 'UNIT'.
      APPEND FCAT.
      CLEAR FCAT.
    for the Plant
      FCAT-FIELDNAME = 'MONTH'.
      FCAT-KEY = 'X'.
      FCAT-OUTPUTLEN = '08'.
      FCAT-JUST = 'L'.
      FCAT-SELTEXT_M = 'MONTH'.
      FCAT-DDICTXT = 'M'.
      FCAT-INTTYPE = 'C'.
      FCAT-DATATYPE = 'CHAR'.
      APPEND FCAT.
      CLEAR FCAT.
    for the Opening Stock
      FCAT-FIELDNAME = 'C_STK'.
      FCAT-HOTSPOT = ' '.
      FCAT-OUTPUTLEN = '000016'.
      FCAT-JUST = 'L'.
      FCAT-SELTEXT_M = 'Opening Stock'.
      FCAT-DDICTXT = 'M'.
      FCAT-INTTYPE = 'Q'.
      FCAT-DATATYPE = 'QUAN'.
    fcat-do_sum = 'X'.
      FCAT-JUST = 'R'.
      FCAT-NO_ZERO = 'X'.
      APPEND FCAT.
      CLEAR FCAT.
    for the Total Receipts
      FCAT-FIELDNAME = 'TRECEP'.
      FCAT-HOTSPOT = ' '.
      FCAT-OUTPUTLEN = '000016'.
      FCAT-JUST = 'L'.
      FCAT-SELTEXT_M = 'Total Receipts'.
      FCAT-DDICTXT = 'M'.
      FCAT-INTTYPE = 'Q'.
      FCAT-DATATYPE = 'QUAN'.
      FCAT-DO_SUM = 'X'.
      FCAT-JUST = 'R'.
      FCAT-NO_ZERO = 'X'.
      APPEND FCAT.
      CLEAR FCAT.
    for the Production
      FCAT-FIELDNAME = 'PRODU'.
      FCAT-HOTSPOT = ' '.
      FCAT-OUTPUTLEN = '000016'.
      FCAT-JUST = 'L'.
      FCAT-SELTEXT_M = 'Production'.
      FCAT-DDICTXT = 'M'.
      FCAT-INTTYPE = 'Q'.
      FCAT-DATATYPE = 'QUAN'.
      FCAT-DO_SUM = 'X'.
      FCAT-JUST = 'R'.
      FCAT-NO_ZERO = 'X'.
      APPEND FCAT.
      CLEAR FCAT.
    for the Other Plant Receipts
      FCAT-FIELDNAME = 'RECEP'.
      FCAT-HOTSPOT = ' '.
      FCAT-OUTPUTLEN = '000016'.
      FCAT-JUST = 'L'.
      FCAT-SELTEXT_M = 'Othr Plnt Recpts'.
      FCAT-DDICTXT = 'M'.
      FCAT-INTTYPE = 'Q'.
      FCAT-DATATYPE = 'QUAN'.
      FCAT-DO_SUM = 'X'.
      FCAT-JUST = 'R'.
      FCAT-NO_ZERO = 'X'.
      APPEND FCAT.
      CLEAR FCAT.
    Sales Return
      FCAT-FIELDNAME = 'SAL_RET'.
      FCAT-HOTSPOT = ' '.
      FCAT-OUTPUTLEN = '000016'.
      FCAT-JUST = 'L'.
      FCAT-SELTEXT_M = 'Sales Return'.
      FCAT-DDICTXT = 'M'.
      FCAT-INTTYPE = 'Q'.
      FCAT-DATATYPE = 'QUAN'.
      FCAT-DO_SUM = 'X'.
      FCAT-JUST = 'R'.
      FCAT-NO_ZERO = 'X'.
      APPEND FCAT.
      CLEAR FCAT.
    Total Dispatches
      FCAT-FIELDNAME = 'TDISP'.
      FCAT-HOTSPOT = ' '.
      FCAT-OUTPUTLEN = '000016'.
      FCAT-JUST = 'L'.
      FCAT-SELTEXT_M = 'Total Dispatches'.
      FCAT-DDICTXT = 'M'.
      FCAT-INTTYPE = 'Q'.
      FCAT-DATATYPE = 'QUAN'.
      FCAT-DO_SUM = 'X'.
      FCAT-JUST = 'R'.
      FCAT-NO_ZERO = 'X'.
      APPEND FCAT.

  • PDF Attachment Email Opening issue in ECC6

    Hello,
    We are having problem with below report. I'm able to send emails(invoice) as PDF attachments , but the attached PDF file wont open. I'm getting a message "Adobe reader could not open attachement the file has been damaged".This report works in our old version 4.6c but we just upgrade to ecc6. Please Please help.
    Thanks,
    Jose
    REPORT zrfi_customer_statement_new
    NO STANDARD PAGE HEADING
    MESSAGE-ID zm_load
    LINE-SIZE 325
    LINE-COUNT 65(3).
    Tables *
    TABLES:
    bsid, bsad, knb1, kna1, knkk, t001, t014, t179t,
    t052, fplt, vbap, veda, vbrk, vbpa, vbkd, knvk,
    cepct, tvzbt, vbak, bsik, tsp01, usr21,adr6, tsp03l.
    Internal tables *
    DATA: i_bsid LIKE bsid OCCURS 0 WITH HEADER LINE.
    DATA: BEGIN OF i_bukrs OCCURS 0,
    bukrs LIKE bsid-bukrs,
    waers LIKE bsid-waers,
    END OF i_bukrs.
    DATA:
    BEGIN OF i_temp_data OCCURS 0,
    bukrs LIKE bsid-bukrs, " Company code
    kunnr LIKE bsid-kunnr, " Customer
    belnr LIKE bsid-belnr, " Invoice
    gjahr LIKE bsid-gjahr, " Fiscal year
    waers LIKE bsid-waers, " Currency
    rebzg LIKE bsid-rebzg,
    bldat LIKE bsid-bldat, " Posting date
    shkzg LIKE bsid-shkzg, " Debit/Credit
    zfbdt LIKE bsid-zfbdt, " Baseline date
    zterm LIKE bsid-zterm, " Terms of payment key
    dmbtr LIKE bsid-dmbtr, " company currency
    dmbe2 LIKE bsid-dmbe2, " Amount in Group Currency
    days LIKE rfposxext-verzn, " No of Arrear Days
    kidno LIKE bsid-kidno, " Payment reference number
    kunnr_c LIKE vbak-kunnr, " Partner Number
    name_c(50), " Partner Last name
    matnr LIKE vbap-matnr, " Material no
    arktx LIKE vbap-arktx, " material description
    vbeln LIKE vbap-vbeln, " Contract/Order no
    inv_date LIKE vbrk-fkdat,
    xblnr LIKE bsid-xblnr,
    xblnr LIKE bsid-zuonr,
    vtext LIKE vbap-arktx, "material description
    sgtxt LIKE bsid-sgtxt,
    plant LIKE t001w-name1,
    zzihrez_e LIKE vbap-zzihrez_e,
    vvtext LIKE tvzbt-vtext,
    blart LIKE bsid-blart,
    zuonr LIKE bsid-zuonr,
    END OF i_temp_data.
    DATA:
    BEGIN OF itab OCCURS 0,
    kunnr LIKE bsid-kunnr, " Customer
    bukrs LIKE bsid-bukrs, " Company code
    kunnr_c LIKE vbak-kunnr, " Partner Number
    name_c(50), " Partner Last name
    matnr LIKE vbap-matnr, " Material no
    kidno LIKE bseg-kidno, " Payment reference
    name1 LIKE kna1-name1, " Customer name
    belnr LIKE bsid-belnr, " Invoice
    waers LIKE bsid-waers, " Currency ( Document )
    gjahr LIKE bsid-gjahr, " Fiscal year
    zfbdt LIKE bsid-zfbdt, " Baseline date
    zterm LIKE bsid-zterm, " Terms of payment key
    amt00_30 TYPE netwr_ak, " 000 - 030 Days
    amt31_60 TYPE netwr_ak, " 031 - 060 Days
    amt61_90 TYPE netwr_ak, " 061 - 090 Days
    amt91_120 TYPE netwr_ak, " 090 - 120 Days
    amt120pls TYPE netwr_ak, " 120+ Days
    total TYPE netwr_ak, " Row Total
    inv_date LIKE vbrk-fkdat,
    rebzg LIKE bsid-rebzg,
    xblnr LIKE bsid-xblnr,
    xblnr LIKE bsid-zuonr,
    sgtxt LIKE bsid-sgtxt,
    days(5) , " No of Arrear Days
    inv_chk LIKE bsid-xblnr, " invoice/check/wire transfer no
    vtext LIKE t179t-vtext,
    zzihrez_e LIKE vbap-zzihrez_e,
    plant LIKE t001w-name1,
    vvtext LIKE tvzbt-vtext,
    bldat LIKE bsid-bldat,
    blart LIKE bsid-blart,
    zuonr LIKE bsid-zuonr,
    END OF itab.
    DATA: BEGIN OF i_final OCCURS 0,
    inv_chk LIKE bsid-xblnr, " invoice/check/wire transfer no
    bldat LIKE bsid-bldat,
    xblnr LIKE bsid-xblnr,
    inv_date LIKE vbrk-fkdat,
    name_c(50), " Partner Last name
    vtext LIKE t179t-vtext,
    zzihrez_e LIKE vbap-zzihrez_e,
    plant LIKE t001w-name1,
    vvtext LIKE tvzbt-vtext,
    total TYPE netwr_ak, " Row Total
    days(5) , " No of Arrear Days
    waers LIKE bsid-waers,
    blart LIKE bsid-blart,
    zuonr LIKE bsid-zuonr,
    END OF i_final.
    DATA: BEGIN OF i_last OCCURS 0,
    kunnr LIKE vbak-kunnr,
    inv_chk LIKE bsid-xblnr, " invoice/check/wire transfer no
    bldat LIKE bsid-bldat,
    xblnr LIKE bsid-xblnr,
    inv_date LIKE vbrk-fkdat,
    name_c(50), " Partner Last name
    vtext LIKE t179t-vtext,
    zzihrez_e LIKE vbap-zzihrez_e,
    plant LIKE t001w-name1,
    vvtext LIKE tvzbt-vtext,
    total TYPE netwr_ak, " Row Total
    days(5) , " No of Arrear Days
    waers LIKE bsid-waers,
    blart LIKE bsid-blart,
    zuonr LIKE bsid-zuonr,
    END OF i_last.
    DATA: i_bsik LIKE bsik OCCURS 0 WITH HEADER LINE.
    DATA: itab_temp LIKE itab OCCURS 100 WITH HEADER LINE.
    DATA:
    BEGIN OF itab_details OCCURS 0,
    bukrs LIKE bsid-bukrs, " Company code
    xblnr LIKE bsid-xblnr,
    gjahr LIKE bsid-gjahr,
    belnr LIKE bsid-belnr,
    kunnr LIKE bsid-kunnr,
    END OF itab_details.
    DATA: BEGIN OF x_kna1 OCCURS 0,
    kunnr LIKE kna1-kunnr,
    name1 LIKE kna1-name1,
    name2 LIKE kna1-name2,
    ptext LIKE tpfkt-vtext,
    street LIKE adrc-street,
    ort01 LIKE kna1-ort01,
    regio LIKE kna1-regio,
    pstlz LIKE kna1-pstlz,
    landx LIKE t005t-landx,
    agdate LIKE sy-datum, " aging date
    END OF x_kna1.
    DATA: BEGIN OF i_total OCCURS 0,
    waers LIKE bsid-waers,
    00_30 TYPE netwr_ak,
    31_60 TYPE netwr_ak,
    61_90 TYPE netwr_ak,
    91_120 TYPE netwr_ak,
    120pls TYPE netwr_ak,
    total TYPE netwr_ak,
    END OF i_total.
    DATA: i_ssfcrescl TYPE ssfcrescl.
    DATA: i_otf_final TYPE itcoo OCCURS 0 WITH HEADER LINE.
    DATA: i_ssfctrlop LIKE ssfctrlop OCCURS 0 WITH HEADER LINE.
    DATA: v_itcpo LIKE itcpo.
    DATA: BEGIN OF itab_vender OCCURS 0,
    vender LIKE kna1-kunnr,
    END OF itab_vender.
    DATA: BEGIN OF ioutput OCCURS 0,
    kunnr LIKE vbrk-kunrg,
    kname(50),
    email(50),
    error(1),
    END OF ioutput.
    DATA: vv_text(90).
    Structures *
    DATA: x_item LIKE rfposxext.
    DATA: x_t001 LIKE t001.
    DATA: x_bsegp LIKE bsegp.
    Variables *
    DATA: v_count TYPE i.
    DATA: v_dialog TYPE c VALUE 'X'.
    DATA: v_name1 LIKE kna1-name1,
    v_name2 LIKE kna1-name2,
    v_print LIKE tsp03l-padest,
    v_formname(20),
    v_flag.
    DATA: f_recap_report(1) TYPE c. " Flag for recap report
    DATA:
    BEGIN OF x_amt,
    amt00_ls LIKE bsid-wrbtr,
    00_30 LIKE bsid-wrbtr,
    31_60 LIKE bsid-wrbtr,
    61_90 LIKE bsid-wrbtr,
    91_120 LIKE bsid-wrbtr,
    120pls LIKE bsid-wrbtr,
    END OF x_amt.
    DATA: BEGIN OF itab_bill OCCURS 0,
    vbeln LIKE vbfa-vbeln,
    fplnr LIKE vbfa-fplnr,
    fpltr LIKE vbfa-fpltr,
    END OF itab_bill.
    DATA: v_sdate LIKE vbrk-fkdat,
    v_edate LIKE vbrk-fkdat,
    v_order(10) TYPE n.
    DATA: v_eddate(10), v_stdate(10).
    DATA: v_num TYPE i,
    v_stat,
    v_bill_prd(24),
    v_counter TYPE c.
    DATA: v_matnr LIKE vbrp-matnr,
    v_arktx LIKE vbrp-arktx,
    v_vbeln LIKE vbrp-vbeln,
    v_vvtext LIKE t176t-vtext,
    v_posnr LIKE vbap-posnr,
    v_kunnr_c LIKE vbak-kunnr,
    v_name_c(50),
    v_inv_date LIKE vbrk-fkdat,
    v_vdatu LIKE vbak-vdatu,
    v_auart LIKE vbak-auart,
    v_prctr LIKE vbap-prctr,
    v_zzihrez LIKE vbap-zzihrez_e,
    v_plant LIKE t001w-name1,
    p_form TYPE tdsfname,
    fm_name TYPE rs38l_fnam.
    DATA: i_ssfcompop TYPE ssfcompop OCCURS 0." WITH HEADER LINE.
    DATA: addr_no LIKE kna1-adrnr,
    last_name LIKE kna1-name1,
    first_name LIKE kna1-name1,
    pafkt LIKE knvk-pafkt,
    lang LIKE knvk-parla,
    v_land LIKE adrc-country,
    v_lines TYPE i.
    DATA: v_tabix LIKE sy-tabix, v_gjahr LIKE bsid-gjahr,
    v_kunnr LIKE vbak-kunnr, v_prodh LIKE vbap-prodh,
    v_vtext LIKE t179t-vtext.
    DATA: spno LIKE tsp01-rqident,
    mi_bytecount TYPE i,
    mstr_print_parms LIKE pri_params,
    downfile(128) VALUE 'c:\customer.pdf',
    mtab_pdf LIKE tline OCCURS 0 WITH HEADER LINE.
    DATA: packing_list TYPE TABLE OF sopcklsti1 WITH HEADER LINE,
    contents_txt TYPE TABLE OF solisti1 WITH HEADER LINE,
    v_email LIKE adr6-smtp_addr,
    v_returncode,
    contents_hex TYPE TABLE OF solix," WITH HEADER LINE,
    w_contents_hex TYPE solix ,
    receivers TYPE TABLE OF somlreci1 WITH HEADER LINE.
    DATA: att_pos TYPE i.
    DATA: document_data LIKE sodocchgi1.
    DATA: esubject LIKE sood1-objdes. "subject line
    DATA: emsgs TYPE TABLE OF solisti1 WITH HEADER LINE.
    DATA: pdf TYPE TABLE OF tline WITH HEADER LINE.
    DATA: BEGIN OF itext OCCURS 200,
    text(132),
    END OF itext.
    DATA: i_fields LIKE sval OCCURS 0 WITH HEADER LINE.
    DATA: v_ccemail LIKE adr6-smtp_addr,
    v_check,
    v_kname(50).
    DATA: otf_data1 LIKE itcoo OCCURS 0 WITH HEADER LINE,
    i_itcpp LIKE itcpp.
    *FIELD-GROUPS: HEADER, ...
    FIELD-GROUPS: header,
    details.
    Selection Screen
    SELECTION-SCREEN BEGIN OF BLOCK a10 WITH FRAME TITLE text-sa1.
    SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-sa1.
    PARAMETERS : p_ex_ic AS CHECKBOX DEFAULT 'X'. "R3DK906903
    SELECTION-SCREEN END OF BLOCK a1.
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
    SELECT-OPTIONS : s_kunnr FOR bsid-kunnr,
    s_bukrs FOR t001-bukrs OBLIGATORY.
    PARAMETERS : p_bdate LIKE sy-datum OBLIGATORY.
    PARAMETERS: p_vender AS CHECKBOX DEFAULT 'X'.
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s11.
    PARAMETERS : r_group RADIOBUTTON GROUP r1,
    r_comp RADIOBUTTON GROUP r1.
    SELECTION-SCREEN END OF BLOCK b2.
    SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-s13.
    PARAMETERS: p_print LIKE tsp03l-lname MATCHCODE OBJECT prin
    OBLIGATORY DEFAULT 'locl'.
    SELECTION-SCREEN END OF BLOCK b3.
    SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-s14.
    PARAMETERS: v_immed AS CHECKBOX DEFAULT 'X',
    v_dele AS CHECKBOX DEFAULT 'X',
    ch_email AS CHECKBOX.
    *PARAMETERS:ch_down AS CHECKBOX.
    SELECTION-SCREEN END OF BLOCK b4.
    SELECTION-SCREEN END OF BLOCK a10.
    AT SELECTION-SCREEN.
    Selection Screen Validation.
    PERFORM validate_selection_screen.
    INITIALIZATION.
    INITIALIZATION.
    IF sy-sysid NE 'R3P'.
    v_email = .
    ENDIF.
    START-OF-SELECTION.
    START-OF-SELECTION.
    IF p_vender = 'X'.
    Fetch data from BSIK .
    PERFORM fetch_data_vender.
    Get Arrear Days
    PERFORM get_arrear_days_vender.
    ENDIF.
    Fetch data from BSID and BSAD.
    PERFORM fetch_data_from_bsid.
    Get Arrear Days
    PERFORM get_arrear_days.
    Format Data as per selection.
    PERFORM format_final_data.
    Print sapscript
    SORT i_last BY kunnr days DESCENDING.
    LOOP AT i_last.
    AT NEW kunnr.
    CLEAR: i_final, x_kna1.
    REFRESH: i_final, x_kna1.
    PERFORM get_address.
    PERFORM get_total.
    ENDAT.
    MOVE-CORRESPONDING i_last TO i_final.
    i_final-xblnr = i_final-zuonr.
    APPEND i_final.
    CLEAR i_final.
    AT END OF kunnr.
    SORT i_final BY days DESCENDING inv_chk total DESCENDING.
    PERFORM smart_from.
    ENDAT.
    ENDLOOP.
    END-OF-SELECTION.
    END-OF-SELECTION.
    *& Form FETCH_DATA_FROM_BSID
    text
    FORM fetch_data_from_bsid.
    fetch data from BSID into Internal table I_BSID.
    SELECT *
    FROM bsid
    INTO TABLE i_bsid
    WHERE bukrs IN s_bukrs AND
    kunnr IN s_kunnr AND
    budat LE p_bdate ."AND
    BELNR in ('0090000231','1400000131').
    Fetch data from BSAD into Internal table I_BSID.
    SELECT *
    FROM bsad
    APPENDING TABLE i_bsid
    WHERE bukrs IN s_bukrs AND
    kunnr IN s_kunnr AND
    budat LE p_bdate AND
    augdt GT p_bdate." AND
    DELETE i_bsid WHERE ( bukrs = '1500' OR bukrs = '3000' OR
    bukrs = '1400' ) AND
    ( umsks = 'E' OR umskz = 'E' ).
    *Exclude intercompany customers
    IF p_ex_ic = 'X'.
    DELETE i_bsid WHERE kunnr+0(2) EQ 'IC'.
    ENDIF.
    CLEAR sy-tfill.
    DESCRIBE TABLE i_bsid LINES sy-tfill.
    IF sy-tfill = 0.
    MESSAGE i999 WITH ' No data selected for the selection Condition'.
    STOP.
    ENDIF.
    ENDFORM. " FETCH_DATA_FROM_BSID
    *& Form Get_Arrear_Days
    text
    FORM get_arrear_days.
    SORT i_bsid BY bukrs belnr.
    LOOP AT i_bsid.
    for company code 1500 and 3000
    IF i_bsid-bukrs EQ '1500' OR i_bsid-bukrs EQ '3000'.
    MOVE i_bsid-xblnr TO i_bsid-belnr.
    ENDIF.
    MOVE i_bsid-bukrs TO itab_details-bukrs.
    MOVE i_bsid-xblnr TO itab_details-xblnr.
    MOVE i_bsid-belnr TO itab_details-belnr.
    MOVE i_bsid-gjahr TO itab_details-gjahr.
    MOVE i_bsid-kunnr TO itab_details-kunnr.
    APPEND itab_details.
    CLEAR itab_details.
    CLEAR x_item.
    AT NEW bukrs.
    READ TABLE i_bsid INDEX sy-tabix.
    CLEAR x_t001.
    SELECT SINGLE * FROM t001
    INTO x_t001
    WHERE bukrs = i_bsid-bukrs.
    ENDAT.
    for company code 1500 and 3000 .
    IF i_bsid-bukrs EQ '1500' OR i_bsid-bukrs EQ '3000'.
    MOVE i_bsid-xblnr TO i_bsid-belnr.
    ENDIF.
    MOVE-CORRESPONDING i_bsid TO x_item.
    x_item-koart = 'D'. " Debitor - Customer Indicator
    x_item-konto = bsid-kunnr. " Debitor - Customer Number
    x_item-dmshb = bsid-dmbtr.
    x_item-wrshb = bsid-wrbtr.
    Function module to get ARREAR days.
    CALL FUNCTION 'ITEM_DERIVE_FIELDS'
    EXPORTING
    s_t001 = x_t001
    s_bsegp = x_bsegp
    key_date = p_bdate
    CHANGING
    s_item = x_item
    EXCEPTIONS
    bad_input = 1
    OTHERS = 2.
    IF sy-subrc = 0.
    Populate I_TEMP_DATA for further processing.
    i_temp_data-bukrs = i_bsid-bukrs.
    i_temp_data-kunnr = i_bsid-kunnr.
    i_temp_data-belnr = i_bsid-belnr.
    i_temp_data-bldat = i_bsid-bldat.
    i_temp_data-shkzg = i_bsid-shkzg.
    i_temp_data-zfbdt = i_bsid-zfbdt.
    i_temp_data-zterm = i_bsid-zterm.
    i_temp_data-vbeln = i_bsid-vbeln.
    i_temp_data-waers = i_bsid-waers.
    IF x_item-verzn < 0.
    x_item-verzn = 0.
    ENDIF.
    i_temp_data-zuonr = i_bsid-zuonr.
    i_temp_data-days = x_item-verzn.
    i_temp_data-gjahr = i_bsid-gjahr.
    i_temp_data-kidno = i_bsid-kidno.
    i_temp_data-rebzg = i_bsid-rebzg.
    i_temp_data-xblnr = i_bsid-xblnr.
    i_temp_data-sgtxt = i_bsid-sgtxt.
    Changing the Sign
    IF i_bsid-shkzg = 'H'.
    i_temp_data-dmbe2 = i_temp_data-dmbe2 + ( -1 * i_bsid-dmbe2 ).
    i_temp_data-dmbtr = i_temp_data-dmbtr + ( -1 * i_bsid-dmbtr ).
    ELSE.
    i_temp_data-dmbe2 = i_temp_data-dmbe2 + i_bsid-dmbe2.
    i_temp_data-dmbtr = i_temp_data-dmbtr + i_bsid-dmbtr.
    ENDIF.
    i_temp_data-blart = i_bsid-blart.
    *for doc type DR
    IF i_bsid-blart = 'DR' AND i_bsid-bschl = '01'.
    IF i_bsid-sgtxt IS INITIAL.
    *Changed our phone number to
    MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
    ELSE.
    MOVE i_bsid-sgtxt TO i_temp_data-vtext.
    MOVE 'Financial Invoice' TO i_temp_data-vvtext.
    ENDIF.
    ENDIF.
    *for doc type AB
    IF i_bsid-blart = 'AB' AND
    ( i_bsid-bschl GE '01' AND i_bsid-bschl LE '19' ).
    i_temp_data-bldat = i_bsid-zfbdt.
    i_temp_data-xblnr = i_bsid-vbeln.
    IF NOT i_bsid-sgtxt IS INITIAL.
    *Changed our phone nuber to
    MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
    MOVE i_bsid-sgtxt TO i_temp_data-vtext.
    MOVE 'Financial Doc' TO i_temp_data-vvtext.
    ELSE.
    MOVE i_bsid-sgtxt TO i_temp_data-vtext.
    MOVE 'Financial Doc' TO i_temp_data-vvtext.
    ENDIF.
    ENDIF.
    *for doc type DG
    IF i_bsid-blart = 'DG' AND
    ( i_bsid-bschl GE '01' AND i_bsid-bschl LE '19' ).
    i_temp_data-bldat = i_bsid-zfbdt.
    i_temp_data-xblnr = i_bsid-vbeln.
    IF i_bsid-sgtxt IS INITIAL.
    *Changed our phone nuber to
    MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
    ELSE.
    MOVE i_bsid-sgtxt TO i_temp_data-vtext.
    MOVE 'Financial Doc' TO i_temp_data-vvtext.
    ENDIF.
    ENDIF.
    *To display Debit memo and credit memo.
    IF i_bsid-blart = 'DG'.
    IF ( i_bsid-bschl GE '11' AND i_bsid-bschl LE '19' ).
    MOVE 'Credit Memo' TO i_temp_data-vvtext.
    ELSEIF ( i_bsid-bschl GE '01' AND i_bsid-bschl LE '09' ).
    MOVE 'Debit Memo' TO i_temp_data-vvtext.
    ENDIF.
    ENDIF.
    *for doc type DZ
    IF i_bsid-blart = 'DZ' AND
    ( i_bsid-bschl GE '01' AND i_bsid-bschl LE '19' ).
    IF i_bsid-sgtxt IS INITIAL.
    *changed our phone number to
    MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
    ELSE.
    MOVE i_bsid-sgtxt TO i_temp_data-vtext.
    MOVE 'Cust Pmt' TO i_temp_data-vvtext.
    ENDIF.
    ENDIF.
    *Document type DZ and posting key 15
    IF i_bsid-blart = 'DZ' AND
    i_bsid-bschl EQ '15'.
    MOVE 'Cust Pmt' TO i_temp_data-vvtext.
    ENDIF.
    *Document type DZ and posting key 06.
    IF i_bsid-blart = 'DZ' AND
    i_bsid-bschl EQ '06'.
    MOVE 'Debit' TO i_temp_data-vvtext.
    ENDIF.
    *Document type DA and posting key 04, 14.
    IF i_bsid-blart = 'DA' AND
    i_bsid-bschl EQ '04' OR
    i_bsid-bschl EQ '14'.
    MOVE 'Cust Pmt' TO i_temp_data-vvtext.
    MOVE i_bsid-sgtxt TO i_temp_data-vtext.
    IF i_bsid-sgtxt IS INITIAL.
    MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
    ENDIF.
    ENDIF.
    ENDIF.
    *billing period
    IF i_bsid-blart = 'RV' AND i_bsid-bschl = '01'.
    PERFORM billing_period USING i_temp_data-belnr
    i_temp_data-vbeln.
    ENDIF.
    AT END OF belnr.
    at end of zuonr.
    APPEND i_temp_data.
    CLEAR i_temp_data.
    ENDAT.
    ENDLOOP.
    PERFORM material_details.
    ENDFORM. " Get_Arrear_Days
    *& Form FORMAT_FINAL_DATA
    text
    FORM format_final_data.
    PERFORM pop_format_grp_curr_detail.
    CLEAR: itab_temp, i_total.
    REFRESH: itab_temp, i_total.
    itab_temp] = itab[.
    CLEAR itab.
    REFRESH itab.
    LOOP AT itab_temp.
    CLEAR itab.
    itab = itab_temp.
    CLEAR: itab-matnr.
    IF itab-belnr+0(2) = '14'.
    *Adding two 00 for the left alignment.
    CONCATENATE '00' itab-xblnr
    INTO itab-inv_chk.
    CONDENSE itab-inv_chk NO-GAPS.
    itab-inv_chk = itab-xblnr.
    itab-xblnr = itab-belnr.
    ELSE.
    itab-inv_chk = itab-belnr.
    ENDIF.
    COLLECT itab.
    ENDLOOP.
    CLEAR v_stat.
    SORT itab BY days inv_chk total DESCENDING.
    LOOP AT itab.
    *To display Aging totals in usd (if v_stat ne f) for
    *company code 1100,1300,2000.
    IF itab-bukrs NE '1100' AND
    itab-bukrs NE '1300' AND
    itab-bukrs NE '2000'.
    v_stat = 'F'.
    ENDIF.
    CLEAR: i_last-vvtext, tvzbt.
    MOVE-CORRESPONDING itab TO i_last.
    APPEND i_last.
    CLEAR i_last.
    ENDLOOP.
    ENDFORM. " FORMAT_FINAL_DATA
    *& Form POP_FORMAT_grp_CURR_DETAIL
    text
    FORM pop_format_grp_curr_detail.
    Populating the Final Internal table for report by Group Currency.
    CLEAR x_amt.
    SORT i_temp_data.
    LOOP AT i_temp_data.
    CLEAR: v_count.
    IF i_temp_data-sgtxt+0(10) = 'Spcfy in p'.
    i_temp_data-sgtxt = i_temp_data-sgtxt+32(18).
    MOVE i_temp_data-sgtxt TO i_temp_data-vtext.
    MODIFY i_temp_data.
    ENDIF.
    IF r_comp = 'X'.
    IF i_temp_data-days LT 0.
    x_amt-amt00_ls = x_amt-amt00_ls + i_temp_data-dmbtr.
    If between 1 and 30 Days.
    ELSEIF i_temp_data-days GE 0 AND i_temp_data-days LE 30.
    x_amt-00_30 = x_amt-00_30 + i_temp_data-dmbtr.
    If between 31 and 60 Days.
    ELSEIF i_temp_data-days GE 31 AND i_temp_data-days LE 60.
    x_amt-31_60 = x_amt-31_60 + i_temp_data-dmbtr.
    if between 61 and 90
    ELSEIF i_temp_data-days GE 61 AND i_temp_data-days LE 90.
    x_amt-61_90 = x_amt-61_90 + i_temp_data-dmbtr.
    if between 91 and 120
    ELSEIF i_temp_data-days GE 91 AND i_temp_data-days LE 120.
    x_amt-91_120 = x_amt-91_120 + i_temp_data-dmbtr.
    if > 120
    ELSEIF i_temp_data-days GT 120.
    x_amt-120pls = x_amt-120pls + i_temp_data-dmbtr.
    ENDIF.
    ELSE.
    if the group currency is selected
    IF i_temp_data-days LT 0.
    x_amt-amt00_ls = x_amt-amt00_ls + i_temp_data-dmbe2.
    If between 1 and 30 Days.
    ELSEIF i_temp_data-days GE 0 AND i_temp_data-days LE 30.
    x_amt-00_30 = x_amt-00_30 + i_temp_data-dmbe2.
    If between 31 and 60 Days.
    ELSEIF i_temp_data-days GE 31 AND i_temp_data-days LE 60.
    x_amt-31_60 = x_amt-31_60 + i_temp_data-dmbe2.
    if between 61 and 90
    ELSEIF i_temp_data-days GE 61 AND i_temp_data-days LE 90.
    x_amt-61_90 = x_amt-61_90 + i_temp_data-dmbe2.
    if between 91 and 120
    ELSEIF i_temp_data-days GE 91 AND i_temp_data-days LE 120.
    x_amt-91_120 = x_amt-91_120 + i_temp_data-dmbe2.
    if > 120
    ELSEIF i_temp_data-days GT 120.
    x_amt-120pls = x_amt-120pls + i_temp_data-dmbe2.
    ENDIF.
    ENDIF.
    Get Customer Name.
    SELECT SINGLE name1
    INTO itab-name1
    FROM kna1
    WHERE kunnr = i_temp_data-kunnr.
    Invoice and year
    AT END OF rebzg.
    READ TABLE i_temp_data INDEX sy-tabix.
    itab-zuonr = i_temp_data-zuonr.
    itab-bukrs = i_temp_data-bukrs.
    itab-kunnr = i_temp_data-kunnr.
    itab-belnr = i_temp_data-belnr.
    itab-gjahr = i_temp_data-gjahr.
    IF r_comp EQ 'X'.
    itab-waers = i_temp_data-waers.
    ELSE.
    itab-waers = 'USD'.
    ENDIF.
    itab-zfbdt = i_temp_data-zfbdt.
    itab-zterm = i_temp_data-zterm.
    itab-amt00_30 = x_amt-amt00_ls + x_amt-00_30.
    itab-amt31_60 = x_amt-31_60.
    itab-amt61_90 = x_amt-61_90.
    itab-amt91_120 = x_amt-91_120.
    itab-amt120pls = x_amt-120pls.
    itab-total = x_amt-amt00_ls + x_amt-00_30 +
    x_amt-31_60 + x_amt-61_90 +
    x_amt-91_120 + x_amt-120pls.
    itab-kunnr_c = i_temp_data-kunnr_c.
    itab-name_c = i_temp_data-name_c.
    itab-kidno = i_temp_data-kidno.
    itab-matnr = i_temp_data-matnr.
    itab-inv_date = i_temp_data-inv_date.
    itab-rebzg = i_temp_data-rebzg.
    itab-xblnr = i_temp_data-xblnr.
    itab-vtext = i_temp_data-vtext.
    itab-sgtxt = i_temp_data-sgtxt.
    itab-days = i_temp_data-days.
    itab-bldat = i_temp_data-bldat.
    itab-vvtext = i_temp_data-vvtext.
    itab-zzihrez_e = i_temp_data-zzihrez_e.
    itab-blart = i_temp_data-blart.
    itab-plant = i_temp_data-plant.
    Populating table.
    APPEND: itab.
    CLEAR : itab,
    x_amt.
    v_count = 1.
    ENDAT.
    IF v_count NE 1.
    itab-zuonr = i_temp_data-zuonr.
    itab-bukrs = i_temp_data-bukrs.
    itab-kunnr = i_temp_data-kunnr.
    itab-belnr = i_temp_data-belnr.
    itab-gjahr = i_temp_data-gjahr.
    itab-bldat = i_temp_data-bldat.
    IF r_comp EQ 'X'.
    itab-waers = i_temp_data-waers.
    ELSE.
    itab-waers = 'USD'.
    ENDIF.
    itab-zfbdt = i_temp_data-zfbdt.
    itab-zterm = i_temp_data-zterm.
    itab-kunnr_c = i_temp_data-kunnr_c.
    itab-name_c = i_temp_data-name_c.
    itab-kidno = i_temp_data-kidno.
    itab-matnr = i_temp_data-matnr.
    itab-inv_date = i_temp_data-inv_date.
    itab-rebzg = i_temp_data-rebzg.
    itab-xblnr = i_temp_data-xblnr.
    itab-vtext = i_temp_data-vtext.
    itab-sgtxt = i_temp_data-sgtxt.
    itab-days = i_temp_data-days.
    itab-zzihrez_e = i_temp_data-zzihrez_e.
    itab-plant = i_temp_data-plant.
    itab-vvtext = i_temp_data-vvtext.
    itab-blart = i_temp_data-blart.
    IF itab-matnr NE space.
    APPEND itab.
    CLEAR itab-plant.
    ELSE.
    ON CHANGE OF i_temp_data-kidno.
    READ TABLE i_temp_data INDEX sy-tabix.
    itab-zuonr = i_temp_data-zuonr.
    itab-bukrs = i_temp_data-bukrs.
    itab-kunnr = i_temp_data-kunnr.
    itab-belnr = i_temp_data-belnr.
    itab-gjahr = i_temp_data-gjahr.
    itab-bldat = i_temp_data-bldat.
    IF r_comp EQ 'X'.
    itab-waers = i_temp_data-waers.
    ELSE.
    itab-waers = 'USD'.
    ENDIF.
    itab-zfbdt = i_temp_data-zfbdt.
    itab-zterm = i_temp_data-zterm.
    itab-amt00_30 = x_amt-amt00_ls + x_amt-00_30.
    itab-amt31_60 = x_amt-31_60.
    itab-amt61_90 = x_amt-61_90.
    itab-amt91_120 = x_amt-91_120.
    itab-amt120pls = x_amt-120pls.
    itab-total = x_amt-amt00_ls + x_amt-00_30 +
    x_amt-31_60 + x_amt-61_90 +
    x_amt-91_120 + x_amt-120pls.
    itab-kunnr_c = i_temp_data-kunnr_c.
    itab-name_c = i_temp_data-name_c.
    itab-kidno = i_temp_data-kidno.
    itab-matnr = i_temp_data-matnr.
    itab-inv_date = i_temp_data-inv_date.
    itab-rebzg = i_temp_data-rebzg.
    itab-xblnr = i_temp_data-xblnr.
    itab-vtext = i_temp_data-vtext.
    itab-sgtxt = i_temp_data-sgtxt.
    itab-days = i_temp_data-days.
    itab-zzihrez_e = i_temp_data-zzihrez_e.
    itab-vvtext = i_temp_data-vvtext.
    itab-plant = i_temp_data-plant.
    APPEND itab.
    CLEAR: x_amt-amt00_ls, x_amt-00_30, x_amt-31_60,
    x_amt-61_90, x_amt-91_120 , x_amt-120pls.
    ENDON.
    ENDIF.
    CLEAR: itab.
    ENDIF.
    ENDLOOP.
    ENDFORM. " POP_FORMAT_grp_CURR_DETAIL
    *& Form material_details
    text
    --> p1 text
    <-- p2 text
    FORM material_details.
    SORT itab_details.
    DELETE ADJACENT DUPLICATES FROM itab_details.
    LOOP AT itab_details.
    CLEAR: v_counter, v_gjahr, v_kunnr, v_prodh, v_vbeln,
    v_vvtext, v_vtext.
    v_gjahr = itab_details-gjahr.
    v_kunnr = itab_details-kunnr.
    *Invoice Date/Billing date
    SELECT SINGLE fkdat FROM vbrk INTO v_inv_date
    WHERE vbeln = itab_details-xblnr.
    *material number, description and product hierarchy
    SELECT matnr arktx prodh FROM vbrp
    INTO (v_matnr, v_arktx, v_prodh)
    WHERE vbeln = itab_details-xblnr AND
    uepos = '00000'.
    CLEAR: v_vdatu, v_posnr, v_auart, v_prctr, v_zzihrez,
    v_kunnr_c, v_name1, v_name2, v_vtext, v_vvtext.
    *Find the contract/order no
    SELECT SINGLE vbelv posnv FROM vbfa INTO (v_vbeln, v_posnr)
    WHERE vbeln = itab_details-xblnr
    AND vbtyp_v IN ('C','G').
    *delivery date, document type, plant and reservation no
    SELECT SINGLE vbakvdatu vbakauart vbapprctr vbapzzihrez_e
    INTO (v_vdatu, v_auart, v_prctr, v_zzihrez)
    FROM vbak INNER JOIN vbap ON vbakvbeln = vbapvbeln
    WHERE vbap~vbeln = v_vbeln AND
    vbap~posnr = v_posnr AND
    vbap~abgru = space.
    *billing type
    SELECT SINGLE * FROM vbkd WHERE vbeln = v_vbeln.
    IF vbkd-bsark NE 'ZG01' OR vbkd-bsark NE 'ZO02'.
    SELECT SINGLE vtext FROM t176t INTO v_vvtext
    WHERE bsark = vbkd-bsark
    AND spras EQ sy-langu.
    ELSE.
    MOVE 'One Time' TO v_vvtext.
    ENDIF.
    *getting only the reservation number (no text)
    IF vbkd-ihrez_e+0(11) CO
    '0123456789'.
    ELSE.
    v_zzihrez = space.
    ENDIF.
    *location
    CONCATENATE '000000' v_zzihrez+0(4) INTO v_prctr.
    *plant name
    CLEAR v_plant.
    SELECT SINGLE ktext FROM cepct INTO v_plant WHERE
    prctr = v_prctr AND
    spras = sy-langu.
    *client no and name
    SELECT SINGLE vbpakunnr kna1name1 kna1~name2
    INTO (v_kunnr_c, v_name1, v_name2)
    FROM vbpa INNER JOIN kna1 ON
    vbpakunnr = kna1kunnr
    WHERE vbpa~vbeln = v_vbeln AND
    vbpa~parvw = 'Z3'.
    CONCATENATE v_name1 v_name2 INTO v_name_c
    SEPARATED BY space.
    READ TABLE i_temp_data WITH KEY bukrs = itab_details-bukrs
    belnr = itab_details-belnr
    gjahr = itab_details-gjahr.
    IF sy-subrc = 0.
    CLEAR: v_tabix.
    v_tabix = sy-tabix.
    IF v_counter IS INITIAL.
    MOVE v_plant TO i_temp_data-plant.
    MOVE v_zzihrez TO i_temp_data-zzihrez_e.
    MOVE v_kunnr_c TO i_temp_data-kunnr_c.
    MOVE v_name_c TO i_temp_data-name_c.
    MOVE v_gjahr TO i_temp_data-gjahr.
    MOVE v_kunnr TO i_temp_data-kunnr.
    IF v_auart EQ 'ZOTO' AND i_temp_data-inv_date IS INITIAL.
    MOVE v_inv_date TO i_temp_data-inv_date.
    ELSEIF i_temp_data-inv_date IS INITIAL.
    MOVE v_vdatu TO i_temp_data-inv_date.
    ENDIF.
    IF i_temp_data-vtext IS INITIAL.
    MOVE v_arktx TO i_temp_data-vtext.
    ENDIF.
    IF i_temp_data-vvtext IS INITIAL.
    MOVE v_vvtext TO i_temp_data-vvtext.
    ENDIF.
    MODIFY i_temp_data INDEX v_tabix.
    CLEAR i_temp_data.
    v_counter = 'T'.
    CLEAR: v_matnr,v_arktx,v_vbeln,v_name_c,v_vtext, v_prodh,
    v_kunnr_c, v_name1,v_name2, v_vdatu, v_vvtext.
    ELSE.
    CLEAR:i_temp_data-dmbe2, i_temp_data-dmbtr. " i_temp_data-wrbtr
    MOVE v_matnr TO i_temp_data-matnr.
    MOVE v_plant TO i_temp_data-plant.
    MOVE v_zzihrez TO i_temp_data-zzihrez_e.
    MOVE v_kunnr_c TO i_temp_data-kunnr_c.
    MOVE v_name_c TO i_temp_data-name_c.
    MOVE v_gjahr TO i_temp_data-gjahr.
    MOVE v_kunnr TO i_temp_data-kunnr.
    IF v_auart EQ 'ZOTO' AND i_temp_data-inv_date IS INITIAL.
    MOVE v_inv_date TO i_temp_data-inv_date.
    ELSEIF i_temp_data-inv_date IS INITIAL.
    MOVE v_vdatu TO i_temp_data-inv_date.
    ENDIF.
    MOVE v_arktx TO i_temp_data-vtext.
    APPEND i_temp_data.
    CLEAR i_temp_data.
    ENDIF.
    ENDIF.
    ENDSELECT.
    CLEAR:
    i_temp_data-kunnr_c,
    i_temp_data-name_c,i_temp_data-inv_date,
    i_temp_data-vtext.
    CLEAR: v_matnr,v_arktx,v_vbeln,v_name_c,
    v_kunnr_c, v_name1,v_name2,v_inv_date, v_vdatu,
    v_vtext, v_prodh.
    ENDLOOP.
    ENDFORM. " material_details
    *& Form get_address
    text
    FORM get_address.
    Get Address
    CLEAR: kna1, x_kna1, first_name, last_name,pafkt, lang, v_land.
    SELECT SINGLE * FROM kna1 INTO kna1 WHERE kunnr = i_last-kunnr.
    SELECT SINGLE name1 namev pafkt parla FROM knvk
    INTO (last_name, first_name, pafkt, lang)
    WHERE kunnr = i_last-kunnr
    AND abtnr = '0003'. "financial department
    IF sy-subrc NE 0.
    SELECT SINGLE name1 namev pafkt parla FROM knvk
    INTO (last_name, first_name, pafkt, lang)
    WHERE kunnr = i_last-kunnr.
    ENDIF.
    IF lang = ' '.
    lang = 'E'.
    ENDIF.
    SELECT SINGLE vtext FROM tpfkt INTO x_kna1-ptext
    WHERE pafkt = pafkt
    AND spras = lang.
    SELECT SINGLE name1 name2 street country FROM
    adrc INTO (x_kna1-name1, x_kna1-name2,
    x_kna1-street, v_land)
    WHERE addrnumber = kna1-adrnr.
    SELECT SINGLE landx FROM t005t INTO x_kna1-landx WHERE land1 = v_land
    AND spras = lang.
    TRANSLATE x_kna1-landx TO UPPER CASE. "#EC SYNTCHAR added by sony
    MOVE kna1-kunnr TO x_kna1-kunnr.
    MOVE kna1-ort01 TO x_kna1-ort01.
    MOVE kna1-regio TO x_kna1-regio.
    MOVE kna1-pstlz TO x_kna1-pstlz.
    MOVE p_bdate TO x_kna1-agdate.
    APPEND x_kna1.
    CLEAR: x_kna1.
    ENDFORM. " get_addres
    *& Form fetch_data_vender
    text
    --> p1 text
    <-- p2 text
    FORM fetch_data_vender.
    SELECT lifnr FROM kna1 INTO TABLE itab_vender
    WHERE kunnr IN s_kunnr.
    LOOP AT itab_vender.
    Fetch data from BSIK into Internal table I_BSIK.
    SELECT *
    FROM bsik
    APPENDING TABLE i_bsik
    WHERE bukrs IN s_bukrs AND
    lifnr EQ itab_vender-vender AND
    budat LE p_bdate AND
    blart IN ('KA', 'KG', 'KR', 'KZ', 'KF').
    Fetch data from BSAK into Internal table I_BSAK.
    SELECT *
    FROM bsak "#EC ENHOK "added by sony 06/05/08
    APPENDING TABLE i_bsik
    WHERE bukrs IN s_bukrs AND
    lifnr EQ itab_vender-vender AND
    budat LE p_bdate AND
    augdt GT p_bdate AND
    blart IN ('KA', 'KG', 'KR', 'KZ', 'KF').
    ENDLOOP.
    DELETE i_bsik WHERE ( bukrs = '1500' OR bukrs = '3000' ) AND
    ( umsks = 'E' OR umskz = 'E' ).
    ENDFORM. " fetch_data_vender
    *& Form GET_ARREAR_DAYS_vender
    text
    --> p1 text
    <-- p2 text
    FORM get_arrear_days_vender.
    SORT i_bsik BY mandt bukrs belnr.
    CLEAR: v_tabix.
    LOOP AT i_bsik.
    v_tabix = sy-tabix.
    SELECT SINGLE * FROM kna1 WHERE lifnr = i_bsik-lifnr.
    MOVE i_bsik-bukrs TO itab_details-bukrs.
    MOVE i_bsik-xblnr TO itab_details-xblnr.
    MOVE i_bsik-belnr TO itab_details-belnr.
    MOVE i_bsik-gjahr TO itab_details-gjahr.
    MOVE kna1-kunnr TO itab_details-kunnr.
    APPEND itab_details.
    CLEAR itab_details.
    CLEAR x_item.
    AT NEW bukrs.
    *company code details
    READ TABLE i_bsik INDEX sy-tabix.
    CLEAR x_t001.
    SELECT SINGLE * FROM t001
    INTO x_t001
    WHERE bukrs = i_bsik-bukrs.
    ENDAT.
    MOVE-CORRESPONDING i_bsik TO x_item.
    x_item-koart = 'D'. " Debitor - Customer Indicator
    x_item-konto = kna1-kunnr. " Debitor - Customer Number
    x_item-dmshb = bsik-dmbtr.
    x_item-wrshb = bsik-wrbtr.
    Function module to get ARREAR days.
    CALL FUNCTION 'ITEM_DERIVE_FIELDS'
    EXPORTING
    s_t001 = x_t001
    s_bsegp = x_bsegp
    key_date = p_bdate
    CHANGING
    s_item = x_item
    EXCEPTIONS
    bad_input = 1
    OTHERS = 2.
    IF sy-subrc = 0.
    Populate I_TEMP_DATA for further processing.
    i_temp_data-bukrs = i_bsik-bukrs.
    i_temp_data-kunnr = kna1-kunnr.
    i_temp_data-belnr = i_bsik-belnr.
    i_temp_data-bldat = i_bsik-bldat. "Document date in document
    i_temp_data-shkzg = i_bsik-shkzg.
    i_temp_data-zfbdt = i_bsik-zfbdt. " Base line date
    i_temp_data-zterm = i_bsik-zterm. "Terms of payment key
    i_temp_data-waers = i_bsik-waers.
    i_temp_data-days = x_item-verzn. " days in arrs
    i_temp_data-gjahr = i_bsik-gjahr. " year
    i_temp_data-kidno = i_bsik-kidno. " Payment Reference
    i_temp_data-rebzg = i_bsik-rebzg. " Number of the Invoice the
    "Transaction Belongs to
    i_temp_data-xblnr = i_bsik-xblnr.
    i_temp_data-sgtxt = i_bsik-sgtxt. " Item Text
    Changing the Sign
    IF i_bsik-shkzg = 'H'.
    i_temp_data-dmbe2 = -1 * i_bsik-dmbe2.
    i_temp_data-dmbtr = -1 * i_bsik-dmbtr.
    ELSE.
    i_temp_data-dmbe2 = i_bsik-dmbe2.
    i_temp_data-dmbtr = i_bsik-dmbtr.
    ENDIF.
    ENDIF.
    APPEND i_temp_data.
    CLEAR i_temp_data.
    ENDLOOP.
    PERFORM material_details.
    ENDFORM. " Get_Arrear_DaysENDFORM.
    " GET_ARREAR_DAYS_vender
    *& Form convert_pdf
    text
    --> p1 text
    <-- p2 text
    FORM convert_pdf.
    CLEAR: tsp01.
    CLEAR: mtab_pdf, mi_bytecount.
    REFRESH mtab_pdf.
    FREE mtab_pdf.
    ***convert to PDF format
    CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
    format = 'PDF'
    IMPORTING
    bin_filesize = mi_bytecount
    TABLES
    otf = i_otf_final
    lines = mtab_pdf
    EXCEPTIONS
    err_max_linewidth = 1
    err_format = 2
    err_conv_not_possible = 3
    OTHERS = 4.
    IF sy-subrc 0.
    ENDIF.
    CONDENSE itab-kunnr NO-GAPS.
    CONCATENATE 'C:\' itab-kunnr '_' sy-datum '.pdf' INTO downfile.
    IF ch_down = 'X'.
    PERFORM download_pdf.
    ENDIF.
    IF ch_email = 'X'.
    PERFORM send_email.
    ENDIF.
    ENDFORM. " convert_pdf
    *& Form download_pdf
    text
    --> p1 text
    <-- p2 text
    FORM download_pdf.
    DATA: i_downfile TYPE string.
    i_downfile = downfile.
    CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
    bin_filesize = mi_bytecount
    filename = i_downfile
    filetype = 'BIN'
    IMPORTING
    FILELENGTH =
    TABLES
    data_tab = mtab_pdf[]
    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.
    ENDIF.
    ENDFORM. " download_pdf
    *& Form send_email
    text
    --> p1 text
    <-- p2 text
    FORM send_email.
    CLEAR: packing_list[],
    pdf[],
    contents_txt[],
    contents_hex[],
    receivers[],
    att_pos,
    document_data,
    esubject,emsgs[],
    w_contents_hex.
    PERFORM packing_list.
    PERFORM set_data.
    IF v_check NE 'X'.
    PERFORM send_email_message.
    ENDIF.
    ENDFORM. " send_email
    *& Form packing_list
    text
    --> p1 text
    <-- p2 text
    FORM packing_list.
    Concatenate the PDF material into the attachments table.
    PERFORM append_pdf_to_attachments USING mi_bytecount.
    Describe the attachment
    CLEAR packing_list.
    REFRESH packing_list.
    packing_list-transf_bin = 'X'.
    ADD 1 TO att_pos.
    packing_list-body_start = att_pos.
    DESCRIBE TABLE contents_hex LINES att_pos.
    packing_list-body_num = att_pos.
    packing_list-doc_type = 'PDF'.
    CONCATENATE 'Statement Date'
    sy-datum4(2) '/' sy-datum6(2) '/'
    sy-datum+2(2) '-' 'Customer no -' itab-kunnr
    INTO packing_list-obj_descr.
    packing_list-obj_langu = 'E'.
    packing_list-doc_size = mi_bytecount.
    APPEND packing_list.
    ENDFORM. " packing_list
    *& Form set_data
    text
    --> p1 text
    <-- p2 text
    FORM set_data.
    CLEAR: sy-tfill.
    DESCRIBE TABLE contents_hex LINES sy-tfill.
    IF sy-tfill GT 0.
    DATA: lines TYPE TABLE OF tline WITH HEADER LINE.
    By this point, the attachments have been created. Now we supply body
    text and set up the recipients.
    CONCATENATE 'Customer Statement for Customer - '
    itab-kunnr esubject INTO esubject.
    The message header information
    CLEAR document_data.
    document_data-obj_name = 'ZWRAPPER'.
    document_data-obj_descr = esubject.
    document_data-obj_langu = 'E'.
    document_data-obj_prio = '1'.
    CLEAR: contents_txt, contents_txt], itext[, itext.
    IF sy-sysid NE 'R3P'.
    CONCATENATE 'Please ignore this mail. This is part of testing from '
    sy-sysid INTO contents_txt SEPARATED BY space.
    APPEND contents_txt.
    CLEAR: contents_txt.
    APPEND contents_txt.
    ENDIF.
    CLEAR vv_text.
    CONCATENATE 'Enter Body of the Email and SAVE it for customer '
    itab-kunnr itab-name1 INTO vv_text SEPARATED BY space.
    EDITOR-CALL FOR itext TITLE vv_text.
    LOOP AT itext.
    contents_txt = itext-text.
    APPEND contents_txt.
    ENDLOOP.
    Describe the body data. This descriptor has to be the first, in front
    of all the attachments.
    CLEAR packing_list.
    packing_list-transf_bin = space.
    packing_list-body_start = 1.
    DESCRIBE TABLE contents_txt LINES packing_list-body_num.
    packing_list-doc_type = 'RAW'.
    packing_list-obj_langu = 'E'.
    INSERT packing_list INDEX 1.
    Set up the recipients.
    CLEAR: receivers, receivers[], sy-tfill.
    CLEAR: usr21, adr6.
    *find email address.
    IF sy-sysid = 'R3P'.
    SELECT prsnr FROM knvk INTO knvk-prsnr WHERE kunnr = itab-kunnr.
    SELECT SINGLE adrnr name1 name2 FROM kna1 INTO
    (kna1-adrnr, kna1-name1, kna1-name2)
    WHERE kunnr = itab-kunnr.
    SELECT SINGLE smtp_addr INTO v_email FROM adr6
    WHERE addrnumber EQ kna1-adrnr.
    IF sy-subrc NE 0.
    CLEAR: v_email.
    ELSE.
    EXIT.
    ENDIF.
    ENDSELECT.
    ENDIF.
    *find the user email address.
    CLEAR: usr21, adr6.
    SELECT SINGLE * FROM usr21 WHERE bname = sy-uname.
    CLEAR adr6.
    SELECT SINGLE * FROM adr6 WHERE addrnumber = usr21-addrnumber AND
    persnumber = usr21-persnumber.
    v_ccemail = adr6-smtp_addr.
    CLEAR:i_fields.
    REFRESH:i_fields.
    i_fields-tabname = 'COMPMSG'.
    i_fields-fieldname = 'TEXT'.
    i_fields-fieldtext = 'Email'.
    i_fields-value = v_email.
    APPEND i_fields.
    CLEAR i_fields.
    i_fields-tabname = 'T100'.
    i_fields-fieldname = 'TEXT'.
    i_fields-fieldtext = 'CC to'.
    i_fields-value = v_ccemail.
    APPEND i_fields.
    CLEAR i_fields.
    CLEAR v_returncode.
    CALL FUNCTION 'POPUP_GET_VALUES'
    EXPORTING
    popup_title = 'Email Address.'
    start_column = '25'
    start_row = '2'
    IMPORTING
    returncode = v_returncode
    TABLES
    fields = i_fields
    EXCEPTIONS
    error_in_fields = 1
    OTHERS = 2.
    IF sy-subrc 0.
    ENDIF.
    IF v_returncode NE 'A'.
    *find the new condition value (table name and filed name took itfor char
    LOOP AT i_fields WHERE tabname = 'COMPMSG' AND fieldname = 'TEXT'.
    v_email = i_fields-value.
    ENDLOOP.
    LOOP AT i_fields WHERE tabname = 'T100'
    AND fieldname = 'TEXT'.
    v_ccemail = i_fields-value.
    ENDLOOP.
    ENDIF.
    receivers-receiver = v_email.
    receivers-rec_type = 'U'. "..assume it's an internet address
    APPEND receivers.
    receivers-receiver = v_ccemail.
    receivers-rec_type = 'U'.
    receivers-copy = 'X'.
    APPEND receivers.
    SORT receivers BY receiver.
    DELETE ADJACENT DUPLICATES FROM receivers COMPARING receiver.
    ENDIF.
    CLEAR: v_check.
    IF v_email = space.
    v_check = 'X'.
    MOVE itab-kunnr TO ioutput-kunnr.
    MOVE v_kname TO ioutput-kname.
    MOVE v_email TO ioutput-email.
    MOVE 'X' TO ioutput-error.

    Hi
    Looks like BASIS issue.
    Pls check the OSS Note - Note 787418 - Sent documents are not readable after upgrade
    Pls contact your BASIS person
    Regards
    MD

  • Post Good Issue Error

    When I Press the Post Goods Issue Button for a delivery in SD the error dump appears.
    Runtime Errors         MESSAGE_TYPE_X
    Date and Time          10/15/2008 06:38:52
    Short dump has not been completely stored (too big)
    Short text
    The current application triggered a termination with a short dump.
    What happened?
    The current application program detected a situation which really
    should not occur. Therefore, a termination with a short dump was
    triggered on purpose by the key word MESSAGE (type X).
    What can you do?
    Note down which actions and inputs caused the error.
    To process the problem further, contact you SAP system
    administrator.
    Using Transaction ST22 for ABAP Dump Analysis, you can look
    at and manage termination messages, and you can also
    keep them for a long time.
    Error analysis
    Short text of error message:
    No RFC destination is defined for SAP Global Trade Services
    Long text of error message:
    Technical information about the message:
    Message class....... "/SAPSLL/PLUGINR3"
    Number.............. 002
    Variable 1.......... " "
    Variable 2.......... " "
    Variable 3.......... " "
    Variable 4.......... " "
    How to correct the error
    Probably the only way to eliminate the error is to correct the program.
    If the error occures in a non-modified SAP program, you may be able to
    find an interim solution in an SAP Note.
    If you have access to SAP Notes, carry out a search with the following
    keywords:
    "MESSAGE_TYPE_X" " "
    "SAPLMBWL" or "LMBWLU21"
    "MB_POST_GOODS_MOVEMENT"
    If you cannot solve the problem yourself and want to send an error
    notification to SAP, include the following information:
    1. The description of the current problem (short dump)
    To save the description, choose "System->List->Save->Local File
    (Unconverted)".
    2. Corresponding system log
    Display the system log by calling transaction SM21.
    Restrict the time interval to 10 minutes before and five minutes
    after the short dump. Then choose "System->List->Save->Local File
    (Unconverted)".
    3. If the problem occurs in a problem of your own or a modified SAP
    program: The source code of the program
    In the editor, choose "Utilities->More
    Utilities->Upload/Download->Download".
    4. Details about the conditions under which the error occurred or which
    actions and input led to the error.
    System environment
    SAP-Release 700
    Application server... "biw7sap"
    Network address...... "68.88.249.38"
    Operating system..... "Windows NT"
    Release.............. "5.2"
    Hardware type........ "4x Intel 801586"
    Character length.... 16 Bits
    Pointer length....... 32 Bits
    Work process number.. 1
    Shortdump setting.... "full"
    Database server... "BIW7SAP"
    Database type..... "ORACLE"
    Database name..... "ECS"
    Database user ID.. "SAPSR3"
    Char.set.... "C"
    SAP kernel....... 700
    created (date)... "Mar 20 2007 00:45:21"
    create on........ "NT 5.0 2195 Service Pack 4 x86 MS VC++ 13.10"
    Database version. "OCI_10201_SHARE (10.2.0.1.0) "
    Patch level. 102
    Patch text.. " "
    Database............. "ORACLE 9.2.0.., ORACLE 10.1.0.., ORACLE 10.2.0.."
    SAP database version. 700
    Operating system..... "Windows NT 5.0, Windows NT 5.1, Windows NT 5.2"
    Memory consumption
    Roll.... 8176
    EM...... 26130600
    Heap.... 0
    Page.... 57344
    MM Used. 19070624
    MM Free. 785208
    User and Transaction
    Client.............. 800
    User................ "CUSER14"
    Language key........ "E"
    Transaction......... "VL02N "
    Program............. "SAPLMBWL"
    Screen.............. "SAPMV50A 1000"
    Screen line......... 39
    Information on where terminated
    Termination occurred in the ABAP program "SAPLMBWL" - in
    "MB_POST_GOODS_MOVEMENT".
    The main program was "SAPMV50A ".
    In the source code you have the termination point in line 59
    of the (Include) program "LMBWLU21".
    Source Code Extract
    Line
    SourceCde
    29
       when a goods movement for an inbound or outbound delivery is posted
    30
       directly from VL31N/ VL01N, XBLNR is not yet known when we call
    31
       CKMV_AC_DOCUMENT_CREATE, but the number is supposed to be stored in
    32
       BKPF as well. There is no other way to forward XBLNR to FI as not
    33
       every document is posted by MB_CREATE -> a new function module in
    34
       MBWL for transferring the information, called by FI, meant to load
    35
       the complete function group for all MBxx postings when this isn't
    36
       required (Performance). Would be the better way to transport the
    37
       information after switching off MBxx in later release.
    38
       corresponding IMPORT ... FROM MEMORY ... can be found in
    39
       AC_DOCUMENT_POST (FORM FI_DOCUMENT_PREPARE (LFACIF5D))
    40
    l_mem_id = 'MKPF-XBLNR'.                                   " 641365
    41
    EXPORT xblnr = xblnr_sd TO MEMORY ID l_mem_id.             " 641365
    42
    ENDIF.
    43
    IF xmkpf-xabln IS INITIAL.                               "note 434093
    44
    CALL FUNCTION 'MB_XAB_NUMBER_GET'.                   "note 434093
    45
    ENDIF.                                                   "note 434093
    46
    47
    ENHANCEMENT-POINT MB_POST_GOODS_MOVEMENTS_01 SPOTS ES_SAPLMBWL STATIC.
    48
    49
    ENHANCEMENT-POINT MB_POST_GOODS_MOVEMENTS_02 SPOTS ES_SAPLMBWL.
    50
    CALL FUNCTION 'MB_CREATE_MATERIAL_DOCUMENT_UT'
    51
    EXCEPTIONS
    52
    error_message = 4.
    53
    As soon as we have started to put things into UPDATE TASK, we must
    54
    ensure that errors definitely terminate the transaction.
    55
    MESSAGE A is not sufficient because it can be catched from
    56
    external callers which COMMIT WORK afterwards, resulting in
    57
    incomplete updates. Read note 385830 for the full story.
    58
    IF NOT sy-subrc IS INITIAL.
    >>>>>
    MESSAGE ID sy-msgid TYPE x NUMBER sy-msgno WITH            "385830
    60
    sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    61
        MESSAGE A263.
    62
    ENDIF.
    63
    Optische Archivierung
    64
    Spaete Erfassung mit Barcode
    65
    Redesign of barcode handling -> note 780365
    66
    PERFORM barcode_update(sapmm07m) USING xmkpf-mblnr
    67
    xmkpf-mjahr
    68
    barcode.
    69
    70
    MOVE-CORRESPONDING xmkpf TO emkpf.
    71
    CALL FUNCTION 'MB_MOVEMENTS_REFRESH'
    72
    EXCEPTIONS
    73
    error_message = 4.
    74
    MOVE-CORRESPONDING xmkpf TO emkpf.
    75
    CALL FUNCTION 'MB_MOVEMENTS_REFRESH'
    76
    EXCEPTIONS
    77
    error_message = 4.
    78
    IF NOT sy-subrc IS INITIAL.
    Contents of system fields
    Name
    Val.
    SY-SUBRC
    4
    SY-INDEX
    0
    SY-TABIX
    1
    SY-DBCNT
    1
    SY-FDPOS
    6
    SY-LSIND
    0
    SY-PAGNO
    0
    SY-LINNO
    1
    SY-COLNO
    1
    SY-PFKEY
    W0
    SY-UCOMM
    WABU_T
    SY-TITLE
    Delivery 80015203 Change: Overview
    SY-MSGTY
    X
    SY-MSGID
    /SAPSLL/PLUGINR3
    SY-MSGNO
    002
    SY-MSGV1
    SY-MSGV2
    SY-MSGV3
    SY-MSGV4
    SY-MODNO
    0
    SY-DATUM
    20081015
    SY-UZEIT
    063852
    SY-XPROG
    SAPLBPFC
    SY-XFORM
    CONVERSION_EXIT
    Active Calls/Events
    No.   Ty.          Program                             Include                             Line
    Name
    10 FUNCTION     SAPLMBWL                            LMBWLU21                               59
    MB_POST_GOODS_MOVEMENT
    9 FORM         SAPMV50A                            FV50XF0B_BELEG_SICHERN                769
    BELEG_SICHERN_POST
    8 FORM         SAPMV50A                            FV50XF0B_BELEG_SICHERN                 86
    BELEG_SICHERN_01
    7 FORM         SAPMV50A                            FV50XF0B_BELEG_SICHERN                 16
    BELEG_SICHERN
    6 FORM         SAPMV50A                            MV50AF0F_FCODE_SICH_OHNE_CHECK         10
    FCODE_SICH_OHNE_CHECK
    5 FORM         SAPMV50A                            MV50AF0F_FCODE_WABU                    11
    FCODE_WABU
    4 FORM         SAPLV00F                            LV00FF0F                               92
    FCODE_BEARBEITEN
    3 FUNCTION     SAPLV00F                            LV00FU02                               44
    SCREEN_SEQUENCE_CONTROL
    2 FORM         SAPMV50A                            MV50AF0F_FCODE_BEARBEITEN              62
    FCODE_BEARBEITEN
    1 MODULE (PAI) SAPMV50A                            MV50AI0F                               52
    FCODE_BEARBEITEN
    Chosen variables
    Name
    Val.
    No.      10 Ty.          FUNCTION
    Name  MB_POST_GOODS_MOVEMENT
    XBLNR_SD
    0080015203
    3333333333
    0080015203
    0000000000
    0000000000
    EMKPF
    000000000000000000          ##
    2222222222333333333333333333222222222200222222222222222222222222222222222222222222222222222222
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    XMSSA[]
    Table IT_589[0x196]
    FUNCTION-POOL=MBWLDATA=XMSSA[]
    Table reference: 307
    TABH+  0(20) = 00000000200D869300000000330100004D020000
    TABH+ 20(20) = 00000000C4000000FFFFFFFF04090300E01B0000
    TABH+ 40( 8) = 08000000C1108001
    store        = 0x00000000
    ext1         = 0x200D8693
    shmId        = 0     (0x00000000)
    id           = 307   (0x33010000)
    label        = 589   (0x4D020000)
    fill         = 0     (0x00000000)
    leng         = 196   (0xC4000000)
    loop         = -1    (0xFFFFFFFF)
    xtyp         = TYPE#000134
    occu         = 8     (0x08000000)
    access       = 1     (ItAccessStandard)
    idxKind      = 0     (ItIndexNone)
    uniKind      = 2     (ItUniqueNon)
    keyKind      = 1     (default)
    cmpMode      = 8     (cmpManyEq)
    occu0        = 0
    groupCntl    = 0
    rfc          = 0
    unShareable  = 0
    mightBeShared = 0
    sharedWithShmTab = 0
    isShmLockId  = 0
    gcKind       = 0
    isUsed       = 1
    isCtfyAble   = 1
    >>>>> Shareable Table Header Data <<<<<
    tabi         = Not allocated
    pghook       = Not allocated
    idxPtr       = Not allocated
    shmTabhSet   = Not allocated
    id           = Not allocated
    refCount     = Not allocated
    tstRefCount  = Not allocated
    lineAdmin    = Not allocated
    lineAlloc    = Not allocated
    shmVersId    = Not allocated
    shmRefCount  = Not allocated
    shmIsReadOnly = Not allocated
    >>>>> 1st level extension part <<<<<
    regHook      = 0x00000000
    collHook     = 0x00000000
    ext2         = 0xD80C8693
    >>>>> 2nd level extension part <<<<<
    tabhBack     = 0x980C8693
    delta_head   = 0000000000000000000000000000000000000000000000000000000000000000000000000000000
    pb_func      = 0x00000000
    pb_handle    = 0x00000000
    RRESWK
    22222222222
    00000000000
    00000000000
    00000000000
    %_SPACE
    2
    0
    0
    0
    L_MEM_ID
    MKPF-XBLNR
    4454254445
    DB06D82CE2
    0000000000
    0000000000
    RSJOBINFO
    00000000000000                                  ##
    2222222222222222222222222222222233333333333333222222222222222222222222222222222200
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000
    RNAME
    R
    52222
    20000
    00000
    00000
    SCREEN
    BT_UALL
    4555444222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
    24F51CC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    IT_RSTRUCT
    Table[initial]
    XMKPF-XABLN
    2222222222
    0000000000
    0000000000
    0000000000
    %_DUMMY$$
    2222
    0000
    0000
    0000
    SYST-REPID
    SAPLMBWL
    5454445422222222222222222222222222222222
    310CD27C00000000000000000000000000000000
    0000000000000000000000000000000000000000
    0000000000000000000000000000000000000000
    ODM07M[]
    Table[initial]
    GT_GOCOMP
    000000000000                                             ####              00000000000000
    3333333333332222222222222222222222222222222222222222222220000222222222222223333333333333322222
    000000000000000000000000000000000000000000000000000000000000C000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    SY-SUBRC
    4
    0000
    4000
    L_ATPCB
    22222
    00000
    00000
    00000
    XMKPF-MBLNR
    4900035075
    3333333333
    4900035075
    0000000000
    0000000000
    XMKPF-MJAHR
    2008
    3333
    2008
    0000
    0000
    BARCODE
    2222222222222222222222222222222222222222
    0000000000000000000000000000000000000000
    0000000000000000000000000000000000000000
    0000000000000000000000000000000000000000
    %_ARCHIVE
    2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    T003
    800WL49AMS                          XX  XXXXXH
    3335433445222222222222222222222222225522555554222222
    8007C491D3000000000000000000000000008800888888000000
    0000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000
    KNVV
    00000000                     000
    2222222222222222222222222222222223333333322222222222222222222233322222222222222222222222222222
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    T064B
    2222222222222222222222
    0000000000000000000000
    0000000000000000000000
    0000000000000000000000
    VGMSEG[]
    Table[initial]
    No.       9 Ty.          FORM
    Name  BELEG_SICHERN_POST
    MAT_AUF_HINWEIS_COPY
    2
    0
    0
    0
    XLIKP[]
    Table IT_392[1x2360]
    PROGRAM=SAPMV50ADATA=XLIKP[]
    Table reference: 197
    TABH+  0(20) = 082D1E94E0C8119300000000C500000088010000
    TABH+ 20(20) = 01000000380900003000000004FC0100D0070000
    TABH+ 40( 8) = 04000000C1108001
    store        = 0x082D1E94
    ext1         = 0xE0C81193
    shmId        = 0     (0x00000000)
    id           = 197   (0xC5000000)
    label        = 392   (0x88010000)
    fill         = 1     (0x01000000)
    leng         = 2360  (0x38090000)
    loop         = 48    (0x30000000)
    xtyp         = TYPE#000027
    occu         = 4     (0x04000000)
    access       = 1     (ItAccessStandard)
    idxKind      = 0     (ItIndexNone)
    uniKind      = 2     (ItUniqueNon)
    keyKind      = 1     (default)
    cmpMode      = 8     (cmpManyEq)
    occu0        = 0
    groupCntl    = 0
    rfc          = 0
    unShareable  = 0
    mightBeShared = 0
    sharedWithShmTab = 0
    isShmLockId  = 0
    gcKind       = 0
    isUsed       = 1
    isCtfyAble   = 1
    >>>>> Shareable Table Header Data <<<<<
    tabi         = 0x18081E94
    pgHook       = 0x00000000
    idxPtr       = 0x00000000
    shmTabhSet   = 0x00000000
    id           = 1541  (0x05060000)
    refCount     = 0     (0x00000000)
    tstRefCount  = 0     (0x00000000)
    lineAdmin    = 4     (0x04000000)
    lineAlloc    = 4     (0x04000000)
    shmVersId    = 0     (0x00000000)
    shmRefCount  = 1     (0x01000000)
    >>>>> 1st level extension part <<<<<
    regHook      = 0xA87F1B94
    collHook     = 0x00000000
    ext2         = 0x28940F93
    >>>>> 2nd level extension part <<<<<
    tabhBack     = 0x70A22B93
    delta_head   = 0000000000000000000000000000000000000000000000000000000000000000000000000000000
    pb_func      = 0x00000000
    pb_handle    = 0x00000000
    XLIKP
    8000080015203CUSER14     06580920081014      Z0011000LF   X20081016200810152008101420081017200
    3333333333333455453322222333333333333332222225333333344222533333333333333333333333333333333333
    800008001520335352140000006580920081014000000A0011000C6000820081016200810152008101420081017200
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    <%_L195>
    CVBAP
    8000000012132000020T-AS301           T-AS301                                       0201     Su
    3333333333333333333524533322222222222524533322222222222222222222222222222222222222233332222257
    80000000121320000204D13301000000000004D1330100000000000000000000000000000000000000002010000035
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    MAT_AUF_HINWEIS_GEPRUEFT
    2
    0
    0
    0
    <%_L195>-UPDKZ
    UPDKZ_DELETE
    D
    4
    4
    0
    0
    IVBPA52_PAGIND
    0.0.1.
    000
    00C
    VBUK_KEIN_KREDITCHECK
    2
    0
    0
    0
    XLIPS[]
    Table IT_83[1x3552]
    PROGRAM=SAPMV50ADATA=XLIPS[]
    Table reference: 50
    TABH+  0(20) = E8F54D93F0282893000000003200000053000000
    TABH+ 20(20) = 01000000E00D0000FFFFFFFF0400000080330000
    TABH+ 40( 8) = 04000000C1108401
    store        = 0xE8F54D93
    ext1         = 0xF0282893
    shmId        = 0     (0x00000000)
    id           = 50    (0x32000000)
    label        = 83    (0x53000000)
    fill         = 1     (0x01000000)
    leng         = 3552  (0xE00D0000)
    loop         = -1    (0xFFFFFFFF)
    xtyp         = TYPE#000260
    occu         = 4     (0x04000000)
    access       = 1     (ItAccessStandard)
    idxKind      = 0     (ItIndexNone)
    uniKind      = 2     (ItUniqueNon)
    keyKind      = 1     (default)
    cmpMode      = 8     (cmpManyEq)
    occu0        = 0
    groupCntl    = 0
    rfc          = 0
    unShareable  = 0
    mightBeShared = 1
    sharedWithShmTab = 0
    isShmLockId  = 0
    gcKind       = 0
    isUsed       = 1
    isCtfyAble   = 1
    >>>>> Shareable Table Header Data <<<<<
    tabi         = 0xD0896993
    pgHook       = 0x00000000
    idxPtr       = 0x00000000
    shmTabhSet   = 0x00000000
    id           = 410   (0x9A010000)
    refCount     = 1     (0x01000000)
    tstRefCount  = 0     (0x00000000)
    lineAdmin    = 4     (0x04000000)
    lineAlloc    = 4     (0x04000000)
    shmVersId    = 0     (0x00000000)
    shmRefCount  = 2     (0x02000000)
    >>>>> 1st level extension part <<<<<
    regHook      = 0xC8402493
    collHook     = 0x00000000
    ext2         = 0x50E41293
    >>>>> 2nd level extension part <<<<<
    tabhBack     = 0xC8532493
    delta_head   = 0000000000000000000000000000000000000000000000000000000000000000000000000000000
    pb_func      = 0x00000000
    pb_handle    = 0x00000000
    VBUK_KREDIT_NEUAUFBAU
    2
    0
    0
    0
    LT_INB_CIFEXT
    Table IT_2692[1x476]
    PROGRAM=SAPMV50AFORM=BELEG_SICHERN_POSTDATA=LT_INB_CIFEXT
    Table reference: 1104
    TABH+  0(20) = C095F993B8301E940000000050040000840A0000
    TABH+ 20(20) = 01000000DC010000FFFFFFFF0400000090AC0100
    TABH+ 40( 8) = 10000000C1308401
    store        = 0xC095F993
    ext1         = 0xB8301E94
    shmId        = 0     (0x00000000)
    id           = 1104  (0x50040000)
    label        = 2692  (0x840A0000)
    fill         = 1     (0x01000000)
    leng         = 476   (0xDC010000)
    loop         = -1    (0xFFFFFFFF)
    xtyp         = TYPE#002271
    occu         = 16    (0x10000000)
    access       = 1     (ItAccessStandard)
    idxKind      = 0     (ItIndexNone)
    uniKind      = 2     (ItUniqueNon)
    keyKind      = 1     (default)
    cmpMode      = 8     (cmpManyEq)
    occu0        = 1
    groupCntl    = 0
    rfc          = 0
    unShareable  = 0
    mightBeShared = 1
    sharedWithShmTab = 0
    isShmLockId  = 0
    gcKind       = 0
    isUsed       = 1
    isCtfyAble   = 1
    >>>>> Shareable Table Header Data <<<<<
    tabi         = 0xF077F993
    pgHook       = 0x00000000
    idxPtr       = 0x00000000
    shmTabhSet   = 0x00000000
    id           = 1542  (0x06060000)
    refCount     = 1     (0x01000000)
    tstRefCount  = 0     (0x00000000)
    lineAdmin    = 16    (0x10000000)
    lineAlloc    = 16    (0x10000000)
    shmVersId    = 0     (0x00000000)
    shmRefCount  = 2     (0x02000000)
    >>>>> 1st level extension part <<<<<
    regHook      = 0x00000000
    collHook     = 0x00000000
    ext2         = 0x70E43294
    >>>>> 2nd level extension part <<<<<
    tabhBack     = 0x70041E94
    delta_head   = 0000000000000000000000000000000000000000000000000000000000000000000000000000000
    pb_func      = 0x00000000
    pb_handle    = 0x00000000
    V50AGL-DISPLAY_FROM_ARCHIVE
    2
    0
    0
    0
    XLIKP-VBELN
    0080015203
    3333333333
    0080015203
    0000000000
    0000000000
    EMKPF
    4900035075200800000000000000          ##
    3333333333333333333333333333222222222200222222222222222222222222222222222222222222222222222222
    4900035075200800000000000000000000000010000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    VBMUE
    2222222222222222222
    0000000000000000000
    0000000000000000000
    0000000000000000000
    VBSK
    0000000000000000000000####   ####
    2222222222222222222222222233333333333333333333330000222000022222222222222222222222222222222222
    000000000000000000000000000000000000000000000000000C000000C00000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    PACKDATEN_VERBUCHEN
    2
    0
    0
    0
    No.       8 Ty.          FORM
    Name  BELEG_SICHERN_01
    IF_FINAL_CHECK
    2
    0
    0
    0
    LF_ONLY_FINAL
    2
    0
    0
    0
    LF_ONLY_PREPARE
    2
    0
    0
    0
    LF_FLAG_DOCNUM_NEW
    2
    0
    0
    0
    CF_SUBRC
    0
    0000
    0000
    T683V
    22222222222222222222222222222222222
    00000000000000000000000000000000000
    00000000000000000000000000000000000
    00000000000000000000000000000000000
    SY-XPROG
    SAPLBPFC
    5454454422222222222222222222222222222222
    310C206300000000000000000000000000000000
    0000000000000000000000000000000000000000
    0000000000000000000000000000000000000000
    IF_RENUMBER
    X
    5
    8
    0
    0
    SPACE
    2
    0
    0
    0
    XVBPA_FIRSTIND
    0.0.1.
    000
    00C
    SY-REPID
    SAPMV50A
    5454533422222222222222222222222222222222
    310D650100000000000000000000000000000000
    0000000000000000000000000000000000000000
    0000000000000000000000000000000000000000
    IF_POST
    X
    5
    8
    0
    0
    SYST-REPID
    SAPMV50A
    5454533422222222222222222222222222222222
    310D650100000000000000000000000000000000
    0000000000000000000000000000000000000000
    0000000000000000000000000000000000000000
    XVBPA_AKTIND
    0.0.1.
    000
    00C
    No.       7 Ty.          FORM
    Name  BELEG_SICHERN
    %_DUMMY$$
    2222
    0000
    0000
    0000
    IVBPA2KEY
    000000
    22333333
    00000000
    00000000
    00000000
    IV_FINAL_CHECK_DURCHFUEHREN
    2
    0
    0
    0
    CHARX
    X
    5
    8
    0
    0
    LF_SUBRC
    0
    0000
    0000
    No.       6 Ty.          FORM
    Name  FCODE_SICH_OHNE_CHECK
    IVBPA1KEY
    000000
    33333322
    00000000
    00000000
    00000000
    T180-AKTYP
    V
    5
    6
    0
    0
    AKTYP-CREATE
    H
    4
    8
    0
    0
    CVBFA
    000000          000000 ####   ####        00000000000000                        0
    2222222222222333333222222222233333320000222000022222222333333333333332222222222222222222222223
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    000000000000000000000000000000000000000C000000C00000000000000000000000000000000000000000000000
    XSDCTRLFLAG
    22
    00
    00
    00
    SYST
    |    ######################################T#######################################µ#########XP####
    000000000000000000000000000000800000005000000000000000000000000000000000000010B0001000AF550000
    0000100000000000000010601000104000000040006050407000000000000000000000000000C0500010300F800300
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000AF000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000BF00000C
    GC_FCODE_PODCANC
    ABBR
    4445222222222222222222222222222222222222222222222222222222222222222222
    1222000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000
    XSDCTRLFLAG-PROTSAVE
    2
    0
    0
    0
    YES
    X
    5
    8
    0
    0
    GC_FCODE_PODQUIT
    PODQ
    5445222222222222222222222222222222222222222222222222222222222222222222
    0F41000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000
    PROTOCOLCALLER-SDL
    SDL
    5442
    34C0
    0000
    0000
    GC_FCODE_PODSTOR
    PODS
    5445222222222222222222222222222222222222222222222222222222222222222222
    0F43000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000000000
    LIKP-VBELN
    0080015203
    3333333333
    0080015203
    0000000000
    0000000000
    LIPS-POSNR
    000010
    333333
    000010
    000000
    000000

    Hi
    As soon as we have started to put things into UPDATE TASK, we must
    54 ensure that errors definitely terminate the transaction.
    55 MESSAGE A is not sufficient because it can be catched from
    56 external callers which COMMIT WORK afterwards, resulting in
    57 incomplete updates. Read note 385830 for the full story.
    From the above message I think u need to read the not 385830 in tcode snote.
    Thx.

  • Performance issues

    Hi,
    The program(developed by someother person) which was given to me is having performance issue. Its giving RUNTIME ERROR 'TIME LIMIT EXCEEDED'. Can u please suggest me in what way i can improve the performance of the program.
    please help me in resolving this.
    Helpful answers will be rewarded.
    TABLES : MARA, "General Material Data
    MARC, "Plant Data for Material
    VBAP, "Sales Document: Item Data
    MARD, "Storage Location Data for Material
    MAST, "Material to BOM Link
    MKPF, "Header: Material Document
    MSEG, "Document Segment: Material
    PKHD, "Control Cycle
    PKPS, "Control Cycle Item / Kanban
    PVBE, "Supply area
    ZTGRP, "Wabco Technology Group table
    ZZC10. "Kanban status table
    I N T E R N A L T A B L E D E C L A R A T I O N *
    INTERNAL TABLE FOR TECH.GROUP AND PLANT
    DATA: BEGIN OF IT_MARC_ZTGRP OCCURS 0,
    MATNR LIKE MARC-MATNR,
    WERKS LIKE MARC-WERKS,
    ZZPTG LIKE ZTGRP-ZZPTG,
    ZZPTD LIKE ZTGRP-ZZPTD,
    END OF IT_MARC_ZTGRP.
    INTERNAL TABLE FOR RETURN VALUES
    DATA IT_RETURN LIKE TABLE OF BAPIRET2 WITH HEADER LINE.
    INTERNAL TABLE FOR SUBASSEMBLY AND FINISHED GOOD
    DATA: BEGIN OF IT_MATERIAL OCCURS 0,
    IDNRK LIKE STPO-IDNRK,
    MATNR LIKE MAST-MATNR,
    END OF IT_MATERIAL.
    INTERNAL TABLE FOR OUTPUT YESTERDAY
    DATA: BEGIN OF IT_KBED_KAKO OCCURS 0,
    KBEAREST LIKE KBED-KBEAREST,
    KRUEREST LIKE KBED-KRUEREST,
    KEINH LIKE KBED-KEINH,
    END OF IT_KBED_KAKO.
    INTERNAL TABLE FOR MATERIAL AND PLANT
    DATA: BEGIN OF IT_PLANT OCCURS 0,
    MATNR LIKE MARC-MATNR,
    WERKS LIKE MARC-WERKS,
    END OF IT_PLANT.
    DATA: BEGIN OF IT_COBK OCCURS 0,
    RUECK LIKE COBK-REFBN,
    END OF IT_COBK.
    DATA: BEGIN OF IT_COEPL OCCURS 0,
    KOKRS LIKE COEPL-KOKRS,
    BELNR LIKE COEPL-BELNR,
    END OF IT_COEPL.
    DATA: BEGIN OF IT_CAPACITIES OCCURS 0,
    LSBBTR LIKE COEPL-LSBBTR,
    MEINB LIKE COEPL-MEINB,
    END OF IT_CAPACITIES.
    DATA: BEGIN OF IT_MKPF_MSEG OCCURS 0,
    MBLNR LIKE MKPF-MBLNR,
    MJAHR LIKE MKPF-MJAHR,
    BUDAT LIKE MKPF-BUDAT,
    BWART LIKE MSEG-BWART,
    MATNR LIKE MSEG-MATNR,
    MENGE LIKE MSEG-MENGE,
    MEINS LIKE MSEG-MEINS,
    DMBTR LIKE MSEG-DMBTR,
    WERKS LIKE MSEG-WERKS,
    END OF IT_MKPF_MSEG.
    INTERNAL TABLE FOR MATERIAL-TO-BOM LINK
    DATA: IT_MAST LIKE MAST OCCURS 0 WITH HEADER LINE.
    INTERNAL TABLE FOR MATERIAL
    DATA: BEGIN OF IT_MAT OCCURS 0,
    MATNR LIKE MARA-MATNR,
    END OF IT_MAT.
    INTERNAL TABLE FOR STORAGE LOCATION DATA FOR SUBASSEMBLY
    DATA: BEGIN OF IT_MARD OCCURS 0,
    LABST LIKE MARD-LABST,
    END OF IT_MARD.
    INTERNAL TABLE FOR PLANT FOR MATERIALS
    DATA IT_MARC LIKE MARC OCCURS 0 WITH HEADER LINE.
    INTERNAL TABLE FOR BOM ITEM DATA
    DATA: IT_STPO LIKE STPO OCCURS 0 WITH HEADER LINE.
    INTERNAL TABLE FOR KANBAN STATUS DATA
    DATA IT_ZZC10 LIKE ZZC10 OCCURS 0 WITH HEADER LINE.
    TEMPORARY INTERNAL TABLE FOR KANBAN STATUS DATA
    DATA IT_ZZC10_TEMP LIKE ZZC10 OCCURS 0 WITH HEADER LINE.
    INTERNAL TABLE FOR CONTROL CYCLE
    DATA IT_PKHD LIKE PKHD OCCURS 0 WITH HEADER LINE.
    INTERNAL TABLE FOR CONTROL CYCLE ITEM
    DATA IT_PKPS LIKE PKPS OCCURS 0 WITH HEADER LINE.
    INTERNAL TABLE FOR MATERIAL DOCUMENT HEADER
    DATA IT_MKPF LIKE MKPF OCCURS 0 WITH HEADER LINE.
    INTERNAL TABLE FOR MATERIAL DOCUMENT ITEM
    DATA IT_MSEG LIKE MSEG OCCURS 0 WITH HEADER LINE.
    TEMPORARY INTERNAL TABLE FOR ACTUAL QUANTITY
    DATA : BEGIN OF IT_TEMP OCCURS 0,
    TECH LIKE ZTGRP-ZZPTD,
    MATNR LIKE ZZC10-MATNR,
    FINISHED LIKE MAST-MATNR,
    PKNUM LIKE PKHD-PKNUM,
    WERKS LIKE ZZC10-WERKS,
    GSMNG LIKE PLAF-GSMNG,
    MEINS LIKE PLAF-MEINS,
    BEHAZ LIKE PKHD-BEHAZ,
    BEHMG LIKE PKHD-BEHMG,
    PKBMG LIKE ZZC10-PKBMG,
    LATEHOURS LIKE PKHD-KWBZM,
    FILLRATE TYPE P DECIMALS 2,
    REPL_LEAD_TIME TYPE P DECIMALS 3,
    QTY_1 LIKE PLAF-GSMNG,
    QTY_2 LIKE PLAF-GSMNG,
    QTY_3 LIKE PLAF-GSMNG,
    QTY_4 LIKE PLAF-GSMNG,
    QTY_5 LIKE PLAF-GSMNG,
    QTY_6 LIKE PLAF-GSMNG,
    GSMNG_OUTY LIKE PLAF-GSMNG,
    MEINS_OUTY LIKE PLAF-MEINS,
    KAPBD_OUTY LIKE COEPL-LSTBTR,
    KEINH_OUTY LIKE COEPL-MEINH,
    GSMNG_OUTM LIKE MSEG-MENGE,
    MEINS_OUTM LIKE MSEG-MEINS,
    KAPBD_OUTM LIKE COEPL-LSTBTR,
    KEINH_OUTM LIKE COEPL-MEINH,
    GSMNG_BORD LIKE PLAF-GSMNG,
    MEINS_BORD LIKE MSEG-MEINS,
    KAPBD_BORD LIKE KBED-KBEAREST,
    KEINH_BORD LIKE COEPL-MEINH,
    GSMNG_TDAY LIKE PLAF-GSMNG,
    KAPBD_TDAY LIKE KBED-KBEAREST,
    GSMNG_DAY1 LIKE PLAF-GSMNG,
    KAPBD_DAY1 LIKE KBED-KBEAREST,
    GSMNG_DAY2 LIKE PLAF-GSMNG,
    KAPBD_DAY2 LIKE KBED-KBEAREST,
    GSMNG_DAY3 LIKE PLAF-GSMNG,
    KAPBD_DAY3 LIKE KBED-KBEAREST,
    GSMNG_DAY4 LIKE PLAF-GSMNG,
    KAPBD_DAY4 LIKE KBED-KBEAREST,
    GSMNG_DAY5 LIKE PLAF-GSMNG,
    KAPBD_DAY5 LIKE KBED-KBEAREST,
    STOCK_PO01 LIKE MARD-LABST,
    F_GSMNG_BORD LIKE PLAF-GSMNG,
    F_MEINS_BORD LIKE MSEG-MEINS,
    F_KAPBD_BORD LIKE KBED-KBEAREST,
    F_KEINH_BORD LIKE COEPL-MEINH,
    F_GSMNG_TDAY LIKE PLAF-GSMNG,
    F_MEINS_TDAY LIKE MSEG-MEINS,
    F_KAPBD_TDAY LIKE KBED-KBEAREST,
    F_KEINH_TDAY LIKE COEPL-MEINH,
    F_GSMNG_DAY1 LIKE PLAF-GSMNG,
    F_MEINS_DAY1 LIKE MSEG-MEINS,
    F_KAPBD_DAY1 LIKE KBED-KBEAREST,
    F_KEINH_DAY1 LIKE COEPL-MEINH,
    F_GSMNG_DAY2 LIKE PLAF-GSMNG,
    F_MEINS_DAY2 LIKE MSEG-MEINS,
    F_KAPBD_DAY2 LIKE KBED-KBEAREST,
    F_KEINH_DAY2 LIKE COEPL-MEINH,
    F_GSMNG_DAY3 LIKE PLAF-GSMNG,
    F_MEINS_DAY3 LIKE MSEG-MEINS,
    F_KAPBD_DAY3 LIKE KBED-KBEAREST,
    F_KEINH_DAY3 LIKE COEPL-MEINH,
    F_GSMNG_DAY4 LIKE PLAF-GSMNG,
    F_MEINS_DAY4 LIKE MSEG-MEINS,
    F_KAPBD_DAY4 LIKE KBED-KBEAREST,
    F_KEINH_DAY4 LIKE COEPL-MEINH,
    F_GSMNG_DAY5 LIKE PLAF-GSMNG,
    F_MEINS_DAY5 LIKE MSEG-MEINS,
    F_KAPBD_DAY5 LIKE KBED-KBEAREST,
    F_KEINH_DAY5 LIKE COEPL-MEINH,
    F_GSMNG_OUTM LIKE MSEG-MENGE,
    F_MEINS_OUTM LIKE MSEG-MEINS,
    F_KAPBD_OUTM LIKE COEPL-LSTBTR,
    F_KEINH_OUTM LIKE COEPL-MEINH,
    F_GSMNG_OUTN LIKE MSEG-MENGE,
    F_MEINS_OUTN LIKE MSEG-MEINS,
    F_KAPBD_OUTN LIKE KBED-KBEAREST,
    F_KEINH_OUTN LIKE COEPL-MEINH,
    END OF IT_TEMP.
    INTERNAL TABLE FOR PLANNED DATA
    DATA IT_PLAF LIKE PLAF OCCURS 0 WITH HEADER LINE.
    INTERNAL TABLE FOR FACTORY CALENDER AND CURRENCY
    DATA: BEGIN OF IT_T001W OCCURS 0,
    WERKS LIKE T001W-WERKS,
    BWKEY LIKE T001W-BWKEY,
    FABKL LIKE T001W-FABKL,
    END OF IT_T001W.
    V A R I A B L E S *
    DATA: AUX_BORD LIKE SY-DATUM,
    AUX_YDAY LIKE SY-DATUM,
    AUX_TDAY LIKE SY-DATUM,
    AUX_DAY1 LIKE SY-DATUM,
    AUX_DAY2 LIKE SY-DATUM,
    AUX_DAY3 LIKE SY-DATUM,
    AUX_DAY4 LIKE SY-DATUM,
    AUX_DAY5 LIKE SY-DATUM,
    AUX_CURRENT LIKE SY-DATUM,
    AUX_PREVIOUS LIKE SY-DATUM,
    AUX_TECH LIKE ZTGRP-ZZPTD,
    AUX_BUDAT LIKE MKPF-BUDAT,
    AUX_LOW LIKE MKPF-BUDAT,
    AUX_HIGH LIKE MKPF-BUDAT,
    AUX_MNG LIKE MSEG-MENGE,
    AUX_MENGE LIKE MSEG-MENGE,
    AUX_QUANT LIKE PLAF-GSMNG,
    AUX_SUM_UNIT LIKE UMADD-MSEHI,
    AUX_TIMESTAMP1 LIKE CCUPEAKA-TIMESTAMP,
    AUX_TIMESTAMP2 LIKE CCUPEAKA-TIMESTAMP,
    AUX_BUKRS LIKE T001K-BUKRS,
    AUX_BWKEY LIKE T001W-BWKEY,
    AUX_GSMNG LIKE PLAF-GSMNG,
    AUX_PKBMG LIKE ZZC10-PKBMG,
    AUX_FILL LIKE ZZC10-PKBMG,
    AUX_TOTAL LIKE ZZC10-PKBMG,
    AUX_FABKL LIKE SCAL-FCALID,
    AUX_WAERS LIKE MSEG-WAERS,
    AUX_ZZC10_HR TYPE P DECIMALS 3,
    AUX_PLAF_HR TYPE P DECIMALS 3,
    AUX_KAPBD_OUTY TYPE P DECIMALS 3,
    AUX_KAPBD_OUTM TYPE P DECIMALS 3,
    AUX_KAPBD_BORD TYPE P DECIMALS 3,
    AUX_F_KAPBD_BORD TYPE P DECIMALS 3,
    AUX_F_KAPBD_TDAY TYPE P DECIMALS 3,
    AUX_F_KAPBD_DAY1 TYPE P DECIMALS 3,
    AUX_F_KAPBD_DAY2 TYPE P DECIMALS 3,
    AUX_F_KAPBD_DAY3 TYPE P DECIMALS 3,
    AUX_F_KAPBD_DAY4 TYPE P DECIMALS 3,
    AUX_F_KAPBD_DAY5 TYPE P DECIMALS 3,
    AUX_F_KAPBD_OUTM TYPE P DECIMALS 3,
    AUX_F_KAPBD_OUTN TYPE P DECIMALS 3,
    AUX_PKHD_TIME TYPE P DECIMALS 3,
    AUX_LATEHOURS TYPE P DECIMALS 3,
    AUX_DIFF TYPE I,
    AUX_FLAG TYPE C,
    AUX_SET TYPE C,
    AUX_DATUMABSOLUT(5) TYPE P,
    AUX_FDAY LIKE SY-DATUM,
    AUX_DAYS LIKE PKHD-KWBZD,
    AUX_HOURS LIKE IT_ZZC10-TIME_EMPTY,
    AUX_TIME LIKE PKHD-KWBZM,
    AUX_PKHD_DAYS LIKE PKHD-KWBZD,
    AUX_PKHD_HOURS LIKE PKHD-KWBZM,
    AUX_TMP_DAYS LIKE PKHD-KWBZM VALUE 24,
    AUX_TMP_HRS LIKE PKHD-KWBZM,
    AUX_FILL_DAYS LIKE PKHD-KWBZD,
    AUX_FILL_HOURS LIKE AUX_HOURS,
    AUX_FILL_TIME LIKE PKHD-KWBZM,
    AUX_TOTAL_QTY LIKE PKHD-BEHMG,
    AUX_RATID LIKE PLAF-RATID,
    AUX_MATNR LIKE PLAF-MATNR,
    AUX_HEADER LIKE MARA-MATNR,
    AUX_ZZPTG LIKE MARC-ZZPTG,
    AUX_PEDTR LIKE PLAF-PEDTR,
    AUX_KRUEREST LIKE KBED-KRUEREST,
    AUX_KBEAREST LIKE KBED-KBEAREST,
    AUX_KRUEREST_T LIKE KBED-KRUEREST,
    AUX_KBEAREST_T LIKE KBED-KBEAREST,
    AUX_KEINH LIKE KBED-KEINH,
    AUX_KAPBD LIKE KBED-KBEAREST,
    AUX_ARBPL LIKE MKAL-MDV01,
    AUX_ARBID LIKE CRHD-OBJID,
    AUX_QUALF LIKE CRHD-QUALF,
    AUX_SAT1800 LIKE SY-UZEIT VALUE '180000'.
    S E L E C T I O N S C R E E N *
    INPUT SELECTION
    SELECTION-SCREEN : BEGIN OF BLOCK BL0 WITH FRAME TITLE TEXT-000.
    SELECT-OPTIONS : SO_PRVBE FOR PVBE-PRVBE,
    SO_MATNR FOR MARA-MATNR,
    SO_ZZPTG FOR MARC-ZZPTG OBLIGATORY,
    SO_WERKS FOR MARC-WERKS OBLIGATORY,
    SO_BUDAT FOR MKPF-BUDAT OBLIGATORY.
    SELECTION-SCREEN : END OF BLOCK BL0.
    I N I T I A L I Z A T I O N *
    INITIALIZATION.
    MOVE SY-DATUM TO AUX_CURRENT.
    AUX_PREVIOUS = AUX_CURRENT - 1.
    MOVE SY-DATUM TO SO_BUDAT-LOW.
    MOVE '01' TO SO_BUDAT-LOW+6(2).
    APPEND SO_BUDAT.
    AUX_PREVIOUS = AUX_CURRENT - 1.
    A T S E L E C T I O N - S C R E E N *
    AT SELECTION-SCREEN.
    CHECK ON SELECTION SCREEN
    PERFORM CHECK_ON_SELECTION.
    S T A R T O F S E L E C T I O N *
    START-OF-SELECTION.
    CHECK IF BOM EXISTS FOR THE COMPONENTS
    PERFORM CHECK_BOM_EXISTENCE.
    GET FINISHED PRODUCT NUMBER FOR THE SUBASSEMBLIES
    IF NOT IT_MARC_ZTGRP[] IS INITIAL.
    LOOP AT IT_MARC_ZTGRP.
    PERFORM GET_HEADER_MATERIAL USING IT_MARC_ZTGRP-MATNR.
    IF NOT IT_MAT[] IS INITIAL.
    PERFORM GET_FINISHED_GOOD TABLES IT_MAT.
    ENDIF.
    CLEAR IT_MARC_ZTGRP.
    ENDLOOP.
    ELSE.
    MESSAGE S010 WITH 'No data present for given selection'.
    ENDIF.
    CHECK IF SALES DATA EXIST FOR THE FINISHED GOOD
    PERFORM CHECK_SALESDATA_EXISTENCE.
    GET CONTROL CYCLE AND KANBAN DATA
    PERFORM GET_KANBAN_DATA.
    GET VALUATION AREA DATA
    PERFORM GET_VALUATION_AREA.
    GET MATERIAL DOCUMENT DATA
    PERFORM GET_MATERIAL_DOC_DATA.
    GET KANBAN DETAILS
    PERFORM GET_KANBAN_DETAILS.
    E N D O F S E L E C T I O N *
    END-OF-SELECTION.
    IF NOT IT_TEMP[] IS INITIAL.
    DISPLAY OUTPUT
    PERFORM DISPLAY_OUTPUT.
    ENDIF.
    *& Form CHECK_ON_SELECTION
    text
    --> p1 text
    <-- p2 text
    FORM CHECK_ON_SELECTION .
    CHECK IF ENTERED PLANT IS VALID
    IF NOT SO_WERKS-LOW IS INITIAL AND SO_WERKS-HIGH IS INITIAL.
    SELECT SINGLE * FROM MARC WHERE WERKS EQ SO_WERKS-LOW.
    IF SY-SUBRC NE 0.
    SET CURSOR FIELD 'SO_WERKS-LOW'.
    MESSAGE E010 WITH 'Please enter a valid Plant'.
    ENDIF.
    ENDIF.
    CHECK IF SUPPLY AREA AND PLANT IS VALID
    IF NOT SO_PRVBE-LOW IS INITIAL AND SO_PRVBE-HIGH IS INITIAL.
    IF NOT SO_WERKS IS INITIAL AND SO_WERKS-HIGH IS INITIAL.
    SELECT SINGLE * FROM PVBE WHERE WERKS EQ SO_WERKS-LOW
    AND PRVBE EQ SO_PRVBE-LOW.
    IF SY-SUBRC NE 0.
    SET CURSOR FIELD 'SO_PRVBE-LOW'.
    MESSAGE E010 WITH 'Supply Area' SO_PRVBE-LOW 'donot belong to'
    SO_WERKS-LOW.
    ENDIF.
    ENDIF.
    ENDIF.
    CHECK IF ENTERED MATERIAL NUMBER IS VALID
    IF NOT SO_MATNR-LOW IS INITIAL AND SO_MATNR-HIGH IS INITIAL.
    SELECT SINGLE * FROM MARA WHERE MATNR EQ SO_MATNR-LOW.
    IF SY-SUBRC NE 0.
    SET CURSOR FIELD 'SO_MATNR-LOW'.
    MESSAGE E010 WITH 'Please enter a valid Material Number'.
    ELSE.
    IF NOT SO_WERKS-LOW IS INITIAL AND SO_WERKS-HIGH IS INITIAL.
    SELECT SINGLE * FROM MARC WHERE MATNR EQ SO_MATNR-LOW
    AND WERKS EQ SO_WERKS-LOW.
    IF SY-SUBRC NE 0.
    SET CURSOR FIELD 'SO_MATNR-LOW'.
    MESSAGE E010 WITH 'Material' SO_MATNR-LOW
    'doesnot belong to plant' SO_WERKS-LOW.
    ENDIF.
    ENDIF.
    ENDIF.
    ENDIF.
    CHECK IF TECHNOLOGY GROUP AND PLANT IS VALID
    IF NOT SO_ZZPTG-LOW IS INITIAL AND SO_ZZPTG-HIGH IS INITIAL.
    IF NOT SO_WERKS-LOW IS INITIAL AND SO_WERKS-HIGH IS INITIAL.
    SELECT SINGLE * FROM MARC WHERE WERKS EQ SO_WERKS-LOW
    AND ZZPTG EQ SO_ZZPTG-LOW.
    IF SY-SUBRC NE 0.
    SET CURSOR FIELD 'SO_ZZPTG-LOW'.
    MESSAGE E010 WITH 'Tech.Group' SO_ZZPTG-LOW 'doesnot belong to plant'
    SO_WERKS-LOW.
    ENDIF.
    ENDIF.
    ENDIF.
    ENDFORM. " CHECK_ON_SELECTION
    *& Form CHECK_BOM_EXISTENCE
    text
    --> p1 text
    <-- p2 text
    FORM CHECK_BOM_EXISTENCE .
    JOIN MARC AND ZTGRP TABLES TO GET THE COMPONENTS BASED ON THE INPUT
    CRITERIA
    REFRESH IT_MARC_ZTGRP.
    SELECT MARCMATNR MARCWERKS ZTGRPZZPTG ZTGRPZZPTD
    INTO TABLE IT_MARC_ZTGRP
    FROM MARC INNER JOIN ZTGRP
    ON MARCWERKS EQ ZTGRPWERKS AND
    MARCZZPTG EQ ZTGRPZZPTG
    WHERE MARC~WERKS IN SO_WERKS
    AND MARC~ZZPTG IN SO_ZZPTG
    AND MARC~MATNR IN SO_MATNR
    AND MARC~LVORM NE 'X'
    AND ( MARC~BESKZ EQ 'E' OR
    MARC~BESKZ EQ 'X' ).
    IF NOT IT_MARC_ZTGRP[] IS INITIAL.
    CHECK THE EXISTENCE OF BOM FOR THE SELECTED COMPONENTS.
    IF NOT PRESENT, DELETE THE ENTRY FROM INTERNAL TABLE
    LOOP AT IT_MARC_ZTGRP.
    REFRESH IT_RETURN.
    CALL FUNCTION 'BAPI_MAT_BOM_EXISTENCE_CHECK'
    EXPORTING
    MATERIAL = IT_MARC_ZTGRP-MATNR
    PLANT = IT_MARC_ZTGRP-WERKS
    BOMUSAGE = '1'
    TABLES
    RETURN = IT_RETURN.
    IF NOT IT_RETURN[] IS INITIAL.
    DELETE IT_MARC_ZTGRP WHERE MATNR EQ IT_MARC_ZTGRP-MATNR
    AND WERKS EQ IT_MARC_ZTGRP-WERKS
    AND ZZPTG EQ IT_MARC_ZTGRP-ZZPTG.
    ENDIF.
    CLEAR IT_MARC_ZTGRP.
    ENDLOOP.
    ELSE.
    MESSAGE S010 WITH 'No data present for given selection'.
    ENDIF.
    ENDFORM. " CHECK_BOM_EXISTENCE
    *& Form GET_HEADER_MATERIAL
    text
    -->P_IT_MARC_ZTGRP_MATNR text
    FORM GET_HEADER_MATERIAL USING P_MATNR.
    REFRESH IT_STPO.
    GET BOM ITEM DATA FOR THE COMPONENT
    SELECT * FROM STPO INTO TABLE IT_STPO WHERE IDNRK EQ P_MATNR
    AND DATUV LE SO_BUDAT-LOW
    AND LKENZ NE 'X'.
    IF NOT IT_STPO[] IS INITIAL.
    IF BOM ITEM DATA IS PRESENT FOR THE COMPONENT
    REFRESH IT_MAST.
    GET MATERIAL TO BOM LINK
    SELECT * FROM MAST INTO TABLE IT_MAST FOR ALL ENTRIES IN IT_STPO
    WHERE STLNR EQ IT_STPO-STLNR.
    IF NOT IT_MAST[] IS INITIAL.
    SORT IT_MAST BY MATNR.
    DELETE ADJACENT DUPLICATES FROM IT_MAST COMPARING MATNR.
    LOOP AT IT_MAST.
    CLEAR AUX_SET.
    REFRESH IT_PLANT.
    GET ALL THE PLANTS FOR THE COMPONENT
    SELECT MATNR WERKS FROM MARC INTO TABLE IT_PLANT
    WHERE MATNR EQ IT_MAST-MATNR.
    LOOP AT IT_PLANT.
    REFRESH IT_RETURN.
    CHECK FOR BOM EXISTENCE FOR MATERIAL IN ALL PLANTS
    CALL FUNCTION 'BAPI_MAT_BOM_EXISTENCE_CHECK'
    EXPORTING
    MATERIAL = IT_MAST-MATNR
    PLANT = IT_PLANT-WERKS
    BOMUSAGE = '1'
    TABLES
    RETURN = IT_RETURN.
    IF IT_RETURN[] IS INITIAL.
    MOVE 'X' TO AUX_SET.
    ENDIF.
    CLEAR IT_PLANT.
    ENDLOOP.
    IF BOM EXISTS FOR THE COMPONENT IN ANY PLANT, MOVE THE COMPONENT
    TO INTERNAL TABLE IT_MAT
    IF AUX_SET EQ 'X'.
    MOVE IT_MAST-MATNR TO IT_MAT-MATNR.
    APPEND IT_MAT.
    CLEAR IT_MAT.
    ELSE.
    IF BOM DOESNOT EXISTS FOR THE COMPONENT IN ALL PLANTS,
    SELECT THE COMPONENT AS THE FINISHED PRODUCT
    CLEAR MARA.
    SELECT SINGLE * FROM MARA WHERE MATNR EQ IT_MAST-MATNR.
    IF SY-SUBRC EQ 0 AND MARA-LVORM NE 'X'.
    MOVE: IT_MARC_ZTGRP-MATNR TO IT_MATERIAL-IDNRK,
    IT_MAST-MATNR TO IT_MATERIAL-MATNR.
    APPEND IT_MATERIAL.
    CLEAR IT_MATERIAL.
    ENDIF.
    ENDIF.
    CLEAR IT_MAST.
    ENDLOOP.
    ENDIF.
    ELSE.
    IF BOM ITEM DATA DOESNOT PRESENT FOR THE COMPONENT,
    CONSIDER THE COMPONENT AS FINISHED PRODUCT
    CLEAR MARA.
    SELECT SINGLE * FROM MARA WHERE MATNR EQ P_MATNR.
    IF SY-SUBRC EQ 0 AND MARA-LVORM NE 'X'.
    MOVE: IT_MARC_ZTGRP-MATNR TO IT_MATERIAL-IDNRK,
    P_MATNR TO IT_MATERIAL-MATNR.
    APPEND IT_MATERIAL.
    CLEAR IT_MATERIAL.
    ENDIF.
    ENDIF.
    ENDFORM. " GET_HEADER_MATERIAL
    *& Form GET_FINISHED_GOOD
    text
    -->P_IT_MAT text
    FORM GET_FINISHED_GOOD TABLES P_IT_MAT LIKE IT_MAT[].
    LOOP AT P_IT_MAT.
    PERFORM GET_HEADER_MATERIAL USING P_IT_MAT-MATNR.
    DELETE P_IT_MAT INDEX 1.
    CLEAR P_IT_MAT.
    ENDLOOP.
    ENDFORM. " GET_FINISHED_GOOD
    *& Form CHECK_SALESDATA_EXISTENCE
    text
    --> p1 text
    <-- p2 text
    FORM CHECK_SALESDATA_EXISTENCE .
    IF NOT IT_MATERIAL[] IS INITIAL.
    LOOP AT IT_MATERIAL.
    CLEAR VBAP.
    SELECT SINGLE * FROM VBAP WHERE MATNR EQ IT_MATERIAL-MATNR.
    IF SY-SUBRC NE 0.
    DELETE IT_MATERIAL WHERE IDNRK EQ IT_MATERIAL-IDNRK
    AND MATNR EQ IT_MATERIAL-MATNR.
    ENDIF.
    CLEAR IT_MATERIAL.
    ENDLOOP.
    ENDIF.
    ENDFORM. " CHECK_SALESDATA_EXISTENCE
    *& Form GET_KANBAN_DATA
    text
    --> p1 text
    <-- p2 text
    FORM GET_KANBAN_DATA.
    SORT IT_MATERIAL BY IDNRK MATNR.
    DELETE ADJACENT DUPLICATES FROM IT_MATERIAL COMPARING ALL FIELDS.
    IF NOT IT_MATERIAL[] IS INITIAL.
    GET CONTROL CYCLE HEADER DATA
    SELECT * FROM PKHD INTO TABLE IT_PKHD
    FOR ALL ENTRIES IN IT_MATERIAL
    WHERE WERKS IN SO_WERKS
    AND MATNR EQ IT_MATERIAL-IDNRK
    AND PRVBE IN SO_PRVBE.
    IF NOT IT_PKHD[] IS INITIAL.
    GET CONTROL CYCLE ITEM DATA
    SELECT * FROM PKPS INTO TABLE IT_PKPS
    FOR ALL ENTRIES IN IT_PKHD
    WHERE PKNUM EQ IT_PKHD-PKNUM.
    IF NOT IT_PKPS[] IS INITIAL.
    GET KANBAN STATUS DATA
    SELECT * FROM ZZC10 INTO TABLE IT_ZZC10_TEMP
    FOR ALL ENTRIES IN IT_PKPS
    WHERE PKKEY EQ IT_PKPS-PKKEY
    AND PKNUM EQ IT_PKPS-PKNUM
    AND ZDATE BETWEEN SO_BUDAT-LOW AND SY-DATUM
    AND STATUS EQ '5'.
    ENDIF.
    ENDIF.
    ENDIF.
    ENDFORM. " GET_KANBAN_DATA
    *& Form GET_VALUATION_AREA
    text
    --> p1 text
    <-- p2 text
    FORM GET_VALUATION_AREA.
    IF NOT IT_MARC_ZTGRP[] IS INITIAL.
    SELECT WERKS BWKEY FABKL FROM T001W INTO TABLE IT_T001W
    FOR ALL ENTRIES IN IT_MARC_ZTGRP
    WHERE WERKS EQ IT_MARC_ZTGRP-WERKS.
    ENDIF.
    ENDFORM. " GET_VALUATION_AREA
    *& Form GET_MATERIAL_DOC_DATA
    text
    --> p1 text
    <-- p2 text
    FORM GET_MATERIAL_DOC_DATA.
    GET MATERIAL DOCUMENT HEADER DATA
    SELECT * FROM MKPF INTO TABLE IT_MKPF
    WHERE BUDAT IN SO_BUDAT.
    IF NOT IT_MKPF[] IS INITIAL.
    GET MATERIAL DOCUMENT ITEM DATA
    SELECT * FROM MSEG INTO TABLE IT_MSEG
    FOR ALL ENTRIES IN IT_MKPF
    WHERE MBLNR EQ IT_MKPF-MBLNR
    AND WERKS IN SO_WERKS
    AND MJAHR EQ SY-DATUM+0(4)
    AND ( BWART EQ '131' OR BWART EQ '132' ).
    IF NOT IT_MATERIAL[] IS INITIAL.
    LOOP AT IT_MSEG.
    READ TABLE IT_MATERIAL WITH KEY IDNRK = IT_MSEG-MATNR.
    IF SY-SUBRC NE 0.
    DELETE IT_MSEG WHERE MATNR EQ IT_MSEG-MATNR.
    ENDIF.
    CLEAR: IT_MATERIAL, IT_MSEG.
    ENDLOOP.
    ENDIF.
    ENDIF.
    ENDFORM. " GET_MATERIAL_DOC_DATA
    *& Form GET_KANBAN_DETAILS
    text
    --> p1 text
    <-- p2 text
    FORM GET_KANBAN_DETAILS .
    SORT IT_PKHD BY PKNUM.
    IF NOT IT_ZZC10_TEMP[] IS INITIAL.
    LOOP AT IT_ZZC10_TEMP.
    CLEAR: AUX_FILL, AUX_PKBMG.
    MOVE IT_ZZC10_TEMP] TO IT_ZZC10[.
    DELETE IT_ZZC10 WHERE MATNR NE IT_ZZC10_TEMP-MATNR
    AND WERKS NE IT_ZZC10_TEMP-WERKS.
    LOOP AT IT_ZZC10.
    CLEAR: AUX_TIMESTAMP1, AUX_TIMESTAMP2, AUX_ZZC10_HR, AUX_DIFF.
    EMPTY DATE GREATER THAN FULL DATE
    IF IT_ZZC10-DATE_EMPTY GT IT_ZZC10-DATE_FULL.
    CONCATENATE IT_ZZC10-DATE_EMPTY IT_ZZC10-TIME_EMPTY
    INTO AUX_TIMESTAMP1.
    CONCATENATE IT_ZZC10-DATE_FULL IT_ZZC10-TIME_FULL
    INTO AUX_TIMESTAMP2.
    CALL FUNCTION 'CCU_TIMESTAMP_DIFFERENCE'
    EXPORTING
    TIMESTAMP1 = AUX_TIMESTAMP1
    TIMESTAMP2 = AUX_TIMESTAMP2
    IMPORTING
    DIFFERENCE = AUX_DIFF.
    AUX_ZZC10_HR = AUX_DIFF / 3600.
    FULL DATE GREATER THAN EMPTY DATE
    ELSEIF IT_ZZC10-DATE_FULL GT IT_ZZC10-DATE_EMPTY.
    CONCATENATE IT_ZZC10-DATE_EMPTY IT_ZZC10-TIME_EMPTY
    INTO AUX_TIMESTAMP2.
    CONCATENATE IT_ZZC10-DATE_FULL IT_ZZC10-TIME_FULL
    INTO AUX_TIMESTAMP1.
    CALL FUNCTION 'CCU_TIMESTAMP_DIFFERENCE'
    EXPORTING
    TIMESTAMP1 = AUX_TIMESTAMP1
    TIMESTAMP2 = AUX_TIMESTAMP2
    IMPORTING
    DIFFERENCE = AUX_DIFF.
    AUX_ZZC10_HR = AUX_DIFF / 3600.
    FULL DATE EQUAL TO EMPTY DATE
    ELSEIF IT_ZZC10-DATE_FULL EQ IT_ZZC10-DATE_EMPTY.
    EMPTY TIME GREATER THAN FULL TIME
    IF IT_ZZC10-TIME_EMPTY GT IT_ZZC10-TIME_FULL.
    CONCATENATE IT_ZZC10-DATE_EMPTY IT_ZZC10-TIME_EMPTY
    INTO AUX_TIMESTAMP1.
    CONCATENATE IT_ZZC10-DATE_FULL IT_ZZC10-TIME_FULL
    INTO AUX_TIMESTAMP2.
    CALL FUNCTION 'CCU_TIMESTAMP_DIFFERENCE'
    EXPORTING
    TIMESTAMP1 = AUX_TIMESTAMP1
    TIMESTAMP2 = AUX_TIMESTAMP2
    IMPORTING
    DIFFERENCE = AUX_DIFF.
    AUX_ZZC10_HR = AUX_DIFF / 3600.
    FULL TIME GREATER THAN EMPTY TIME
    ELSEIF IT_ZZC10-TIME_FULL GT IT_ZZC10-TIME_EMPTY.
    CONCATENATE IT_ZZC10-DATE_EMPTY IT_ZZC10-TIME_EMPTY
    INTO AUX_TIMESTAMP2.
    CONCATENATE IT_ZZC10-DATE_FULL IT_ZZC10-TIME_FULL
    INTO AUX_TIMESTAMP1.
    CALL FUNCTION 'CCU_TIMESTAMP_DIFFERENCE'
    EXPORTING
    TIMESTAMP1 = AUX_TIMESTAMP1
    TIMESTAMP2 = AUX_TIMESTAMP2
    IMPORTING
    DIFFERENCE = AUX_DIFF.
    AUX_ZZC10_HR = AUX_DIFF / 3600.
    FULL TIME EQUAL TO EMPTY TIME
    ELSEIF IT_ZZC10-TIME_FULL EQ IT_ZZC10-TIME_EMPTY.
    AUX_ZZC10_HR = 0.
    ENDIF.
    ENDIF.
    READ TABLE IT_PKHD WITH KEY PKNUM = IT_ZZC10-PKNUM
    BINARY SEARCH.
    IF SY-SUBRC EQ 0.
    CLEAR: AUX_TIMESTAMP1, AUX_TIMESTAMP2,
    AUX_PKHD_DAYS, AUX_PKHD_HOURS, AUX_TMP_DAYS,
    AUX_PKHD_TIME.
    AUX_PKHD_DAYS = IT_PKHD-KWBZD.
    AUX_PKHD_HOURS = IT_PKHD-KWBZM.
    IF AUX_PKHD_DAYS NE 0.
    AUX_TMP_DAYS = AUX_PKHD_DAYS * 24.
    AUX_PKHD_TIME = AUX_TMP_DAYS + AUX_PKHD_HOURS.
    ELSE.
    AUX_PKHD_TIME = AUX_PKHD_HOURS.
    ENDIF.
    COMPARE STATUS CHANGE TIME WITH REPLENISHMENT LEAD TIME
    IF AUX_ZZC10_HR GT AUX_PKHD_TIME.
    CLEAR: AUX_LATEHOURS.
    LATE HOURS
    AUX_LATEHOURS = AUX_ZZC10_HR - AUX_PKHD_TIME.
    LATE QUANTITY FOR +1 DAY
    IF AUX_LATEHOURS LE 24.
    IT_TEMP-QTY_1 = IT_TEMP-QTY_1 + IT_ZZC10-PKBMG.
    LATE QUANTITY FOR +2 DAYS
    ELSEIF AUX_LATEHOURS GT 24
    AND AUX_LATEHOURS LE 48.
    IT_TEMP-QTY_2 = IT_TEMP-QTY_2 + IT_ZZC10-PKBMG.
    LATE QUANTITY FOR +3 DAYS
    ELSEIF AUX_LATEHOURS GT 48
    AND AUX_LATEHOURS LE 72.
    IT_TEMP-QTY_3 = IT_TEMP-QTY_3 + IT_ZZC10-PKBMG.
    LATE QUANTITY FOR +4 DAYS
    ELSEIF AUX_LATEHOURS GT 72
    AND AUX_LATEHOURS LE 96.
    IT_TEMP-QTY_4 = IT_TEMP-QTY_4 + IT_ZZC10-PKBMG.
    LATE QUANTITY FOR +5 DAYS
    ELSEIF AUX_LATEHOURS GT 96
    AND AUX_LATEHOURS LE 120.
    IT_TEMP-QTY_5 = IT_TEMP-QTY_5 + IT_ZZC10-PKBMG.
    LATE QUANTITY FOR MORE THAN 5 DAYS
    ELSEIF AUX_LATEHOURS GT 120.
    IT_TEMP-QTY_6 = IT_TEMP-QTY_6 + IT_ZZC10-PKBMG.
    ENDIF.
    TOTAL KANBAN LATE QUANTITIES
    AUX_PKBMG = AUX_PKBMG + IT_ZZC10-PKBMG.
    ELSE.
    AUX_FILL = AUX_FILL + IT_ZZC10-PKBMG.
    CONTINUE.
    ENDIF.
    ENDIF.
    ENDLOOP.
    SUBASSEMBLY PART NUMBER
    IT_TEMP-MATNR = IT_ZZC10-MATNR.
    FINISHED GOOD
    READ TABLE IT_MATERIAL WITH KEY IDNRK = IT_ZZC10-MATNR.
    IT_TEMP-FINISHED = IT_MATERIAL-MATNR.
    TECHNOLOGY GROUP
    READ TABLE IT_MARC_ZTGRP WITH KEY WERKS = IT_ZZC10-WERKS
    MATNR = IT_ZZC10-MATNR.
    IF SY-SUBRC EQ 0.
    MOVE IT_MARC_ZTGRP-ZZPTD TO IT_TEMP-TECH.
    ENDIF.
    NUMBER OF KANBAN CONTAINERS
    IT_TEMP-BEHAZ = IT_PKHD-BEHAZ.
    KANBAN QUANTITY
    IT_TEMP-BEHMG = IT_PKHD-BEHMG.
    LATE HOURS
    AUX_LATEHOURS = AUX_ZZC10_HR - AUX_PKHD_TIME.
    IT_TEMP-LATEHOURS = AUX_LATEHOURS.
    REPLENISHMENT LEAD TIME
    IT_TEMP-REPL_LEAD_TIME = AUX_PKHD_TIME.
    KANBAN LATE QUANTITIES
    IT_TEMP-GSMNG = AUX_PKBMG.
    FILL RATE
    AUX_TOTAL = AUX_PKBMG + AUX_FILL.
    IT_TEMP-FILLRATE = ( AUX_FILL / AUX_TOTAL ) * 100.
    GET STOCK IN PO01
    REFRESH IT_MARD.
    SELECT LABST FROM MARD INTO TABLE IT_MARD
    WHERE MATNR EQ IT_ZZC10-MATNR
    AND WERKS EQ IT_ZZC10-WERKS.
    IF SY-SUBRC EQ 0.
    LOOP AT IT_MARD.
    SUM.
    ENDLOOP.
    MOVE IT_MARD-LABST TO IT_TEMP-STOCK_PO01.
    CLEAR IT_MARD.
    ENDIF.
    GET YESTERDAY'S OUTPUT QUANTITY
    PERFORM GET_YESTERDAY_QTY.
    CUMULATIVE OUTPUT FOR ACTUAL MONTH
    PERFORM GET_CUMULATIVE_OUTPUT.
    GET BACKORDER SUBASSEMBLY DATA
    PERFORM GET_BACKORDER_QTY.
    GET BACKORDER FINISHED GOODS, TODAY, +1, +2, +3, +4, +5
    AND AVERAGE OUPTUT NEEDED DATA
    PERFORM GET_FINISHEDGOODS_DATA.
    GET DATA FOR ACTUAL MONTH DELIVERED
    PERFORM GET_ACTUAL_MONTH_DATA.
    APPEND IT_TEMP.
    CLEAR IT_TEMP.
    DELETE IT_ZZC10_TEMP WHERE MATNR EQ IT_ZZC10_TEMP-MATNR
    AND WERKS EQ IT_ZZC10_TEMP-WERKS.
    CLEAR: IT_ZZC10, IT_ZZC10_TEMP, IT_PKHD.
    ENDLOOP.
    ENDIF.
    ENDFORM. " GET_KANBAN_DETAILS
    *& Form GET_YESTERDAY_QTY
    text
    --> p1 text
    <-- p2 text
    FORM GET_YESTERDAY_QTY .
    CLEAR: AUX_BUKRS, AUX_WAERS.
    READ TABLE IT_T001W WITH KEY WERKS = IT_PKHD-WERKS.
    IF SY-SUBRC EQ 0.
    CLEAR AUX_FABKL.
    MOVE IT_T001W-FABKL TO AUX_FABKL.
    SELECT SINGLE BUKRS INTO AUX_BUKRS FROM T001K
    WHERE BWKEY = IT_T001W-BWKEY.
    IF SY-SUBRC EQ 0.
    SELECT SINGLE WAERS INTO AUX_WAERS FROM T001
    WHERE BUKRS = AUX_BUKRS.
    ENDIF.
    IF 'WD;WF;WN;WP;WU' CS AUX_FABKL.
    AUX_FABKL(1) = 'P'.
    ENDIF.
    MOVE SY-DATUM TO AUX_DATUMABSOLUT.
    PERFORM WEEKDAY USING AUX_DATUMABSOLUT.
    MOVE 'W' TO AUX_FLAG.
    PERFORM CHECK_WORKING_DAY CHANGING AUX_FLAG.
    IF AUX_DATUMABSOLUT = 0.
    AUX_YDAY = SY-DATUM.
    ELSEIF AUX_DATUMABSOLUT = 1.
    AUX_YDAY = SY-DATUM - 1.
    ELSEIF AUX_FLAG = 'F'.
    AUX_YDAY = SY-DATUM.
    ENDIF.
    IF AUX_DATUMABSOLUT = 0 OR
    AUX_DATUMABSOLUT = 1 OR
    AUX_FLAG = 'F'.
    PERFORM DATE_WITH_OFFSET USING 0 CHANGING AUX_TDAY.
    PERFORM DATE_WITH_OFFSET USING 1 CHANGING AUX_DAY1.
    PERFORM DATE_WITH_OFFSET USING 2 CHANGING AUX_DAY2.
    PERFORM DATE_WITH_OFFSET USING 3 CHANGING AUX_DAY3.
    PERFORM DATE_WITH_OFFSET USING 4 CHANGING AUX_DAY4.
    PERFORM DATE_WITH_OFFSET USING 5 CHANGING AUX_DAY5.
    ELSE.
    PERFORM DATE_WITH_OFFSET USING 0 CHANGING AUX_YDAY.
    PERFORM DATE_WITH_OFFSET USING 1 CHANGING AUX_TDAY.
    PERFORM DATE_WITH_OFFSET USING 2 CHANGING AUX_DAY1.
    PERFORM DATE_WITH_OFFSET USING 3 CHANGING AUX_DAY2.
    PERFORM DATE_WITH_OFFSET USING 4 CHANGING AUX_DAY3.
    PERFORM DATE_WITH_OFFSET USING 5 CHANGING AUX_DAY4.
    PERFORM DATE_WITH_OFFSET USING 6 CHANGING AUX_DAY5.
    ENDIF.
    AUX_BORD = '19000101'.
    GET PLANNED ORDER DATA FOR YESTERDAY
    REFRESH IT_PLAF.
    CLEAR: AUX_KAPBD, AUX_KBEAREST, AUX_KRUEREST, AUX_GSMNG.
    SELECT * FROM PLAF INTO TABLE IT_PLAF
    WHERE MATNR EQ IT_PKHD-MATNR
    AND PLWRK EQ IT_PKHD-WERKS
    AND ( PAART EQ 'KD' OR PAART EQ 'PE' )
    AND RATID GT 0
    AND PEDTR EQ AUX_YDAY.
    IF NOT IT_PLAF[] IS INITIAL.
    LOOP AT IT_PLAF.
    REFRESH IT_KBED_KAKO.
    SELECT KBED~KBEAREST KBED~KRUEREST KBED~KEINH
    FROM KBED INNER JOIN KAKO
    ON KBED~KAPID EQ KAKO~KAPID
    INTO TABLE IT_KBED_KAKO
    WHERE KBED~BEDID = IT_PLAF-RATID
    AND KAKO~KAPAR = '001'.
    IF NOT IT_KBED_KAKO[] IS INITIAL.
    LOOP AT IT_KBED_KAKO.
    IF IT_KBED_KAKO-KEINH NE 'STD'.
    CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
    EXPORTING
    INPUT = IT_KBED_KAKO-KBEAREST
    UNIT_IN = IT_KBED_KAKO-KEINH
    UNIT_OUT = 'STD'
    IMPORTING
    OUTPUT = IT_KBED_KAKO-KBEAREST.
    CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
    EXPORTING
    INPUT = IT_KBED_KAKO-KRUEREST
    UNIT_IN = IT_KBED_KAKO-KEINH
    UNIT_OUT = 'STD'
    IMPORTING
    OUTPUT = IT_KBED_KAKO-KRUEREST.
    ENDIF.
    ADD IT_KBED_KAKO-KBEAREST TO AUX_KBEAREST.
    ADD IT_KBED_KAKO-KRUEREST TO AUX_KRUEREST.
    CLEAR IT_KBED_KAKO.
    ENDLOOP.
    AUX_KAPBD = AUX_KBEAREST + AUX_KRUEREST.
    ENDIF.
    CLEAR IT_PLAF.
    ENDLOOP.
    ENDIF.
    READ TABLE IT_KBED_KAKO INDEX 1.
    MOVE: AUX_KAPBD TO IT_TEMP-KAPBD_OUTY,
    IT_KBED_KAKO-KEINH TO IT_TEMP-KEINH_OUTY.
    GET OUTPUT QUANTITY FOR YESTERDAY
    REFRESH: IT_MKPF, IT_MSEG.
    CLEAR: AUX_MENGE.
    SELECT * FROM MKPF INTO TABLE IT_MKPF
    WHERE BUDAT EQ AUX_PREVIOUS.
    IF NOT IT_MKPF[] IS INITIAL.
    GET MATERIAL DOCUMENT ITEM DATA
    SELECT * FROM MSEG INTO TABLE IT_MSEG
    FOR ALL ENTRIES IN IT_MKPF
    WHERE MBLNR EQ IT_MKPF-MBLNR
    AND MATNR IN SO_MATNR
    AND WERKS IN SO_WERKS
    AND MJAHR EQ SY-DATUM+0(4)
    AND ( BWART EQ '131' OR BWART EQ '132' ).
    IF NOT IT_MSEG[] IS INITIAL.
    LOOP AT IT_MSEG.
    AUX_MENGE = AUX_MENGE + IT_MSEG-MENGE.
    CLEAR IT_MSEG.
    ENDLOOP.
    ENDIF.
    ENDIF.
    READ TABLE IT_MSEG INDEX 1.
    MOVE: AUX_MENGE TO IT_TEMP-GSMNG_OUTY,
    IT_MSEG-MEINS TO IT_TEMP-MEINS_OUTY.
    CLEAR IT_T001W.
    ENDIF.
    ENDFORM. " GET_YESTERDAY_QTY
    *& Form GET_BACKORDER_QTY
    text
    --> p1 text
    <-- p2 text
    FORM GET_BACKORDER_QTY .
    GET PLANNED ORDER DATA FOR BACKORDER
    REFRESH IT_PLAF.
    CLEAR: AUX_KAPBD, AUX_KBEAREST, AUX_KRUEREST, AUX_GSMNG, AUX_QUANT.
    SELECT * FROM PLAF INTO TABLE IT_PLAF
    WHERE MATNR EQ IT_ZZC10-MATNR
    AND PLWRK EQ IT_ZZC10-WERKS
    AND ( PAART EQ 'KD' OR PAART EQ 'PE' )
    AND RATID GT 0
    AND PEDTR GE SO_BUDAT-LOW
    AND PEDTR LE SY-DATUM.
    IF NOT IT_PLAF[] IS INITIAL.
    LOOP AT IT_PLAF.
    CLEAR: AUX_TIMESTAMP1, AUX_TIMESTAMP2, AUX_PLAF_HR, AUX_DIFF.
    EMPTY DATE GREATER THAN FULL DATE
    CONCATENATE SY-DATUM SY-UZEIT
    INTO AUX_TIMESTAMP1.
    CONCATENATE IT_PLAF-PEDTR IT_PLAF-PEDTI
    INTO AUX_TIMESTAMP2.
    CALL FUNCTION 'CCU_TIMESTAMP_DIFFERENCE'
    EXPORTING
    TIMESTAMP1 = AUX_TIMESTAMP1
    TIMESTAMP2 = AUX_TIMESTAMP2
    IMPORTING
    DIFFERENCE = AUX_DIFF.
    AUX_PLAF_HR = AUX_DIFF / 3600.
    IF AUX_PLAF_HR > AUX_PKHD_TIME.
    AUX_GSMNG = AUX_GSMNG + IT_PLAF-GSMNG.
    REFRESH IT_KBED_KAKO.
    SELECT KBEDKBEAREST KBEDKRUEREST KBED~KEINH
    FROM KBED INNER JOIN KAKO
    ON KBEDKAPID EQ KAKOKAPID
    INTO TABLE IT_KBED_KAKO
    WHERE KBED~BEDID = IT_PLAF-RATID
    AND KAKO~KAPAR = '001'.
    IF NOT IT_KBED_KAKO[] IS INITIAL.
    LOOP AT IT_KBED_KAKO.
    IF IT_KBED_KAKO-KEINH NE 'STD'.
    CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
    EXPORTING
    INPUT = IT_KBED_KAKO-KBEAREST
    UNIT_IN = IT_KBED_KAKO-KEINH
    UNIT_OUT = 'STD'
    IMPORTING
    OUTPUT = IT_KBED_KAKO-KBEAREST.
    CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
    EXPORTING
    INPUT = IT_KBED_KAKO-KRUEREST
    UNIT_IN = IT_KBED_KAKO-KEINH
    UNIT_OUT = 'STD'
    IMPORTING
    OUTPUT = IT_KBED_KAKO-KRUEREST.
    ENDIF.
    AUX_KBEAREST = AUX_KBEAREST + IT_KBED_KAKO-KBEAREST.
    AUX_KRUEREST = AUX_KRUEREST + IT_KBED_KAKO-KRUEREST.
    CLEAR IT_KBED_KAKO.
    ENDLOOP.
    AUX_KAPBD = AUX_KBEAREST + AUX_KRUEREST.
    ENDIF.
    ENDIF.
    ENDLOOP.
    READ TABLE IT_PLAF INDEX 1.
    MOVE: AUX_GSMNG TO IT_TEMP-GSMNG_BORD,
    IT_PLAF-MEINS TO IT_TEMP-MEINS_BORD.
    READ TABLE IT_KBED_KAKO INDEX 1.
    MOVE: AUX_KAPBD TO IT_TEMP-KAPBD_BORD,
    IT_KBED_KAKO-KEINH TO IT_TEMP-KEINH_BORD.
    ENDIF.
    ENDFORM. " GET_BACKORDER_QTY
    *& Form WEEKDAY
    text
    -->P_AUX_DATUMABSOLUT text
    FORM WEEKDAY USING P_DATUMABSOLUT.
    P_DATUMABSOLUT = P_DATUMABSOLUT MOD 7.
    ENDFORM. " WEEKDAY
    *& Form CHECK_WORKING_DAY
    text
    <--P_AUX_FLAG text
    FORM CHECK_WORKING_DAY CHANGING P_FLAG.
    CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
    EXPORTING
    DATE = SY-DATUM
    FACTORY_CALENDAR_ID = AUX_FABKL
    IMPORTING
    DATE = AUX_FDAY
    EXCEPTIONS
    CALENDAR_BUFFER_NOT_LOADABLE = 1
    CORRECT_OPTION_INVALID = 2
    DATE_AFTER_RANGE = 3
    DATE_BEFORE_RANGE = 4
    DATE_INVALID = 5
    FACTORY_CALENDAR_NOT_FOUND = 6
    OTHERS = 7.
    IF AUX_FDAY NE SY-DATUM.
    AUX_FLAG = 'F'.
    ENDIF.
    ENDFORM. " CHECK_WORKING_DAY
    *& Form DATE_WITH_OFFSET
    text
    -->P_0 text
    <--P_AUX_TDAY text
    FORM DATE_WITH_OFFSET USING AUX_OFFSET
    CHANGING P_TDAY.
    DATA:
    AUX_CALENDARDATE LIKE SCAL-DATE,
    AUX_FACTORYDATE LIKE SCAL-FACDATE.
    CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
    EXPORTING
    DATE = SY-DATUM
    FACTORY_CALENDAR_ID = AUX_FABKL
    IMPORTING
    FACTORYDATE = AUX_FACTORYDATE
    EXCEPTIONS
    CALENDAR_BUFFER_NOT_LOADABLE = 1
    CORRECT_OPTION_INVALID = 2
    DATE_AFTER_RANGE = 3
    DATE_BEFORE_RANGE = 4
    DATE_INVALID = 5
    FACTORY_CALENDAR_NOT_FOUND = 6
    OTHERS = 7.
    AUX_FACTORYDATE = AUX_FACTORYDATE + AUX_OFFSET.
    CALL FUNCTION 'FACTORYDATE_CONVERT_TO_DATE'
    EXPORTING
    FACTORYDATE = AUX_FACTORYDATE
    FACTORY_CALENDAR_ID = AUX_FABKL
    IMPORTING
    DATE = AUX_CALENDARDATE
    EXCEPTIONS
    CALENDAR_BUFFER_NOT_LOADABLE = 1
    FACTORYDATE_AFTER_RANGE = 2
    FACTORYDATE_BEFORE_RANGE = 3
    FACTORYDATE_INVALID = 4
    FACTORY_CALENDAR_ID_MISSING = 5
    FACTORY_CALENDAR_NOT_FOUND = 6
    OTHERS = 7.
    P_TDAY = AUX_CALENDARDATE.
    ENDFORM. " DATE_WITH_OFFSET
    *& Form GET_CUMULATIVE_OUTPUT
    text
    --> p1 text
    <-- p2 text
    FORM GET_CUMULATIVE_OUTPUT .
    CLEAR: AUX_LOW, AUX_HIGH.
    MOVE: SY-DATUM TO AUX_LOW,
    SY-DATUM TO AUX_HIGH.
    MOVE: '01' TO AUX_LOW+6(2),
    '31' TO AUX_HIGH+6(2).
    REFRESH IT_MKPF_MSEG.
    CLEAR AUX_MNG.
    SELECT MKPFMBLNR MKPFMJAHR MKPF~BUDAT
    MSEGBWART MSEGMATNR MSEGMENGE MSEGMEINS MSEGDMBTR MSEGWERKS
    INTO TABLE IT_MKPF_MSEG
    FROM MKPF JOIN MSEG
    ON MKPFMBLNR EQ MSEGMBLNR
    WHERE MKPF~BUDAT BETWEEN AUX_LOW AND AUX_HIGH
    AND MKPF~MJAHR EQ AUX_CURRENT+0(4)
    AND MKPF~VGART EQ 'WS'
    AND MSEG~ZEILE EQ 1
    AND MSEG~WERKS EQ SO_WERKS
    AND MSEG~MATNR EQ IT_PKHD-MATNR
    AND MSEG~BWART IN ('131', '132').
    IF NOT IT_MKPF_MSEG[] IS INITIAL.
    LOOP AT IT_MKPF_MSEG.
    AUX_MNG = AUX_MNG + IT_MKPF_MSEG-MENGE.
    CLEAR IT_MKPF_MSEG.
    ENDLOOP.
    ENDIF.
    MOVE AUX_MNG TO IT_TEMP-GSMNG_OUTM.
    READ TABLE IT_MKPF_MSEG INDEX 1.
    MOVE IT_MKPF_MSEG-MEINS TO IT_TEMP-MEINS_OUTM.
    REFRESH IT_COBK.
    SELECT DISTINCT BLPP~RUECK FROM BLPK INNER JOIN BLPP
    ON BLPKPRTNR EQ BLPPPRTNR
    INTO TABLE IT_COBK
    WHERE BLPK~WERKS EQ SO_WERKS
    AND BLPK~MATNR EQ SO_MATNR
    AND BLPK~DATUM BETWEEN AUX_LOW
    AND AUX_HIGH
    AND BLPP~PRTPS EQ '0002'.
    IF NOT IT_COBK[] IS INITIAL.
    REFRESH IT_COEPL.
    SELECT KOKRS BELNR FROM COBK
    INTO CORRESPONDING FIELDS OF TABLE IT_COEPL
    FOR ALL ENTRIES IN IT_COBK
    WHERE REFBT EQ 'R'
    AND REFBN EQ IT_COBK-RUECK
    AND BLDAT BETWEEN AUX_LOW AND AUX_HIGH.
    CLEAR IT_CAPACITIES.
    REFRESH IT_CAPACITIES.
    LOOP AT IT_COEPL.
    SELECT LSBBTR MEINB FROM COEPL
    APPENDING CORRESPONDING FIELDS OF TABLE IT_CAPACITIES
    WHERE KOKRS EQ IT_COEPL-KOKRS
    AND BELNR EQ IT_COEPL-BELNR
    AND OBJNR LIKE '%DLABOR'.
    CALL FUNCTION 'UNIT_SUM'
    IMPORTING
    QUANTITY_SUM = IT_TEMP-KAPBD_OUTM
    UNIT_SUM = AUX_SUM_UNIT
    TABLES
    QUANTITIES_UNITS = IT_CAPACITIES.
    CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
    EXPORTING
    INPUT = IT_TEMP-KAPBD_OUTM
    UNIT_IN = AUX_SUM_UNIT
    UNIT_OUT = 'STD'
    IMPORTING
    OUTPUT = IT_TEMP-KAPBD_OUTM.
    ENDLOOP.
    READ TABLE IT_CAPACITIES INDEX 1.
    MOVE IT_CAPACITIES-MEINB TO IT_TEMP-KEINH_OUTM.
    ENDIF.
    ENDFORM. " GET_CUMULATIVE_OUTPUT
    *& Form GET_FINISHEDGOODS_DATA
    text
    --> p1 text
    <-- p2 text
    FORM GET_FINISHEDGOODS_DATA .
    GET PLANNED ORDER DATA
    REFRESH IT_PLAF.
    CLEAR: AUX_KAPBD, AUX_KBEAREST, AUX_KRUEREST, AUX_GSMNG.
    SELECT * FROM PLAF INTO TABLE IT_PLAF
    WHERE MATNR EQ IT_TEMP-FINISHED
    AND ( PAART EQ 'KD' OR PAART EQ 'PE' )
    AND RATID GT 0
    AND PEDTR GE AUX_BORD
    AND PEDTR LE AUX_DAY5.
    IF NOT IT_PLAF[] IS INITIAL.
    LOOP AT IT_PLAF.
    CLEAR: AUX_KAPBD, AUX_GSMNG.
    REFRESH IT_KBED_KAKO.
    SELECT KBEDKBEAREST KBEDKRUEREST KBED~KEINH
    FROM KBED INNER JOIN KAKO
    ON KBEDKAPID EQ KAKOKAPID
    INTO TABLE IT_KBED_KAKO
    WHERE KBED~BEDID = IT_PLAF-RATID
    AND KAKO~KAPAR = '001'.
    IF NOT IT_KBED_KAKO[] IS INITIAL.
    CLEAR AUX_KAPBD.
    LOOP AT IT_KBED_KAKO.
    IF IT_KBED_KAKO-KEINH NE 'STD'.
    CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
    EXPORTING
    INPUT = IT_KBED_KAKO-KBEAREST
    UNIT_IN = IT_KBED_KAKO-KEINH
    UNIT_OUT = 'STD'
    IMPORTING
    OUTPUT = IT_KBED_KAKO-KBEAREST.
    CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
    EXPORTING
    INPUT = IT_KBED_KAKO-KRUEREST
    UNIT_IN = IT_KBED_KAKO-KEINH
    UNIT_OUT = 'STD'
    IMPORTING
    OUTPUT = IT_KBED_KAKO-KRUEREST.
    ENDIF.
    ADD IT_KBED_KAKO-KBEAREST TO AUX_KBEAREST.
    ADD IT_KBED_KAKO-KRUEREST TO AUX_KRUEREST.
    CLEAR IT_KBED_KAKO.
    ENDLOOP.
    AUX_KAPBD = AUX_KBEAREST + AUX_KRUEREST.
    ENDIF.
    READ TABLE IT_KBED_KAKO INDEX 1.
    CASE IT_PLAF-PEDTR.
    WHEN AUX_DAY5.
    AUX_GSMNG = IT_PLAF-GSMNG.
    IT_TEMP-F_GSMNG_DAY5 = IT_TEMP-F_GSMNG_DAY5 + AUX_GSMNG.
    IT_TEMP-F_MEINS_DAY5 = IT_PLAF-MEINS.
    IT_TEMP-F_KAPBD_DAY5 = IT_TEMP-F_KAPBD_DAY5 + AUX_KAPBD.
    IT_TEMP-F_KEINH_DAY5 = IT_KBED_KAKO-KEINH.
    WHEN AUX_DAY4.
    AUX_GSMNG = IT_PLAF-GSMNG.
    IT_TEMP-F_GSMNG_DAY4 = IT_TEMP-F_GSMNG_DAY4 + AUX_GSMNG.
    IT_TEMP-F_MEINS_DAY4 = IT_PLAF-MEINS.
    IT_TEMP-F_KAPBD_DAY4 = IT_TEMP-F_KAPBD_DAY4 + AUX_KAPBD.
    IT_TEMP-F_KEINH_DAY4 = IT_KBED_KAKO-KEINH.
    WHEN AUX_DAY3.
    AUX_GSMNG = IT_PLAF-GSMNG.
    IT_TEMP-F_GSMNG_DAY3 = IT_TEMP-F_GSMNG_DAY3 + AUX_GSMNG.
    IT_TEMP-F_MEINS_DAY3 = IT_PLAF-MEINS.
    IT_TEMP-F_KAPBD_DAY3 = IT_TEMP-F_KAPBD_DAY3 + AUX_KAPBD.
    IT_TEMP-F_KEINH_DAY3 = IT_KBED_KAKO-KEINH.
    WHEN AUX_DAY2.
    AUX_GSMNG = IT_PLAF-GSMNG.
    IT_TEMP-F_GSMNG_DAY2 = IT_TEMP-F_GSMNG_DAY2 + AUX_GSMNG.
    IT_TEMP-F_MEINS_DAY2 = IT_PLAF-MEINS.
    IT_TEMP-F_KAPBD_DAY2 = IT_TEMP-F_KAPBD_DAY2 + AUX_KAPBD.
    IT_TEMP-F_KEINH_DAY2 = IT_KBED_KAKO-KEINH.
    WHEN AUX_DAY1.
    AUX_GSMNG = IT_PLAF-GSMNG.
    IT_TEMP-F_GSMNG_DAY1 = IT_TEMP-F_GSMNG_DAY1 + AUX_GSMNG.
    IT_TEMP-F_MEINS_DAY1 = IT_PLAF-MEINS.
    IT_TEMP-F_KAPBD_DAY1 = IT_TEMP-F_KAPBD_DAY1 + AUX_KAPBD.
    IT_TEMP-F_KEINH_DAY1 = IT_KBED_KAKO-KEINH.
    WHEN AUX_TDAY.
    AUX_GSMNG = IT_PLAF-GSMNG.
    IT_TEMP-F_GSMNG_TDAY = IT_TEMP-F_GSMNG_TDAY + AUX_GSMNG.
    IT_TEMP-F_MEINS_TDAY = IT_PLAF-MEINS.
    IT_TEMP-F_KAPBD_TDAY = IT_TEMP-F_KAPBD_TDAY + AUX_KAPBD.
    IT_TEMP-F_KEINH_TDAY = IT_KBED_KAKO-KEINH.
    WHEN OTHERS.
    AUX_GSMNG = IT_PLAF-GSMNG.
    IT_TEMP-F_GSMNG_BORD = IT_TEMP-F_GSMNG_BORD + AUX_GSMNG.
    IT_TEMP-F_MEINS_BORD = IT_PLAF-MEINS.
    IT_TEMP-F_KAPBD_BORD = IT_TEMP-F_KAPBD_BORD + AUX_KAPBD.
    IT_TEMP-F_KEINH_BORD = IT_KBED_KAKO-KEINH.
    ENDCASE.
    IT_TEMP-F_GSMNG_OUTN = IT_TEMP-F_GSMNG_OUTN + AUX_GSMNG.
    IT_TEMP-F_KAPBD_OUTN = IT_TEMP-F_KAPBD_OUTN + AUX_KAPBD.
    ENDLOOP.
    READ TABLE IT_PLAF INDEX 1.
    MOVE IT_PLAF-MEINS TO IT_TEMP-F_MEINS_OUTN.
    READ TABLE IT_KBED_KAKO INDEX 1.
    MOVE IT_KBED_KAKO-KEINH TO IT_TEMP-F_KEINH_OUTN.
    ENDIF.
    ENDFORM. " GET_FINISHEDGOODS_DATA
    *& Form GET_ACTUAL_MONTH_DATA
    text
    --> p1 text
    <-- p2 text
    FORM GET_ACTUAL_MONTH_DATA .
    CLEAR: AUX_LOW, AUX_HIGH.
    MOVE: '01' TO SO_BUDAT-LOW+6(2),
    SO_BUDAT-LOW TO AUX_LOW,
    '31' TO SO_BUDAT-LOW+6(2),
    SO_BUDAT-LOW TO AUX_HIGH.
    REFRESH IT_MKPF_MSEG.
    CLEAR AUX_MNG.
    SELECT MKPFMBLNR MKPFMJAHR MKPF~BUDAT
    MSEGBWART MSE

    Hi Ramya,
    Your program contains a lot of BIG standard tables, these tables
    usually contain huge amount of data,
    plus you have used SELECT * in many places, try to avoid that and replace with only those field names that are reqd.
    even the joins are on huge tables, performance could improve on those  if you can put some more conditions or keys to the joins to make it more specific.
    even after that if it gives the Runtime Error then you have 2 options:
    1. Ask your Basis to increase Time limit for program executing in foreground.
    2. Execute your program in Background Mode.
    Regards,
    Samson Rodrigues.

  • Performance Issue For Opening And Closing Balance In FBL1N/3N/5N

    Dear experts,
                        I Am Having Requirement to Bring Opening And Closing Balance In FBL1N, FBL3N, FBL5N.
    For This requirement I Used BADI : FI_ITEMS_CH_DATA~CHANGE_ITEMS, below is my Code For FBL1N, And I've Done the same For 3N/5N...With Related BAPI
    *   IF SY-TCODE = 'FBL1N'.
    *    LOOP AT ct_items INTO gs_items.
    *      CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    *        EXPORTING
    *          date      = gs_items-budat
    *          days      = '01'
    *          months    = '00'
    *          signum    = '-'
    *          years     = '00'
    *        IMPORTING
    *          calc_date = lv_date.
    *      CALL FUNCTION 'BAPI_AP_ACC_GETKEYDATEBALANCE'
    *        EXPORTING
    *          companycode        = gs_items-bukrs
    *          vendor             = gs_items-konto
    *          keydate            = lv_date
    **   BALANCESPGLI       = ' '
    **   NOTEDITEMS         = ' '
    ** IMPORTING
    **   RETURN             =
    *        TABLES
    *          keybalance         =  lv_obal.
    *      CALL FUNCTION 'BAPI_AP_ACC_GETKEYDATEBALANCE'
    *        EXPORTING
    *          companycode        = gs_items-bukrs
    *          vendor             = gs_items-konto
    *          keydate            = gs_items-budat
    **   BALANCESPGLI       = ' '
    **   NOTEDITEMS         = ' '
    ** IMPORTING
    **   RETURN             =
    *        TABLES
    *          keybalance         = lv_cbal
    *      READ TABLE lv_cbal INTO gs_cbal INDEX 1.
    *      gs_items-cbal = gs_cbal-lc_bal.
    *      READ TABLE lv_obal INTO gs_obal INDEX 1.
    *      gs_items-obal = gs_obal-lc_bal.
    *      MODIFY ct_items FROM gs_items TRANSPORTING obal cbal.
    *      CLEAR: gs_items,gs_obal,gs_cbal.
    *    ENDLOOP.
    *   ENDIF.
    So, Above Code Causing Me the Performance Issue, Kindly Suggest Me the Solution..
    Regards,
    uday.

    Hi Uday,
    I am sending you the code i used for the creation a Zreport based on FBL5N. Please check if it can of any help.
    *& Report  ZFBL5N                                                      *
    REPORT  zfbl5n_new  .
    TABLES : bsid,knc1,lfc1.
    TYPE-POOLS: slis.
    TYPES: BEGIN OF ty_bsid,
              bukrs TYPE bsid-bukrs,
              kunnr TYPE bsid-kunnr,
              belnr TYPE bsid-belnr,
              buzei TYPE bsid-buzei,
              bldat TYPE bsid-bldat,
              blart TYPE bsid-blart,
              bschl TYPE bsid-bschl,
              shkzg TYPE bsid-shkzg,
              dmbtr TYPE bsid-dmbtr,
              augdt TYPE bsid-augdt,
              augbl TYPE bsid-augbl,
              zuonr TYPE bsid-zuonr,
              sgtxt TYPE bsid-sgtxt,
              zfbdt TYPE bsid-zfbdt,
              zterm TYPE bsid-zterm,
              zbd1t TYPE bsid-zbd1t,
              zbd2t TYPE bsid-zbd2t,
              zbd3t TYPE bsid-zbd3t,
              kkber TYPE bsid-kkber,
              bstat TYPE bsid-bstat,
              umskz TYPE bsid-umskz,
            END OF ty_bsid.
    TYPES: BEGIN OF ty_bsik,
             bukrs TYPE bsik-bukrs,
              lifnr TYPE bsik-lifnr,
              belnr TYPE bsik-belnr,
              buzei TYPE bsik-buzei,
              bldat TYPE bsik-bldat,
              blart TYPE bsik-blart,
              bschl TYPE bsik-bschl,
              shkzg TYPE bsik-shkzg,
              dmbtr TYPE bsik-dmbtr,
              augdt TYPE bsik-augdt,
              augbl TYPE bsik-augbl,
              zuonr TYPE bsik-zuonr,
              sgtxt TYPE bsik-sgtxt,
               zfbdt TYPE bsik-zfbdt,
    *         KKBER TYPE bsik-kkber,
              zterm TYPE bsik-zterm,
               zbd1t TYPE bsik-zbd1t,
              zbd2t TYPE bsik-zbd2t,
              zbd3t TYPE bsik-zbd3t,
              bstat TYPE bsid-bstat,
              umskz TYPE bsid-umskz,
            END OF ty_bsik.
    TYPES: BEGIN OF ty_final,
              belnr TYPE bsid-belnr,
    *         buzei TYPE bsak-buzei,
              bldat TYPE bsid-bldat,
              blart TYPE bsid-blart,
              chq TYPE bsid-zuonr,
              debit TYPE bsid-dmbtr,
              credit TYPE bsid-dmbtr,
              txt TYPE bsid-sgtxt,
              date TYPE bsid-zfbdt,
              kkber TYPE bsid-kkber,
              zterm TYPE bsid-zterm,
              augbl TYPE bsid-augbl,
              augdt TYPE bsid-augdt,
              flag TYPE c,
            END OF ty_final.
    TYPES : BEGIN OF gs_openbal,
              bukrs TYPE bapi3007_2-comp_code,
              kunnr TYPE bapi3007_2-customer,
              dmbtr TYPE bapi3007_2-lc_amount,
             END OF gs_openbal.
    DATA: it_bsid TYPE STANDARD TABLE OF ty_bsid,
           it_bsik TYPE STANDARD TABLE OF ty_bsik,
           it_final TYPE STANDARD TABLE OF ty_final.
    DATA: wa_bsid TYPE ty_bsid,
           wa_bsik TYPE ty_bsik,
           wa_final TYPE ty_final.
    DATA: w_days TYPE t5a4a-dlydy,
           w_month TYPE t5a4a-dlymo,
           w_year TYPE t5a4a-dlyyr,
           w_date TYPE p0001-begda,
           w_name1 TYPE kna1-name1,
           w_ort01 TYPE kna1-ort01,
           w_lifnr TYPE kna1-lifnr,
           w_dmbtr1 TYPE bsid-dmbtr,
           w_dmbtr2 TYPE bsid-dmbtr,
           w_dmbtr3 TYPE bsad-dmbtr,
           w_dmbtr4 TYPE bsad-dmbtr,
           w_opbal TYPE bsid-dmbtr,
           w_credit TYPE bsik-dmbtr,
           w_debit TYPE bsik-dmbtr,
           w_clobal TYPE bsik-dmbtr,
           w_credit1 TYPE bsik-dmbtr,
           w_debit1 TYPE bsik-dmbtr,
           w_clobal1 TYPE bsik-dmbtr.
    DATA: ld_yrper LIKE rwcoom-fiscper,
           kunnr LIKE kna1-kunnr,
           x_norm TYPE c,
           x_park,
           x_apar,
           x_merk,
           ok_code(4),
           wa_x001 LIKE x001,
           return LIKE bapireturn,
           line_count LIKE sy-loopc,
           number_of_records TYPE i,
           xindex LIKE sy-tabix,
           open LIKE knc1-um01s,
           temp(20),
           close LIKE knc1-um01s,
           gjahr LIKE bsid-gjahr,
           period LIKE bkpf-monat,
           f(1),
           v_char(2),
           closec(20),
           openc(20),
           debit LIKE bapi3007_2-lc_amount,
           credit LIKE debit.
    DATA : v_dmbtr LIKE bsid-dmbtr.
    *DATA : tot_debit LIKE t_ar-debit,
    *       tot_credit LIKE t_ar-credit.
    DATA : t_kna1 LIKE kna1 OCCURS 1  WITH HEADER LINE,
            t_knb1 LIKE knb1 OCCURS 10 WITH HEADER LINE.
    DATA ibsid LIKE bsid OCCURS 0 WITH HEADER LINE.
    DATA ibsad LIKE bsad OCCURS 0 WITH HEADER LINE.
    DATA ibsik LIKE bsik OCCURS 0 WITH HEADER LINE.
    DATA ibsak LIKE bsak OCCURS 0 WITH HEADER LINE.
    DATA : it_fieldcat_alv   TYPE slis_t_fieldcat_alv,
            wa_fieldcat_alv     TYPE slis_fieldcat_alv,
            is_layout_alv  TYPE slis_layout_alv,
            wa_layout_alv  TYPE slis_layout_alv,
            it_list_top_of_page TYPE slis_t_listheader,
            it_events TYPE slis_t_event,
            wa_events TYPE LINE OF slis_t_event.
    DATA : BEGIN OF ibukrs OCCURS 0,
               bukrs LIKE t001-bukrs,
              END OF ibukrs.
    DATA : BEGIN OF ikunnr1 OCCURS 0,
              kunnr LIKE knc1-kunnr,
             END OF ikunnr1.
    DATA : BEGIN OF ikunnr OCCURS 0,
               kunnr LIKE knc1-kunnr,
               bukrs LIKE t001-bukrs,
               lifnr LIKE lfc1-lifnr,
              END OF ikunnr.
    DATA: it_sort TYPE slis_t_sortinfo_alv,
           wa_sort TYPE slis_sortinfo_alv.
    DATA:    r_bschl TYPE RANGE OF bschl,
              wa_bschl LIKE LINE OF r_bschl.
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    PARAMETERS : p_kunnr TYPE bsid-kunnr OBLIGATORY,
                  p_bukrs TYPE bsid-bukrs OBLIGATORY.
    SELECT-OPTIONS: so_budat FOR bsid-budat .
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
    PARAMETERS : p_normal AS CHECKBOX,
                  p_spl    AS CHECKBOX,
                  p_vendor AS CHECKBOX.
    SELECTION-SCREEN END OF BLOCK b2.
    PERFORM get_data.
    PERFORM process_data.
    *PERFORM calculate_openbal. " Commented by anish
    PERFORM calculate_open_bal.
    PERFORM calculate_closing_bal.
    PERFORM build_catalog_sort USING it_sort.
    PERFORM reuse_alv_events_get .
    PERFORM display_data.
    *&      Form  GET_DATA
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM get_data .
       SELECT bukrs kunnr belnr buzei bldat blart bschl shkzg dmbtr augdt augbl zuonr sgtxt zfbdt zterm zbd1t zbd2t zbd3t kkber
         bstat umskz FROM bsid
         INTO TABLE it_bsid
         WHERE bukrs = p_bukrs
          AND kunnr = p_kunnr
          AND budat IN so_budat.
       SELECT bukrs kunnr belnr buzei bldat blart bschl shkzg dmbtr augdt augbl zuonr sgtxt zfbdt zterm zbd1t zbd2t zbd3t kkber
        bstat umskz FROM bsad
        APPENDING TABLE it_bsid
        WHERE bukrs = p_bukrs
         AND kunnr = p_kunnr
         AND budat IN so_budat.
       SELECT SINGLE name1 ort01 lifnr FROM kna1
         INTO (w_name1 , w_ort01 , w_lifnr)
         WHERE kunnr = p_kunnr.
       IF p_vendor IS NOT INITIAL.
         SELECT bukrs lifnr belnr buzei bldat blart bschl shkzg dmbtr augdt augbl zuonr sgtxt zfbdt zterm zbd1t zbd2t zbd3t
         bstat umskz   FROM bsik
         APPENDING TABLE it_bsik
         WHERE bukrs = p_bukrs
           AND lifnr = w_lifnr
           AND budat IN so_budat.
         SELECT bukrs lifnr belnr buzei bldat blart bschl shkzg dmbtr augdt augbl zuonr sgtxt zfbdt zterm zbd1t zbd2t zbd3t
         bstat umskz  FROM bsak
        APPENDING TABLE it_bsik
        WHERE bukrs = p_bukrs
          AND lifnr = w_lifnr
          AND budat IN so_budat.
       ENDIF.
       SORT it_bsid BY bschl.
       DELETE  it_bsid WHERE bschl = '04'.
       DELETE  it_bsid WHERE bschl = '07'.
       DELETE  it_bsid WHERE bschl = '17'.
       DELETE  it_bsid WHERE bschl = '34'.
       DELETE  it_bsid WHERE bschl = '27'.
       DELETE  it_bsid WHERE bschl = '37'.
       SORT it_bsik BY bschl.
       DELETE  it_bsik WHERE bschl = '04'.
       DELETE  it_bsik WHERE bschl = '07'.
       DELETE  it_bsik WHERE bschl = '17'.
       DELETE  it_bsik WHERE bschl = '34'.
       DELETE  it_bsik WHERE bschl = '27'.
       DELETE  it_bsik WHERE bschl = '37'.
    ENDFORM.                    " GET_DATA
    *&      Form  PROCESS_DATA
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM process_data .
       DATA:okay       TYPE c VALUE space.
       w_month = '00'.
       w_year = '00'.
       SORT it_bsid BY bldat .
       LOOP AT it_bsid INTO wa_bsid.
         PERFORM check_item_ok  USING p_normal
                                      p_spl
                                      p_vendor
    *                               x_park
                                      wa_bsid
                                CHANGING okay.
         CHECK okay = 'X'.
         wa_final-belnr = wa_bsid-belnr.
         wa_final-bldat = wa_bsid-bldat.
         wa_final-blart = wa_bsid-blart.
         wa_final-txt = wa_bsid-sgtxt.
         wa_final-kkber = wa_bsid-kkber.
         wa_final-zterm = wa_bsid-zterm.
         wa_final-augbl = wa_bsid-augbl.
         wa_final-augdt = wa_bsid-augdt.
         wa_final-flag = 'C'.
         IF wa_bsid-blart = 'DZ'.
           wa_final-chq = wa_bsid-zuonr.
         ENDIF.
         IF wa_bsid-shkzg = 'S'.
           wa_final-debit = wa_bsid-dmbtr.
         ELSEIF wa_bsid-shkzg = 'H'.
           wa_final-credit = wa_bsid-dmbtr.
         ENDIF.
         w_credit = w_credit + wa_final-credit.
         w_debit = w_debit + wa_final-debit.
    ****** Net due  date
         IF wa_bsid-zbd1t IS NOT INITIAL.
           w_days = wa_bsid-zbd1t.
         ELSEIF wa_bsid-zbd2t IS NOT INITIAL.
           w_days = wa_bsid-zbd2t.
         ELSEIF wa_bsid-zbd3t IS NOT INITIAL.
           w_days = wa_bsid-zbd3t.
         ENDIF.
         IF w_days IS INITIAL.
           wa_final-date = wa_bsid-zfbdt.
         ELSE.
           CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
             EXPORTING
               date      = wa_bsid-zfbdt
               days      = w_days
               months    = w_month
               signum    = '+'
               years     = w_year
             IMPORTING
               calc_date = w_date.
           wa_final-date = w_date.
         ENDIF.
         APPEND wa_final TO it_final.
         CLEAR: w_days , w_date , wa_final .
       ENDLOOP.
       IF it_bsik IS NOT INITIAL.
         CLEAR: w_days , w_date.
         SORT it_bsik BY bldat.
         LOOP AT it_bsik INTO wa_bsik.
           wa_final-belnr = wa_bsik-belnr.
           wa_final-bldat = wa_bsik-bldat.
           wa_final-blart = wa_bsik-blart.
           wa_final-txt = wa_bsik-sgtxt.
    *    wa_final-kkber = wa_bsik-kkber.
           wa_final-zterm = wa_bsik-zterm.
           wa_final-augbl = wa_bsik-augbl.
           wa_final-augdt = wa_bsik-augdt.
           wa_final-flag = 'V'.
           IF wa_bsik-blart = 'DZ'.
             wa_final-chq = wa_bsik-zuonr.
           ENDIF.
           IF wa_bsik-shkzg = 'S'.
             wa_final-debit = wa_bsik-dmbtr.
           ELSEIF wa_bsik-shkzg = 'H'.
             wa_final-credit = wa_bsik-dmbtr.
           ENDIF.
           w_credit1 = w_credit1 + wa_final-credit.
           w_debit1 = w_debit1 + wa_final-debit.
    *******  Net Due date
           IF wa_bsik-zbd1t IS NOT INITIAL.
             w_days = wa_bsik-zbd1t.
           ELSEIF wa_bsik-zbd2t IS NOT INITIAL.
             w_days = wa_bsik-zbd2t.
           ELSEIF wa_bsik-zbd3t IS NOT INITIAL.
             w_days = wa_bsik-zbd3t.
           ENDIF.
           IF w_days IS INITIAL.
             wa_final-date = wa_bsik-zfbdt.
           ELSE.
             CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
               EXPORTING
                 date      = wa_bsik-zfbdt
                 days      = w_days
                 months    = w_month
                 signum    = '+'
                 years     = w_year
               IMPORTING
                 calc_date = w_date.
           ENDIF.
           wa_final-date = w_date.
           APPEND wa_final TO it_final.
           CLEAR: wa_final.
         ENDLOOP.
       ENDIF.
    ENDFORM.                    " PROCESS_DATA
    *&      Form  DISPLAY_DATA
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM display_data .
       wa_fieldcat_alv-fieldname = 'BELNR'.
       wa_fieldcat_alv-tabname = 'IT_FINAL'.
       wa_fieldcat_alv-seltext_l = text-003.
       wa_fieldcat_alv-outputlen = '11'.
       APPEND wa_fieldcat_alv TO it_fieldcat_alv.
       CLEAR wa_fieldcat_alv.
       wa_fieldcat_alv-fieldname = 'BLDAT'.
       wa_fieldcat_alv-tabname = 'IT_FINAL'.
       wa_fieldcat_alv-seltext_l = text-004.
       wa_fieldcat_alv-outputlen = '13'.
       APPEND wa_fieldcat_alv TO it_fieldcat_alv.
       CLEAR wa_fieldcat_alv.
       wa_fieldcat_alv-fieldname = 'BLART'.
       wa_fieldcat_alv-tabname = 'IT_FINAL'.
       wa_fieldcat_alv-seltext_l = text-005.
       wa_fieldcat_alv-outputlen = '02'.
       APPEND wa_fieldcat_alv TO it_fieldcat_alv.
       CLEAR wa_fieldcat_alv.
       wa_fieldcat_alv-fieldname = 'CHQ'.
       wa_fieldcat_alv-tabname = 'IT_FINAL'.
       wa_fieldcat_alv-seltext_l = text-006.
       wa_fieldcat_alv-outputlen = '09'.
       APPEND wa_fieldcat_alv TO it_fieldcat_alv.
       CLEAR wa_fieldcat_alv.
       wa_fieldcat_alv-fieldname = 'DEBIT'.
       wa_fieldcat_alv-tabname = 'IT_FINAL'.
       wa_fieldcat_alv-seltext_l = text-007.
       wa_fieldcat_alv-outputlen = '15'.
       wa_fieldcat_alv-do_sum = 'X'.
       APPEND wa_fieldcat_alv TO it_fieldcat_alv.
       CLEAR wa_fieldcat_alv.
       wa_fieldcat_alv-fieldname = 'CREDIT'.
       wa_fieldcat_alv-tabname = 'IT_FINAL'.
       wa_fieldcat_alv-seltext_l = text-008.
       wa_fieldcat_alv-outputlen = '15'.
       wa_fieldcat_alv-do_sum = 'X'.
       APPEND wa_fieldcat_alv TO it_fieldcat_alv.
       CLEAR wa_fieldcat_alv.
       wa_fieldcat_alv-fieldname = 'TXT'.
       wa_fieldcat_alv-tabname = 'IT_FINAL'.
       wa_fieldcat_alv-seltext_l = text-009.
       wa_fieldcat_alv-outputlen = '50'.
       APPEND wa_fieldcat_alv TO it_fieldcat_alv.
       CLEAR wa_fieldcat_alv.
       wa_fieldcat_alv-fieldname = 'DATE'.
       wa_fieldcat_alv-tabname = 'IT_FINAL'.
       wa_fieldcat_alv-seltext_l = text-010.
       wa_fieldcat_alv-outputlen = '12'.
       APPEND wa_fieldcat_alv TO it_fieldcat_alv.
       CLEAR wa_fieldcat_alv.
       wa_fieldcat_alv-fieldname = 'KKBER'.
       wa_fieldcat_alv-tabname = 'IT_FINAL'.
       wa_fieldcat_alv-seltext_l = text-011.
       wa_fieldcat_alv-outputlen = '04'.
       APPEND wa_fieldcat_alv TO it_fieldcat_alv.
       CLEAR wa_fieldcat_alv.
       wa_fieldcat_alv-fieldname = 'ZTERM'.
       wa_fieldcat_alv-tabname = 'IT_FINAL'.
       wa_fieldcat_alv-seltext_l = text-012.
       wa_fieldcat_alv-outputlen = '13'.
       APPEND wa_fieldcat_alv TO it_fieldcat_alv.
       CLEAR wa_fieldcat_alv.
       wa_fieldcat_alv-fieldname = 'AUGBL'.
       wa_fieldcat_alv-tabname = 'IT_FINAL'.
       wa_fieldcat_alv-seltext_l = text-013.
       wa_fieldcat_alv-outputlen = '15'.
       APPEND wa_fieldcat_alv TO it_fieldcat_alv.
       CLEAR wa_fieldcat_alv.
       wa_fieldcat_alv-fieldname = 'AUGDT'.
       wa_fieldcat_alv-tabname = 'IT_FINAL'.
       wa_fieldcat_alv-seltext_l = text-014.
       wa_fieldcat_alv-outputlen = '17'.
       APPEND wa_fieldcat_alv TO it_fieldcat_alv.
       CLEAR wa_fieldcat_alv.
       wa_fieldcat_alv-fieldname = 'FLAG'.
       wa_fieldcat_alv-tabname = 'IT_FINAL'.
       wa_fieldcat_alv-tech = 'X'.
       APPEND wa_fieldcat_alv TO it_fieldcat_alv.
       CLEAR wa_fieldcat_alv.
       CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
        EXPORTING
          i_callback_program             = sy-repid
          is_layout                      = wa_layout_alv
          it_fieldcat                    = it_fieldcat_alv
    *   IT_EXCLUDING                   =
    *   IT_SPECIAL_GROUPS              =
          it_sort                        = it_sort
          it_events                      = it_events
          i_save                            = 'A'
         TABLES
           t_outtab                       = it_final
        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.
    *  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    *    EXPORTING
    *      i_callback_program                = sy-repid
    *     i_callback_top_of_page            = 'TOP_OF_PAGE'
    *      is_layout                         = wa_layout_alv
    *      it_fieldcat                       = it_fieldcat_alv
    *      it_sort                           = it_sort
    ***   I_DEFAULT                         = 'X'
    **      i_save                            = 'A'
    ***   IT_EVENTS                         =
    *     TABLES
    *       t_outtab                          = it_final
    *    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.                    " DISPLAY_DATA
    *&      Form  TOP_OF_PAGE
    *       Header at top of page.
    FORM top_of_page.
       SKIP 1.
       WRITE: AT 35 'Account Statement from' , so_budat-low , 'to' , so_budat-high.
       SKIP 2.
       WRITE: AT /5 'CUSTOMER:' , p_kunnr.
       WRITE: AT 35 'Name:' , w_name1.
       WRITE: AT /5 'Company:' , p_bukrs.
       WRITE: AT 35 'City:' , w_ort01.
       SKIP 1.
       WRITE: AT /5 'Opening Balance as on' , so_budat-low , '   ' ,  w_opbal LEFT-JUSTIFIED.
       SKIP 2.
    ENDFORM.                    "TOP_OF_PAGE
    *&      Form  END_OF_PAGE
    *       Footer at End of page.
    FORM end_of_page.
       SKIP 2.
       IF so_budat-high IS NOT INITIAL.
         WRITE: AT 5 'Closing Balance as on' , so_budat-high , '   ' ,  w_clobal LEFT-JUSTIFIED.
       ELSE.
         WRITE: AT 5 'Closing Balance  ' , w_clobal LEFT-JUSTIFIED.
       ENDIF.
    ENDFORM.                    "end_of_page
    *&      Form  CALCULATE_OPENBAL
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM calculate_openbal .
       DATA:v_gjahr       TYPE bsid-gjahr.
       DATA: v_period LIKE  t009b-poper,v_monat LIKE t001-periv.
       CALL FUNCTION 'FI_PERIOD_DETERMINE'
              EXPORTING
                   i_budat        = so_budat-low
                   i_bukrs        = p_bukrs
    *           I_PERIV        = ' '
    *           I_GJAHR        = 0000
    *           I_MONAT        = 00
    *           X_XMO16        = ' '
              IMPORTING
                   e_gjahr        = v_gjahr
    *            e_monat        = v_monat
                   e_poper        = v_period.
       IF sy-subrc NE 0.
       ENDIF.
       DATA: f_date LIKE sy-datum.
       CALL FUNCTION 'FIRST_DAY_IN_PERIOD_GET'
         EXPORTING
           i_gjahr  = v_gjahr
           i_monmit = 00
           i_periv  = 'V3'
           i_poper  = v_period
         IMPORTING
           e_date   = f_date.
       period = v_period - 1.
       gjahr = v_gjahr.
       DATA wa_kna1 LIKE kna1.
       CALL FUNCTION 'READ_KNA1'
         EXPORTING
           xkunnr         = p_kunnr
         IMPORTING
           xkna1          = wa_kna1
         EXCEPTIONS
           key_incomplete = 1
           not_authorized = 2
           not_found      = 3
           OTHERS         = 4.
       IF sy-subrc <> 0.
         MESSAGE w023(zwww).
         CALL SCREEN 0010.
       ENDIF.
       MOVE-CORRESPONDING wa_kna1 TO t_kna1.
       APPEND t_kna1.
       SELECT kunnr FROM kna1 INTO TABLE ikunnr1
         WHERE kunnr = p_kunnr.
       SELECT bukrs FROM t001 INTO TABLE ibukrs
        FOR ALL ENTRIES IN t_knb1
        WHERE bukrs = t_knb1-bukrs.
       LOOP AT ikunnr1.
         LOOP AT ibukrs.
           ikunnr-kunnr = ikunnr1-kunnr.
           ikunnr-bukrs = ibukrs-bukrs.
           READ TABLE t_kna1 WITH  KEY kunnr = ikunnr1-kunnr.
           ikunnr-lifnr = t_kna1-lifnr.
           APPEND ikunnr.
         ENDLOOP.
       ENDLOOP.
       DELETE ikunnr WHERE bukrs NE p_bukrs.
       LOOP AT ikunnr.
         CLEAR: knc1,lfc1,f.
         IF NOT ( ikunnr-kunnr IS INITIAL ) AND NOT ( p_vendor IS INITIAL ).
           SELECT SINGLE * FROM lfc1
                  WHERE gjahr = gjahr AND bukrs = ikunnr-bukrs
                                      AND lifnr = ikunnr-lifnr.
         ENDIF.
         SELECT SINGLE * FROM knc1
           WHERE gjahr = gjahr AND bukrs = p_bukrs
                 AND kunnr = p_kunnr.
         IF sy-subrc = 0.
           CASE period .
             WHEN 12.
               open = knc1-umsav +
               knc1-um01s - knc1-um01h + knc1-um02s - knc1-um02h +
               knc1-um03s - knc1-um03h + knc1-um04s - knc1-um04h +
               knc1-um05s - knc1-um05h + knc1-um06s - knc1-um06h +
               knc1-um07s - knc1-um07h + knc1-um08s - knc1-um08h +
               knc1-um09s - knc1-um09h + knc1-um10s - knc1-um10h +
               knc1-um11s - knc1-um11h + knc1-um12s - knc1-um12h.
               IF NOT ( lfc1 IS INITIAL ).
                 open = open + lfc1-umsav +
                 lfc1-um01s - lfc1-um01h + lfc1-um02s - lfc1-um02h +
                 lfc1-um03s - lfc1-um03h + lfc1-um04s - lfc1-um04h +
                 lfc1-um05s - lfc1-um05h + lfc1-um06s - lfc1-um06h +
                 lfc1-um07s - lfc1-um07h + lfc1-um08s - lfc1-um08h +
                 lfc1-um09s - lfc1-um09h + lfc1-um10s - lfc1-um10h +
                 lfc1-um11s - lfc1-um11h + lfc1-um12s - lfc1-um12h.
               ENDIF.
             WHEN 11.
               open = knc1-umsav +
               knc1-um01s - knc1-um01h + knc1-um02s - knc1-um02h +
               knc1-um03s - knc1-um03h + knc1-um04s - knc1-um04h +
               knc1-um05s - knc1-um05h + knc1-um06s - knc1-um06h +
               knc1-um07s - knc1-um07h + knc1-um08s - knc1-um08h +
               knc1-um09s - knc1-um09h + knc1-um10s - knc1-um10h +
               knc1-um11s - knc1-um11h.
               IF NOT ( lfc1 IS INITIAL ) .
                 open = open + lfc1-umsav +
                 lfc1-um01s - lfc1-um01h + lfc1-um02s - lfc1-um02h +
                 lfc1-um03s - lfc1-um03h + lfc1-um04s - lfc1-um04h +
                 lfc1-um05s - lfc1-um05h + lfc1-um06s - lfc1-um06h +
                 lfc1-um07s - lfc1-um07h + lfc1-um08s - lfc1-um08h +
                 lfc1-um09s - lfc1-um09h + lfc1-um10s - lfc1-um10h +
                 lfc1-um11s - lfc1-um11h.
               ENDIF.
             WHEN 10.
               open = knc1-umsav +
               knc1-um01s - knc1-um01h + knc1-um02s - knc1-um02h +
               knc1-um03s - knc1-um03h + knc1-um04s - knc1-um04h +
               knc1-um05s - knc1-um05h + knc1-um06s - knc1-um06h +
               knc1-um07s - knc1-um07h + knc1-um08s - knc1-um08h +
               knc1-um09s - knc1-um09h + knc1-um10s - knc1-um10h .
               IF NOT ( lfc1 IS INITIAL ) .
                 open = open + lfc1-umsav +
                 lfc1-um01s - lfc1-um01h + lfc1-um02s - lfc1-um02h +
                 lfc1-um03s - lfc1-um03h + lfc1-um04s - lfc1-um04h +
                 lfc1-um05s - lfc1-um05h + lfc1-um06s - lfc1-um06h +
                 lfc1-um07s - lfc1-um07h + lfc1-um08s - lfc1-um08h +
                 lfc1-um09s - lfc1-um09h + lfc1-um10s - lfc1-um10h.
               ENDIF.
             WHEN 9.
               open = knc1-umsav +
               knc1-um01s - knc1-um01h + knc1-um02s - knc1-um02h +
               knc1-um03s - knc1-um03h + knc1-um04s - knc1-um04h +
               knc1-um05s - knc1-um05h + knc1-um06s - knc1-um06h +
               knc1-um07s - knc1-um07h + knc1-um08s - knc1-um08h +
               knc1-um09s - knc1-um09h .
               IF NOT ( lfc1 IS INITIAL ) .
                 open = open + lfc1-umsav +
                 lfc1-um01s - lfc1-um01h + lfc1-um02s - lfc1-um02h +
                 lfc1-um03s - lfc1-um03h + lfc1-um04s - lfc1-um04h +
                 lfc1-um05s - lfc1-um05h + lfc1-um06s - lfc1-um06h +
                 lfc1-um07s - lfc1-um07h + lfc1-um08s - lfc1-um08h +
                 lfc1-um09s - lfc1-um09h.
               ENDIF.
             WHEN 8.
               open = knc1-umsav +
               knc1-um01s - knc1-um01h + knc1-um02s - knc1-um02h +
               knc1-um03s - knc1-um03h + knc1-um04s - knc1-um04h +
               knc1-um05s - knc1-um05h + knc1-um06s - knc1-um06h +
               knc1-um07s - knc1-um07h + knc1-um08s - knc1-um08h.
               IF NOT ( lfc1 IS INITIAL ) .
                 open = open + lfc1-umsav +
                 lfc1-um01s - lfc1-um01h + lfc1-um02s - lfc1-um02h +
                 lfc1-um03s - lfc1-um03h + lfc1-um04s - lfc1-um04h +
                 lfc1-um05s - lfc1-um05h + lfc1-um06s - lfc1-um06h +
                 lfc1-um07s - lfc1-um07h + lfc1-um08s - lfc1-um08h .
               ENDIF.
             WHEN 7.
               open = knc1-umsav +
               knc1-um01s - knc1-um01h + knc1-um02s - knc1-um02h +
               knc1-um03s - knc1-um03h + knc1-um04s - knc1-um04h +
               knc1-um05s - knc1-um05h + knc1-um06s - knc1-um06h +
               knc1-um07s - knc1-um07h .
               IF NOT ( lfc1 IS INITIAL ) .
                 open = open + lfc1-umsav +
                 lfc1-um01s - lfc1-um01h + lfc1-um02s - lfc1-um02h +
                 lfc1-um03s - lfc1-um03h + lfc1-um04s - lfc1-um04h +
                 lfc1-um05s - lfc1-um

  • Performance Issue in ABAP part as suggested by SE30 for the below coding

    Dear Abapers,
    The below coding was done by my seniors and having performance issue i.e in SE30 the abap part is consuming 98% of time.
    Pl. help us to solve this situation.
    With best regards,
    S. Arunachalam.
    the code is:
    REPORT ZOBJLIST LINE-SIZE 320 NO STANDARD PAGE HEADING. "280 to 320
    TABLES: MARA, MAKT, A916, KONP, MVKE, ZSAI_PARAM.
    Input parameters *****************************************************
    DATA IT_MARA LIKE MARA OCCURS 0 WITH HEADER LINE.
    DATA T_CLASS LIKE SCLASS OCCURS 0 WITH HEADER LINE.
    DATA T_CLOBJDAT LIKE CLOBJDAT OCCURS 0 WITH HEADER LINE.
    DATA FLG_COLOR TYPE C.
    DATA WRK_CLASS LIKE KLAH-CLASS.
    DATA WRK_PERCENT TYPE I. " Progress percentage
    DATA WRK_LINES LIKE SY-TABIX. " To store the no. of lines in int.table
    DATA WRK_PROGRESSTEXT(72) . " Progress indicator text
    DATA : BEGIN OF IT_MATNR OCCURS 0,
    MATNR LIKE MARA-MATNR,
    MAKTX LIKE MAKT-MAKTX,
    BISMT LIKE MARA-BISMT, "Thanikai-17.05.2002
    END OF IT_MATNR.
    DATA : BEGIN OF IT_HEADER OCCURS 0,
    MATNR LIKE MARA-MATNR,
    MAKTX LIKE MAKT-MAKTX,
    CLART LIKE SCLASS-KLART,
    CLASS LIKE SCLASS-CLASS,
    BISMT LIKE MARA-BISMT, "Thanikai-17.05.2002
    SCMNG(4) TYPE I, "Thanikai-03.10.2002
    END OF IT_HEADER.
    DATA : BEGIN OF IT_DETAILS OCCURS 0,
    MATNR LIKE MARA-MATNR,
    ZAEHL LIKE CLOBJDAT-ZAEHL,
    ATNAM LIKE CLOBJDAT-ATNAM,
    AUSP1 LIKE CLOBJDAT-AUSP1,
    END OF IT_DETAILS.
    DATA : BEGIN OF IT_DETAILS1 OCCURS 0,
    MATNR LIKE MARA-MATNR,
    ATNAM LIKE CLOBJDAT-ATNAM,
    ZAEHL LIKE CLOBJDAT-ZAEHL,
    END OF IT_DETAILS1.
    DATA: IT_DETAILS2 LIKE IT_DETAILS1 OCCURS 0 WITH HEADER LINE.
    DATA TMP_MATNR LIKE AUSP-OBJEK.
    DATA WRK_FIELD(25).
    DATA WRK_TABNAME(40). " Name of the int.table from wrk_fldname
    DATA WRK_FIELDNAME(40). " Name of the fld name from wrk_fldname
    DATA WRK_FLDNAME(40).
    DATA T_CLOBJDAT_LINES LIKE SY-TABIX.
    DATA WRK_LINES1 LIKE SY-TABIX.
    DATA WRK_FIRST_TIME.
    DATA TMP_STR.
    DATA WRK_AUSP1 LIKE CLOBJDAT-AUSP1.
    DATA: WRK_KBETR LIKE KONP-KBETR. "Thanikai-03.10.2002
    SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-003.
    *PARAMETERS:
    SELECT-OPTIONS:
    P_MATKL FOR MARA-MATKL DEFAULT 'DIAL' OBLIGATORY NO INTERVALS.
    SELECT-OPTIONS : S_MATNR FOR MARA-MATNR MATCHCODE OBJECT MAT1.
    SELECTION-SCREEN END OF BLOCK B3.
    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
    PARAMETERS: P_CLASS LIKE KLAH-CLASS,
    P_KLART LIKE KLAH-KLART DEFAULT '001' OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK B2.
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    PARAMETERS : REQ RADIOBUTTON GROUP RGRP ,
    NREQ RADIOBUTTON GROUP RGRP .
    SELECTION-SCREEN END OF BLOCK B1.
    AT SELECTION-SCREEN.
    IF NOT P_CLASS IS INITIAL.
    WRK_CLASS = P_CLASS.
    ELSE.
    WRK_CLASS = SPACE.
    ENDIF.
    TOP-OF-PAGE.
    IF SY-BATCH NE 'X'.
    PERFORM PRINT_TOP.
    ENDIF.
    START-OF-SELECTION.
    SET PF-STATUS '9000'.
    SELECT * INTO TABLE IT_MARA
    FROM MARA CLIENT SPECIFIED
    WHERE MANDT = SY-MANDT
    AND MATKL IN P_MATKL
    AND MATNR IN S_MATNR.
    DESCRIBE TABLE IT_MARA LINES WRK_LINES.
    MOVE 'Selecting Material Description' TO WRK_PROGRESSTEXT.
    PERFORM SAPGUI USING WRK_PERCENT WRK_PROGRESSTEXT.
    LOOP AT IT_MARA.
    SELECT SINGLE * FROM MAKT CLIENT SPECIFIED
    WHERE MANDT = SY-MANDT
    AND MATNR = IT_MARA-MATNR
    AND SPRAS = 'E'.
    IF SY-SUBRC = 0.
    IT_MATNR-MATNR = IT_MARA-MATNR.
    IT_MATNR-MAKTX = MAKT-MAKTX.
    IT_MATNR-BISMT = IT_MARA-BISMT. "Thanikai-17.05.2002
    ENDIF.
    APPEND IT_MATNR.
    CLEAR IT_MATNR.
    ENDLOOP.
    CLEAR WRK_LINES.
    DESCRIBE TABLE IT_MATNR LINES WRK_LINES.
    MOVE 'Selecting Class / characteristics for the Material'
    TO WRK_PROGRESSTEXT.
    PERFORM SAPGUI USING WRK_PERCENT WRK_PROGRESSTEXT.
    LOOP AT IT_MATNR.
    CLEAR: TMP_MATNR, T_CLASS, T_CLOBJDAT. "Thanikai-26.08.2002
    REFRESH: T_CLASS, T_CLOBJDAT. "Thanikai-26.08.2002
    TMP_MATNR = IT_MATNR-MATNR.
    CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'
    EXPORTING
    CLASS = WRK_CLASS
    CLASSTEXT = 'X'
    CLASSTYPE = '001'
    CLINT = ' '
    FEATURES = 'X'
    LANGUAGE = SY-LANGU
    OBJECT = TMP_MATNR
    OBJECTTABLE = 'MARA'
    KEY_DATE = SY-DATUM
    INITIAL_CHARACT = 'X'
    NO_VALUE_DESCRIPT = 'X'
    CHANGE_SERVICE_CLF = 'X'
    INHERITED_CHAR = ' '
    TABLES
    T_CLASS = T_CLASS
    T_OBJECTDATA = T_CLOBJDAT
    EXCEPTIONS
    NO_CLASSIFICATION = 1
    NO_CLASSTYPES = 2
    INVALID_CLASS_TYPE = 3
    OTHERS = 4.
    IF SY-SUBRC = 0.
    READ TABLE T_CLASS INDEX 1.
    IT_HEADER-MATNR = IT_MATNR-MATNR.
    IT_HEADER-MAKTX = IT_MATNR-MAKTX.
    IT_HEADER-BISMT = IT_MATNR-BISMT."Thanikai-17.05.2002
    IT_HEADER-CLART = T_CLASS-KLART.
    IT_HEADER-CLASS = T_CLASS-CLASS.
    PERFORM PKG_DLVY_UNIT.
    APPEND IT_HEADER.
    CLEAR: IT_HEADER.
    Code Start by Thanikai on 16.08.2002
    LOOP AT T_CLOBJDAT.
    IT_DETAILS-MATNR = IT_MATNR-MATNR.
    IT_DETAILS-ZAEHL = T_CLOBJDAT-ZAEHL.
    IT_DETAILS-ATNAM = T_CLOBJDAT-ATNAM.
    IT_DETAILS-AUSP1 = T_CLOBJDAT-AUSP1.
    APPEND IT_DETAILS.
    ENDLOOP.
    CLEAR: IT_DETAILS.
    LOOP AT T_CLOBJDAT.
    IT_DETAILS1-MATNR = IT_MATNR-MATNR.
    IT_DETAILS1-ATNAM = T_CLOBJDAT-ATNAM.
    IT_DETAILS1-ZAEHL = T_CLOBJDAT-ZAEHL.
    APPEND IT_DETAILS1.
    ENDLOOP.
    CLEAR: IT_DETAILS1.
    DESCRIBE TABLE IT_DETAILS1 LINES T_CLOBJDAT_LINES.
    IF WRK_FIRST_TIME NE 'X'.
    WRK_LINES1 = T_CLOBJDAT_LINES.
    WRK_FIRST_TIME = 'X'.
    IT_DETAILS2[] = IT_DETAILS1[].
    ELSE.
    IF T_CLOBJDAT_LINES GT WRK_LINES1.
    WRK_LINES1 = T_CLOBJDAT_LINES.
    IT_DETAILS2[] = IT_DETAILS1[].
    ENDIF.
    ENDIF.
    CLEAR: T_CLOBJDAT_LINES.
    CLEAR: IT_DETAILS1. REFRESH: IT_DETAILS1.
    ENDIF.
    Code end by Thanikai on 16.08.2002
    ENDLOOP.
    CLEAR: WRK_LINES1, WRK_FIRST_TIME.
    Print Details *********************************
    PERFORM PRINT_DETAILS.
    AT USER-COMMAND.
    GET CURSOR FIELD WRK_FIELD.
    SPLIT WRK_FIELD AT '-' INTO WRK_TABNAME WRK_FLDNAME.
    IF NOT WRK_FLDNAME IS INITIAL.
    CASE SY-UCOMM.
    WHEN 'SORA'.
    IF SY-LSIND > 0.
    SY-LSIND = SY-LSIND - 1. "To print in the same window
    ENDIF.
    PERFORM PRINT_REPORT_ASCENDING.
    WHEN 'SORD'.
    IF SY-LSIND > 0.
    SY-LSIND = SY-LSIND - 1. "To print in the same window
    ENDIF.
    PERFORM PRINT_REPORT_DESCENDING.
    ENDCASE.
    ELSE.
    MESSAGE S000(38) WITH 'Selete Material Number / Description'.
    ENDIF.
    *& Form SAPGUI
    text
    -->P_WRK_PERCENT text *
    -->P_WRK_PROGRESSTEXT text *
    FORM SAPGUI USING P_WRK_PERCENT
    P_WRK_PROGRESSTEXT.
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
    PERCENTAGE = WRK_PERCENT
    TEXT = WRK_PROGRESSTEXT
    EXCEPTIONS
    OTHERS = 1.
    ENDFORM. " SAPGUI
    *& Form PRINT_REPORT_ASCENDING
    text
    --> p1 text
    <-- p2 text
    FORM PRINT_REPORT_ASCENDING.
    IF WRK_TABNAME = 'IT_HEADER'.
    SORT IT_HEADER BY (WRK_FLDNAME).
    PERFORM PRINT_TOP.
    PERFORM PRINT_DETAILS.
    ENDIF.
    ENDFORM. " PRINT_REPORT_ASCENDING
    *& Form PRINT_DETAILS
    text
    --> p1 text
    <-- p2 text
    WRK_AUSP1 width chged below from (7)to(9) by Nagaraj/MKRK 24.11.05
    FORM PRINT_DETAILS.
    SORT IT_HEADER BY MATNR.
    IF SY-BATCH EQ 'X'.
    PERFORM PRINT_TOP.
    ENDIF.
    IF REQ = 'X'.
    LOOP AT IT_HEADER.
    IF FLG_COLOR = 'X'.
    FORMAT COLOR COL_NORMAL INTENSIFIED ON.
    CLEAR FLG_COLOR.
    ELSE.
    FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
    FLG_COLOR = 'X'.
    ENDIF.
    WRITE :/ SY-VLINE NO-GAP,
    (18) IT_HEADER-MATNR COLOR COL_KEY NO-GAP,
    SY-VLINE NO-GAP,
    (40) IT_HEADER-MAKTX NO-GAP,
    SY-VLINE NO-GAP,
    (18) IT_HEADER-BISMT NO-GAP, "Thanikai-17.05.2002
    SY-VLINE NO-GAP.
    Code started by Thanikai on 16.08.2002
    LOOP AT IT_DETAILS2.
    CLEAR: TMP_STR, WRK_AUSP1.
    IF IT_DETAILS2-ATNAM EQ 'CALIBRE'.
    LOOP AT IT_DETAILS WHERE MATNR = IT_HEADER-MATNR
    AND ATNAM = IT_DETAILS2-ATNAM
    AND ZAEHL = IT_DETAILS2-ZAEHL.
    TMP_STR = 'X'.
    WRK_AUSP1 = IT_DETAILS-AUSP1.
    EXIT.
    ENDLOOP.
    IF TMP_STR EQ 'X'.
    WRITE : (9)WRK_AUSP1 NO-GAP, SY-VLINE NO-GAP.
    ELSE.
    WRITE : ' ', SY-VLINE NO-GAP.
    ENDIF.
    ELSE.
    LOOP AT IT_DETAILS WHERE MATNR = IT_HEADER-MATNR
    AND ATNAM = IT_DETAILS2-ATNAM.
    TMP_STR = 'X'.
    WRK_AUSP1 = IT_DETAILS-AUSP1.
    EXIT.
    ENDLOOP.
    IF TMP_STR EQ 'X'.
    WRITE : (9)WRK_AUSP1 NO-GAP, SY-VLINE NO-GAP.
    ELSE.
    WRITE : ' ', SY-VLINE NO-GAP.
    ENDIF.
    ENDIF.
    ENDLOOP.
    WRITE : (8) IT_HEADER-SCMNG NO-GAP, SY-VLINE NO-GAP.
    IF SY-LINNO > 25.
    IF SY-BATCH EQ 'X'.
    NEW-PAGE.
    PERFORM PRINT_TOP.
    ENDIF.
    ENDIF.
    Code end by Thanikai on 16.08.2002..
    ENDLOOP.
    ELSEIF NREQ = 'X'.
    LOOP AT IT_HEADER.
    IF FLG_COLOR = 'X'.
    FORMAT COLOR COL_NORMAL INTENSIFIED ON.
    CLEAR FLG_COLOR.
    ELSE.
    FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
    FLG_COLOR = 'X'.
    ENDIF.
    WRITE :/ SY-VLINE NO-GAP,
    (18) IT_HEADER-MATNR COLOR COL_KEY NO-GAP,
    SY-VLINE NO-GAP,
    (18) IT_HEADER-BISMT NO-GAP, "Thanikai-17.05.2002
    SY-VLINE NO-GAP.
    Code started by Thanikai on 16.08.2002
    LOOP AT IT_DETAILS2.
    CLEAR: TMP_STR, WRK_AUSP1.
    IF IT_DETAILS2-ATNAM EQ 'CALIBRE'.
    LOOP AT IT_DETAILS WHERE MATNR = IT_HEADER-MATNR
    AND ATNAM = IT_DETAILS2-ATNAM
    AND ZAEHL = IT_DETAILS2-ZAEHL.
    TMP_STR = 'X'.
    WRK_AUSP1 = IT_DETAILS-AUSP1.
    EXIT.
    ENDLOOP.
    IF TMP_STR EQ 'X'.
    WRITE : (9)WRK_AUSP1 NO-GAP, SY-VLINE NO-GAP.
    ELSE.
    WRITE : ' ', SY-VLINE NO-GAP.
    ENDIF.
    ELSE.
    LOOP AT IT_DETAILS WHERE MATNR = IT_HEADER-MATNR
    AND ATNAM = IT_DETAILS2-ATNAM.
    TMP_STR = 'X'.
    WRK_AUSP1 = IT_DETAILS-AUSP1.
    EXIT.
    ENDLOOP.
    IF TMP_STR EQ 'X'.
    WRITE : (9)WRK_AUSP1 NO-GAP, SY-VLINE NO-GAP.
    ELSE.
    WRITE : ' ', SY-VLINE NO-GAP.
    ENDIF.
    ENDIF.
    ENDLOOP.
    WRITE : (8) IT_HEADER-SCMNG NO-GAP, SY-VLINE NO-GAP.
    IF SY-LINNO > 25.
    IF SY-BATCH EQ 'X'.
    NEW-PAGE.
    PERFORM PRINT_TOP.
    ENDIF.
    ENDIF.
    Code end by Thanikai on 16.08.2002
    ENDLOOP.
    ENDIF.
    ULINE.
    ENDFORM. " PRINT_DETAILS
    *& Form PRINT_REPORT_DESCENDING
    text
    --> p1 text
    <-- p2 text
    FORM PRINT_REPORT_DESCENDING.
    IF WRK_TABNAME = 'IT_HEADER'.
    SORT IT_HEADER BY (WRK_FLDNAME) DESCENDING.
    PERFORM PRINT_TOP.
    PERFORM PRINT_DETAILS.
    ENDIF.
    ENDFORM. " PRINT_REPORT_DESCENDING
    *& Form PRINT_TOP
    text
    --> p1 text
    <-- p2 text
    IT_DETAILS2-ATNAM width chged below from 7 to 9. Nagaraj/MKRK 24.11.05
    FORM PRINT_TOP.
    FORMAT COLOR COL_HEADING INTENSIFIED OFF.
    ULINE.
    IF REQ = 'X'.
    READ TABLE IT_HEADER INDEX 1.
    WRITE :/ SY-VLINE NO-GAP,(17) 'Material No' ,SY-VLINE NO-GAP.
    SET LEFT SCROLL-BOUNDARY.
    WRITE :(39) ' Material Description', SY-VLINE NO-GAP,
    (17) ' Old Matl. Number', SY-VLINE NO-GAP. "Thanikai-17.05.2002
    Comments made by Thanikai on 16.08.2002
    LOOP AT IT_DETAILS WHERE MATNR = IT_HEADER-MATNR.
    LOOP AT IT_DETAILS2.
    WRITE : (9) IT_DETAILS1-ATNAM NO-GAP,SY-VLINE NO-GAP.
    WRITE : (9) IT_DETAILS2-ATNAM NO-GAP,SY-VLINE NO-GAP.
    ENDLOOP.
    WRITE : (8) 'Pkg.Unit' NO-GAP, SY-VLINE NO-GAP.
    ELSEIF NREQ = 'X'.
    READ TABLE IT_HEADER INDEX 1.
    WRITE :/ SY-VLINE NO-GAP, (17) 'Material No' ,SY-VLINE NO-GAP,
    (17) ' Old Matl. Number', SY-VLINE NO-GAP. "Thanikai-17.05.2002
    Comments made by Thanikai on 16.08.2002
    LOOP AT IT_DETAILS WHERE MATNR = IT_HEADER-MATNR.
    LOOP AT IT_DETAILS2.
    WRITE : (9) IT_DETAILS-ATNAM NO-GAP,SY-VLINE NO-GAP.
    WRITE : (9) IT_DETAILS2-ATNAM NO-GAP,SY-VLINE NO-GAP.
    ENDLOOP.
    WRITE : (8) 'Pkg.Unit' NO-GAP, SY-VLINE NO-GAP.
    ENDIF.
    ULINE.
    FORMAT RESET.
    ENDFORM. " PRINT_TOP
    *& Form PKG_DLVY_UNIT
    text
    --> p1 text
    <-- p2 text
    FORM PKG_DLVY_UNIT.
    SELECT SINGLE KONP~KBETR INTO WRK_KBETR
    FROM ( A916 INNER JOIN KONP
    ON KONP~MANDT = SY-MANDT
    AND KONPKNUMH = A916KNUMH
    AND KONP~KOPOS = '01' ) CLIENT SPECIFIED
    WHERE A916~MANDT = SY-MANDT
    AND A916~KAPPL = 'V'
    AND A916~KSCHL = 'PR00'
    AND A916~VKORG = 'WTCH'
    AND A916~VTWEG = '01'
    AND A916~SPART = '01'
    AND A916~MATNR = IT_MATNR-MATNR
    AND A916~DATBI >= SY-DATUM
    AND A916~DATAB <= SY-DATUM.
    IF SY-SUBRC EQ 0.
    SELECT SINGLE * FROM ZSAI_PARAM CLIENT SPECIFIED
    WHERE MANDT = SY-MANDT
    AND PMFID = 'ZPKG_PRICE'
    AND PMVL1 = '01'.
    IF SY-SUBRC EQ 0.
    IF WRK_KBETR BETWEEN 1 AND ZSAI_PARAM-PMVL2.
    SELECT SINGLE * FROM MVKE CLIENT SPECIFIED
    WHERE MANDT = SY-MANDT
    AND MATNR = IT_MATNR-MATNR
    AND VKORG = 'WTCH'
    AND VTWEG = '01'.
    IF SY-SUBRC EQ 0.
    IF MVKE-SCMNG GE 1.
    IT_HEADER-SCMNG = MVKE-SCMNG.
    ELSE.
    In the absence of delivery unit for a material,
    delivery unit is considered as one.
    IT_HEADER-SCMNG = 1.
    ENDIF.
    ELSE.
    IT_HEADER-SCMNG = 1.
    ENDIF.
    ELSE.
    If the price for a material is either below 1 or above 2499, then
    the delivery unit is considered as one.
    IT_HEADER-SCMNG = 1.
    ENDIF.
    ELSE.
    IT_HEADER-SCMNG = 1.
    ENDIF.
    ELSE.
    In the absence of price for a material, delivery unit is
    considered as one.
    IT_HEADER-SCMNG = 1.
    ENDIF.
    CLEAR: WRK_KBETR.
    ENDFORM. " PKG_DLVY_UNIT

    The first point would be to change the following:
    LOOP AT IT_MARA.
    SELECT SINGLE * FROM MAKT CLIENT SPECIFIED
    WHERE MANDT = SY-MANDT
    AND MATNR = IT_MARA-MATNR
    AND SPRAS = 'E'.
    IF SY-SUBRC = 0.
    IT_MATNR-MATNR = IT_MARA-MATNR.
    IT_MATNR-MAKTX = MAKT-MAKTX.
    IT_MATNR-BISMT = IT_MARA-BISMT. "Thanikai-17.05.2002
    ENDIF.
    APPEND IT_MATNR.
    CLEAR IT_MATNR.
    ENDLOOP.
    I would sort IT_MARA by matnr then select for all entries into new table IT_matnr and only read when you are actuallygoing to use it for your final table.
    This however will not make much difference to your problem. I suggest you put more of the code into subroutines and look at the se30 output as tyo which subroutines are actually taking most of the time. Please post the results and the subroutines which take the longest.

  • Enhancement-ABAP Code-Customized Field issue

    Hi Experts,
    Currently I am working on the BW3.5 version. We are using the standard SRM standard extractor 0BBP_TD_SC_1 and we enhance same extractor(populate the filed through CMOD - ABAP Code) with one customized field also. We are having issue on the customized field data which post from SRM system. I have verified the field value and value is fine in RSA3 in SRM source system. But while posting into the BW(PSA itself), its loading correct & wrong value. When i check the PSA for the particular load, It looks little strange. In the PSA, I can see correct value on my first record of the same SC and then next records has incorrect value of the same SC. Currently I am using the ODS as a data target. So finally i am getting the incorrect value on the customized field.
    Ex Scenario:
    Ex Customized Field: ZORGID
    In SRM source system RSA3 Extractor Checker value:
    Shopping Card No: 100
    Customized Field: ZORGID=1
    Shopping Card No: 200
    Customized Field: ZORGID=2
    In BW posting-PSA:
    Shopping Card No: 100
    Customized Field: ZORGID=2
    Shopping Card No: 200
    Customized Field: ZORGID=2
    At the same time, if i do the selective deletion of the particular Shopping Card or group of SC in BW and do the full repair, then it gets a correct ZORGID=1 for the same Shopping Card.
    I strongly believe, something wrong in the ABAP code. But when we tried to debug the customized filed value in RSA3. The value is fine. so we unable to trace out the issue. Please help me to fix the code. Thanks in advance.
    CMOD ABAP Code:
    *Populate approver ID even though it doesn't require approval this is required to make sure BW reports have restrict access to respective Org Unit approvals only
    IF l_s_bbp_sc-approver_id IS INITIAL AND l_s_bbp_sc-itm_guid IS NOT INITIAL.
    CALL FUNCTION 'Z_BBP_FIRST_APPROVALGET'
    EXPORTING
    iv_header_guid = l_s_bbp_sc-guid
    iv_itm_guid = l_s_bbp_sc-itm_guid
    IMPORTING
    approver_no = l_s_bbp_sc-approver_id
    EXCEPTIONS
    no_data = 1
    OTHERS = 2
    IF sy-subrc 0.
    ENDIF.
    ENDIF.
    To ensure that the Org Unit passed in into the field
    l_s_bbp_sc-zzapprov_orgunit belongs to the Actual Level 1
    Budget Owner and not any other manager such as Added Approver.
    CLEAR : ls_ln_approvers, l_userid, lv_bpartner_guid.
    DATA : lv_f_apprv_part TYPE BU_PARTNER.
    READ TABLE lt_ln_approvers INTO ls_ln_approvers
    WITH KEY INITIAL_INDEX = '0000000001'.
    IF sy-subrc EQ 0.
    MOVE ls_ln_approvers-approval_agent+2(12) TO l_userid.
    CALL FUNCTION 'BP_CENTRALPERSON_GET'
    EXPORTING
    iv_username = l_userid
    IMPORTING
    ev_bu_partner_guid = lv_bpartner_guid
    EXCEPTIONS
    no_central_person = 1
    no_business_partner = 2
    no_id = 3
    OTHERS = 4.
    IF sy-subrc = 0.
    CALL FUNCTION 'BUPA_NUMBERS_GET'
    EXPORTING
    iv_partner_guid = lv_bpartner_guid
    IMPORTING
    ev_partner = lv_f_apprv_part.
    ENDIF.
    ENDIF.
    We get the BP number of the first Budget Owner 1
    Here, we superseed the field l_s_bbp_sc-approver_id
    whereby it may be wrong due to Added Approver.
    IF l_s_bbp_sc-approver_id IS NOT INITIAL.
    IF lv_f_apprv_part IS NOT INITIAL.
    IF l_s_bbp_sc-itm_guid IS NOT INITIAL.
    CALL FUNCTION 'RH_STRUC_GET'
    EXPORTING
    act_otype = 'BP'
    act_objid = lv_f_apprv_part
    act_wegid = 'EBP-UP'
    act_begda = sy-datum
    act_endda = sy-datum
    act_tdepth = 4
    TABLES
    result_tab = lt_result_tab
    EXCEPTIONS
    no_plvar_found = 1
    no_entry_found = 2
    OTHERS = 3
    IF sy-subrc = 0.
    READ TABLE lt_result_tab INTO ls_result_tab WITH KEY
    otype = 'O'.
    IF sy-subrc EQ 0.
    l_s_bbp_sc-zzapprov_orgunit = ls_result_tab-objid.
    ELSE.
    ENDIF.
    ENDIF.
    ENDIF.
    Thanks,
    RR

    Hi Experts,
    Any suggestions. Thanks.
    Thanks,
    RR

  • Issues in Multiprovider Report, based on Purchase and Inventory Infocubes

    Dear Gurus,
                       There are two reports (1. Report gives INVENTORY details and other report is linked to this report which displays PURCHASE data related to material on INV report Using RRI.) , user wants all the INV info along with PR, PO, PDATE, PRECIEPT.... in the same report.
    To satisfy the above requirement, a multiprovider is created on the above of PUR, INV Infocubes, with Identify (assign) condition for 0CALDAY, 0MATERIAL, 0MAT_PLANT, 0PLANT. Does anymore Infoobject need to be included for assign condition?
    Another Report Template is created to make it out. Time Variable for this Report is in "01.12.2010 - 31.12.2010" format, is this a valid time variable or do I need to create another which considers sys-datum-1.
    Issue: I am unable to get the data for the Fields "Cur.Stock","Total Consumptionu201D, u201CAverage Consumptiom","Below from Consumption","CnsStckReceipts " and getting wrong data for "BLW SFTY"....
    Your help is much appreciated.

    Hi,
    Please check the data in the underlying cube and also check teh multiprovder
    data by t-code listcube.Make sure you have done the proper identation.
    Thanks,
    Saveen

  • Report issue in Production

    Hi Experts,
    I got an issue in production that it should trigger mails daily once. But this program is triggering for every hour,where to look it pls how to debug this issue?can this FM can check?
    call function 'DURATION_DETERMINE'
        importing
          duration                   = lv_duration
        changing
          start_date                 = ls_history-datum
          start_time                 = ls_history-uzeit
          end_date                   = p_datum
          end_time                   = p_uzeit
        exceptions
          factory_calendar_not_found = 1
          date_out_of_calendar_range = 2
          date_not_valid             = 3
          unit_conversion_error      = 4
          si_unit_missing            = 5
          parameters_not_valid       = 6
          others                     = 7.
      if sy-subrc <> 0.
    Thanks

    Hi ,
    Youi can check this tables
                        MKPF               material document
         MSEG               material document (item level)
                        RESB                                Material reservations
         RKPF                                 header
    Rergards
    SANIL

  • Issue regarding currency conversion

    Hi Experts,
    I'm having issue with currency conversion. Default report output values are displaying in 'EURO' and I had created a toolabar with currency conversion buttons. When this button is selected, values has to be changed into user select currency like INR, USD, AUD. Here im triggering with issues, all the values are converted into 0's. Total value is only converting for first time. From next time. its not converting. I'm using FM's  CONVERT_FOREIGN_TO_FOREIGN_CUR,CONVERT_TO_LOCAL_CURRENCY,READ_EXCHANGE_RATE.
    Please provide ur solutions to solve the issue.  
    Thanks and Regards,
    Bharat

    Hi ,
    You can use this block of code..It is used in our project.
      data : l_rate type ukurs_curr,           "Exchange rate
             l_rate_type type kurst_curr,      "Type of rate
             l_l_fact type i,                  "Local factor
             l_f_fact type i.                  "Foreign factor
    check local currency ,foreign currency local amount are not initial
      check foreign_currency is not initial and
            local_currency is not initial and
            local_amount is not initial.
    Calculate exchange rate
        if local_currency = 'MXN' and foreign_currency = 'USD'.
          l_rate_type = 'MXNT'.
       else.
         l_rate_type = 'M'.
       endif.
    *Call FUNCTION module to get exchange rate
      call function 'READ_EXCHANGE_RATE'
        exporting
          date                    = sy-datum
          foreign_currency        = local_currency
          local_currency          = foreign_currency
          type_of_rate            = l_rate_type
       importing
         exchange_rate           = l_rate
         foreign_factor          = l_f_fact
         local_factor            = l_l_fact
       exceptions
         no_rate_found           = 1
         no_factors_found        = 2
         no_spread_found         = 3
         derived_2_times         = 4
         overflow                = 5
         zero_rate               = 6
         others                  = 7
      if sy-subrc eq 0.
    if l_rate le 0.
      l_rate = l_rate * -1.
    endif.
    Foreign amount
      if l_rate_type = 'MXNT'.
        foreign_amount = local_amount / l_rate .
      else.
        foreign_amount = local_amount * l_rate .
    endif.
      endif.

  • E-mail of PDF issue TLINE structure but SOLISTI1 needed

    Hi,
    So far I have done the following. I have prepared a SMARTFORM and an ABAP. My ABAP calls the Smartform and gives the data to the function module “CONVERT_OTF”. This function creates a PDF file from the Smartform data. The output of "CONVERT_OTF" is a table with the format of structure “TLINE”. In a first step I save these data into a PDF file with the function module "GUI_DOWNLOAD".
    Now the issue.
    In the second step I am trying to send the output with the function “SO_DOCUMENT_SEND_API1”. The function is recommended by SAP for release 6.4 instead of the former function "SO_NEW_DOCUMENT_ATT_SEND_API1".
    The attachment must be delivered either with the structure “SOLISTI1” or “SOLIX” to be sent with the e-mail function “SO_DOCUMENT_SEND_API1”. I have tried to put my data with structure TLINE into the function. In these case I get short dumps. If I put the output of the function “CONVERT_OTF” in a table with the format “SOLISTI1” instead of a table with structure “TLINE” a PDF file is still created and also send out with the e-mail function, but the file can’t be opened anymore. Acrobat delivers an error message that the file is damaged.
    I have tried to convert the file with structure TLINE in a hexadecimal file with structure SOLIX. For this purpose I used the function “TABLE_COMPRESS”. This worked fine. But the file which has been sent by the e-mail was still damaged. Even if I have downloaded the file I got the message that the file was damaged.
    Are there any other suggestions how the attachment could be sent instead of using the function “SO_DOCUMENT_SEND_API1”? Is there a function available, which could be used to sent attachments with structure TLINE? Or are there any suggestions, how I can convert my smartform output in a SOLIX or SOLISTI1 structure?
    Thank you and best regards
    Karsten

    Hi Arold,
    <b>1</b>.
    Have a look at this program.
    This program is sending PDF file as attachment thru mail
    <b>2</b>.
    REPORT  zvenkat_mail.
    TABLES :
       tsp01.
    Itabs and variables .
    *Tables
    DATA:
       BEGIN OF i_mard OCCURS 0,
         matnr TYPE mard-matnr,
         werks TYPE mard-werks,
         lgort TYPE mard-lgort,
         labst TYPE mard-labst,
         umlme TYPE mard-umlme,
         insme TYPE mard-insme,
         einme TYPE mard-einme,
       END OF i_mard.
    DATA :
       g_sy_spono LIKE sy-spono.
    Mail related Variables and i tabs.
    DATA:
       w_subject       LIKE sodocchgi1,
       i_pack_list     LIKE sopcklsti1 OCCURS  1  WITH HEADER LINE,
       i_objhead       LIKE solisti1   OCCURS  1  WITH HEADER LINE,
       i_contents_text LIKE solisti1   OCCURS 10  WITH HEADER LINE,
       i_cont_bin      LIKE solisti1   OCCURS 10  WITH HEADER LINE,
       i_objhex        LIKE solix      OCCURS 10  WITH HEADER LINE,
       i_receiver      LIKE somlreci1  OCCURS  1  WITH HEADER LINE,
       i_listobject    LIKE abaplist   OCCURS  1  WITH HEADER LINE,
       pdf             LIKE tline      OCCURS 100 WITH HEADER LINE,
       content_out     LIKE solisti1   OCCURS 0 WITH HEADER LINE.
    DATA:
       tab_lines       TYPE i,
       doc_size        TYPE i,
       att_type        LIKE soodk-objtp,
       obj_desc        LIKE w_subject-obj_descr,
       sent_to_all     LIKE sonv-flag,
       client          LIKE tst01-dclient,
       name            LIKE tst01-dname,
       objtype         LIKE rststype-type,
       type            LIKE rststype-type,
       is_otf          TYPE c ,
       no_of_bytes     TYPE i,
       pdf_spoolid     LIKE tsp01-rqident,
       jobname         LIKE tbtcjob-jobname,
       jobcount        LIKE tbtcjob-jobcount,
       pn_begda        LIKE sy-datum,
       val(1)          TYPE c,
       pripar          TYPE pri_params,
       arcpar          TYPE arc_params,
       lay             TYPE pri_params-paart,
       lines           TYPE pri_params-linct,
       cols            TYPE pri_params-linsz,
       spool_name      TYPE pri_params-plist.
    *&      START-OF-SELECTION.
    START-OF-SELECTION.
      PERFORM get_data_from_database.
      PERFORM output_for_pdf.
    *&      END-OF-SELECTION.
    END-OF-SELECTION.
      PERFORM send_mail..
    *&      Form  get_data_from_database
    FORM get_data_from_database .
      SELECT matnr
             werks
             lgort
             labst
             umlme
             insme
             einme
        FROM mard
        INTO TABLE i_mard
        UP TO 20 ROWS.
    ENDFORM.                    " get_data_from_database
    *&      Form  output_for_pdf
    FORM output_for_pdf .
      PERFORM get_print_params.
      LOOP AT i_mard.
        WRITE:/ sy-vline, i_mard-matnr,
                sy-vline, i_mard-werks,
                sy-vline, i_mard-lgort,
                sy-vline, i_mard-labst,
                sy-vline, i_mard-umlme,
                sy-vline, i_mard-insme,
                sy-vline, i_mard-einme,
                sy-vline.
      ENDLOOP.
      ULINE .
      g_sy_spono = sy-spono.
      NEW-PAGE PRINT OFF.
      CALL FUNCTION 'ABAP4_COMMIT_WORK'.
    ENDFORM.                    " output_for_pdf
    *&      Form  send_mail
    FORM send_mail .
      PERFORM mail_without_attachment.
      PERFORM mail_with_pdf_attachment.
      PERFORM mail_with_exel_attachment.
      PERFORM mail_with_text_attachment.
    ENDFORM.                    " send_mail
    *&      Form  mail_with_pdf_attachment
    FORM mail_with_pdf_attachment .
      CLEAR :w_subject,
             sent_to_all,
             i_pack_list[],
             i_objhead[],
             i_cont_bin[],
             i_contents_text[],
             i_receiver[].
      i_cont_bin = '  |  '.
      APPEND i_cont_bin.
    Subject of the mail.
      obj_desc  = 'Hello SDN Friends ' .
      w_subject-obj_name  = 'MAIL_ALI'.
      w_subject-obj_descr = obj_desc.
    Body of the mail
      DATA :head_desc LIKE i_contents_text,
            body_desc LIKE i_contents_text.
      i_contents_text = space.
      APPEND i_contents_text.
      CLEAR  i_contents_text.
      CONCATENATE
      'This mail has been generated for Test purpose.'
      'Please dont hesitate to ask any type of question in the forum.'
      INTO body_desc
      SEPARATED BY space.
      i_contents_text = body_desc.
      APPEND i_contents_text.
      CLEAR  i_contents_text.
      CLEAR body_desc.
      i_contents_text = 'Thank You.'.
      APPEND i_contents_text.
      CLEAR  i_contents_text.
      i_contents_text = 'Fellow SDN member,'.
      APPEND i_contents_text.
      CLEAR  i_contents_text.
      i_contents_text = 'Venkat.O'.
      APPEND i_contents_text.
      CLEAR  i_contents_text.
      i_contents_text = space.
      APPEND i_contents_text.
      CLEAR  i_contents_text.
      CONCATENATE '(Note: This is system generated message, please'
                  'do not reply'
                  'to this Email.)'
               INTO i_contents_text
               SEPARATED BY space.
      APPEND i_contents_text.
      CLEAR  i_contents_text.
    Write Packing List (Body)
      DESCRIBE TABLE i_contents_text LINES tab_lines.
      READ     TABLE i_contents_text INDEX tab_lines.
      w_subject-doc_size = ( tab_lines - 1 ) * 255 + STRLEN(
      i_contents_text ).
      CLEAR i_pack_list-transf_bin.
      i_pack_list-head_start = 1.
      i_pack_list-head_num   = 0.
      i_pack_list-body_start = 1.
      i_pack_list-body_num   = tab_lines.
      i_pack_list-doc_type   = 'RAW'.
      APPEND i_pack_list.
      CLEAR  i_pack_list.
    Create receiver list
      i_receiver-receiver = '[email protected]'..
      i_receiver-rec_type = 'U'.
      APPEND i_receiver.
      CLEAR  i_receiver.
    Select query for Spool requests
      REFRESH content_out.
      IF sy-subrc = 0.
        SELECT  SINGLE *
          FROM  tsp01
          WHERE rqident = g_sy_spono.
        IF sy-subrc <> 0.
          MESSAGE s000(0k) WITH 'Spool Number does not exist'.
          EXIT.
        ELSE.
          client = tsp01-rqclient.
          name   = tsp01-rqo1name.
        ENDIF.
      ENDIF.
      CALL FUNCTION 'RSTS_GET_ATTRIBUTES'
        EXPORTING
          authority     = 'SP01'
          client        = client
          name          = name
          part          = 1
        IMPORTING
          type          = type
          objtype       = objtype
        EXCEPTIONS
          fb_error      = 1
          fb_rsts_other = 2
          no_object     = 3
          no_permission = 4
          OTHERS        = 5.
      IF objtype(3) = 'OTF'.
        is_otf = 'X'.
      ELSE.
        is_otf = space.
      ENDIF.
    Convert Spool job to PDF
      IF is_otf = 'X'.
        CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
          EXPORTING
            src_spoolid              = tsp01-rqident "Spool req number
            no_dialog                = ' '
          IMPORTING
            pdf_bytecount            = no_of_bytes
            pdf_spoolid              = pdf_spoolid
            btc_jobname              = jobname
            btc_jobcount             = jobcount
          TABLES
            pdf                      = pdf
          EXCEPTIONS
            err_no_otf_spooljob      = 1
            err_no_spooljob          = 2
            err_no_permission        = 3
            err_conv_not_possible    = 4
            err_bad_dstdevice        = 5
            user_cancelled           = 6
            err_spoolerror           = 7
            err_temseerror           = 8
            err_btcjob_open_failed   = 9
            err_btcjob_submit_failed = 10
            err_btcjob_close_failed  = 11
            OTHERS                   = 12.
        CASE sy-subrc.
          WHEN 0.
          WHEN 1.
            MESSAGE s000(0k) WITH 'No OTF Spool Job'.
            EXIT.
          WHEN 2.
            MESSAGE s000(0k) WITH 'Spool Number does not exist'.
            EXIT.
          WHEN 3.
            MESSAGE s000(0k) WITH 'No permission for spool'.
            EXIT.
          WHEN OTHERS.
            MESSAGE s000(0k) WITH 'Error in Function CONVERT_OTFSPOOLJOB_2_PDF'.
            EXIT.
        ENDCASE.
      ELSE.
        CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
          EXPORTING
            src_spoolid              = tsp01-rqident
            no_dialog                = ' '
          IMPORTING
            pdf_bytecount            = no_of_bytes
            pdf_spoolid              = pdf_spoolid
            btc_jobname              = jobname
            btc_jobcount             = jobcount
          TABLES
            pdf                      = pdf
          EXCEPTIONS
            err_no_abap_spooljob     = 1
            err_no_spooljob          = 2
            err_no_permission        = 3
            err_conv_not_possible    = 4
            err_bad_destdevice       = 5
            user_cancelled           = 6
            err_spoolerror           = 7
            err_temseerror           = 8
            err_btcjob_open_failed   = 9
            err_btcjob_submit_failed = 10
            err_btcjob_close_failed  = 11
            OTHERS                   = 12.
        CASE sy-subrc.
          WHEN 0.
          WHEN 1.
            MESSAGE s000(0k) WITH 'No ABAP Spool Job'.
            EXIT.
          WHEN 2.
            MESSAGE s000(0k) WITH 'Spool Number does not exist'.
            EXIT.
          WHEN 3.
            MESSAGE s000(0k) WITH 'No permission for spool'.
            EXIT.
          WHEN OTHERS.
            MESSAGE s000(0k)
               WITH 'Error in Function CONVERT_ABAPSPOOLJOB_2_PDF'.
            EXIT.
        ENDCASE.
      ENDIF.
      CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
        EXPORTING
          line_width_src              = 134
          line_width_dst              = 255
        TABLES
          content_in                  = pdf
          content_out                 = content_out
        EXCEPTIONS
          err_line_width_src_too_long = 1
          err_line_width_dst_too_long = 2
          err_conv_failed             = 3
          OTHERS                      = 4.
      IF sy-subrc <> 0.
        MESSAGE s000(0k) WITH 'Conversion Failed'.
        EXIT.
      ENDIF.
    ---------------------Create Message Attachment
      DESCRIBE TABLE i_cont_bin LINES tab_lines.
      i_pack_list-transf_bin = 'X'.
      i_pack_list-head_start = tab_lines + 1.
      i_pack_list-head_num   = 0.
      i_pack_list-body_start = tab_lines + 1.
      APPEND LINES OF content_out[] TO i_cont_bin[].
      DESCRIBE TABLE content_out LINES tab_lines.
      i_pack_list-doc_size =  tab_lines * 255.
      i_pack_list-body_num = tab_lines.
      i_pack_list-doc_type = 'PDF'.
      i_pack_list-obj_name = 'ATTACHMENT'.
      i_pack_list-obj_descr = 'Materials and their Quantities' .
      APPEND i_pack_list.
      CLEAR  i_pack_list.
      CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
        EXPORTING
          document_data              = w_subject
          put_in_outbox              = 'X'
          commit_work                = 'X'
        IMPORTING
          sent_to_all                = sent_to_all
        TABLES
          packing_list               = i_pack_list
          object_header              = i_objhead
          contents_bin               = i_cont_bin
          contents_txt               = i_contents_text
          receivers                  = i_receiver
        EXCEPTIONS
          too_many_receivers         = 1
          document_not_sent          = 2
          document_type_not_exist    = 3
          operation_no_authorization = 4
          parameter_error            = 5
          x_error                    = 6
          enqueue_error              = 7
          OTHERS                     = 8.
      IF sy-subrc NE 0.
      ENDIF.
    ENDFORM.                    " mail_with_pdf_attachment
    *&      Form  get_print_params
    FORM get_print_params .
      lay = 'X_65_132'.
      lines = 65.
      cols  = 132.
      CALL FUNCTION 'GET_PRINT_PARAMETERS'
        EXPORTING
          in_archive_parameters  = arcpar
          in_parameters          = pripar
          layout                 = lay
          line_count             = lines
          line_size              = cols
          no_dialog              = 'X'
        IMPORTING
          out_archive_parameters = arcpar
          out_parameters         = pripar
          valid                  = val
        EXCEPTIONS
          archive_info_not_found = 1
          invalid_print_params   = 2
          invalid_archive_params = 3
          OTHERS                 = 4.
      IF val <> space AND sy-subrc = 0.
        pripar-prrel = space.
        pripar-primm = space.
        NEW-PAGE PRINT ON
          NEW-SECTION
          PARAMETERS pripar
          ARCHIVE PARAMETERS arcpar
          NO DIALOG.
      ENDIF.
    ENDFORM.                    " get_print_params
    I hope it helps u .
    <b>Thanks,
    Venkat.O</b>

  • Issue in select query

    HI All experts,<br><br>
    i have  a program in which i have a select query <pre>
    SELECT  b~vertrag
              a~anlage
              a~operand
              a~saison
              a~ab
              a~ablfdnr
              a~bis
              a~wert1
      FROM ettifn AS a INNER JOIN ever AS b
      ON aanlage = banlage
      INTO TABLE li_captran PACKAGE SIZE p_pack
      WHERE a~anlage IN s_anlage
        AND a~ab <= l_date
        AND a~bis >= l_date
        AND a~operand IN ('ID-CAPLOAD','ID-OBLT')
        AND b~einzdat <= l_date
        AND b~auszdat >= l_date.</pre><br><br>
    this query is taking a lot of time in running and we are facing lot of performance related issues
    <br><br>
    kindly guide me how i can break this into som simpler query
    <br><br>
    ettifn has 10 million records
    ever has around 5 million records .
    <br><br>
    also please tell me how much data i can store into an internal table
    can i store 5 million records in an internal table ??????
    is it good in terms of performance of a program if not please tell me what is the better way of doing dat .
    <br><br>
    also tell me how secondry indexes help in improving performance of select query
    is it good to maintain number of secondry indexes in a standard table or it decreases performance of a standard table .
    <br><br>
    <pre>
      TYPES: BEGIN OF ty_eanlh,
              anlage LIKE eanlh-anlage,
              bis LIKE eanlh-bis,
              tariftyp LIKE eanlh-tariftyp,
             END OF ty_eanlh.
      DATA: l_date TYPE datum.
      DATA: li_eanlh TYPE HASHED TABLE OF ty_eanlh WITH UNIQUE KEY anlage
                                                                   bis
                                                   WITH HEADER LINE.
      DATA: li_captran TYPE HASHED TABLE OF ty_captran WITH UNIQUE KEY vertrag
                                                                       anlage
                                                                       operand
                                                                       saison
                                                                       ab
                                                                       ablfdnr
                                                        WITH HEADER LINE.
      DATA: l_tariftyp LIKE eanlh-tariftyp.
    l_date = p_date + 6.
      l_date = p_date + 5.          "As per Terry's Request 1/23/2009
      CHECK NOT p_cap IS INITIAL.
    Get Operand Values
      SELECT  b~vertrag
              a~anlage
              a~operand
              a~saison
              a~ab
              a~ablfdnr
              a~bis
              a~wert1
      FROM ettifn AS a INNER JOIN ever AS b
      ON aanlage = banlage
      INTO TABLE li_captran PACKAGE SIZE p_pack
      WHERE a~anlage IN s_anlage
        AND a~ab <= l_date
        AND a~bis >= l_date
        AND a~operand IN ('ID-CAPLOAD','ID-OBLT')
        AND b~einzdat <= l_date
        AND b~auszdat >= l_date.
        IF sy-subrc EQ 0 AND NOT li_captran[] IS INITIAL.
       Get Rate Category
          SELECT anlage
                 bis
                 tariftyp
          FROM eanlh INTO CORRESPONDING FIELDS OF TABLE li_eanlh
          FOR ALL ENTRIES IN li_captran
          WHERE anlage = li_captran-anlage
            AND ab <= l_date
            AND bis >= l_date.
       Get POD ID
          SELECT a~anlage
                 a~int_ui
                 a~dateto
                 a~timeto
                 b~ext_ui
          INTO TABLE i_pod
          FROM euiinstln AS a INNER JOIN euitrans AS b
          ON aint_ui = bint_ui
          FOR ALL ENTRIES IN li_captran
          WHERE a~anlage = li_captran-anlage.
          IF sy-subrc EQ 0 AND NOT i_pod[] IS INITIAL.
            SORT i_pod BY anlage.
            SELECT vertrag
                   int_ui
                   serviceid
            FROM eservice
            INTO TABLE i_servicect
            FOR ALL ENTRIES IN i_pod
            WHERE int_ui = i_pod-int_ui
              AND service_start <= l_date
              AND service_end >= l_date
              AND service = 'ESUP'.
          ENDIF.
          LOOP AT li_captran.
            i_ct-anlage = li_captran-anlage.
            READ TABLE li_eanlh WITH KEY anlage = li_captran-anlage.
            IF sy-subrc EQ 0.
              i_ct-tariftyp = li_eanlh-tariftyp.
              READ TABLE i_rate WITH KEY tariftyp = i_ct-tariftyp.
              IF sy-subrc NE 0.
                CONTINUE.
              ENDIF.
            ELSE.
              i_ct-tariftyp = '0000'.
            ENDIF.
            READ TABLE i_pod WITH KEY anlage = li_captran-anlage.
            IF sy-subrc EQ 0.
              READ TABLE i_servicect WITH KEY int_ui = i_pod-int_ui.
              IF sy-subrc EQ 0.
                i_ct-serviceid = i_servicect-serviceid.
              ENDIF.
            ENDIF.
            IF li_captran-operand = 'ID-CAPLOAD'.
              i_ct-cap = li_captran-wert1.
            ELSEIF li_captran-operand = 'ID-OBLT'.
              i_ct-tran = li_captran-wert1.
            ENDIF.
            COLLECT i_ct.
            CLEAR: li_captran, i_ct.
          ENDLOOP.
        ENDIF.
      ENDSELECT.</pre><br><br>
      this code is taking a lot of time to execute and decreasing the system performance .<br><br>
    please guide me how can i increase the performance of this code .<br><br>
    Thanks in advance<br><br><br><br>
    Edited by: Matt on Oct 11, 2009 9:45 PM

    Hi matt ,
    no i am not thru bcoz of formatting i just trying to remove it and i just marked it answered so that it will not come in my unanswered because unanswered questions are limited.
    also could you please help me in this question .
    now how can i change this question to unanswerd .
    plz guide me
    Thanks in advance

  • Need Bapi Names for Post Goods Reciept and Post Goods issue to STO in MIGO

    Hi All..
    I need to post goods receipt using input data in MIGO. Is there any BAPI that i can use.
    Also once STO (Stock Transport order) is created, i also need to Post goods issue to STO in MIGO transaction. I do need a bapi for this too...
    Appreciate your help and will reward any helpful answers.
    Thanks..

    Hi,
    ata  : gm_header  type bapi2017_gm_head_01.
    data  : gm_code    type bapi2017_gm_code.
    data  : gm_headret type bapi2017_gm_head_ret.
    data  : gm_item    type table of
            bapi2017_gm_item_create with header line.
    data  : gm_return  type bapiret2 occurs 0 with header line.
    data  : gm_retmtd  type bapi2017_gm_head_ret-mat_doc.
    clear : gm_return, gm_retmtd. refresh gm_return.
    gm_code-gm_code      = '03'.
    gm_header-header_txt = firstscreen-bktxt.
        gm_header-pstng_date = sy-datum.
        gm_header-doc_date   = sy-datum.
        gm_header-ver_gr_gi_slip = ' '.  "print
        gm_code-gm_code      = '03'.
      move lineitem1-bwartwa  to gm_item-move_type     .
          move lineitem1-matnr  to gm_item-material.
          move lineitem1-erfmg     to gm_item-entry_qnt.
          move 'EA'    to gm_item-entry_uom.
          move lineitem1-werks  to gm_item-plant.
          move lineitem1-lgort  to gm_item-stge_loc.
          move lineitem1-kostl to gm_item-costcenter.
          while gm_item-costcenter+9(1) = ' '.
            shift gm_item-costcenter right.
          endwhile.
          overlay gm_item-costcenter with '0000000000'.
          append gm_item.
    call function 'BAPI_GOODSMVT_CREATE'
           exporting
                goodsmvt_header  = gm_header
                goodsmvt_code    = gm_code
           importing
                goodsmvt_headret = gm_headret
                materialdocument = gm_retmtd
           tables
                goodsmvt_item    = gm_item
                return           = gm_return.
    Thanks
    venki

Maybe you are looking for