SAP

Home / Archive by category "SAP" (Page 16)
Transporting a Reference Billing Plan

Transporting a Reference Billing Plan

In my latest endeavor to document all of the pieces of service contracts I recently stumbled on an interesting problem.  When you create a new billing plan type, you can create a sort of template.  The problem is that the template is stored in the standard tables of FPLA and FPLT.  Short story, you can’t transport this to QA or Production.  You receive the following message:

Billing plan references cannot be transported. Message no. V1719. Billing plan references, created in Customizing, cannot be transported. Maintain the billing plans, that are used in Customizing, in the new system.

Thanks to the following SCN post I found the tricks.

First off, check OSS Notes: 135028 & 356483

Go to transaction SOBJ and there double click on object V_TFPLA_MU_TRANS, then in the details set the flag V_OBJ_H-CURSETTING for Current Settings.

Thereafter you will be able to use OVBM in your productive system.

I needed to remember this myself, so I thought I’d share it with you.

Thanks for reading,

Could you benefit from Decreasing Repair Time and Increasing Productivity in Service

Could you benefit from Decreasing Repair Time and Increasing Productivity in Service

  • Are you customers waiting too long for their equipment to be repaired?
  • Do your technicians know the orders to work on first? Do they have everything they need when they need it?
  • Are your technicians wasting time entering operations and components for each customer repair?
  • Are you wasting your warehouse space on customer repairs waiting on parts?
  • Are you comparing planned cost to actual cost?
  • Is Quoting an In-House repair a manual headache?

I know these questions are silly because if you use Service Management in SAP, the answer is yes to at least one of these questions!!!  Let’s face it, who doesn’t want to easily shave cost off the bottom line, or better yet get some new revenue channels coming into your organization.  Well, I wrote a white paper to give you some ways to do just this.  Now some well run organization may already be using all of these, but in general, most organization are not doing at least one or two of the items in this white paper.

Free Guide on Decreasing Repair Time and Increasing Productivity in Service

Thanks for reading,

UI5 – a nice way to Debug

UI5 – a nice way to Debug

The OpenSAP class has just shown me another neat little feature that I was unaware of.  In addition to debugging using Chrome or Firefox, there is another UI5 option to get a cleaner look at all of the stuff going on.  After you execute your application press the following keys:

<Control><Alt><Shift>s

it will bring up the following window.

blog-20160614-01

You can then click into any of the options to expand what you can see and do.

blog-20160614-02

I’ve finally got used to debugging in Chrome, but to me, it’s far from easy.  You can’t complete avoid Chrome because this page won’t be very useful if your app isn’t even rendering.  In that case, you will need to solve those issue first.  But if you find your app isn’t behaving like you expected, you can use this nice little tool to easily work through the elements to see what’s going on.

Thanks for reading,

Variant Configuration – Fear of Material Variants

It’s interesting to me how much fear and concern exist around material variants.  Perhaps I’ve spent too much time with them, and that’s why I have no fear (much like how a snake charmer isn’t afraid of the snake…  they just have a healthy respect for it 😀 ).  I wanted to chat a bit about what you do and don’t need to worry about when it comes to material variants.  I’ve seen the full spectrum in my career, so like that snake charmer, respect MV’s, don’t fear them

First off, don’t make MV’s for everything.  My very first VC job was back in version 3.0F.  In those days, there was no good solution to handle returns, restocking, etc…  So rather than wait for SAP to fix the issues, we developed the a function within the configurator to create a fully usable MV within a minute or two.  This was the process we used for everything that was configurable.  And it worked fine.  The concept was that if modeled everything correctly, there was no reason it could not be instantly costed and assigned all the relevant master data in the background.  This approached solved all the issues on the sales side of things.  Now, the complications came on the engineering side of things.  Within a year or two, we were in the 100,000’s of MV’s.  This meant that each time something changed, all the MV’s needed to be changed as well.  This might be a simple revision to the part, or might be a full fledged configuration change (which required a refresh of the configuration within every material master).  This process quickly become overwhelming.  Especially when massive changes where required that dealt with ECM and complex date shifting.  YUCK. This taught me to respect MV’s…  but also to appreciate them.

See, even today, returning a VC part isn’t easy, and if you want to return it to stock,  you have to use an MV anyway.  The short story is that you can’t do business without them.  The important thing to realize is to NOT overuse them.

Now, on the flip side, I recently uncounted a client that needed configurable materials on a service order.  SAP didn’t design for this, so you simply get the error you can’t use a configurable material as a component on a service order.  Now, this to me is a perfect use for a simple program to create an MV, handle all the BOM, routing, costing and material master, then drop the material on your order a minute later and go on your merry way.  This was not a high volume service shop that would be generating thousands of MV’s a month, and the configurations were very simple, this was a perfect use for an MV.  You may have read some posts about this a few months back.  In general, there is no good way to handle this.  You can do the purchased part (generate a req back to yourself, make a sales order to add the configurable part and so on), you could create a production order for a dummy part, then add the configurable material onto it’s BOM (creating lots of production variance… probably 100%), or you could use an MV.

My advise, respect the MV and don’t go overboard.  However, don’t be afraid if you need to make a few hundred per year.

Thanks for reading,

Code Security? Do you Trust your customers?

I was recently asked “How do you protect your code from someone just copying everything you’ve done?”  I sat there with a straight face, and said… “Well…  I don’t”.  The simple question got me to thinking about this interesting question.  Do you take efforts to make sure (or least make it difficult) no one can copy your code?

Now, if you live in most programming languages, they require a compiler, and your code is instantly safe.  But in ABAP, when you write something, it’s out there for any halfway decent programmer with some time on their hands to pirate everything you’ve painstakingly worked on.  Now of course, there is the legal recourse, disclaimers, contracts, etc.  But at the end of day, many of us are small companies, and a big legal battle is the last thing we want to deal with.  So I started googling.  The general consensus seems to be of two camps.  One, you need to trust your customer and to go through and encrypt/hide/etc your code shows bad etiquette.  Two, why bother because any 1/2 way decent programmer in ABAP could get to it anyway… and by you hiding your code, just makes it even more appealing to crack the code.

Now Google/SCN talks about adding a strange character string:  *@#@@[HOME:SAP] that if you put this in front of code it hides it “forever”.  I haven’t tried it out… but I am tempted to just to see if it works.  But at the end of the day, is it worth it?  can customers be trusted?  can you afford not to trust them?

I’d love to hear your opinions.  And as always, thanks for reading,

Variant Configuration – Disassociate Material Variants

This is a fun little trick, that I will probably never use.  This came from my friend Rama.  If you’re like me, when you create material variants, I’m sure you wondered why you cannot disconnect the materials from the KMAT.  For some reason, this field becomes locked as soon you save the material.  In my normal process, I tell businesses to obsolete the material if they screwed it up, assigned the wrong KMAT or just want it to no longer be connected.  Well, it seems that SAP has come up with a  process to disassociate the material from the KMAT.

OSS Note 941004 – FAQ: Configurable materials and Variants in Configuration
Topic 1.  (so this is the SAP “Approved” method to handle this).

THIS PROGRAM DOES DIRECT TABLE UPDATES AND IS FOR EMERGENCY USE ONLY!!!

1) Use SE16 to edit the MARC record in the database.  Change the STDPD to the new KMAT and change the CUOBJ to zero.

 

2) Run the RCU_DEL_CONF_FOR_ARCHMATVAR program to delete the instance from the CBase

 

3) Edit the material master and maintain the material variant configuration

 

OF COURSE you must be careful to avoid creating database inconsistencies

 

ALSO, if there are any existing sales orders for the material variant, then the CUOBJ for those line items must be changed in the database from the old cuobj (of the mv) to the new cuobj (of the mv).  After that, it is necessary to update the pricing for

 

 

 

REPORT zlogic_mv_change_kmat NO STANDARD PAGE HEADING.

 

* Declare variables

DATA: lt_marc type marc occurs 0 with header line.

SELECT-OPTIONS: s_matnr FOR marc-matnr OBLIGATORY,

s_werks FOR marc-werks.

PARAMETERS:     p_stdpd LIKE marc-stdpd.

 

* Select material variants to change the KMAT

SELECT * FROM marc into table lt_marc

WHERE matnr IN s_matnr AND werks IN s_werks and stdpd ne space.

 

 

 

WRITE:/ marc-stdpd, marc-cuobj.

 

IF p_update = ‘x’ OR p_update = ‘X’.

UPDATE marc

SET stdpd = p_stdpd

cuobj = 0

WHERE matnr = marc-matnr

AND werks = marc-werks.

 

SUBMIT rcu_del_conf_for_archmatvar

WITH matnum = marc-matnr

WITH testmode = space

AND RETURN EXPORTING LIST TO MEMORY.

ENDIF.

 

EXIT.

 

ENDSELECT.

Now, for my disclaimer.  While this is a nice trick, I still most likely won’t use this myself.  The process I preach is to disassociate the material number in SAP from any logic, or any reason to worry enough about 1 exact number to go through this hassle.  Make your materials internal only, so they mean nothing to customers, distributors, vendors, etc…  if you do this, you never need to do DB updates to fix things.  Thanks my opinion.

thanks for reading,

Service Management – Setting up the Work Center

