Имя: Пароль:
1C
 
Невозможность изменения предопределенных объектов 1с 83.
0 program345
 
06.02.15
14:44
добрый день!
оптимален ли след. код для решения данной задачи, или есть встроенное решение?

//код
Процедура ПередЗаписью(Отказ)
    
    Если Наименование<>Справочники.ДляТестаПредопределенныхЗначений.Два.ИмяПредопределенныхДанных ИЛИ Справочники.ДляТестаПредопределенныхЗначений.Два.код<>Код Тогда
        
        Отказ = Истина;
        
    КонецЕсли;

КонецПроцедуры

//ваа
1 program345
 
06.02.15
14:45
а именно код и наименование
2 salvator
 
06.02.15
15:22
Роль настрой отдельную.
3 Fish
 
06.02.15
15:25
Не проще ли закрыть доступ к реквизитам?
4 program345
 
06.02.15
17:08
(3) а как тогда пользователи будут создавать не предопределенные элементы справочника?
5 GROOVY
 
06.02.15
17:25
Элементарное условие, либо в ролях, либо, если религия не позволяет в форме, при открытии.

ГДЕ
НЕ Предопределенный

Или

ЭтаФорма.ТолькоПросмотр(Предопределенный)

За синтаксис не ручаюсь.
6 Deon
 
06.02.15
17:28
(2) если конфа типовая, то надо будет ещё удалять все разрешения из существующих ролей.
По-моему, лучше аккуратненько подписочку на справочник замутить
7 Deon
 
06.02.15
17:31
(0) А встроенного, скорее всего, нет. Ибо адресация к предопределенному элементу везде идет по его идентификатору. И должно быть пофиг, какой там код с наименованием.
8 program345
 
06.02.15
17:37
в модуль объекта добавил:

//
Процедура ПередЗаписью(Отказ)
    Если Предопределенный Тогда
        Отказ = Истина;
        Сообщить("предопределенные нельзя!");
    КонецЕсли;
КонецПроцедуры
//  

робит! спасибо!
9 EugeniaK
 
06.02.15
17:39
(8) Добавь еще

    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
10 Deon
 
06.02.15
17:43
(8) Конфа не типовая? А то обновление от такого может не проходить.
11 program345
 
06.02.15
18:06
//
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ВыполнитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ВыполнитьНаСервере()
                                    //истина
    Если  ЭтотОбъект.ЭтаФорма.Объект.Предопределенный Тогда
        //ЭтотОбъект.ТолькоПросмотр(Истина);
        //ЭтотОбъект.ЭтаФорма.ЭтаФорма.ТолькоПросмотр(Истина);
        ЭтаФорма.ТолькоПросмотр(Истина);
        
    КонецЕсли;
    
КонецПроцедуры // ВыполнитьНаСервере()

//

сообщает ошибку: {Справочник.Справочник1.Форма.ФормаЭлемента.Форма(13)}: Метод объекта не обнаружен (ТолькоПросмотр)
        ЭтаФорма.ТолькоПросмотр(Истина);

конфа самописная...
12 GROOVY
 
06.02.15
18:10
Купи у ДенисаЧ СП:

УправляемаяФорма.ЗаблокироватьДанныеФормыДляРедактирования (ManagedForm.LockFormDataForEdit)
УправляемаяФорма (ManagedForm)
ЗаблокироватьДанныеФормыДляРедактирования (LockFormDataForEdit)
Синтаксис:

ЗаблокироватьДанныеФормыДляРедактирования()
Описание:

Устанавливает блокировку сохраняемых данных формы в информационной базе для редактирования.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.
Вызов метода выполняет обращение к серверу
13 Deon
 
06.02.15
18:23
(11) Зачем мучаешь форму, если уже заблокировал запись на уровне объекта?
14 Deon
 
06.02.15
18:25
а, для красоты
15 program345
 
06.02.15
19:41
(12) а чем он лучше встроенного?
16 program345
 
06.02.15
20:08
вообщем работает так:


//


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ВыполнитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ВыполнитьНаСервере()
                                    
    Если  ЭтотОбъект.ЭтаФорма.Объект.Предопределенный Тогда
        ЭтаФорма.ТолькоПросмотр = Истина;
        Сообщить("изменения в предопредеденном элементе не сохранены!")
    КонецЕсли;
    
КонецПроцедуры // ВыполнитьНаСервере()

//
17 program345
 
06.02.15
20:09
всем спасибо