Доступность реквизита на форме 1с
Сегодня мы поработаем с формой и научимся на ней прятать элементы - устанавливать видимость их (Рисунок 1).
На рисунке 1 изображена форма элемента, на которой есть элементы на форме в отображении списка - это синий прямоугольник, а на самой форме их нет - это жёлтый прямоугольник. То есть они есть, но они там не отображаются.
Это называется пользовательская видимость.
Делается она следующим образом: выделяется элемент на форме, открывается палитра свойств этого элемента и на свойстве "Видимость" снять галочку (Рисунок 2).
Снять/поставить галочку - это значит, что будет виден элемент или не будет виден. А если сказать иначе, то это Истина - галочка стоит и элемент виден, Ложь - галочка снята и элемент не виден.
Сохраните все изменения и увидите, что в пользовательском режиме они у вас теперь не будут отображаться, однако есть интересный момент: для поля "Наименование" установлено свойство "Проверка заполнения со значением Выдавать ошибку". Это свойство означает, что это поле обязательно должно быть заполнено и платформа выдаст ошибку, если оно будет пусто и не даст записать в базу. Запустите и нажмите кнопку "Записать и закрыть" и получите уведомление (Рисунок 3).
Как же так получается, что поля на форме нет, но платформа предупреждает нас, что это поле не заполнено?
Все дело в том, что поле есть на форме, но он просто невидимый для пользователя, но платформа его воспринимает полноценно. Это необходимо учитывать. Поэтому и называется - пользовательская видимость.
А теперь мы попробуем сделать так, чтобы поле появлялось и исчезало в зависимости от какого-либо условия.
Проще всего это сделать с полем, у которого отображение будет в виде галочки. То есть если галочка будет стоять, то поле будет видно, а иначе поле будет спрятано. Давайте попробуем сделать это. Для этого необходимо добавить на форму еще один реквизит с типом "Булево" (Рисунок 3).
После этого необходимо перейти на форму и переместить его на форму (Рисунок 4).
Обратите внимание на рисунок 4, у поля "Видимость" галочка не стоит, а значит по умолчанию стоит значение Ложь!
Теперь необходимо прописать процедуру. Чтобы прописать, необходимо понять как это будет работать!
А работать это будет следующим образом: как только мы меняем значение поля "Показать/Скрыть", так сразу исчезает/появляется поле "Число". Все происходит именно в таком порядке. Чтобы это работало у платформы есть специальные события, а в данном случае нужно событие "ПриИзменении".
ПриИзменении - это событие означает то, что как только вы начинаете менять значение поля, то есть ставить галочку или убирать ее, так сразу начинает меняться и значение поля. А если не трогать, то ничего и не будет происходить, именно поэтому событие и называется, при изменении чего-то в этом поле.
Создадим на форме группу (папку) и поместим в нее элемент, который будем прятать (убирать видимость) - поле "Число" (Рисунок 5).
Выделим поле "Показать/Скрыть" и найдем свойство и оно же событие "ПриИзменении" (Рисунок 5).
Нажмем на значок увеличительного стекла и создадим процедуру на клиенте (Рисунок 6).
В создавшейся процедуре убираем закомментированную строку и вместо нее прописываем нашу (Рисунок 7).
Этот код означает следующее:
1. Если - начало условия;
2. Объект.ПоказатьСкрыть - обращение к элементу формы;
3. Объект.ПоказатьСкрыть = Истина - само условие;
4. Элементы.Группа1 - обращение в элементу "Группа1";
5. Видимость - пользовательская видимость;
6. Элементы.Группа1.Видимость = Истина - папка с находящимися в ней элементами будет видна;
7. Элементы.Группа1.Видимость = Ложь- папка с находящимися в ней элементами будет не видна. КонецЕсли - окончание выполнения условия.
Запустите пользовательский режим и проверьте изменения. Как только поставите галочку, ничего не изменится. Снимете галочку, поле "Число" исчезнет, а как поставите галочку, так сразу же оно и появится.
Так и только так работает это событие - при изменении значения, то есть ставишь галочку или убираешь, начинает срабатывать событие и выполняться условие.
На этом статья урока подходит к концу. Попробуйте выполнить все действия, которые описаны в этом уроке. Если что-то не получается, то вы всегда сможете написать вопрос о том, что вам непонятно или вернуться к предыдущим урокам и посмотреть их - ссылки внизу!
Ссылка для вступления телеграм-канал - t.me.Apiscourses
Подписаться в группу ВКонтакте
Прошлые уроки:
На этом все. Жду Вас на следующем занятии.
P.S. Подписывайтесь на мой канал :-)
программирование программирование 1с 1с предприятие обучение онлайн обучение 1с
Добрый день!
Нужно, чтобы пользователь с определенной ролью не мог редактировать некоторые поля на форме.
Нашел в свойствах документа, вкладка "Права" внизу "Ограничение доступа к данным".
Там нужно выбрать поле и написать некий запрос, вот вопрос в том что в нем писать?
Варианты вроде Если РольДоступна("МояРоль") Тогда или просто РольДоступна("МояРоль") не работают.
- Вопрос задан более трёх лет назад
- 7341 просмотр
"Ограничение доступа к данным" во вкладке "Права" - это реализация механизма RLS (ограничение прав на уровне записей). Там можно настроить доступ к отдельным элементам (записям) таблицы документа или справочника. Т.е. не к отдельным реквизитам документа, а к отдельным документам, отобранным в запросе.
Вам можно просто использовать РольДоступна("МояРоль") в событие формы "При открытии" для управления доступностью отдельных элементов формы, где "МояРоль" - это роль, которой вы хотите дать право доступа к реквизитам.
Запрос писать не обязательно. Для выбранной роли и поля установите галочки требуемых прав. Если вам нужно запретить редактирование, то достаточно поставить чтение и просмотр.
gunsmyth gunsmyth
RLS буду стараться не использовать, чтобы не терять в производительности, ну и архитектурно это не очень правильно.
Вам можно просто использовать РольДоступна("МояРоль") в событие формы "При открытии" для управления доступностью отдельных элементов формы, где "МояРоль" - это роль, которой вы хотите дать право доступа к реквизитам.
>>>Я вот про эту форму говорил:
И я про нее говорил. RLS вам не нужен, в данном случае. Достаточно галочками права отметить.
На форме установлен флажок. При определенных условиях необходимо, что бы он, оставаясь ВИДИМЫМ, становился НЕДОСТУПНЫМ.
пытаюсь как-то прописать так:
нет такой возможности.
Подскажите, пожалуйста, как это сделать?
Добавлено через 6 минут
пишет: "Значение не является значением объектного типа (Доступность)"
Добавлено через 1 минуту
всё, что сообщает об этом Синтаксис-помошник:
"Флажок (CheckBox)
Доступность (Enabled)
Использование:
Чтение и запись. Описание:
Тип: Булево. Содержит признак доступности флажка.
Истина - доступен.
Доступность:
Как распространить роли пользователей на доступность элементов на форме?
В общем сабж. Допустим есть две роли. Admin и User. Как сделать чтобы у админа была доступна.
Нужно изменить доступность кнопки в одной форме нажатием кнопки в другой
Есть две формы. В первой есть кнопка "which" с enabled = false, во второй есть кнопка, нажатие.
Доступность IP-адреса
Когда нет ответа, он пишет просто время причем в одну строку: 2013-06-04 - 17:22:22 2013-06-04 -.
Вероятно идет обращение не к элементу формы, а к переменной с которой он связан.
Попробуйте прописать полностью:
Большое спасибо.
А не подскажите, в каком разделе какой литературы это можно посмотреть?
Или как сформулировать в поисковиках подобный вопрос?
Не пойму, почему нельзя обратиться сразу к Флажку, ведь команда "Флажок1=Истина" - доступен без уточнений - ЭтаФорма и ЭтотЭлемент.
Большое спасибо.
Не пойму, почему нельзя обратиться сразу к Флажку, ведь команда "Флажок1=Истина" - доступен без уточнений - ЭтаФорма и ЭтотЭлемент.
Grusha, как говорил один небезызвестный человек – мухи отдельно. котлеты отдельно. Флажок1 – это реквизит, а ЭтаФорма.Флажок1 – элемент формы. В общем случае название элемента формы и навание реквизита могут не совпадать, а два и более элемента формы могут быть связаны с одним и тем же реквизитом.
Иногда при разработке встречается такая проблема: размещённый на форме элемент не отображается в режиме 1С:Предприятия. Хотя, по задумке и всем представлениям его должно быть видно. Что же делать с «чудесным исчезновением?». Причин подобного поведения множество. Составил для себя чек-лист, покрывающий большинство подобных ситуаций.
Достаточно просто методично проверить каждый пункт — и «беглец» отыщется.
Подробный чек-лист
Видимость элемента
Первое, что, собственно, приходит на ум — свойство Видимость самого элемента. Для надёжности можно вызвать отладчик и убедиться, что оно включено в нужный момент.
Видимость родителей
Следующая возможность — проверка видимости у родительских групп. Если не отображается группа — не отображается и сам элемент. Также открываем отладчик и по свойству Родитель проверяем отображение вышестоящих групп.
Путь к данным
В управляемом интерфейсе многие элементы формы должны быть привязаны к реквизитам формы. Данные отдельно — интерфейс отдельно. Случается, что такая связь пропадает (например, при изменении метаданных, или при программном формировании элементов). Проверяем свойство ПутьКДанным — должен быть путь к актуальному реквизиту формы.
Цвет фона
Сам элемент может быть размещён на форме, но визуально сливается с её фоном. Не пытайтесь разглядеть белое на белом — не выйдет 🙂 Проверяем свойство ЦветФона у самого элемента и у родительской группы или формы.
Отображение заголовка
Похожая на предыдущий пункт ситуация. Элемент на форме выведен и отображается, но визуальной информации не несёт. Актуально для надписей, групп и полей ввода. Проверяем свойство ОтображатьЗаголовок или ПоложениеЗаголовка , чтобы убедиться, что заголовок показывается. А также само свойство Заголовок, чтобы убедиться, что в текст есть.
Пользовательская видимость
Платформа 1С:Предприятие позволяет скрывать элементы формы для выбранных ролей пользователя. Настраивается это визуально в конфигураторе. Убеждаемся, что флажки для пользователя с рассматриваемой ролью установлены.
Пользовательские настройки формы
Формы в 1С версий 8.2 и 8.3 не зря называют управляемыми. Пользователь в режиме 1С:Предприятие может настраивать вид форм (в том числе перемещая и скрывая ненужные для него элементы). Чтобы вернуть отображение в исходное состояние необходимо вызвать команду «Установить стандартные настройки». Меню «Ещё» формы.
Функциональные опции
Также, в технологическую платформу включён механизм функциональных опций. Использование механизма даёт возможность разделить функциональность конфигурации, убрав незадействованные блоки в режиме 1С:Предприятия. В том числе на функциональную опцию может быть «подвешен» и реквизит формы. Тогда все связанные с ним элементы не будут отображаться на форме. В режиме конфигуратора проверяем состав функциональных опций.
Доступность реквизита из прав
Гибкая система ролей и даже RLS позволяет настроить использование отдельных реквизитов объекта конфигурации. Когда такое использование запрещено ролью, реквизит не будет прочитан из базы данных, а связанные с ним элементы не будут отображаться. Как правило, для роли ПолныеПрава в типовых конфигурациях доступна вся функциональность решения. Поэтому этой ролью можно воспользоваться, чтобы быстро диагностировать данный пункт.
СписокВыбора для переключателя
У элементов вида «Поле переключателя» всегда должен быть заполнен список выбора. Даже если элемент связан с перечислением. Проверяем свойство СписокВыбора и при необходимости вызываем команду Заполнить — тогда значения будут получены из перечисления.
Выбранная страница
Есть зависимые элементы у группы
Это кажется очевидным, но всё же стоит проверить: когда речь идёт об элементе Группа, у него должен отображаться хотя бы один подчинённый элемент.
Пользовательский кеш
И, наконец, универсальный источник всевозможных «странностей» платформы: пользовательский кеш. Возможно, после его очистки, проблема исчезнет сама собой. Сделать это можно, например, с помощью StartManager.
Коротко перечисленные выше пункты:
- Видимость элемента
- Видимость родителей
- Путь к данным
- Цвет фона
- Отображение заголовка
- Пользовательская видимость
- Пользовательские настройки формы
- Функциональные опции
- Доступность реквизита из прав
- СписокВыбора для переключателя
- Выбранная страница, если элемент внутри страницы
- Есть зависимые элементы у группы
- Пользовательский кеш
Похожие записи:
1с, How to, Кодинг
Оптимальное изменение видимости элементов на управляемой форме
В предыдущей статье была описана причина, по которой изменение видимости элементов на управляемой форме не является хорошим способом перестроения интерфейса, управлением доступности элементов формы для пользователей.
Сегодня мы рассмотрим альтернативный способ изменения видимости элементов управляемой формы, который не инициирует обращение к серверу. Тем самым мы сможем сэкономить трафик и увличить быстродействие программы.
Все на клиенте
Вся суть описанного ниже способа заключается в изменении видимости / доступности элемента формы только на клиентской стороне, без обращений к серверу. Флаг "Видимость" нам не подойдет. Обратимся к другим возможностям.
Есть два варианта. Первый - использовать свойство элемента формы "Доступность". Но тогда, хоть польлзователь и не сможет работать с элементов формы для котрого доступность установлена в ЛОЖЬ, видеть он его все же будет. Вот так выглядит обработчик изменения доступности элемента формы:
Недоступны элемент принимает следующий вид:
При изменении доступности элемента обращений к серверу для перерисовки формы, как это было с флагом "Видимость", не происходит.
На пустую страницу, где нет динамического списка, добавим декорацию вида "Надпись", чтобы страница была не пустой и на нее можно было переключаться. У группы страниц свойство "Отображение страниц" установим в ЛОЖЬ, чтобы закладки были не видны.
Теперь в команде "Скрыть динамический список" напишем следующий обработчик:
Таким образом, мы скрыли элемент управляемой формы оптимальным образом без обращений к серверу, контекстных вызовов сервера. Следовательно, сэкономили объем передаваемого трафика и ускорили работу программы.
Проектируя интерфейс на управляемых формах, особенно если решение будет работать в режиме тонкого клиента, всегда необходимо учитывать поведение платформы при тех или иных действия. Так, например, выше уже было сказано, что при изменении видимости элементов выполняется полная перерисовка формы на сервере, а при изменении свойства "Доступность" или переключении страниц - все действия выполняются на клиентской стороне.
Читайте также: