SAP Data – What good is it if you don’t use it?

A couple weeks ago, I was chatting my friend Justin, and we got into a great discussion about how businesses seem to be so poorly run, despite having access to almost limitless data.  So, what’s the deal?  how is it in an age of ERP systems that capture everything you do, we still see so many organizations struggling, or worse yet, barely hanging?  Well, we came up with a couple of things that I believe explain a lot (and I hope you can learn from it).  Most of this will be from my experience of SAP data.

1.  If you don’t know what the data means, how can you interpret it properly.  This sounds so simple, but when you stop to think about it, in a giant system like SAP, there is so much data.  If don’t know what the data means, how can you possibly use it?  In addition, the bigger the system, the harder it is to mix and match the data into something that makes sense to your team.

2.  If you don’t know where to find the data, it’s gonna be tough to use.  Again, similar to the first point, knowing the data is in there, doesn’t help you find what you NEED to know.  In an ERP system, often there is so much data, that getting the stuff you really need can be challenging.  SAP for example has so many different dates, that knowing which data you really need to be using can be a challenge.  Figuring out the correct data, and then pulling it together to give you the information you need often takes someone with a lot of knowledge about the system.

3. Analysis of the data is key to pinpointing the true issue.  Once you have all the information, and you’ve put it into a readable format, now someone needs to look at it and interpret what it means.  Take my area for example, Service management.  If you have an issue with repairs in-house not happening quickly enough.  There are many areas to review to figure out where the bottleneck really is.  The issue could be the receiving group not processing the delivery soon enough, it could be that the service order doesn’t get released in a timely manner due to missing parts or lack of capacity.  It could even be that the service department doesn’t enter in the data when they need to.  If you don’t know what data to look it, you could be solving the wrong problem.

4.  If you don’t use the information, things can’t get any better.  Now, this is the most difficult of all things to overcome.  When an organization doesn’t act on the data they have extracted, things will not improve.  As a consultant, this is the most frustrating place to be.  Seeing upper management receiving all the data to pinpoint where things are “broken”, but then not taking any actions to improve the the organization.  A couple years back, I was a on a project where inventory was in a terrible predicament.  Things were in the wrong place, employees were not properly transacting things in the system, and every day it got worse.  The entire team kept telling them to perform a full physical inventory, yet the business refused.  Instead, they spent days and weeks counting certain areas they believed were causing the issues.  All this managed to do was shift the problem around and never solve the issue.

As you can see, there are a lot of things preventing businesses from running at their best.  The good news is that of the issues listed above can be solved if you can get someone that does the data, and how to analyze it.  The 4th issue… well that’s beyond anything I can offer any help for =)

Anyway, I’m sure I left a bunch of stuff out…  but I hope you enjoyed it.

 

Serial Numbers – Number Scheme

Since I got a request for more posts about Service management, I thought I’d dig into my bag of tricks.  One of the things I’ve run into a lot of issues is serialization.  For some reason, serial numbers seems to hold a special place of confusion for many customer.  Today I want to talk about the serial number number scheme.  I’ve picked this as my starting point for serialization because many of my recent projects have had a lot of trouble coming to decisions on this topic.
Serial numbers have a great starting point when it comes to numbering.  As of ERP 5.0 or 6.0 (not sure exactly when), SAP added a field called SerializLevel.

This field allows you to make the serial number number scheme unique at a global level or unique at a material level.  This subtle difference has huge implications on the number scheme.  If SerializLevel is blank, then serial number is only unique at a material master level.  To put things simply, the combination of serial number and material number is unique, but the same serial number can show up for any material number.  If SerializLevel is set to 1, then the serial number is unique across the SAP instance.  This means that no serial number will ever show up  for any other material.  SAP accomplishes this by linking the serial number to the equipment record number.  I’ll have a future post that goes into the details of serial numbers vs. equipment records.  Since every business is different, and you can often become locked into a particular numbering scheme.  The number one decision to make is if the serial number is unique across the organization, or if it can be reused for materials.

There are some things to beware of when using this functionality.  The SerializLevel field is plant dependent.  This means that you do have the ability to set this value differently across different plants.  I discourage setting this differently for the same material.  If you were to set the value to be unique across the origanization in one plant, but unique by material in another, you’ll see some very inconsistent results in the history.  I’ll go into the serial number history in a future post, but when it comes to serialization, consistency is key.

The final issue to cover when it comes to serial numbers is what I’ve heard called “intelligent” serial numbers.  When I say intelligent serial numbers, I use the term loosely.  This can be anything from adding a prefix by product to each number, adding in a manufacture date, or it could be a combination of alphanumeric characteristic that have a decoder ring to explain them.  In my humble opinion, this is a very slippery slope and should be avoided at all costs.  When you move down the path of “intelligent” number schemes, you must introduce ABAP code to accomplish this.  I believe the user exit is IEQM0003 (don’t remember for sure if this is the correct exit).  Regardless, if you start creating an “intelligent” number scheme, you must have multiple number ranges available, you need code to possibly shift from one range to the next.  For anyone that’s been doing SAP for a while, you know that every time you introduce code, you introduce risk, and you introduce additional time to implement.

The most important question to ask is “Why do you need an “intelligent” serial number?”  A serial number should be nothing more than a tracking mechanism for a product.  Requiring the serial number to mean something is a not something that add value to a product, but it does increase the cost.  Anyway, I’ll get off my soap box now.  You get the idea that I think intelligent number schemes are costly, risky and unnecessary.

I hope you found this useful.  I hope to hear your comments, thoughts, or let me know things I missed.

Thanks for reading,

Mike

Web Dynpro Browsers – Not everything is available

One of the biggest frustrations I’m encountering with Web Dynpro (and especially BSP’s) is that they don’t work on web browsers.  So far, I’ve been able to get my simple applications working just fine on Internet Explorer (version 9), but nothing works on Firefox (version 15), I can’t get anything to work on Safari (5.1.7), and only my BSP has been able to run on Google Chrome.  So today I wanted to discuss some of my finding when it comes to Web Dynpro browsers and what is supported.  There are numerous OSS Notes that I’m still sorting through, including:

0999995
1000000
1098009
1296463
1296464
1634749
In addition:  service.sap.com/PAM talks about the availability matrix.  If you navigate to the netweaver, and punch in your specific version (7.01, etc), you’ll see the web browsers that are supported.

I’m still sorting through all these notes, but to provide an application that can be given to your customer is increasingly difficult.  How do I tell a customer, please use my web application, but you can only use internet explorer.  In addition, there are a number of people (myself included) that upgrade to the latest browser when it comes up.  So this means, there will always be a percentage of time that someone won’t be able to access my application.  I welcome any experiences that people have had with this.  Maybe I just don’t have the right support parks.  For example, I’m using ERP 6.0 EHP4, on Netweaver 7.01.  So far, this states that I can use Internet explorer (up to version 9), and Firefox (up to version 10).  Now, if I was using Netweaver 7.3, EHP1, I’d have access to safari & chrome.  Again, this is subject to being on the latest netweaver support pack.  Short story, I’m a little concerned  with selling a Web Dynpro application, because I’m afraid I’ll spend all of my time troubleshooting what releases are supported for the given clients.

Just to throw it out there…  BSP’s are even worse.  Since SAP has stopped supporting the technology.  My Rapier application works fine in internet explorer and Google chrome, but apparently the functionality is too complicated and Firefox & Safari do not support it.  My problem is that I don’t even know what functionality isn’t supported.  I do a lot of dynamic things in my BSP, so it’s a lot areas to focus on.  The question for me becomes, do I focus on correcting the old technology, or just convert it to web dynpro (easier said than done… but that’s another story).

Oh well, gotta do it, but at least I’m getting a better idea of what is and what isn’t supported.

Web Dynpro – Select-Options – Putting Select Options on Multiple Tabs in the Same Window

Well, after spending some actual working on my Web Dynpro application, I’ve already come across my first little challenge.  In my selection screen, I have multiple tabs, each with a set of select-options.  So this ran into my first extension of my skills…

So, it’s not rocket science, but why not share it, just in case it might be able to help you in your endeavors.
So, for more details, check out my other posts on Web Dynpro.  They talk about using select-options, and how to setup the basics.

Building on this concept, I’m going to walk you through the process of adding multiple selection blocks.
First step, go back to the web dynpro component and add multiple component usages.
Now the biggest change is that we will use multiple views.  We will setup one view for each tab (or each selection option).  We will still do all of the same steps, however, the steps take place at a view that will dropped into the main view.
In my example, I have a view for selection screen that contains multiple tabs.  I then have a view for each of the tabs.  This allows me to use a separate component usage in each tab.  This allows me to put different fields on each one and still keep the functionality I want.
Now, the last of the work happens again at the Window.  Now, instead of just embedding the WDN_SELECTION_SCREEN, we will be embedding the single tab view into the ViewContainer, then the WDN_SELECTION_SCREEN inside of that view.

It’s actually pretty slick.  I’m enjoying the flexiblity of Web Dynpro and what it lets me do.  Now if I could just figure out how to get it working in Firefox & Safari.  I have a feeling it has to do with the version of each of those browsers being relatively new.  Either way, I’m still researching, and you can be sure when I figure it out, I’ll let you know…

of course, if you already know the answer, I don’t “need” to struggle… I’ll happily learn from your hard work.  ha ha ha.

Thanks again for reading,

Mike

Web Dynpro – Select-Options – writing the code

Here’s the code to do  SELECT-OPTIONS in ABAP Web Dynpro:

* Adding a block (type Tray) to the select-options
wd_this->go_so_com->add_block(
i_id         = `COM2`
i_block_type = if_wd_select_options=>mc_block_type_tray
i_title      = `Sales Selection` ).

As promised, I’ll talk about what I leaned in doing the actual method to put the select-options together for a full screen.  Everything I talk about deals with the add_selection_fields (notice the plural).  I had a bunch of fields, so I chose to do them all at once.

Here’s the basics, based on the name of the usage component.  I don’t know all the details on this portion…  but trust me, it works.  it came from SAP.  =)

DATA:
* reference to the item table for multiple lines.
lt_fields TYPE IF_WD_SELECT_OPTIONS=>TT_SELECTION_SCREEN_ITEM,
wa_fields TYPE IF_WD_SELECT_OPTIONS=>T_SELECTION_SCREEN_ITEM,
* reference to the select option usage controller
lo_ref_cmp_usage TYPE REF TO if_wd_component_usage.

* instantiate the usage component, if necessary
lo_ref_cmp_usage = wd_this->wd_cpuse_usage_so_comm( ).
IF lo_ref_cmp_usage->has_active_component( ) is INITIAL.
lo_ref_cmp_usage->create_component( ).
ENDIF.

* determine referece to the interface controller
wd_this->go_ic_so_com = wd_this->wd_cpifc_usage_so_comm( ).
* initialize selection screen
wd_this->go_so_com = wd_this->go_ic_so_com->init_selection_screen( ).

If you want to turn off the default buttons that show up for select options.  I wasn’t a fan, but I may change my mind in the future.  Either way, you can turn it off with the following code:

* Hide the standard select-options components.
wd_this->go_so_com->set_global_options(
i_display_btn_cancel = abap_false
i_display_btn_execute   = abap_false
i_display_btn_check  = abap_false
i_display_btn_reset  = abap_false ).

If you want to add a block, here’s the code to do so.  One of the things to note, be sure to capitalize all the letters.  I also found that it worked better being 4 digits.  I tried comsel_1, and it failed, then comsel1, and it also failed.

* Adding a block (type Tray) to the select-options
wd_this->go_so_com->add_block(
i_id         = `COM2`
i_block_type = if_wd_select_options=>mc_block_type_tray
i_title      = `Sales Selection` ).

This little code snippet shows you the basics of adding a field.

*** begin building selection screen
*This is the field name
wa_fields-m_id = ‘SRV_MAT’.
* generate range table for data element.  Be sure to make this equal to the data element.
wa_fields-mt_range_table = wd_this->go_so_com->create_range_table(
i_typename = ‘MATSV’ ).
* if you choose to embed the field inside of a context block (box) you can add it here.
wa_fields-m_within_block = ‘COM1’.
* use this line to turn on the drop down for the field
wa_fields-m_value_help_type = if_wd_value_help_handler=>co_prefix_searchhelp.
* here is the search help to use for the field
wa_fields-m_value_help_id = ‘MAT1’.
append wa_fields to lt_fields.
CLEAR wa_fields.

Finally, once you have all of your fields entered, you can call the method.  If you followed all of the steps in my previous post, you should be able to see your select options showing up on the screen.

* generate field in selection screen
wd_this->go_so_com->add_selection_fields(
it_fields = lt_fields ).

Next up, I’ll talk about adding multiple Select-Options onto the same screen (if you have multiple tabs, this could come in handy).

Thanks for reading,

Mike

Web Dynpro – Select-Options – Overview of the process

Finally, I get around to my first post about Web Dynpro.  I’m starting simple and replicating the selection screen for Broadsword, my service dashboard.  So any good selection screen usually has some select options.  So I wanted to pass along my lessons learned and a little bit of code too.  For starters, how do you create the select-options.  There isn’t an object that you can drop onto the screen for SELECT-OPTIONS.  You need to put a little more effort into adding it.

1. Create a create a component on the Used Component Tab of the Web Dynpro Component.  component use:  usage_so (for example) Component: WDR_SELECT_OPTIONS
2. Add the component to the view (properties tab).  Be sure to add both options (one with the controller, one without the controller).
3.  On the layout of the View, add a ViewContainerUIElement to the screen where you want to place it.
4.  Create a method for the View, INIT_SELECT_OPTIONS.  this method is where you will define the actual fields and layout.  We’ll discuss this in more detail tomorrow.  You can use the following methods:  add_selection_field or add_selection_fields.
5.  Update the WDDOINIT method, add the line:    wd_this->init_select_options( ).
6.  Attach the component to the ViewContainerUIelement in the window.  You will embed the WND_SELECTION_SCREEN to the ViewContainer in order to make the connection.

Alright, that’s enough for this post.  Tomorrow I’ll talk about the code for INIT_SELECT_OPTIONS.  Hope this information on SELECT-OPTIONS is useful.

 

Mail Chimp – Using an Old List

Hello again,

Now that I’ve been experimenting with Mail Chimp further, I have another valuable lesson.  If you have an old list, don’t be surprised if your account is temporarily suspended.  I just had it happen to me with the last newsletter I sent out.  I imported my list into Mail Chimp to test my list.  I purposely didn’t filter out the returned names I’ve received in the past, thinking that maybe Mail Chimp could get through where I couldn’t.  Ooops.  I ended up getting 40% of my list bouncing, and instantly my account got put on hold until I could explain what happened.  I explained that it was an old list that I hadn’t really been emailing in a while.  They were ok with that.  Also, note that you get 2 warnings and then your account is shut down.  So, play by the rules.  it’s for everyone’s benefit.

The other thing I learned is that you can NOT include any names that you did not gather personally.  I recently did a marketing campaign with SAP EcoHub that resulted in some names (I’ll tell you more about that later).  Because there was a third party involved, I had to remove those names from my Mail Chimp list.  Another valuable lesson learned for me.

On the bright side, for the time ever in my newsletter I can see how many people opened it, someone else takes care of any returned mails and unsubscribes, and I can even see if they’ve clicked into my link for the rest of the article.  I love Mail Chimp, but I’m still learning.

I recommend checking them out.  Now that I’ve cleaned my list pretty well, I’m going to look at doing a pay as you go auto responder.  I need to get more details on if I still get 12,000 newsletter, and pay for the auto-responder, or if you lose that benefit when you start paying (I certainly hope not).

 

A Thank You to Murielle

Not my usual post, but this is a little thank you to a flight attendant that went the extra mile.  On the plane ride to Altanta this morning, I fell asleep after putting my notebook in the seat pocket in front of me. when I woke, I spaced out and completely forgot my journal (and my Sunshine to Dollars book).  Well, I didn’t even notice it till I got to the office, then suddenly I got an email from Murielle saying she found my journal and would mail it back to me when she got home on Wednesday.

All I can say is thanks.  I really didn’t expect to ever see it again, but I now have a new appreciation for flight attendants.

Thanks Murielle, I really appreciate it.

Mike

Service Availability

It’s been a while since I talked service, so I thought I’d start posting some simple tips and tricks again.  In case you forgot, and if you read my blog often you might have, I’m actually a functional consultant, not a basis guy =)  Service and VC are favorite areas to work in.  I think they provide an interesting set of challenges and are often areas where it is hard to find good people (which is awesome for me).  Anyway, I’m working on a 5 – 10 part course talking about the basics of service management.  I haven’t decided how long it will end up being, so stay tuned.  I have so much in the hopper, but I want to actually show you guys I do know something about SM, service availability.

Today, I want to talk about Service Availability.  I’ve seen it used sporadically in places, but never very well.  So I want to talk about the how and why.  Now, before I get into the meat of the topic, let me explain why this part is important.  Just as in sales, knowing if all of the components are available is extremely important to managing your workload.  SAP provides the same availability functionality in the service order as it does in the production (except of course, running it in mass…  but for that, check Armory by JaveLLin Solutions. couldn’t help the shameless plug).  Transaction IWBK is actually a good transaction to show you all of the availability associated with a service order, and it even gives you fancy traffic lights to let you know at a glimpse if everything is available.  In addition, the status of the service order itself lets you know if all components are available.

