Имя: Пароль:
1C
1С v8
ЭлементыФормы
0 MrBen
 
26.09.23
16:04
В общем решаю задачку. Открыл синтаксис помощник.

"ЭлементыФормы (FormItems)
Элементы коллекции:
ГруппаФормы, ТаблицаФормы, ПолеФормы, КнопкаФормы
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции."

Пробую такой цикл но не пашет.

"{Документ.УстановкаЦен.Форма.ФормаДокумента.Форма(55,30)}: Переменная не определена (ЭлементыФормы)
    Для Каждого ЭлементФормы Из <<?>>ЭлементыФормы Цикл  (Проверка: Тонкий клиент)"

ПочемуЛыжиНеЕдут?
1 SleepyHead
 
26.09.23
16:07
(0)

1. непонятно, в каком контексте выполняется этот код (клиент или сервер)
2. Что такое элементыФормы в твоем коде? Попробуй ЭтаФорма.Элементы или просто Элементы при условии, что работаешь на клиенте.
2 shuhard
 
26.09.23
16:13
(0) дык тово, не смазаны лыжи и по гравию не идут
ты отладчиком то посмотри
3 MrBen
 
26.09.23
16:15
(1) На клиенте
4 azernot
 
26.09.23
16:16
Потому что правильно Элементы

Для Каждого ЭлементФормы Из Элементы Цикл
5 MrBen
 
26.09.23
16:16
(1) Блин хотел перевод строки и отправил.
кароче на клиенте делаю и пробовал ЭтаФорма.Элементы тоже не прокатило.
6 MrBen
 
26.09.23
16:18
(4) Синтаксических ошибок не обнаружено!
7 azernot
 
26.09.23
16:20
(6) А чего тогда в (5) не прокатило?
Короче, дело не в лыжах, имхо.
8 SleepyHead
 
26.09.23
16:23
(6) сомневаюсь, что это УФ. Либо в директиве &НаКлиенте опечатка
9 MrBen
 
26.09.23
16:24
(7) Для Каждого ЭлементФормы Из Этаформа.Элементы Цикл
не прокатило!
Как ты написал работает. теперь буду разбираться с наличием "Доступность" у элементов и устанавливать как надо эту доступность :)
10 MrBen
 
26.09.23
16:25
(8) &НаКлиенте
Процедура УстановитьДоступностьЭлементовФормы(ЗначениеДоступности)
    
    Для Каждого ЭлементФормы Из Элементы Цикл
        
        ЭлементФормы.Доступность = ЗначениеДоступности
                
    КонецЦикла
    
КонецПроцедуры;
//Чтоб не было сомнений
11 MrBen
 
26.09.23
16:28
Кстати сначала пробовал
ЭтаФорма.ТолькоПросмотр = Истина
Но нужно дать доступ к одному реквизиту чтоб можно было убрать этот ТолькоПросмотр, Не получилось вот решил перебрать все элементы кроме нужного
12 azernot
 
26.09.23
16:30
(10) А чем не устраивает ТолькоПросмотр ?
Зачем обходить все элементы?
13 MrBen
 
26.09.23
16:31
(12) чекбокс отлючить только просмотр недоступен на форме :)
14 azernot
 
26.09.23
16:34
Процедура УстановитьТолькоПросмотрРекурсивно(ЭлементыФормы, ИсключаемыеЭлементы = Неопределено)
    Для Каждого Элемент Из ЭлементыФормы Цикл
        Если ЗначениеЗаполнено(ИсключаемыеЭлементы)
            И ИсключаемыеЭлементы.Найти(Элемент.Имя) <> Неопределено Тогда
            Продолжить;
        КонецЕсли;
        УстановитьТолькоПросмотрЭлементаФормы(Элемент);
        ЭтоГруппа = ТипЗнч(Элемент) = Тип("ГруппаФормы");
        Если ЭтоГруппа Тогда
            УстановитьТолькоПросмотрРекурсивно(Элемент.ПодчиненныеЭлементы, ИсключаемыеЭлементы);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Процедура УстановитьТолькоПросмотрЭлементаФормы(Элемент, ИсключаемыеЭлементы = Неопределено)
    
    НеНужноИзменять = ТипЗнч(Элемент) = Тип("ДекорацияФормы") ИЛИ ТипЗнч(Элемент) = Тип("ГруппаФормы") ИЛИ ТипЗнч(Элемент) = Тип("ДополнениеЭлементаФормы");
    Если НеНужноИзменять Тогда
        Возврат;
    КонецЕсли;
    
    Если ЗначениеЗаполнено(ИсключаемыеЭлементы)
        И (ИсключаемыеЭлементы.Найти(Элемент.Имя) <> Неопределено
        ИЛИ ТипЗнч(Элемент.Родитель) <> Тип("ФормаКлиентскогоПриложения")
            И ИсключаемыеЭлементы.Найти(Элемент.Родитель.Имя) <> Неопределено) Тогда
        Возврат;
    КонецЕсли;
    
    УстановитьТолькоПросмотр = НЕ (ТипЗнч(Элемент) = Тип("КнопкаФормы"));
    Попытка
        Если УстановитьТолькоПросмотр Тогда
            Элемент.ТолькоПросмотр = Истина;
        Иначе
            Элемент.Доступность = Ложь;
        КонецЕсли;
    Исключение
        ИОШ = ИнформацияОбОшибке();
    КонецПопытки;
    
КонецПроцедуры
15 MrBen
 
26.09.23
16:34
(11) Точнее процедура все либо / либо сделает. А если Админ тогда нужные реквизит разблокирует.
16 MrBen
 
26.09.23
16:44
(14) Слишком круто. Так не нужно. ИТОГ:

&НаКлиенте
Процедура УстановитьДоступностьЭлементовФормы(ЗначениеДоступности)
    
    Для Каждого ЭлементФормы Из Элементы Цикл
        
        НеНужноИзменять = (ТипЗнч(ЭлементФормы) = Тип("ДекорацияФормы")) ИЛИ (ТипЗнч(ЭлементФормы) = Тип("ГруппаФормы")) ИЛИ (ТипЗнч(ЭлементФормы) = Тип("ДополнениеЭлементаФормы"));
        
        Если НЕ НеНужноИзменять Тогда
            
            ЭлементФормы.Доступность = ЗначениеДоступности
        КонецЕсли
        
    КонецЦикла
    
КонецПроцедуры;
Закон Брукера: Даже маленькая практика стоит большой теории.