Только просмотр всех реквизитов формы кроме одного

У любой формы в 1С есть свойство ТолькоПросмотр, которое управляет доступностью для редактирования всех ее элементов. Но оно не подходит, когда стоит задача на выборочный запрет редактирования элементов. Например, есть форма со множеством элементов на ней, и необходимо убрать доступность для всех этих элементов формы, но в тоже время оставить доступ для редактирования одного или нескольких элементов. Для этой цели я написал процедуру, которую можно разместить в каком-либо серверном общем модуле и вызывать ее, например в событии формы ПриСозданииНаСервере:

// ПАРАМЕТРЫ:
// ГруппаРодитель - вся форма, или группа формы, или таблица формы
    
    // например: ЭтаФорма (вся Форма объекта)
    
    // или Элементы.Товары (таблица Товары)
    
    // или Элементы.Товары.КоманднаяПанель (командная панель таблицы Товары)
    
    // или Элементы.Товары.КонтекстноеМеню (контекстное меню таблицы Товары)
    
    // или Элементы.ТоварыКонтекстноеМенюСкопировать (кнопка Скопировать в контекстном меню таблицы Товары)
    
    // или Элементы.ТоварыКоличество (колонка Количество в таблице Товары)
    
    // или Элементы.ГруппаШапка (группа элементов на форме с названием ГруппаШапка)

//МассивДоступныхЭлементовФормы - массив, содержащий в себе доступные элементы формы, например:

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

Рассмотрим параметры этой процедуры:
ГруппаРодитель — группа формы, таблица формы, командная панель формы, командная панель таблицы, контекстное меню таблицы формы, или сама форма. В этот параметр мы передаем одно из вышеперечисленных значений, на подчиненные элементы которого будем ставить запрет на редактирование.
МассивДоступныхЭлементовФормы — массив содержащий в себе элементы формы, группы формы, таблицы формы, командную панель формы, командную панель таблицы, контекстное меню таблицы, кнопки командной панели, кнопки контекстного меню и тд. В этот параметр мы передаем массив, на элементы которого не должен накладываться запрет на редактирование.

Ø

Я
   Silenzio

14.09.05 — 10:31

Каким образом можно решить следующую задачу?
Необходимо установить режим недоступности для изменения всех реквизитов формы, искючая при этом некоторые поля в табличной части, для возможного их просмотра.

  

Партнерская программа EFSOL Oblako

   Naumov

1 — 14.09.05 — 10:45

1)Форма (Form)
ТолькоПросмотр (ReadOnly)
Использование:
Чтение и запись.
Описание:
Тип: Булево. Содержит признак использования формы в режиме просмотра. Если свойство установлено в Истина, то становятся не доступны для изменения элементы управления, связанные с реквизитами любого реквизита формы, элементы управления, для которых установлено свойство ИзменяетДанные, а также становятся не доступны все кнопки командной панели с установленным свойством ИзменяетДанные.
2) Как в 77 был метод так и остался :Доступность (Enabled)
Использование:
Чтение и запись.

   Silenzio

2 — 14.09.05 — 10:59

Это понятно. Свойство ТолькоПросмотр устанавливает режим для всех подобных реквизитов, а необходимо чтобы для некоторых это не работало.

   Naumov

3 — 14.09.05 — 11:01

ТОгда у нужных Метод Доступность. Больше никак

   Silenzio

4 — 14.09.05 — 11:15

ОК!Спасибо! Понимаешь, только когда используешь метод Доступность, становится недоступным также кнопка просмотра.

   MaxS

5 — 14.09.05 — 11:35

(4) У отдельно взятого элемента тоже есть Доступность.
Что-то типа так:
Для Каждого Элемент Из ЭлементыФормы Цикл
Элемент.Доступность = Ложь;
КонецЦикла;
ЭлементыФормы.МояЛюбимаяКнопка.Доступность = Истина;

  

Filin

6 — 14.09.05 — 11:37

(4)Ну тогда это немного другое, чем просто «ТолькоПросмотр» или «Доступность».
Если кнопка «Просмотра» нужна доступной, то надо либо делать такую кнопку самому (а не пользоваться стандартной)и писать код обработки, либо накладывать ограничения на форму открываемого объекта и переписывать стандартный обработчик «ОбработкаВыбора»

Я в одной книжке по программированию как то прочитал: «Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.»

proGAll
23.09.2014 14:03 Прочитано: 5035

Всем привет,

8.3.5, УФ. На форме программно создаются реквизиты формы и элементы, связанные с ними. После программного создания на форме этих динамически формируемых элементов для формы в модуле формы делаю

Код 1C v 8.3

 ЭтотОбъект.ТолькоПросмотр = Истина;   

после чего признак невозможности редактирования устанавливается на все реквизиты, кроме программно созданных. В чем может быть причина? Спасибо.

Yandex
Возможно, вас также заинтересует

Реклама на портале

proGAll
23.09.2014 14:07 Ответ № 1

Я извиняюсь, вопрос никак не по Бухгалтерии), пренести в «Управляемое приложение» не смог

E_Migachev
23.09.2014 14:58 Ответ № 2

потому что ты блокируешь объект, а надо форму

proGAll
23.09.2014 15:49 Ответ № 3

Да, забыл написать, режим совместимости с 8.2 отключен, т.е. работаю с чистой 8.3, поэтому используя ЭтотОбъект в модуле формы я блокирую данную управляемую форму.

E_Migachev
23.09.2014 16:22 Ответ № 4

в управляемой ты можешь блокировать элементы

Код 1C v 8.2 УП

  Элементы.СтраницаОписание.ТолькоПросмотр = истина;   

не помню точно, но вроде как возможно

Код 1C v 8.2 УП

 Элементы.ТолькоПросмотр = истина;   
proGAll
23.09.2014 16:46 Ответ № 5

Нашелся ответ, если элемент не связан с основным реквизитом формы или у реквизита, с которым он связан не установлена СохраняемыеДанные, то он не блокируется. Спасибо.

Подсказка: Для быстрого поиска ответов — используйте ‘Поиск’

Для выбора доступны поля элементов управления, табличные части, команды, элементы декорации, а так же вся форма.

Поле «Вид элемента» (3) определяет вид элемента формы, для которого выполняется настройка. Заполняется автоматически при выборе Элемента (2) из формы подбора.

Поле «Имя реквизита» (4) имя реквизита объекта, значение которого связано с элементом управления. Заполняется автоматически при выборе Элемента (2) из формы подбора.

Поле «Пользователь» (5) определят для кого будет действовать данная настройка. Можно указывать конкретного пользователя или группу.

Поле «Произвольное условие» (6) определяет пользовательское условие, при выполнении которого будет действовать данная настройка. Следует иметь в виду, что настройки доступности элементов управления в общем случае применяются при открытии формы, при проверке заполнения и после записи объекта. – Таким образом пользовательские условия на значения реквизитов объекта не будут автоматически пересчитываться при изменении соответствующих реквизитов объекта.

Пример: ввели настройку ограничения доступности команды «Добавить вложение» в качестве пользовательского условия введена проверка заполнения поля «Комментарий». Таким образом если при открытии формы поле комментарий не заполнено, команда добавить вложение не доступна. Если просто заполнить комментарий, команда не станет доступной до тех пор, пока не записать объект.

Поле «Статус» (7) определяет статус объекта, для которого будет действовать данная настройка.

Переключатель «Настройка ограничения» (8) — (11) определяет какой вид ограничения будет применяться для указанного элемента:

  • Не используется (8). Ограничение доступности не используется.
  • Скрыть видимость (9). Элемент не отображается на форме. Данное ограничение не доступно, если в качестве элемента выбрана «Вся форма».
  • Только просмотр (10). Элемент становится не доступным для редактирования. Данное ограничение не доступно, если в качестве элемента выбрана «Группа формы» или «Декорация формы». Если в качестве элемента выбрана «Вся форма», то вся форма открывается только на просмотр.
  • Обязательное (11). Реквизит формы обязателен для заполнения. Ограничение доступно если элемент формы связан с реквизитом объекта (4).

Снятие блокировки состоянием (12). В механизме установки статусов документа – если статус документа не «Черновик», то все элементы управляется становятся не доступными для редактирования. Установка данного признака отключает блокировку элемента статусом.
При этом не отменяются прочие программные ограничения. Пример: команда «Списать лимиты» доступна только для документа с признаком «Сверх бюджета». Установка данной настройки (12) для элемента «Списать лимиты» сделает его доступным для документа в статусе «Утвержден», но если признак «Сверх бюджета» снят, то элемент «Списать лимиты» останется недоступным вне зависимости от настройки.
Если в качестве элемента управления выбрана «Вся форма», то установка данного признака позволит изменять документ в статусе «Закрыт».

Понравилась статья? Поделить с друзьями:
  • Только тольяттинская лесоперерабатывающая компания
  • Томаты веселая компания описание сорта фото отзывы
  • Томская инвестиционная компания отзывы сотрудников
  • Томский областной суд реквизиты для оплаты пошлины
  • Тоо жамбылская цементная производственная компания