SAP & Oracle partner and support companies

Loading

Archives April 2025

SAP

Profit and Loss Closing T codes


 
1. Capital Investment Projects – Settle Order to AUC 

Accounting -> Investment management -> Internal orders -> Period-end closing -> Single functions -> Settlement ->…  Various

 2. Capital Investment Projects – Settle AUC to asset in service
Accounting -> Investment management -> Fixed assets -> Postings  -> Cap. asset u. const. -> Settle  AIBU

 3. PP/CO Period-End Closing
Logistics -> Production -> Production Control -> Period-end closing ->…

or

Accounting -> Controlling -> Product Cost Controlling -> Cost Object Controlling -> Product Cost by Order -> Period-End Closing -> Single Functions ->…  Various

 4. Internal Order Period-End Closing
Accounting -> Controlling -> Internal Orders -> Period-end closing -> Single functions ->…  Various

5. Cost Center Accounting Period-End Closing
Accounting -> Controlling -> Cost Center Accounting -> Period-end closing -> Single functions ->…  Various

 6. Profitability Analysis Period-End Closing
Accounting -> Controlling -> Profitability Analysis -> Actual Postings -> Cost Center Costs/Process Costs ->…  KEU5, KEG5, CPAE

 7. Lock Controlling Transactions
Accounting -> Controlling -> Cost Center Accounting -> Environment -> Period lock -> Change  OKP1

 8. Reconciliation Ledger
Accounting -> Controlling -> Cost Element Accounting -> Actual postings -> Reconciliation withFI  KALC

 9. Reconciliation Ledger Follow Up Postings
Accounting -> Controlling -> Cost Element Accounting -> Environment -> Reconciliation ledger -> Follow up posting  KAL1

10. Reconciliation Ledger Configuration
IMG -> Controlling -> Overhead Cost Controlling -> Cost and Revenue Element Accounting -> Reconciliation Ledger  Various

11. Post payroll information to accounting
Human Resources -> Payroll -> (Country-specific)  PC00_ M99_ CIPE

12. Configure Payroll for posting to accounting
IMG -> Payroll -> Payroll: (country-specific)  Various Customizing Technical, Organizational and Documentary  Steps

13. Define fiscal year variants
IMG -> Financial Accounting -> Financial Accounting Global Settings -> Fiscal Year -> Maintain Fiscal Year Variant (Maintain Shortened Fisc. Year)  OB29

14. Allocate fiscal year variant to a company code
IMG -> Financial Accounting -> Financial Accounting Global Settings -> Fiscal Year -> Assign Company Code to a Fiscal Year Variant  OB37

15. Define Variants for Open Posting Periods
IMG -> Financial Accounting -> Financial Accounting Global Settings -> Document -> Posting Periods -> Define Variants for Open Posting Periods  OBBO

You can also read for:-sap pp interview questions: Ultimate Guide + Expert Tips (2024)

16. Allocate Posting Period Variant to Company Code
IMG -> Financial Accounting -> Financial Accounting Global Settings -> Document -> Posting Periods -> Assign Variants to Company Code  OBBP

17. Open and Close Posting Periods
Accounting -> Financial accounting -> General ledger  -> Environment -> Current settings -> Open and Close Posting Periods  OB52

18. Carry Forward Balance to New Fiscal Year
Accounting -> Financial accounting -> General ledger -> Periodic processing -> Closing -> Carry Forward -> Balances  F.16

19. Define Retained Earning account
IMG -> Financial Accounting -> General Ledger Accounting -> Business Transactions -> Closing -> Carrying Forward -> Define Retained Rarnings Account  OB53

20. Schedule Manager
Accounting -> Financial accounting -> General ledger -> Periodic processing -> Schedule Manager  SCMA

21. Subsequent Business Area/Profit Center Adjustment – Calculate
Accounting -> Financial accounting  -> General ledger -> Periodic processing -> Closing -> Regroup -> Balance Sheet Readjustment -> Calculate  F.5D 

22. Subsequent Business Area/Profit Center Adjustment – Post
Accounting -> Financial accounting  -> General ledger -> Periodic processing -> Closing -> Regroup -> Balance Sheet Readjustment -> Post  F.5E

23. Transfer B/S Items to Profit Center Accounting
Accounting -> Enterprise Controlling -> Profit Center Accounting -> Actual Postings -> Period-End Closing -> Transfer Payables/Receivables  1KEK

24. PCA Balance Carried Forward
Accounting -> Enterprise Controlling -> Profit Center Accounting -> Actual Postings -> Period-End Closing -> Carrying Forward of Balances  2KES

25. Profit and Loss Adjustment
Accounting -> Financial accounting -> General ledger -> Periodic processing -> Closing -> Regroup -> Profit and Loss Adjustment  F.50

26. Run Compact Document Journal
Accounting -> Financial accounting -> General ledger -> Information system -> General Ledger Reports -> Document -> General -> Compact Document Journal 

27. Create Balance Audit Work Files
IMG -> Financial Accounting -> General Ledger Accounting -> Business Transactions -> Closing -> Documenting -> Define Accumulated Work Files for Balance Audit Trail  OBBQ

28. Run Monthly Balance Audit Trail for Open Item Accounts
Accounting -> Financial accounting -> General ledger -> Periodic processing -> Closing -> Document -> Balance audit trail -> Open item accounts -> Open Item Account Balance Audit Trail from the Document File 

29. Run Monthly Balance Audit Trail for Other Accounts
Accounting -> Financial accounting -> General ledger -> Periodic processing -> Closing -> Document -> Balance audit trail -> All accounts -> General Ledger from the Document File 

30. Create Extract for Accumulated Open Item Balance Audit Trail
Accounting -> Financial accounting -> General ledger -> Periodic processing -> Closing -> Document -> Balance audit trail -> Open item accounts -> From balance audit trail -> Extract for Accumulated Open Item Audit Trail 

31. Run Accumulated Open Item Balance Audit Trail
Accounting -> Financial accounting -> General ledger -> Periodic processing -> Closing -> Document -> Balance audit trail -> Open item accounts -> From balance audit trail -> Accts Detailed Listing from Open Item Account Accumulated Audit Trail 

32. Create Extract for Accumulated Balance Audit Trail for Other Accounts
Accounting -> Financial accounting -> General ledger -> Periodic processing -> Closing -> Document -> Balance audit trail -> All accounts -> From balance audit trail -> Extract for the Accumulated Historical Balance Audit Trail 33. Run Accumulated Balance Audit Trail for Other Accounts
Accounting -> Financial accounting -> General ledger -> Periodic processing -> Closing -> Document -> Balance audit trail -> All accounts -> From balance audit trail -> Account Details from Historical Accumulated Balance Audit Trail

you may be interested in this blog here:-

Don’t Fear the Update: Navigating the Challenges of how to implement sap note

Five Top Technology Investment Drivers for 2024

How many dollars worth of RSU does Salesforce typically offer an MTS (experienced hire) on joining?

Integration cloud system to HANA Cloud Platform using Cloud Connector

SAP

SAP’s Travel Manager

Describe SAP’s “Travel Manager.”

SAP’s “Travel Manager” gives staff members access to a summary of all things related to travel, including itineraries, reimbursement requests, and travel plans. It will enable him or her to produce:

Based on the workflow design, a “travel request” informing the company of an upcoming business trip is sent to the internal travel office for additional processing and approval.

You can also read for :When Did I First Hear About SAP? A Journey Through Discovery

The object travel plan is used by the employee (or the company’s appointed travel agency) to arrange the specifics of the trip. The system assists in scheduling the mode of transportation by retrieving the travel preferences from the “infotype.”

The system configures the allowable travel expenses, which vary per nation. When an employee submits a trip reimbursement claim to the internal travel office, this arrangement facilitates the processing of the reimbursement. The employee manually enters the travel expenses into the system once a trip is finished, or they can be taken from the travel plans and adjusted at a later time. Again, SAP provides the flexibility so that travel expenses can either be submitted by employees or by the travel office’s representative.

The travel plan, travel details, settlement rules, and reimbursement records (for prior payments) are the factors that the system uses to calculate the total amount that must be paid for the reimbursement settlement of the expenses. After  receives the settlement data, the payment is made via FI-AP’s

Tcode: TRIP

YOU MAY BE INTERESTED IN

10 Real-World SAP ABAP Programming Examples (with Code!)

SAP ALE IDoc Configuration Steps: Streamlining Communication

Top SAP ABAP Interview Questions (2024)

SAP

Just a key and two clicks for ALV consistency check

ALV consistency check. I recollect when one of my leaders surveyed my most memorable deliverable in the ALV report; it was over in 1 moment. He came and clicked something and showed the irregularities in my report. Requested that I fix them and get back to him for the audit. I was so astounded. I gave my earnest exertion for over seven days for the turn of events, and somebody tracked down issues in it in 1 minute or less. Huh!!!

There we had leads like him who showed us how to fish. My lead believed I should discover that stunt forever. He maintained that I should get the issue settled and ask him, how he sorted it out. I did it according to his arrangement. He was glad to share that squeezing Movement + RIGHT Double tap on a region in the ALV Matrix Control in which no table lines are shown (scroll right or base to find the compartment space) would get the job done.

ALV Consistency

Execute your report. Look down or right to discover some unfilled space in the holder. The regions set apart with stars above are your place to keep your cursor. At the same time press SHIFT and Double tap your right mouse button. Check, the irregularities. You wouldn’t believe how canny this basic consistency check is. It would get many issues, which we would miss if we somehow managed to physically check the code.

Commonly, that’s what engineers feel assuming the report is shown effectively, they are great. Assuming your report is simply to show, you may be fine. Be that as it may, assuming you have some activity in your report, for example, drill down or exchange call or some other activity. Your report could dump in some situation at run time. One of our report used to dump underway framework for just a few specific obscure cases and we couldn’t reproduce it. SHIFT + Double tap got the job done. It pin-pointed the issue which we believed was great to overlook.

SAPYard ALV Consistency
www.sapyard.com ALV Consistency Check

The above report yield looks great. Be that as it may, see the irregularity. It looks minor yet it isn’t right. The field name is ‘MATNR’ however designer has wrongly named it in the field list as ‘MATERIAL’. Right the field index and your consistency really take a look at passes.

www.sapyard.com ALV Consistency

See one more illustration of the irregularity report.

www.sapyard.com ALV Consistency

Companions, this is a basic stunt and has been referenced in each other ABAP discussion. Yet, when you come for a survey, you find your young weapons having issues in their reports. We advance by sharing. Pass this straightforward data to your young companions, and I’m certain, they would see the value in it.

Refreshed April seventh, 2016: One more simple choice to check the consistency of an ALV yield. On account of Naimesh for his post.

On the ALV yield report, type “&SOS” at the order region on top.

YOU MAY BE INTERESTED IN

O DATA Complete Overview Blog Series

abap ale idoc rfc step by step

SAP

Why are developers so fond of ‘REUSE_ALV_GRID_DISPLAY’?

Is it that hard to NOT utilize FM ‘REUSE_ALV_GRID_DISPLAY’ to show ALV? Or on the other hand is it human instinct to remain in our usual range of familiarity? ABAPers who are dependent on this FM, have the code scrap prepared in their vault to reuse in each and every other report, so they don’t really focus to look on some other option.

SAP delivered the class ‘CL_SALV_TABLE’ over 10 years prior yet it couldn’t arrive at the personalities of the vast majority of those FM cherishing ABAPers. SAP has different classes to show the ALV however plant strategy is one of the least difficult to execute. Truth be told, I find manufacturing plant strategy takes even less lines of code than the famous ‘REUSE_ALV_GRID_DISPLAY’.

Web is overwhelmed with instructional exercises of how to involve this class ‘CL_SALV_TABLE’ for ALV show. So I would rather not add another instructional exercise. Here, I would just give the functioning code scrap which can be utilized in any task. Trust with this instant arrangement, some old fashioned ABAPers would take a dunk in this class strategy to show the ALV..

Pronounce a technique in your report class with the underneath code passing your last inward table ( for fledgling you can duplicate it into a subroutine and call it in your program).

Save this code scrap and begin reusing it with certainty..

Strategy display_alv_report .

DATA:
lr_alv TYPE REF TO cl_salv_table,
lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column,
lr_functions TYPE REF TO cl_salv_functions_list,
lr_display TYPE REF TO cl_salv_display_settings,
lr_layout TYPE REF TO cl_salv_layout,
lr_sorts TYPE REF TO cl_salv_sorts,
ls_key TYPE salv_s_layout_key.

* Check to make sure the internal table has data.
IF lines( it_final ) > 0.

TRY.
* Create ALV instance
* This is the factory method we were talking about
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = lr_alv
CHANGING
t_table = it_final.

* Get functions object
lr_functions = lr_alv->get_functions( ).

* Set all the functions
lr_functions->set_all( ).

* Get column object
lr_columns = lr_alv->get_columns( ).

* These are optional functions
* If you want to change the description of columns, call and set as shown below
* CALL METHOD lr_columns->get_column
* EXPORTING
* columnname = 'NETWR_PO'
* RECEIVING
* value = lr_column.

* Important to mention. If you want to give custom short text, then make
* Medium text and long text blank (important trick). Similarly applicable for med and long text overriding.
* CALL METHOD lr_column->set_short_text
* EXPORTING
* value = ' '.
* CALL METHOD lr_column->set_medium_text
* EXPORTING
* value = 'PO Srv Net Val'.
* CALL METHOD lr_column->set_long_text
* EXPORTING
* value = ' '.
*
* Optimize the columns
* lr_columns->set_optimize( ).

* Get sort column
* lr_sorts = lr_alv->get_sorts( ).
* lr_sorts->clear( ).

* Sort table
* lr_sorts->add_sort( columnname = 'AUFNR' ).

* Get Layout
lr_layout = lr_alv->get_layout( ).

ls_key-report = sy-repid.
* Set Layout
lr_layout->set_key( ls_key ).
lr_layout->set_default( ' ' ).
lr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).

* Optional, if there is a layout from selection screen use it
* IF NOT p_layout IS INITIAL.
* lr_layout->set_initial_layout( p_layout ).
* ENDIF.

* Get Display setting
lr_display = lr_alv->get_display_settings( ).

lr_display->set_striped_pattern( cl_salv_display_settings=>true ).

* Display the ALV
lr_alv->display( ).

* Catch exceptions
CATCH cx_salv_msg.
WRITE: 'Error displaying grid CX_SALV_MSG!'.

CATCH cx_salv_not_found.
WRITE: 'Error displaying grid CX_SALV_NOT_FOUND!'.

CATCH cx_salv_data_error.
WRITE: 'Error displaying grid CX_SALV_DATA_ERROR!'.

CATCH cx_salv_existing.
WRITE: 'Error displaying grid CX_SALV_EXISTING!'.

ENDTRY.

ELSE.

WRITE: 'There is no data to display!'.

ENDIF.

ENDMETHOD. " DISPLAY_ALV_REPORT

If you do not want to display certain fields of the final table, we can set it to invisible.

Hide some fields or make them Invisible.

lr_column->set_visible( value if_salv_c_bool_sap=>false ).

Or

CALL METHOD lr_column->set_visible
EXPORTING
value = if_salv_c_bool_sap=>false.

Updated 12/26/2018

To put header data on top of the ALV, you can utilize the underneath piece.

Underneath capability would put the header.

lr_alv->set_top_of_list( lr_content ).

Check the reference snippet to build the header content.

*&---------------------------------------------------------------------*
*&      Form  built_header
*&---------------------------------------------------------------------*
FORM built_header CHANGING cr_content TYPE REF TO cl_salv_form_element.

  DATA: lr_grid   TYPE REF TO cl_salv_form_layout_grid,
        lv_row    TYPE i,
        lv_fdate  TYPE char10,
        lv_tdate  TYPE char10,
        lwa_error TYPE ty_error,
        lv_head   TYPE string VALUE 'Report of Dunned Accounts with No POSID',
        lv_text   TYPE string,
        lr_grid_1 TYPE REF TO cl_salv_form_layout_grid,
        lr_text   TYPE REF TO cl_salv_form_text,
        lr_label  TYPE REF TO cl_salv_form_label.

  lv_row = lines( it_error ).

  lv_row = lv_row + 2.

  CREATE OBJECT lr_grid.

  lr_grid->create_header_information(
    row    = 1
    column = 1
    text    = lv_head
    tooltip = lv_head ).

  lr_grid->add_row( ).

  lr_grid_1 = lr_grid->create_grid( row    = lv_row
                                          column = 1 ).

  lr_label =  lr_grid_1->create_label(
                      row     = 1
                      column  = 1
                      text    = 'Dunning Run Date:'(015)
                      tooltip = 'Dunning Run Date:'(015) ).

  IF s_id IS NOT INITIAL.

    lr_label =  lr_grid_1->create_label(
                      row     = 2
                      column  = 1
                      text    = 'Dunning Run ID:'(016)
                      tooltip = 'Dunning Run ID:'(016) ).
  ENDIF.

  CLEAR lv_text.

  IF s_date-high IS NOT INITIAL.
    WRITE s_date-low TO lv_fdate.
    WRITE s_date-high TO lv_tdate.
    CONCATENATE lv_fdate 'to' lv_tdate INTO lv_text SEPARATED BY space.
  ELSE.
    WRITE s_date-low TO lv_fdate.
    lv_text = lv_fdate.
  ENDIF.


  lr_text = lr_grid_1->create_text(
                    row     = 1
                    column  = 2
                    text    = lv_text    " s_date-low
                    tooltip = lv_text ). " s_date ).

  CLEAR lv_text.

  IF s_id IS NOT INITIAL.
    IF s_id-high IS NOT INITIAL.
      CONCATENATE s_id-low 'to' s_id-high INTO lv_text SEPARATED BY space.
    ELSE.
      lv_text = s_id-low.
    ENDIF.

    lr_text = lr_grid_1->create_text(
                      row     = 2
                      column  = 2
                      text    = lv_text      " s_id-low
                      tooltip = lv_text ).   "s_id ).

  ENDIF.

  CLEAR lv_row.
  lv_row = 2.
  LOOP AT it_error INTO lwa_error.
    lv_row = lv_row + 1.

    lr_label =  lr_grid_1->create_label(
                      row     = lv_row
                      column  = 1
                      text    = 'Dunning Lock Error:'(017)
                      tooltip = 'Dunning Lock Error:'(017) ).

    lr_text = lr_grid_1->create_text(
                      row     = lv_row
                      column  = 2
                      text    = lwa_error-message
                      tooltip = lwa_error-message ).
  ENDLOOP.

  lr_label->set_label_for( lr_text ).

  cr_content = lr_grid.

ENDFORM.                    " built_header

Kindly let us know, assuming we want to give further explanation on this subject.

YOU MAY LIKE THIS

Comprehensive Blog Series on ABAP on Cloud

Business Object Processing Framework (BOPF)

SAP Business Workflow

SAP ABAP Interview Questions Real time Expectations

Proxy in SAP Abap: Seamless Communication

SAP

Is data element WDY_BOOLEAN and Flag (Char1) same for Web Dynpro ALV?

Both wdy_boolean and flag are data elements of type char1.  Does it mean both are same?

Straight talk today. Allow me to show both of the results of a similar Web Dynpro ALV which has three fields, to make my point. Three sections in an ALV are: Plant, Plant Name and a one-person banner saying ‘Set’.

a) Let us initially characterize the information component as ‘Banner for the one-person field ‘Set’ in the setting definition. Check out at the result in ALV.

2
3

b) Presently, let us characterize the information component as WDY_BOOLEAN for a similar one-person field ‘Set’. Mark the result ALV once more.

4
52

Do you see the distinction?
The subsequent result shows that the “Set” field is shown as a checkbox.

Did it light something?
Thus, at whatever point you really want a checkbox in an intelligent ALV, just set the field as WDY_BOOLEAN, and you are good to go to get a checkbox as a result. Isn’t it cool?

Kindly leave your message below, and we would be glad to answer.

To get such down-to-earth issues and goals directly to your inbox, kindly buy in. We regard your security and view safeguarding it in a serious way.

On the off chance that you enjoyed this post, if it’s not too much trouble, hit the offer button at the left half of your screen.

Many thanks for your time!!

YOU MAY LIKE THIS

Unsupervised Learning in 2024: Unveiling the Hidden Gems of Your Data

Can I become full stack developer in 3 months?

AI and Machine Learning in SAP: A Practical Guide

Leveraging SAP HANA for Advanced Analytics

SAP

Adobe Interactive Forms. Part 23. How to Hide the Fields and Acquired Space Dynamically using JavaScript in Adobe Form

PREQ: Should be aware of basics of Adobe Form.

Transaction code: SFP

Enter the interface name and click on create.

Enter the description and save it.

Create the custom importing parameters variables by clicking the import button on the left side and click on create button on right side and save and activate it. We have declared three parameters of same type of CHAR20.

Now go back to the main screen of SFP and choose the option Form and create it by adding the interface which we had created previously.

On the left side expand import section of interface and drag and drop all the importing variables IV_NAME1, IV_NAME2 and IV_NAME3 to context.

Let’s create the Layout of form which is available next to Context button.

Switch to design view and click on Hierarchy part. Select the content area of a form and click on object (right side) after that click on Subform and choose content type: Flowed

Now here we will design the form using Subform and wrap every object like text fields, text box, Buttons and tables etc. in it.

Here we will create 4 Subforms in content area.

Now select the Subform and inert the text fields and rename the default name of Text Fields to:

Name1, Name2 and Name3

 

Do the binding of all three text fields from the importing parameter variables (IV_NAME1, IV_NAME2 and IV_NAME3) by clicking on the the binding > Data Binding > choose the field

After the we will hide the field Name2 of subform2 using JavaScript. Select the subform2 and go to Palettes > Script Editor

You will get the below screen

Choose the event Initialize and language JavaScript and write the below code.

if( this.Name2.rawValue == null )

{              this.presence = ‘hidden’

}

We are hiding the field Name2 if its empty.

Always use the same field name (Name2) in script which is defined in the subform and it’s a case sensitive also otherwise it won’t work.

Check save and activate it.

Let’s test our form.

Case 1: Press F8 and pass all the importing values.

Press F8 and press on print preview.

Here script won’t hide Name2 as have passed the value in IV_NAME2. 

Case 2:  IV_NAME2 =   ‘ ‘.

Press F8 and don’t pass the value in IV_NAME2.

This time JavaScript code gets executed to hide the field Name2 and removed the space also.

If you see below fields has shifted to up and adjusted the space automatically. This is only possible if you wrap the fields in Subform. 

Hope you were able to get a fair idea about this interesting topic. If you have any doubts, queries or suggestions for us, please put your comments below. I will be happy to respond you.

YOU MAY LIKE THIS

SAP ABAP Checkpoint Group – Chase the Mysterious SAP Issues with a Smile

Best Practices for SAP ABAP Development: A Comprehensive Guide

4 Useful Tips on ABAP and ABAP on HANA

SAP

SAP Interactive Adobe Forms. Part 22. Handle Different Paper Size templates into single Adobe Form

SAP Adobe is still a niche area. With S/4HANA eventually almost all forms will be converted to Adobe. So, if you have not started learning SAP Adobe, it is high time you did it. Put this in your new year resolutions. 

This article presents an intriguing method for combining different paper sizes into a single format. While most other countries use A4 paper size, we have a legal need for US-based countries to use LETTER paper size in various roll-outs for different countries. In order to meet this need, we typically need to maintain multiple forms and design two distinct  templates, one for the US and one for the other countries.Having a single Global Form Template that works for  both A4 and letter sizes would be very beneficial.

SAP HANA ABAP Programming

Before we move forward with this tutorial, we have a quick announcement to make. A new batch of ABAP Programming on SAP HANA is commencing on 18th Jan 2020. If ABAP on HANA is in your kitty list, do take a look into the course content and enroll for the same.

Steps to create Template:

  • Create Adobe form with 2 master Pages – LetterMaster and A4Master
Hierarchy of Adobe Form with 2 master Pages
  • Set Paper Type of LetterMaster page as ‘LETTER’

Go to Object Palette->Select “Master page” tab->Select ‘paper type” as Letter

  • Set paper Type of A4Master page as ‘A4’.

Go to Object Palette->Select “Master page” tab->Select ‘paper type” as A4

  • Create 2 body pages – LetterDetails and A4Details and create a text field in each body page

If we try to generate output with this template, we would see 2 pages. But our business requirement is to show only one page – either Letter or A4.

How can we achieve it? A conditional flag can come to our rescue.

For that, we have to declare a flag containing identifier for both paper sizes and based on that flag, we have to hide/ display the relevant pages.

  • Declare an import parameter in Form interface as IV_PAPER_TYPE with type BOOLEAN.
  • In Driver program, we have to pass the value of the above flag as :

When LETTER is needed, set IV_PAPER_TYPE = ‘X’

When A4 is needed, set IV_PAPER_TYPE = ‘-‘

  • Drag and drop the import parameter From Interface to Form Context.
  • On LetterDetails Page, add the following Java script in INITIALIZATION event to hide the LetterDetails page based on flag value relevant to A4:
 if( $record.FLAGS_DYNAMIC_CONTENT.IV_PAPERTYPE_FLAG.value == "-" )
 {
 	this.presence = "hidden";
 }
  • On A4Details Page, add the following Java script in INITIALIZATION event to hide the A4Details page based on flag value relevant to LETTER :
  if( $record.FLAGS_DYNAMIC_CONTENT.IV_PAPERTYPE_FLAG.value == "X" )
 {
 	this.presence = "hidden";
 }

Here is the Main Trick

We need to link the Body pages with the respective Master pages so that when Form processing runs, Life Cycle Designer should trigger the correct page.

  • Set the pagination of LetterDetails page with LetterMaster page
Select required page from drop-down list in “Place”
  • Set the pagination of A4Details page with A4Master page
Select required page from drop-down list in “Place”

Testing :

Execute the driver program and set the Paper Size as LETTER

Execute the driver program and set the Paper Size as A4

I hope you’ll be able to apply this tip to your project at some point. This tip is useful if your organization operates globally using a single SAP system. It’s not necessary to make duplicate forms. All of your templates can be used with a single form. We used two templates in this example, but you can use more than two.

YOU MAY LIKE THIS

SAP ABAP Checkpoint Group – Chase the Mysterious SAP Issues with a Smile

Best Practices for SAP ABAP Development: A Comprehensive Guide

4 Useful Tips on ABAP and ABAP on HANA

SAP

Adobe Forms. Part 21. Display Rich Texts from UI App on Adobe Forms

SAP One technology that merits greater recolonization than it currently receives is Adobe Form. You can use Adobe to accomplish any demand you can think of. The use of Adobe Forms’ Rich Texts Integration will be demonstrated in this article. To put it briefly, the Adobe Form should be dynamic in order to carry out one or more of the following tasks using texts:

  1. Can be hard coded in the form, 
  2. Can be maintained in a standard text in SAP and displayed in forms using include texts
  3. Maintain in a UI App with required formatting (Font type-Bold, Italic / different Headings / Bullet points/Numbering) and integrate on Adobe Form.

The first two are easy to understand. According to SAPYard, it is putting something that is not easily found online. Thus, we will focus on point 3.

Prerequisites:

  • Basic familiarity with Java scripts and Adobe forms.
  • fundamental understanding of SAPUI5 and Web Dynpro ABAP (to construct a FormattedText Editor).
  • comprehension of XSLT conversion.
  • strong ABAP knowledge.

Business requirement:

In output forms (AR Correspondences / FSCM Dunning Letters / Billing Invoices etc.), there are lot of text information which is customized based on company code or output types. Business would be interested to maintain these texts outside the Form with desired formatting so that in future, if any related texts need to be changed, business can maintain by themselves and would be updated in forms without doing any form enhancements.

Solution Design:

Implementation Steps:

Make a custom SAPUI5 or Web Dynpro application (you can choose) with the following buttons to  change and save the text in the database, formattedTextEdit UI element, and selection fields:

FormattedText Editor in WD ABAP

FormattedText Editor in SAPUI5

  • Create a Data Base table ZPB_TEXT_HTML which will save Formatted text as HTML as follow
  • Create XSLT transformation ZPB_TEST_FORMATTED_TEXT using  STRANS T-code and type “XSLT program”. Sample used is as follow:

Please note that ADS can’t identify normal HTML tags. ADS can only identify XHTML tags so we would need to transform the HTML tags into XHTML and that’s why XSLT transformation becomes very handy for these string replacement operation. You can also use regular expression and other ways to transform.

Bold tag in HTML from formatted text in UI          :        <strong> </strong>

Bold tag in XHTML identified by ADS : <b></b>

  • In transaction SFP, create the Adobe form interface ZPB_RICH_TEXT_INTERFACE.
  • For HTML documents, create global data:
  • Create an optional input parameter LS_HEADER which will contain input data from calling program.
  • In code initialization, perform following steps:
    1. Select HTML text from DB table.
    2. Get HTML text for header section and transform using XSLT transformation.
    3. Update transformed text into Global data for header text.

In transaction SFP, create Adobe Form ZPB_RICH_TEXT_FORM and pass the interface above. Import parameters and drag Interface Global data into Form Context. In Form layout, create a text field “txtHeader” in detail view and set it’s property as:

  • Since the text field may include many lines (entried from a UI application), we need surround it in a flowing subform and set its height to “Expand to fit” as seen below:
  • Since field format has been set to “Rich Text“, we need to write java script to bind the XHTML text. Select text field, go to script editor and select “initialize” event :
  • Create a test program to call the adobe form and generate PDFs:

Testing:

If you encounter similar requirements in your project, I hope this post will provide you with a basic understanding of how to address them. I wanted to offer the solution we used in our project, although there may be other options as well.

YOU MAY LIKE THIS

SAP ABAP Checkpoint Group – Chase the Mysterious SAP Issues with a Smile

Best Practices for SAP ABAP Development: A Comprehensive Guide

4 Useful Tips on ABAP and ABAP on HANA

SAP

Adobe Forms. Part 20. XML Integration – An Offline Scenario – 1

In real-time business scenarios, Adobe Forms provide immense flexibility and are highly effective for automating complex business processes. Previously, I demonstrated how to use JavaScript for dynamic layout changes and validations in Adobe Forms, as well as the implementation of Interactive Adobe Forms in different scenarios. Recently, I developed Adobe Forms using an XML schema to enhance functionality, allowing seamless data binding from an XML file while supplying driver data via XML. These forms are widely used when data is provided in XML format and needs to be converted into a PDF.

PDF to XML Conversion:

Functions of Adobe Document Services (ADS)

ADS enables the creation of PDFs and other print-ready documents using XML form templates and existing system data. Additionally, it allows extraction of user-entered data from interactive PDF forms for rendering and further processing.

Interaction with ADS

To simplify integration, SAP provides a single programmatic interface known as the PDF Document Object (or PDF Object). This allows developers to interact with ADS efficiently.

PDF Object in SAP

SAP offers both Java and ABAP versions of the PDF Object. In ABAP, SAP provides two key interfaces:

  • IF_FP (Form Interface): Handles form-related functions.
  • IF_FP_PDF_OBJECT (PDF Object Interface): Manages PDF-related operations.

Business Scenario:

This article uses an offline scenario as its business example, where a client can fill out bank information and submit it back to have it changed in the customer master.

  • The form already has the SAP customer number and invoice number entered.
  • The customer receives the form via email. The client fills out the form and returns it.
  • The client master is updated after the data from the PDF form is obtained.
  • Web Dynpro development, which is utilized for online scenarios for interactive Adobe forms, is not necessary for this.

Process Flow Diagram:

YOU MAY LIKE THIS

SAP ABAP Checkpoint Group – Chase the Mysterious SAP Issues with a Smile

Best Practices for SAP ABAP Development: A Comprehensive Guide

4 Useful Tips on ABAP and ABAP on HANA

SAP

Interactive Adobe. Part IXX. How to Merge an Image File with an Adobe PDF?

Adding a picture (jpg, bmp, etc.) in Adobe format is a common business scenario. We may bind the necessary image using Image Field UI. However, today’s subject is distinct.

How can we merge an image to an existing Adobe PDF form??

However, how can we combine an image in Adobe’s preexisting formats? One of the members of our Telegram group recently inquired about the case’s solution and potential solutions. He needed the photographs saved in PO Generic Object Services (GOS) to be attached and shown with 

the PO Output Form. When two picture files (usually in “.jpg” format) are saved at the Purchase Order, they should be 

combined with the PO Output form and returned to the vendor. To put it briefly, the task was to combine the PDF PO Output Form with the image files in the GOS of the PO.

After some head scratching and cool thinking, the below two steps looked a good start:

Let us dig into the actual technicalities now.

1. Create an Adobe form ZPB_TEST_CONVERT_JPG, Interface ZPB_TEST_CONVERT_JPG with an import parameter as GV_CONTENT of type XSTRING.

2. In context of form, create a Graphics Node as follow:

3. Set the graphics node properties as follow:

4. Create an Image field UI in form layout and bind it with GRAPHICS node created in the context.

We are done with creation of 1st Adobe form in which any image from driver program can be uploaded as PDF and then it needs to be merged with any existing Adobe form.

Next, I have created another Adobe form ZPB_HIDE_TABLE_COLUMN with simple table display. Just create one adobe and hard code some table values. This will act like our 2nd PDF file which we want to merge.

5. Create a driver program with the below steps:

i. Call FP_JOB_OPEN

ii. Generate FM for 1st Adobe form:

iii. Upload an image file from local system.

iv. Convert Binary data into Raw data :

v. Call FM for 1st Adobe Form from step 1 and collect it’s Raw data into an internal table GT_PDF:

vi. Call 2nd Adobe form in which we want to merge the image as PDF and collect it’s Raw data in the internal table GT_PDF:

vii. Now, merge both the PDFs (1st Image, 2nd Adobe Form PDF) into one PDF.

viii. Close the form processing as:

ix. Now, you can generate the result merged PDF (GV_MERGE) from above step vii with the following code:

Testing Time:

Run the driver software. Save the combined PDF to your local computer after selecting an image file from your system (I liked the ELEARNING image):

I hope you are able to bring the solution home. As usual, this is the first and most straightforward approach that comes to mind, but there may be other ways to accomplish the same goal. Please feel free to leave a remark below if you have any other ideas. In this development, we did not do anything new. We just implemented what we have learnt and performed independently in other business requirements. knew how to convert the data to RAW. We knew how to create Adobe Forms. Knew how to get RAW data of the Adobe Forms. knew how to merge PDF files. What we did was just bringing together all this answers to one.

YOU MAY LIKE THIS

SAP ABAP Checkpoint Group – Chase the Mysterious SAP Issues with a Smile

Best Practices for SAP ABAP Development: A Comprehensive Guide

4 Useful Tips on ABAP and ABAP on HANA

SAP Adobe Interactive Part XVII

× How can I help you?