2017-01-15 2 views
1

У меня есть мастер-блок с подробным блоком. Одно из полей в основном блоке содержит вычисленное значение, которое зависит от блока details и сохраняется в базе данных.Персистское вычисляемое поле мастер-блока, которое зависит от блока данных, в пределах фиксации

ПОДРОБНО.Подробнее-блок имеет POST вставление, POST-UPDATE и пост-DELETE формы триггеры, в которых значение поля мастер-блока вычисляется и набор:

MASTERBLOCK.FIELD1:=FUNC1; --DB Function that queries the details block's table 

Когда форма совершено происходит следующее:

  1. мастер блока сохраняется с несвежим значением
  2. подробност-блок сохраняется
  3. форм-триггеров выполняются и против каждый блок главного блока вычисляется и устанавливается.
  4. поле основного блока теперь содержит обновленное значение, но статус записи основного блока не равен CHANGED, и обновленное значение не сохраняется.

Как я могу принудительно сохранить вычисленное поле в главном блоке?

ответ

0

«Одно из полей в мастер-блок имеет расчетное значение, которое зависит от деталей-блока»

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

Я думаю, это ваша проблема: --DB Function that queries the details block's table. Ваша обработка распределяется между клиентом и сервером бесполезным образом. Лучшим подходом было бы либо:

  1. поддерживать общее количество в главном блоке, фиксируя соответствующие изменения в блоке детализации по мере их возникновения (скажем, в навигационных триггерах); или
  2. вычислить общее количество и обновить основную запись в процедуре базы данных, возвращая итоговое значение для отображения в форме.

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

Смежные вопросы