|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от S.Kuskov
![]() Vasiliusis, что-то вы намудрили, по-моему.
![]() На сколько я смог догадаться, вы делаете отдельную форму для редактирования или вставки записи в таблицу? Или нет? До сих пор не понятно почему изменение данных в БД происходит из метода modified, который для этого совсем не предназначен? Почему в modified? 1. Только в методе modified я могут автоматически копировать данные из одного поля в другое, при условии, что эти поля на форме представлены стрингЭдитом с выпадающим список (допустим, А и В соответственно). Это по Вашей рекомендации. 2. Запись/перезапись в БД должна осуществляться при присваивании/изменении значения в вышеуказанном контроле А. По требованию пункта 1, я не могу этого (копирования из А в В) сделать в modified контрола А (был у меня такой пост...), то я делаю это в методах ДС. Я думаю, что нужно будет убедить нашего начальника в том, чтобы вносить данные только при нажатии кнопки сохранить перед закрытием, а то это больно накладно каждый раз выполнять тучу кода и писать в БД... Не отрицаю, возможно где-то чересчур лихо написал ![]() Последний раз редактировалось Vasiliusis; 14.02.2013 в 12:59. |
|
![]() |
#2 |
Участник
|
Цитата:
Если вы хотите сохранить изменения в текущей записи, то вам нужно вызвать метод write() датасурса. И курсор после этого не нужно никуда двигать он останется на этой же обновлённой/сохранённой записи. Последний раз редактировалось S.Kuskov; 14.02.2013 в 13:04. |
|
|
За это сообщение автора поблагодарили: Vasiliusis (1). |
![]() |
#3 |
Участник
|
Цитата:
Сообщение от S.Kuskov
![]() Для этого совсем не нужно вручную вызывать метод insert табличного курсора, т.к. он не делает вставку или тем более обновление текущей (редактируемой) записи, а делает как раз вставку новой (ещё одной) записи - отсюда у вас и задвоение.
Если вы хотите сохранить изменения в текущей записи, то вам нужно вызвать метод write() датасурса. И курсор после этого не нужно никуда двигать он останется на этой же обновлённой/сохранённой записи. ![]() Видимо после вызова метода last(), т.к. я все-таки написал что-то в датасорс, аксапта пишет эту запись в таблицу, чтоб не потерять, а перед этим я инсертом вставляю еще одну. Вызов метода clear() удаляет, забывает просто напросто новую запись из ДС, что и решает мою проблему. Пролучается, что я создаю свою собственную запись, им удаляю ту, что создает сама аксапта, как только я присваиваю что-нибудь в какое-либо поле ДС, я так понял? Кстати, в пользу того, что акспата записывает запись, чтобы не забыть говорит и то, что при закрытии формы дублирующая запись также записывается (если метод last не вызывать) Тогда получается, что когда мы обращаемся к датасорсу в формате <название>_ds - это мы обращаемся ко всему хранилищу, а когда просто к <название> - это к текущей строке, на которую установлен курсор Последний раз редактировалось Vasiliusis; 14.02.2013 в 13:49. |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от Vasiliusis
![]() Где Вы были раньше
![]() Видимо после вызова метода last(), т.к. я все-таки написал что-то в датасорс, аксапта пишет эту запись в таблицу, чтоб не потерять, а перед этим я инсертом вставляю еще одну. Вызов метода clear() удаляет, забывает просто напросто новую запись из ДС, что и решает мою проблему. Пролучается, что я создаю свою собственную запись, им удаляю ту, что создает сама аксапта, как только я присваиваю что-нибудь в какое-либо поле ДС, я так понял? Кстати, в пользу того, что акспата записывает запись, чтобы не забыть говорит и то, что при закрытии формы дублирующая запись также записывается (если метод last не вызывать) Правильно, Вы изменяете значение, отрабатывается метод в котором вставляется еще запись, стоя на новой записи (которая insert) отрабатываете clear() и на last(). Без clear - две одинаковые. Проверить - посмотрите на RecId до и после манипуляции. Останется модифицированная старая запись. |
|
Теги |
волшебство, колдовство, магия |
|
|