Pl say me how to convertg a classical report into a smart form in abap..??

Overview

 

This blog post is the third part of the SDN series about the Side Panel for Business Suite. For a first overview about the topic please refer to the blog post Side panel for SAP Business Suite - Overview. For a detailed description how to adapt SAP's Side Panel content and create new content please refer to the blog post Side panel for SAP Business Suite (2).

 

This post describes the procedure how to build a master data and a chart-based CHIP. To understand the procedure how to achieve this, it is important to know the typical components of a Web Dynpro CHIP:

1.png

Please note: only for the feeder class a few lines of ABAP coding must be written, while all other parts are pure configuration.

More examples for other CHIPs can be found in the Business Suite Side Panel Documentation.

 

How to create a master data CHIP

 

Example

2.png

1.)   Search for an existing business object (BOR object)

 

A BOR object for our master data CHIP is needed on the one hand to define the business object the CHIP deals with and (more importantly) to ensure that the correct information is transported from the transaction to the CHIP via tagging. For a detailed description about tagging please refer to the blog post Side panel for SAP Business Suite (2).

 

The CHIP framework later automatically uses the BOR object to determine the key fields and to create so-called dynamical inbound ports to read these (tagged) fields.

 

Within the transaction SWO1 search for an already existing BOR object type for your master data object or create a new BOR object. If the CHIP should display detailed company data the corresponding BOR object could be BUS0014 (Company). Check if the key fields (in this example the CompanyID) are defined correctly and if a display method exists.

3.png

 

2.)   Create the feeder class for your master data CHIP

 

Before you actually create the feeder class for your CHIP, search for a BAPI or a RFC-enabled function module that returns detailed master data for your object. Analyze the defined structures of the BAPI result structures.

 

Within the ABAP workbench create a feeder class that inherits from super class CL_BSSP_DETAIL_FORM. This super class handles for example the creation of dynamical inbound ports based on the key fields of the BOR object, the import of GUI data and the automatic link to the master data maintenance transaction.

 

If relevant DDIC structures are not available in the development system, you have to create class types that correspond to the structures of the BAPI/RFC module result in the feeder class.

 

Redefine the following methods in the feeder class:

·     

  •    <IF_FPM_GUIBB>~INITIALIZE (BOR object + structure or class type for the field catalog)

4.png

  • <IF_FPM_GUIBB_FORM>~GET_DATA (call of BAPI/RFC function module(s) for selecting the master data)

5.png

  • <IF_FPM_GUIBB_FORM>~GET_DEFINITION (only if necessary, e.g. for adjustment of texts)

6.png

 

3.)   Create a Web Dynpro Component Configuration

 

Create a new Web Dynpro component configuration. Make sure the component name is set to FPM_FORM_UIBB_GL2.

 

7.png

 

Within the component configuration, set the Layout type to 8/1, the feeder class to the one you created in step 2.), the main key-field as a “Navigation Link” and assign the FPM-event LINK_SELECTED to the main key-field.

 

8.png

 

4.)   Create a Web Dynpro FPM Wrapper Component Configuration

 

Create a new Web Dynpro component configuration for the wrapper component FPM_UCW_COMPONENT. Make sure that the component configuration uses the UIBB configuration of the previous step.

 

9.png

 

5.)   Create a Web Dynpro CHIP

 

Create the actual Web Dynpro CHIP and provide both name and description for the CHIP. At “Component” fill FPM_UCW_COMPONENT and at “Component Name” use the previously created component configuration.

 

10.png

 

6.)   (Optional) Create Customer-specific CHIP Provider Pages for the CHIP catalog

 

If you want add your CHIP to the CHIP catalog BSSP_CHIP_CATALOG, you must create your own CHIP provider pages for the CHIP catalog.

 

Similar to step 3.), create a new Web Dynpro component configuration. Make sure the component name is set to WDR_CHIP_PAGE. The component configuration must follow the naming convention ZZSP_PROVIDER*. Enter the component configuration and select the CHIP Provider checkbox in the context attributes.

 

11.png

 

Add your CHIPs under the context node “chipUsages Variant (1) under New -> chipUsages.  

 

12.png

 

For each CHIP, add the CHIP URL X-SAP-WDY-CHIP:CHIP_NAME (for instance X-SAP-WDY-CHIP:BSSP_COMPANY for the CHIP BSSP_COMPANY).

 

7.)   Further steps

 

Remark: All following steps are already described in the SDN blog post “Side panel for SAP Business Suite (2) – Adapting SAP’s Side Panel content and creating new content”.

 

  • Add the CHIP to an already existing side panel page or create a new one. 
  • Assign the side panel page to a side panel folder in a PFCG role.
  • Maintain the tagging within the table view NWBC_VC_GUI_TAG using the SAP GUI Property Collector and the transaction SM30 in the backend system.

 

How to create a chart CHIP

 

Example

 

14.png

 

Superclasses for different data sources

 

There are various superclasses available for creating chart CHIPs which offer possibilities to access data from different data sources.

 

  • POWL (Personal Object Work List) used for data access: CL_BSSP_GRAPHICS_POWL
  • ODPs (Operational Data Providers) or BI Queries used for data access: CL_BSSP_GRAPHICS_ODP
  • oData (Open Data Protocol) used for data access: CL_BSSP_GRAPHICS_ODATA
  • ABAP remote function modules used for data access: CL_BSSP_GRAPHICS_FUNC

This article focuses on charts which read their data from an underlying POWL.

 

1.)   Search for an existing business object (BOR object)

 

Follow the steps which are described in the Section “How to create a master data CHIP” – 1.) Search for an existing business object (BOR object)”.

 

2.)   Create the feeder class for your chart CHIP

 

Before you actually create the feeder class for your CHIP, analyze whether it is possible to reuse an already existing POWL to show its data (for certain categories) in the chart CHIP.

 

Within the ABAP workbench create a feeder class that inherits from one of the super classes (CL_BSSP_GRAPHICS_*) above. This super class handles for example the creation of dynamical inbound ports based on the key fields of the BOR object, the import of GUI data and the data selection. We use here CL_BSSP_GRAPHICS_POWL in this article.

 

Redefine the following methods in the feeder class.

 

  • <IF_FPM_GUIBB>~INITIALIZE     (BOR Object Type and some different settings depending on which super class is used)
  • <CL_BSSP_GRAPHICS_* >~GET_CATEGORY_FIELDS               (categories for display)                      
  • <CL_BSSP_GRAPHICS_*>~CHANGE_SEL_CRITERIA (criteria for data selection)
  • <CL_BSSP_GRAPHICS_*>~CHANGE_DATA                 (standard data display)

 

15.png

 

Please note that you need to redefine other methods for other super classes:

 

1. For CL_BSSP_GRAPHICS_FUNC you have to redefine the following methods

  • <IF_FPM_GUIBB>~INITIALIZE    
  • <IF_BS_ANLY_GUIBB_CHART>~GET_DEFINITION
  • <IF_BS_ANLY_GUIBB_CHART>~GET_DATA

2. For CL_BSSP_GRAPHICS_ODATA you have to redefine the following methods

  • <IF_FPM_GUIBB>~INITIALIZE    
  • <IF_BS_ANLY_GUIBB_CHART>~GET_DEFINITION
  • <IF_BS_ANLY_GUIBB_CHART>~GET_DATA
  • <CL_BSSP_GRAPHICS_ODATA>~GET_FIELDMAPPING

 

3. For CL_BSSP_GRAPHICS_ODP you have to redefine the same methods as for CL_BSSP_GRAPHICS_POWL (except for the method <CL_BSSP_GRAPHICS_*>~CHANGE_DATA).

 

3.)   Create a Web Dynpro Component Configuration

 

Create a new Web Dynpro component configuration. Make sure the component name is set to BS_ANLY_CHART_UIBB.

Within the component configuration, fill the feeder class with the one you just create during step 2.). 

 

16.png

 

Please note that for charts which read their data from an ODP or a function module you need to define as a next step a Web Dynpro FPM wrapper component configuration (as mentioned above for master data CHIPs).

 

4.)   Create a Web Dynpro CHIP

 

Create the actual Web Dynpro CHIP and provide both name and description for the CHIP. At “Component” fill BS_ANLY_CHART_UIBB and at “Component Name” use the previously created component configuration.

 

17.png

 

5.)   (Optional) Create Customer-specific CHIP Provider Pages for the CHIP catalog

 

Follow the steps which are described in the Section “How to create a master data CHIP” – 6.) (optional) Create Customer-specific CHIP Provider Pages for the CHIP catalog”.

 

Resources

Business Suite Documentation:

http://help.sap.com/erp2005_ehp_06/helpdata/en/58/327666e82b47fd83db69eddce954bd/frameset.htm

 

SDN Article “Side panel for SAP Business Suite – Overview”:
http://scn.sap.com/community/erp/blog/2013/02/25/side-panel-for-sap-business-suite

 

SDN Article “Side panel for SAP Business Suite (2) – Adapting SAP’s Side Panel content and creating new content”:
http://scn.sap.com/community/erp/blog/2013/03/18/side-panel-for-sap-business-suite-2--adapting-sap-s-side-panel-content-and-creating-new-content

 

More examples for other CHIPs can be found in the Business Suite Side Panel Documentation.

Dear Sir,

 

I want Missing part report for Production orders with PR/PO for sales order specific items

The idea

Now while there's a version 1.0 HTML5 All in One SAP Inbox due any day now (or so I'm told), some of us need to do something now about having a single place for a user to go to see there various workflows from multiple back-end systems. In the Portal, this was the UWL. In my mind, the Portal UWL was a good idea, but plagued with the fact that there was a chasm between the workflow people and the Portal people, and lots of strange configuration where it was hard to connect all the dots.

 

Now as of EHP5+, there was a semi-replacement available within ERP. You can find more about this in a great informative blog from Sagar Gadre  that can be found here.


While it looks like all the pieces are here, I wanted to extend this design somewhat, and make the solution in some ways, more generic, but not so in other ways.


The Warning

I put together this blog as I needed to demonstrate a solution for my customer's SI partner to help them see how the solution can hang together from a pure prototype perspective, and because I have a forward thinking manager at my current customer who understands the power of community, they agreed that it would be a good idea to take my workings and put it on SCN to make sure people don't scream at us saying "You're butchering the intent of our solution" (which the combination of POWL_TYPE's we use could be doing exactly that), or preferably offering the following advice: "Here's a better idea rather than doing X". e.g. My testing of this solution is very superficial.


Hence, below is a solution so far that does not contain custom development and can be configured (to a degree) completely out of the box. I've looked a little below the covers to see how caching of work items occurs for each query, but I realise that if a connected system is down, then I'm not sure how well that is handled if the user presses refresh right now (guessing it's not). In my mind, considering the importance of the UWL, you could either train the users about this with outage notifications (if you happen to need one), or you could build a process to remove the system temporarily from refreshes during an outage.

 

You'll also need to run this in a Portal or NWBC (I'm using NWBC), and understand how to use the API calls that the underlying framework uses (we're using OBN for all navigation as I think it's better as it potentially places the user in the right area of the solution when they process a task).

 

Substitution is limited to HR workflows built for substitution (as there's security code involved), though could likely be extended for other workflows if you look into it further.

 

In other words, this is a start point for discussion, not a final design (though appears to be mostly working). So please provide direction so others reading can benefit!

 

The Requirements

So what do we want - well a picture is worth a thousand words so here you go:

FInal.jpg

In short, there are 3 categories - All tasks (with a filter for high priority tasks), People Related Tasks (e.g. Timesheets, Leave Requests, probably others should be listed too, but wasn't in my scenario just yet - separated out because it's usually something that needs focus), Incident Related Tasks (High Priority Tasks and Normal Priority Tasks since safety incidents should be focused on!).

The point of using this view is to see within a small area, what work do I have to help the users manage their tasks. Obviously this layout suits where I am, but the steps should be similar if you go the same way.

FYI - I also see this being the same source of data that could be used for the lanes page introduced by Renewal where you see dashboards of Workflow information, hence thinking also about the future and limiting the background tasks to support Worklists.

Other requirements include:

  • Multiple back-end systems (refer to Sagar's blog about setting this up) - though at some point, need to consider what to do if planned down time of a connected system occurs.
  • Refresh of the UWL so the user doesn't get a time-out if they leave the tab open in NWBC
  • Substitution (though haven't explored this yet and would refer you again to Sagar's various contributions)
  • Fast

 

How to configure the initial guts of it all

The high level steps are:

  1. Create application
  2. Create categories
  3. Link relevant POWL types (feeder classes) to our application
  4. Create our POWL queries
  5. Link the queries to our application
  6. Create PFCG Role
  7. Configure new Application Configuration
  8. Set up batch job to refresh worklists
  9. Set up refresh rate of POWL when running
  10. Next steps not documented include defining all tasks, OBN's, parameters, etc.

 

So let's start with Step 1...

 

Note - I'm expecting you can figure out the steps involved between the statements/screenshots...Happy to field questions if required though.

 

Create Application

Start Transaction FPB_MAINTAIN_HIER and create your own application:

1a.png

As you can see, I don't think the UWL name or Inbox naming is very nice, and coming from a process navigation user experience here, I've gone with Centralised Task Processing. Still a bit crappy, so if you have come up with a great name for end users; would love to hear your application name.


Create Categories

Start transaction POWL_CAT and create your categories.


New Entries as follows:

1b.png

 

Link relevant POWL types (feeder classes) to our application

Run transaction POWL_TYPER and assign POWL types being used to our application.

2a.png

2b.png

For reference, we're using IBO_INBOX_WI as the main feeder for most of the scenarios, except for timesheets where we use the dedicated feeder (MSS_POWL_CATS_APPROVAL_1) from the latest MSS inbox example, since timesheets are a single workflow item now days, but it's nice to see the number of timesheets entered for the week so you easily know when everyone has submitted. Note - I'm assuming by using mainly IBO_INBOX_WI, that the singleton usage within this application will protect us from unnecessarily retrieving worklists from all systems multiple times, but that's purely hypothetical as I've only scratched the surface of looking into these feeders.


Create Queries

We need to create:

  • All Tasks based on IBO_INBOX_WI (no filter)
  • High Priority Tasks based on IBO_INBOX_WI (Filter high priority)
  • People Related Tasks
    • Timesheet Tasks based on MSS_POWL_CATS_APPROVAL_1
    • Leave Requests based on IBO_INBOX_WI (filter by task id)
  • Incident Related Tasks
    • High Priority Tasks based on IBO_INBOX_WI (but needs enhancement) (Filter by task ids!)
    • Normal Priority Tasks based on IBO_INBOX_WI (but needs enhancement) (Filter by task ids!)

 

To do this, start transaction powl_query then create relevant queries, grouped by Categories using underlying POWL Type (Feeder). Set parameters to differentiate each Query.

1c.png

No parameters required for All tasks

1d.png

After selecting the query id (and I recommend saving before doing the next step due to an SAP bug I experience every now and then) - Press Query Parameters to only select High Priority items.

1e.png

etc.; except for Timesheets which looks like as follows:

1f.png

Notes:

  • Leave sync off as it’s a nicer experience IMO.
  • The query parameters support filtering on a single task, but really I need an option to select multiple tasks in the future. Guessing I'll need to use the existing feeder class as a super class to add this option...


Link the queries to our application

Start Transaction POWL_QUERYR and assign your queries.

1g.png

 

Create PFCG Role

Now if security gives you access, we create a test role to try this out (you would also use this role to test out the OBN connectivity potentially).

Run transaction PFCG.  Create new Single Role, add Folder, then add Web Dynpro Application:


2c.png

Use IBO_WDA_INBOX Web Dynpro Application as your application (though note - This locks the name of the application to Lean Workflow Inbox which sucks, so for the real version, you probably need to create your own Web Dynpro application to configure against. Not sure why SAP haven't addressed this as config yet.)

 

Configure new Application Configuration

Name the new Application Configuration and press Application Configuration to launch the browser.

2d.png

 

Copy HRMSS_AC_POWL_INBOX_2 application configuration to your new Application Configuration name (since it looks a little more appropriate than the default IBO application configuration)

2e.png

2f.png

Once created, you need to copy the both design configuration items to your own configuration. Do this by clicking on the links, cancelling going into change mode, then copying the HRMSS config to your own config. For each config, you need to change the POWL Application id over to your own Application Id.

2g.png

2h.png

3a.png

3b.png

Once created, the Assign configuration button hidden away in the table area of the application configuration can be used to change it to your configuration.

3c.png

3d.png

Back in pfcg land, save your PFCG role, and test within NWBC using the URL: sap-nwbc://http://<ERP FQDN>:8000/nwbc/~roletest/YDEMO_UWL

 

Hey presto:

3e.png

 

Set up batch job to refresh queries

Now this needs a lot more thinking through and knowing how the feeders actually work, but schedule carefully how the POWL_WLOAD batch program should run to populate users' inboxes. I'd go with 30 minutes, and just use my whole Application as the batch job in this case. Also, small test system, so 1 query per job, and max 1 parallel jobs. Default values in this batch job can bring down your dev system! (FYI - This is obvious, not learnt from my own mistake)

3f.png


Set up refresh rate of POWL when running

A useful feature (if I understand it correctly), is to set the timer on the Inbox to refresh regularly, which theoretically, should mean the Web Dynpro application doesn't time-out. I've tested this and noted it does refresh, but not sure if it completely stops time-outs.

3g.png


Will this work? Is there a better way?

Now time to hand it over to anyone out there involved in something similar, or experienced with why it's the "Lean" inbox rather than the new UWL...My job to set direction for the project I'm on is done (not really, but technically I shouldn't have done this either), but I know this is all new to everyone on implementations, and it does suck when you get a direction from an architect (or SAP) which is impossible to make work.

 

As stated, I still have not addressed:

  • Connected system failures that may arise;
  • Optimising performance for larger user bases;
  • Different queries for different user groups (e.g. Non-Managers typically don't approve timesheets)
  • Running real workflows through this beyond minimal unit testing.
  • Substitution functionality (since substituting all workflows is unlikely to work without changing non-HR workflows from a security perspective).

 

Thanks for reading and hope we can make this better and usable until 2.0 of the new truly universal inbox comes out from SAP!

Overview

 

This blog post is the second part of the SDN series about the Side panel for Business Suite.
For a first overview about the topic please refer to the blog post Side panel for SAP Business Suite - Overview.

 

This post describes the procedure how to adapt SAP’s Side Panel Content and how to create new Side Panel Content. Therefore the content of this post is the following:

 

  1. How to adapt SAP’s Side Panel Content?
    a) Personalization
    b) Customizing
  2. How to create new Side Panel Content?
    a) How to tag SAP GUI transactions?
    b) How to create new Side Panel Pages?
    c) How to assign Side Panel Pages to transactions?

 

A prerequisite for everything is that you system is set up properly. Detail can be found here: http://help.sap.com/erp2005_ehp_06/helpdata/en/73/d6655577d0421eb022868b4187f5b1/content.htm?frameset=/en/58/327666e82b47fd83db69eddce954bd/frameset.htm

 

Alternatively you can access this information via the SAP Library for SAP Business Suite on SAP Help Portal at > http://help.sap.com/ > SAP Business Suite > SAP ERP > SAP ERP Central Component > SAP Enhancement Package 6 for SAP ERP 6.0 > Application Help > SAP ERP Cross-Application Functions > SAP ERP Cross-Application Functions > Cross-Application Components > Side Panel for Business Suite > Setting up the Side Panel.

 

1.    How to adapt SAP’s Side Panel Content?

 

a)   Personalization

 

End users can personalize the side panel according to their personal needs (if they have the authorization for the authorization objects S_PB_CHIP and S_PB_PAGE (with PERS_SCOPE = 1). It is possible to do the following at runtime in SAP NetWeaver Business Client directly in the side panel:

  • Change the sequence of CHIPs using drag and drop
  • Add additional CHIPs to a side panel

 

To do this, proceed as follows:

  1. Choose Personalize Page.
  2. Choose Add CHIP to open the CHIP catalog.
  3. Select a CHIP.
  4. Repeat steps 1 and 2, if you want to add additional CHIPs. You can change the sequence of CHIPs using drag and drop.
  5. Save your changes.

1.png  2.png3.png

Remove CHIPs from a side panel

To do this, proceed as follows:

  1. Choose Personalize Page.
  2. From the CHIP menu, choose Remove.
  3. Save your changes.

 

b)   Customizing

 

Administrators can customize the side panel for one client of the SAP system (if they have the authorization for the authorization objects S_WDR_P13N, S_PB_CHIP and S_PB_PAGE (pers_scope = ‘4’)). It is possible to do the following at runtime in SAP NetWeaver Business Client directly in the side panel: In the CHIP menu, you make the following settings in order to change e.g. the fields visible in a master data detail CHIPs or to change the chart type in a reports CHIP or to change the columns shown in the attachment table:

 

  • Customize Form
  • Customize Chart
  • Customize Table
  • Customize Link List

4.png    

More customizing options can be found in the Business Suite Side Panel Documentation.

Example: Adding additional fields to a master data CHIP

 

  • At runtime choose “Customize Table” from the CHIP’s menu
  • Create a new component customizing by pressing on the “New”-Button; enter a description and select a transport request.
  • In the component customizing you can select via drag & drop additional fields from the field repository and drop them to the Form “UIBB Schema”.
  • After having done all changes press on “Save”.
  • The next time when you restart NWBC you will see that the master data CHIP contains the additional fields.

 

5.png

 

2.    How to create new Side Panel Content?

a)   How to tag SAP GUI transactions?

 

By tagging you tell NBWC which screens fields are relevant for the data exchange between the SAP GUI transaction (Web Dynpro application) and the Side Panel. 

 

The tagging of SAP GUI transactions is fairly easy: The standard way for tagging is to use the SAP GUI Property Collector (henceforth referred to as "Alternative 1”) but a dynamic tagging via coding (“Alternative 2”) is in exceptional cases also possible or even necessary. 

 

Alternative 1: Identify UI elements of the SAP GUI transaction with the SAP GUI Property Collector and create tags in the tag table

 

You can use SAP GUI Property Collector to identify the UI elements in an SAP GUI transaction (a Dynpro screen) and their properties that are to be extracted and passed to the side panel. SAP GUI Property Collector helps you to determine the field IDs that you need to extract the data. Properties are the basis for defining tags. You need to collect the properties that are to be exposed from a SAP GUI transaction and then used in the side panel before you can define tags. The procedure to identify UI elements with the SAP GUI Property Collector is the following:

 

  6.png

 

  1. Start the SAP GUI Property Collector in one of the following ways:
    1. Start SAP GUI Property Collector within NWBC by pressing CTRL and simultaneously choosing Help >Tools >SAP GUI Property Collector.
    2. Start SAP GUI Property Collector from one of the following installation folders:
      C:\Program Files\SAP\NWBC35\NwbcPropertyCollector.exe
      C:\Program Files (x86)\SAP\NWBC35\NwbcPropertyCollector.exe
  2. Call the SAP GUI transaction in NWBC for Desktop and display the relevant field
  3. In SAP GUI Property Collector choose the relevant session. Each SAP GUI main window is a session. Sessions with disabled scripting are shown in the dropdown list with a comment. 
  4. Choose the Select from Screen pushbutton and keep your mouse button pressed while moving your mouse over UI elements in SAP
    GUI.
  5. You can choose the Property Viewer pushbutton to view UI elements and the property list in a separate window. For more information, see below.
  6. If the data from SAP GUI is not up-to-date and grayed out, choose Refresh.
  7. You can select the Program Name, Screen, and Long ID checkboxes.
  8. You can use SAP GUI Property Collector to simulate the extraction and check the extracted value in the Value field.
  9. Choose the Add to Collection pushbutton.
  10. You can use asterisks (*) for the Program Name and Screen fields if the same SAP GUI field is used on multiple screens or in multiple programs. For example, you can use 1* for all screens that start with 1 (100, 101, 110, 120, and so on).
  11. Select the lifetime for the property. You have the following options:
    1. Transaction
      The data context stays available as long as the current transaction is running in NWBC. This value should be the default value for most of the use cases.
    2. Screen
      The data context stays available as long as you do not leave the main screen.
  12. To see which properties are alive, you can select the Show only properties alive in NWBC’s data context checkbox. If you select this checkbox and you start a new transaction, the tool does not show any of the collected values any longer, since they are not alive any longer. The colors in the Value column have the following meaning:
    • Green
      The green properties are all currently read from the screen or they are constants (value: prefix in ID). They are alive in the data context.
    • Yellow
      The fields are alive in the data context but not on the current screen.
    • Black
      The black properties are not alive in the data context.
  13. Select the relevant properties, and choose the Copy to Clipboard pushbutton.

 

The next step is to create tags within the tag table for all the screen fields which were extracted from the Property Collector in the latest step. 

 

Note that you must always tag all key fields belonging to a business object (according to the BOR definition). For instance, for the BOR object BKPF (Accounting Document) that would be the three fields Company Code, Document Number and Fiscal Year. On the other hand, for the BOR object KNA1(Customer), you only need to tag the customer number (Customer ID).  

 

  1. Maintain the table view NWBC_VC_GUI_TAG within the transaction SM30.
    7.png
  2. Choose “New Entries”.
    8.png
  3. Maintain the maintenance view.
    1. First paste the content of the clipboard to the table.
    2. Provide tags for the screen fields (starting with “/BSSP/:” and maintained in transaction BSSP_TAGS). Simply choose the F4 help to see all tags delivered by SAP for the Side Panel for Business Suite.
    3. For every tag, select a property description, lifetime and a development package.
    4. If applicable, also add a data element field for the external-internal conversion.
    5. Save the view. Select an existing transport request.

  

Alternative 2: Setting Tags with Application Programming Interface (API)

 

You can also set tags with an Application Programming Interface (API). You do this with interface IF_LSAPI_DATA_CONTEXT and the method SET_TAG_VALUE.

 

Setting tags in the program requires a change in the existing SAP GUI coding, and it is a requirement when not all of the required key fields are visible on the screen layout. Otherwise these fields could not be tagged and the values of the fields could not be extracted at runtime.

 

DATA: ld_tag_value TYPE string.

ld_tag_value = ....

cl_lsapi_manager=>get_instance( )->if_lsapi_data_context~set_tag_value(

EXPORTING name  = '/BSSP/:BUKRS'

          value = ld_tag_value

EXCEPTIONS OTHERS = 0 ).  

Some more information about tagging can be found in the Business Suite Side Panel Documentation. 

b)   How to create new Side Panel Pages?

 

Creating new side panel pages is required if you want to create your own side panel pages and not use one of the various side panel pages delivered by SAP; SAP’s side panel pages follow the naming convention BSSP_BS_*. The following needs to be done:

 

  1. Create (in transaction SE80) a new empty Web Dynpro component configuration for component WDR_CHIP_PAGE:
    9.png
    Now save your component configuration.  
  2. Create (in transaction SE80) a new Web Dynpro application configuration for application WDR_CHIP_PAGE:
    10.png
  3. Assigning to the Web Dynpro application configuration the new component configuration and the CHIP catalog BSSP_CHIP_CATALOG:
    11.png
  4. Call the application configuration (button
    “Test” in the screenshot above) and select the button “Adapt Page”.
    12.png
  5. Select CHIPs from the CHIP catalog (via “Add CHIP”) and assign them to the side panel.      
    13.png

 

c)    How to assign Side Panel Pages to transactions?

 

To understand the procedure for the assignment of side panels to transactions, roles are used. Roles are maintained in the transaction PFCG. There are two different folder types within roles:

  • Side panel folders are used by the NWBC to determine which side panels are available in which transactions.
  • Transaction folders are used by the NWBC to determine which transactions are available and how the transactions are shown in the NWBC menu path.

   

How to create a side panel test role?

 

To create a PFCG role, enter a role name and click on “Single Role”. You have to assign the role to a package and a transport request afterwards. 

14.png

After you created and saved the role, you can navigate to the “Menu” tab and create a new folder. For a side panel folder, you have to create a folder for every transaction (or bundle of transactions) for which you want to assign a specific set of side panels.

15.png

During the next step, you have to select the recently created folder, toggle the “Other Node Details” button and select the folder option “Side Panel”. Fill the “Application Alias” with the transactions for which the side panel shall be available by using the format {TR=FK05;FK06;FK08;XK05;….}. Note: {TR=…} (for transactions) and {WDA=…} (for Web Dynpro applications) apply side panel entries for all nodes that match the specified criteria, irrespective of the roles in which they are used. Therefore, they are global references.

 

Finally add to the folder your side panel page(s) defined previously.

16.png

Now you just successfully created a side panel folder which defines the side panels assigned to a certain set of transactions. As a next step you have to create a transaction folder which defines the transactions which shall be visible in the NWBC menu.

 

You should normally create a folder hierarchy which represents the actual menu within the Netweaver Business Client. The following picture shows an exemplary folder structure in a PFCG role on the left hand side and the menu as it looks for the user in the NWBC.

17.png

To add transactions to folders, just select the folder, click the “Add transaction” button and provide the transaction codes of the transactions. Save the role.

18.png 

You have now successfully created a transaction folder which defines the NWBC menu.

 

Finally the role must be assigned to your user master data in order to show the side panel for the transactions (this must be done in the transaction SU01).

 

The usual approach in test environments is to create roles which include the technical side panel role portion (the “side panel folders”) and the menu role portion (the “menu path”) in one role. This approach is described above and it has the advantage that roles can also be tested without assigning them to your user master data. You can test such a single roles with the transaction NWBC. A browser window opens and here you should enter your role name into the textbox next to “Other” field and click on the small SAP icon next to the role name in order to start NWBC for Desktop with this particular role.

19.png

    

 

Resources

 

Business Suite Documentation: http://help.sap.com/erp2005_ehp_06/helpdata/en/58/327666e82b47fd83db69eddce954bd/frameset.htm

SDN Article (Side panel for SAP Business Suite - Overview): http://scn.sap.com/community/erp/blog/2013/02/25/side-panel-for-sap-business-suite

Maybe you have already heard about the new Automated Note Search Tool (ANST). Some of our customers participated in the pilot phase two years ago and finally it has become a standard application.  As its name implies, this new application is intended to search for SAP Notes in order to solve problems, specifically those notes that have correction instructions.

 

 

Searching for correction notes:  Two different approaches.

 

 

  1. Using your own search terms.

 

 




 
 
 
  search1.png
 
 
 
 
 
 
 
 


 

 

 

 

 

 

 

This approach may fail because it’s tricky to find appropriate search terms

 

 

 

 

 

  1. The technical approach:

    search2.png

 

 

In your system, you have managed to reproduce the issue and while debugging the process you find out that the error happens in program RPCTC0E0.
You then search for notes that modify program RPCTC0E0 and which have not been implemented yet. This kind of note search neither depends on the search terms appearing in the correction note,  nor on the search terms used by the person searching for a note. If there is a note that solves the issue, this note should modify any of the ABAP objects that are involved in the process. But, how do we collect the ABAP objects that are involved in a process?. The Answer is: an ABAP Trace.

 

 

 

 

 

Automated Note Search Tool [ANST].

 

 

Our proposal is based on the technical approach. ANST simply automates the task: All you have to do is replicate the issue directly in your system where
the problem is happening and you’ll get notes that may solve the issue.

 

 

search3.png

 

 



 

 

 

 

 

So, if you have a “known issue”, ANST will help you quickly find the note that solves it, but there is more!

 

 

Customer Code Detection:

 

 

Sometimes problems turn out to lie in Customer Code [BAdi, user-exit…involved]?.  ANST uses the ABAP trace not only to look for correction notes but it checks whether there is Non Standard Code involved in the process. Figuring out that there is customer code behind a problem may be somewhat difficult and takes some time. With ANST you’ll get a list of customer code objects in seconds.

 

 

List of Customizing Tables involved:

 

 

Many times you may have encountered that an issue was neither a bug on the SAP Standard side nor was it caused by Customer Code: It was a customizing issue. ANST provides a list of the customizing tables involved in the process and it gives you direct access to them.  It’s like a tailored
IMG.

 

 

ABAP Trace as the basis of a diagnostic tool:

 

 

ANST makes the most of the ABAP trace in this process, using the trace to find out which update notes, customer exits, and customizing tables exist behind it. Moreover ANST is really useful as a debugging tool as it identifies the ABAP objects involved in the process and classifies them into their respective
components.

 

 

search4.png

 

 



 

 

Availability:

 

 

ANST is delivered under BC-UPG-NA application component in SAP_BASIS .

 

 

SAP_BASIS          700         SAPKB70028

 

 

SAP_BASIS          701         SAPKB70113

 

 

SAP_BASIS          702         SAPKB70213

 

 

SAP_BASIS          731         SAPKB73106

 

 

Check the note list:

 

 

Caution: Of course, before implementing a note you have to check that the note is suitable for your system and also check if there are any side-effects.

 

 

To learn more:

 

 

SAP Knowledge Base Article:

 

1818192 Automated Note Search Tool

 

 

During the pilot phase, the following SCN blogs were published explaining the main features of ANST:

 

 

 

 

http://scn.sap.com/community/abap/blog/2010/12/16/automated-note-search-and-customer-code-detection

 

 

http://scn.sap.com/community/abap/blog/2011/01/24/automated-note-search-customer-code-detection-ii-release-20

 

 

http://scn.sap.com/people/ivan.martinmarra/blog/2011/04/19/automated-note-search-customer-code-detection-iii-release-30

 

You can also check out this YouTube video for more information:

Overview

 

This blog post is the first part of the SDN series about the Side Panel for Business Suite.

For a detailed description how to adapt SAP's Side Panel content and create new content please refer to the blog post Side panel for SAP Business Suite (2).


The side panel for SAP Business Suite can be used to display additional context-sensitive information for existing SAP GUI transactions in a separate screen area without modifying the corresponding transaction. A side panel can simultaneously show several CHIPs (Collaborative Human Interface Parts). A CHIP is a special type of Web Dynpro ABAP application.


A range of both generic and area-specific CHIPs is already provided with ERP 6.0 EhP 6 for your use. SAP delivers side panel content for about 1200 SAP GUI transactions including the following modules/components: Financials (FIN), Controlling (CO), Financial Services – Claims Management (FS-CM), Logistics (LO), Materials Management (MM), Sales and Distribution (SD), and Quality Management (QM).
overview.png

 

Currently there are more than 140 reusable CHIPs available. Customers and partners can also add own CHIPs and thereby enhance SAP’s CHIP catalog with own content.


The side panel can be configured and enhanced to suit your needs. At the side panel level, you can decide which CHIPs are getting displayed in the side panel. Moreover, you can add or remove supportive CHIPs via a catalog (e.g. the CHIP for displaying a 3D model of a material can easily be added to every transaction that deals with ‘material’). At the CHIP level, you can decide how you want to display your information (e.g. if you want to display analytic queries in a chart, you have up to 20 different chart types already available).


One great feature of the side panel is that SAP GUI transactions can be enhanced modification-free. This feature comes with the advantage that no regression testing is required at all.


The SAP NetWeaver Business Client (NWBC) as of version 3.5 or higher is used to connect the SAP GUI transaction or Web Dynpro application to the side panel Web Dynpro application. To put it in a nutshell, the NWBC extracts data from SAP GUI screens and passes them to the side panel, which allows developers to build context-sensitive side panels. A communication from the side panel to the SAP GUI transaction is not foreseen because SAP GUI transactions would have to be modified.


The architecture of the side panel accommodates a flexible system landscape. The following scenarios are possible:

 

  • Side panel and application transactions run in the same physical system.
    Total cost of ownership is the lowest if the version of your ERP system contains SAP_BS_FND 7.31.
  • Side panel and application transactions do not run in the same physical system (side-by-side scenario).
    If your ERP system is below EHP6 (containing SAP_BS_FND 7.31), you can use the side panel in a side-by-side scenario in which only the role system contains SAP_BS_FND 7.31.

 

 


CHIP examples


Collaboration


The collaboration CHIP with SAP StreamWork integration provides features to collaborate with co-workers who usually don’t have an ERP system user (e.g. a product developer working in the PP module with a marketing colleague). Even collaboration with people outside the company’s boundaries (e.g. suppliers) is supported.

collaboration.png

 

The collaboration CHIP requires customizing effort in order to work but since it is very generic it can be used with almost every transaction.
Starting with SP6 of EhP6 the collaboration CHIP will support SAP JAM as well.

 

Reports


There are numerous existing CHIPs that provide analytical content either as forms or as charts. As every CHIP is basically a Web Dynpro Component, any kind of Floorplan Manager (FPM) components (e.g. Chart UI Building Blocks) can be reused within the CHIP.


The following example shows the cumulative actual/planned costs of a specific cost center. Again, to demonstrate the generic notion, this CHIP could be used in every transaction which deals with a cost center.

 

reports.png


Shared Service Center


Master data maintenance (and other) transactions can be enhanced with this side panel to enable the creation of service requests directly from within the applications. In this case, the side panel increases the end user’s productivity as the user is no longer required to call or email the shared services center to create a ticket and provide information about the issue.

shared_service.PNG

 

SAP Visual Enterprise


Using the SAP Visual Enterprise CHIP, users can see both a 3D model representation and a thumbnail in material master or product transactions in the side panel. Users can also have a look at the material in more detail, study work instructions how to repair it or see the detailed bill of material for it.

visual_enterprise.png


The CHIP helps to optimize processes and to browse massive 3D design data sets. Additionally, the simplicity and accuracy of visual information improves the communication with suppliers and partners which increases both the productivity and the product quality.


SAP Visual Business


The SAP Visual Business CHIPs can be used to visualize addresses and to plan routes in the side panel. Users can directly see the location of any kind of business data (e.g. the address of a customer, current location of a truck) via different symbols. The relation to reality makes Business Data intuitive and navigable.

 

visual_business_1.png                visual_business_2.png
      
Side panel architectures


One-system architecture


The one-system architecture is referring to a scenario where both the application and all side panel content are in one system.  Next I describe how the data provision works:


First the NWBC connects to the system and reads the user’s roles as maintained in transaction PFCG. During the next step the NWBC downloads the tags from the so-called tag table (Maintenance view NWBC_VS_GUI_TAG). The tags define which screen information (e.g. field content of input field) is read from an application running in the content area (left side) and in the following passed to the side panel application (right side).


The role definition in transaction PFCG describes which side panel application is to be shown for a certain transaction. The NWBC extracts the data from the SAP GUI application and puts the values into the data context, which is available for all side panel applications.  The data extraction is performed using SAP GUI scripting which is part of SAP GUI.


If the side panel application needs an (internal) format which is different from the (external) format from the SAP GUI, NWBC calls a conversion service. The data conversion is optional and must be enabled in the tag table. The side panel application then receives the extracted data as an input.

 

one-system.png

Side-by-side architecture


The side-by-side architecture refers to a scenario where the side panel application is running in a side panel (role) system, while the ERP applications are running on another system (application system) side by side.


This is achieved by user roles (defined via transaction PFCG) on the role system which contain the transactions that should be side panel enabled. The transactions have to be linked via a RFC destination to the application system since they do not physically exist on the role system.


A user who has this PFCG role assigned to his/her user master would log on the role system via NWBC. When the user selects a side panel enabled transaction from the NWBC menu the system calls up the transaction in the ERP system. When opening the side panel, the side panel application runs on the role system. This side panel application can execute e.g. an RFC call to the application system in order to retrieve additional data which is displayed in the side panel.


Apart from the remote call of the SAP GUI transactions and following RFC calls to retrieve further data; all other steps are identical to the one-system architecture.

side-by-side.png

 


Glossary

 

Side panelA side panel is a container with additional context information relating to the main application that is displayed in a separate screen area.
CHIP

 

A CHIP (Collaborative Human Interface Part) is an encapsulated piece of software that, together with other CHIPs, provides functions on a page or side panel of the Web Dynpro ABAP Page Builder. All available CHIPs are registered in a library (referred to as the CHIP catalog). Technically, CHIPs are Web Dynpro ABAP components that implement a specific Web Dynpro component interface.

CHIP Catalog

 

In the runtime environment of the Web Dynpro ABAP Page Builder, you can select CHIPs from the CHIP catalog and integrate them into a page. The CHIP catalog consists of a file structure that is generated from data provided by CHIP providers.

CHIP Provider Page

 

A CHIP provider page is a page created with the Web Dynpro ABAP Page Builder that is classified as a CHIP provider. This classification allows the page to be added to a CHIP catalog and the CHIPs contained in it can be made available to the user. By configuring the CHIPs, you can provide the users with preconfigured CHIPs, which means they don't have to copy them.

 

 

Resources


SDN page about NWBC:
http://scn.sap.com/community/netweaver-business-client

 

Business Suite Documentation:
http://help.sap.com/erp2005_ehp_06/helpdata/en/58/327666e82b47fd83db69eddce954bd/frameset.htm

This tutorial describes step-by-step procedure of creating and adding a new holiday to holiday and factory calendar.

 

Note: It is not recommended to make any changes to the factory calendar in a production system.

All the calendar data should be maintained in a customizing system.

Updates are done via transports from the customizing system.

As a special case a customizing client in the productive system can be established.

Changes in the customizing client will then directly affect the productive system, as the calendar data is client-independent.


SAP Calendar:

http://wiki.sdn.sap.com/wiki/download/attachments/263554549/scal0.PNG

SAP calendar master consists of three separate sub-objects which are inter-linked to each other:

 

  • Public Holidays,
  • Holiday Calendar and
  • Factory Calendar.

 

 

Public holidays :

Public holidays can be defined and be combined into holiday calendars.

Public holidays describe the statutory holidays for a particular country or region within a country.

 

Types of Public holidays:

  • Fixed date
  • Fixed day of week from a specific date
  • Specific number of days before or after Easter (Sunday)
  • Easter Sunday
  • Moveable holiday (with individual specification of dates during each specified year).

 

For holidays with fixed date (such as Christmas) and moveable holidays it is possible to specify simple rules guaranteeing the holiday if it falls on certain days of the week (Thu, Fri, Sun, Sat/Sun). For instance, Christmas day public holiday may be moved to the next working day if it falls on a Saturday or Sunday.

 

Holiday calendar :

Holiday calendar is assigned to each factory calendar.

 

 

Factory calendar

Factory calendar contain company specific dates such as alternate working Saturdays and holidays.

 

 

T-Code  :     SCAL

IMG SPRO -> Time Management -> Work Schedules

 

http://wiki.sdn.sap.com/wiki/download/attachments/263554549/scal_pub0.PNG

 

Step 1: Create Public Holidays

  1. Select the radio button Public holidays.
  2. Click Change button  .
  3. On Change Public Holidays: Overview screen click Create button  .
  4. A pop up window appear to select the Type of Public Holiday.

http://wiki.sdn.sap.com/wiki/download/attachments/263554549/scal_pub_fix0.PNG

Type of Public Holidays

  1. with fixed date: This public holiday falls on the same date every year (e.g. Christmas Day).
    1. Enter the Public Holiday Definition.
      1. Day (e.g. 25)
      2. Month (e.g. 12)
      3. Guaranteed : specify whether the public holiday should be moved or not if it falls on a weekend.
        1. Not Guaranteed: Indicates that the public holiday should not be moved if it falls on a weekend.
        2. Thursday, Friday, Sunday, Saturday/Sunday: If the public holiday is to be "guaranteed", i.e., should be a day off in any case, you have to specify the workday to which the public holiday should be moved.
    2. Enter the Public Holiday Attributes:
      1. Sort Criterion: use this to display logically related holidays in a block, e.g. all holidays for a country.
      2. Religious Denomination: (e.g. Christianity).
      3. Public Holiday Class: this specifies the holiday type. It can be used to determine the groups of holidays and normal days. (e.g. '1' is ordinary public holiday).
      4. Give Long/Short Holiday Names.
    3. Click Create icon  .
  2. Floating Public Holiday: This public holiday is not fixed. It must be defined explicitly each year. (e.g. Vesak Full Moon Poya Day).
    1. Enter the Public Holiday into relevant boxes: Year/Month/Day (e.g. 2012, 05, 05).
    2. Enter the Public Holiday Attributes and click Insert Date icon.

http://wiki.sdn.sap.com/wiki/download/attachments/263554549/scal_pub_float.PNG

 

Step 2: Create Holiday Calendar

To assign public holidays in a holiday calendar, we need to maintain one or more holiday calendars to accommodate the differing holiday schedules of our company.

 

  1. Select the radio button "Holiday Calendar".
  2. On Change Public Holiday Calendar: Overview screen click Create button  .
  3. Enter the Calendar ID and the Name of the calendar. A holiday calendar is identified in the system by a two-character calendar ID.
  4. Enter the validity of the calendar.

 

Assign Holidays

  1. Click on the Assign Holiday button to assign the holiday.

http://wiki.sdn.sap.com/wiki/download/attachments/263554549/scal_holi_cal.PNG

 

  1. From the Insert Public Holidays into Holiday Calendar screen, search for the respective calendar and select the holidays you want to allow.
  2. Click on the Assign publ.holiday Button.
  3. The public holiday gets added; click on save button to save the holiday calendar.
  4. Acknowledge all the messages.

http://wiki.sdn.sap.com/wiki/download/attachments/263554549/scal_pub_holidays.PNG

Step 3: Define the Factory Calendar

hcal_2013.png

  1. Select the working days and assign a holiday calendar to factory calendar.
  2. Select the radio button "Factory Calendar".
  3. Enter the Factory Calendar ID (same as the Holiday Calendar) and the Factory Calendar Name.
  4. Enter the Holiday Calender ID.
  5. Save.

 

Special Rules:

 

Special rules are used to define a date (or periods) as a holiday or as a workday, which is not maintained in the holiday calender (which is applicable for that year only).

In the Public Holiday definition you can determine if a holiday should be moved if it falls during weekends.

You can assign this special rules accessing the "Change Factory Calendar: Details" :: Special Rules button.

scal_srule_Layer 3.png

  1. Go to Factory calendar (change) --> change calendar --> Special rules.
  2. Enter the date and specify if it is a holiday or workday, then save.
  3. The Special rules have higher priority than holiday calendar holidays or workdays.

 

Finally, click Year Overview and check for the dates.

fcal-2013.png

 

Final Step: Transport the Calendar

All changes made to the holiday or factory calendar must be transported manually.

 

  1. Go to SAP Calendar: Main Menu.
  2. Select one of the sub-objects and click Transport button  .

 

 

Calendar Functions

 

Once the SAP Calendar is configured properly, you can use this data to perform various types of calculations.

SCAL function group consists of some predefined function modules that can be use to determine whether or not a given date is a working day, holiday, etc.

 

 

Function ModuleDescription
DATE_COMPUTE_DAY

Computes the day of the week for a given date. Day values are calculated as 1 (Monday), 2 (Tuesday), and so on.

DATE_COMPUTE_DAY_ENHANCED

Computes the day of the week just like DATE_COMPUTE_DAY; also returns the day value as text (e.g., TUESDAY, etc.).

DATE_CONVERT_TO_FACTORYDATE

Calculates the factory date value for a given date. Also provides an indicator that confirms whether or not the given date is considered a working day according to the selected factory calendar.

DATE_GET_WEEK

Determines the week of the year for the given date. For example, the date 9/13/2010 would be the 37th week of the year 2010.

FACTORYDATE_CONVERT_TO_DATE

Converts a factory date value back into a date object.

HOLIDAY_CHECK_AND_GET_INFO

Tests to determine whether or not a given date is a holiday based on the configured holiday calendar.

WEEK_GET_FIRST_DAYCalculates the first day of a given week.

 

 

As December comes to a close, 2013 is just around the corner, and it's a good time to create your Factory Calendar for the new year (if you haven't already done so); I hope this simple guide will help you. 

Bharat Rathod

WIP report in detail

Posted by Bharat Rathod Sep 2, 2012

Dear,

 

If you want to get WIP report means KKAO output in detail then read following.

 

For that you have to develope z program butz program take lts of time to execute so try to enhance kkao and take data from kkao to one z table  and then make report .

 

to get data from KKAO enhance  report SAPKKA07 in FORM create_grundliste 

like

ENHANCEMENT ZWIP.    "active version

* EXPORT T_AUFTLST FROM T_AUFTLST TO MEMORY ID 'DATA'.

  DATA : WIP TYPE STANDARD TABLE OF ZWIP WITH HEADER LINE.

  DATA : SRNO TYPE I.

  DELETE FROM ZWIP WHERE UNAME = SY-UNAME.

  CLEAR WIP.

  SELECT MAX( SRNO ) FROM ZWIP

    INTO SRNO.

  LOOP AT T_AUFTLST.

    MOVE-CORRESPONDING T_AUFTLST TO WIP.

    SRNO = WIP-SRNO = SRNO + 1.

    WIP-ZYEAR = ABGR_PERIOD-J.

    WIP-PERIO = ABGR_PERIOD-M.

    WIP-UNAME = SY-UNAME.

    APPEND WIP.

*   INSERT ZWIP FROM TABLE WIP ACCEPTING DUPLICATE KEYS.

  ENDLOOP.

  INSERT ZWIP FROM TABLE WIP ACCEPTING DUPLICATE KEYS.

ENDENHANCEMENT.

 

then make program like below

 

*&---------------------------------------------------------------------*

*& Report  ZWIP

*&

*&---------------------------------------------------------------------*

*&

*&

*&---------------------------------------------------------------------*

 

REPORT  ZWIP.

 

 

TYPE-POOLS : SLIS.

*tables****************************************************************

TABLES:

AUFK, "Order master data

*JEST, "Object status

*AFKO, "Order header data PP orders

COEP, "CO Object: Line Items (by Period)

COBK, "CO Object: Document Header

*MSEG, "Document Segment: Material

*AFRU, "Order completion confirmations

*RESB, "Reservation/dependent requirements

*JCDS, "Change Documents for System/User Statuses (Table JEST)

*T001W,"Plants/Branches

*TJ02T,"System status texts

  1. MARA.

*MAKT. "Material DescriptionsTYPES : BEGIN OF TY_FINAL,  SR_NO TYPE I ,  CELLCOLOR TYPE LVC_T_SCOL,  AUFNR TYPE AFPO-AUFNR,  POSNR TYPE AFPO-POSNR,  OBJNR TYPE COEP-OBJNR,  GSTRS TYPE AFKO-GSTRS,  MEINS TYPE AFPO-MEINS,  MATNR TYPE AFPO-MATNR,  MAKTX TYPE MAKT-MAKTX,  PSMNG TYPE AFPO-PSMNG,  WEMNG TYPE AFPO-WEMNG,  PEMNG TYPE AFKO-GAMNG,  STLNR TYPE STPO-STLNR,  DATUV TYPE STPO-DATUV,  ANDAT TYPE STPO-ANDAT,  IDNRK TYPE STPO-IDNRK,  BOMNG TYPE STPO-MENGE,  REMNG TYPE STPO-MENGE,  MEGBTR TYPE COEP-MEGBTR,  MBGBTR TYPE COEP-MBGBTR,  STMNG TYPE STPO-MENGE,  RMEINS TYPE STPO-MEINS,  WOGBTR TYPE COEP-WOGBTR,  AVALUE1 TYPE COEP-WOGBTR,  AVALUE2 TYPE COEP-WOGBTR,  AVALUE TYPE COEP-WOGBTR,  CMATNR TYPE COEP-MATNR,  CMAKTX TYPE MAKT-MAKTX,  BUDAT TYPE COBK-BUDAT,  BOM TYPE C,END OF TY_FINAL.DATA : IT_FINAL TYPE STANDARD TABLE OF TY_FINAL.DATA : WA_FINAL TYPE TY_FINAL.*DATA : WA_FINAL1 TYPE TY_FINAL.DATA : CMATNR TYPE I.*TYPES : BEGIN OF TY_FINAL1,*  AUFNR TYPE AFPO-AUFNR,*  POSNR TYPE AFPO-POSNR,*  OBJNR TYPE COEP-OBJNR,*  MATNR TYPE AFPO-MATNR,*  MAKTX TYPE MAKT-MAKTX,*  WOGBTR TYPE COEP-WOGBTR,*  AVALUE TYPE COEP-WOGBTR,*  CMATNR TYPE COEP-MATNR,*END OF TY_FINAL1.*DATA : IT_FINAL1 TYPE STANDARD TABLE OF TY_FINAL1 WITH HEADER LINE. *TYPES : BEGIN OF TY_AUFK, " OCCURS 0,*AUFNR TYPE AUFK-AUFNR,*OBJNR TYPE AUFK-OBJNR,*AUART TYPE AUFK-AUART,** aufnr TYPE afko-aufnr,*GAMNG TYPE AFKO-GAMNG,*PLNBEZ TYPE AFKO-PLNBEZ,*GMEIN TYPE AFKO-GMEIN,*AUFPL TYPE AFKO-AUFPL,*RSNUM TYPE AFKO-RSNUM,*DISPO TYPE AFKO-DISPO,*STLNR TYPE AFKO-STLNR,*END OF TY_AUFK.*DATA : IT_AUFK TYPE STANDARD TABLE OF TY_AUFK WITH HEADER LINE.*DATA : BEGIN OF IT_WIP OCCURS 0.*  INCLUDE STRUCTURE ZWIP.**  AUFNR TYPE ZWIP-AUFNR,**  OBJNR TYPE ZWIP-OBJNR,**  ZYEAR TYPE ZWIP-ZYEAR,**  PERIO TYPE ZWIP-PERIO,**  UNAME TYPE ZWIP-UNAME,**  MATNR TYPE ZWIP-MATNR,**  WRT TYPE ZWIP-WRT,**  WRTK TYPE ZWIP-WRTK,**  BEWER TYPE ZWIP-BEWER,*DATA : END OF IT_WIP.DATA : IT_WIP TYPE STANDARD TABLE OF ZWIP WITH HEADER LINE.TYPES : BEGIN OF TY_TEMP, " OCCURS 0,AUFNR TYPE AUFK-AUFNR,OBJNR TYPE AUFK-OBJNR,AUART TYPE AUFK-AUART,GSTRS TYPE CAUFV-GSTRS,SDATV TYPE CAUFV-SDATV,AUFLD TYPE CAUFV-AUFLD,* aufnr TYPE afko-aufnr,GAMNG TYPE AFKO-GAMNG,IGMNG TYPE AFKO-IGMNG,PLNBEZ TYPE AFKO-PLNBEZ,GMEIN TYPE AFKO-GMEIN,AUFPL TYPE AFKO-AUFPL,RSNUM TYPE AFKO-RSNUM,DISPO TYPE AFKO-DISPO,STLNR TYPE AFKO-STLNR,POSNR TYPE AFPO-POSNR,MEINS TYPE AFPO-MEINS,MATNR TYPE AFPO-MATNR,PSMNG TYPE AFPO-PSMNG,WEMNG TYPE AFPO-WEMNG,END OF TY_TEMP.DATA : IT_TEMP TYPE STANDARD TABLE OF TY_TEMP WITH HEADER LINE.*DATA : IT_TEMP1 TYPE STANDARD TABLE OF TY_TEMP WITH HEADER LINE.TYPES : BEGIN OF TY_RESB,  MATNR TYPE RESB-MATNR,  BDMNG TYPE RESB-BDMNG,  MEINS TYPE RESB-MEINS,  SHKZG TYPE RESB-SHKZG,  AUFNR TYPE RESB-AUFNR,  OBJNR TYPE AUFK-OBJNR,END OF TY_RESB.DATA : IT_RESB TYPE STANDARD TABLE OF TY_RESB WITH HEADER LINE.DATA : IT_RESB1 TYPE STANDARD TABLE OF TY_RESB WITH HEADER LINE.DATA : BDMNG TYPE RESB-BDMNG. TYPES : BEGIN OF TY_MDFA,  AUFNR TYPE MDFA-AUFNR,  MATNR TYPE MDFA-MATNR,  WEMNG TYPE MDFA-WEMNG,END OF TY_MDFA.DATA : IT_MDFA TYPE STANDARD TABLE OF TY_MDFA WITH HEADER LINE. TYPES : BEGIN OF TY_STPO, " OCCURS 0,  STLNR TYPE STPO-STLNR,  DATUV TYPE STPO-DATUV,  ANDAT TYPE STPO-ANDAT,  IDNRK TYPE STPO-IDNRK,  MENGE TYPE STPO-MENGE,  MEINS TYPE STPO-MEINS,END OF TY_STPO.DATA : IT_STPO TYPE STANDARD TABLE OF TY_STPO WITH HEADER LINE. TYPES : BEGIN OF TY_COEP, " OCCURS 0,KSTAR TYPE COEP-KSTAR,BUZEI TYPE COEP-BUZEI,PERIO TYPE COEP-PERIO,BELNR TYPE COEP-BELNR,OBJNR TYPE COEP-OBJNR,VRGNG TYPE COEP-VRGNG,MATNR TYPE COEP-MATNR,GJAHR TYPE COEP-GJAHR,WERKS TYPE COEP-WERKS,MEINB TYPE COEP-MEINB,WOGBTR TYPE COEP-WOGBTR,MEGBTR TYPE COEP-MEGBTR,MBGBTR TYPE COEP-MBGBTR,MEINH TYPE COEP-MEINH,REFBN TYPE COBK-REFBN,BUDAT TYPE COBK-BUDAT,END OF TY_COEP.DATA : IT_COEP TYPE STANDARD TABLE OF TY_COEP WITH HEADER LINE.DATA : IT_COEP1 TYPE STANDARD TABLE OF TY_COEP WITH HEADER LINE.DATA : IT_COEP2 TYPE STANDARD TABLE OF TY_COEP WITH HEADER LINE.DATA : IT_COEP3 TYPE STANDARD TABLE OF TY_COEP WITH HEADER LINE.DATA : IT_COEP4 TYPE STANDARD TABLE OF TY_COEP WITH HEADER LINE.DATA : IT_COEP5 TYPE STANDARD TABLE OF TY_COEP WITH HEADER LINE.DATA : IT_COEP6 TYPE STANDARD TABLE OF TY_COEP WITH HEADER LINE.DATA : IT_COEP7 TYPE STANDARD TABLE OF TY_COEP WITH HEADER LINE.DATA : COEP_TEMP TYPE STANDARD TABLE OF TY_COEP WITH HEADER LINE.DATA : WOGBTR TYPE COEP-WOGBTR,*       WOGBTR1 TYPE COEP-WOGBTR,       MEGBTR TYPE COEP-MEGBTR,       MBGBTR TYPE COEP-MBGBTR.*DATA : COUNT TYPE I.TYPES : BEGIN OF TY_MAKT,  MATNR TYPE MAKT-MATNR,  MAKTX TYPE MAKT-MAKTX,END OF TY_MAKT.DATA : IT_MAKT TYPE STANDARD TABLE OF TY_MAKT WITH HEADER LINE.DATA : IT_MAKT1 TYPE STANDARD TABLE OF TY_MAKT WITH HEADER LINE. *TYPES: BEGIN OF TY_JEST, " OCCURS 0,*OBJNR TYPE JEST-OBJNR,*STAT TYPE JEST-STAT,*END OF TY_JEST.*DATA : IT_JEST TYPE STANDARD TABLE OF TY_JEST WITH HEADER LINE.*TYPES: BEGIN OF TY_JCDS, " OCCURS 0,*OBJNR TYPE JCDS-OBJNR,*STAT TYPE JCDS-STAT,*UDATE TYPE JCDS-UDATE,*INACT TYPE JCDS-INACT,*END OF TY_JCDS.*DATA : IT_JCDS TYPE STANDARD TABLE OF TY_JCDS WITH HEADER LINE.*DATA : IT_JEST1 TYPE STANDARD TABLE OF TY_JEST WITH HEADER LINE.*DATA : IT_JEST2 TYPE STANDARD TABLE OF TY_JEST WITH HEADER LINE.*DATA : IT_JEST3 TYPE STANDARD TABLE OF TY_JEST WITH HEADER LINE.*DATA : IT_JEST4 TYPE STANDARD TABLE OF TY_JEST WITH HEADER LINE.*DATA : IT_JEST5 TYPE STANDARD TABLE OF TY_JEST WITH HEADER LINE.*DATA : IT_JEST6 TYPE STANDARD TABLE OF TY_JEST WITH HEADER LINE.*DATA : IT_JEST7 TYPE STANDARD TABLE OF TY_JEST WITH HEADER LINE.*DATA : IT_JEST8 TYPE STANDARD TABLE OF TY_JEST WITH HEADER LINE.*DATA : IT_JEST9 TYPE STANDARD TABLE OF TY_JEST WITH HEADER LINE.*DATA : IT_JEST0 TYPE STANDARD TABLE OF TY_JEST WITH HEADER LINE.*DATA : IT_JEST11 TYPE STANDARD TABLE OF TY_JEST WITH HEADER LINE.*DATA : IT_JEST12 TYPE STANDARD TABLE OF TY_JEST WITH HEADER LINE.*DATA: I_TJ02T TYPE TJ02T OCCURS 0 WITH HEADER LINE.*DATA : GVALUE TYPE COEP-WOGBTR,*       GVALUE1 TYPE COEP-WOGBTR.*DATA : STAT TYPE C.*************************************************************************CONSTANTS: C_AUTYP TYPE AUFK-AUTYP VALUE '10',*C_TRUE VALUE 'X',*C_FALSE VALUE ' ',*C_TECO(5) VALUE 'I0045',*C_DLV(5) VALUE 'I0012',*C_DELT(5) VALUE 'I0013'.DATA : IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,       IT_LAYOUT TYPE SLIS_LAYOUT_ALV,       GT_TOP TYPE SLIS_T_LISTHEADER,       GW_TOP TYPE SLIS_LISTHEADER,       IT_SORT TYPE SLIS_T_SORTINFO_ALV,       WA_SORT TYPE SLIS_SORTINFO_ALV,*       IT_EVENTS TYPE SLIS_T_EVENT,       IT_EVENT TYPE SLIS_T_EVENT.*       WA_EVENTS TYPE SLIS_ALV_EVENT.DATA  SRNO TYPE I.DATA : MONTH(2) TYPE C,       YEAR(4) TYPE C,       PERIO TYPE COEP-PERIO,       GJAHR TYPE COEP-GJAHR.*       MAX_PERIO TYPE COEP-PERIO,*       MIN_PERIO TYPE COEP-PERIO.***********************************************************************SELECTION-SCREEN: BEGIN OF BLOCK A01 WITH FRAME TITLE TEXT-S01.SELECT-OPTIONS: S_KOKRS FOR COEP-KOKRS OBLIGATORY DEFAULT '1000' NO-EXTENSION NO INTERVALS, " Control area*                S_WERKS FOR AUFK-WERKS OBLIGATORY DEFAULT '1000' NO-EXTENSION NO INTERVALS,"MEMORY ID WRK OBLIGATORY NO-EXTENSION NO INTERVALS, " "*                S_AUART FOR AUFK-AUART ,"DEFAULT 'ZP04', " Order type                S_MATNR FOR MARA-MATNR,"AFKO-PLNBEZ," " material number                S_AUFNR FOR AUFK-AUFNR, " default '2000011*                S_DISPO FOR AFKO-DISPO, " MRP controller                S_BUDAT FOR COBK-BUDAT OBLIGATORY NO INTERVALS NO-EXTENSION DEFAULT SY-DATUM.SELECTION-SCREEN: END OF BLOCK A01.************************************************************************ AT SELECTION-SCREEN.  MONTH = S_BUDAT+07(02).  YEAR  = S_BUDAT+03(04).  PERIO = MONTH - 3.  IF PERIO LE 0.    PERIO = PERIO + 12.  ENDIF.  IF PERIO > 09.    GJAHR = YEAR - 1.  ELSE.    GJAHR = YEAR.  ENDIF. ************************************************************************START-OF-SELECTION.  PERFORM GET_DATA.  PERFORM FIELDCAT.  PERFORM LAYOUT.  PERFORM SORT.  PERFORM EVENT_GET.  PERFORM SET_CELL_COLOURS.  PERFORM DISPLAY. *&---------------------------------------------------------------------**&      Form GET_DATA*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  --> p1        text*  <-- p2        text*----------------------------------------------------------------------*FORM GET_DATA .*  CLEAR IT_AUFK.*  REFRESH IT_AUFK.   SELECT * "AUFNR OBJNR ZYEAR PERIO UNAME MATNR WRT WRTK BEWER    FROM ZWIP    INTO CORRESPONDING FIELDS OF TABLE IT_WIP    WHERE UNAME = SY-UNAME    AND ZYEAR = GJAHR    AND PERIO = PERIO    AND AUFNR IN S_AUFNR    AND MATNR IN S_MATNR.   IF IT_WIP[] IS NOT INITIAL.    SELECT A~AUFNR A~OBJNR A~AUART A~GSTRS          A~GAMNG A~IGMNG A~PLNBEZ A~GMEIN A~AUFPL A~RSNUM A~STLNR          A~DISPO A~SDATV A~AUFLD A~RSNUM B~POSNR B~MEINS B~MATNR B~PSMNG B~WEMNG      INTO CORRESPONDING FIELDS OF TABLE IT_TEMP      FROM CAUFV AS A INNER JOIN AFPO AS B ON A~AUFNR = B~AUFNR      FOR ALL ENTRIES IN IT_WIP      WHERE A~AUFNR = IT_WIP-AUFNR      AND A~PLNBEZ IN S_MATNR.  ENDIF.   IF IT_TEMP[] IS INITIAL.    MESSAGE E000(ZPP) WITH 'No Valid status for Production Order selection.'.  ELSE.    PERFORM SELECT_DATA.  ENDIF.

  1. ENDFORM.                    " GET_DATA

*&---------------------------------------------------------------------**&      Form SELECT_DATA*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  --> p1        text*  <-- p2        text*----------------------------------------------------------------------*FORM SELECT_DATA .  IF IT_TEMP[] IS NOT INITIAL.    SORT IT_TEMP BY AUFNR OBJNR POSNR.    SELECT AUFNR MATNR WEMNG      INTO CORRESPONDING FIELDS OF TABLE IT_MDFA      FROM MDFA      FOR ALL ENTRIES IN IT_TEMP      WHERE AUFNR EQ IT_TEMP-AUFNR.     SELECT MATNR BDMNG MEINS SHKZG AUFNR      INTO CORRESPONDING FIELDS OF TABLE IT_RESB      FROM RESB      FOR ALL ENTRIES IN IT_TEMP      WHERE RSNUM = IT_TEMP-RSNUM      AND AUFNR EQ IT_TEMP-AUFNR.    IF IT_RESB[] IS NOT INITIAL.      PERFORM IT_RESB.    ENDIF.    SELECT STLNR DATUV ANDAT IDNRK MENGE MEINS     FROM STPO      INTO CORRESPONDING FIELDS OF TABLE IT_STPO      FOR ALL ENTRIES IN IT_TEMP      WHERE STLNR EQ IT_TEMP-STLNR.     SELECT MATNR MAKTX      INTO CORRESPONDING FIELDS OF TABLE IT_MAKT1      FROM MAKT      FOR ALL ENTRIES IN IT_TEMP      WHERE MATNR EQ IT_TEMP-MATNR      AND SPRAS EQ 'EN'.     SELECT    COEP~KSTAR COEP~BUZEI COEP~PERIO COEP~BELNR COEP~OBJNR    COEP~VRGNG COEP~MATNR COEP~GJAHR COEP~WERKS COEP~MEINB    COEP~WOGBTR COEP~MEGBTR COEP~MBGBTR COEP~MEINH    COBK~REFBN COBK~BUDAT    INTO CORRESPONDING FIELDS OF TABLE IT_COEP    FROM ( COBK INNER JOIN COEP ON COBK~KOKRS = COEP~KOKRS AND COBK~BELNR = COEP~BELNR )    FOR ALL ENTRIES IN IT_TEMP    WHERE COEP~KOKRS IN S_KOKRS    AND COEP~OBJNR EQ IT_TEMP-OBJNR    AND COBK~BUDAT <= S_BUDAT-LOW    AND COEP~LEDNR EQ '00'.    IT_COEP5[] = IT_COEP[].    LOOP AT IT_COEP5." WHERE GJAHR <= GJAHR.      IF IT_COEP5-GJAHR < GJAHR.        MOVE IT_COEP5 TO IT_COEP1.*        MOVE-CORRESPONDING IT_COEP5 TO IT_COEP1.        APPEND IT_COEP1.      ELSEIF IT_COEP5-GJAHR = GJAHR.        IF IT_COEP5-PERIO <= PERIO.          MOVE IT_COEP5 TO IT_COEP1.*          MOVE-CORRESPONDING IT_COEP5 TO IT_COEP1.          APPEND IT_COEP1.        ENDIF.      ENDIF.    ENDLOOP.    IF IT_COEP[] IS NOT INITIAL." AND IT_COEP1[] IS NOT INITIAL.      PERFORM IT_COEP.      CLEAR IT_COEP4.      REFRESH IT_COEP4.      IF IT_RESB[] IS NOT INITIAL.        IT_COEP4[] = IT_COEP[].        PERFORM FILL_FINAL.      ENDIF.    ENDIF.  ENDIF.

  1. ENDFORM.                    " SELECT_DATA

*&---------------------------------------------------------------------**&      Form IT_RESB*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  --> p1        text*  <-- p2        text*----------------------------------------------------------------------*FORM IT_RESB .  CLEAR IT_RESB1[].  REFRESH IT_RESB1.  IT_RESB1[] = IT_RESB[].  CLEAR IT_RESB.  REFRESH IT_RESB.  SORT IT_RESB1 BY AUFNR MATNR.  LOOP AT IT_RESB1.    IF IT_RESB-AUFNR = IT_RESB1-AUFNR AND IT_RESB-MATNR = IT_RESB1-MATNR.      CLEAR BDMNG.      BDMNG = IT_RESB1-BDMNG + IT_RESB-BDMNG.      CLEAR IT_RESB-BDMNG.      IT_RESB-BDMNG = BDMNG.      MODIFY IT_RESB TRANSPORTING BDMNG WHERE AUFNR = IT_RESB1-AUFNR AND MATNR = IT_RESB1-MATNR.    ELSE.      MOVE IT_RESB1 TO IT_RESB.*      MOVE-CORRESPONDING IT_RESB1 TO IT_RESB.      READ TABLE IT_TEMP WITH KEY AUFNR = IT_RESB-AUFNR.      IF SY-SUBRC = 0.        IT_RESB-OBJNR = IT_TEMP-OBJNR.      ENDIF.      APPEND IT_RESB.    ENDIF.  ENDLOOP.  SELECT MATNR MAKTX    INTO CORRESPONDING FIELDS OF TABLE IT_MAKT    FROM MAKT    FOR ALL ENTRIES IN IT_RESB    WHERE MATNR EQ IT_RESB-MATNR    AND SPRAS EQ 'EN'.

  1. ENDFORM.                    " IT_RESB

*&---------------------------------------------------------------------**&      Form IT_COEP*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  --> p1        text*  <-- p2        text*----------------------------------------------------------------------*FORM IT_COEP .  CLEAR COEP_TEMP.  REFRESH COEP_TEMP.  COEP_TEMP[] = IT_COEP1[].  SORT COEP_TEMP BY OBJNR MATNR PERIO DESCENDING.  CLEAR IT_COEP1.  REFRESH IT_COEP1.  LOOP AT COEP_TEMP.    IF IT_COEP1-OBJNR EQ COEP_TEMP-OBJNR AND IT_COEP1-MATNR EQ COEP_TEMP-MATNR AND IT_COEP1-PERIO = COEP_TEMP-PERIO.      CLEAR : WOGBTR,MEGBTR,MBGBTR.      WOGBTR = IT_COEP1-WOGBTR + COEP_TEMP-WOGBTR.      MEGBTR = IT_COEP1-MEGBTR + COEP_TEMP-MEGBTR.      MBGBTR = IT_COEP1-MBGBTR + COEP_TEMP-MBGBTR.      CLEAR : IT_COEP1-WOGBTR,IT_COEP1-MEGBTR,IT_COEP1-MBGBTR.      IT_COEP1-WOGBTR = WOGBTR.      IT_COEP1-MEGBTR = MEGBTR.      IT_COEP1-MBGBTR = MBGBTR.      MODIFY IT_COEP1 TRANSPORTING WOGBTR MEGBTR MBGBTR                      WHERE OBJNR = COEP_TEMP-OBJNR                      AND MATNR = COEP_TEMP-MATNR                      AND PERIO = COEP_TEMP-PERIO.    ELSE.      MOVE COEP_TEMP TO IT_COEP1.*      MOVE-CORRESPONDING COEP_TEMP TO IT_COEP1.      APPEND IT_COEP1. " DATA WITH ALL PERIOD LESS THAN OR EQUAL TO ENTERED PERIOD    ENDIF.  ENDLOOP.  CLEAR : COEP_TEMP,IT_COEP2,IT_COEP3.  REFRESH : COEP_TEMP, IT_COEP2,IT_COEP3.  LOOP AT IT_COEP1.    IF IT_COEP1-PERIO <> PERIO.      IF IT_COEP2-OBJNR = IT_COEP1-OBJNR AND IT_COEP2-MATNR = IT_COEP1-MATNR.        CLEAR : WOGBTR,MEGBTR,MBGBTR.        WOGBTR = IT_COEP2-WOGBTR + IT_COEP1-WOGBTR.        MEGBTR = IT_COEP2-MEGBTR + IT_COEP1-MEGBTR.        MBGBTR = IT_COEP2-MBGBTR + IT_COEP1-MBGBTR.        CLEAR : IT_COEP2-WOGBTR,IT_COEP2-MEGBTR,IT_COEP2-MBGBTR.        IT_COEP2-WOGBTR = WOGBTR.        IT_COEP2-MEGBTR = MEGBTR.IT_COEP2-MBGBTR = MBGBTR.        MODIFY IT_COEP2 TRANSPORTING WOGBTR MEGBTR MBGBTR                        WHERE OBJNR = IT_COEP1-OBJNR                        AND MATNR = IT_COEP1-MATNR.*                        AND PERIO = IT_COEP1-PERIO.      ELSE.        MOVE IT_COEP1 TO IT_COEP2.*        MOVE-CORRESPONDING IT_COEP1 TO IT_COEP2.        APPEND IT_COEP2." DATA WITHOUT ENTERED PERIOD      ENDIF.    ELSE.      IF IT_COEP3-OBJNR = IT_COEP1-OBJNR AND IT_COEP3-MATNR = IT_COEP1-MATNR.        CLEAR : WOGBTR,MEGBTR,MBGBTR.        WOGBTR = IT_COEP3-WOGBTR + IT_COEP1-WOGBTR.        MEGBTR = IT_COEP3-MEGBTR + IT_COEP1-MEGBTR.        MBGBTR = IT_COEP3-MBGBTR + IT_COEP1-MBGBTR.        CLEAR : IT_COEP3-WOGBTR,IT_COEP3-MEGBTR,IT_COEP3-MBGBTR.        IT_COEP3-WOGBTR = WOGBTR.        IT_COEP3-MEGBTR = MEGBTR.        IT_COEP3-MBGBTR = MBGBTR.        MODIFY IT_COEP2 TRANSPORTING WOGBTR MEGBTR MBGBTR                        WHERE OBJNR = IT_COEP1-OBJNR                        AND MATNR = IT_COEP1-MATNR                        AND PERIO = IT_COEP1-PERIO.      ELSE.        MOVE IT_COEP1 TO IT_COEP3.*        MOVE-CORRESPONDING IT_COEP1 TO IT_COEP3.        APPEND IT_COEP3." DATA WITH ENTERED PERIOD      ENDIF.    ENDIF.    IF IT_COEP1-GJAHR <> GJAHR.      IF IT_COEP6-OBJNR = IT_COEP1-OBJNR AND IT_COEP6-MATNR = IT_COEP1-MATNR.        CLEAR : WOGBTR,MEGBTR,MBGBTR.        WOGBTR = IT_COEP6-WOGBTR + IT_COEP1-WOGBTR.        MEGBTR = IT_COEP6-MEGBTR + IT_COEP1-MEGBTR.MBGBTR = IT_COEP6-MBGBTR + IT_COEP1-MBGBTR.        CLEAR : IT_COEP6-WOGBTR,IT_COEP6-MEGBTR,IT_COEP6-MBGBTR.        IT_COEP6-WOGBTR = WOGBTR.        IT_COEP6-MEGBTR = MEGBTR.        IT_COEP6-MBGBTR = MBGBTR.        MODIFY IT_COEP6 TRANSPORTING WOGBTR MEGBTR MBGBTR                        WHERE OBJNR = IT_COEP1-OBJNR                        AND MATNR = IT_COEP1-MATNR.*                        AND PERIO = IT_COEP1-PERIO.      ELSE.        MOVE IT_COEP1 TO IT_COEP6.*        MOVE-CORRESPONDING IT_COEP1 TO IT_COEP6.        APPEND IT_COEP6." DATA WITHOUT ENTERED YEAR      ENDIF.    ELSE.      IF IT_COEP7-OBJNR = IT_COEP1-OBJNR AND IT_COEP7-MATNR = IT_COEP1-MATNR.        CLEAR : WOGBTR,MEGBTR,MBGBTR.        WOGBTR = IT_COEP7-WOGBTR + IT_COEP1-WOGBTR.        MEGBTR = IT_COEP7-MEGBTR + IT_COEP1-MEGBTR.        MBGBTR = IT_COEP7-MBGBTR + IT_COEP1-MBGBTR.        CLEAR : IT_COEP7-WOGBTR,IT_COEP7-MEGBTR,IT_COEP7-MBGBTR.        IT_COEP7-WOGBTR = WOGBTR.        IT_COEP7-MEGBTR = MEGBTR.        IT_COEP7-MBGBTR = MBGBTR.        MODIFY IT_COEP7 TRANSPORTING WOGBTR MEGBTR MBGBTR                        WHERE OBJNR = IT_COEP1-OBJNR                        AND MATNR = IT_COEP1-MATNR.*                        AND PERIO = IT_COEP1-PERIO.      ELSE.        MOVE IT_COEP1 TO IT_COEP7.*        MOVE-CORRESPONDING IT_COEP1 TO IT_COEP7.        APPEND IT_COEP7." DATA WITHOUT ENTERED YEAR      ENDIF.    ENDIF.  ENDLOOP.  COEP_TEMP[] = IT_COEP[].  CLEAR : IT_COEP.  REFRESH IT_COEP.  SORT COEP_TEMP BY OBJNR MATNR DESCENDING.  LOOP AT COEP_TEMP.    IF IT_COEP-OBJNR EQ COEP_TEMP-OBJNR AND IT_COEP-MATNR EQ COEP_TEMP-MATNR.      CLEAR : WOGBTR,MEGBTR,MBGBTR.      WOGBTR = IT_COEP-WOGBTR + COEP_TEMP-WOGBTR.      MEGBTR = IT_COEP-MEGBTR + COEP_TEMP-MEGBTR.      MBGBTR = IT_COEP-MBGBTR + COEP_TEMP-MBGBTR.      CLEAR : IT_COEP-WOGBTR,IT_COEP-MEGBTR,IT_COEP-MBGBTR.      IT_COEP-WOGBTR = WOGBTR.      IT_COEP-MEGBTR = MEGBTR.      IT_COEP-MBGBTR = MBGBTR.      MODIFY IT_COEP TRANSPORTING WOGBTR MEGBTR MBGBTR  WHERE OBJNR EQ COEP_TEMP-OBJNR AND MATNR EQ COEP_TEMP-MATNR.    ELSE.      MOVE COEP_TEMP TO IT_COEP.*      MOVE-CORRESPONDING COEP_TEMP TO IT_COEP.      APPEND IT_COEP. " DATA WITH LESS THAN OR EQUAL TO ENTERED DATE    ENDIF.  ENDLOOP.

  1. ENDFORM.                    " IT_COEP

*&---------------------------------------------------------------------**&      Form FILL_FINAL*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  --> p1        text*  <-- p2        text*----------------------------------------------------------------------*FORM FILL_FINAL .  LOOP AT IT_RESB.    CLEAR WA_FINAL.    ON CHANGE OF IT_RESB-AUFNR.      CLEAR SRNO.      WA_FINAL-SR_NO = 0.    ENDON.    WA_FINAL-SR_NO = WA_FINAL-SR_NO + SRNO + 1.    CLEAR SRNO.     WA_FINAL-CMATNR = IT_RESB-MATNR.    WA_FINAL-REMNG  = IT_RESB-BDMNG.    WA_FINAL-RMEINS  = IT_RESB-MEINS.    WA_FINAL-AUFNR  = IT_RESB-AUFNR.     READ TABLE IT_TEMP WITH KEY AUFNR = WA_FINAL-AUFNR.    IF SY-SUBRC EQ 0.      WA_FINAL-OBJNR = IT_TEMP-OBJNR.      WA_FINAL-POSNR = IT_TEMP-POSNR.      WA_FINAL-GSTRS = IT_TEMP-GSTRS.      WA_FINAL-MEINS = IT_TEMP-MEINS.      WA_FINAL-MATNR = IT_TEMP-MATNR.      WA_FINAL-PSMNG = IT_TEMP-GAMNG.      WA_FINAL-STLNR = IT_TEMP-STLNR.      WA_FINAL-DATUV = IT_TEMP-SDATV.      WA_FINAL-ANDAT = IT_TEMP-AUFLD.    ENDIF.     READ TABLE IT_MDFA WITH KEY AUFNR = WA_FINAL-AUFNR                                  MATNR = WA_FINAL-MATNR.    IF SY-SUBRC EQ 0.      WA_FINAL-WEMNG = IT_MDFA-WEMNG.    ENDIF.     READ TABLE IT_MAKT WITH KEY MATNR = WA_FINAL-CMATNR.    IF SY-SUBRC EQ 0.      WA_FINAL-CMAKTX = IT_MAKT-MAKTX.    ENDIF.     READ TABLE IT_MAKT1 WITH KEY MATNR = WA_FINAL-MATNR.    IF SY-SUBRC EQ 0.      WA_FINAL-MAKTX = IT_MAKT1-MAKTX.    ENDIF.     READ TABLE IT_STPO WITH KEY STLNR = WA_FINAL-STLNR                                  IDNRK = WA_FINAL-CMATNR.    IF SY-SUBRC EQ 0.      WA_FINAL-IDNRK = IT_STPO-IDNRK.      WA_FINAL-BOMNG = IT_STPO-MENGE.      WA_FINAL-BOM   = 'Y'.    ELSE.      WA_FINAL-BOM = 'N'.    ENDIF.     READ TABLE IT_COEP WITH KEY OBJNR = WA_FINAL-OBJNR                                MATNR = WA_FINAL-CMATNR.    IF SY-SUBRC = 0.      WA_FINAL-MEGBTR = IT_COEP-MEGBTR.      WA_FINAL-WOGBTR = IT_COEP-WOGBTR.      WA_FINAL-MBGBTR = IT_COEP-MBGBTR.WA_FINAL-BUDAT = IT_COEP-BUDAT.      DELETE IT_COEP WHERE OBJNR EQ WA_FINAL-OBJNR AND MATNR EQ WA_FINAL-CMATNR.    ENDIF.    IF WA_FINAL-CMATNR IS INITIAL.      CMATNR = 0.    ELSE.      CMATNR = 1.    ENDIF.    CASE CMATNR.      WHEN '0'.        WA_FINAL-AVALUE = WA_FINAL-WOGBTR.        WA_FINAL-PEMNG = WA_FINAL-PSMNG - WA_FINAL-WEMNG.        WA_FINAL-STMNG = WA_FINAL-MBGBTR - ( WA_FINAL-WEMNG * WA_FINAL-BOMNG ).      WHEN '1'.        WA_FINAL-PEMNG = WA_FINAL-PSMNG - WA_FINAL-WEMNG.        IF WA_FINAL-CMATNR <> WA_FINAL-MATNR.          IF WA_FINAL-BOM = 'Y'.            WA_FINAL-STMNG = WA_FINAL-MBGBTR - ( WA_FINAL-WEMNG * WA_FINAL-BOMNG ).          ENDIF.        ELSE.          WA_FINAL-STMNG = WA_FINAL-MBGBTR * ( -1 ).        ENDIF.      WHEN OTHERS.    ENDCASE.    SRNO = WA_FINAL-SR_NO.    APPEND WA_FINAL TO IT_FINAL.  ENDLOOP.  IF IT_FINAL[] IS NOT INITIAL.    SORT IT_FINAL BY AUFNR OBJNR SR_NO DESCENDING.    SORT IT_COEP BY OBJNR MATNR.    IF IT_COEP[] IS NOT INITIAL.      PERFORM FINAL.    ENDIF.  ENDIF.

  1. ENDFORM.                    " FILL_FINAL

*&---------------------------------------------------------------------**&      Form FINAL*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  --> p1        text*  <-- p2        text*----------------------------------------------------------------------*FORM FINAL .*  IF IT_COEP[] IS NOT INITIAL.    LOOP AT IT_COEP.      CLEAR WA_FINAL.      IF IT_COEP-MATNR IS INITIAL.        READ TABLE IT_FINAL INTO WA_FINAL  WITH KEY OBJNR = IT_COEP-OBJNR.        IF SY-SUBRC = 0.          WA_FINAL-SR_NO = WA_FINAL-SR_NO + 1.          WA_FINAL-CMATNR = IT_COEP-MATNR.          WA_FINAL-RMEINS = IT_COEP-MEINB.          WA_FINAL-MEGBTR = IT_COEP-MEGBTR.          WA_FINAL-MBGBTR = IT_COEP-MBGBTR.          WA_FINAL-WOGBTR = IT_COEP-WOGBTR.          WA_FINAL-BUDAT = IT_COEP-BUDAT.          CLEAR : WA_FINAL-POSNR,WA_FINAL-GSTRS,WA_FINAL-STLNR,WA_FINAL-DATUV,WA_FINAL-ANDAT,WA_FINAL-IDNRK,WA_FINAL-BOMNG,WA_FINAL-REMNG,WA_FINAL-STMNG,WA_FINAL-AVALUE1,WA_FINAL-AVALUE2,WA_FINAL-AVALUE,WA_FINAL-CMAKTX,WA_FINAL-BOM.          CLEAR SRNO.          SRNO = WA_FINAL-SR_NO.          APPEND WA_FINAL TO IT_FINAL.        ENDIF.      ELSE.        CLEAR WA_FINAL.        READ TABLE IT_FINAL INTO WA_FINAL  WITH KEY OBJNR = IT_COEP-OBJNRMATNR = IT_COEP-MATNR.        IF SY-SUBRC = 0.          IF SRNO IS NOT INITIAL.            WA_FINAL-SR_NO = SRNO + 1.          ELSE.            WA_FINAL-SR_NO = WA_FINAL-SR_NO + 1.          ENDIF.          WA_FINAL-CMATNR = IT_COEP-MATNR.          WA_FINAL-CMAKTX = WA_FINAL-MAKTX.          WA_FINAL-RMEINS = WA_FINAL-MEINS.          WA_FINAL-MBGBTR = IT_COEP-MBGBTR.          WA_FINAL-STMNG = IT_COEP-MBGBTR * ( -1 ).          WA_FINAL-WOGBTR = IT_COEP-WOGBTR.          WA_FINAL-BUDAT = IT_COEP-BUDAT.          CLEAR : WA_FINAL-POSNR,WA_FINAL-GSTRS,WA_FINAL-STLNR,WA_FINAL-DATUV,WA_FINAL-ANDAT,WA_FINAL-IDNRK,WA_FINAL-BOMNG,WA_FINAL-REMNG,WA_FINAL-MEGBTR,WA_FINAL-AVALUE1,WA_FINAL-AVALUE2,WA_FINAL-AVALUE,WA_FINAL-BOM.          APPEND WA_FINAL TO IT_FINAL.        ELSE.          READ TABLE IT_FINAL INTO WA_FINAL  WITH KEY OBJNR = IT_COEP-OBJNR.          IF SY-SUBRC = 0.            IF SRNO IS NOT INITIAL.              WA_FINAL-SR_NO = SRNO + 1.            ELSE.              WA_FINAL-SR_NO = WA_FINAL-SR_NO + 1.            ENDIF.            WA_FINAL-CMATNR = IT_COEP-MATNR.            WA_FINAL-RMEINS = IT_COEP-MEINB.            WA_FINAL-MEGBTR = IT_COEP-MEGBTR.            WA_FINAL-MBGBTR = IT_COEP-MBGBTR.            WA_FINAL-STMNG = IT_COEP-MBGBTR * ( -1 ).            WA_FINAL-WOGBTR = IT_COEP-WOGBTR.            WA_FINAL-BUDAT = IT_COEP-BUDAT.            CLEAR : WA_FINAL-POSNR,WA_FINAL-GSTRS,WA_FINAL-STLNR,WA_FINAL-DATUV,WA_FINAL-ANDAT,WA_FINAL-IDNRK,WA_FINAL-BOMNG,WA_FINAL-REMNG,WA_FINAL-STMNG,WA_FINAL-AVALUE1,WA_FINAL-AVALUE2,WA_FINAL-AVALUE,WA_FINAL-CMAKTX,WA_FINAL-BOM.            CLEAR SRNO.            SRNO = WA_FINAL-SR_NO.            APPEND WA_FINAL TO IT_FINAL.          ENDIF.        ENDIF.      ENDIF.    ENDLOOP.    SORT IT_FINAL BY AUFNR OBJNR MATNR SR_NO ASCENDING.*  ENDIF.  IF IT_FINAL[] IS NOT INITIAL.    PERFORM PERIOD_CHANGE.  ENDIF.

  1. ENDFORM.                    " FINAL

*&---------------------------------------------------------------------**&      Form PERIOD_CHANGE*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  --> p1        text*  <-- p2        text*----------------------------------------------------------------------*FORM PERIOD_CHANGE .  LOOP AT IT_FINAL INTO WA_FINAL.    READ TABLE IT_WIP WITH KEY OBJNR = WA_FINAL-OBJNR.    IF SY-SUBRC = 0.      IF IT_WIP-WRT IS NOT INITIAL.        IF IT_WIP-BEWER IS INITIAL.          READ TABLE IT_COEP6 WITH KEY OBJNR = WA_FINAL-OBJNR                                     MATNR = WA_FINAL-CMATNR.          IF SY-SUBRC = 0.            WA_FINAL-AVALUE1 = IT_COEP6-WOGBTR * ( -1 ).          ENDIF.        ELSE.          READ TABLE IT_COEP7 WITH KEY OBJNR = WA_FINAL-OBJNR                           MATNR = WA_FINAL-CMATNR.              IF SY-SUBRC = 0.                WA_FINAL-AVALUE1 = IT_COEP7-WOGBTR.              ENDIF.*          CASE IT_WIP-WIPTYP.*            WHEN 'Res. for Unrealized Costs'.*              READ TABLE IT_COEP4 WITH KEY OBJNR = WA_FINAL-OBJNR*                           MATNR = WA_FINAL-CMATNR.*              IF SY-SUBRC = 0.*                WA_FINAL-AVALUE1 = IT_COEP4-WOGBTR.*              ENDIF.*            WHEN 'Inventory (WIP)'.*              READ TABLE IT_COEP2 WITH KEY OBJNR = WA_FINAL-OBJNR*                           MATNR = WA_FINAL-CMATNR.*              IF SY-SUBRC = 0.*                WA_FINAL-AVALUE1 = IT_COEP2-WOGBTR.*              ENDIF.*            WHEN OTHERS.*          ENDCASE.        ENDIF.ENDIF.      IF IT_WIP-WRTK IS INITIAL.        CLEAR WA_FINAL-WOGBTR.      ENDIF.      MODIFY IT_FINAL FROM WA_FINAL TRANSPORTING WOGBTR AVALUE1.    ENDIF.  ENDLOOP.

  1. ENDFORM.                    " PERIOD_CHANGE

*&---------------------------------------------------------------------**&      Form FIELDCAT*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  --> p1        text*  <-- p2        text*----------------------------------------------------------------------*FORM FIELDCAT .  DATA : POS TYPE INT1 VALUE 0.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-KEY = 'X'.  IT_FIELDCAT-FIELDNAME = 'AUFNR'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'Order Number'.  IT_FIELDCAT-OUTPUTLEN = 12.  IT_FIELDCAT-EMPHASIZE = 'X'.  APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-KEY = 'X'.  IT_FIELDCAT-FIELDNAME = 'MATNR'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'Material'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-KEY = 'X'.  IT_FIELDCAT-FIELDNAME = 'MAKTX'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'Material Description'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-KEY = 'X'.  IT_FIELDCAT-FIELDNAME = 'PSMNG'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'Oreder Quantity'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-KEY = 'X'.  IT_FIELDCAT-FIELDNAME = 'WEMNG'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'Confirm Quantity'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.  IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-KEY = 'X'.  IT_FIELDCAT-FIELDNAME = 'PEMNG'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'Pending Quantity'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-FIELDNAME = 'CMATNR'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'Require Matrial'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-FIELDNAME = 'CMAKTX'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'Require Material Description'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-FIELDNAME = 'REMNG'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'Require Quantity'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-FIELDNAME = 'MBGBTR'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'Issue Quantity'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-FIELDNAME = 'STMNG'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'WIP Quantity'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-FIELDNAME = 'RMEINS'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'UOM'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-FIELDNAME = 'WOGBTR'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'WIP Value'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT. *CLEAR IT_FIELDCAT.*POS = POS + 1.*IT_FIELDCAT-COL_POS = POS.**IT_FIELDCAT-FIX_COLUMN = 'X'.*IT_FIELDCAT-FIELDNAME = 'AVALUE'.*IT_FIELDCAT-TABNAME = 'IT_FINAL'.*IT_FIELDCAT-SELTEXT_L = 'WIP Value'.*IT_FIELDCAT-OUTPUTLEN = 12.*APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-FIELDNAME = 'AVALUE1'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'WIP Value (Period Change)'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-FIELDNAME = 'BUDAT'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'Posting Date'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT.   CLEAR IT_FIELDCAT.  POS = POS + 1.  IT_FIELDCAT-COL_POS = POS.*IT_FIELDCAT-FIX_COLUMN = 'X'.  IT_FIELDCAT-FIELDNAME = 'BOM'.  IT_FIELDCAT-TABNAME = 'IT_FINAL'.  IT_FIELDCAT-SELTEXT_L = 'BOM Material'.  IT_FIELDCAT-OUTPUTLEN = 12.  APPEND IT_FIELDCAT.

  1. ENDFORM.                    " FIELDCAT

*&---------------------------------------------------------------------**&      Form DISPLAY*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  --> p1        text*  <-- p2        text*----------------------------------------------------------------------*FORM DISPLAY .  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'    EXPORTING      I_CALLBACK_PROGRAM     = SY-CPROG      I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE '      IS_LAYOUT              = IT_LAYOUT      IT_FIELDCAT            = IT_FIELDCAT[]      IT_SORT                = IT_SORT[]      IT_EVENTS              = IT_EVENT[]      I_DEFAULT              = 'X'      I_SAVE                 = 'A'    TABLES      T_OUTTAB = IT_FINAL    EXCEPTIONS      PROGRAM_ERROR          = 1      OTHERS                 = 2.  IF SY-SUBRC <> 0.    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.  ENDIF.

  1. ENDFORM.                    " DISPLAY

*&---------------------------------------------------------------------**&      Form TOP_OF_PAGE*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  --> p1        text*  <-- p2        text*----------------------------------------------------------------------*FORM top_of_page .  REFRESH GT_TOP.  GW_TOP-TYP = 'H'.  GW_TOP-INFO = 'Atul Auto Ltd.'.  APPEND GW_TOP TO GT_TOP.  CLEAR GW_TOP.   GW_TOP-TYP = 'S'.  GW_TOP-INFO = 'Work In Progress Report'.  APPEND GW_TOP TO GT_TOP.  CLEAR GW_TOP.  IF S_BUDAT-HIGH IS INITIAL.    S_BUDAT-HIGH = S_BUDAT-LOW.    CLEAR S_BUDAT-LOW.    S_BUDAT-LOW = '19000101'.  ENDIF.  CONCATENATE 'Date : ' SPACE(1) S_BUDAT-LOW+6(2)  '-' S_BUDAT-LOW+4(2)    '-' S_BUDAT-LOW(4) SPACE(1)   ' To ' SPACE(1) S_BUDAT-HIGH+6(2) '-' S_BUDAT-HIGH+4(2) '-'  S_BUDAT-HIGH(4)    INTO GW_TOP-INFO.  GW_TOP-TYP = 'S'.  APPEND GW_TOP TO GT_TOP.  CLEAR GW_TOP.   CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'    EXPORTING      it_list_commentary       = GT_TOP     I_LOGO                   = 'ATUL_LOGO'*     I_END_OF_LIST_GRID       =*     I_ALV_FORM               =            .

  1. ENDFORM.                    " TOP_OF_PAGE

*&---------------------------------------------------------------------**&      Form SORT*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  --> p1        text*  <-- p2        text*----------------------------------------------------------------------*FORM SORT .  IT_FIELDCAT-DO_SUM = 'X'.  MODIFY IT_FIELDCAT TRANSPORTING DO_SUM WHERE FIELDNAME = 'WOGBTR'.  MODIFY IT_FIELDCAT TRANSPORTING DO_SUM WHERE FIELDNAME = 'AVALUE'.  MODIFY IT_FIELDCAT TRANSPORTING DO_SUM WHERE FIELDNAME = 'AVALUE1'.   WA_SORT-SPOS = '01' .  WA_SORT-FIELDNAME = 'AUFNR'.  WA_SORT-SUBTOT = 'X'.  APPEND WA_SORT TO IT_SORT .  CLEAR WA_SORT.   WA_SORT-SPOS = '02' .  WA_SORT-FIELDNAME = 'MATNR'.  APPEND WA_SORT TO IT_SORT .  CLEAR WA_SORT.   WA_SORT-SPOS = '03' .  WA_SORT-FIELDNAME = 'MAKTX'.  APPEND WA_SORT TO IT_SORT .  CLEAR WA_SORT.   WA_SORT-SPOS = '04' .  WA_SORT-FIELDNAME = 'PSMNG'.  APPEND WA_SORT TO IT_SORT .  CLEAR WA_SORT.   WA_SORT-SPOS = '05' .  WA_SORT-FIELDNAME = 'WEMNG'.  APPEND WA_SORT TO IT_SORT .  CLEAR WA_SORT.   WA_SORT-SPOS = '06' .  WA_SORT-FIELDNAME = 'PEMNG'.  APPEND WA_SORT TO IT_SORT .  CLEAR WA_SORT.

  1. ENDFORM.                    " SORT

*&---------------------------------------------------------------------**&      Form EVENT_GET*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  --> p1        text*  <-- p2        text*----------------------------------------------------------------------*FORM EVENT_GET .  CONSTANTS : C_FORMNAME_SUBTOTAL_TEXT TYPE SLIS_FORMNAME VALUE 'SUBTOTAL_TEXT'.  DATA : L_S_EVENT TYPE SLIS_ALV_EVENT.   CALL FUNCTION 'REUSE_ALV_EVENTS_GET'    EXPORTING      I_LIST_TYPE     = 4    IMPORTING      ET_EVENTS       = IT_EVENT    EXCEPTIONS      LIST_TYPE_WRONG = 0      OTHERS          = 0.   READ TABLE IT_EVENT INTO L_S_EVENT WITH KEY NAME = SLIS_EV_SUBTOTAL_TEXT.  IF SY-SUBRC EQ 0.    MOVE C_FORMNAME_SUBTOTAL_TEXT TO L_S_EVENT-FORM.    MODIFY IT_EVENT FROM L_S_EVENT INDEX SY-TABIX.  ENDIF.

  1. ENDFORM.                    " EVENT_GET

*&---------------------------------------------------------------------**&      Form SUBTOTAL_TEXT*&---------------------------------------------------------------------**       Build SUBTOTAL_TEXT*----------------------------------------------------------------------**       P_total Total*       p_subtot_text Subtotal text info*----------------------------------------------------------------------*FORM SUBTOTAL_TEXT CHANGING*               P_TOTAL TYPE ANY               P_SUBTOT_TEXT TYPE SLIS_SUBTOT_TEXT.   IF P_SUBTOT_TEXT-CRITERIA = 'AUFNR'.    P_SUBTOT_TEXT-DISPLAY_TEXT_FOR_SUBTOTAL = 'Production Order Level total'(010).  ENDIF.

  1. ENDFORM.                    "SUBTOTAL_TEXT

*&---------------------------------------------------------------------**&      Form LAYOUT*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  --> p1        text*  <-- p2        text*----------------------------------------------------------------------*FORM LAYOUT .  CLEAR IT_LAYOUT.*  IT_LAYOUT-ZEBRA = 'X'.  IT_LAYOUT-NO_INPUT = 'X'.  IT_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.  IT_LAYOUT-TOTALS_TEXT = 'TOTALS'(201).  IT_LAYOUT-COLTAB_FIELDNAME = 'CELLCOLOR'.

  1. ENDFORM.                    " LAYOUT

*&---------------------------------------------------------------------**&      Form SET_CELL_COLOURS*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  --> p1        text*  <-- p2        text*----------------------------------------------------------------------*FORM SET_CELL_COLOURS .  DATA: WA_CELLCOLOR TYPE LVC_S_SCOL.  DATA: LD_INDEX TYPE SY-TABIX.  LOOP AT IT_FINAL INTO WA_FINAL." WHERE CMATNR EQ WA_FINAL-MATNR.    LD_INDEX = SY-TABIX.     IF WA_FINAL-CMATNR EQ WA_FINAL-MATNR.      WA_CELLCOLOR-FNAME = 'AVALUE'.      WA_CELLCOLOR-COLOR-COL = 6.  "color code 1-7, if outside rage defaults to 7      WA_CELLCOLOR-COLOR-INT = '0'.  "1 = Intensified on, 0 = Intensified off      WA_CELLCOLOR-COLOR-INV = '0'.  "1 = text colour, 0 = background colour      APPEND WA_CELLCOLOR TO WA_FINAL-CELLCOLOR.      MODIFY IT_FINAL FROM WA_FINAL INDEX LD_INDEX TRANSPORTING CELLCOLOR.      WA_CELLCOLOR-FNAME = 'WOGBTR'.      WA_CELLCOLOR-COLOR-COL = 6.  "color code 1-7, if outside rage defaults to 7      WA_CELLCOLOR-COLOR-INT = '0'.  "1 = Intensified on, 0 = Intensified off      WA_CELLCOLOR-COLOR-INV = '0'.  "1 = text colour, 0 = background colour       APPEND WA_CELLCOLOR TO WA_FINAL-CELLCOLOR.      MODIFY IT_FINAL FROM WA_FINAL INDEX LD_INDEX TRANSPORTING CELLCOLOR.    ENDIF.*  ENDLOOP.*  LOOP AT IT_FINAL INTO WA_FINAL WHERE BOM EQ 'N'.*       LD_INDEX = SY-TABIX.    IF WA_FINAL-BOM EQ 'N'.      WA_CELLCOLOR-FNAME = 'CMATNR'.      WA_CELLCOLOR-COLOR-COL = 6.  "color code 1-7, if outside rage defaults to 7      WA_CELLCOLOR-COLOR-INT = '0'.  "1 = Intensified on, 0 = Intensified off      WA_CELLCOLOR-COLOR-INV = '0'.  "1 = text colour, 0 = background colour      APPEND WA_CELLCOLOR TO WA_FINAL-CELLCOLOR.       WA_CELLCOLOR-FNAME = 'CMAKTX'.      WA_CELLCOLOR-COLOR-COL = 6.  "color code 1-7, if outside rage defaults to 7      WA_CELLCOLOR-COLOR-INT = '0'.  "1 = Intensified on, 0 = Intensified off      WA_CELLCOLOR-COLOR-INV = '0'.  "1 = text colour, 0 = background colour      APPEND WA_CELLCOLOR TO WA_FINAL-CELLCOLOR.       WA_CELLCOLOR-FNAME = 'REMNG'.      WA_CELLCOLOR-COLOR-COL = 6.  "color code 1-7, if outside rage defaults to 7      WA_CELLCOLOR-COLOR-INT = '0'.  "1 = Intensified on, 0 = Intensified off      WA_CELLCOLOR-COLOR-INV = '0'.  "1 = text colour, 0 = background colour      APPEND WA_CELLCOLOR TO WA_FINAL-CELLCOLOR.       WA_CELLCOLOR-FNAME = 'MBGBTR'.      WA_CELLCOLOR-COLOR-COL = 6.  "color code 1-7, if outside rage defaults to 7      WA_CELLCOLOR-COLOR-INT = '0'.  "1 = Intensified on, 0 = Intensified off      WA_CELLCOLOR-COLOR-INV = '0'.  "1 = text colour, 0 = background colour      APPEND WA_CELLCOLOR TO WA_FINAL-CELLCOLOR. WA_CELLCOLOR-FNAME = 'STMNG'.      WA_CELLCOLOR-COLOR-COL = 6.  "color code 1-7, if outside rage defaults to 7      WA_CELLCOLOR-COLOR-INT = '0'.  "1 = Intensified on, 0 = Intensified off      WA_CELLCOLOR-COLOR-INV = '0'.  "1 = text colour, 0 = background colour      APPEND WA_CELLCOLOR TO WA_FINAL-CELLCOLOR.       WA_CELLCOLOR-FNAME = 'RMEINS'.      WA_CELLCOLOR-COLOR-COL = 6.  "color code 1-7, if outside rage defaults to 7      WA_CELLCOLOR-COLOR-INT = '0'.  "1 = Intensified on, 0 = Intensified off      WA_CELLCOLOR-COLOR-INV = '0'.  "1 = text colour, 0 = background colour      APPEND WA_CELLCOLOR TO WA_FINAL-CELLCOLOR.       WA_CELLCOLOR-FNAME = 'WOGBTR'.      WA_CELLCOLOR-COLOR-COL = 6.  "color code 1-7, if outside rage defaults to 7      WA_CELLCOLOR-COLOR-INT = '0'.  "1 = Intensified on, 0 = Intensified off      WA_CELLCOLOR-COLOR-INV = '0'.  "1 = text colour, 0 = background colour      APPEND WA_CELLCOLOR TO WA_FINAL-CELLCOLOR.       WA_CELLCOLOR-FNAME = 'AVALUE'.      WA_CELLCOLOR-COLOR-COL = 6.  "color code 1-7, if outside rage defaults to 7      WA_CELLCOLOR-COLOR-INT = '0'.  "1 = Intensified on, 0 = Intensified off      WA_CELLCOLOR-COLOR-INV = '0'.  "1 = text colour, 0 = background colour      APPEND WA_CELLCOLOR TO WA_FINAL-CELLCOLOR.       WA_CELLCOLOR-FNAME = 'BUDAT'.      WA_CELLCOLOR-COLOR-COL = 6.  "color code 1-7, if outside rage defaults to 7      WA_CELLCOLOR-COLOR-INT = '0'.  "1 = Intensified on, 0 = Intensified off      WA_CELLCOLOR-COLOR-INV = '0'.  "1 = text colour, 0 = background colour      APPEND WA_CELLCOLOR TO WA_FINAL-CELLCOLOR.      MODIFY IT_FINAL FROM WA_FINAL INDEX LD_INDEX TRANSPORTING CELLCOLOR.    ENDIF.  ENDLOOP.

  1. ENDFORM.                    " SET_CELL_COLOURS

Dear All,

While answering one of the post related to screen variant creation/setup for SAP transactions, I thought of preparing a small document on the same and sharing the same on forum. It might be possible that most of the SAP guru’s knowing this function but this blog will be helpful to new comers in SAP… :-)

So what’s it about… It’s about creating screen variants for SAP transactions with dynamic selections as desired.

Take an example of widely used QM transaction-QA32.

1.JPG

Above QA32 screen has a field-Lot Created On, with a date range already populated on initial screen. So how these dates are appearing? And can I set my own date range here? Can I have any other fixed value on the same screen e.g. Plant ? Number of questions can come up in mind…

To answer, yes, a respective user can set his/her own variant with specific values. I’m planning to explain it below, with few screenshots.

On Tcode-QA32 screen, click on ‘SAVE’. System will display an existing variant as below, showing a variable set for a particular field, if any.

Put your own Variant Name along with meaning.

2.JPG

As seen on above screen there are few functions available as SAP standard in variant attributes. E.g.

- Only for Background Processing: If you select the field Background only, the variant can only be executed in the background. Otherwise, it can be run both in the background and online.

- Protect Variant: If you select this field, the variant can only be changed by the person who created it or last changed it.

Based on requirement one can select/deselect it.

Search for the field on which a dynamic/variable date needs to be setup. Go to column-Type of selection variable (Third from right hand side) and click on the dropdown icon or press F4 to show the popup menu for the selection variable.

3.JPG

Double-click on the line “D” for dynamic date calculation. Selecting 'type of variable' is nothing but we are declaring the field which need dynamic date calculation.

4.JPG

To mention a dynamic value, we need to select a Variable. Click on the dropdown icon or press F4 on column-Name of variable to show available selection variables.

5.JPG

You need to select a sign field which allows to enter either "I" or "E".

  • "I" (Inclusive) means that the single value or range you specified is selected itself.
  • "E" (Exclusive) means that the single value or range you specified is excluded from the selection.

The default is "I".

Along with the sign field, need to select 'Option'. With the operators in this field, you specify whether the entered values are to be used as a single value, range, or search string for limiting data selection. Possible operators are: EQ- Equal: Single Value, NE- Not Equal: Everything Apart from the Specified Single Value, LE- Less or EQUAL: Everything <= Value in Field LOW, GT- Greater Than: Everything > Value in Field LOW, GE- Greater or Equal: Everything >= Value in Field LOW and LT-Less Than: Everything < Value in Field LOW.6.JPG7.JPG

Once you fill in selection variables on screen, click on 'SAVE'.

On transaction selection screen, click on tab-Get Variant (Shift+F5) and select your own variant. Depending upon selection variables, system will populate a particular field with required values (as below).

8.JPG

Similarly, you can even choose other operators and check effect. 9.JPG

I chose option operator as 'Less Than' and variable as 'Current Date +/- ??? days'. System will come up with a pop-up window and ask value for days.

10.JPG

Put value with sign ‘-‘ in order to have date in past from current date whereas sign ‘+’ for future date.11.JPG

Click on 'SAVE' & go back. Select your Variant to check.12.JPG

In addition to above, we can chose a variable to set a date range. For the same, choose Variable name: Current date – xxx, current date + yyy.13.JPG

System will ask for date values as below.

14.JPG

Press Enter.

15.JPG

Click on save and go back (F3). Select your variant.16.JPG

And you will see dates as per Variable selected (shown below).

17.JPG

Similar way, one can try different options of variables.

Along with it, just by adding field values on initial screen and saving the variant, system will put some fixed values. E.g. one can have his/her Plant as fixed value in his/her variant.

Hope this will help.

Thanks & Regards,

Anup

Is SAP Worth being the ERP Market Leader ?

Author: Ranjit Simon John

 

 

I am writting this blog from my limited experience gathered from working in SAP as an end user and in a ERP Product development team as an Software Engineer. So each scenarios mentioned here are from my experience.

 

The first name that comes when we think about ERP is SAP. There have been many scientific studies and researches done to figure out the market leader in the ERP industry. I would like to comment on this from various scenarios I faced while working in an ERP team, as a product development engineer and working in a Milling Industry as a ERP end user. When every practical situations come across my career  I use to compare how those scenarios are handled in SAP and how other ERP packages handle them, espically the ERP I worked.

 

Bottom line I can say SAP is the best and SAP deserves 100% to be the market leader. I have my own resans to substantiate the statement. Instead of making my thought clear I considered several factors for grading the ERP packages.

 

I will categorize them based on Priority;

 

1) Consistency of the Product, Data Consistency, Consistency in terms of run time errors, Consistency in terms of Perfomance.

2) High Level of Security; Data as well as Transcations

3) Perfomance Level

4) Ease of Monitoring

5) Ease of Support

6) Availability of Resource

7) Enhancements released

 

I have segrigated the system into two parts for easy understandig and comparison, Functional and Technical.

 

Let me explain the Funcational Point.

 

In every companie the finance department will be skeptical while moving from one technology to another, espically when it is connected to passing accounting entries. They belive that Finance departments role has shrinked  to only the role of receiving and passing invoice, rest all activites are carried out by other departments in the organization. The main reason is because in ERP most  transactions carried out by user will invoke a Finance entry, with or without the knowledge of Financne department.

 

In our situation after the ERP was implemented the most obstruction came was from the finance department. It took some time for them to adjust withe fact that financial entries are posted by most users from other departments.

 

When the user in Weigh Bridge receives a truck of raw material, raw material stock GL was hit by a debit entry affecting also the moving average price of the raw material. By month end Financne Department only received the invoice and delivered quantity and only activity they had to perform was pass the invoice.

 

Similarly from other departments also similar entries will be posted; Human Resource, Production Planning, Material Management, Sales & Distribution, Plant Maintenance.

 

Initially it was very difficult to figure out whether the entries posted were correct, from where entries has been triggered. Example if a user receives a raw material at 100 AED MAP and after one week they reversed the goods receipt due to any reason. By that time the MAP of the material has been updated by 150 AED. In this scenario if they reverse the Goods receipt a price difference account entry will be posted. Either the finance user or material management user will be aware of the price difference entry posted.

The first test that we conducted to figure out the accuracy of the entries posted was by trying to equate Material data with the following formula,

 

Opening Stock + Material Receipt - Material Consumed = Closing Stcok

 

We were not able to reach to the closing stock of materials based on the above formula by equating values generate from system, which helped to strengthen the view that system entries were not posted correctly.

 

After throughly investigation the reason for this was found. The calculation logic used by the system was 100% correct and it was the right procedure. One thing I could confirm is SAP provides the best practice, polices and procedures in every step of the operation of the business, which they implement after throughly studying and testing the operations of various companies throuogh the globe.

 

Please go through the blog for understanding the calculation logic for closing stock in SAP.

 

http://scn.sap.com/community/erp/financials/blog/2012/03/20/post-implementation-challenges-part-1

 

Another area of concern for us was the calculation of moving average price for materials especially raw materials. Certain Raw Materials will be deliverd in 1000 - 3000 deliveries and for each delivery the moving avergae price of the material will get updated.

 

We appointed a thrid party auditor for calculating th accuracy of moving avergae price calculation of raw materials and they came out with the result that SAP MAP Calculation was 100% correct.

 

System takes care of several scenarios while calculating the MAP of Material, example Material Receipt done for the same material aginst Two Different Purchase Orders with different price and reversal of delivery done etc.

 

The accuracy of the entries posted in system can be judged only after the cost sheet for the final product is preapred perfectly.

 

Please go through the blog for understanding the Calculation of Cost Sheet from SAP.

 

http://scn.sap.com/community/erp/financials/blog/2012/06/13/erp-post-implementation-challenges-part-3-preparing-the-cost-sheet

 

Let me explain the Technical Point.

 

One main feature that surprised me was the ease with which we can handle the system, For the last 10 months we are working without an onsite BASIS consultant, every week we analyze the Early Watch Reports generated by SAP and take necessary corrective actions with the help of our offshore / in house BASIS team. We are able to track each and every pulse of the system and take corrective steps at the right time.

 

Another strength of SAP that I have seen is the security level for each business process. As an administrator I can precisely assign duties to each user as per the requirement of the department manager. Ex. which user should have access to what movement type etc. I find it a very great step in terms of controlling where in the administration team can precisely check each and evry transaction to be performed by user. In the ERP product I worked for we have limitation in restricting the user access beyond a certian limit.

 

The Authorization concept in SAP is well defined to fit in to business stream. SAP has clearly beifercated the authorization level into various sectors,

Object Class, Authorization Object,  Authorization Field, Authorization Value, Authorization Profile which helps us to clearly assign duties for user.

 

Another main factor I have observed is the number of run time errors while performing business process in SAP is very very less. This is a major factor that I believe is a critical factor for industries like ours where production is running 24/7.

 

For every ERP the major concern will be after few months of implementation. Whether all the controls are in the right place, have any of the settings made after implementation has a impact on other process, whether authorizations dealt properly, movement of TRs, changes done on the system etc., all these are major concern areas. SAP provides a excellent audit management cockpit for auditing and controlling the system.

 

Please go through the document for better understanding on SAP Audit Management System;

http://scn.sap.com/docs/DOC-29892

 

Conducting Month end activites is a major area where all companies have to concentrate. SAP provides a Closing Cockpit for accomplishing the task.

For generating reports I think the most advance tool has been provided by SAP. Users dosent require too much of technical expertise for creating reports according to their choice.

Another pain area for every company is distribution of knowledge throughout the workforce. SAP has come up with a excellent tool for bridging this gap. SAP Workforce Performance Builder (WPB) is a excellent in house training software. The main advantage is the easy of use of the tool, any user in the company can create business process, SAP training manual with very little technical knowledge.

 

Also the draw backs I see in SAP is the level of user friendlyness, it requires resource with high funcational and technical knowledge to understand few process(areas) in the system.

Introduction:

Engineering Change Management is a central logistics function that can be used to change various aspects of production basic data (for example, BOMs, task lists, materials, and documents) with history (with date effectivity) or depending on specific conditions (with parameter effectivity).

 

This blog aims at providing an overview of the following ECM terminologies:

 

  • Notification
  • Engineering Change Order (ECO)
  • Engineering Objects
  • Tasks

 

 

Notification Type :
A key that determines the origin, content, and other features of service, maintenance, design and quality notifications. The notification type 54 is being considered for demonstration.

 

 

Notification:
A data record with which a user informs the Engineering, Plant Maintenance, Quality Management, or Customer Service department etc about an occurrence.
1.png

 

 

 

Transaction: IQS2

Change Catalogue: Specify the nature of the problem / notification / issue

Assign the Change Coordinator who is responsible to process the notification

Attach documents, if required

 

2.png

 

 

 

View the open notifications (Notifications to be processed by me) in the transaction IQS8.

 

3.png

 

 

The requested change to be approved by the change coordinator. The Change Coordinator approves the notification (IQS22).
4.png
Process the Notification:

Enter the additional details of the notification the respective tabs (IQS2)

Subject: Brief about the nature of the notifications & impacted objects. Set the priority of the notification.

 

24.png

 

Choose the cause of the notification

  6.png

Enter the cost estimate to resolve the issue

 

7.png

 

 

Task Creation:
Create the relevant tasks for further follow ups with other departments under notification. In this example the task for procurement department has been created & responsible person has been assigned for the task. The responsible person can view the open pending tasks for him using the transaction IQS9.
8.png

 

After creating all the relevant tasks, the Change Control Board (CCB) approves the notification for further processing. The status “APFC Approved for CCB” is user status. By setting this user status the system status will be updated automatically.
9.png

 

The responsible person of the task can view the task details in the transaction IQS9.

10.png

 

Complete the tasks assigned by the respective partners / users.

11.png

 

 

 

After obtaining the approval from CCB, the change coordinator provides his approval based on task completion.

 

12.png

 

 

Lead Change Master (LCM):

   A data record that groups several change packages for a complex change process and controls the conditions under which the change is effective such  as on a valid-from date.

 

Engineering Change Order (ECO):

 

  Change that impacts a product already in a productive environment.

 

13.png

 

 

The initial status of the ECO is 30 (ECR- Immediate Change Start)

The LCM number & the notification number are identical.

By creating the LCM with respect to ECO, the relevant tasks also will be created automatically by the system. The task to be completed by the responsible task owner as detailed already.

 

14.png

 

Processing ECO and LCM:

 

Set the status of the ECO to 57- ECO- In Validation at Engineering Department (Transaction CC02).

Set the status of the LCM also to 57 - In Validation at Engineering Department in transaction CCO2.

 

15.png

 

Adding Engineering Objects in ECO:

 

 

Click on “Object Types” Icon. Select the relevant objects for change like material master, BOM etc. In this example the material master object has been considered for demonstration.

 

16.png

 

17.png

 

 

 

After the changes have been made in the material master (Eg: Material Number 123) using this change number, the indicator “Usage” will be automatically set by the system. Now set the status of the ECO & LCM to 60 (Engineering Completed).
18.png
Technical Release of the ECO:

 

Once the indicator “Technical Release” is set, we can not withdraw.

 

19.png

 

The indicator “Technical Release” is set for the ECO. Now the ECO process is completed technically but the changes have been not moved to production environment.

 

20.png

Release LCM:

 

Set the status of LCM as 80 (Completed) and release key as “01- Global Release” for the LCM. This can not withdrawn. Without global release the changes are not included in the production environment.
21.png

 

 

 

Once the release key is set to 01 in the LCM, the ECO changes will be implemented into the production environment. The indicator “Technical Release” also will be set automatically in the LCM.
22.png

 

 

Close the notification in IQS2:
The notification will be closed with reference to the date.

 

23.png

Join the upcoming webinars and learn from other companies why they have implemented enhancement packages for SAP ERP. Gain insights into project experiences and lessons learnt from SAP customers and find out from which functionality they are actively benefiting from. The webinars are free of charge.

Next webinar:

Colgate Palmolive Company: Managing SAP ERP Upgrade with enhancement packages

Date & TimeSpeaker

Wed, April 25th, 2012
EMEA: 10-11 a.m. CET
APJ: 1:30-2:30 p.m. IST

Speaker:
Rajiv Kumar and Sanjeev Dali, Colgate Palmolive Company
Marc Steidten, SAP AG

Read more and register now!

During our Project implementation we face a situation where we were asked to find out list of user having access to some critical T Codes. Although its Basis guy cup of tea but still i would like to share my findings .

Suppose we want to search list of users having access to a critical T Code say MASS .

Objective: List of users having Access to critical T Codes like MASS

Proposed Solution

Enter T Code : AUTH

1.jpg

A Separate authorization related window will get opened

2.jpg

Follow the path shown in trailing screenshot

3.jpg

Enter the T Code for Which list of users are required ( MASS in our case)4.jpg5.jpg

Execute & you will find the list of all users having Autorisation to T Code MASS.

Hope this document will help you.

Thanks !!

Join the upcoming webinars and learn from other companies why they have implemented enhancement packages for SAP ERP. Gain insights into project experiences and lessons learnt from SAP customers and find out from which functionality they are actively benefiting from. The webinars are free of charge.


Next webinar: Why having an SAP enhancement package roadmap put IT in the driver’s seat

Date & TimeSpeaker
Thu, March, 29th, 2012
Americas: 11-12 a.m. EDT
EMEA: 5-6 p.m. CET
Viswanathan Sankara, Director of Applications, Development  and Strategy, Day & Zimmermann Inc.
Gary Yount, Project Manager and Upgrade Principal, SAP America Inc.


Read more and register now!

Filter Blog

By author:
By date:
By tag: