Обычное приложение 8.2.
На форме элемента справочника табличное поле со списком подчиненных элементов (редактирование в списке).
Нужно что бы все произведенные изменения подчиненных объектов были записаны только при записи владельца.
Табличному полю поставил "Изменяет данные".
При открытии начинаю транзакцию, при записи - фиксирую, при закрытии - отменяю. Предварительно проверяю на ТранзакцияАктивна().
Но элемент справочника окончательно записывается в базу при окончании редактирования строки списка.
Есть ли какие стандартные механизмы, что бы можно было отнести изменения некоторых элементов к одной транзакции и зафиксировать её при записи владельца?
Уж больно не хочется вместо списка элементов вешать на форму тз, а при записи сверять изменения.
Во-первых, транзакция может заблокировать данные, необходимые другому сеансу.
Во-вторых, системе не где хранить изменения подчинённых элементов - придётся делать табличное поле и при записи элемента записывать его в базу.
И, что-то мне говорит, что оставить транзакцию открытой и отдать управление пользователю - нельзя.
Форма элемента как то же считывает данные из базы в элементы формы, а потом сливает их обратно в базу если версия исходных данных не поменялась. А как бы это для списка элементов изобразить.
Сейчас пришел в голову вариант:
ПередНачаломИзменения строки списка
Получать объект элемента строки и сохранять в какой-нибудь коллекции
ПриОкончанииРедактирования
Скидывать все изменения в объект и отменять редактирование
ПриВыводеСтроки
Если в коллекции объектов есть элемент текущей строки, то заполнять текст ячеек из объекта.
ПриЗаписи
Записать объекты коллекции и при успешной записи удалять записанный объект из коллекции.
С виду вроде ничего, но интуиция подсказывает, что какая то хрень всё же получится. После обеда попробую изобразить.
Благодарен всем, кто поделится соображениями по существу.
Если очень хочется реализовать, то создаём таблицу значений и помещаем её на форму - при считывании объекта делаем запрос и заполняем таблицу (можно даже заблокировать вошедшие элементы, чтобы их нельзя было изменить извне), при записи перебираем таблицу и записываем строки, которые изменились (для этого нужно ввести флажок, который не показывать).
Задача решается тривиально, но программировать придётся.
По-другому, не получится, так как изменения хранить негде.