Имя: Пароль:
1C
 
модифицированность реквизита
0 nAPACEHAK
 
31.07.17
14:53
Доброго всем

Есть элемент справочника. в нем многомного реквизитов, ТЧ итд

Надо разрешить запись, отловив условие: Если изменился только ОдинВажныйРеквизит - то разрешить запись, и запретить запись если изменился любойдругойреквизит, строкаТЧ, итд.

т.е. истина -  если изменен всего один реквизит и ложь, если любой другой либо комбинация нужныйреквизит + любойдругой

как правильно сделать?
кроме как, передзаписью (),  циклом обойти все реквизиты и сравнить реквизит = ссылка.реквизит есть еще варианты? или может более правильные варианты?

обычные формы

спасибо
1 Buster007
 
31.07.17
15:35
Заблокировать изменение других реквизитов и оставить доступным только тот, который изменять можно
2 Philix
 
31.07.17
15:36
(0) Смотри для примера модуль справочника Договоры контрагентов в типовых БП, УТ. Там есть проверка на изменение валюты, владельца и еще чего-то...
3 youalex
 
31.07.17
15:39
(0) изначально задача в чем заключается?
4 Дмитрий
 
31.07.17
16:00
(0) по условию получается, что нужно следить только за изменением одного Очень важного Реквизита. Зачем все обходить?
5 nAPACEHAK
 
31.07.17
16:05
(3) Справочник "задачи"
когда его открываем - проверяем количество невыполненных, и если оно велико, то не давать сменить ничего, кроме реквизита "КомуПоручено". И если невыполненных мало - то можно менять любой реквизит

думаю
а) либо модифицированность как проверять при записи реквизитов
б) на форме всему кроме КомуПоручено выставить только чтение

но и там и там руками приходится все реквизиты перебирать. а их многовато
6 Fish
 
31.07.17
16:12
(5) А "велико" и "мало" - это сколько?
7 nAPACEHAK
 
31.07.17
16:13
(6) в принципе нет же разницы. Если что - то число одновременно невыполненных = константа.получить ()
8 Fish
 
31.07.17
16:15
(7) Честно говоря, непонятен смысл (5). Для чего это вообще нужно? Имхо, гораздо проще привязаться к сроку исполнения.
9 nAPACEHAK
 
31.07.17
16:19
(7) и так привязано. если текущая дата больше планируемого срока - то не выполнена становится задача.

для чего надо - что бы не открывали пару десятков задач, и они бы так и висели не выполненными. как только превышен лимит то не давал бы редактировать итд. только можно было пререкинуть с одного исполнителя на другого. остальные поля не разрешать менять
10 FIXXXL
 
31.07.17
16:19
(0) сделай переменную (реквизит формы)
ПриИзменении любой хрени, кроме Очень важного Реквизита взводи флаг
11 Fish
 
31.07.17
16:25
(9) Т.е. у тебя получается, что если у исполнителя уже превышен лимит просроченных задач, то ему новую задачу нельзя назначить?
12 nAPACEHAK
 
31.07.17
16:26
(10) будет многомного обработчиков
ПриИзмененииХерни ()

))

и изменение ОченьВажногоРеквизита + изменение ДругогоРеквизита тоже как бы придется отслеживать
13 Mankubus
 
31.07.17
16:30
(12) Сделай один обработчик ПриИзмененииОченьВажногоРеквизита. И возводи флаг.
Если флаг = ложь, то реквизит не менялся
14 Serg_1960
 
31.07.17
16:33
(5) Если обычные формы: запрос при открытии формы и после анализа результата запроса в форме устанавливается свойство ТолькоПросмотр. А изменение реквизита "КомуПоручено" можно сделать через контекстное меню из списка справочника без открытия формы.
15 nAPACEHAK
 
31.07.17
16:37
вот еще такая шляпа придумалась. вроде работает и кода поменьше

        Для каждого Эл Из ЭлементыФормы Цикл
            Попытка
                Эл.ТолькоПросмотр = Истина;
                Если Тип (Эл) = Тип ("Флажок") Тогда
                    Эл.Доступность = Ложь;
                КонецЕсли;
            Исключение
            КонецПопытки;
        КонецЦикла;
        ЭлементыФормы.Сотрудник.ТолькоПросмотр = Ложь;
16 Basilio
 
31.07.17
16:38
Процедура ПередЗаписью()
ЗаполнитьЗначенияСвойств(Объект, Объект.Ссылка, , "ОченьВажныйРеквизит");
КонецПроцедуры
17 youalex
 
31.07.17
16:39
(5) как вариант, можно этот рек вынести  в РС (будет одно  измерение - ссылка на задачу, и ресурс -КомуПоручено)

В форме справочника - добавить поле ввода КомуПоручено, писать в РС при изменении.

Если остальные реквизиты - недоступны. то ЭтаФорма.ТолькоПросмотр =Истина;
ЭлементыФормы.КомуПоручено.ТолькоПросмотр = Ложь;
18 nAPACEHAK
 
31.07.17
16:40
(13)
а) только Реквизит сменился - записать можно
б) Реквизит сменился , но попутно еще реквизиты поменяли. по идее писать нельзя. как отслеживать?

(16) мысль
(17) не прокатит т.к. форма.толькопросмотр перекроет всё
19 youalex
 
31.07.17
16:42
(18) Прокатит, если КомуПоручено - не связан с основным реквизитом формы (СправочникОбъект)
20 Basilio
 
31.07.17
16:45
(16) это было в порядке бреда. Нельзя так над людьми издеваться.
По хорошему к задаче нужен комплексный подход, здесь нужно интерфейс удобный продумать и из него уже исходить.
21 nAPACEHAK
 
31.07.17
16:45
(19) связан. отдельным реквизитом не получится
22 nAPACEHAK
 
31.07.17
16:47
Так остановился

        Для каждого Эл Из ЭлементыФормы Цикл
            Попытка
                Если Тип (Эл) = Тип ("ПолеВвода") ИЛИ Тип (Эл) = Тип ("ТабличноеПоле") Тогда
                    Эл.ТолькоПросмотр = Истина;
                КонецЕсли;
                Если Тип (Эл) = Тип ("Флажок") Тогда
                    Эл.Доступность = Ложь;
                КонецЕсли;
            Исключение
            КонецПопытки;
        КонецЦикла;
23 Ц_У
 
31.07.17
19:11
Объект.Реквизит <> Объект.Ссылка.Реквизит
24 Cyberhawk
 
31.07.17
19:30
"что бы не открывали пару десятков задач, и они бы так и висели не выполненными. как только превышен лимит то не давал бы редактировать итд" // Так пользователь откроет заранее все старые задачи и твои интерфейсные запреты не помогут
25 youalex
 
31.07.17
21:02
Имхо,тут сама модель хромает.  Сама задача (со множеством реквизитов и ТЧ) -это отдельная сущность. А то, на ком эта сущность висит - это уже другая сущность. Собственно,сама тема  сигнализирует об этом)