Поле с параметром "Копия из" пересчетывается каждый раз при открытии формы.

Статус
В этой теме нельзя размещать новые ответы.

Aleks

Продвинутый
Есть расчетное поле Сумма. И есть еще одно числовое поле, скажем "Финальная сумма", где в параметрах указано, копировать значение из Сумма.
Это нужно для того, чтобы внести ручные корректировки в итоговую сумму, скажем дать некую скидку. То есть финальную сумму я могу корректировать и сохранить.
Почему при открытии формы на "Изменение", поле "Финальная сумма" пересчитывается? По логике оно должно пересчитываться только при изменении поля "Сумма", но никаких изменений в зависимых полях не происходит, я просто открываю форму.
 

Vladimir

Администратор
Команда форума
Да, если в цепочке расчётов не меняется ни один аргумент и результирующий итог сохраняется, копирования происходить не должно.
Приложите, пожалуйста, пример проекта с расчётом, значение которого копируется в итоговое поле при изменении записи.
 

Aleks

Продвинутый
Вот сделал пример. Посмотрите Продажи. Сумма Итог сейчас 1900. Но если нажмете Изменить, в форме будет 2000
 

Вложения

  • Пример Копия из.rbase
    870 байт · Просмотры: 5

Vladimir

Администратор
Команда форума
Вот что значит взгляд нового человека! Вы сделали проект по своему, в то время как для нас правильным считался иной вариант и проверить работу в другом представлении даже в голову не приходило.

Вы используете в расчётах ссылку на объект с указанием нужного поля.
При открытии записи на изменение, в расчётных полях, использующих поля ссылок на другие объекты, всегда производится получение данных из указанных объектов.
Чтобы расчёты не производились, необходимо в поле указывать только поля данного объекта, изменение которых производится уже только в ручном режиме.
Т.е. необходимо ввести дополнительное поле, в котором установить копирование из поля нужного объекта.
В Вашем случае это и было бы правильным (на мой взгляд), когда при выборе товара из него копируется значение цены (чтобы видеть её и иметь возможность скорректировать при необходимости), а уже потом производится умножение на количество.
 

Aleks

Продвинутый
Решение понятно. Сделаю так конечно.

Однако с этой логикой я совсем не согласен.
При открытии записи на изменение, в расчётных полях, использующих поля ссылок на другие объекты, всегда производится получение данных из указанных объектов.

Вот в моем примере зайдем в товары и поменяем цену Стула.
Откроем уже сделанную в прошлом продажу и что мы видим?? Новые данные? Странно... Я их не вводил, это старая продажа и все суммы в ней подтверждены мной тогда, когда я нажимал кнопку сохранить в прошлом. Сейчас я открыл форму чтобы ввесли новый комментарий, например, поменять количество или просто посмотреть в удобном виде запись. Почему пересчитались те данные, которые я не трогал??? Корректная логика: Если я хочу пересчет, я должен перевыбрать Стул.
 

Vladimir

Администратор
Команда форума
Для того, чтобы при изменении записи пересчёт был произведён только после перевыбора значения в поле ссылки на объект, необходимо данные из этого объекта скопировать в текущий, и на их основе производить расчёты. Если в расчётном поле используются прямые ссылки на поля другого объекта, данные из них будут всегда извлекаться при изменении записи.
Аналогичный механизм работает с полями ссылок на поля объекта, поэтому мы также не рекомендуем их использовать для сохранения корректности расчётов при последующих изменения записи. Поля ссылок на поля объекта желательно использовать лишь для информационных целей.
 

Aleks

Продвинутый
Хочу еще раз отметить, что не согласнен с этой логикой. Конечно это Ваше дело, Ваша система, но все же думаю мой отзыв может быть полезным.
В данном случае Вы создали, пользуясь вашей же метафорой "несколько моторчиков", где подразумевается один моторчик.
В случе расчетного и составного поля вы предлагаете запоминать 2 логики работы - явную и дополнительную.

С точки зрения пользователя логика должна быть простой и единой - пересчет срабатывает при изменении реквизитов текущей формы. Почему? Потому что пользователь при нажатии кнопки сохранить данные, как бы расписыватеся, что данные верны! Они не могут произвольно менятся без его ведома неяным образом.
Ситуация некорректная, если этот же пользователь через некоторое время отрывает форму, а расчетные данные там изменились сами по себе, поскольку, например, другой пользователь изменил значение связанного реквизита. При этом измененные данные можно не заметить, нажать кнопку сохранить и внести ошибку в данные задним числом.
Если трудно реализовать этот подход, запретите тогда ссылаться на внутренние реквизиты объектов в расчетных и составных полях, как минимум не будет путаницы, не надо запоминать кучу маленьких исключений и будет соблюден системный подход.

Аналогичный механизм работает с полями ссылок на поля объекта, поэтому мы также не рекомендуем их использовать для сохранения корректности расчётов при последующих изменения записи. Поля ссылок на поля объекта желательно использовать лишь для информационных целей.
Это очевидно, что поля типа ссылки - это информационные поля, как раз поэтому ничего общего с расчетным и составным полем они не имеют и я не вижу здесь никакой логической аналогии.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу