Report painter document

CAN ANY ONE SEND ME THE MATERIAL OR ANY DOCUMENTATION ON REPORT PAINTER. My email id: [email protected]
regards
VINU
Edited by: VINU C T on Apr 25, 2008 4:43 AM
Edited by: VINU C T on Apr 25, 2008 4:44 AM

Dear,
Please refer below link:
http://sapdocs.info/wp-content/uploads/2008/11/report-painter.pdf
Br,Vivek

Similar Messages

  • Report Writer and Report painter documents

    Hi
    If anyone have any documents regarding the report painter and writer, could you please send it to [email protected]?
    Documents with step by step creation of custom report from scratch...? or anything related to these...except the help.sap.com site links..
    Anyhelp is greatly appreciated...
    thank you
    thilothama

    Hi all,
    I am having this report s_alr_87013549 - here I can select by Projects and get the cost elements. I want to use this report as a base for my custom report, which should give me the same result as the above report with Project, WBS, Network activities for each line level..My questions are,
    1. Do I have to define my own library? with columns I need or use the library that the S_ALR report is in??
    2. I am having trouble in understanding characterics, key figure cocncepts - also info structures - to define a report with rows and columns like this - what shld i do>??
    Project name|WBSElement|Network Activity|NetworkActivityElement|CostElemt|PartnerObject|actualCOSt|PlanCost
    These columns should be there in my report...
    Finally - can i have more than 4 columns in my report??
    Please provide Expert advice....I will be really thankful...

  • Report painter- Amount in Document currecy instead of LC

    Hi,
       Am new to report painter. i created report painter in FDI4. this report is to display the due amount.
       when i click on table cell, which is amount field . Am chosen cell type as  'Select with Key figure' option .
       After then i try to select key figure for that cell (Popup:Element definition).
       In F4 selection there is only one Key figure which is Amount in LC.
       I need to display the field value as Amount in Document currency.
       How to bring Amount in Docment curreny in that F4. Is it possible.
      I didnt get any thread related to my requirement in SDN.
      pl help.

    Solved by myself..
    Two steps to be taken to bring Amount in Doc. currency as a key figure(F4 help).
    1. Added new field 'WRSHB' , data element for this field WRSHB_D (Used Append Structure) in RFRRD20 structure. FDI4 used this structure only.
    2. create new entries in TKAF table under application class Account receivable FBRD. field value WRSHB ,data element  value WRSHB_D, and others field value are as same as DMSHB record.
    After these steps, now u check in FDI4 tcode.  U can get Amt in doc. currency as key figure.

  • /TD is appearing in the HTM document when downloaded from Report painter

    Hi,
    We are facing the below issue when we are downloading the report painter report in HTM format.
    When I am downloading a report in HTM format (Web page or Excel) I see some special characters u201C/TD>u201D in the HTM download document. I am able to download this report in other clients and landscapes without any special characters.
    % Standard Cost of Sales     1.547      56.669  /TD>
    % Gross Margin     94.982      27.601 
    % Selling, Admin. & General     19.723      9.290  /TD>
    Thanks and Regards,
    Deepa

    Check the following notes helps you
    =>  Note 1460343 - RW: Unicode and export of report to file
    =>  Note 1522758 - RW: Unicode and export to application server
    thanks
    G. Lakshmipathi

  • Need help in Report Painter

    Can anybody help me in Report Painter? I need a link.
    Regards,
    Subhasish

    Please go through the enclosed document. This will give you step-by-step approach for Report painter:
    http://www.virtuosollc.com/PDF/Get_Reporter.pdf
    Check url
    http://help.sap.com/saphelp_47x200/helpdata/en/da/6ada3889432f48e10000000a114084/frameset.htm
    Check Report Painter Step-by-Step example under Tools->Report Painter / Report Writer->Report Painter->Creating a Report Painter Report.
    Just go through These Links to learn about report Painter.
    http://help.sap.com/saphelp_erp2005/helpdata/en/66/bc7d2543c211d182b30000e829fbfe/frameset.htm
    http://help.sap.com/saphelp_erp2005/helpdata/en/5b/d22cee43c611d182b30000e829fbfe/frameset.htm
    I have a standard report and it uses a structure to pull the data for the report. I need to create a custom report which uses the same structure, selection screen but a different layout. Could any of u plz advice, if its doable in report painter or just plain abap program?? Also I am interested to know how the report painter stores the actual report?? as ABAP program?? Please help..urgent..
    check the SAP help ..
    http://help.sap.com/saphelp_47x200/helpdata/en/66/bc7d2543c211d182b30000e829fbfe/content.htm
    I had made couple of SD reports in report painter 4 year ago .. as far as process is concern you have create library , but it deals with information structure which start with s0* , after defining information structure in library it take to select the fields and display them on your out put . information structure have the statistical data most of the time . As i worked on information structure , so31,32,33 .....
    I t creates ABAP program like ABAP query creates in background . if you execute Customer Over due analysis or in Co02 cost analysis report or MC* ( MM stock reports ) those are in report painter .
    Hope this'll give you some guide line ...
    As far as I know about report painter, It create a report in background..Like when you make ABAP query (SQ01, 02, 03 ) .. It will create a report. You cant modify the report . You have to get OSS id in order to do that. if you're ready do it then you can pass it to Memory and can achieve your goal ...
    I think it will give you some hint. I wish I could have authorization to use report painter on my this project so I can help you out practically.
    Please see these steps , it`ll help you ...
    http://www.thespot4sap.com/Articles/Code_CostCentreReport.asp
    The variation objects are coming from the sets.
    For example, when you read the report 'Cost Centers: Actual/Plan/Variance'(T-code : S_ALR_87013611), you can find the characteristic 'Cost Center' is set as a 'set variable'. So the cost center in the report left side are coming from the cost center group that you input.
    Does any know if we could use Report Painter across two controlling areas? Any documentation available will be great. Yes. When setting up a report in CCA you can have multiple controlling areas. In the General data selection you will have the option for the CA as a selection.
    You can also use standard references objects to construct your own reports: libraries, standard layouts, default columns, and row and column models, all in the standard R/3 System, are available for custom reports.
    Report Painter report definition requires several Preparatory Steps, depending on the complexity of the report to be generated.
    1) Create a library and pick your reporting tables.
    2) Create your report
    3) define your set up within the report
    a)General data selections
    b)Colimns
    c) rows
    d) formulas
    Standard layouts are maintained in the IMG "Financial Accounting" under "Special Ledger -> Information System -> Maintain standard layout.
    Create libraries, which means assigning the
    characteristics
    key figures
    Predefined columns
    For each of these categories you need to select the objects to be used in reports of the specific library. You define the sequence of the objects in the selection lists of the Report Painter in field "Position". Frequently used objects should be at the top of the list.
    go to
    http://help.sap.com/saphelp_erp2005/helpdata/en/5b/d22ba743c611d182b30000e829fbfe/frameset.htm
    I have created a report through report writer/Painter(GR51). My query here is to link this report to a transaction code. Could you please suggest me how can I acheive this?
    Go to SE93 and select the Transaction with Parameters ( Parameter Transaction)
    Then in the Transaction field give: START_REPORT
    Skip initial screen
    Screen 0
    In the default value for the parameters give
    D_SREPOVARI-REPORTTYPE RW
    D_SREPOVARI-REPORT ( Give your Report Group )
    If you have any doubt pick any report painter tcode and check in SE93
    Follow below steps
    1) Execute report through report painter
    2) From system status get the program name
    3 ) go to se93 and select report transaction and assign
    program name .
    Is it possible to make bigger the text a I have on a text field?, Im using the screen painter and I need to put the title bigger (as a requirment).
    You can define your text as any length.If you are talking about the font,i am afraid you cannot do that.
    No, you can not change the size(font) of the text on the dynpro, you can hightlight it, which changes the color to "blue" to make it stand out. You can change this on the attributes tab when double-clicking on the element in screen painter.
    what is the sentence that open a screen painter file
    Don´t really understand what you mean with "open a screen painter file".
    If you are speaking about showing a form generated with the screen painter,
    Dim oXMLDoc As New MSXML2.DOMDocument
    oXMLDoc.load("Form.xml")
    SBO_Application.LoadBatchActions(oXMLDoc.xml)
    Dim oForm As SAPbouiCOM.Form
    oForm = SBO_Application.Forms.Item("YourFormID")
    oForm.Visible = True
    regards
    vinod

  • In report painter GRR3 1VK  Actual Value picked up from previous year

    Dear Experts,
    In report painter GRR3 > 1VK
    1. Column of Actual Quantity to take in Basic Key Figure from Statistical Quantity
    2. The value is 4 (Actual) and Version is 0
    I found that the Actual value appeared are actually taken from the previous fiscal year. I have checked the line items and their document posting date it shown as last fiscal year.
    In this case, where should I amend to have the report pick up only actual value of this fiscal year? or Is there any value to maintain for GRR3 to pickup the current fiscal year actual posting?
    Thank you very much and Best Regards,
    Anne

    hi..
      Goto GRR3 > click on Lib 1VK it will show you all the report in 1VK library > select your report & double click on it
      It will display the report format. Then go to Edit at the top. you will find General data selection.click on it you will find available characteristics. Then goto GRR2 for making any change/selection for Fiscal year char
      If your report is a standard one you can not change. then copy the report from GRR1 and make the changes.
      You can also see the char in GR23 by selecting 1VK lib.
    kkumar
    Edited by: kkbdsp on Mar 11, 2011 9:21 AM

  • Data of the Report Painter report

    Dear ALL,
    I have the Report Painter report. When I'm executing this report I can save the data into the extract.
    Could you tell me where are these data in the system(table?)? I want use these data for SAP script form.
    Best regards,
    Igor

    Please go through the enclosed document. This will give you step-by-step approach for Report painter:
    http://www.virtuosollc.com/PDF/Get_Reporter.pdf
    Check url
    http://help.sap.com/saphelp_47x200/helpdata/en/da/6ada3889432f48e10000000a114084/frameset.htm
    Check Report Painter Step-by-Step example under Tools->Report Painter / Report Writer->Report Painter->Creating a Report Painter Report.
    Just go through These Links to learn about report Painter.
    http://help.sap.com/saphelp_erp2005/helpdata/en/66/bc7d2543c211d182b30000e829fbfe/frameset.htm
    http://help.sap.com/saphelp_erp2005/helpdata/en/5b/d22cee43c611d182b30000e829fbfe/frameset.htm
    Please go through the enclosed document. This will give you step-by-step approach for Report painter:
    http://www.virtuosollc.com/PDF/Get_Reporter.pdf
    Check url
    http://help.sap.com/saphelp_47x200/helpdata/en/da/6ada3889432f48e10000000a114084/frameset.htm
    Check Report Painter Step-by-Step example under Tools->Report Painter / Report Writer->Report Painter->Creating a Report Painter Report.
    Just go through These Links to learn about report Painter.
    http://help.sap.com/saphelp_erp2005/helpdata/en/66/bc7d2543c211d182b30000e829fbfe/frameset.htm
    http://help.sap.com/saphelp_erp2005/helpdata/en/5b/d22cee43c611d182b30000e829fbfe/frameset.htm
    I think it will give you some hint. I wish I could have authorization to use report painter on my this project so I can help you out practically.
    Please see these steps , it`ll help you ...
    http://www.thespot4sap.com/Articles/Code_CostCentreReport.asp
    regards
    vinod

  • Due Date Analysis in Report Painter

    Hi:
    I have a query regarding Report painter FKI1 to FKI6 for Vendor aging analysis. Aging reports build from report enable user to analyze all vendors invoices which are overdue by N of days you specify for every column e.g all invoices overdue btw 0-30, 30-60 and so on but client is requiring an aging report for AP & AR which shows how old an invoice is, our baseline date is document date for all payment terms. e.g we have four columns in report 0-30,30-60,60-90 and >120. If an invoice was created with a document date 25.12.2014 which though not due should appear in 0-30 days. I need to know if its possible within report painter to have such or i will have to go for ABAP.
    Thanks

    Hello Atif,
      Your requirement can be fulfilled by report painter
    1- build a form with structure one axis with key figure
    2- create required N days columns
    3- use characteristic (Due date analysis with value =1) for analysis of line items due.
    4- use characteristic (Days for net due date ) with value from/ to N days.
    5- define a report with desired characteristics ( vendor, document number ....)
    Regarding to you example
    define column 0-30 as a sum formula of the following 2 columns
    a column "0-30 due" with characteristics
    (Due date analysis with value = 1) and
    (Days for net due date with value from 0 to 30)
    define another one "not due" with characteristics
    (Due date analysis with value = 2) and
    (Days for net due date with value from 0 to 99999)
    for more information you can check the following standard reports delivered by SAP:
    AP/ FKI0 >> report 0SAPDUEAN-01 Due Date Analysis for Open Items
    AR/ FDI0 >> report 0SAPDUEAN-01 Due Date Analysis for Open Items
    Regards,
    Ibrahim

  • Report Painter / Writer Help

    Hello experts,
    Could you please help me with some documentation on report painter and report writer ...
    I didn't found detailed wiki to follow for my first report painter sample.
    As mentioned in some other threads there's documentation on http://help.sap.com/ but I'm searching for beginners docs to follow step by step.
    Thank you in advance for your help.
    Regards,
    Moez.

    Hi Moezz,
    Please check below link.
    [http://www.virtuosollc.com/PDF/Get_Reporter.pdf]
    This document is with Screen shots & step by step one.
    This could be of great help for you.
    Kindly set to resolved if it helps you.
    Regards
    Abhii.....

  • Actual quantity record in Report Painter

    Hello SAP CO experts,
    I have a question regarding actual quantity record which is not showing in internal order report for newly opened cost element (report created in Report Painter with reference to SAP report 6009-001 Actual/Plan Values/Quantity). Actual quantity from SD document flow is not updated with those cost element category 11- revenue. Actual line items report shows actual quantity, but total record is not updated in summary report.
    Is it a problem that cost element at the time it was created did not have indicator for quantity record checked? As this field is time dependent, how can I solve this issue?
    Please give me some advice regarding this question.
    Dusko

    Hello Dusko,
    If you have activated the tick at later date then it is obvious that you would not have the quantity posted between the date the tick wasn't there and the day you put the tick as no new documents are generated. However, if you can see the quantity in the line items then the same should be displayed in the table.
    Kind Regards // Shaubhik

  • Actual Value displayed in GRR3 report painter Library 1VK

    Dear Experts,
    In report painter GRR3 > 1VK
    I have summarized the Consumption according to Cost Centre of each activity types, I have set;
    1. Column of Actual Quantity to take in Basic Key Figure from Statistical Quantity
    2. The value is 4 (Actual) and Version is 0
    Once I run the GRR3 report, there is some figure in that particular column and does not know where to trace the origin of those value. This actual figure appears on current period onwards where actual data does not been distributed on the system yet.
    Kindly advice.
    Best Regards,
    Anne

    Dear Ajay,
    Im so happy right now I found that the Actual value appeared are actually taken from the previous fiscal year. I have checked the line items and their document posting date it shown as last fiscal year.
    In this case, where should I amend to have the report pick up only actual value of this fiscal year?
    Thank you very much Ajay
    Best Regards,
    Anne

  • How to Modify the Selection Screen in Report Painter

    Hi All,
    I am working on Report painter and writer,
    can any body helpme how to change the selection screen i.e i want add some more  select options to the exisiting roport .
    how can i  add more select options to the exisiting one
    please let me know the Procedure and provide some relevent documents .
    Thanks and Best regards.
    uma

    Hello...
    In the program ...we can find the following chunk of code..
    selection-screen:begin of block B1 with frame title text-001.
    Parameters : ....
    select-options:.....
    selection-screen:end of block b1.
    if we need to add any more user inputs we can write the code inside the existing
    selection screen....end of block .
    or create a new block ..just the block name should be different...
    if we are using select options...we need to declare the table name using the key word for the field on which we are giving select options ....
    Tables : BSIK.
    Please see the following code:
    Imagine :- we have the current selection screen..
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    PARAMETERS: P_BUKRS LIKE BSIK-BUKRS DEFAULT SPACE.
    SELECT-OPTIONS: S_LIFNR FOR BSIK-LIFNR.
    SELECTION-SCREEN END OF BLOCK B1.
    we need to add 2 more fields on the selection screen ..this we can do as the following
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    PARAMETERS: P_BUKRS LIKE BSIK-BUKRS DEFAULT SPACE.
    SELECT-OPTIONS: S_LIFNR FOR BSIK-LIFNR,
                    S_HKONT FOR BSIK-HKONT.
    PARAMETER: P_DATE LIKE BSIK-BUDAT OBLIGATORY DEFAULT
               SY-DATUM.
    SELECTION-SCREEN END OF BLOCK B1.
    OR...create a new block...
    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
    SELECT-OPTIONS:   S_HKONT FOR BSIK-HKONT.
    PARAMETER: P_DATE LIKE RFPDO-ALLGSTID OBLIGATORY DEFAULT
               SY-DATUM.
    SELECTION-SCREEN END OF BLOCK B2.
    there are many options available in selection screens..like creating check box,radio button etc..
    for more info press F1 help on the Selection screen in the ABAP editor
    Revert back if not clear and reward if helpful
    Regards
    Byju

  • Display the values in Docment Currency in Report Painter-FDI4

    Hi,
    Am new to report painter. i created report painter in FDI4. this report is to display the due amount.
    when i click on table cell, which is amount field . Am chosen cell type as 'Select with Key figure' option .
    After then i try to select key figure for that cell (Popup:Element definition).
    In F4 selection there is only one Key figure which is Amount in LC.
    I need to display the field value as Amount in Document currency.
    How to bring Amount in Docment curreny in that F4. Is it possible.
    I didnt get any thread related to my requirement in SDN.
    pl help.

    Hi there,
    Could you insert the field FAEDT (Net due date) in customer reports? (reports from transaction FDI3). This field is not in a table, only in a structure. I defined it in TKAF like that:
    USGFL
    D
    ROLNM 
    FAEDT_FPOS
    CHTAB
    RFPOSXEXT
    CHFIE
    FAEDT
    ORTAB
    RFPOSXEXT
    ORFIE 
    FAEDT
    DIMPR
    2
    RSLIN
    1
    And I also added it in the RFRRD20, but did not work. Can you tell me how to do it? I will reward with point. Thanx!!

  • Difference between Form & Report Painter

    Hi Experts,
    What is the difference between  Forms and Report painter reports? (My understanding is that Forms for PCA and Report painter for Cost Center).
    Could also any one provide me the like related to SAP Documents to create Report Painter & Forms reports
    Thanks in Advance
    Gowsi

    <b>Form painter</b> is a term used in SAP Smart form context
    http://help.sap.com/saphelp_nw2004s/helpdata/en/4b/83fb48df8f11d3969700a0c930660b/content.htm
    http://help.sap.com/saphelp_nw2004s/helpdata/en/4b/83fb42df8f11d3969700a0c930660b/content.htm
    http://www.thespot4sap.com/articles/Code_CostCentreReport.asp
    <b>Report painter</b>
    A tool for creating reports that meet specific business and reporting requirements.
    The Report Painter enables you to report on data from various applications. It uses a graphical report structure that forms the basis for the report definition. When defining the report, you work with a structure that corresponds to the final structure of the report when the report data is output.
    The SAP System is delivered with several row and column models that can be used as building blocks to help you create reports quickly and simply.
    http://help.sap.com/saphelp_47x200/helpdata/en/66/bc7dc143c211d182b30000e829fbfe/frameset.htm
    http://help.sap.com/saphelp_47x200/helpdata/en/66/bc7dc143c211d182b30000e829fbfe/frameset.htm
    Regards
    Vivek
    *Assign points for all the useful answers

  • Customer Ageing - Report Painter

    Hi,
       Can any tell whether we can achieve the customized reports for the customer ageing (Txn: S_ALR_870121276) through report painter. If so can i get any help for the steps to be followed /material regarding this.
    Regards,
    Nagendra Prasad.J

    This is one aging report.. have a look at it and see if its useful.
    This displays cusomer and vendor aging report.
    Award points if useful.
    REPORT zgar_ic_custvend_aging NO STANDARD PAGE HEADING
                                  LINE-SIZE 192
                                  MESSAGE-ID zz
                                  LINE-COUNT 65.
                           Data declaration                              *
    TABLES: bsik,                          "Secondary Index for Vendors
            t880,                          "Global Company Data
            t001s,                         "Accounting Clerks
            t001.                          "Company Codes
                   Internal table declaration.                           *
    *Store data from vendor tables (BSIK, BSAK).
    DATA: BEGIN OF g_t_venddata OCCURS 0,
             bukrs LIKE bsak-bukrs,          "Company code
             lifnr LIKE bsak-lifnr,          "Vendor number
             gjahr LIKE bsak-gjahr,          "Fiscal year
             zuonr LIKE bsak-zuonr,          "Assignment number
             shkzg LIKE bsak-shkzg,          "Debit/credit indicator
             dmbtr LIKE bsak-dmbtr,          "Amount in local currency
             dmbe2 LIKE bsak-dmbe2,          "Amount in global currency
             belnr LIKE bsak-belnr,          "Document number
             augdt LIKE bsak-augdt,          "Clearing date
             augbl LIKE bsak-augbl,          "Doc. no. of clearing document
             budat LIKE bsak-budat,          "Posting date
             hkont LIKE bsak-hkont,          "GL account
             waers LIKE bsak-waers,          "Currency key
             xblnr LIKE bsak-xblnr,          "Document number
             acctp TYPE c,                   "Account type. D or K
             name1 LIKE kna1-name1,          "Comp nmae
         END OF g_t_venddata.
    *Store data from customer tables (BSID, BSAD).
    DATA: BEGIN OF g_t_custdata OCCURS 0,
            kunnr LIKE bsad-kunnr,                "Customer Number
            bukrs LIKE bsad-bukrs,                "Company Code
            gjahr LIKE bsad-gjahr,                "Fiscal year
            augdt LIKE bsad-augdt,                "clearing date
            zuonr LIKE bsad-zuonr,                "Assignment number
            belnr LIKE bsad-belnr,                "acct doc no
            name1 LIKE lfa1-name1,                "name from cust master
            budat LIKE bsad-budat,                "posting date
            bldat LIKE bsad-bldat,                "document date
            xblnr LIKE bsad-xblnr,                "document number
            shkzg LIKE bsad-shkzg,                "debit/credit indicator
            dmbtr LIKE bsad-dmbtr,                "local currency
            dmbe2 LIKE bsad-dmbe2,                "Group currency
            waers LIKE bsad-waers,                "Currency key
            hkont LIKE bsad-hkont,                "GL account
            acctp TYPE c,                         "Account type  D/K
          END OF g_t_custdata.
    *Store data according to age category.
    DATA: BEGIN OF g_t_maintab OCCURS 0,
            bukrs LIKE bsad-bukrs,                "Company Code
            tpart(10) TYPE c,                     "Trading partner
            acctp TYPE c,                         "Account type D/K
            gjahr LIKE bsad-gjahr,                "Fiscal year
            augdt LIKE bsad-augdt,                "clearing date
            zuonr LIKE bsad-zuonr,                "Assignment number
            belnr LIKE bsad-belnr,                "acct doc no
            name1 LIKE lfa1-name1,                "name from cust master
            budat LIKE bsad-budat,                "posting date
            bldat LIKE bsad-bldat,                "document date
            xblnr LIKE bsad-xblnr,                "document number
            shkzg LIKE bsad-shkzg,                "debit/credit indicator
            dmbtr LIKE bsad-dmbtr,                "local currency
            hkont   LIKE bsad-hkont,              "GL account
            bktxt   LIKE bkpf-bktxt,              "Document header text
            butxt   LIKE t001-butxt,              "company name
            waers   LIKE bsad-waers,              "Currency key
            balamt  TYPE dmbtr,                   "balance amount
            amount1 TYPE dmbtr,                   "Amount for category 1
            amount2 TYPE dmbtr,                   "Amount for category 2
            amount3 TYPE dmbtr,                   "Amount for category 3
            amount4 TYPE dmbtr,                   "Amount for category 4
          END OF g_t_maintab.
    *Store all the vendor numbers
    DATA: BEGIN OF g_t_vend OCCURS 5000,
            lifnr                LIKE lfa1-lifnr,
            name1                LIKE lfa1-name1,
          END OF g_t_vend.
    *Store all the customer numbers
    DATA: BEGIN OF g_t_cust OCCURS 5000,
            kunnr                LIKE kna1-kunnr,
            name1                LIKE kna1-name1,
          END OF g_t_cust.
    *Range to store trading partner numbers.
    RANGES : r_tpart FOR lfa1-lifnr.
    Variables to maintain open items count
    DATA: g_open_items  TYPE i,
          g_open_items1 TYPE i,
          g_open_items2 TYPE i,
          g_open_items3 TYPE i,
          g_open_items4 TYPE i.
    *Header texts (For report header)
    DATA: g_headertext1(50),
          g_headertext2(16).
                   Selection screen declaration.                         *
    SELECT-OPTIONS p_ccode FOR bsik-bukrs OBLIGATORY.      "Company code
    SELECT-OPTIONS p_tpartv FOR t880-rcomp.                "Trading partner
    SELECT-OPTIONS p_clerk FOR t001s-busab.                "Accounting clerk
    SELECT-OPTIONS p_pdate FOR sy-datum.                   "Posting date
    PARAMETERS p_adate LIKE sy-datum DEFAULT sy-datum.     "Age as of date
    *GL Account codes
    SELECT-OPTIONS p_glacc FOR bsik-hkont DEFAULT '48200000' TO '48299999'
                   OBLIGATORY.
    *Data Column range (Age range)
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN BEGIN OF BLOCK age_range WITH FRAME TITLE text-001.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(20) text-002.
    SELECTION-SCREEN POSITION 33.
    PARAMETERS p_range1(4) TYPE c DEFAULT '30' OBLIGATORY.
    SELECTION-SCREEN POSITION 43.
    PARAMETERS p_range2(4) TYPE c DEFAULT '60' OBLIGATORY.
    SELECTION-SCREEN POSITION 53.
    PARAMETERS p_range3(4) TYPE c DEFAULT '90' OBLIGATORY.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK age_range.
    *Reporting Currency
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN BEGIN OF BLOCK crr_sel WITH FRAME TITLE text-003.
    PARAMETERS: p_local  RADIOBUTTON GROUP cgrp DEFAULT 'X',
                p_grpcrr RADIOBUTTON GROUP cgrp.
    SELECTION-SCREEN END OF BLOCK crr_sel.
    *Type of report
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN BEGIN OF BLOCK rep_sel WITH FRAME TITLE text-004.
    PARAMETERS: p_detrep  RADIOBUTTON GROUP rgrp DEFAULT 'X',
                p_sumrep  RADIOBUTTON GROUP rgrp.
    SELECTION-SCREEN END OF BLOCK rep_sel.
                               Top-Of-Page                               *
    TOP-OF-PAGE.
      IF p_detrep = 'X'.
    Write report header for detailed report.
        PERFORM f8000_write_comp_header
                USING g_t_maintab-bukrs
                      g_t_maintab-waers
                      g_t_maintab-butxt
                      text-t02
                      g_headertext1.
      ELSE.
    Write report header for summary report.
        PERFORM f8000_write_comp_header
                USING '0000'
                      g_t_maintab-waers
                      text-t05
                      g_headertext1
                      g_headertext2.
      ENDIF.
    *Eject
                           Line selection event                          *
    AT LINE-SELECTION.
      IF p_detrep = 'X'.
        SET PARAMETER ID 'BLN' FIELD g_t_maintab-belnr.
        SET PARAMETER ID 'BUK' FIELD g_t_maintab-bukrs.
        SET PARAMETER ID 'GJR' FIELD g_t_maintab-gjahr.
        IF NOT g_t_maintab-belnr IS INITIAL.
    Call transaction FB03 to display line item details.
          CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
        ELSE.
          MESSAGE e999 WITH text-e01.
        ENDIF.
    Clear belnr.
        MOVE space TO g_t_maintab-belnr.
      ENDIF.
    *Eject
                   Main processing of program starts here                *
    START-OF-SELECTION.
    Pad zeroes to the trading partner range to make it 10 chars
      PERFORM f0100_prepare_tradingpartners.
    Fetch data from customer and vendor tables.
      PERFORM f1000_fetch_data.
    Prepare data. Assign sign to amount, separate line items into 4 age
    categories
      PERFORM f2000_prepare_data.
         End of selection.
    END-OF-SELECTION.
    Write reports
      IF NOT g_t_maintab[] IS INITIAL.
        IF p_detrep = 'X'.
          PERFORM f4000_write_detailed_rep.
        ELSE.
          PERFORM f5000_write_summary_rep.
        ENDIF.
      ELSE.
        MESSAGE i999 WITH text-e02 text-e03.
      ENDIF.
    *Eject
    *&      Form  f0100_prepare_tradingpartners
          Subroutine for preparing trading partner numbers. Pad extra
          zeros to make trading partner field size 10.
    FORM f0100_prepare_tradingpartners.
      LOOP AT p_tpartv.
        MOVE-CORRESPONDING p_tpartv TO r_tpart.
        IF NOT r_tpart-low IS INITIAL.
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
               EXPORTING
                    input  = r_tpart-low
               IMPORTING
                    output = r_tpart-low.
        ENDIF.
        IF NOT r_tpart-high IS INITIAL.
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
               EXPORTING
                    input  = r_tpart-high
               IMPORTING
                    output = r_tpart-high.
        ENDIF.
        APPEND r_tpart.
      ENDLOOP.
    ENDFORM.                    " f0100_prepare_tradingpartners
    *Eject
    *&      Form  f1000_fetch_data
          This subroutine is used to fetch data from customer (BSID and
           BSAD) and vendor (BSIK and BSAK) tables.
    FORM f1000_fetch_data.
    *Get vendor data.
      PERFORM f1100_fetch_vend_data.
    *Get customer data.
      PERFORM f1200_fetch_cust_data.
    ENDFORM.                    " f1000_fetch_data
    *Eject
    *&      Form  f1100_fetch_vend_data
          This subroutine is used to get data from BSIK and BSAK
          tables. First all vendors are selected then all line items are
          retrieved from BSIK and BSAK tables.
    FORM f1100_fetch_vend_data.
      PERFORM f9000_progress_indicator USING text-m01.
    *Select all vendors.
      SELECT h~lifnr
             h~name1
      INTO TABLE g_t_vend
      FROM lfa1 AS h
      JOIN lfb1 AS c
        ON h~lifnr = c~lifnr
    WHERE h~lifnr IN r_tpart
       AND c~bukrs IN p_ccode
       AND c~busab IN p_clerk.
      IF NOT g_t_vend[] IS INITIAL.
        PERFORM f9000_progress_indicator USING text-m01.
    Select open line items.
        SELECT bukrs                 "company
               lifnr                 "vendor number
               augdt                 "clearing date
               augbl                 "docno for clearing doc
               zuonr                 "allocation number
               gjahr                 "fiscal year
               belnr                 "acct doc no
               buzei                 "line item within doc
               budat                 "posting date
               waers                 "Currency key
               xblnr                 "document number
               shkzg                 "debit, credit indicator
               dmbtr                 "local currency
               hkont                 "gl acct
               dmbe2                 "group currency
         FROM bsik
         INTO CORRESPONDING FIELDS OF TABLE g_t_venddata
         FOR ALL ENTRIES IN g_t_vend
         WHERE bukrs IN p_ccode           "company code
         AND lifnr = g_t_vend-lifnr       "trading partner
         AND budat IN  p_pdate            "Posting date
         AND budat <= p_adate
         AND hkont IN p_glacc             "gl acct
        PERFORM f9000_progress_indicator USING text-m04.
    Select cleared line items.
        SELECT bukrs                 "company
               lifnr                 "vendor number
               augdt                 "clearing date
               augbl                 "docno for clearing doc
               zuonr                 "allocation number
               gjahr                 "fiscal year
               belnr                 "acct doc no
               buzei                 "line item within doc
               budat                 "posting date
               waers                 "Currency key
               xblnr                 "document number
               shkzg                 "debit, credit indicator
               dmbtr                 "local currency
               hkont                 "gl acct
               dmbe2                 "group currency
         FROM bsak
         APPENDING CORRESPONDING FIELDS OF TABLE g_t_venddata
         FOR ALL ENTRIES IN g_t_vend
         WHERE bukrs IN p_ccode           "Company code
         AND lifnr =   g_t_vend-lifnr     "Selected vendors
         AND augdt >   p_adate
         AND budat IN  p_pdate            "Posting date
         AND budat <=  p_adate
         AND hkont IN  p_glacc            "GL acct
      ENDIF.
      IF NOT g_t_venddata[] IS INITIAL.
    *Set Account type flag for vendors -- 'K'.
        SORT g_t_venddata BY bukrs lifnr.
        SORT g_t_vend     BY lifnr.
        g_t_venddata-acctp = text-k01.
        MODIFY g_t_venddata TRANSPORTING acctp WHERE acctp = ' '.
    Add vendor names.
        LOOP AT g_t_venddata WHERE name1 = ' '.
          READ TABLE g_t_vend
               WITH KEY lifnr = g_t_venddata-lifnr BINARY SEARCH.
          IF sy-subrc = 0.
            g_t_venddata-name1 = g_t_vend-name1.
            MODIFY g_t_venddata TRANSPORTING name1 WHERE lifnr =
                   g_t_venddata-lifnr.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDFORM.                    " f1100_fetch_vend_data
    *Eject
    *&      Form  f1200_fetch_cust_data
          This function module is used to get data from BSID and BSAD
          tables. First all customers are selected then all line items
          are retrieved from BSIK and BSAK tables.
    FORM f1200_fetch_cust_data.
      PERFORM f9000_progress_indicator USING text-m06.
    *Select all customers.
      SELECT h~kunnr
           h~name1
      INTO TABLE g_t_cust
      FROM kna1 AS h
      JOIN knb1 AS c
        ON h~kunnr = c~kunnr
    WHERE h~kunnr IN r_tpart
       AND c~bukrs IN p_ccode
       AND c~busab IN p_clerk.
      IF NOT g_t_cust[] IS INITIAL.
        PERFORM f9000_progress_indicator USING text-m06.
    *Fetch customer open items.
        SELECT bukrs                 "company
               kunnr                 "customer number
               augdt                 "clearing date
               augbl                 "docno for clearing doc
               zuonr                 "allocation number
               gjahr                 "fiscal year
               belnr                 "acct doc no
               buzei                 "line item within doc
               budat                 "posting date
               waers                 "Currency key
               xblnr                 "document number
               shkzg                 "debit, credit indicator
               dmbtr                 "local currency
               hkont                 "gl acct
               dmbe2                 "group currency
         FROM bsid
         INTO CORRESPONDING FIELDS OF TABLE g_t_custdata
         FOR ALL ENTRIES IN g_t_cust
         WHERE bukrs IN p_ccode           "company code
         AND kunnr = g_t_cust-kunnr       "Selected customer
         AND budat IN  p_pdate            "Posting date
         AND budat <= p_adate
         AND hkont IN  p_glacc            "GL acct
        PERFORM f9000_progress_indicator USING text-m07.
    Select Customer cleared line items.
        SELECT bukrs                 "company
               kunnr                 "customer number
               augdt                 "clearing date
               augbl                 "docno for clearing doc
               zuonr                 "allocation number
               gjahr                 "fiscal year
               belnr                 "acct doc no
               buzei                 "line item within doc
               budat                 "posting date
               waers                 "Currency key
               xblnr                 "document number
               shkzg                 "debit, credit indicator
               dmbtr                 "local currency
               hkont                 "gl acct
               dmbe2                 "group currency
         FROM bsad
         APPENDING CORRESPONDING FIELDS OF TABLE g_t_custdata
         FOR ALL ENTRIES IN g_t_cust
         WHERE bukrs IN p_ccode           "company code
         AND kunnr = g_t_cust-kunnr       "Selected customer
         AND augdt > p_adate
         AND budat IN  p_pdate            "Posting date
         AND budat <= p_adate
         AND hkont IN p_glacc             "GL acct
      ENDIF.
      IF NOT g_t_custdata[] IS INITIAL.
    *Set account type for customers -- 'D'.
        SORT g_t_custdata BY bukrs kunnr.
        SORT g_t_cust     BY kunnr.
        g_t_custdata-acctp = text-d01.
        MODIFY g_t_custdata TRANSPORTING acctp WHERE acctp = ' '.
    Add customer names.
        LOOP AT g_t_custdata WHERE name1 = ' '.
          READ TABLE g_t_cust
               WITH KEY kunnr = g_t_custdata-kunnr BINARY SEARCH.
          IF sy-subrc = 0.
            g_t_custdata-name1 = g_t_cust-name1.
            MODIFY g_t_custdata TRANSPORTING name1 WHERE kunnr =
                   g_t_custdata-kunnr.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDFORM.                    " f1200_fetch_cust_data
    *Eject
    *&      Form  f2000_Prepare_data
          This function module is used to format data according to report
          1. Fetch local or global amount value according to user
             parametrs.
          2. Sign is assigned to each amount
          3. Line items are categorized according to the aging category
          4. Populate document header text.
          5. Populate company names.
    FORM f2000_prepare_data.
      DATA : l_amount TYPE dmbtr,
             l_age_of_item TYPE p,
             l_as_of_age TYPE d,
             l_posting_date TYPE d,
             l_time TYPE t,
             l_count TYPE sy-tabix.
      DATA: BEGIN OF l_t_doc_txt OCCURS 0,
            bukrs TYPE bkpf-bukrs,
            belnr TYPE bkpf-belnr,
            bktxt LIKE bkpf-bktxt,
            END OF l_t_doc_txt.
      DATA: BEGIN OF l_t_curr_txt OCCURS 0,
              bukrs LIKE t001-bukrs,
              waers LIKE t001-waers,
              butxt LIKE t001-butxt,
            END OF l_t_curr_txt.
      PERFORM f9000_progress_indicator USING text-m03.
      l_as_of_age = p_adate.
      MOVE text-t01 TO l_time.
    *Prepare G_T_MAINTAB, 1. Populate vendor data.
      LOOP AT g_t_venddata.
        CLEAR: g_t_maintab, l_amount, l_age_of_item, l_posting_date.
        MOVE-CORRESPONDING g_t_venddata TO g_t_maintab.
        g_t_maintab-tpart = g_t_venddata-lifnr.
    Check for currency selected by the user.
        IF p_local = 'X'.
          l_amount = g_t_venddata-dmbtr.
        ELSE.
          l_amount = g_t_venddata-dmbe2.
        ENDIF.
    Check for type of transaction. Debit or Credit.
        IF g_t_venddata-shkzg = 'H'.
          l_amount = l_amount * -1.
        ENDIF.
        MOVE g_t_venddata-budat TO l_posting_date.
    Assign amount value to appropriate aging category.
    Calculate age of line item
        CALL FUNCTION '/SDF/CMO_DATETIME_DIFFERENCE'
             EXPORTING
                  date1            = l_posting_date
                  time1            = l_time
                  date2            = l_as_of_age
                  time2            = l_time
             IMPORTING
                  datediff         = l_age_of_item
             EXCEPTIONS
                  invalid_datetime = 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.
        IF l_age_of_item <= p_range1.                           "Range1
          g_t_maintab-amount1 = l_amount.
        ELSE.
          IF l_age_of_item > p_range1 AND l_age_of_item <= p_range2."Range2
            g_t_maintab-amount2 = l_amount.
          ELSE.
            IF l_age_of_item > p_range2
                AND l_age_of_item <= p_range3.                  "Range3
              g_t_maintab-amount3 = l_amount.
            ELSE.                                               "Range4
              g_t_maintab-amount4 = l_amount.
            ENDIF.
          ENDIF.
        ENDIF.
    Assign balance amounts.
        g_t_maintab-balamt  = l_amount.
    Add record to main internal table
        APPEND g_t_maintab.
      ENDLOOP.
    *Prepare G_T_MAINTAB, 2. Populate customer data.
      LOOP AT g_t_custdata.
        CLEAR: g_t_maintab, l_amount, l_age_of_item, l_posting_date.
        MOVE-CORRESPONDING g_t_custdata TO g_t_maintab.
        g_t_maintab-tpart = g_t_custdata-kunnr.
    Check for currency selected by the user.
        IF p_local = 'X'.
          l_amount = g_t_custdata-dmbtr.
        ELSE.
          l_amount = g_t_custdata-dmbe2.
        ENDIF.
    Check for type of transaction. Debit or Credit.
        IF g_t_custdata-shkzg = 'H'.
          l_amount = l_amount * -1.
        ENDIF.
        MOVE g_t_custdata-budat TO l_posting_date.
    Assign amount value to appropriate aging category.
    Calculate age of line item
        CALL FUNCTION '/SDF/CMO_DATETIME_DIFFERENCE'
             EXPORTING
                  date1            = l_posting_date
                  time1            = l_time
                  date2            = l_as_of_age
                  time2            = l_time
             IMPORTING
                  datediff         = l_age_of_item
             EXCEPTIONS
                  invalid_datetime = 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.
        IF l_age_of_item <= p_range1.                           "Range1
          g_t_maintab-amount1 = l_amount.
        ELSE.
          IF l_age_of_item > p_range1 AND l_age_of_item <= p_range2."Range2
            g_t_maintab-amount2 = l_amount.
          ELSE.
            IF l_age_of_item > p_range2
               AND l_age_of_item <= p_range3.                   "Range3
              g_t_maintab-amount3 = l_amount.
            ELSE.                                               "Range4
              g_t_maintab-amount4 = l_amount.
            ENDIF.
          ENDIF.
        ENDIF.
    Assign balance amounts.
        g_t_maintab-balamt  = l_amount.
        APPEND g_t_maintab.
      ENDLOOP.
      IF NOT g_t_maintab[] IS INITIAL.
        SORT g_t_maintab BY bukrs belnr.
        SELECT bukrs belnr bktxt FROM bkpf
              INTO CORRESPONDING FIELDS OF TABLE l_t_doc_txt
              FOR ALL ENTRIES IN g_t_maintab
              WHERE bukrs = g_t_maintab-bukrs AND
                    belnr = g_t_maintab-belnr AND
                    gjahr = g_t_maintab-gjahr.
        SELECT bukrs butxt waers FROM t001
               INTO CORRESPONDING FIELDS OF TABLE l_t_curr_txt
               WHERE bukrs IN p_ccode.
        SORT l_t_doc_txt BY bukrs belnr.
        SORT l_t_curr_txt BY bukrs.
    Add Document header texts
        LOOP AT g_t_maintab.
          l_count = sy-tabix.
          READ TABLE l_t_doc_txt
               WITH KEY bukrs = g_t_maintab-bukrs belnr = g_t_maintab-belnr
               BINARY SEARCH.
          IF sy-subrc = 0.
            g_t_maintab-bktxt = l_t_doc_txt-bktxt.
            MODIFY g_t_maintab INDEX l_count TRANSPORTING bktxt.
          ENDIF.
          CLEAR l_t_doc_txt-bktxt.
        ENDLOOP.
        PERFORM f9000_progress_indicator USING text-m03.
    Update company name and currency field.
        LOOP AT g_t_maintab WHERE butxt =  ' ' OR waers = ' '.
          READ TABLE l_t_curr_txt
               WITH KEY bukrs = g_t_maintab-bukrs BINARY SEARCH.
          IF sy-subrc = 0.
            g_t_maintab-butxt    = l_t_curr_txt-butxt.
            g_t_maintab-waers    = l_t_curr_txt-waers.
            MODIFY g_t_maintab TRANSPORTING butxt waers
                      WHERE bukrs = g_t_maintab-bukrs.
          ENDIF.
          CLEAR: l_t_curr_txt-butxt, l_t_curr_txt-waers.
        ENDLOOP.
      ENDIF.                    "IF NOT g_t_maintab[] IS INITIAL
    ENDFORM.                    " f2000_Prepare_data
    *Eject
    *&      Form  f4000_write_detailed_rep
          This subroutine is used to write detailed report.
    FORM f4000_write_detailed_rep.
      DATA l_t_maintab LIKE g_t_maintab.
    Variables for summary amount of each account type of a trading pair
      DATA: l_tpart_acc1 TYPE dmbtr,
            l_tpart_acc2 TYPE dmbtr,
            l_tpart_acc3 TYPE dmbtr,
            l_tpart_acc4 TYPE dmbtr,
            l_tpart_acc_bal TYPE dmbtr.
    Variables for summary amount of each trading pair
      DATA: l_tpart1 TYPE dmbtr,
            l_tpart2 TYPE dmbtr,
            l_tpart3 TYPE dmbtr,
            l_tpart4 TYPE dmbtr,
            l_tpart_bal TYPE dmbtr.
      SET TITLEBAR 'DETAILED_REPORT'.
    Prepare header texts for report header.
      CONCATENATE  p_adate4(2)  '/' p_adate6(2) '/' p_adate+0(4) INTO
           g_headertext1.
      CONCATENATE text-h20 g_headertext1
                  INTO g_headertext1 SEPARATED BY space.
      SORT g_t_maintab BY bukrs tpart acctp.
    *Start detailed report.
      FORMAT INTENSIFIED OFF.
      LOOP AT g_t_maintab.
        l_t_maintab = g_t_maintab.
    *At new company code write page header
        AT NEW bukrs.
          g_t_maintab = l_t_maintab.
          NEW-PAGE.
        ENDAT.
    *Write line item records.
        WRITE:/2    l_t_maintab-tpart,      "Trading partner
                14  l_t_maintab-acctp,      "Account type
                17  l_t_maintab-belnr,      "Document number
                35  l_t_maintab-budat,      "posting date
                47  l_t_maintab-xblnr,      "Reference doc. number
                65  l_t_maintab-bktxt,      "Doc header text.
                92  l_t_maintab-balamt,     "balance amount
                114 l_t_maintab-amount1,    "Amount cat 1
                136 l_t_maintab-amount2,    "Amount cat 2
                158 l_t_maintab-amount3,    "Amount cat 3
                180 l_t_maintab-amount4.    "Amount cat 4
        g_t_maintab-bukrs = l_t_maintab-bukrs.
        g_t_maintab-gjahr = l_t_maintab-gjahr.
        g_t_maintab-belnr = l_t_maintab-belnr.
    Hide values so that these can be used on line selection event.
        HIDE: g_t_maintab-bukrs, g_t_maintab-gjahr, g_t_maintab-belnr.
    Calculate amounts for account summary.
        l_tpart_acc1    = l_tpart_acc1 + l_t_maintab-amount1.
        l_tpart_acc2    = l_tpart_acc2 + l_t_maintab-amount2.
        l_tpart_acc3    = l_tpart_acc3 + l_t_maintab-amount3.
        l_tpart_acc4    = l_tpart_acc4 + l_t_maintab-amount4.
        l_tpart_acc_bal = l_tpart_acc_bal + l_t_maintab-balamt.
    Calculate amounts for trading partner summary.
        l_tpart1 = l_tpart1 + l_t_maintab-amount1.
        l_tpart2 = l_tpart2 + l_t_maintab-amount2.
        l_tpart3 = l_tpart3 + l_t_maintab-amount3.
        l_tpart4 = l_tpart4 + l_t_maintab-amount4.
        l_tpart_bal = l_tpart_bal + l_t_maintab-balamt.
    *At end of one account type write summary for account type.
        AT END OF acctp.
          g_t_maintab = l_t_maintab.
          PERFORM f8100_write_acctype_summary
                  USING l_tpart_acc1 l_tpart_acc2 l_tpart_acc3 l_tpart_acc4
                        l_tpart_acc_bal l_t_maintab-acctp l_t_maintab-tpart
                        l_t_maintab-name1.
          CLEAR: l_tpart_acc1, l_tpart_acc2, l_tpart_acc3, l_tpart_acc4,
                 l_tpart_acc_bal.
        ENDAT.
    At end of trading pair, write trading partner summary.
        AT END OF tpart.
          g_t_maintab = l_t_maintab.
          PERFORM f8200_write_tradingpair_summar
                  USING l_tpart1 l_tpart2 l_tpart3 l_tpart4 l_tpart_bal
                        l_t_maintab-tpart l_t_maintab-name1.
          CLEAR: l_tpart1, l_tpart2, l_tpart3, l_tpart4, l_tpart_bal.
        ENDAT.
      ENDLOOP.
    ENDFORM.                    " f4000_write_detailed_rep
    *Eject
    *&      Form  f5000_write_summary_rep
          Subroutine to write summary report.
    FORM f5000_write_summary_rep.
    *Counters for trading partner
      DATA: l_count_tpart  TYPE i,     "Counter for trading pairs.
            l_count_tpart1 TYPE i,     "Trading partner in age cat 1
            l_count_tpart2 TYPE i,     "Trading partner in age cat 2
            l_count_tpart3 TYPE i,     "Trading partner in age cat 3
            l_count_tpart4 TYPE i.     "Trading partner in age cat 4
    Flag for trading partner count.
      DATA: l_flag_tpart1 TYPE c,     "Flag for Trading partner in age cat 1
            l_flag_tpart2 TYPE c,     "Flag for Trading partner in age cat 2
            l_flag_tpart3 TYPE c,     "Flag for Trading partner in age cat 3
            l_flag_tpart4 TYPE c.     "Flag for Trading partner in age cat 4
    Variables to store sum of all line items for a company code.
      DATA: l_comp_amt_bal TYPE dmbtr,
            l_comp_amt1    TYPE dmbtr,
            l_comp_amt2    TYPE dmbtr,
            l_comp_amt3    TYPE dmbtr,
            l_comp_amt4    TYPE dmbtr.
    Internal table to store sum of amounts for all the companies selected.
      DATA: BEGIN OF l_t_compall_amt OCCURS 0,
              waers   LIKE bsad-waers,              "Currency key
              balamt  TYPE dmbtr,                   "Total balance amount
              amount1 TYPE dmbtr,                   "Amount for category 1
              amount2 TYPE dmbtr,                   "Amount for category 2
              amount3 TYPE dmbtr,                   "Amount for category 3
              amount4 TYPE dmbtr,                   "Amount for category 4
            END OF l_t_compall_amt.
      DATA: l_tpart_amt_bal TYPE dmbtr,
            l_tpart_amt1    TYPE dmbtr,
            l_tpart_amt2    TYPE dmbtr,
            l_tpart_amt3    TYPE dmbtr,
            l_tpart_amt4    TYPE dmbtr.
      DATA l_currtxt(11).
      DATA l_t_maintab LIKE g_t_maintab.
    Prepare header texts for report header.
      CONCATENATE  p_adate4(2)  '/' p_adate6(2) '/' p_adate+0(4) INTO
                   g_headertext2.
      CONCATENATE text-t04 p_glacc-low text-h06 p_glacc-high
                  INTO g_headertext1 SEPARATED BY space.
      CONCATENATE text-t03 g_headertext2 INTO g_headertext2 SEPARATED BY
                  space.
      SET TITLEBAR 'SUMMARY_REPORT'.
      SORT g_t_maintab BY bukrs tpart acctp.
    DESCRIBE TABLE g_t_maintab LINES l_count_tpart. "***
      FORMAT INTENSIFIED OFF.
      CLEAR: l_flag_tpart1, l_flag_tpart2, l_flag_tpart3, l_flag_tpart4.
      CLEAR: l_tpart_amt_bal,
             l_tpart_amt1,
             l_tpart_amt2,
             l_tpart_amt3,
             l_tpart_amt4.
      CLEAR: l_comp_amt_bal,
             l_comp_amt1,
             l_comp_amt2,
             l_comp_amt3,
             l_comp_amt4.
    Write summary report.
      LOOP AT g_t_maintab.
        l_t_maintab = g_t_maintab.
    Maintain open items count
        g_open_items = g_open_items + 1.
        IF l_t_maintab-amount1 <> 0.
          g_open_items1 = g_open_items1 + 1.
        ELSEIF l_t_maintab-amount2 <> 0.
          g_open_items2 = g_open_items2 + 1.
        ELSEIF l_t_maintab-amount3 <> 0.
          g_open_items3 = g_open_items3 + 1.
        ELSEIF l_t_maintab-amount4 <> 0.
          g_open_items4 = g_open_items4 + 1.
        ENDIF.
    *Calculate amounts for trading partners and maintain trading partner
    *count.
        l_tpart_amt_bal = l_tpart_amt_bal + l_t_maintab-balamt.
        IF g_t_maintab-amount1 <> 0.
          l_tpart_amt1    = l_tpart_amt1    + l_t_maintab-amount1.
    Increase count according to flag.
          IF l_flag_tpart1 IS INITIAL.
            l_count_tpart1 = l_count_tpart1 + 1.
            l_flag_tpart1 = 'X'.
          ENDIF.
        ELSEIF g_t_maintab-amount2 <> 0.
          l_tpart_amt2    = l_tpart_amt2    + l_t_maintab-amount2.
    Increase count according to flag.
          IF l_flag_tpart2 IS INITIAL.
            l_count_tpart2 = l_count_tpart2 + 1.
            l_flag_tpart2 = 'X'.
          ENDIF.
        ELSEIF g_t_maintab-amount3 <> 0.
          l_tpart_amt3    = l_tpart_amt3    + l_t_maintab-amount3.
    Increase count according to flag.
          IF l_flag_tpart3 IS INITIAL.
            l_count_tpart3 = l_count_tpart3 + 1.
            l_flag_tpart3 = 'X'.
          ENDIF.
        ELSEIF g_t_maintab-amount4 <> 0.
          l_tpart_amt4    = l_tpart_amt4    + l_t_maintab-amount4.
    Increase count according to flag.
          IF l_flag_tpart4 IS INITIAL.
            l_count_tpart4 = l_count_tpart4 + 1.
            l_flag_tpart4 = 'X'.
          ENDIF.
        ENDIF.                                     "g_t_maintab-amount1 <> 0
    Calculate total of amount for all companies
    Separate totals into different rows for different local currency.
        IF p_local = 'X'.
          READ TABLE l_t_compall_amt WITH KEY waers = l_t_maintab-waers.
        ELSE.
          READ TABLE l_t_compall_amt INDEX 1.
        ENDIF.
        IF sy-subrc = 0.
          l_t_compall_amt-balamt  = l_t_compall_amt-balamt  +
                                    l_t_maintab-balamt.
          l_t_compall_amt-amount1 = l_t_compall_amt-amount1  +
                                    l_t_maintab-amount1.
          l_t_compall_amt-amount2 = l_t_compall_amt-amount2  +
                                    l_t_maintab-amount2.
          l_t_compall_amt-amount3 = l_t_compall_amt-amount3  +
                                    l_t_maintab-amount3.
          l_t_compall_amt-amount4 = l_t_compall_amt-amount4  +
                                    l_t_maintab-amount4.
          MODIFY l_t_compall_amt FROM l_t_compall_amt INDEX sy-tabix.
        ELSE.
          MOVE-CORRESPONDING l_t_maintab TO l_t_compall_amt.
          IF NOT p_local = 'X'.
            MOVE 'GRP' TO l_t_maintab-waers.
          ENDIF.
          APPEND l_t_compall_amt.
        ENDIF.
    Calculate total amount for current company.
        l_comp_amt_bal = l_comp_amt_bal + l_t_maintab-balamt.
        l_comp_amt1    = l_comp_amt1    + l_t_maintab-amount1.
        l_comp_amt2    = l_comp_amt2    + l_t_maintab-amount2.
        l_comp_amt3    = l_comp_amt3    + l_t_maintab-amount3.
        l_comp_amt4    = l_comp_amt4    + l_t_maintab-amount4.
        IF p_local = 'X'.
          CONCATENATE text-h04 l_t_maintab-waers
                      INTO l_currtxt SEPARATED BY space.
        ELSE.
          MOVE text-h05 TO l_currtxt.
        ENDIF.
    Write subtotal for each trading partner.
        AT END OF tpart.
          l_count_tpart = l_count_tpart + 1.
    Write the summary lines
          WRITE:/2    l_t_maintab-bukrs,
                 10   l_t_maintab-tpart,
                 42   l_tpart_amt_bal,
                 64   l_currtxt,
                 87   l_tpart_amt1,
                 109  l_tpart_amt2,
                 131  l_tpart_amt3,
                 153  l_tpart_amt4.
          CLEAR: l_tpart_amt_bal,
                 l_tpart_amt1,
                 l_tpart_amt2,
                 l_tpart_amt3,
                 l_tpart_amt4.
          CLEAR: l_flag_tpart1, l_flag_tpart2, l_flag_tpart3, l_flag_tpart4.
        ENDAT.
    Write subtotal for each company code.
        AT END OF bukrs.
          PERFORM f8300_write_comp_summ USING l_comp_amt_bal
                                              l_comp_amt1
                                              l_comp_amt2
                                              l_comp_amt3
                                              l_comp_amt4
                                              l_t_maintab-bukrs
                                              l_t_maintab-butxt
                                              l_t_maintab-waers.
          CLEAR: l_comp_amt_bal,
                 l_comp_amt1,
                 l_comp_amt2,
                 l_comp_amt3,
                 l_comp_amt4.
        ENDAT.
      ENDLOOP.
     

Maybe you are looking for