|
Сохранение изменений подчиненных элементов только при записи владельца. Как? | ☑ | ||
|---|---|---|---|---|
|
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
|
Если очень хочется реализовать, то создаём таблицу значений и помещаем её на форму - при считывании объекта делаем запрос и заполняем таблицу (можно даже заблокировать вошедшие элементы, чтобы их нельзя было изменить извне), при записи перебираем таблицу и записываем строки, которые изменились (для этого нужно ввести флажок, который не показывать).
Задача решается тривиально, но программировать придётся. По-другому, не получится, так как изменения хранить негде. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |