Blog

Home / Archive by category "Blog" (Page 48)

SAP SM: Quoting In-House Repairs

For those you that have been reading my stuff for a while, this might be a repeat, but I think I’ve picked up a lot of readers since I originally posted this, so I thought it could be good to post it again.  One issue I’ve found in SAP Service Management (Customer Service) is that most companies want to quote the repairs they perform in house.  The problem is that the standard repair process doesn’t give a good alternative to handle this.  You can only use the DP80 functionality if you use a service order that is non-revenue bearing, but you must use a revenue bearing service order to perform in-house repairs.

Up until now, I’ve always handled it manually.  Simply creating a quotation with reference to the repair sales order.  The problem is that the connection to the process is loose at best, and you cannot use the information from planned service order to automatically update the quote.

Recently I found the following OSS notes.

Note 153869 – Creation of quotation after goods receipt for repair

Note 204874 – Settled costs in resource-related billing

This OSS note maps out a process that uses the original repair sales order as both the quote and the order.  Through the use of different item categories, we can use DP90 to perform quoting functions, as well as the actual billing.  Now, several things needs to be taken into account for this process to work.  The first is that you will need to add some addition item categories and item category usages.

I recommend you create Item category Usage, ZEIN & ZENI so you can control the quotation item categories.  Then you can leave SEIN & SENI for use in the billing items.  Be sure to add these new usages to the item category determination for your repair sales orders.

The next step is to properly setup the DIP profile in order to accommodate the new changes. What you need to do is change the billing portion of the profile to include the planned costs.  This will allow DP90 to pull in all of the planned costs, which can be used for quoting. DIP 1.jpg

The other thing you need to decide is if the quotation items will be statistical or not.  This depends on if you want all of the items to be displayed to the customer on the quotation, or if you plan to simply roll the items up for easy calculation of your quotation price.    The basic code provided by SAP assumes that quoting will be actual pricing, and billing will be statistical.  In order to provide some additional flexibility in the solution provided by SAP, I included a check in the code to look at the materials of the quotation usage to determine if each was statistical or not.

DIP 2.jpg

In my code below, if the Material Determination for an item was set to C: Transfer qty only, then it was statistical.  In all other options, it was normal pricing.  This does require you to maintain the items in both the quotation and the invoicing portion of the DIP profile, but the flexibility was worth the one time maintenance.

Be sure to setup ODP4 to show the cost in the sales order.  Be sure the condition you use (EK01 is recommended) is also a part of the pricing procedure for the repair.

Finally, the biggest thing to consider is the output changes that will be required for this process to work. I encourage you to create a new quotation Smartform.  It can be similar to your current quote or order confirmation, but you will want to handle the item categories appropriately for your customers.  For example, you may want to show the itemized quotation costs, but not show any of the repair process items like the inbound delivery.  You will also need to setup the form to show your pricing at the appropriate level.

Here’s the code I used in the exit: V46H0001 ->EXIT_SAPLV46H_001

data: da_vbak like vbak.
data: da_vbkd like vbkd.
data: lv_quant type AD01INVQUA.

CHECK NOT I_VBAKKOMVBELN IS INITIAL.

CALL FUNCTION ‘SD_VBAK_SELECT’
EXPORTING
I_DOCUMENT_NUMBER 
= I_VBAKKOMVBELN
IMPORTING
E_VBAK            
= DA_VBAK
EXCEPTIONS
DOCUMENT_NOT_FOUND
= 1.

CHECK SYSUBRC = 0.

* only in repair environment
check da_vbakvbklt ca ‘FG’.

* read billing form of repair main item
CALL FUNCTION ‘SD_VBKD_SELECT’
EXPORTING
I_DOCUMENT_NUMBER
= I_VBAKKOMVBELN
I_ITEM_NUMBER    
= C_VBAPKOMUEPOS
IMPORTING
E_VBKD           
= da_VBKD.

CASE I_SDSM_DLIWRTTP.
WHEN ’01’ or .                      “resource related quotation
CASE da_vbkdFAKTF.                 “billing form
WHEN ’01’.                        “fixed rate
select SINGLE INV_QUANT from AD01C_MAT into lv_quant
where PROFNR = I_SDSM_DLIFFPRF and
DPUS  
= ’11’ and       ” quotation
INV_MAT
= I_SDSM_DLISD_MATNR.
if sysubrc  <> 0.
select SINGLE INV_QUANT from AD01C_MAT into lv_quant
where PROFNR  = I_SDSM_DLIFFPRF and
DPUS   
= ’11’ and       ” quotation
MAT_DIR
= ‘X’.
endif.
case lv_quant.
when ‘C’.
C_VBAPKOM
VWPOS = ‘ZENI’.       “statistical
when others.
C_VBAPKOM
VWPOS = ‘ZEIN’.       “not statistical
endcase.
*         C_VBAPKOM-VWPOS = ‘SEIN’.       “not statistical
WHEN ’02’.                        “costs
*         C_VBAPKOM-VWPOS = ‘SENI’.       “statistical
C_VBAPKOM
VWPOS = ‘ZENI’.       “statistical
ENDCASE.

