Skip to Content
Technical Articles
Author's profile photo Harris Veziris

How to extend transaction FAGLL03H with custom fields

This blog has been written to assist developers asked to extend the standard report of financials line item browser transaction FAGLL03H with additional custom fields.


Usually, a business user may require additional fields in financial line items browser which, as powerful as it may be on its own with dynamic selections, is not enough to display information derived from other functional domains like material master data-related fields. In the real-world example that follows, material fashion grade code and text were required to be added in a SAP client with S/4HANA and retail industry functions activated.


First of all, while searching SAP Knowledge Base there are quite a few articles, most notably in note 2219887 which in turn points to note 2512883 , yet it is not always clear how to populate values to added custom fields. This is a step-by-step implementation of what should be done to achieve this. It is a two-part configuration, one affecting the existing data model with custom fields and a second to program code to populate custom fields.

Part one: Data Model configuration


Step 1: Execute transaction to view columns

A good idea is to execute first financial line items browser (FAGLL03H transaction) in order to have a feel of what is required. Your Financials analyst or consultant may do this for you also. For obvious reasons, description columns have been removed to keep anonymity, although the images are not from a productive environment.


Financials line items browser


Step 2: Identifying metadata of fields to be added

Using display transaction for retail industry material (MM43), we find that fashion grade field is located at material master basic data.


Locate required field


Thus, two columns should be added to the report, namely

Table Field Description Context Include in report
MARA FASHGRD Fashion grade code Foreign key Yes
T6WFG FASHGRD Fashion grade code Unique key in check table No
T6WFGT SPRAS Language Key Part of unique key in text table No
T6WFGT VTEXT Fashion grade description Part of unique key in text table Yes

Step 3: Identifying structures to extend

By following instructions in note 2512883, we should add our custom fields in append structures, as depicted below:


Add fields to data model

Step 4: Add custom fields

Using SE11/Data Type/Display, create your fields in append structures of both above structures, as instructed by note.


Append structure to standard one

Step 5: Adding custom fields to append structure

Create required fields as identified in step 2 to append structure.


Append structure fields

Bear in mind that, according to note, custom fields in append structures should be created for both standard structures since an append structure may not be shared.


Note warning

Step 6: Generate all views

As a final step in configuration, generation of all views should be done using transaction HDBVIEWS


Generation of views

This should be executed manually in each system after deployment, so in the context of project management, it should be added as a separate step in the technical cutover plan following transport of relevant requests.

Part two: ABAP code

Now that fields have been added and views generated, they are visible in financial line items browser and if selected columns will be added to the layout, although with blank values. The only thing that remains is to program code accordingly in order to populate the fields. For this, standard enhancement spot FAGL_LIB is provided and may be accessed via transaction SE18.

Step 7: Create a custom business add-in (BAdI) implementation

There are already two implementations by SAP. Create your own by right-clicking on left-hand pane at Implementations node.


Create custom implementation

Assign appropriate names for enhancement and BAdI implementations and implementing class. Implementing class inherits all methods from standard enhancement. You may accept proposal to model your implementation after an already existing one or create a new from scratch.

Step 8: Select method to populate data

Your aim should be to populate data in method SELECT_DATA


Available methods

Step 9: Analyze method signature

By double-clicking on the standard class interface IF_FAGL_LIB, we navigate to all methods provided and their respective parameters. More specifically, regarding the method SELECT_DATA most parameters are imported into the method with the exception of tables CT_DATA and CT_MESSAGE.  CT_DATA contains data as populated by standard transaction FAGLL03H and its content may be impacted by our code. This table has a changing type meaning it is imported, may be changed and exported back to the calling program.


SELECT_DATA parameters

Step 10: Program code in method

The only differentiation with other SAP-provided extensions is that table content is dynamic and not static, for example any column may contain any type of field, as defined by user options. Therefore special statements will be used in ABAP to retrieve the metadata and the sequence of each column in the layout depending on user preferences. Using code in method SELECT_DATA of already existing implementation FAGL_LIB_ARCHIVE_VIA_INDEX as model, our method should look like this:

  METHOD if_fagl_lib~select_data.

    FIELD-SYMBOLS: <fs> TYPE any.
    FIELD-SYMBOLS <ls_data>                 TYPE any.
    FIELD-SYMBOLS <ld_data>                 TYPE any.

    DATA: ls_component LIKE LINE OF it_component.
    DATA lr_data                  TYPE REF TO data.
    DATA lo_descr                 TYPE REF TO cl_abap_typedescr.
    DATA lo_str_descr_in          TYPE REF TO cl_abap_structdescr.
    DATA ls_abap_comp_descr       TYPE abap_compdescr.

    DATA: lv_matnr               TYPE mara-matnr,
          lv_fashgrd             TYPE mara-fashgrd,
          lv_text                TYPE t6wfgt-vtext.

    CREATE DATA lr_data LIKE LINE OF ct_data.
    ASSIGN lr_data->* TO <ls_data>.

* Get structure description of data table
    CALL METHOD cl_abap_structdescr=>describe_by_data
        p_data      = <ls_data>
        p_descr_ref = lo_descr.

    lo_str_descr_in ?= lo_descr.

This set of statements is used to retrieve user-defined layout metadata using standard ABAP classes CL_ABAP_TYPEDESCR and CL_ABAP_STRUCTDESCR. Next, a table iteration in content is required to update relevant columns as follows:

    LOOP AT ct_data ASSIGNING <ls_data>.

* Go over the components of the structure
      LOOP AT lo_str_descr_in->components
        INTO ls_abap_comp_descr.

        " take into account only for material
        IF ls_abap_comp_descr-name = 'MATNR'.


For each row in the report, we should examine each component that corresponds to a column in the layout. In this case, both fashion grade and text fields depend on whether material is selected by the user as a column to be depicted, so we ignore all other fields in the metadata table. After assuring that the material column is encountered, we assign its content value to a field and we derive required fields for fashion grade and text, as found in step 2

* Get a field symbol with the same type as the component
          " populate fashion grade
          ASSIGN COMPONENT ls_abap_comp_descr-name
            OF STRUCTURE <ls_data>
            TO <ld_data>.
          IF sy-subrc NE 0.

          lv_matnr = <ld_data>.

          CLEAR lv_fashgrd.
          SELECT SINGLE fashgrd FROM mara INTO lv_fashgrd
              WHERE matnr = lv_matnr.
          IF sy-subrc IS INITIAL.

            ls_abap_comp_descr-name = 'ZZFASHGRD'.
            ASSIGN COMPONENT ls_abap_comp_descr-name
             OF STRUCTURE <ls_data>
                      TO <ld_data>.
            IF sy-subrc NE 0.

            <ld_data> = lv_fashgrd.

            CLEAR lv_text.
            SELECT SINGLE vtext INTO lv_text
               FROM t6wfgt
              WHERE fashgrd = lv_fashgrd
                AND spras  = sy-langu.
            IF sy-subrc IS INITIAL.
              ls_abap_comp_descr-name = 'ZZFASHGRD_VTEXT'.
              ASSIGN COMPONENT ls_abap_comp_descr-name
                       OF STRUCTURE <ls_data>
                   TO <ld_data>.

              <ld_data> = lv_text.





Notice that a DO loop is used as a block to include statements with data retrieval for the required fields. This is done because we may have additional custom fields to populate that may depend semantically on other columns in the layout.

Step 11: Execute line items browser to confirm results

Now, when our custom fields are selected by the user, the layout should include the additional columns populated by our code as shown below:


Financials line items browser with populated columns


Congratulations! You should by now have been able to extend SAP standard layout of financial line items browser with custom fields populated by your own code in SAP-provided enhancements

Assigned Tags

      You must be Logged on to comment or reply to a post.
      Author's profile photo Bruno Pidde
      Bruno Pidde

      Thank you so much Harris. It helped me a lot! I had to extend transaction FBL1H, it worked!

      Author's profile photo Genevieve NOWACZOWSKI
      Genevieve NOWACZOWSKI

      Thanks for your article.

      I have a question, is it working in the same way if the adding column is a figure like Debit (based on Debit/credit indicator and amount) ?


      Author's profile photo facundo nonis
      facundo nonis

      Hello, thanks for you article. I have a litle problem:
      I add 3 custom field.

      When i extend the layout and show the three filds, it´s  ok, but if I only show two field, dosen´t  work and values ​​give 0.
      Any idea why?


      Author's profile photo Daniel de Carvalho
      Daniel de Carvalho

      Hello Harris Veziris

      Thanks a lot for your blog and sharing this helpful content!

      I just noticed this is a little bit outdated (or not compliant with the S/4 HANA Core 2020 version)

      When creating an implementation based on the FAGL_LIB enhancement spot, I realized we have to implement a lot of OSS SAP Notes, as we are using the FAGL_LIB_ARCHIVE_VIA_INDEX class as a reference and if we search in the Launchpad SAP Support, there is a list of notes to implement. As of now, I could implement the following:


      Would you confirm on your side the same?



      Author's profile photo Silvana Paredes
      Silvana Paredes

      Thank you, Harris.

      I applied succesfully according with your explanation.