1С видимость элементов на форме

1С видимость элементов на форме

Guesto notes

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

Форма параметров обработки, с тремя страницами «Параметры подключения», «Логирование» и «Дополнительно».

Задача

По умолчанию скрыть закладку «Дополнительно», но с возможность его отобразить при необходимости из режима 1С:Предприятие.

Решение

Реализуется данное требование достаточно просто, в конфигураторе для страницы «Дополнительно» переходим в свойство Пользовательская видимость и снимаем галочку «Видимость». Свойство Пользовательская видимость задает видимость элемента по умолчанию.

Теперь форма откроется со скрытой страницей «Дополнительно», для ее отображения необходимо перейти в меню «Еще» и установить видимость для страницы.

При изменении видимости пользователем значение будет сохранено и в дальнейшем будет открываться настроенная форма.

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

Комментарии 4

Здравствуйте,
А можно ли этим свойством управлять программно? И если можно, то как?

Матвей, к сожалению программного управления данным свойством не знаю. Синтаксис помощник, так же ничего не выдает.
Видимо ни как, если найду решение — напишу.

Если просто установить Видимость = Ложь, то тогда этого элемента не будет в «Изменить форму», а хочется чтобы был

Что же, что же… Где эта дрянь правится программно?

Флаг "Видимость"

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

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

Все на клиенте

Вся суть описанного ниже способа заключается в изменении видимости / доступности элемента формы только на клиентской стороне, без обращений к серверу. Флаг "Видимость" нам не подойдет. Обратимся к другим возможностям.

Читайте также:  Hp 7110 замена печатающей головки

Есть два варианта. Первый — использовать свойство элемента формы "Доступность". Но тогда, хоть польлзователь и не сможет работать с элементов формы для котрого доступность установлена в ЛОЖЬ, видеть он его все же будет. Вот так выглядит обработчик изменения доступности элемента формы:

Недоступны элемент принимает следующий вид:

При изменении доступности элемента обращений к серверу для перерисовки формы, как это было с флагом "Видимость", не происходит.

Но что, если нам нужно полностью скрыть элемент формы из вида? Продемонстрируем как это сделать на элементе динамического списка представленой выше формы. Добавим на форму группу элементов с видом "Страницы" и две подчиненных группы с видом "Страница". Элемент динамического списка перенесем в одну из них.

На пустую страницу, где нет динамического списка, добавим декорацию вида "Надпись", чтобы страница была не пустой и на нее можно было переключаться. У группы страниц свойство "Отображение страниц" установим в ЛОЖЬ, чтобы закладки были не видны.

Теперь в команде "Скрыть динамический список" напишем следующий обработчик:

Команда переключает страницы. При переключении страниц обращений к серверу не происходит, все выполняется на стороне клиента. При этом если мы переключимся на страницу "Страница2", где был добавлена лишь декорация надписи, то форма будет выглядеть как на скриншоте ниже:

Таким образом, мы скрыли элемент управляемой формы оптимальным образом без обращений к серверу, контекстных вызовов сервера. Следовательно, сэкономили объем передаваемого трафика и ускорили работу программы.

Проектируя интерфейс на управляемых формах, особенно если решение будет работать в режиме тонкого клиента, всегда необходимо учитывать поведение платформы при тех или иных действия. Так, например, выше уже было сказано, что при изменении видимости элементов выполняется полная перерисовка формы на сервере, а при изменении свойства "Доступность" или переключении страниц — все действия выполняются на клиентской стороне.

Используйте возможности управляемых форм правильно!

Платформа 1С:Предприятие позволяет программно добавлять и изменять элементы управляемой формы. Разберемся для чего это может потребоваться.

Программная модификация формы может потребоваться в нескольких случаях:

  • При доработке типовых конфигураций для облегчения процедуры последующего обновления. В этом случае будет изменен только модуль формы. Модули намного проще обновлять, чем форму.
  • При реализации некоторых общих алгоритмов. Например, в подсистеме БСП «Запрет редактирования реквизитов объектов» для всех подключенных к подсистеме объектов предусмотрено программное создание кнопки для включения возможности редактирования реквизитов.
  • При реализации некоторых специфических алгоритмов. Например, в справочнике Номенклатура создаются поля для редактирования дополнительных реквизитов.
Читайте также:  Acr запись звонков 4pda

В управляемой форме можно программно добавить, изменить и удалить:

Все указанные операции возможны только на сервере.

Программное изменение формы имеет ограничения:

  • Удалить можно только программно добавленные реквизиты/команды/элементы. Нельзя программно удалить объекты, созданные в конфигураторе.
  • Нельзя назначить реквизит основным.

Изменение команд формы

Для управления составом команд у объекта УправляемаяФорма есть коллекция Команды . У коллекции есть несколько методов:

Коллекция Команды доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Добавить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере.

В качестве примера работы с командами формы создадим новую команду ИсторияИзменений с заголовком «История изменений…», которая будет вызвать обработчик ОтобразитьИсторию () . Создание выполняется при открытии формы.

&НаСервере
Процедура ПриСозданииНаСервере ( Отказ , СтандартнаяОбработка )
Команда = Команды . Добавить ( «ИсторияИзменений» );
Команда . Действие = «Подключаемый_ОтобразитьИсторию» ;
Команда . Заголовок = «История изменений…» ;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОтобразитьИсторию ( Команда )
// действия команды
КонецПроцедуры

Обработчик команды должен располагаться в форме и иметь директиву компиляции &НаКлиенте .

Изменение реквизитов формы

Чтение состава реквизитов формы выполняется функцией ПолучитьРеквизиты ( Путь >) , возвращающей массив типа РеквизитФормы . Параметр функции указывает путь к родительскому реквизиту (в виде строки). Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня.

Изменение реквизитов выполняется методом ИзменитьРеквизиты ( ДобавляемыеРеквизиты >, УдаляемыеРеквизиты >) объекта УправляемаяФорма . В параметры ДобавляемыеРеквизиты и УдаляемыеРеквизиты передаются массивы с элементами типа РеквизитФормы .

Внимание!

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

Создадим новый реквизит формы с именем Покупатель:

// Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив ;
ДобавляемыеРеквизиты . Добавить(Новый РеквизитФормы («Покупатель», Новый ОписаниеТипов ( «СправочникСсылка.Контрагенты» ), , «Клиент» ));

// Изменения состава реквизитов
ИзменитьРеквизиты ( ДобавляемыеРеквизиты );

Читайте также:  Beyond good and evil жемчужины

Изменение элементов формы

Для управления составом элементов у объекта УправляемаяФорма есть коллекция Элементы . У коллекции есть несколько методов:

Коллекция Элементы доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Вставить () , Добавить () , Переместить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере. Элементами коллекции могут быть:

Элементам формы можно программно назначить обработчики событий. Для этих целей предназначен метод УстановитьДействие ( ИмяСобытия >, Действие >) .

Рассмотрим несколько наиболее распространенных на практике примеров работы с командами, реквизитами и элементами формы.

Добавление команды и связанной с ней кнопки:

// Создание команды
Команда = Команды . Добавить ( «ИсторияИзменений» );
Команда . Действие = «Подключаемый_ОтобразитьИсторию» ; // В форме должна быть процедура с указанным наименованием
Команда . Заголовок = «История изменений…» ;
// Создание кнопки и связь ее с командой
Элемент = Элементы . Добавить ( «ИсторияИзменений» , Тип ( «КнопкаФормы» ));
Элемент.ИмяКоманды = «ИсторияИзменений» ;

Добавление реквизита и связанного с ним поля ввода:

// Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты . Добавить (Новый РеквизитФормы ( «Покупатель» , Новый ОписаниеТипов ( «СправочникСсылка.Контрагенты» ), , «Клиент» ));
// Изменение состава реквизитов
ИзменитьРеквизиты ( ДобавляемыеРеквизиты );
// Создание поля ввода и связь с реквизитом
Элемент = Элементы . Добавить ( «Покупатель» , Тип ( «ПолеФормы» ));
Элемент . Вид = ВидПоляФормы . ПолеВвода ;
Элемент . ПутьКДанным = «Покупатель» ;

Назначение элементу формы обработчика события:

ЭлементПокупатель . УстановитьДействие ( «ПриИзменении» , «Подключаемый_ПокупательПриИзменении» );

&НаКлиенте
Процедура Подключаемый_ПокупательПриИзменении ( Элемент )
// Действия события
КонецПроцедуры

Внимание!

Процедурам, которые устанавливаются в качестве обработчиков событий из кода с помощью метода УстановитьДействие () , рекомендуется задавать префикс Подключаемый_.

Внимание!

Скачать обработку с примерами программного поиска и изменения реквизитов, команд и элементов управляемой формы можно ЗДЕСЬ.

Остались вопросы?
Спросите в комментариях к статье.

Ссылка на основную публикацию
Adblock detector