|
Управляемые формы Модифицированность() объектов | ☑ | ||
---|---|---|---|---|
0
ProDeveloper
10.03.15
✎
16:33
|
В УФ существует проблема - в событии ПередЗаписью() в модуле объекта метод Модифицированность() всегда возвращает Истина, даже если мы ничего не меняли в объекте. Происходит это из за того, что перед записью начинается транзакция записи. Объект до транзакции <> объекту в транзакции или после транзакции из-за версии данных, которая при записи всегда изменяется. В связи с этим становится невозможным красивая реализация отказа от записи объектов в подписке ПередЗаписью()
Код в подписке ПередЗаписью() вида Процедура xxxx_ЗапретИзмененияДокументовПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
в УФ теряет свой смысл.
Пока что сделал через костыль, тупым перебором реквизитов и ТЧ в цикле, ТЧ сравнивать было лениво, поэтому ТЧ преобразую в строку и сравниваю строковые представления ТЧ. Процедура xxxx_ЗапретИзмененияДокументовПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
Есть у кого соображения как ещё можно выкрутиться? |
|||
1
Nuobu
10.03.15
✎
16:36
|
(0) Перенести в модули документов и справочников не подходит?
|
|||
2
Nuobu
10.03.15
✎
16:36
|
(1) Тоесть документов.
|
|||
3
ProDeveloper
10.03.15
✎
16:48
|
(1)(2) А если подумать? А если такой функционал нужен для всех справочников и документов коих в ERP 2.0 превеликое множество? Что неужели будешь править все формы спр-ков и доков? А обновлять потом как?
Слив засчитан :) |
|||
4
DmitrO
10.03.15
✎
17:09
|
"Происходит это из за того, что перед записью начинается транзакция записи"
Ну это не из-за транзакции записи непосредственно конечно, а из-за того, что экземпляр объект в УФ получается десериализацией из данных формы, соответственно он всегда модифицирован. А вообще изначально задача-то как стоит? Отказаться от записи в подписке если объект реально не модифицирован в форме? И получить собственно получить исключение? |
|||
5
ProDeveloper
10.03.15
✎
17:18
|
(4) Изначально задача стоит так "Запретить изменение объектов закаченных из сторонней БД (Oracle)". Соответственно есть РС.СоответсвияОбъектов где живут IDшники(ID Oracle, ID 1C, ЗагруженИзСтороннейБД-булево). Реализованно через подписку на событие - в подписке ПередЗаписью() происходит проверка на модификацию объекта, если объект модифицирован и в РС.СоответсвияОбъектов имеется этот объект ID 1C с признаком ЗагруженИзСтороннейБД = истина, тогда отказ.
|
|||
6
DmitrO
10.03.15
✎
17:23
|
тут противоречие в том что: "в форме" и "в подписке" - это не для 1С, они не поддерживают сценарии работы с подписками для целей логики форм.
по идее надо в форме перенести признак модифицированности из управляемой формы, например, в дополнительные свойства объекта, чтобы получить его в подписке, но сделать такой перенос можно только в событиях самой формы, соответственно придется залезать в форму. (5) а зачем при этом проверять модифицированность? если загружен просто Отказ и все.. разве нет? |
|||
7
ProDeveloper
10.03.15
✎
17:28
|
(6) Никаких противоречий нет, ты просто не допонял. Все уже реализованно и работает. Смотри код в (0). Просто хотелось узнать у людей вдруг кто знает более изящное решение.
|
|||
8
ProDeveloper
10.03.15
✎
17:29
|
(6) Смысла залезать в форму каждого объекта справочника и документа коих в ERP 2.0 превеликое множество не вижу. Не вижу ещё и потому, что с таким подходом получаем гемор при обновлении.
|
|||
9
DmitrO
10.03.15
✎
17:36
|
А если документ загружен (в РС.СоответсвияОбъектов есть соответствие) но не модифицирован, запись должна пройти без отказа?
|
|||
10
ProDeveloper
10.03.15
✎
17:39
|
(9) Да, допустим захотели перепровести документ по той или иной причине. Причем не забывай, что перепровести документ можно не открывая форму документа, тупо из списка.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |