You need to sign in to do that
Don't have an account?
Different Auto Number for Different Branches for Purchase Orders, Invoices and Official Receipts
We have ONE object with 3 different record types:
1. Purchase Orders (PO)
2. Invoices (Inv)
3. Official Receipts (OR)
There are three different operating branches that uses these, example as below:
1. New York
2. Sydney
3. Paris
We want to have different auto-numbers for these 3 different record types for these 3 different branches. Example as follows:
NY-PO-1001
NY-PO-1002
SYD-PO-1001
SYD-PO-1002
PA-PO-1001
PA-PO-1002
NY-Inv-1001
NY-Inv-1002
SYD-Inv-1001
SYD-Inv-1002
PA-Inv-1001
PA-Inv-1002
NY-OR-1001
NY-OR-1002
SYD-OR-1001
SYD-OR-1002
PA-OR-1001
PA-OR-1002
Using Auto-Numbers in Salesforce produces the result below, which we DO NOT WANT:
NY-PO-1001
NY-PO-1002
SYD-PO-1003
SYD-PO-1004
PA-PO-1005
PA-PO-1006
NY-Inv-1007
NY-Inv-1008
SYD-Inv-1009
SYD-Inv-1010
PA-Inv-1011
PA-Inv-1012
NY-OR-1013
NY-OR-1014
SYD-OR-1015
SYD-OR-1016
PA-OR-1017
PA-OR-1018
What is the solution without APEX or triggers for this?
If there is no standard solution in Salesforce, what do we need to do for APEX / Triggers to resolve the above?
Hi, sadly, I do not think there is a way to accomplish this without using an Apex Trigger for the object. The problem as you clearly see, is having the nine specific autoincrement fields instead of just one. The other values (NY - PO, etc.) could be set with a Field Update rule called from a Workflow, however I think that keeping the counters somewhere has to be done with code.
It's not a hard trigger, you just need a place to store the nine counters. Create a new Custom object called "AutoNumberHolder". That has three fields. 1. an Integer for the autonumber 2. The name of the record type of the object, and 3, the name of the operating branch.
Then create nine records for that object, for the various combinations, and set the integer to 0.
Then write a Before Insert trigger for the object which merely takes the Record type and the branch information and retrieves the counter for the record you're inserting. Use that to name your record, bump it up by one, and update the counter.
It get's a little more complex when you write the trigger to be bulk safe in case you insert a bunch of objects in one call. In that case you probably just want to retrieve all nine records (locked for update), use them as needed for your insertion, and then update the ones that have changed.
Best, Steve.
You can create just 3 auto number fields, one per branch (with just the format {0000}) and then create a formula field to display with the type and branch prefix.
You'll then have a single field to include on reports, pages and emails.
OK - just checked your example again and see you'd want 9 separate autonumber fields instead (if that's permitted)- but you should still use a formula field for a single display object.
Personally I'd go with the Apex option.
Technically, probably the easest way you could do this is by having the numbers for each department be tracked in an entirely other object (a Custom Setting comes to mind). A simple trigger could then be used to assign numbers by region and increment the counters appropriately.
I have a similar dilemma:
I need to create an auto-number thats formatted as follows:
U{00000}-AN
Where "U" = a single letter value from a field on the user record, and "AN" is the first two letters of the Account Name.I'm assuming for the account name I would use a formula field like = LEFT( Account.Name , 2)
Also, the auto-number needs to start at 40,000
Unlike the example above, I do not need to count separately for each combination, just a solid count from 40000 upwards with dynamic characters.
Any ideas? I'm not familiar with Apex so I will need a simple solution if possible.
How can we do it with Apex option, could you please send the sample code, so that it would be easier to understand.
regards
Arun
Step 1. Create a Custom Setting (Setup > Develop > Custom Settings) that you'd like to use. Create as many number fields as you need for the various numbers you'd like to track.
Step 2. Create a trigger (Setup > Customize/Create > [Object] > Triggers) that runs "before insert". The code might look like this:
Note that you'll need to consider if you want to format with padding characters, etc, and of course changing the setting values will change the next auto-increment number (which could lead to duplicate names). Finally, you'll need to provide a page override to the New button for the object to default the name of the record to some value (typically we use something like "[automatically created when saving]"). This is typically done with a simple Visualforce page with the appropriate type of override:
You will probably want to look at "Help & Training" for the correct usage of URLFOR. Finally, all you need to do is to create a test method to deploy the code to Production, and you'll be set. Please note that the object's Name field must be set to Text, not Auto-Number. In particular, some standard objects have auto-number values as the Name field type, and you won't be able to use this trick on those types of objects, since the field is read-only.
Add a "Next Number" field to your Branch records and make a roll up summary on the Operating Branches for the MAX Next Number (this requires a master detail relation ship between Branch and Operating Braches). Create a workflow for Braches that uses the Operating Branches MAX Next Number to set the Branch Name and also increments the Branch Next Number.
I haven't actually tired this, but it should work in theory.
I have a similar situation but with many more permutations. Basically, the numbering is:
<division><YY>-<#> so would be B12-101, A12-101, G12-101. Then next year, the numbering starts all over again with B13-101 etc.
Any ideas on how to tackle this? I could simply have 3 fields for each but then would have to create the field and update a formula field or workflow rule to use new fields each year.
i am also planning to generate autonumber same like. if u know the code with trigger plz help me.
I have exact same requirement except that I have 30+ location. Is it possible to achieve without code? Let me know thanks