Copy link to clipboard
Copied
I need a unique invoice number to show in the corner of a form. I was thinking of the best way (maybe the easiest?) to generate a number.. I want the form when opened to automatically create this number. In addition, one the PDF has been filled out and so on, then saved, I dont want that invoice number to regenerate once its opened again for whatever the reason. Does this sound possible?
My bad... The code should be:
this.getField("Invoice No").value = util.printf("%06d", Math.floor((Math.random() * 1000000) + 1));
Copy link to clipboard
Copied
Hi TRY67,
I am trying to generating automatic numbering for a file each time it opens starting from 000501 then getting it to save the form after completion on exit. I enterred the code below:
if (this.documentFileName == "TFMC Work Order Form.pdf")
if (global.count == null) //checks to see if count exists
{
global.count = 000501 //sets initial count, you can change to suite your needs
global.setPersistent("count",true) //makes the counter a global object so it is persistent data
}
else
global.count++ //increments the the counter by one when the document is opened
var f = this.getField("Order Number").value = Number(this.getField("Order Number").valueAsString)+1; //creates a variable for the form field where the counter will be displayed
f.value = global.count //sets the form field to equal the counter
but it doesn't generate the number even if I start the field area with 501, howver if I go into prepare form the number sometimes runs a counter in the field 4, or 5. Auto generating only when I go into prepare form not always, only sometimes.
Can you assist?
Copy link to clipboard
Copied
There are several issues with the script.
First, the global object is local. The form will start over at 501 for every different person who opens it.
Next, the variable "f" is set to the field value of the "Order Number" field. The code "f.value" does nothing.
Replace the last two lines with
this.getField("Order Number").value = global.count;
There are other problems, but this will get you started.
Copy link to clipboard
Copied
Thanks again! Do I need to input anything in the brackets at new Date?
Copy link to clipboard
Copied
No, no parameters required.
On Tue, Feb 28, 2017 at 11:58 PM, chrism53001470 <forums_noreply@adobe.com>
Copy link to clipboard
Copied
Great! One final question before I leave you alone, will this definitely stay unique or will it repeat in the future some time?
Copy link to clipboard
Copied
It will stay unique. It's basically a counter of the number of milliseconds that have passed from a specific date known as the epoch (01/01/1970), so there's no chance of it repeating itself, it only gets larger as time passes.
Copy link to clipboard
Copied
Hi Again mate,
Unfortunately I've just been informed that the unique code needs to be 5 digits - no more, no less.
Aside from using this.getField("Invoice No").value = util.printf("%06d", Math.floor((Math.random() * 99999) + 10000));
Do you know if there is a more unique way of doing this without the possibility of repeated numbers?
Copy link to clipboard
Copied
No, that's the only way. And there is no way to ensure that you won't get duplicates, unless you assign all the numbers in a single location and maintain a list of those that were already used.
Copy link to clipboard
Copied
Sorry to ask you another question, but I'm using
if (this.getField("Form No").valueAsString=="") {
this.getField("Form No").value = util.printf("%06d", Math.floor((Math.random() * 9999) + 1000));
}
and trying variations of the * 9999) + 1000) numbers, but it seems to have a minimum of 6 digits (with the first digits being zeros) no matter what combination I use. Do you know the correct numbers to make sure it generates a 5 digit number (no more, no less)?
Copy link to clipboard
Copied
Actually I worked it out I think.
Changed the ("%06d", to ("%05d", and it seems to have worked. Using a range of *99999) + 10000));
Copy link to clipboard
Copied
No luck,
if (this.getField("Form No").valueAsString=="") {
this.getField("Form No").value = util.printf("%05d", Math.floor((Math.random() * 99999) + 10000));
}
The number generated ranges from 5-6 digits!
What am I doing wrong?
Copy link to clipboard
Copied
Why are you adding 10000 to it? You only need to add 1, to make sure it's not zero...
Copy link to clipboard
Copied
Hi try67,
how to get a new invoice number every time after printing the document?
Thx.
Copy link to clipboard
Copied
Move the code given above to the Did Print event of the document (under JavaScript - Set Document Actions).
Copy link to clipboard
Copied
try67, you are the KING
Thanks a lot.
Copy link to clipboard
Copied
hy. i use this code to generate the invoice number, but after i put the script the filed is filled with the random number, and if i save the file then when i opened the number remain the same. so how i can make the file like an template with that filed empty - to have an master file, and open and only then the scipt to do his job?
Copy link to clipboard
Copied
I haven't looked through all the posts and code in this thread, and I don't know how your are doing it. However, it is common to setup of the "unique number script" as a document level script that seta the field value when it is empty. If this is the case, then simply save the document with an empty ID field. Then, whenever it is opened it will automatically fill with a random ID value. Then save the file with a different name.
Copy link to clipboard
Copied
This is great!
I have an additional question:
My file is titled "Complaint Form": the unique ID is great for cataloging these. I am wondering if there is a way to have the ID number attach to the file name by default when the file is saved.
I.e. If I open the file to document a complaint and want to save it after the conversation, but have the Unique ID and file name perpetually retain.
1. Open file "Complaint Form"
2. Let's say the ID that is generated is "00046587"
3. I fill in the fields and then select File → "Save As"
4. Can it be programmed to recognize this instance as "Complaint Form - 00046587" or even "00046587 - Complaint Form" so that they are more easily arranged in my file folder.
Any help would be much appreciated
Copy link to clipboard
Copied
Hello! I used this script to randomly generate an invoice # on my pdf, but when I test it and email a saved form to myself and reopen the document, the number regenerates into something new. Is there a way to have the number stay the same as soon as it the document is saved. This document will be placed via link on a website and people will open it, fill it out, save it and then email it to me and the number they save it as needs to be the same when it gets to me or any time after that when I open it.
I was also wondering if it was possible to have an invoice # generate in the form yymmddhhmm-rr where the digits are year year, month month, day day, hour hour, minute minute - random random. with the same saving requirements as listed above.
Thanks!
Copy link to clipboard
Copied
Yes, it's possible, but as I wrote, you need to clearly define when it should change and when it shouldn't.
For example, a script can be applied to the Submit button that sets the value of a hidden check-box, and then the script that populates the text field will look at that check-box and will only edit the invoice number if it's not ticked, or something like that.
Copy link to clipboard
Copied
Sorry-this is my first time really trying this out. So I made the hidden check box, but I don't know how to make it so when somebody hits the submit button, the check box is checked and I also don't know how the script would then look to this box to ensure that the invoice number doesn't change now.
I used your code for the new invoice generator and it works great! Thanks!
Copy link to clipboard
Copied
Before the Submit action add this:
this.getField("Checkbox1").checkThisBox(0, true);
And before the code that changes the value of the text field:
if (this.getField("Checkbox1").valueAsString=="Off")
Copy link to clipboard
Copied
I'm getting an error when I insert the second code. I'm inserting it into the Document JavaScript under the JavaScript editor mode. Should I be inserting it in the All JavaScripts window?
Copy link to clipboard
Copied
You need to add the command that changes the value of the field after it, as a part of the same item...
Do NOT use the Edit All JavaScripts command to edit the code.
Copy link to clipboard
Copied
The check mark is working fine with the submit button, but when I save and reopen the document, it still regenerates the invoice number. I have the code to check the check box listed directly ahead of the number generation code in the javascript window. Am I missing something?