Поля-приемники не рекомендуется использовать в формулах. Программа не всегда может узнать, что поле-приемник изменилось, т.к. изменение происходит триггером. Подробно об этом написано в разделе «Отличие формул от триггеров». Но в некоторых случаях программа пытается привести в действие формулы, использующие поля-приемники.
Формула реагирует на изменение поля-приемника
Формула будет реагировать в том случае, если запись добавили в дочерний объект через карточку.
- Программа видит, что запись добавили (изменили, удалили) в дочерний объект,
- понимает, что триггер пересчитал поле-приемник,
- запрашивает из базы значение поля-приемника,
- заставляет пересчитать формулы, использующие поле-приемник на данной карточке.
В локальной версии все будет хорошо, если запущена одна копия программы. Но в сетевой может случится проблема. Допустим два пользователя открыли одну и туже карточку.
- Пользователь Петя добавил продукт. Программа посчитала налог. Петя видит, что сумма и налог посчитаны правильно.
- Пользователь Коля добавил продукт. Программа посчитала налог. Коля может заметить, что сумма продуктов и налог почему-то больше. И это правильно, ведь программа запросила значение поля-приемника, а оно содержит сумму двух продуктов, хотя у Коли в таблице один продукт. Если Коля обновит таблицу продуктов, то он увидит два продукта, но речь сейчас не об этом.
- Дальше Коля сохраняет карточку заказа и сохраняется правильный налог (на два продукта). При правильной настройке карточки поле «Сумма» не перезаписывается.
- Затем Петя сохраняет свою карточку. Поле-приемник не сохраняется (при правильной настройке карточки), а вот поле налога сохранится. И там будет сумма налога на один продукт.
Формула не реагирует на изменение поля-приемника
Если открыть сквозную таблицу продуктов заказов (продукты по всем заказам) и что-то в ней изменить (добавить, удалить), то это никак не заставит реагировать формулы заказа. Таким образом поле «Налог» в заказе никак не изменится.
Что делать?
Чтобы результаты вычислений были всегда правильными не используйте поля-приемники в формулах. Используйте их только в триггерах. С помощью триггеров можно вычислить налог.