|
Сохранение изменений подчиненных элементов только при записи владельца. Как? |
☑ |
0
Crush
16.01.14
✎
14:28
|
Обычное приложение 8.2.
На форме элемента справочника табличное поле со списком подчиненных элементов (редактирование в списке).
Нужно что бы все произведенные изменения подчиненных объектов были записаны только при записи владельца.
Табличному полю поставил "Изменяет данные".
При открытии начинаю транзакцию, при записи - фиксирую, при закрытии - отменяю. Предварительно проверяю на ТранзакцияАктивна().
Но элемент справочника окончательно записывается в базу при окончании редактирования строки списка.
Есть ли какие стандартные механизмы, что бы можно было отнести изменения некоторых элементов к одной транзакции и зафиксировать её при записи владельца?
Уж больно не хочется вместо списка элементов вешать на форму тз, а при записи сверять изменения.
|
|
1
Torquader
16.01.14
✎
14:31
|
Во-первых, транзакция может заблокировать данные, необходимые другому сеансу.
Во-вторых, системе не где хранить изменения подчинённых элементов - придётся делать табличное поле и при записи элемента записывать его в базу.
И, что-то мне говорит, что оставить транзакцию открытой и отдать управление пользователю - нельзя.
|
|
2
Crush
16.01.14
✎
14:56
|
Форма элемента как то же считывает данные из базы в элементы формы, а потом сливает их обратно в базу если версия исходных данных не поменялась. А как бы это для списка элементов изобразить.
Сейчас пришел в голову вариант:
ПередНачаломИзменения строки списка
Получать объект элемента строки и сохранять в какой-нибудь коллекции
ПриОкончанииРедактирования
Скидывать все изменения в объект и отменять редактирование
ПриВыводеСтроки
Если в коллекции объектов есть элемент текущей строки, то заполнять текст ячеек из объекта.
ПриЗаписи
Записать объекты коллекции и при успешной записи удалять записанный объект из коллекции.
С виду вроде ничего, но интуиция подсказывает, что какая то хрень всё же получится. После обеда попробую изобразить.
Благодарен всем, кто поделится соображениями по существу.
|
|
3
Crush
16.01.14
✎
17:46
|
Забил:)
|
|
4
Torquader
16.01.14
✎
21:16
|
Если очень хочется реализовать, то создаём таблицу значений и помещаем её на форму - при считывании объекта делаем запрос и заполняем таблицу (можно даже заблокировать вошедшие элементы, чтобы их нельзя было изменить извне), при записи перебираем таблицу и записываем строки, которые изменились (для этого нужно ввести флажок, который не показывать).
Задача решается тривиально, но программировать придётся.
По-другому, не получится, так как изменения хранить негде.
|
|