Forum Discussion
Is it possible to customize the Task cost calculation?
- Apr 27, 2024
Christophe,
First, I suggest you read this Wiki article on data types in Project:
https://web.archive.org/web/20200720083203/https://social.technet.microsoft.com/wiki/contents/articles/31991.ms-project-data-types-task-resource-assignment.aspx
Then you might also want to read the article referenced in the above concerning extra fields:
https://web.archive.org/web/20200722225529/https://social.technet.microsoft.com/wiki/contents/articles/32051.ms-project-extra-fields-in-views.aspx
Those articles will explain why your formulas don't seem to do what you want. However, based on your description, I don't see a need for custom cost fields at all. Instead of creating separate custom fields for funding types and resource types, why not combine the two. For example, you could have an EC work resource, an EC material resource, an EC cost resource, a Regional work resource, Regional material resource, a Regional cost resource, and so forth for each funding entity. Set up each resource type with the appropriate rate based on how they fund. You can even set up a time based cost escalation and/or up to 5 separate cost rates for each resource via resource cost rate tables A through E. This is accessible through the Cost tab on the Resource Information window. Varying cost rate tables for each resource are applied via the Cost Rate Table field at assignment level on either the Task Usage view or the Resource Usage view.
Hope this helps.
John
Christophe,
First, I suggest you read this Wiki article on data types in Project:
https://web.archive.org/web/20200720083203/https://social.technet.microsoft.com/wiki/contents/articles/31991.ms-project-data-types-task-resource-assignment.aspx
Then you might also want to read the article referenced in the above concerning extra fields:
https://web.archive.org/web/20200722225529/https://social.technet.microsoft.com/wiki/contents/articles/32051.ms-project-extra-fields-in-views.aspx
Those articles will explain why your formulas don't seem to do what you want. However, based on your description, I don't see a need for custom cost fields at all. Instead of creating separate custom fields for funding types and resource types, why not combine the two. For example, you could have an EC work resource, an EC material resource, an EC cost resource, a Regional work resource, Regional material resource, a Regional cost resource, and so forth for each funding entity. Set up each resource type with the appropriate rate based on how they fund. You can even set up a time based cost escalation and/or up to 5 separate cost rates for each resource via resource cost rate tables A through E. This is accessible through the Cost tab on the Resource Information window. Varying cost rate tables for each resource are applied via the Cost Rate Table field at assignment level on either the Task Usage view or the Resource Usage view.
Hope this helps.
John
Thanks John-project, this helped a lot. I read the articles you suggested, and understand better the differences between Task, Resource and Assignment data now.
I agree with your suggestion, the Cost Rate Tables seem indeed the natural solution.
I'm now trying to wite a macro creating the Cost Rate Table B for the EC hourly rates using the raw hourly costs of Table A:
Sub AssignHorizonEuropeCostRatesToCostRateTableB()
Dim projApp As Object
Dim resource As Object
Dim costTableA As Object
Dim costTableB As Object
Dim rateIndex As Integer
' Create an instance of MS Project
Set projApp = CreateObject("MSProject.Application")
If projApp Is Nothing Then
MsgBox "MS Project is not installed."
Exit Sub
End If
projApp.Visible = True
' Set the active project
Set ActiveProject = projApp.ActiveProject
' Loop through all active resources
For Each resource In ActiveProject.Resources
' Specify the resource cost rate tables
Set costTableA = resource.CostRateTables("A")
Set costTableB = resource.CostRateTables("B")
' Table B rates = (Table A rates) * 1.25
For rateIndex = 1 To costTableA.PayRates.Count
costTableB.PayRates(rateIndex).StandardRate = costTableA.PayRates(rateIndex).StandardRate * 1.25
costTableB.PayRates(rateIndex).OvertimeRate = costTableA.PayRates(rateIndex).OvertimeRate * 1.25
Next rateIndex
Next resource
End SubIt's nearly working at the exception of a type mismatch error in the last couple of instructions (I'm completely new to VBA, this was largely inspired by Copilot), which I should be able to fix.
But the next step then will still be the creation of a custom field Cost1, which will use the Table B rates instead of the Table A ones. Would that be possible? I haven't found how.
- John-projectApr 29, 2024Silver Contributor
I'm glad the reference links gave you some insight. What I don't understand though is why you still think you need a custom cost field. Maybe a marked up screen shot would help.
I also don't understand why you need a macro to create the cost rate tables. Unless there are several tables with multiple time based changes, setting them up should only take a few minutes manually. If you still want to pursue a VBA approach and the code you posted is coming from Copilot, I find another airline.
John
- christophe_schramApr 29, 2024Copper Contributor
Hi John-project , Ignacio_Martin ,
Following your suggestions, here is what it should look like in the Task Usage view:
- John-projectApr 29, 2024Silver ContributorChristophe,
What Text field identifies the type of resource and how is it different from the resource Type field?
And what Text field identifies the project type?
Perhaps you could show those Text fields as columns on your previous screen shot.
John
- christophe_schramApr 29, 2024Copper Contributor
Hi John-project,
The thing is that our contract management organization requires to have a simultaneous view on
- the actual costs incurred by our organization, where an indirect cost rate is applied to the direct personnel costs, and
- the costs that will be eligible for reimbursement by the funding agency, which uses a different indirect cost rate, and applies it this time to all the costs (personnel+ equipment + travel, etc.).
This means that we really need to have two different cost columns side-by-side. I hope this makes more sense now.
The reason for the macro is that we have about 100 employees which can be potentially assigned to our projects, and I didn't find a way to enter the cost tables (beyond the default table A) in the MS Project Server Sharepoint interface. But I found ou that if I open the Enterprise Resource database in MS Project, run a macro to create the Cost Rate Table B, and save it to the Server, the data are actually saved.
About Copilot... 😉 I follow you on this one, but it turns ou that it does a better job than ChatGPT (3.5 at least), and believe me: when it's about VBA programming, you really don't want me in the cockpit either! (Until 3 days ago I didn't know about it.)