On my most recent assignment, I learned a lot about setting up the service work center properly.  One of the biggest take aways from this that I learned is that the formulas for service orders are very particular.  In particular, there is one field that is essential if you wish to see the planned cost show up in the service order.

blog04

The highlighted field above needs to be SAP008, or something using the following data.

blog05

This becomes very important, because production orders have a far greater range of formula variables that work than service (or network) orders.

So, if you find that planned costs just aren’t showing up in your service order, take a look at the formula assigned to the routing.

Thanks for reading,

Notification Execution – Creating a Notification w/Multiple Serial Numbers

Now, I’m pretty excited, because this is an idea I’ve been toying with for quite some time.  And recently, I’ve finally devoted some resources to making it real.  The concept is simple, allowing a user to enter multiple technical objects onto a single notification.  While SAP doesn’t give you an option this simple, I’ve come up with a way to utilize standard SAP functionality (along with my new Renovation tool) to accomplish this.  While the overall concept isn’t overly complex, dealing with it isn’t easy.

First, let me explain the concept.  The idea is using a parent notification, and then a create w/reference for each serial number.  The concept is that you can provide a parent notification to your customer, all the child notification will house the individual serial numbers.  The problem with this approach is keeping everything in sync, and then of course moving all that data to the next round…  like a return or repair sales order.

This is where Renovation comes in.  Step 1 is to first create a notification.

blog03

What you are looking at is one possible configuration for Renovation to create a notification, along with all of the children.  With our configuration, we allow you to pick and choose the fields you want shown and the sequence to show them.  You can add objects and even see the warranty status of each individual object.  You can enter Items, Tasks, Activities or Causes.  You can even select what values to pass to the child notifications.

If this sounds like something you might be interested in or would like to know more about, feel free to ping me and I can setup a demo.  If you have suggestions on how to make it even better, please let me know.

thanks for reading,

Web Dynpro – Setting a Default Select-Option

Well, there are some things I take for granted, and that’s how easy things seem to be inside of standard ABAP programming.  I come realize this whenever I try to do one of these “simple” activities in Web Dynpro.  Take today’s adventure.  I had some select-option fields, and I just wanted to default a value in there.  Sounds so easy.  And eventually it was.  here’s what I finally found.

I had a select option for ERDAT (creation date).  I’m not going to go into the select option creation.  I think I talked about that a while ago, so just search my blog if you need more info.  SERDAT is the ID of my option that I want to default a value for.

*** SET DEFAULT FOR ERDAT
DATA lo_nd_range_erdat TYPE REF TO if_wd_context_node.
DATA lt_range_erdat TYPE wd_this->Elements_range_erdat.
DATA ls_range_erdat TYPE wd_this->Element_range_erdat.
*** here’s the magic ***

FIELD-SYMBOLS<LT_RANGE_ERDAT> TYPE TABLE.
CREATE DATA LT_RANGE TYPE TABLE OF /JVS/SO_ERDAT.
ASSIGN LT_RANGE->TO <LT_RANGE_ERDAT>.

*** end the magic ***

*** this code is just setting the value back to my context node.
* navigate from <CONTEXT> to <RANGE_ERDAT> via lead selection
lo_nd_range_erdat wd_context->get_child_nodename wd_this->wdctx_range_erdat ).
ls_range_erdatsign ‘I’.
ls_range_erdatoption ‘BT’.
ls_range_erdathigh sydatum.
ls_range_erdatlow sydatum 30.
APPEND ls_range_erdat to lt_range_erdat.
lo_nd_range_erdat->bind_tablenew_items lt_range_erdat set_initial_elements abap_true ).
*** back to the default ***
*** notice I needed to set the value to the DATA field symbol.
APPEND ls_range_erdat to <LT_RANGE_ERDAT>.
LR_HELPER->SET_RANGE_TABLE_OF_SEL_FIELD(
EXPORTING
I_ID ‘SERDAT’
IT_RANGE_TABLE LT_RANGE ).

*** end the default code

 

I hope you can find a use for this,
Thanks for reading,

Variant Configuration – Class Additional Data

My friend Rama recently asked me a question about the additional data tab on the Class (CL02) screen.  For some classes he could see it, for other he couldn’t.  I was stumped.  Every system I’ve worked in had it available for class type 300.  Well, luckily, he passed on a little tidbit of information that I wanted to pass onto you.

in SPRO, go to Cross-Application Components–>Classification System–>Classes–>Maintain Object Types and Class Types.

Once you get in there select MARA, then double click on Class types.

Highlight class type 300 and go into the details.

blog01

Once you get in, you should see this screen.  If you want the additional data tab in your class, make sure that Class node is checked.

thanks for reading,