WHEN ’04’.                            “resource related invoice
CASE da_vbkdfaktf.
WHEN ’01’.                        “fixes rate
C_VBAPKOM
VWPOS = ‘SENI’.       “statistical
*       when ’02’.                        “costs
*         no change at the moment, because no change necessary
*         – item with service product   => SENI statistical
*         – items from costs            => SEIN non statistical
*         c_vbapkom-vwpos = ‘SEIN’.       “non statistical
ENDCASE.
ENDCASE.

Evolution of an Idea

As I dive head first in creating my Renovation product, I can really see the evolution of myself and my applications.  Back in 2006 when I first got the idea to build my own product, I never could’ve predicted all the skills I need to acquire to get me to where I am today.  Just to begin my own concepts I needed to learn to install and administer my own SAP system.  My hats off the basis guys out there…  I got a new appreciation for what they go through in a “simple upgrade”.

I finally designed my first product, originally called Rapier.  The idea behind Rapier was to deliver an out of the box customer portal geared toward aftermarket business (Returns, repairs, call center, etc..).  I spent a lot of time learning BSP (a now obsolete technology) to design this product.  I even had to start over a few times because of HDD failures (this taught me a lot about backing up my stuff to multiple places.  ha ha ha).

Next I went through and converted Rapier to ABAP Web Dynpro, the next generation of SAP Web tools.  This taught me yet another skill.  And now finally, this very old idea is paying dividends 🙂  All of these skills (and thankfully much of the code) are being reused in my new application to help customer service/call center employees.  While I still have a lot of cool ideas to put into Renovation, I couldn’t have done it without my first idea of building a product.  The good news is that “Rapier” hasn’t gone away, but I’ve since turned it into part of Renovation.  An idea that has given me so much co be couldn’t be retired that easy 🙂

What’s the point of this story?  Run with your ideas.  If you just have an idea, but don’t act on it, you’ll never evolve to the REALLY good ideas… and more importantly, you’ll never gain the skills you need to take you to the next level.

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,

Getting Over the Hump

I don’t know about you, but the Holiday season always seems to leave me more exhausted than refreshed.  It’s only wednesday, and I’m already struggling to keep myself going. For those of you with kids, I’m sure you know exactly what I’m talking about.  Keeping your young children entertained for two straight weeks is not only a challenge, but it requires a lot of energy 🙂

Now, I’m good at the “Just keep swimming” mentality, but I’m finding as I get older, that it takes it’s toll on me.  I know that by next week, I’ll be back in the groove, and ready to rock ‘n roll again.  But that first week after a “vacation” is certainly a transition for me.  So, I’d love any advise y’all might have for me.  So far, it’s been lots of coffee and a couple of walks around the house to keep the blood flowing.  Also, for those of you with older kids, do the “vacation” weeks get easier?

For my SAP folks out there…  I promise to start getting back into the swing of things soon.  Lately, just been too focused on marketing, and web dynpro development (which has been nice to sit back in the developer world again, even if only for a few hours at night).

Thanks for reading,

Switching Things Up – Going to ASUG/Sapphire

Well, after two years of attending the SAP Manufacturing conference, this year JaveLLin will officially be a vendor at ASUG/SAPPHIRE in Orlando this year.  It wasn’t an easy choice.  There was a lot of give and take between the two conferences (I went into it in a previous post).  At the end of the day, we decided that booth “size doesn’t matter”.  I’m bringing in a new face this year to help me.  Not only is he a great friend, but he’s a dynamic personality and quite possibly the piece we’ve been missing at a conference.

The other defining factor was the fact that we haven’t got a sale in 2 years from SAP MFG conference.  This is partially due to the fact that we split between Production Execution and Service Management.  A detail we are fixing this year.  But it may also be the people that attend this conference.  The SAP MFG conference did seem to be a lot more of the people that “need” the solution, rather than the people that can “purchase” the solution.  We are hopeful that Sapphire will bring more of the people with the checkbooks to our booth 🙂

So what does all of this mean?  it means that we will be focusing heavily on getting the word out about ourselves, finding a customer or two to implement our Proximity solution.  On the development side, we will be focusing on the Field Service portion of Proximity and the new Renovation product, which will be bring needed tools to the call center/customer service groups.

It’s going to be a busy 4 months…  but aren’t they all 🙂  I’d love any feedback you could provide on my existing tools.

Thanks for reading,

Starting Off the New Year

Happy New Year.  If you’re like me, you’ve spent the past few days cashing in on the last of your deductions for 2014, paying off those last minute bills, and finding a little time to relax.  But that’s over now.  It’s 2015, and time to hit the ground running.  For me, it’s about a new beginning.  JaveLLin will now be focusing primarily on Service Management.  We will still provide the production execution products we’ve designed, but now the focus will be 100% SM.  Looking back, it has been an uphill battle, trying to do too much, spreading our resources too thin.  Now, we will be the end to end SAP SM solutions provider.

With the release of the E-Books, I hope to build some additional momentum in establishing myself as the SAP SM expert.  I’ll still be leveraging my Linked-In connections built in 2014, along with the connections I made at the SAP MFG conference.

In short, a lot of work happened in 2014.  In 2015, I need to capitalize on all the ground work we’ve laid.  I’m really excited that 2015 will be the year my solutions take off.  If any of you reading out there have any leads on a business that could use some SM help…  or if you know of some functionality that could be really useful, please let me know.

Thanks for reading,

Merry Christmas

I hope everyone has a great holiday and spends their time enjoying friends and family.  I know that’s what I’ll be doing.  I’ll be taking some time off from the blog until after New Years.

Please enjoy the rest of the year.

Thanks for reading,

 

Design – How do you exceed your customers expectations without going overboard?

I’m neck deep in my latest design for the call center/customer.  It revolves around the concept of enhancing the service notification to be more function AND easier to use.  So, I was beginning to look at the selection screen.  I could model everything that current SAP transaction does, or I could just do a subset of those that I believe are the most widely used.  So this led me to the dilemma of how much is enough to exceed my future customer’s expectations?

I could spend my time adding in every option available, knowing full well that 90% of everyone out there doesn’t use most of them…  but then they are available, just in case.  Or, I could add in the bare bones, and have to scramble when a customer asks why a particular field isn’t available.  So, where do you draw the line.  I’m still a sales and marketing novice, so I often have to default to my friends for guidance.  First let me tell you what I think…  and then I’d love to hear if you have a different opinion…

I used to go down the path of add EVERYTHING. Afterall, I’m already in there doing it, it’s just a little more time, a little more repetition, and a few more entries in my tables.  However, I’m realizing that the more time I spend on tedious work like that, the more time I’m NOT spending on the really big pieces that I need to design.  For example, this product will have a big enhancement to the way that repair sales orders are generated.  It’ll give a company a lot more functionality and flexibility, and make life a lot EASIER for customer service.  I could spend my time getting that designed and fully tested… or I could add a few more fields for selection that will likely never be used.  So I’m going done path B…  because I can always add more fields later.  It won’t take much effort, and might actually cut down on some of the extra pieces I add that will never be used.

Thanks for reading,

Service Management – Enhanced Notifications

Well, over the weekend, I had a little free time, and I wrapped up the first piece of Renovation.  The enhanced notification creation.  It was actually a refreshing break to walk away from writing specs and actually get back into coding.  I’m pretty exciting, because a few week back I had the idea to leverage all of the work I did for Rapier, which was designed to be an out of the box Customer Portal for service management.  Now, I’ve taken that to the next level.  It still has all the pieces for the cusotmer portal, but now I’ve added in the ability for it to be an internal tool, which looking back, is probably a much better place to start.

It’s designed entirely in ABAP Web Dynpro.  So that makes it available without an SAP GUI, you just call up the URL, and give it a shot.  Among the biggest advancement is the built in creation of “multiple serial numbers” in a single notification.  Notice, I put that statement in quotes, because if you go into the backend system, there is a parent notification that you give to the customers, and then X number of child notifications that house each individual serial number.  But it works like a create with reference, including building in the document flow, and it copies all of the pieces you want (If I missed any, just let me know and I”ll be sure to add them).

One of my biggest questions is if this needs to be an ERP transaction, given my business. Having the web app seems like a plus when deaing with the call center/customer service, but maybe if they are used to entering in notifications, I’ll need to provide action boxes to do the same thing.  I’d love your feedback…

If you’d like to see what I have, go checkout this url for firefox and safari:

win-erp.paperstreetenterprises.com:8010/sap/bc/webdynpro/jvs/rapier_1100

then over on the left side of the screen, select create a notification.

currently, it seems to be working best in firefox and safari.  it also works in chrome if you use this extended URL:

win-erp.paperstreetenterprises.com:8010/sap/bc/webdynpro/jvs/rapier_1100?sap-ep-themeroot=&run=N#

for internet explorer, something has recently changed, and I’m having trouble getting it to run.  I can only assume it needs another support pack update 🙁

Thanks for reading,

Variant Configuration – CUUPDMV material variant update

It always amazes me how I can learn something new all the time.  I really thought I knew most of the Variant Configuration tricks, but today I learned new one.  it’s a standard transaction in SAP to update the configuration of the material variant.  Lately, I’ve just used GUI scripting to handle the task, because it was the best way I knew of to make sure all the change pointers continued to reset the BOM and routing properly.  Well, today a collegue of mine showed me this transaction she found online…  so of course, I needed to check it out a little closer.  This transaction is pretty slick.  You can update a bunch of MV’s at a time, you can hit all of the plants it’s been setup in, you can even do it by KMAT and get all fo the MV’s.  Quite impressive, since I’ve got used to maintaining a list of Material variants and plants to update.

blog02

Just a note, be sure to uncheck “Only Display Selection” if you want it to be updated.  I’d prefer if that was labeled test mode, but since it isn’t, treat it like “test mode”.

Thanks for reading,