Sales Representative Commission Report

Hi,
Is there any standard report for Sales Representative Commission Report for Professional services.
regards
ravi

to my knowledge there is no standard report as such....u need to gather the requirements and develop a new report in SE38.

Similar Messages

  • Sales Person Commission Report

    What will be a query  to do a sales person commission report which includes Credit Memos?

    Hi Max, welcome to forums.
    Check this thread and see if it helps - Re: Commission Query
    Re: Commission Report
    Credit Memo query
    There are plenty of commission related query threads. You can mix and match to get a result most suitable to you.

  • Sales Representative commission

    Hi,
    Can anybody help me out about the following scenario by providing me the  details config doc.
    In a car selling company, how I can configure sales representative commission step wise.
    Also how I can capture different paramenters for calculating commission ,  like full payment, model wise different commission. etc.
    Please help me out by providing details config doc.
    Thanks in advance.
    Dilip

    Dear Dilip
    Please go thru these links
    [Sales Order Processing|http://help.sap.com/saphelp_crm40/helpdata/en/9e/ce943b00ce6622e10000000a114084/content.htm]
    [Commission Simulation|http://help.sap.com/saphelp_crm40/helpdata/en/33/1990946c104e2abb0c39e77cbd74d8/content.htm]
    [Incentive and Commission Management|http://help.sap.com/saphelp_47x200/helpdata/en/c2/55f7783ac311d3a6a00000e83dda02/frameset.htm]
    thanks
    G. Lakshmipathi

  • Sales Person Commission

    Hi,
    How to calculate sales person commision in order management.
    My client wants to give sepearate sales person commission on each type of sales category like Deal, special Deal, Nett orders commission differs like 2%, 5%, 3%.
    If we want to pull up sales orders by sales person, system should give the commision to be paid to sales person, if we give percentgage in parameters.
    Is there any standard report to achieve the sales person commission report in standard system or any work around solution to achieve this?
    please advise the how to achieve this in Order management.
    thanks
    Satti

    Hi,
    How to calculate sales person commision in order management.
    My client wants to give sepearate sales person commission on each type of sales category like Deal, special Deal, Nett orders commission differs like 2%, 5%, 3%.
    If we want to pull up sales orders by sales person, system should give the commision to be paid to sales person, if we give percentgage in parameters.
    Is there any standard report to achieve the sales person commission report in standard system or any work around solution to achieve this?
    please advise the how to achieve this in Order management.
    thanks
    Satti

  • Report on " commission of the sales department with sales representative"

    Hi,
      Can any one help me out in developing a basic report on " commission for the sales department sorted by sales representative"
    Tell me which field Holds the commission value, and how sales department and sales representative are related.
    Kindly help me in giveing tables and condition for the above.

    Kiran,
    For these details there will be standard reports given by SAP. For some reasons if you are looking at a custom report, the same will be available in VBAK, VBAP, LIKP tables.
    If you are looking for more details, please explain.
    Regards,
    Ravi
    Note : Please mark the helpful answers

  • Overdue report by sales representative

    Dear Friends,
                                 is there any standard report available for overdue analysis by sales representative. any input would be highly appreciated and thanks in advance
    cheers
    vinay

    Hi
    try FBL5N and FBL10n , hope it will be useful to you
    Rgds
    DV

  • Sales Person Commission Payout Report

    Good Day Mentors,
    I am currently working on a report that ought to compute for Sales Agent commission.
    Sources for gross sales computation is A/R Invoice(OINV) and A/R Credit Memo (ORIN).
    Client also wants to exclude the VAT from the computation of gross sales as well as all credit memos issued for a specific period in which the commission of the agent will be based on.
    DocTotal in both OINV and ORIN already have the VAT(VatSumSy) included in them upon commit into the databse. So i subtracted it from the DocTotal. The formula I came up with
    OINV.DocTotal - OINV.VatSumSy -  ORIN.DocTotal - ORIN.VatSumSy
    Now, the main source of the problem is the part in which the report ought to have a date range facility. Since the commissions for the sales people will be computed every month.
    Edited by: Sean Yu on Apr 4, 2009 9:46 AM

    I am now trying to incorporate both queries into  a single one.
    Current code
    /*SELECT FROM [dbo].[OINV] T1*/
    declare @fromdate as datetime
       /* WHERE */
    set @fromdate=   /* T1.[DocDate] */
                  '[%0]'
       /*SELECT FROM dbo.OINV T3*/
    declare @tilldate as datetime
       /* WHERE */
    set @tilldate=   /* T1.[DocDate] */
                  '[%1]'
    SELECT T0.[ChannlBP] 'Upline Code',
           (SELECT CardName
           FROM   OCRD
           WHERE  CardCode = T0.CHannlBP) 'Upline Name',
           T0.[CardCode] 'Downline Code',
           T0.[CardName] 'Downline Name',
           SUM (T1.[DocTotal]) - SUM (T1.VatSumSy) - SUM (T2.[DocTotal]) - SUM (T2.VatSumSy)  'GrossSales',
           Rate = CASE WHEN ( (SUM (T1.[DocTotal]) - SUM (T1.VatSumSy) - SUM (T2.[DocTotal]) - SUM (T2.VatSumSy) ) <= 10000) THEN .03 WHEN ((SUM (T1.[DocTotal]) - SUM (T1.VatSumSy) - SUM (T2.[DocTotal]) - SUM (T2.VatSumSy) ) > 10000
           AND (SUM (T1.[DocTotal]) - SUM (T1.VatSumSy) - SUM (T2.[DocTotal]) - SUM (T2.VatSumSy) ) <= 49999) THEN .025 WHEN ((SUM (T1.[DocTotal]) - SUM (T1.VatSumSy) - SUM (T2.[DocTotal]) - SUM (T2.VatSumSy) ) > 50000
           AND (SUM (T1.[DocTotal]) - SUM (T1.VatSumSy) - SUM (T2.[DocTotal]) - SUM (T2.VatSumSy) ) <= 149999) THEN .02 WHEN ( (SUM (T1.[DocTotal]) - SUM (T1.VatSumSy) - SUM (T2.[DocTotal]) - SUM (T2.VatSumSy) ) > 150000) THEN .015 ELSE 0 END,
           (SUM (T1.[DocTotal]) - SUM (T1.VatSumSy) - SUM (T2.[DocTotal]) - SUM (T2.VatSumSy) ) * (CASE WHEN ( (SUM (T1.[DocTotal]) - SUM (T1.VatSumSy) - SUM (T2.[DocTotal]) - SUM (T2.VatSumSy) ) <= 10000) THEN .03 WHEN ((SUM (T1.[DocTotal]) - SUM (T1.VatSumSy) - SUM (T2.[DocTotal]) - SUM (T2.VatSumSy) ) > 10000
           AND (SUM (T1.[DocTotal]) - SUM (T1.VatSumSy) - SUM (T2.[DocTotal]) - SUM (T2.VatSumSy) ) <= 49999) THEN .025 WHEN ((SUM (T1.[DocTotal]) - SUM (T1.VatSumSy) - SUM (T2.[DocTotal]) - SUM (T2.VatSumSy) ) > 50000
           AND (SUM (T1.[DocTotal]) - SUM (T1.VatSumSy) - SUM (T2.[DocTotal]) - SUM (T2.VatSumSy) ) <= 149999) THEN .02 WHEN ( (SUM (T1.[DocTotal]) - SUM (T1.VatSumSy) - SUM (T2.[DocTotal]) - SUM (T2.VatSumSy) ) > 150000) THEN .015 ELSE 0 END) 'Commission'
    FROM   OCRD T0 INNER JOIN OINV T1 ON T0.CardCode = T1.CardCode INNER JOIN ORIN T2 ON T1.CardCode = T2.CardCode
    WHERE  T1.[DocDate] >= @fromdate
           AND T1.[DocDate] <= @tilldate
           AND T2.[DocDate] >= @fromdate
           AND T2.[DocDate] <= @tilldate
           AND T0.[ChannlBP] IS NOT NULL
           AND T0.[frozenFor] LIKE '%N'
           OR T0.[validFor] LIKE '%Y' GROUP BY T0.[ChannlBP], T0.[CardCode], T0.[CardName]
    The query should be able to show all of the Sales people who have Credit Memos issues to them as well as Sales people who don;t have Cm's issued to them.
    But what I am currently getting from my query above are the people who only have CM's issued to them. I am unable to get the sales people who don't have CM's  in ORIN table for the specified date range, but of course have records in OINV table.
    Did I link the tables incorrectly?
    Also, the commission rate is also being computed in this query using CASE function as you can see from the code above. Which makes the query complex and very rigid. Is there also a good way of handling the commission rate? I am also thinking that in the future, client might change the commission rate. Be it increase the ranges or change the rate for each range. Is there a good way of handling that other than an AddOn? Since currently everything is hardcoded in the query.
    Thanks in advance for everyone's time,
    Sean

  • Sales person commission based on sales revenue on material group-report

    Dear Experts,
    My client want to charge and calculate Sales person commission based on sale revenue on material group.
    lets say -sales person 'A' did sales during the month 5lakh on material group1 and 10 lakh material group2 .
    then i will give commission 5% on less than 6 lakh and 10% on more than 9 lakh sales revenue.
    so total commisssion they will book 125000(25000+100000) on GL .
    They want this information from CO so they they can book amount in FI and after that need to charge from COPA based on above logic..
    request you to guide me on the above.
    regards
    RR

    Hi ajay,
    I need Sales revenue ,sales person and material group information.
    will i get all this information from VBAP/VBRP table?.
    I will transfer sales revenue,material group and sales person to copa at the time of billing.
    Shall i use copa or VBAP/VBRP table in order to fetch information and based on information.I will calculate and post FI JV from FI to COPA.
    Guide me.
    regards
    RR

  • Verizon Fios Sales Representative Fraudulently Ran A Credit Check Without My Authorization

    Yesterday I called the Verizon Fios sales department to sign up for new service. The sales representative (whose name I did not get) kept pushing me for personal information before he could give me pricing on service options. Once I finally received a quote for a plan I was interested in, I decided to go ahead and sign up. When he asked for my social security number, I told him that I wasn’t interested in a “hard pull” of my credit report. A hard pull of a credit report is a formal credit check which stays on your credit report for 2 years and lowers your credit score if you have more than 2 inquiries within 2 years. I told him that I wouldn’t mind paying a deposit as long as a credit check wasn’t made. He assured me that there will be no “hard pull” on my credit report and that it wouldn’t even show up. I still refused to give my social security number and insisted that I would pay the deposit. He finally gave in and informed me that he will not perform a credit check or even ask for my social security number. He said that he still has to verify my identity in order to set up service. He asked for my name and date of birth, and proceeded to ask me a few questions related to previous addresses that I resided at. When he was finished asking me questions he stated that my identity has been verified and he proceeded to complete the order. While he was finishing up the order, I checked my credit report online ( I have credit monitoring subscriptions with Equifax, Transunion and Experian) and found a hard credit inquiry on Equifax from:
    VERIZON EAST
    99 SHAWAN RD
    FLOOR 2 RM
    COCKEYSVILLE, MD 21030
    I immediately informed the sales representative that he had just pulled my credit report and my credit score dropped 3 points. He was flustered at first and tried to assure me that it was just an identity verification. Perhaps he didn’t think I would realize my credit was pulled until days later when it wasn’t his problem anymore and he already made the sale. I suggested that either he wasn’t properly trained on what “identity verification” really was, or he outright committed fraud in order to make a sale. He tried to reason with me that his calls are recorded and that he has a child to take care of, so he wouldn’t do such a thing. I was upset but I figured since the damage was done and I have excellent credit anyway, maybe he can make it up to me by waiving my activation fee or something. He said he couldn’t do anything on his end but after he was done setting up the service he will transfer me to a manager that can help me. After he was finished he transferred me…to the general Verizon 800 number! I navigated the help menu and was finally connected with another sales representative named Ryan {edited for privacy}I explained to him what had just happened and he tried to pull up my order number to see what he could do for me. He said my order was on a “shadow hold” and wasn’t fully completed yet so he couldn’t access it or try to help me out. Instead he took down my phone number and promised to call me tonight at 8pm(which never happened). I haven’t even started receiving services yet and I am already having issues with Verizon Fios.  I have been a CFE for many years and investigated enough fraud cases to know when something doesn’t seem right. The sales representative knew I didn’t want a credit check performed and did so anyway without consent. This represents either malfeasance or at least misfeasance of 15 U.S.C. § 1681 of the Fair Credit Reporting Act. I discussed the situation with a colleague of mine at the Federal Trade Commission’s Office of Inspector General (FTC OIG) and came up with an investigative methodology to determine if this issue is isolated to a few bad sales reps or a systemic problem across Verizon. Assuming Verizon doesn’t answer a subpoena to give up data on credit inquiries done without social security numbers, the FTC can easily go to a neutral third party (i.e. Equifax) for the information. A data analysis can be done singling out credit checks done from Verizon East without the use of social security numbers. Then the FTC can contact a random sample of Verizon applicants to see if they felt they received proper disclosure from the sales rep that they were about to perform a credit check; or were they simply told it was an “identity verification”. I would guess that many customers weren’t properly warned of the impending credit check and many simply decided not to complain since it wouldn’t result in the inquiry being taken off. If the issue is widespread, it could indicate an aggressive sales training program where Verizon teaches salespeople how to word a credit check in a way that seems more agreeable to the customer (e.g. “identity verification”).
    I was pretty upset when this happened yesterday, but Ryan {edited for privacy} said he would call me tonight to discuss it and make it right. Since it seems that even nice representatives are trained to say anything to get customers off the phone; I feel an obligation to pursue this further. Luckily, as a fraud investigator for a government agency, I have the professional network and resources to pursue this case with the minimum amount of time and effort. It would be appreciated if someone from Verizon legal contacted me soon.

    Your issue has been escalated to a Verizon agent. Before the agent can begin assisting you, they will need to collect further information from you.
    Please go to your profile page for the forum, and look in the middle, right at the top where you will find an area titled "My Support Cases". You can reach your profile page by clicking on your name beside your post, or at the top left of this page underneath the title of the board.
    Under “My Support Cases” you will find a link to the private board where you and the agent may exchange information. This should be checked on a frequent basis as the agent may be waiting for information from you before they can proceed with any actions.
    To ensure you know when they have responded to you, at the top of your support case there is a drop down menu for support case options. Open that and choose "subscribe".
    Please keep all correspondence regarding your issue in the private support portal.

  • Sales representative as created by

    I am working with the system that is using the field 'Created by' for sales representative data field.
    Why would someone configure their system to use this field rather than setting the Partner function?
    Could this be changed in production? But then it would be changing the business process and not the system itself.

    Hello Edna,
    They have configured the partner function for sales representative and then created the user id using transaction SU01 for their sales representative in order to keep a track that which sales representative has created sales order.
    They may be tracking as to decide the incentives or commision which they can give to them.
    Like in insurance industry, there is a track to find out what target a particular representative has reached in order to decide on their incentives and commission.
    Hope it helps.
    Regards,
    Priyanka

  • Commission report Query Question

    The inbuilt Commission Report is run by the following query:
    SELECT T0.DocNum, T0.DocType, T0.DocTotal, ( T0.DocTotal - T0.VatSum) As "Net Income"  , T1.SlpName, T1.Commission, ( ( T0.DocTotal - T0.VatSum)*( T1.Commission/100)) As "Sum_Commissions" FROM OINV T0  INNER JOIN OSLP T1 ON T0.SlpCode = T1.SlpCode WHERE T1.SlpName  = N'[%0]' AND T0.DocDate >= '[%1]' AND  T0.DocDate <= '[%2]'
    However, I have a need to change this query to solve a problem:
    If AFTER the Invoices are added to the system, I go back to the Invoice and change/add the Employee Name to the transaction line, the query ignores these additions made. Can I change the query so the Commission Report takes into account changes made to the employees' field AFTER invoices are posted to the system (SAP allowes me to make such changes to the employee)
    In other words I would like the Query to look at the Emploee field AFTER I make changes and give me an updated report.
    i am aware that SAP does not allow changes to the Invoice AFTER posting them to the system but it seems to allow changes to the Commission/Employee field, so I should be able to run a Commission report after I make these changes.
    Thank you
    Robert

    Hi SUDA,
    Yes I mean SALES EMPLOYEE. It seems strange to me as well that this report will ignore the information in this field. I have checked this again and what seems to happen is as follows: Say I have invoice no 712 marked to Employee=Erica and I run the commission report for Erica and invoice 712 correctly appears on the report. Then I go back and change the Employee Name on the Invoice 712 (on each line) to Robert and I run the report again. I would expect that Inv 712 will be included in this report (commission report for Robert) but for some strange reason, IS NOT.
    In fact INV 712 is still associated with ERICA although I have changed the SE to Robert- please check this out?
    Thanks
    Robert

  • Commission Report Question

    The commission Report is giving me the correct details based on each Sales Invoice and its relevant commission. However what is missing from this report is;
    1. There is no TOTAL for the report
    2. The B/P Name is missing
    How can I change the report since it does not give me the option to use PLD. In any case, I would like to change it for the Screen. (not just the Print)
    thanks for your help
    Robert

    Hi Suda
    Can you please give me details how do I access the Query that created this report - where exactly does it reside?
    If I locate the Query, I assume that I can use QPLD to print this as a report?
    Thanks
    Robert

  • Finding brand penetration per customer for sales representative

    Material-Brand-----Sales-Rep----Customer
    GW--XYZ--
    Super-Cuts
    SE--XYZ--
    Super-Cuts
    GW--XYZ--
    Super-Cuts
    SE--ABC--
    Scissors
    GW--ABC--
    Scissors
    Wella--ABC--
    Scissors
    Wella--XYZ--
    Colors-and-Cuts-Salon
    GW--XYZ--
    Colors-and-Cuts-Salon
    SE--XYZ--
    Colors-and-Cuts-Salon
    SE--ABC--
    Planet-Beuty
    Wella--ABC--
    Planet-Beuty
    Kadus--ABC--
    Planet-Beuty
    Clariol--ABC--
    Planet-Beuty
    SE--ABC--
    Planet-Beuty
    Clariol--ABC--
    Planet-Beuty
    Wella--XYZ--
    Colors-and-Cuts-Salon
    GW--XYZ--
    Colors-and-Cuts-Salon
    SE--XYZ--
    Colors-and-Cuts-Salon
    Clariol--XYZ--
    Colors-and-Cuts-Salon
    the requirement is to find the brand penetration which
    is defined as  average no of brands per customer for a sales representative.
    in the above case XYZ is having two customer super cuts and color and salon
    XYZ----
    Brand pentration
    Super-Cuts--     2--(NO-OF-DIFFERENT-BRAND)
    Color-and-Cuts-Salon----
    4
    Average-Brand-Penetration-per-Account----
    3
    ABC----
    Brand-Penetration
    Planet-Beauty--4--(NO-OF-DIFFERENT-BRAND)
    Scissors----
    3
    Average-Brand-Penetration-per-Account----
    3.5
    THE REPORT LAYOUT SHOULD BE
    SALES-REP-----BRAND-PENTRATION
    XYZ----
    3
    ABC----
    3.5
    HOW  this requirement can be achieved in bex 3.5?
    Edited by: Omprakash Mishra on Jun 27, 2008 5:53 AM

    Hi praveen,
                     Actually this is much complex report .
                     there are many other complex key figures along with it .
                     i have just published a part of it as i am unable to find solution for it.
                     it is just an example so that people can understand it easily.

  • Sales rep commission

    Hi
      Hi i need to maintain sales rep field in sales order. To enter sales rep name or his employee id in sales order like we enter sold to party in sales what i need to be done, do i need to take ABAPER help or is there any standard functionality. But i know that i  have creat Partner funtion for sales rep and maintain at sales header level.
    other doubt is to assign commission for sales rep what are the setting need to be done. Pls tell in detail,  i got ans as i need to maintain accruals condition, but i didnt understood, pls help me and send me in detail configuration and also lwt me knowwhere i need to take abaper help and FI consultant help.
    Regards

    Dear Gurus,
    We are tyring to capture one scenario where there are 10 sales representative in a retail store,
    When sales happen, depending upon which sales rep helps the customer, he would get some commission on the total sales value.
    This we want to achieve it through the POS simultation (Tcode-WPUK),
    How the sales representative is created ?( through PA30 or through the XD01 with account group Sales Representative)
    Is this sales representative same as the one shown in picture??(Screenshot-WPUK)
    Requesting your help, (Little urgent)
    Thanks in Advance
    Regards,
    Sahil G

  • Graphical representation of report

    hi  ..
    How do we  provide  graphical representation of  report  output.

    Hi
    1st example
    report GRAPHICS_GUI_CE_DEMO.
    global data
    data: G_CE_CONTAINER type ref to CL_GUI_CUSTOM_CONTAINER.
    data: G_CE_NEW_CONTAINER type ref to CL_GUI_CUSTOM_CONTAINER.
    data: G_CE_VIEWER type ref to CL_GUI_CHART_ENGINE.
    data: G_CE_VIEWER_NEW type ref to CL_GUI_CHART_ENGINE.
    data: G_IXML type ref to IF_IXML.
    data: G_IXML_SF type ref to IF_IXML_STREAM_FACTORY.
    data: G_DESIGN_MODE type C.
    data: G_VALUE_CHANGE type C.
    data: G_SAVE_OKCODE like SY-UCOMM.
    dynpro data
    data: OKCODE like SY-UCOMM,
    GT_SFLIGHT type table of SFLIGHT,
    G_REPID like SY-REPID,
    G_MAX type I value 100,
    MYCONTAINER type SCRFNAME value 'NEW_CONTAINER',
    reference to custom container: neccessary to bind ALV Control
    CUSTOM_CONTAINER type ref to CL_GUI_CUSTOM_CONTAINER,
    GRID1 type ref to CL_GUI_ALV_GRID.
    'x_save' contains a flag to control which kind of a layout the user
    can save (see below).
    'gs_layout' identifies a layout. It must contain
    at least the report-id.
    § 1.Declare a structure of type DISVARIANT to identify a layout
    and a variable to define the saving options for users.
    data: X_SAVE, "for Parameter I_SAVE
    GS_LAYOUT type DISVARIANT. "for parameter IS_VARIANT
    event handler
    class LCL_CE_VIEWER_EH definition.
    public section.
    methods ON_CLICK for event CLICK of CL_GUI_CHART_ENGINE
    importing
    ELEMENT SERIES POINT.
    methods ON_VALUE_CHANGE for event VALUE_CHANGE of
    CL_GUI_CHART_ENGINE
    importing
    SERIES POINT VALUE.
    methods ON_PROPERTY_CHANGE for event PROPERTY_CHANGE of
    CL_GUI_CHART_ENGINE
    importing
    ELEMENT NAME VALUE.
    endclass. "lcl_ce_viewer_eh DEFINITION
    data: G_CE_VIEWER_EH type ref to LCL_CE_VIEWER_EH.
    data: G_CE_VIEWER_EH_NEW type ref to LCL_CE_VIEWER_EH.
    entry point
    start-of-selection.
    *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    start-of-selection.
    select * from SFLIGHT into table GT_SFLIGHT up to G_MAX rows.
    *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    clear GS_LAYOUT.
    create global objects
    G_IXML = CL_IXML=>CREATE( ).
    G_IXML_SF = G_IXML->CREATE_STREAM_FACTORY( ).
    G_REPID = SY-REPID.
    § 2.At least field REPORT of this structure has to be filled!
    GS_LAYOUT-REPORT = G_REPID.
    X_SAVE = 'A'. "The user may save all types of a layout
    call screen '100'.
    ENDREPORT GRAPHICS_GUI_CE_DEMO.
    *& Module STATUS_0100 OUTPUT
    text
    module STATUS_0100 output.
    data: L_IXML_DATA_DOC type ref to IF_IXML_DOCUMENT,
    L_IXML_CUSTOM_DOC type ref to IF_IXML_DOCUMENT,
    L_OSTREAM type ref to IF_IXML_OSTREAM,
    L_XSTR type XSTRING.
    set pf-status '100'.
    if G_CE_CONTAINER is initial.
    create object G_CE_CONTAINER
    exporting
    CONTAINER_NAME = 'CONTAINER'.
    create object G_CE_VIEWER
    exporting
    PARENT = G_CE_CONTAINER.
    create object G_CE_VIEWER_EH.
    set handler G_CE_VIEWER_EH->ON_CLICK for G_CE_VIEWER.
    set handler G_CE_VIEWER_EH->ON_VALUE_CHANGE for G_CE_VIEWER.
    set handler G_CE_VIEWER_EH->ON_PROPERTY_CHANGE for G_CE_VIEWER.
    perform CREATE_DATA_DEMO using L_IXML_DATA_DOC.
    L_OSTREAM = G_IXML_SF->CREATE_OSTREAM_XSTRING( L_XSTR ).
    call method L_IXML_DATA_DOC->RENDER
    exporting
    OSTREAM = L_OSTREAM.
    G_CE_VIEWER->SET_DATA( XDATA = L_XSTR ).
    clear L_XSTR.
    perform CREATE_CUSTOM_DEMO using L_IXML_CUSTOM_DOC.
    L_OSTREAM = G_IXML_SF->CREATE_OSTREAM_XSTRING( L_XSTR ).
    call method L_IXML_CUSTOM_DOC->RENDER
    exporting
    OSTREAM = L_OSTREAM.
    G_CE_VIEWER->SET_CUSTOMIZING( XDATA = L_XSTR ).
    endif.
    call method G_CE_VIEWER->RENDER.
    if CUSTOM_CONTAINER is initial.
    create a custom container control for our ALV Control
    create object CUSTOM_CONTAINER
    exporting
    CONTAINER_NAME = MYCONTAINER
    exceptions
    CNTL_ERROR = 1
    CNTL_SYSTEM_ERROR = 2
    CREATE_ERROR = 3
    LIFETIME_ERROR = 4
    LIFETIME_DYNPRO_DYNPRO_LINK = 5.
    if SY-SUBRC ne 0.
    add your handling, for example
    call function 'POPUP_TO_INFORM'
    exporting
    TITEL = G_REPID
    TXT2 = SY-SUBRC
    TXT1 = 'The control could not be created'(510).
    endif.
    create object GRID1
    exporting I_PARENT = CUSTOM_CONTAINER.
    § 4.Transfer your structure and your variable using parameters
    IS_VARIANT and I_SAVE of method set_table_for_first_display.
    call method GRID1->SET_TABLE_FOR_FIRST_DISPLAY
    exporting
    I_STRUCTURE_NAME = 'SFLIGHT'
    IS_VARIANT = GS_LAYOUT "&see below
    I_SAVE = X_SAVE "&see below
    I_DEFAULT = 'X'
    changing
    IT_OUTTAB = GT_SFLIGHT.
    & If you leave out the these parameters, the menu beneath
    the layout icon disappears.
    endif.
    endmodule. " STATUS_0100 OUTPUT
    *& Module USER_COMMAND_0100 INPUT
    text
    module USER_COMMAND_0100 input.
    G_SAVE_OKCODE = OKCODE.
    clear OKCODE.
    case G_SAVE_OKCODE.
    when 'DESIGN'.
    perform TOGGLE_DESIGN_MODE.
    when 'VALUE'.
    perform TOGGLE_VALUE_CHANGE.
    when 'SAVE'.
    perform SAVE_CUSTOMIZING.
    when 'PRINT'.
    perform PRINT.
    when 'EXIT'.
    leave program.
    when 'BACK'.
    leave program.
    endcase.
    endmodule. " USER_COMMAND_0100 INPUT
    *& IMPLEMENTATION
    text
    class CL_ABAP_CHAR_UTILITIES definition load.
    *& Form create_data_demo
    text
    form CREATE_DATA_DEMO using P_IXML_DOC type ref to IF_IXML_DOCUMENT.
    data: L_SIMPLECHARTDATA type ref to IF_IXML_ELEMENT,
    L_CATEGORIES type ref to IF_IXML_ELEMENT,
    L_SERIES type ref to IF_IXML_ELEMENT,
    L_ELEMENT type ref to IF_IXML_ELEMENT,
    L_ENCODING type ref to IF_IXML_ENCODING.
    P_IXML_DOC = G_IXML->CREATE_DOCUMENT( ).
    L_ENCODING = G_IXML->CREATE_ENCODING(
    BYTE_ORDER = IF_IXML_ENCODING=>CO_LITTLE_ENDIAN
    CHARACTER_SET = 'utf-8' ).
    P_IXML_DOC->SET_ENCODING( L_ENCODING ).
    L_SIMPLECHARTDATA = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'SimpleChartData' PARENT = P_IXML_DOC ).
    L_CATEGORIES = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'Categories' PARENT = L_SIMPLECHARTDATA ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'C' PARENT = L_CATEGORIES ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( '1st quarter' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'C' PARENT = L_CATEGORIES ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( '2nd quarter' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'C' PARENT = L_CATEGORIES ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( '3rd quarter' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'C' PARENT = L_CATEGORIES ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( '4th quarter' ).
    L_SERIES = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'Series' PARENT = L_SIMPLECHARTDATA ).
    L_SERIES->SET_ATTRIBUTE( NAME = 'label' VALUE = 'Coffee' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'S' PARENT = L_SERIES ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( '94' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'S' PARENT = L_SERIES ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( '110' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'S' PARENT = L_SERIES ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( '139' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'S' PARENT = L_SERIES ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( '192' ).
    L_SERIES = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'Series' PARENT = L_SIMPLECHARTDATA ).
    L_SERIES->SET_ATTRIBUTE( NAME = 'label' VALUE = 'Espresso' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'S' PARENT = L_SERIES ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( '35' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'S' PARENT = L_SERIES ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( '39' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'S' PARENT = L_SERIES ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( '38' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'S' PARENT = L_SERIES ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( '59' ).
    endform. " create_data_demo
    *& Form create_custom_demo
    text
    form CREATE_CUSTOM_DEMO using P_IXML_DOC type ref to IF_IXML_DOCUMENT.
    data: L_ROOT type ref to IF_IXML_ELEMENT,
    L_GLOBALSETTINGS type ref to IF_IXML_ELEMENT,
    L_DEFAULT type ref to IF_IXML_ELEMENT,
    L_ELEMENTS type ref to IF_IXML_ELEMENT,
    L_CHARTELEMENTS type ref to IF_IXML_ELEMENT,
    L_TITLE type ref to IF_IXML_ELEMENT,
    L_ELEMENT type ref to IF_IXML_ELEMENT,
    L_ENCODING type ref to IF_IXML_ENCODING.
    P_IXML_DOC = G_IXML->CREATE_DOCUMENT( ).
    L_ENCODING = G_IXML->CREATE_ENCODING(
    BYTE_ORDER = IF_IXML_ENCODING=>CO_LITTLE_ENDIAN
    CHARACTER_SET = 'utf-8' ).
    P_IXML_DOC->SET_ENCODING( L_ENCODING ).
    L_ROOT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'SAPChartCustomizing' PARENT = P_IXML_DOC ).
    L_ROOT->SET_ATTRIBUTE( NAME = 'version' VALUE = '1.1' ).
    L_GLOBALSETTINGS = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'GlobalSettings' PARENT = L_ROOT ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'FileType' PARENT = L_GLOBALSETTINGS ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( 'PNG' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'Dimension' PARENT = L_GLOBALSETTINGS ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( 'PseudoThree' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'Width' PARENT = L_GLOBALSETTINGS ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( '640' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'Height' PARENT = L_GLOBALSETTINGS ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( '360' ).
    L_DEFAULT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'Defaults' PARENT = L_GLOBALSETTINGS ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'FontFamily' PARENT = L_DEFAULT ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( 'Arial' ).
    L_ELEMENTS = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'Elements' PARENT = L_ROOT ).
    L_CHARTELEMENTS = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'ChartElements' PARENT = L_ELEMENTS ).
    L_TITLE = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'Title' PARENT = L_CHARTELEMENTS ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'Extension' PARENT = L_TITLE ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( 'href="sapevent:onclick?Title"' ).
    L_ELEMENT = P_IXML_DOC->CREATE_SIMPLE_ELEMENT(
    NAME = 'Caption' PARENT = L_TITLE ).
    L_ELEMENT->IF_IXML_NODE~SET_VALUE( 'Caffeine Consumption' ).
    endform. " create_custom_demo
    *& Form toggle_design_mode
    text
    form TOGGLE_DESIGN_MODE .
    data: L_WIN_CHART type ref to CL_GUI_CHART_ENGINE_WIN.
    catch system-exceptions MOVE_CAST_ERROR = 1.
    L_WIN_CHART ?= G_CE_VIEWER->GET_CONTROL( ).
    endcatch.
    if SY-SUBRC is initial.
    if G_DESIGN_MODE is initial.
    G_DESIGN_MODE = 'X'.
    else.
    G_DESIGN_MODE = ' '.
    endif.
    L_WIN_CHART->SET_DESIGN_MODE( FLAG = G_DESIGN_MODE EVENT = 'X' ).
    L_WIN_CHART->RESTRICT_CHART_TYPES( CHARTTYPES = 'Columns|Lines' ).
    L_WIN_CHART->RESTRICT_PROPERTY_EVENTS( EVENTS = 'ChartType' ).
    endif.
    endform. " toggle_design_mode
    *& Form toggle_value_change
    text
    form TOGGLE_VALUE_CHANGE .
    data: L_WIN_CHART type ref to CL_GUI_CHART_ENGINE_WIN.
    catch system-exceptions MOVE_CAST_ERROR = 1.
    L_WIN_CHART ?= G_CE_VIEWER->GET_CONTROL( ).
    endcatch.
    if SY-SUBRC is initial.
    if G_VALUE_CHANGE is initial.
    G_VALUE_CHANGE = 'X'.
    L_WIN_CHART->ENABLE_VALUE_CHANGE( ).
    else.
    G_VALUE_CHANGE = ' '.
    L_WIN_CHART->DISABLE_VALUE_CHANGE( ).
    endif.
    endif.
    endform. " toggle_value_change
    *& Form save_customizing
    text
    form SAVE_CUSTOMIZING .
    data: L_XML_CUSTOMIZING type W3HTMLTABTYPE,
    L_WIN_CHART type ref to CL_GUI_CHART_ENGINE_WIN,
    L_FILENAME type STRING,
    L_FILEPATH type STRING,
    L_FILESIZE type I,
    L_PATH type STRING.
    catch system-exceptions MOVE_CAST_ERROR = 1.
    L_WIN_CHART ?= G_CE_VIEWER->GET_CONTROL( ).
    endcatch.
    if SY-SUBRC is initial.
    L_WIN_CHART->GET_CUSTOMIZING(
    importing
    DATA_TABLE = L_XML_CUSTOMIZING
    describe table L_XML_CUSTOMIZING lines L_FILESIZE.
    multiply L_FILESIZE by 255.
    L_FILENAME = 'customizing.xml'.
    call method CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    exporting
    DEFAULT_FILE_NAME = L_FILENAME
    changing
    FILENAME = L_FILENAME
    PATH = L_PATH
    FULLPATH = L_FILEPATH.
    if not L_FILEPATH is initial.
    call method CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
    exporting
    FILETYPE = 'BIN'
    FILENAME = L_FILEPATH
    BIN_FILESIZE = L_FILESIZE
    changing
    DATA_TAB = L_XML_CUSTOMIZING
    exceptions
    FILE_WRITE_ERROR = 1
    others = 22.
    endif.
    endif.
    endform. " save_customizing
    *& Form print
    text
    form PRINT .
    data: L_WIN_CHART type ref to CL_GUI_CHART_ENGINE_WIN,
    L_S_PRINT_PARAMETERS type PRI_PARAMS.
    call function 'GET_PRINT_PARAMETERS'
    exporting
    DESTINATION = 'LOCL'
    MODE = 'CURRENT'
    NO_DIALOG = ''
    importing
    OUT_PARAMETERS = L_S_PRINT_PARAMETERS
    VALID = L_VALID
    exceptions
    ARCHIVE_INFO_NOT_FOUND = 1
    INVALID_PRINT_PARAMS = 2
    INVALID_ARCHIVE_PARAMS = 3
    others = 4.
    if SY-SUBRC <> 0.
    BREAK USCGXS22.
    endif.
    catch system-exceptions MOVE_CAST_ERROR = 1.
    L_WIN_CHART ?= G_CE_VIEWER->GET_CONTROL( ).
    endcatch.
    if SY-SUBRC is initial.
    new-page print on parameters L_S_PRINT_PARAMETERS no dialog.
    L_WIN_CHART->PRINT( ).
    new-page print off.
    endif.
    endform. " print
    *& Clas lcl_ce_viewer_eh
    text
    class LCL_CE_VIEWER_EH implementation.
    method ON_CLICK.
    data: L_MSG type STRING,
    L_SERIES type STRING,
    L_POINT type STRING.
    L_SERIES = SERIES.
    L_POINT = POINT.
    concatenate 'Element clicked:'(M01) ELEMENT
    'Series:'(T01) L_SERIES
    'Point:'(T02) L_POINT
    into L_MSG separated by SPACE.
    message L_MSG type 'S'.
    endmethod. "on_click
    method ON_VALUE_CHANGE.
    data: L_MSG type STRING,
    L_SERIES type STRING,
    L_POINT type STRING,
    L_VALUE type STRING.
    L_SERIES = SERIES.
    L_POINT = POINT.
    L_VALUE = VALUE.
    concatenate 'Value changed:'(M02)
    'Series:'(T01) L_SERIES
    'Point:'(T02) L_POINT
    'Value:'(T03) L_VALUE
    into L_MSG separated by SPACE.
    message L_MSG type 'S'.
    endmethod. "on_value_change
    method ON_PROPERTY_CHANGE.
    data: L_MSG type STRING.
    concatenate 'Property changed:'(M03)
    'Element:'(T04) ELEMENT
    'Name:'(T05) NAME
    'Value:'(T03) VALUE
    into L_MSG separated by SPACE.
    message L_MSG type 'S'.
    endmethod. "on_property_change
    endclass. "lcl_ce_viewer_eh IMPLEMENTATION
    2nd Example:
    REPORT zmar_graphics .
    This program illustrates a call to SAP Business Graphics. *
    Each row in the DATA table contains one text label and a *
    single numeric value. *
    DATA: BEGIN OF data OCCURS 1,
    text(25),
    value TYPE p,
    END OF data.
    DATA: tcol1(5) VALUE '#1991'.
    DATA: title(25) VALUE 'Sales'.
    SET PF-STATUS 'GRAF'.
    data-text = 'Product_1'.
    data-value = 153470.
    APPEND data.
    data-text = 'Product_2'.
    data-value = 253150.
    APPEND data.
    data-text = 'Product_3'.
    data-value = 53470.
    APPEND data.
    data-text = 'Product_4'.
    data-value = 182000.
    APPEND data.
    data-text = 'Product_5'.
    data-value = 92410.
    APPEND data.
    WRITE: / 'Products',22 tcol1.
    SKIP 2.
    LOOP AT data.
      WRITE: / data-text, 12 data-value.
    ENDLOOP.
    PF11: Put out a 2D graphic *
    AT PF11.
      CALL FUNCTION 'GRAPH_2D'
           EXPORTING
                titl = title
           TABLES
                data = data.
    2nd Example:
    REPORT zmar_graphics1.
    Data for 2D-Modification
    DATA: BEGIN OF data OCCURS 1,
    text(25),
    value TYPE p,
    END OF data.
    DATA: tcol1(5) VALUE '#1993'.
    DATA: title(25) VALUE 'Merchandise 1993'.
    DATA: tit2(10) VALUE 'Product'.
    DATA: mod_row(5), mod_col(5), mod_val(20).
    DATA: m_typ, b_typ, busg_stat.
    FIELD-SYMBOLS: .
    data-text = 'Refrigerators'.
    data-value = 12345.
    APPEND data.
    data-text = 'Freezers'.
    data-value = 22222.
    APPEND data.
    data-text = 'Ovens'.
    data-value = 11111.
    APPEND data.
    data-text = 'Dishwashers'.
    data-value = 54321.
    APPEND data.
    PERFORM output_2d.
    AT PF08.
      busg_stat = space. "// start and wait
    Event-Loop
      DO.
        CALL FUNCTION 'GRAPH_2D'
             EXPORTING
                  stat       = busg_stat
                  inform     = '7'  "// allow modify
                  mail_allow = 'X'  "// allow mail
             IMPORTING
                  m_typ      = m_typ
                  b_typ      = b_typ
                  mod_row    = mod_row
                  mod_col    = mod_col
                  mod_val    = mod_val
             TABLES
                  data       = data.
        busg_stat = '4'. "// Just wait next time
        CASE m_typ.
          WHEN 'D'. "// Programm ended
            EXIT.
          WHEN 'I'. "// Valid message
            IF b_typ = 'M'. "// Modify-event
              READ TABLE data INDEX mod_row.
              ASSIGN COMPONENT mod_col OF STRUCTURE data TO  = mod_val.
              MODIFY data INDEX mod_row.
            ENDIF.
            IF b_typ = 'S'. "// Select-event (ignored)
            ENDIF. "// For element (MOD_ROW-MOD_COL)
        ENDCASE.
      ENDDO.
      PERFORM output_2d.
    FORM OUTPUT_2D (Show the actual data)
    FORM output_2d.
      WRITE: / 'Products',22 tcol1.
      SKIP 2.
      LOOP AT data.
        WRITE: / data-text, 22 data-value.
      ENDLOOP.
    ENDFORM.
    3rd Example:
    REPORT zmar_graphics3.
    DATA: BEGIN OF hpgl OCCURS 1,
    entry(128),
    END OF hpgl.
    hpgl = 'SP6;PUPA0,0;'. APPEND hpgl.
    hpgl = 'PDPA100,100,100,200,200,200,200,100,100,100;'. APPEND hpgl.
    hpgl = 'SP1;PUPA100,150;'. APPEND hpgl.
    hpgl = 'PDPA100,150,150,200,200,150,150,100,100,150;'. APPEND hpgl.
    CALL FUNCTION 'GRAPH_HPGL'
         TABLES
              data = hpgl.
    4th Example:
    REPORT zmar_graphics4.
    DATA: BEGIN OF objt OCCURS 1. "// Object Attributes
            INCLUDE STRUCTURE gpoobjt.
    DATA: END OF objt.
    DATA: BEGIN OF area_tab OCCURS 1. "// Areas (unused)
            INCLUDE STRUCTURE gpoarea.
    DATA: END OF area_tab.
    DATA: BEGIN OF col_text OCCURS 1, "// Value columns
    c(40),
    END OF col_text.
    DATA: BEGIN OF values OCCURS 1, "// Object fields
    p1 TYPE p,
    p2 TYPE p,
    p3 TYPE p,
    p4 TYPE p,
    p5 TYPE p,
    p6 TYPE p,
    p7 TYPE p,
    p8 TYPE p,
    p9 TYPE p,
    END OF values.
    DATA: BEGIN OF axis OCCURS 4.
            INCLUDE STRUCTURE gpoaxis.
    DATA: END OF axis.
    DATA save LIKE sy-tabix.
    SET PF-STATUS 'GRAF'.
    Constraints: Number of VALUES rows == Number of OBJT rows
    : Num of VALUES columns == Number of COL_TEXT rows
    Column title for $OBJD::VALTIT
    col_text = '% Market share'. APPEND col_text.
    col_text = '% Growth'. APPEND col_text.
    col_text = 'Sales'. APPEND col_text.
    col_text = 'Market share trend'. APPEND col_text.
    col_text = 'Growth trend'. APPEND col_text.
    col_text = 'Fixed costs'. APPEND col_text.
    col_text = 'Overhead costs'. APPEND col_text.
    col_text = 'Admin. costs'. APPEND col_text.
    col_text = 'Estimated profits'. APPEND col_text.
    Attributes for $AXIS
    axis-pos = 'RIGHT'.
    axis-backclr = 'DARKGRAY'.
    axis-textclr = 'WHITE'.
    axis-scalclr = 'WHITE'.
    axis-shadow = 'N'.
    axis-ticks = '50'.
    axis-start = '0'.
    axis-end = '100'.
    APPEND axis.
    axis-pos = 'TOP'.
    axis-backclr = 'DARKGRAY'.
    axis-textclr = 'WHITE'.
    axis-scalclr = 'WHITE'.
    axis-shadow = space.
    axis-ticks = '50'.
    axis-start = '0'.
    axis-end = '100'.
    APPEND axis.
    axis-pos = 'LEFT'.
    axis-backclr = 'DARKGRAY'.
    axis-textclr = 'WHITE'.
    axis-scalclr = 'WHITE'.
    axis-shadow = 'N'.
    axis-ticks = '10'.
    axis-start = '0'.
    axis-end = '100'.
    APPEND axis.
    axis-pos = 'BOTTOM'.
    axis-backclr = 'DARKGRAY'.
    axis-textclr = 'WHITE'.
    axis-scalclr = 'WHITE'.
    axis-shadow = 'N'.
    axis-ticks = '50'.
    axis-start = '0'.
    axis-end = '100'.
    APPEND axis.
    Objects
    *BJT-LINECLR = 'WHITE'.
    1. Trend line
    objt-form = 'RECTANGLE'.
    objt-fillclr = 'YELLOW'.
    objt-textclr = 'BLUE'.
    objt-title = 'Clarion 1990'.
    objt-info = 'Sales in 1990'.
    values-p1 = 10.
    values-p2 = 20.
    values-p3 = 10000.
    values-p4 = 22.
    values-p5 = 22.
    values-p6 = 400.
    values-p7 = 300.
    values-p8 = 200.
    values-p9 = 100.
    APPEND objt.
    APPEND values.
    objt-form = 'RECTANGLE'.
    objt-fillclr = 'YELLOW'.
    objt-textclr = 'BLUE'.
    objt-title = 'Clarion 1991'.
    objt-info = 'Sales in 1991'.
    values-p1 = 22.
    values-p2 = 22.
    values-p3 = 15000.
    values-p4 = 45.
    values-p5 = 35.
    values-p6 = 100.
    values-p7 = 200.
    values-p8 = 300.
    values-p9 = 400.
    APPEND objt.
    APPEND values.
    objt-form = 'RECTANGLE'.
    objt-fillclr = 'YELLOW'.
    objt-textclr = 'BLUE'.
    objt-title = 'Clarion 1992'.
    objt-info = 'Sales in 1992'.
    values-p1 = 45.
    values-p2 = 35.
    values-p3 = 22000.
    values-p4 = 62.
    values-p5 = 33.
    values-p6 = 20.
    values-p7 = 40.
    values-p8 = 80.
    values-p9 = 160.
    APPEND objt.
    APPEND values.
    objt-form = 'RECTANGLE'.
    objt-fillclr = 'YELLOW'.
    objt-textclr = 'BLUE'.
    objt-title = 'Clarion 1993'.
    objt-info = 'Sales in 1993'.
    values-p1 = 62.
    values-p2 = 33.
    values-p3 = 12000.
    values-p4 = 62.
    values-p5 = 33.
    values-p6 = 600.
    values-p7 = 700.
    values-p8 = 600.
    values-p9 = 700.
    APPEND objt.
    APPEND values.
    2. Trend line
    objt-form = 'CIRCLE'.
    objt-fillclr = 'GREEN'.
    objt-textclr = 'BLUE'.
    objt-title = 'Sony 1988'.
    objt-info = 'Sony UX400/CD, Sales in 1988'.
    values-p1 = 2.
    values-p2 = 50.
    values-p3 = 2500.
    values-p4 = 26.
    values-p5 = 57.
    values-p6 = 100.
    values-p7 = 700.
    values-p8 = 20.
    values-p9 = 50.
    APPEND objt.
    APPEND values.
    objt-form = 'CIRCLE'.
    objt-fillclr = 'GREEN'.
    objt-textclr = 'BLUE'.
    objt-title = 'Sony 1989'.
    objt-info = 'Sony UX400/CD, Sales in 1989'.
    values-p1 = 26.
    values-p2 = 57.
    values-p3 = 3500.
    values-p4 = 58.
    values-p5 = 70.
    values-p6 = 100.
    values-p7 = 600.
    values-p8 = 20.
    values-p9 = 70.
    APPEND objt.
    APPEND values.
    objt-form = 'CIRCLE'.
    objt-fillclr = 'GREEN'.
    objt-textclr = 'BLUE'.
    objt-title = 'Sony 1990'.
    objt-info = 'Sony UX400/CD, Sales in 1990'.
    values-p1 = 58.
    values-p2 = 70.
    values-p3 = 11000.
    values-p4 = 79.
    values-p5 = 68.
    values-p6 = 100.
    values-p7 = 500.
    values-p8 = 25.
    values-p9 = 90.
    APPEND objt.
    APPEND values.
    objt-form = 'CIRCLE'.
    objt-fillclr = 'GREEN'.
    objt-textclr = 'BLUE'.
    objt-title = 'Sony 1991'.
    objt-info = 'Sony UX400/CD, Sales 1991'.
    values-p1 = 79.
    values-p2 = 68.
    values-p3 = 13000.
    values-p4 = 87.
    values-p5 = 54.
    values-p6 = 100.
    values-p7 = 430.
    values-p8 = 45.
    values-p9 = 120.
    APPEND objt.
    APPEND values.
    objt-form = 'CIRCLE'.
    objt-fillclr = 'GREEN'.
    objt-textclr = 'BLUE'.
    objt-title = 'Sony 1992'.
    objt-info = 'Sony UX400/CD, Sales in 1992'.
    values-p1 = 87.
    values-p2 = 54.
    values-p3 = 13500.
    values-p4 = 80.
    values-p5 = 34.
    values-p6 = 90.
    values-p7 = 390.
    values-p8 = 44.
    values-p9 = 150.
    APPEND objt.
    APPEND values.
    objt-form = 'CIRCLE'.
    objt-fillclr = 'GREEN'.
    objt-textclr = 'BLUE'.
    objt-title = 'Sony 1993'.
    objt-info = 'Sony UX400/CD, Sales in 1993'.
    values-p1 = 80.
    values-p2 = 34.
    values-p3 = 23000.
    values-p4 = 80. "// Line to itself
    values-p5 = 34.
    values-p6 = 90.
    values-p7 = 370.
    values-p8 = 47.
    values-p9 = 165.
    APPEND objt.
    APPEND values.
    area_tab-form = 'RECTANGLE'.
    area_tab-fillclr = 'RED'.
    area_tab-xfrom = '10'.
    area_tab-yfrom = '70'.
    area_tab-xto = '40'.
    area_tab-yto = '90'.
    area_tab-title = 'Winner takes all'.
    APPEND area_tab.
    LOOP AT objt.
      WRITE: / objt-title(20).
      save = sy-tabix.
      READ TABLE values INDEX save.
      WRITE 25 values-p3.
    ENDLOOP.
    AT PF11.
      CALL FUNCTION 'GRAPH_PORT'
           EXPORTING
                title_title   = 'Trend-Portfolio for Sony and Clarion Radio'
                title_info    = 'The two objects over several years'
                title_textclr = 'YELLOW'
                title_backclr = 'DARKGRAY'
                title_size    = '2'
                frm_backclr   = 'GRAY'
                frm_cordclr   = 'WHITE'
                frm_scalclr   = 'WHITE'
                frm_scalmod   = 'LONGDASH'
                frm_gridx     = '10'
                frm_gridy     = '10'
                frm_shadow    = 'X'
                obj_xval      = '0'
                obj_yval      = '1'
                obj_sval      = '2'
                obj_xarr      = '3'
                obj_yarr      = '4'
           TABLES
                axis          = axis
                col_text      = col_text
                objt          = objt
                values        = values
                area_tab      = area_tab.[/code]
    Reward if usefull

Maybe you are looking for