Product Configurator - use component cost pricing

Yes. That IS another topic as configuration data (or Inspection Data) is not yet available to SaaS customers since the XML fields are not exposed to the BAQ tooling. We spoke to @rich about it at Insights and waiting to hear what possible remedies there might be for the Cloud folks.

1 Like

I forget - can you guys write SQL to your DB and fill a UD table?
If you can, there are two ways you can get around it and we can discuss both.

The problem is that because the configuration data set is user-defined, there is no generic way to parse the data sets across parts, part revisions, configurator revisions, etc. and therefore the data is useless in queries unless you have a fairly normalized data set like us.

I don’t think Rich or the guys will have anything to offer any time soon. I really hope they can come up with something, but it would almost have to be a new data model for the configurator data an a different storage/retrieval system in order to make it BAQ accessible.

1 Like

Oh, I can certainly put the inputs into a UD table but then we’re right back to having the old PCInputValue table and storing everything twice. :thinking: Right now, we’re stuffing “critical” inputs into the QuoteDtl to get us by but I’d like to do what you’re doing - how often is X selected, etc. Rich was actually looked surprised by the issue. He could think of a few solutions off the top of his head but he didn’t like any of them. I’m sure one was to create a view for every SaaS configurator use and use the XML syntax of SQL, which is what many on-prem users do. I understand the efficiencies of the new method but if cloud is the future for Epicor then they should be more like Microsoft and develop #cloudfirst. :wink:

Yep, twice it is, but I look at it differently. The PCValueSet tables hold the data for Epicor to work with. My UD table is de/re/normalized to be the data I need for reporting. The table is updated nightly and fields are calculated, parsed, converted, etc. so that my report BAQ is basically a giant select/filter.

It may be ‘twice’ but it’s not the same data :slight_smile:

And having a view for each configurator data set - no thank you. With 40+ data sets, that is a maintenance nightmare given the way our configurators change so often. I like our ‘common’ data set model and twice-stored data. It really does make reporting so much easier with little or no maintenance at all.

2 Likes

Hi Everyone, I’m finally back to to this piece. I’m able to get the standard costs out of the QuoteMtl using LINQ but only after running Mfg Details >> Get Details.
Does anyone know if Get Details can be triggered through a BPM or something else so users don’t have to do that step?
We’re trying to get to a total price calculation/field so that we can simply set the price for the line item without interaction.

Thank you

This is a little complicated as Mfg Details can ‘append’ and thus accumulate value giving you the wrong value. A proper BPM for this is on my to-do list also, but I can tell you that it :eyes: looks possible by using the QuoteAsmImpl BO and calling the DeleteAll and GetDetails methods. You can run a trace file and use @josecgomez Trace Utility to view the trace and figure out the exact calls.

1 Like

That’s actually exactly what I’m working on. I guess great minds think alike :grinning:
I haven’t worked with BO methods much before so I’m not sure if I’m supposed to read in the PreGetDetails and then do something with it?
I’ll just keep pushing forward and try to figure it out.

Yes we do. I started this months and months ago, but I think I overwrote it on my last Prod-To-Test copy. I can help if you get stuck. Our intention was to automate this process when a person marked the quote as quoted in order guarantee that it was done (some our our sales people forget things :crazy_face:) and to make sure the values were correct when the Job was created. So my BPM will started by doing the DeleteAll first just to make sure.

I think you need to do the PreGetDetails in order to prep the DataSet record before you do GetDetails. Once you figure it out, post it here. There were a number of others who had asked about this before also.

1 Like

It turns out the BO part of this is fairly straight forward. To have it happen at the right time, I have a pre-processing BPM on Quote.Update that enables a post-processing directive.
In Post-processing, I then call 4 BO Methods.

  1. QuoteAsm.DeleteAllAssembly
  2. QuoteAsm.PreGetDetails
  3. QuoteAsm.GetDetails
    At this point all the materials are on the quote materials.
  4. Quote.UpdateCosts - still struggling with this as it returns all lines for quote. I only need total cost for the one line I’m working with so I have to get it out of the XML. Or get the worksheet tab to refresh after this runs.

QuoteAsm.docx (470.9 KB)

1 Like

This is excellent! And superbly documented :slight_smile: !!! Thanks for posting.

As for the last bit, we need to figure out if we can send an extra parameter to the BO method for line# or part#. If we can’t then the data is in a data set, so I’m sure that one more widget of custom code could get us to the right DataSet.Row() that you need.

I’ve gotten the field I want out of the returned DS but not quite sure how to update the price for the line. I’ll almost have to immediately run an update method I guess.

Hi @paulosborne
i am not sure if this will help you or not, but this is my solution to capture these prices from Quote BO, Looking at the summary of each of Quote price costs and total figures as per the worksheet tab found that its -on the fly- calculation i.e. they all are view fields thereby they do not exist on the database, and to see all relevant parameters that Epicor base script uses to calculate these prices you need the SDK tool, or decompling the quote dll file which is not an easy task, so the easiest and safest way -in my opinion- is to get hold of them when relevant BO methods runs to calculate them ( i have analysed, tested, and found that the main one to capture every relevant change in this worksheet is the Update method, and there are others but this is the safeside one), so what i have done is create UD fields on the relevant table in this case is [QuoteQty] table which is the table that final quoted prices are based on, and coded a Post-Process BPM on Quote/Update to save these values on these UD fields after been calculated by Epicor Base script, thereby any New/Updated Records on this table will have these values.

now, this is not going to solve your historical data as you may know, so i used the DMT to trigger the update method -after enabling our BPM- for whatever period you want, i have done BAQ for 4 years in my test about 9000 records, and worked fine done it in about half an hour. this the template i used

you can use this principle to save any view values you want in any BO, but you may need to do many tests on target data before and after to ensure that you are capturing the right ones.

HTH

1 Like

Hi @A.Baeisa this is similar to what we’re trying to do. It looks like you’re saving the info on the quote qty lines for analysis later? I can see where this would be helpful.

I’m trying to use a field from the quote qty to set the price on the quote line item.

Looks to me like after I get the costs back I need to run the Quote.Update BO to get the line item updated.

yes, that is the safest option.

Not quite sure what I’m doing wrong. Would appreciate any and all guidance.

I run Erp.Quote.GetByID and put the data in the Quote tableset.
I can modify the tableset by executing custom code. I test this using some message boxes.
I then use the same tableset and submit it to Erp.Quote.Update. But the fields I’ve updated in step 2 aren’t updated in the database.

I know it all runs as I get the message box but that’s about it.

Any insights?QuoteDS.docx (123.5 KB)

Hi @paulosborne,
have you checked the tracing log to confirm what are the required parameters to run the Update method on Quote BO, triggered by QuoteDtl changes ?

Hi @A.Baeisa
Thanks for your detailed reply to this post. I’m implementing your code but modified it slightly to get the costs before markup.
It seems to work great on the first line of a quote, but I’m not getting any info on quotes with multiple lines. I know this is an old post but I would greatly appreciate the help

are you updating these quote lines manually ? i.e. ultring values on each line ? if yes, then it should work because doing this will put the QuoteQty on update row mode and this will trigger my code, if not then as i suggested on this thread you need to DMT your QuoteDtl table which is obviously will call every line and do the job for you.

I was manually editing existing quotes in our test server to troubleshoot the code. I’ve been changing some values in a quote line, and deleting and getting the manufacturing details for the worksheet to see if it triggers the code, but I’m not getting the desired results.
Do I need to have a pre-processing BPM that triggers the post-processing when a line is updated or added?
I should add, I’m quite new to this role and have no prior experience with Epicor

no problem mate, if you can put what you have done in here with some screenshots -same as i did on this thread- then i and many others might be able to help

1 Like