Поля-приемники в формулах

Поля-приемники не рекомендуется использовать в формулах. Программа не всегда может узнать, что поле-приемник изменилось, т.к. изменение происходит триггером. Подробно об этом написано в разделе «Отличие формул от триггеров». Но в некоторых случаях программа пытается привести в действие формулы, использующие поля-приемники.

Формула реагирует на изменение поля-приемника

Формула будет реагировать в том случае, если запись добавили в дочерний объект через карточку.

  1. Программа видит, что запись добавили (изменили, удалили) в дочерний объект,
  2. понимает, что триггер пересчитал поле-приемник,
  3. запрашивает из базы значение поля-приемника,
  4. заставляет пересчитать формулы, использующие поле-приемник на данной карточке.

В локальной версии все будет хорошо, если запущена одна копия программы. Но в сетевой может случится проблема. Допустим два пользователя открыли одну и туже карточку.

  1. Пользователь Петя добавил продукт. Программа посчитала налог. Петя видит, что сумма и налог посчитаны правильно.
  1. Пользователь Коля добавил продукт. Программа посчитала налог. Коля может заметить, что сумма продуктов и налог почему-то больше. И это правильно, ведь программа запросила значение поля-приемника, а оно содержит сумму двух продуктов, хотя у Коли в таблице один продукт. Если Коля обновит таблицу продуктов, то он увидит два продукта, но речь сейчас не об этом.
  1. Дальше Коля сохраняет карточку заказа и сохраняется правильный налог (на два продукта). При правильной настройке карточки поле «Сумма» не перезаписывается.
  1. Затем Петя сохраняет свою карточку. Поле-приемник  не сохраняется (при правильной настройке карточки), а вот поле налога сохранится. И там будет сумма налога на один продукт.

Формула не реагирует на изменение поля-приемника

Если открыть сквозную таблицу продуктов заказов (продукты по всем заказам) и что-то в ней изменить (добавить, удалить), то это никак не заставит реагировать формулы заказа. Таким образом поле «Налог» в заказе никак не изменится.

Что делать?

Чтобы результаты вычислений были всегда правильными не используйте поля-приемники в формулах. Используйте их только в триггерах. С помощью триггеров можно вычислить налог.