Now, you may be asking, why do I care?  Often you have a decent workload of service orders and you require components in order to begin work on them.  Wouldn’t it be nice to see at a glance if all the components are available to know if you should start working on the order?  Perhaps you released the order to get some MRP requirements out there for parts.  Well, if you don’t know when the parts are available, how do you know when you can start working on the order?  Meanwhile, the clock is ticking for getting this part back to the customer.  Your metrics look worse and worse, all because you don’t know if you have parts to start working on a repair.

Alright, you understand the problem, so what can you do about it?  First thing you need to do is make sure the availability check is configured the way you need it.  Just like the availability for sales and production orders, you can have a unique one for service (or more often you’ll use the same one that production uses).  The screen shot below shows you were to find the configuration to see what in the system.

If you look at the Define Checking Rules, you’ll see the following.  Please note, SM is the default.

Next go the Define Scope of Check…  this is where the real work is done.

Remember, that the scope of check can be different depending on the material availability check.

This example shows 02 – SM

Every one of these options determines things that either availability includes or excludes.  Every organization is different, so I can’t tell you there are default settings to use.  I can tell you that you should experiment with whatever you do select.  Have a service order with some components and make sure your settings do what you expect.  ATP is touchy…  powerful, but touchy…  in my e-class, I’ll go into more details about the exact settings.

finally, you need to assign the availability check to the plant/order.  And you also can change the check for creation vs. release.

Here’s the settings you can control:

Alright, now that you’ve seen where to configure the availability check, you should understand how to run it…

Well, it’s pretty simple.  SAP only offers one place to execute availability.  IW32.

Press this button to availability.  There are several important system status that relate to availability:

MANC – Availability not checked
MSPT – Missing parts
MACM – All parts Available

If you use IW38/IW39 or Iw72/Iw73 and you look at system status, this will give you the quick look to determine if you have components available or not.  Please note, this doesn’t do a hard allocation of the components.  it simply says, based on the availability check (see above) that it is in stock.

I hope this little overview gives you an understanding why availability could be an important piece of service that you’ve overlooked.

Thanks for reading,

Mike

Creating the Sales Contract

when you finally  get the pleasure of doing a sale, you need to make sure you have the right paperwork in place.  One of the key things is the sales contract.  Luckily, I had the agreement that I signed for the SAP partnership, so I was able to use that a guide for structuring my own sales Contract.  What I learned is that there are some pretty standard pieces of it…  then from there, you just need to add your own spin.

For example, here’s the main pieces of mine that I just put together.

1.  The general section.  From the ones I’ve seen, this is the easy part.  It has the name of what you’re selling with a short description, the customer’s information (name, address, etc..)  My contact info and any annexes (additional documents)

2.  Scope of the agreement.  this pretty much specifies what you are selling and what’s included/not included.  It also defines who “you” are.

3.  Next is the Renumeration…  pretty much, what’s the agreed upon price.  Any discounts, etc.  the short story behind this, what are you getting for the sale.  In my case, I gave a list price, then stated the discount the customer gets in exchange for a reference and signing the agreement by a certain date.

4.  Invoicing and Payment.  Pretty simple…  payment terms.  when will they pay by, do you offer a cash discount, do you provide the product or service before or after receiving payment.

5.  the next one was something I added in because it was a customer concern.  that was support.  Because I’m a small company, the customer is obviously concerned about how I will support the product after the sale.  The funny thing is, actually he’s likely to get much better support out of me than he is a bigger company, but regardless, it still needs to be spelled out in the agreement.  Some important things to include are also what isn’t covered in your support.  If you don’t clearly state this, you could end up providing support for things you didn’t intend.  Do your best to think like a lawyer here =)

Finally, the signature page.  Make sure to collect the customer’s PO number.  the name and title of whomever will be signing this agreement, and once again the date.  Finally, you will countersign this agreement to make it all legal like.

All and all, it was pretty painless, but I”m sure glad I had an example to start with.  If you’d like to see mine, just make me an offer on my software and I’ll be happy to send one right over to you =).

As always, thanks for reading,

Mike

Posts navigation

1 2 3 89 90 91 92 93 94 95 97 98 99
Scroll to top