Имя: Пароль:
1C
1С v8
Доступность элементов
0 CalvinKlein
 
30.08.12
22:50
Подскажите, плиз. На форме много очень элементов. Как можно управлять доступностью программно без обращения к каждому?
Допустим эти элементы можно разделить на три группы, можно как-нибудь группами управлять их доступность?
1 ОбычныйЧеловек
 
30.08.12
23:02
(0) Положи эти три элемента на панель и управляй доступностью панели.
2 CalvinKlein
 
30.08.12
23:04
можно, но при этом придется много где код переписывать я так понимаю. Ведь обращение уже к ним будет не на прямую, а через панель1.элемент1...
3 ОбычныйЧеловек
 
30.08.12
23:05
(2) если в коде было управление видимостью этих реквизитов то ДА а если нет...
4 CalvinKlein
 
30.08.12
23:08
(3) - хорошее решение, спасибо!)
5 Худой
 
31.08.12
05:05
Вот код из БП 3.0, как пример.
Может быть, как идея, подойдет?

// Принимает в качестве параметра форму и для всех реквизитов,
// для которых определен механизм, блокирует их редактирование.
//
// Параметры:
//  Форма        - УправляемаяФорма объекта, которая будет настроена.
//
//  СпециальнаяПолеГруппыДляКнопкиЗапрета - переопределяет стандартное размещение
//                 кнопки запрета в форме объекта.
//
Процедура ЗаблокироватьРеквизиты(Форма, СпециальнаяПолеГруппыДляКнопкиЗапрета = Неопределено) Экспорт
   
   // Определение, форма уже подготовлена при предыдущем вызове
   ФормаПодготовлена = Ложь;
   РеквизитыФормы = Форма.ПолучитьРеквизиты();
   Для Каждого РеквизитФормы Из РеквизитыФормы Цикл
       Если РеквизитФормы.Имя = "ПараметрыЗапретаРедактированияРеквизитов" Тогда
           ФормаПодготовлена = Истина;
           Прервать;
       КонецЕсли;
   КонецЦикла;
   
   Если Не ФормаПодготовлена Тогда
       ПодготовитьФорму(Форма, Форма.Объект.Ссылка, СпециальнаяПолеГруппыДляКнопкиЗапрета);
   КонецЕсли;
   
   ЭтоНовыйОбъект = Форма.Объект.Ссылка.Пустая();
   
   // Блокировка редактирования элементов формы, связанных с заданными реквизитами
   Для Каждого ОписаниеБлокируемогоРеквизита Из Форма.ПараметрыЗапретаРедактированияРеквизитов Цикл
       Для Каждого ОписаниеЭлементаФормы Из ОписаниеБлокируемогоРеквизита.БлокируемыеЭлементы Цикл
           
           ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено =
               ОписаниеБлокируемогоРеквизита.ПравоРедактирования И ЭтоНовыйОбъект;
           
           ЭлементФормы = Форма.Элементы.Найти(ОписаниеЭлементаФормы.Значение);
           Если ЭлементФормы <> Неопределено Тогда
               Если ТипЗнч(ЭлементФормы) = Тип("ПолеФормы")
                ИЛИ ТипЗнч(ЭлементФормы) = Тип("ТаблицаФормы") Тогда
                   ЭлементФормы.ТолькоПросмотр = НЕ ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено;
               Иначе
                   ЭлементФормы.Доступность = ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено;
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
   
   Если Форма.Элементы.Найти("РазрешитьРедактированиеРеквизитовОбъекта") <> Неопределено Тогда
       Форма.Элементы.РазрешитьРедактированиеРеквизитовОбъекта.Доступность = Истина;
   КонецЕсли;
   
КонецПроцедуры
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший