Разные формулы вычисления для одного и того же поля.

Совсем зеленый
Дата: 15.09.2005 18:27:47
В зависимости от открытой записи группа вычисляемых полей в форме должна вычисляться по разному(например, в одном случае поле должно выводить сумму без НДС, а в другом - с НДС).
Как быстрее: на событие "Текущая запись" вычислять по разному эти поля, или спрятать друг за другом два поля с "зашитыми" выражениями и прятать/показывать одно из них?
N_A
Дата: 15.09.2005 18:38:17
ИМХО, на глаз разницы не критична.
Я б в одном поле считал, т.к. не люблю накладывющиеся элементы.
Совсем зеленый
Дата: 16.09.2005 10:42:41
А время на "перерисовывание", т.е. на вычисление?
В случае со спрятанными полями они уже содержат значения, а на событие "Текущая..." только показываются/скрываются.
Если же менять в программе формулу, то явно будет эффект "перерисовывания".
Дело в том, что таких полей на форме 11 штук, выражения в них записаны весьма загогулистые.
Сначала был один "комплект" этих полей, потом появилась нужда для определенных записей вычисления изменить и сделать нужно было быстро .... полей стало 11 х 2.
А теперь появилась третья группа записей! Делать "сэндвич" из 11 х 3 полей,
или переписывать программу?
Пользователю, ведь, по барабану как там все устроено, но если появится эффект "перерисовки" вычисляемых полей, может начаться нытье, что программа стала хуже работать.
Bor-L
Дата: 16.09.2005 10:57:08
Не совсем понятно, если "от открытой записи", то поле, вроде бы, в самой записи и тогда его можно включить в формулу для вычислений и следовательно нет нужды что-то менять в событии "Текущая запись"
А если "условие" - это поле(флажок) в заголовке/примечании формы, то для пересчета ВСЕХ записей нужно использовать событие обновления этого поля, и опять таки событие "Текущая запись" не при чем...
Совсем зеленый
Дата: 16.09.2005 11:25:10
Условная табла "Заказ", условное поле "Признак"(байт).
Условная главная форма "Заказ"(по типу как в "Борее").
В зависимости от значения "Признак" 11 полей главной формы должны "обсчитываться" по разному. Эти 11 полей - что-то вроде итогов, рассчет основан, на данных из подч.формы.
Никаких флажков там нет. Просто, если открыта запись с признаком=1, то некое итоговое поле должно выводить =(СуммаИзПочФормы)*(1-ПроцСкидка)*kРент/kНДС, а если открыта запись в признаком=2, то на этом месте должно быть поле которое рассчитывается совсем по другому.
В обоих случаях поле называется одинаково, ну скажем, "Прибыль".
Гемор полный!!!
adv
Дата: 16.09.2005 11:26:01
Я правильно понял: в зависимости от значения(ий) поля(ей) меняется формула для других полей?
Тогда можно на поля iif в запросе повесить, то перерисовывать вообще ничего не надо будет.
SAS!
Дата: 16.09.2005 11:41:15
Да никогого гемороя :)
На открытии формы поставьте Select case, например, или простые IF и проверяйте значение признака. И в зависимости от него меняйте значение в своих полях.
Мне кажется, лучше, все таки, менять формулы в полях, чем рисовать 36 полей и прятать из друг за другом (перегрузка формы контролами чревата ее медленной загрузкой и вялостью реакции на события)
Вычисления у вас, похоже, арифметические, а они вычисляются мнгновенно, независимо от навороченности. Никаких перерисовок не заметите.
Bor-L
Дата: 16.09.2005 11:47:09
а если 3 и более вариантов - используйте ф-и Choose или Switch
Совсем зеленый
Дата: 16.09.2005 11:58:01
Ага! Надо на Открытие изменять св-во ControlSource у 11 полей? А именно кода:
Ме!Поле1=ляля
Ме!Поле2=бебе и т.д.
городить не надо.
Совсем зеленый
Дата: 18.09.2005 12:24:22
Что-то не выходит. На Открытие пишу:
dblПодчИтого = Nz(Ме![подчФорма].Form![Итого], 0)
Ме!Поле1.ControlSource = "= dblПодчИтого /1,18"
после открытия формы Поле1 содержит #Имя?. Пробую по другому:
Ме!Поле1.ControlSource = "= Nz(Ме![подчФорма].Form![Итого], 0) / 1.18"
получаю ту же ошибку.