Имя: Пароль:
1C
1С v8
Сохранение изменений подчиненных элементов только при записи владельца. Как?
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
Если очень хочется реализовать, то создаём таблицу значений и помещаем её на форму - при считывании объекта делаем запрос и заполняем таблицу (можно даже заблокировать вошедшие элементы, чтобы их нельзя было изменить извне), при записи перебираем таблицу и записываем строки, которые изменились (для этого нужно ввести флажок, который не показывать).
Задача решается тривиально, но программировать придётся.
По-другому, не получится, так как изменения хранить негде.
2 + 2 = 3.9999999999999999999999999999999...