Имя: Пароль:
1C
1С v8
Заблокировать все элементы на форме кроме 2ух
0 denis_solyanko
 
08.12.14
07:08
Такое задание в документе формы, есть две галочки, нужно сделать так чтобы , если стоят обе тогда заблокировать изменение всех элементов кроме двух полей, как сделать можно, кроме того что каждому элементу писать элемент.доступность = ложь. как сделать поэкономичнее
1 Cube
 
08.12.14
07:22
Используй силу цикла....
2 ilyavorobyev
 
08.12.14
07:44
(0) если управляемые формы, сделай группу, в которой будут все элементы кроме твоих двух и по условию убирай или разрешай доступность группы
3 denis_solyanko
 
08.12.14
08:32
(1) нет у меня обычное приложение, такой вопрос в цикле перебираю, а у надписи нет такого свойства . как сделать проверку на тип надпись
Если не РольДоступна("ПолныеПрава")тогда
Если Распечатан и Набрано тогда
Для каждого элемент из ЭлементыФормы цикл
Если не элемент.ТипЗначения = Тип("Надпись") тогда
элемент.ТолькоПросмотр = истина;
ЭтаФорма.ЭлементыФормы.ЗаявкаОт.Доступность = Истина;
конецесли;    
конеццикла;        ЭтаФорма.ЭлементыФормы.ЗаявкаОт.ТолькоПросмотр = ложь;
ЭтаФорма.ЭлементыФормы.ПровестиБезУчетаОстатков.Доступность = Истина;
Конецесли;
КонецЕсли;
4 denis_solyanko
 
08.12.14
08:32
(1) не срабатывает проверка
что не правильно пишу
5 Cube
 
08.12.14
09:17
(3) (4) ТипЗнч(элемент)...
6 del123
 
08.12.14
09:30
Помести все элементы кроме двух на панель и делай доступность к ней.
7 denis_solyanko
 
08.12.14
11:20
(6) уже есть готовая форма ее трогать не стоит
8 denis_solyanko
 
08.12.14
11:24
(1) продолжение нужно сделать запрет редактировании даты доумента если значение больше недель от текущей даты
Если Дата > (ТекущаяДата() + 604800) тогда
Предупреждение("Нельзя менять дату больше чем на 7 дней!");
Конецесли;
а как сделать чтобы значение которое было до этого вернулось?
9 pessok
 
08.12.14
11:29
Форма.ТолькоПросмотр = Истина;

Элементы.РазрешенныйЭлемент.ТолькоПросмотр = Ложь;
10 Cube
 
08.12.14
11:30
(8) Корявое условие какое-то...
Если документ уже записан в базу, то можно обратиться к сохраненной в БД версии объекта через "Ссылка". К дате так: Ссылка.Дата.
11 pessok
 
08.12.14
11:30
(8) Отказ = Истина;
12 denis_solyanko
 
08.12.14
11:35
(9)так не работает я пробовал только если в цикле каждому элементу присваиваешь свойство
13 denis_solyanko
 
08.12.14
11:35
(10) спасибо) все получилось
14 denis_solyanko
 
08.12.14
11:36
в ссылке хранится дата нужная ее заново присваиваю и все
15 Cube
 
08.12.14
11:38
(14) Если документ ещё не записан в базу, то в ссылке пустая дата. Учти это при разработке...
16 denis_solyanko
 
08.12.14
11:38
(10) цикл сделал все нужно только просмотр ставить только некоторым элементам,
Если  РольДоступна("ПолныеПрава")тогда
Если Распечатан и Набрано тогда
Для каждого элемент из ЭлементыФормы цикл
Если   ТипЗнч(элемент) <> Тип("Надпись") тогда
Если ТипЗнч(элемент)<>  Тип("КоманднаяПанель") тогда
Если ТипЗнч(элемент)<>  Тип("Панель") тогда
Если ТипЗнч(элемент)<>  Тип("РамкаГруппы") тогда
Если ТипЗнч(элемент)<>  Тип("Кнопка")  тогда
Если ТипЗнч(элемент)<>  Тип("Флажок") тогда
элемент.ТолькоПросмотр = истина;
иначе
элемент.Доступность = Ложь;
конецесли;                                конецесли;                            Конецесли;                        конецесли;
конецесли;
конецесли;
конеццикла;
ЭлементыФормы.Дата.ТолькоПросмотр = Ложь;
ЭлементыФормы.ЗаявкаОт.ТолькоПросмотр = ложь;
ЭлементыФормы.ПровестиБезУчетаОстатков.Доступность = Истина;            
Конецесли;
КонецЕсли;
как  этот кусок оптимизировать
17 Cube
 
08.12.14
11:40
(16) Мать моя женщина...

Ты про логические операторы слыхал вообще?))
18 pessok
 
08.12.14
11:42
кажется, это называется "китайский код"
19 denis_solyanko
 
08.12.14
11:49
(17) или?
20 denis_solyanko
 
08.12.14
11:49
имеешь ввиду)
21 Cube
 
08.12.14
11:54
(19) ИЛИ, И, НЕ...
И лучше пользоваться равенством, чем неравенством - вроде как равенство работает быстрее. Для твоего кода-то использовать равенство можно без проблем.
22 denis_solyanko
 
08.12.14
12:22
(21) Если  Не( ТипЗнч(элемент) = Тип("Надпись")) ИЛИ                    Не( ТипЗнч(элемент)<>  Тип("КоманднаяПанель")) ИЛИ.... в таком духе?
23 denis_solyanko
 
08.12.14
12:22
= там)) неисправил в таком духе имеешь ввиду использовать или
24 Рэйв
 
08.12.14
12:24
(0)Попробуй всей форме поставить Толькопросмотр=Истина, а нужным = ложь. Правда сам не пробовал, но может получиться:-)
25 Рэйв
 
08.12.14
12:24
*нужным реквизитам
26 denis_solyanko
 
08.12.14
12:26
(24) пробовал, не работает так если ставишь форме только просмотр, все блоируется потом нельзя отдельным реквизитам задать свойства
27 denis_solyanko
 
08.12.14
12:38
Итог
Если  РольДоступна("ПолныеПрава")тогда
Если Распечатан и Набрано тогда
Для каждого элемент из ЭлементыФормы цикл
Если  НЕ( ТипЗнч(элемент)=  Тип("Надпись"))       И
      НЕ( ТипЗнч(элемент)=  Тип("КоманднаяПанель")) И
      НЕ( ТипЗнч(элемент)=  Тип("Панель"))         И
      НЕ (ТипЗнч(элемент)=  Тип("РамкаГруппы"))    И
      НЕ (ТипЗнч(элемент)=  Тип("Кнопка"))         И
      НЕ (ТипЗнч(элемент)=  Тип("Флажок")) тогда
      элемент.ТолькоПросмотр = истина;
      конецесли;
      конеццикла;
ЭлементыФормы.Дата.ТолькоПросмотр = Ложь;
ЭлементыФормы.ДатаОплаты.ТолькоПросмотр = Ложь;
ЭлементыФормы.ЗаявкаОт.ТолькоПросмотр = ложь;
ЭлементыФормы.ПровестиБезУчетаОстатков.Доступность = Истина;
Конецесли;
конецЕсли;
28 denis_solyanko
 
08.12.14
12:38
(21) Спасибо за оказанную помощь
29 Cube
 
08.12.14
12:43
(27) ))))))) Переходи на следующий уровень - скобки :))

Если НЕ (ТипЗнч(элемент) = Тип("Надпись") ИЛИ
     ТипЗнч(элемент) = Тип("КоманднаяПанель") ИЛИ
     ТипЗнч(элемент) = Тип("Панель") ИЛИ
     ТипЗнч(элемент) = Тип("РамкаГруппы") ИЛИ
     ТипЗнч(элемент) = Тип("Кнопка") ИЛИ
     ТипЗнч(элемент) = Тип("Флажок")) тогда
        элемент.ТолькоПросмотр = истина;
КонецЕсли;
30 Vladal
 
08.12.14
12:48
ИменаИсключений = "Имяреквизита1, ИмяРеквизита2 и т.д.";

Для каждого ЭлементФормы Из ЭлементыФормы Цикл
    
    Если ЭлементФормы = ЭлементыФормы.ПодтвержденПолучателем
     ИЛИ ЭлементФормы = ЭлементыФормы.ПодтвержденОтправителем
     ИЛИ ЭлементФормы = ЭлементыФормы.ОсновныеДействияФормы
     ИЛИ ЭлементФормы = ЭлементыФормы.ДействияФормы Тогда
     Продолжить;
    КонецЕсли;
    
    Если ЭлементФормы = ЭлементыФормы.КоманднаяПанельТовары Тогда
        Для Каждого КнопкаПанели Из ЭлементФормы.Кнопки Цикл
            // Элементы с признаком ИзменяетДанные сделать недоступными.
            Если КнопкаПанели.ТипКнопки = ТипКнопкиКоманднойПанели.Подменю Тогда
                Для каждого ПунктПодменю Из КнопкаПанели.Кнопки Цикл
                    Если ПунктПодменю.ИзменяетДанные Тогда
                        ПунктПодменю.Доступность = Ложь;
                    КонецЕсли;
                КонецЦикла;
            Иначе
                Если КнопкаПанели.ИзменяетДанные Тогда
                    КнопкаПанели.Доступность = Ложь;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    Иначе
        
        Если Нати(ЭлементФормы.Имя, ИменаИсключений) > 0 Тогда
            Продолжить;
        Конецесли;
        
        Попытка
            ЭлементФормы.ТолькоПросмотр = Истина;
        Исключение
            Попытка
                ЭлементФормы.Доступность = Ложь;
            Исключение КонецПопытки;
        КонецПопытки;
    КонецЕсли;
    
КонецЦикла;
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn