Pl say me how to convertg a classical report into a smart form in abap..??
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:
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.
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.
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:
·
Create a new Web Dynpro component configuration. Make sure the component name is set to FPM_FORM_UIBB_GL2.
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.
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.
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.
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.
Add your CHIPs under the context node “chipUsages Variant (1) under New -> chipUsages.
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).
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”.
There are various superclasses available for creating chart CHIPs which offer possibilities to access data from different data sources.
This article focuses on charts which read their data from an underlying POWL.
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)”.
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.
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
2. For CL_BSSP_GRAPHICS_ODATA you have to redefine the following methods
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).
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.).
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).
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.
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”.
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
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.
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!
So what do we want - well a picture is worth a thousand words so here you go:
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:
The high level steps are:
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.
Start Transaction FPB_MAINTAIN_HIER and create your own application:
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:
Run transaction POWL_TYPER and assign POWL types being used to our application.
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.
We need to create:
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.
No parameters required for All tasks
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.
etc.; except for Timesheets which looks like as follows:
Notes:
Start Transaction POWL_QUERYR and assign your queries.
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:
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.)
Name the new Application Configuration and press Application Configuration to launch the browser.
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)
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.
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.
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:
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)
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.
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:
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!
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:
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.
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:
To do this, proceed as follows:
To do this, proceed as follows:
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:
More customizing options can be found in the Business Suite Side Panel Documentation.
Example: Adding additional fields to a master data CHIP
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.
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:
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).


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.
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:





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:
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.
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.
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.
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.
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.
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.
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.
This approach may fail because it’s tricky to find appropriate search terms
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.
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.
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
You can also check out this YouTube video for more information:
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). 
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:
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.
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.
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.
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.
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.
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.
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.

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.
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 panel | A 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. |
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 master consists of three separate sub-objects which are inter-linked to each other:
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.
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 is assigned to each factory calendar.
Factory calendar contain company specific dates such as alternate working Saturdays and holidays.
T-Code : SCAL
IMG SPRO -> Time Management -> Work Schedules
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.
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.
Finally, click Year Overview and check for the dates.
All changes made to the holiday or factory calendar must be transported manually.
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 Module | Description |
|---|---|
| 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_DAY | Calculates 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.
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 2 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
*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.
*&---------------------------------------------------------------------**& 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.
*&---------------------------------------------------------------------**& 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'.
*&---------------------------------------------------------------------**& 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.
*&---------------------------------------------------------------------**& 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.
*&---------------------------------------------------------------------**& 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.
*&---------------------------------------------------------------------**& 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.
*&---------------------------------------------------------------------**& 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.
*&---------------------------------------------------------------------**& 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.
*&---------------------------------------------------------------------**& 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 = .
*&---------------------------------------------------------------------**& 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.
*&---------------------------------------------------------------------**& 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.
*&---------------------------------------------------------------------**& 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.
*&---------------------------------------------------------------------**& 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'.
*&---------------------------------------------------------------------**& 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.
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.
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.
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.
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.
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.
You need to select a sign field which allows to enter either "I" or "E".
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.
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).
Similarly, you can even choose other operators and check effect.
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.
Put value with sign ‘-‘ in order to have date in past from current date whereas sign ‘+’ for future date.
Click on 'SAVE' & go back. Select your Variant to check.
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.
System will ask for date values as below.
Press Enter.
Click on save and go back (F3). Select your variant.
And you will see dates as per Variable selected (shown below).
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.
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.
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:
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
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.
Enter the cost estimate to resolve the issue
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.
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.
Processing ECO and LCM:
Set the status of the LCM also to 57 - In Validation at Engineering Department in transaction CCO2.
Adding Engineering Objects in ECO:
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 & Time | Speaker |
|---|---|
Wed, April 25th, 2012 | Speaker: |
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
A Separate authorization related window will get opened
Follow the path shown in trailing screenshot
Enter the T Code for Which list of users are required ( MASS in our case)

Execute & you will find the list of all users having Autorisation to T Code MASS.
Hope this document will help you.
Thanks !!
Next webinar: Why having an SAP enhancement package roadmap put IT in the driver’s seat
| Date & Time | Speaker |
|---|---|
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. |