Hi Tiago,
The shortcuts function in Tap Forms for iOS will only allow you to call to a Form script. On the Form Script Editor there’s a function for adding the script to Siri. You would need to write a script to search your records for the one that matches your criteria.
It’s no small task though for someone without a programming background. You can take a look at the Scripting instructions here though:
https://www.tapforms.com/help-mac/5.3/en/topic/scripts
Thanks,
Brendan
Excuse me. I have sent another script. I have done very much.
the last is this:
function updateRunningTotal(record) {
var importe = parseFloat(record.getFieldValue(‘fld-1cff7a1e6d3d4c68a081fa20be53ba48’)) || 0;
var pagos = parseFloat(record.getFieldValue(‘fld-c4d4d96ce0584cef99a8422512ece4e6’)) || 0;
// Calcular el nuevo Saldo
var nuevoSaldo = importe – pagos;
// Actualizar el campo Saldo en el registro actual
record.setFieldValue(‘fld-db305c87f3db46d0bbcaaf95dcb47858’, nuevoSaldo);
console.log(“Importe: ” + importe);
console.log(“Pagos: ” + pagos);
console.log(“Nuevo Saldo: ” + nuevoSaldo);
}
// Llamar a esta función cada vez que cambie Importe o Pagos
updateRunningTotal(record);
Thank you Glen.
I must say that my records are independent. Every record is a different debt.
I have done the following script, but it continues not working. The saldo field is the result of importe-pagos, not saldo-pagos as I want. Any sugestions on the script?
function updateRunningTotal(records) {
records.forEach(function(record) {
var importe = parseFloat(record.getFieldValue(‘fld-1cff7a1e6d3d4c68a081fa20be53ba48’)) || 0;
var pagos = parseFloat(record.getFieldValue(‘fld-c4d4d96ce0584cef99a8422512ece4e6’)) || 0;
var saldoAnterior = parseFloat(record.getFieldValue(‘fld-db305c87f3db46d0bbcaaf95dcb47858’)) || 0;
// Calcular el nuevo Saldo basándose en el Saldo anterior y los Pagos
var nuevoSaldo = saldoAnterior – pagos;
// Actualizar el campo Saldo en el registro actual
record.setFieldValue(‘fld-db305c87f3db46d0bbcaaf95dcb47858’, nuevoSaldo);
console.log(“Importe: ” + importe);
console.log(“Pagos: ” + pagos);
console.log(“Saldo Anterior: ” + saldoAnterior);
console.log(“Nuevo Saldo: ” + nuevoSaldo);
});
}
var allRecords = form.getRecords();
// Llamar a esta función para actualizar el Saldo basándose en el Saldo anterior y los Pagos en todos los registros
updateRunningTotal(allRecords);
You need to be able to access the total information from the previous record.
If you keep all your records in date order, then you might be able to use the script I was given for a simple purpose as an example,
See:https://www.tapforms.com/forums/topic/previous-record-problem/
You can also download the file and see how it relates. Read the info about the previous record number id – tricky.
Good luck.
Hi Brendan,
Thank you very much.
I don't quite understand what you want to tell me.
I think I must have expressed myself poorly. I'm going to give a practical example to see if it becomes clearer.
Someone owes me 1000 dollars, which I write in the Amount field.
This same amount appears in the Balance field, by the formula Balance = Amount-Payments.
They make me a payment of $500, which I write in the Payments field.
And in the Balance field, by the aforementioned formula, there are 500 dollars left.
Well, now they make another payment of another 500 dollars. If I write 500 in the Payments field, the Balance field will not remain at 0, but at 500. To make it remain at 0 I would have to enter the total amount paid so far, that is, 1000 dollars.
This is not difficult in this example, but with other amounts I have to make the sum separately and enter it in Payments.
What I want is to be able to enter partial payments, not have to enter the total amount paid each time.
That is, in the case of the example, I would make 2 entries of $500 in the Payments field, and Balance would remain at 0.
Now I have to make a note of 500 and another of 1000.
I hope I am explaining myself well.
I have tried the script thing by setting the Balance field as a script type. But I haven't gotten it to work for me.
Anyway, excuse me for my bad English. I hope that now it is clearer to you what I want to do.
Thank you,
Fernando
Hi Fernando,
There’s no direct function for computing a running total in Tap Forms, which is what it sounds like you want to do. Tap Forms has access to the current record’s data and it can get a total for all records.
You could possibly achieve what you want with a script that you can run which will loop through all your records and compute the running total and update a field in each record to include the total of the records up until that point.
There’s help in the online user manual about scripting here:
https://www.tapforms.com/help-mac/5.3/en/topic/scripts
Thanks,
Brendan
Yeah, it’s a bit tricky. In the form inspector panel, select the field tab followed by the ‘previous’ field. Then scroll down. Underneath the Description field is the field ID.
Attachments:
You must be
logged in to view attached files.
Cheers, Daniel
---
See https://lab.danielleu.com/tapformspro/ for scripts and tips&tricks
Hi Glen, in your original script, you were reading the previous total from the wrong field. Now it should work as expected:
function toHrsMin(sec){
let str = "";
let h = Math.floor(sec / 3600);
let m = (sec / 60) % 60;
return h + ' hr, ' + m + ' mins';
}
function Accum_Tot() {
var records = form.getRecords();
var currentRecordIndex = records.indexOf(record);
if (currentRecordIndex > 0) {
var previousRecord = records[currentRecordIndex-1];
var previous_total = previousRecord.getFieldValue('fld-b2f9616bf5e44fb4880ad9addd2afc6e');
} else {
var previous_total = 0;
}
var today = record.getFieldValue('fld-44acc9d2314f41beb3f2257ace5bae01');
var total = today + parseInt(previous_total);
console.log("Today: " + toHrsMin(today))
console.log("Previous: " + toHrsMin(previous_total))
console.log("Total: " + toHrsMin(total))
return total;
}
Accum_Tot();
-
This reply was modified 2 years ago by
Daniel Leu.
Cheers, Daniel
---
See https://lab.danielleu.com/tapformspro/ for scripts and tips&tricks
Dear members,
how can I prevent that my form field script runs three times? I need 3 event listeners for my form. But this code should only run once.
var letzter_eintrag = record.getFieldValue(‘fld-827f7254f04c462f887323172ef309ca’);
var brief_erstellt = record.getFieldValue(‘fld-8295048b2bee4f959bb952914117c266’);
var brief_versandt = record.getFieldValue(‘fld-c1e5d2c7de1844d2ae50fdcbe118232d’);
function ….{
call another function;
}
……
That is why I would prefer to use the script solution. Unfortunately, what Daniel supplied:
But, it adds the first two records then subtracts any following numbers which isn’t helpful.
I’ve looked at the script, but don’t understand how it jumps out of the loop and starts subtracting instead of adding to the total.
Can you please give me a script that works?
I tried to use the script from my rain totals script to do a similar job, but I’m missing something to be abel to add up the record totals, to an accumulation of the record totals.
Hope this is a simple fix. See attached archive file with dummy data – just getting started.
Attachments:
You must be
logged in to view attached files.
Do you mean from a Script? You posted in the Script Talk forum, so I’m not sure if you’re asking a general question or a script specific question.
You can use the Export Records function to generate a CSV file of your records.
Hi John,
There’s no function to trigger a script by double-clicking on a field.
However, you can have Tap Forms add 1 to another field if the Number field is manually changed by using a script.
When you call the record.getFieldValue(field_id) function, the field that corresponds to field_id will be monitored for changes. When the value changes in that field, the script will be executed and you can have it increment the value in another field, or return the value right from the script field which could be the monitored field’s last value plus one.
Thanks,
Brendan
Hi guys,
I would like to make a script that will add 1 (one) to an existing sum in a number field.
so that by double-clicking the field, it goes from, for instance, 110 to 111
But how can I do this?
kr.
John
Thank you for the quick reply, that’s perfect! I was hoping there was an easier way than writing script.
I appreciate the help!
Kathy