Изменение одного поля приводит к изменению других префиксных полей - Adobe Acrobat Standard DC
В моей форме есть два поля, которые меняются при вставке текста / числа в другие поля. Почему? Они не связаны, например, если я напишу свое полное имя в запрошенном поле (ссылаясь на снятый скриншот), это изменит два поля: "Fratrukket Rabatt (Цена со скидкой)" и "Общая сумма (общая цена)".
Fratrukket Rabatt (Цена со скидкой): Расчет общей скидки
// Get first value as number
var v1 = +getField("Rabatt i prosent").value;
// Get second value as number
var v2 = +getField("Total pris").value;
// Calculate the result
event.value = (v1 / 100) * v2;
Total pris (total price): рассчитывает общую цену, вычитающую скидку
// Get first value as number
var viva1 = +getField("Pris per dekk").value;
// Get second value as number
var viva2 = +getField("Antall dekk").value;
// Get third value as number
var viva3 = +getField("Pris på arbeid").value;
// Get fourth value as number
var viva4 = +getField("Fratrukket Rabatt").value;
// Calculate the result
event.value = ((viva1 * viva2) + viva3) - viva4;
Это распространенная проблема, пожалуйста, помогите.
1 ответ
Это абсолютно правильное поведение, вы сталкиваетесь.
Взглянув на документацию Acrobat JavaScript (часть документации Acrobat SDK, которую можно загрузить с веб-сайта Adobe), вы найдете объяснение и диаграмму последовательности событий поля. Для нашей проблемы важно, что событие Calculate является частью этой последовательности, и всякий раз, когда значение поля изменяется, выполняется полная последовательность вычисления. Таким образом, если у вас есть некоторые значения по умолчанию и некоторые вычисления, использующие их, вычисленные значения полей пересчитываются.
Однако теперь в самой логике есть некоторая путаница, и у нее мало шансов получить надежные результаты для начала.
Прежде всего, считается наилучшей практикой объединять все вычисления (цепочки вычислений) в один отдельный сценарий и либо прикреплять его к последнему полю результатов цепочки вычислений, либо к невидимому, доступному только для чтения полю, которое в противном случае не участвует во всем (последовательность событий поля является причиной, почему это работает).
Исходя из того, что можно сделать из этого примера, ваш скрипт в поле Total Pris может выглядеть так:
Обратите внимание, что на самом деле в расчете есть логический недостаток, поскольку скидка зависит от общей суммы, которая рассчитывается после расчета скидки.
var deckprice = this.getField("Pris per dekk").value * this.getField("Antall dekk").value ;
var subtotal = deckprice + this.getField("Pris på arbeid").value*1 ;
var discount = subtotal * this.getField("Rabatt i prosent").value / 100 ;
var grandtotal = subtotal - discount ;
this.getField("Fratrukket Rabatt").value = discount ;
event.value = grandtotal ;
И это должно сделать это.
Если вы используете этот расчет в независимом поле (не в поле "Итого Pris"), вы бы изменили последнюю строку на
this.getField("Total Pris").value = grandtotal ;
Так много для расчета.
Еще одно предложение (ну, это немного похоже на мою любимую мозоль…): я знаю, что автоматическое распознавание полей в Acrobat очень удобно. Однако полученные имена полей не очень полезны, и (что более важно) не позволяют пользователю провести серьезный анализ формы, что затем приводит к логическим ошибкам.