|
|
|
Форма с подчиненной: принцип "погашения долгов"
|
|||
|---|---|---|---|
|
#18+
Елки-палочки! Простая проблема, а решить как надо не могу Есть главная форма, в ней есть поле « Общий долг » (числовой) и поле « Погашение » (логический). Имеется в этой форме и подчиненная форма « Погашение долга » с полями « Дата » и « Сумма ». Задача: как только сумма значений поля « Сумма » в подчиненной форме станет равной значению поля «Общий долг» в основной форме, то значение « Погашение » должно стать « истина ». Чё только не делал. На поле « Сумма » (свойство « после обновления ») поставил проверку, но эта проверка срабатывает, когда я делаю новую запись в подчиненной (достаточно ввести «0»), но согласитесь, что это неудобно, а нужно, чтобы отметка «Погашение» срабатывала сразу как только вносишь последний долг, а не вводишь еще раз пусть даже нулевое. Проверка срабатывает по сумме предыдущих значений и не берет в расчет последнее внесенное значение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2004, 22:46:19 |
|
||
|
Форма с подчиненной: принцип "погашения долгов"
|
|||
|---|---|---|---|
|
#18+
Люди! Ну неужели так сложно, а? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2004, 23:04:10 |
|
||
|
Форма с подчиненной: принцип "погашения долгов"
|
|||
|---|---|---|---|
|
#18+
1. Проверка срабатывает по сумме предыдущих значений и не берет в расчет последнее внесенное значение -> Наверно, ты не сохраняешь запись, поэтому она не учитывается. 2. Надеюсь, что поле "Погашение" - не физическое поле в таблице, а вычисляемое поле в запросе. Так ли? Если не так, то нехорошо с точки зрения нормализации базы. (Впрочем, я не знаю, как принято в бухгалтерских программах.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2004, 23:16:04 |
|
||
|
Форма с подчиненной: принцип "погашения долгов"
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч1... Наверно, ты не сохраняешь запись, поэтому она не учитывается. 2. Надеюсь, что поле "Погашение" - не физическое поле в таблице, а вычисляемое поле в запросе. Так ли? Если не так, то нехорошо с точки зрения нормализации базы. (Впрочем, я не знаю, как принято в бухгалтерских программах.) 1. Много раз слышал, что нужно как то сохранять запись, но ни разу не применял это (не было ситуации, да и как-то не возникал такой вопрос). Но как программно сохранить запись сразу после внесения значения в поле? 2. Поле "Погашение" действительно "физическое". Полностью согласен насчет оптимизации, но дело в том, что это значение я в дальнейшем многократно использую и учитывая принцип "линии наименьшего сопротивления" просто один раз вогнал это значение и забыл... Но больше меня интересует всетаки 1 пункт: как это программно сохранить запись (никогда не сталкивался и поэтому даже понятия не имею). А как насчет ответа? А..? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2004, 23:24:51 |
|
||
|
Форма с подчиненной: принцип "погашения долгов"
|
|||
|---|---|---|---|
|
#18+
Варианты: Me.Dirty = False DoCmd.RunCommand acCmdSaveRecord DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2004, 23:34:33 |
|
||
|
Форма с подчиненной: принцип "погашения долгов"
|
|||
|---|---|---|---|
|
#18+
Саныч! Вставлял (цитата из анекдота: «Я покажу этому ИА, как она входит и выходит…») предложенные варианты во все, что можно (цитата дня: Мы сначала пьют все что хотим, потом, что можно, и в завершении что осталось), но результат прежний. При проверке MSGBOXом (вношу новую сумму погашения) выходит предыдущее значение суммы (без учета нового значения). Привожу код (из подчиненной формы): Private Sub Сумма_AfterUpdate() MsgBox DLookup("[Цена]*[Кол-во]", "Кредит", "[Код]=form![Примечания]") - Nz([ИТКасса], 0) MsgBox Nz([ИТКасса], 0) If DLookup("[Цена]*[Кол-во]", "Кредит", "[Код]=form![Примечания]") - Nz([ИТКасса], 0) <= 0 Then CurrentDb.Execute "Update [Кредит] set [Уплачено]=true where [Код]=" & [Примечания] End If If DLookup("[Цена]*[Кол-во]", "Кредит", "[Код]=form![Примечания]") - Nz([ИТКасса], 0) > 0 Then CurrentDb.Execute "Update [Кредит] set [Уплачено]=false where [Код]=" & [Примечания] End If DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 SendKeys "{f9}", False End Sub Где DLookup("[Цена]*[Кол-во]", "Кредит", "[Код]=form![Примечания]") – сумма долга из главной формы Nz([ИТКасса], 0) – сумма всех погашений в подчиненной (взято из поля в примечании формы [ИТКасса]=Sum([Сумма]) Сейчас выкрутился через запрос, т.е. вместо Nz([ИТКасса], 0) вставил Nz(DLookup("[1]", "0"), 0) из запроса, где идет суммирование. Но что оптимальней: то что не получилось или это!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2004, 01:35:33 |
|
||
|
Форма с подчиненной: принцип "погашения долгов"
|
|||
|---|---|---|---|
|
#18+
Вопрос в догонку. У меня получилась проверка при добавлении записи. Но вот теперь мне нужно удалить некую запись (ошибочный ввод). Я удаляю, этим самым меняю значение суммы возврата долга и отметка об уплате должна естественно исчезнуть. Где осуществить эту проверку? Пробывал поставить на свойство формы "Удаление" но результатов ноль... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2004, 01:38:11 |
|
||
|
Форма с подчиненной: принцип "погашения долгов"
|
|||
|---|---|---|---|
|
#18+
Ну могу предложить еще один вариант, правдо скорей всеого он будут медленней: На событие "после вставки" в подчиненной форме с помощью рекордсета высчитывать сумму. Ну тоже самое можно делать и на после обновления и после удаления... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2004, 11:15:25 |
|
||
|
|

start [/forum/topic.php?fid=45&tid=1672580]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
13ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 296ms |

| 0 / 0 |
