Гибкое управление свойствами доступности элементов управления в обычных формах 1С: Предприятия 8.х
Наверное, одной из самых непростых и скучных задач при проектировании обычной формы в «1С: Предприятии» является управление доступностью элементов в зависимости от того или иного набора данных. Мне встречалось очень много решений: от процедуры вроде УстановитьВидимостьДоступность() с включением в нее всех правил для элементов управления, до совершенно хаотично разбросанных по всему коду обращений к указанным свойствам.
Признаюсь честно, я тоже перепробовал различные способы, но в один прекрасный момент дошел до очень удобного и логичного (как мне кажется), который и будет описан в этом посте.
Все началось с того, что поиск решения для этой задачи натолкнул меня на статью из «Методик разработки» под названием «Организация управления доступом в форме». Ключевым моментом в статье является то, что управление доступом сосредотачивается в одной лишь процедуре УстановитьДоступ(). И если необходимо изменить состояния элементов управления, вызывается только эта процедура. Сама процедура не занимается определением доступа, а работает с данными из списков, которые формируются следующими функциями:
То есть сами условия доступности устанавливаются в этих функциях, а уже процедура УстановитьДоступ() присваивает соответствующим свойствам элементов управления эти заранее установленные значения.
Я разделил код на три составляющих. Первая — это методы, которые как раз выполняют изменения значений свойств доступности элементов формы. Вынес их в общий модуль. Назовем его условно УправлениеДоступом. Ниже расположен код, который размещается в нем. Я постарался максимально прокомментировать малопонятные участки кода.
Например, у нас есть табличное поле Товары, в котором присутствует колонка СкидкаПоДисконтнойКарте. Колонка видна только тогда, когда дисконтная карта проставлена в документ, т.е. реквизит ДисконтнаяКарта является заполненным. Соответственно, условие списока управления видимостью для колонки СкидкаПоДисконтнойКарте будет следующим:
Вторая часть когда — это функции, которые отвечают за формирование списков доступности. Они располагаются непосредственно в форме и являются экспортируемыми. Я немного отошел от стандарта 1С и заменил метод ПолучитьСписокДоступаКУправлениюВидимостью() на ПолучитьСписокУправлениеРедактированиемТекста(). Просто мне кажется, что так удобнее и логичнее. Ниже приведен шаблон кода с этими функциями:
И, наконец, третья часть — это процедура УстановитьДоступ(), которая тоже расположена в модуле формы. Именно эту процедуру мы вызываем в любом месте кода нашей формы, чтобы переопределить доступность элементов формы.
Чтобы было все нагляднее и понятнее, давайте рассмотрим следующий пример. Допустим, что у нас есть форма. На ней расположен флажок НаличнаяПродажа (булево), флажок ПробиватьФискальныйЧек (булево), поле ввода ДисконтнаяКарта (ссылка на справочник ДисконтныеКарты), поле ввода Комментарий (строка) и табличное поле Товары. Все связаны с одноименными реквизитами. У табличного поля есть колонка с именем СкидкаПоДисконтнойКарте (число). Кроме этого, есть командная панель ОсновныеДействияФормы, на которой размещена кнопка ПробитьЧек. Определим некоторые условия:
Теперь достаточно вызвать процедуру формы УстановитьДоступ(), и мы получим то состояние элементов, которые задали.
Хочется выделить следующий момент. В списки можно можно добавлять пути к элементам формы. Например, для вышеприведенного примера с таблицей Товары имя элемента определяем как «Товары.Колонки.СкидкаПоДисконтнойКарте». Или путь к кнопке ПробитьЧек. Можно использовать множественные вложения, вроде «ИмяКоманднойПанели.Кнопки.ИмяПодменю.Кнопки.ИмяКнопки».
Предлагаемый вариант не конечный. Можно внести множество мелких дополнений, вроде указаний, какие списки обрабатывать, а какие нет. Но это уже зависит от точечных потребностей разработчика.
Библиотека программного изменения формы (УФ)
Для ускорения быстродействия, во всех процедурах библиотеки отсутствуют проверки корректности введенных имен и значений! Для исключения появления ошибок, я приведу подробное описание всех передаваемых в процедуры параметров.
1. Необходимо разместить в дереве элементов формы уже добавленный реквизит объекта, либо реквизит формы.
2. Необходимо изменить несколько свойств для нескольких элементов формы.
3. Необходимо изменить несколько свойств элемента формы.
Данная процедура преобразует параметры и передает их в процедуру из пункта 2. Она используется для упрощения, когда нужно изменить свойства только одного элемента.
4. Необходимо изменить одно свойство элемента формы.
5. Необходимо установить несколько обработчиков событий для элемента формы.
6. Необходимо установить обработчик события для элемента формы.
7. Необходимо добавить на форму новую группу.
8. Необходимо добавить на форму новые реквизиты формы.
9. Необходимо добавить на форму новый реквизит формы.
Данная процедура преобразует параметры и передает их в процедуру из пункта 8. Она используется для упрощения, когда нужно добавить только один реквизит формы.
10. Необходимо добавить для формы новую команду и разместить ее на форме.
К данной статье я прилагаю обработку, в модуле объекта которой есть:
Ваш браузер устарел, пожалуйста обновите ваш браузер пройдя по ссылке www.microsoft.com/download
[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)
Многие сталкивались с требованиями Заказчика по настройке доступности тех или или иных элементов форм документов и справочников для определенных пользователей или Групп пользователей. Есть различные варианты решения данной Задачи: от использования RLS (позволяет настраивать Видимость и возможность Редактирования реквизитов объектов) до программного изменения модулей форм объектов. Но все эти решения в той или иной степени затрагивают сами объекты или изменяют права (изменения в конфигурации), что удорожает сопровождение и обновление конфигураций. И одним из основных недостатков этих решений является то, что они не являются достаточно гибкими и для изменения текущей настройки доступности и видимости приходится привлекать программистов, что опять ведет к удорожанию сопровождения решения.
Предлагаемое решение позволяет с минимальными изменениями в конфигурации добиться желаемого результата и без помощи программистов управлять доступом к элементам форм объектов (справочников и документов). Решение подходит практически для любой конфигурации и успешно себя зарекомендовало на проектах внедрения 1С:УПП 1.3, 1С:БП 1.6 (обычные формы), 1С:ERP 2.0; 1С:БП 3.0, 1С:УТ11.2, 1С:УНФ 1.6.
Механизм позволяет пользователю, имеющему соответствующие полномочия в информационной системе, «на лету», без изменения программного кода управлять видимостью и доступностью элементов интерфейсных форм объектов (справочников и документов). При этом все изменения, вносимые в правила отображения элементов интерфейсных форм объектов, вступают в силу сразу же после их внесения (без необходимости перезапуска сеанса пользователя, к которому они относятся) и начинают работать уже при следующем открытии формы.
Механизм позволяет управлять видимостью и доступностью любых объектов на форме, включая кнопки, поля ввода, элементы оформления (текст, рамка, картинка и т.п.), поля списков, табличные поля и их реквизиты, командные панели и др.
Ограничения видимости и доступности устанавливаются путем создания пользователем правил управления доступом к реквизитам форм объекта, которые могут быть назначены для конкретного пользователя из справочника «Пользователи» или для группы пользователей, предварительно созданной в справочнике «Группы пользователей».
Механизм позволяет создавать как «ужесточающие» Правила (когда Правило накладывает дополнительные ограничения на видимость или доступность, но при этом не может отменить запрет видимости или доступности, установленный на реквизит программно штатным образом), так и «вытесняющие» (когда видимость и доступность будет установлена для реквизита именно так, как это задано в Правиле, не взирая на то, как ее отрабатывают штатные ограничения программного кода конфигурации).
Для обеспечения удобства работы пользователя, Механизм имеет графический интерфейс управления правилами доступа, с помощью которого можно просмотреть существующие Правила, заданные для выбранного пользователя и/или объекта конфигурации, изменить существующие или добавить новые Правила:
1 – вид объекта для которого будут отображаться/создаваться Правила;
2 – ссылка на документ/элемент вида, заданного в п.1, по образцу форм которого будет формироваться структура реквизитов табличных полей формы в случаях, если они формируются динамически (программно);
3 – Пользователь или группа пользователей, на которых эти Правила будут распространяться;
4 – табличное поле с перечнем Правил, созданных для выбранного пользователя/группы пользователей с целью управления в его сеансе работы видимостью и доступностью заданных реквизитов указанных форм;
5 – Имя реквизита формы (со ссылкой на конкретную форму объекта выбранного в п.1) для которого будет работать текущее Правило;
6 – флаг, определяющий будет ли видимым указанный реквизит на форме для пользователя/группы пользователей, заданным в п.3 при выполнении условий Правил (установлен – реквизит будет видимым, снят – будет невидимым);
7 – флаг, определяющий будет ли доступным для редактирования указанный реквизит на форме для пользователя/группы пользователей, заданным в п.3 при выполнении условий Правил; имеет 3 состояния: установлен – реквизит будет доступным, частично установлен (серый флажок) – реквизит будет доступен в режиме «только чтение» (доступны копирование содержания поля, «педаль» просмотра элемента справочника и пр.), снят – будет недоступен;
8 – флаг, определяющий приоритетность Правила по отношению к ограничениям, устанавливаемым в формах объекта программно: если установлен, то Правило будет применяться в любом случае, снят – Правило будет применяться только для ужесточения ограничений, заданных программно. Например, на скриншоте мы видим Правило №3, согласно которого реквизит «Комментарий» на форме «ФормаЭлемента» справочника «Номенклатура» должен быть видимым, но недоступным. При текущем значении флага 8 (флаг снят), реквизит будет недоступен для редактирования всегда, но видимым он будет только в том случае, когда видимость не была ограничена программно (т.е. если реквизит был скрыт от пользователя программно, то он не появится на форме). Если же флаг 8 будет установлен, то реквизит по-прежнему будет всегда недоступен для редактирования, но при этом он также всегда будет видимым, не зависимо от программных установок и фильтров.
9 – условие, при котором будет срабатывать текущее Правило.
Для удобства, функционал формы разделен на 2 закладки: «Управление доступа» и «Текущие ограничения».
На закладке «Текущие ограничения» пользователь имеет возможность просмотреть правила, действующие в системе на текущий момент времени:
Ввод и корректировка условий выполняется при помощи конструктора условий, предоставляющего пользователю возможность легко и наглядно оперировать данными обрабатываемого объекта для формулирования условий применения Правил:
1 – перечень условий, определяющих применимость текущего Правила к конкретному объекту данных (конкретному документу или элементу справочника);
2 – поле объекта, по которому будет проводиться сравнение в условии (выбирается из дерева структуры отбора, формируемого программно для объекта конфигурации, исходя из его структуры метаданных);
3 – вид условия (вид сравнения пользователю предлагается выбрать из перечня возможных вариантов сравнения, зависящего от типа поля);
4 – значение для сравнения (зависит от типа поля);
5 – вариант объединения частей условия в случаях, когда оно является составным (возможные варианты «И» и «ИЛИ»);
Примечание: составные части условия объединяются в единое условие в порядке следования в списке конструктора и отрабатывают впоследствии согласно правилам работы логических операторов «И» и «ИЛИ» в среде разработки 1С8.х.
6 – внешний вид диалогового окна выбора поля для сравнения в условии (открывается при начале выбора п.5);
7 – кнопка переноса сформированных условий в обработку Правил.
2. Описание поставки:
PS В новых верстях платформы возможно включение общего модуля в расширение. Регистр сведений возможно так же включить в расширение.
3. Прочее
Платформа 1С версии не меньше 8.3.6 (с режимом совместимости 8.3.6, интерфейс Такси. Разрешить Версия 8.2).
Программный код полностью открыт.
Внедрение и техническая поддержка
Консультации по внедрению программного продукта проводятся бесплатно. При необходимости, внедрение и настройка данного программного продукта проводится из расчета 1000 руб/час.
Обновление при выпуске нового релиза осуществляется бесплатно для клиентов, которые приобрели данное ПО. Такие клиенты автоматически получают обновления с описанием изменений.
Приобретение программного продукта дает право на его установку и использование. Количество пользователей не ограничено и зависит только от наличия ключей платформы 1С.
В поставку входят Демо-база (*.dt) с примерами реализации Механизма, файл конфигурации (*.cf), файл расширения (*.cfe) и Руководство пользователя. Описание особенностей, а также порядок подключения Механизма в конфигурацию подробно описаны в Руководстве (в конфигурацию добавляется регистр сведений и общий модуль, а также подключается и настраивается Расширение).
Гарантия возврата денег
ООО «Инфостарт» гарантирует Вам 100% возврат оплаты, если программа не соответствует заявленному функционалу из описания. Деньги можно вернуть в полном объеме, если вы заявите об этом в течение 14-ти дней со дня поступления денег на наш счет.
Программа настолько проверена в работе, что мы с полной уверенностью можем дать такую гарантию. Мы хотим, чтобы все наши покупатели оставались довольны покупкой.
Для возврата оплаты просто свяжитесь с нами.
Условное оформление управляемой формы в 1С
Условное оформление формы в 1с 8 служит для управления видимостью, доступностью, цветом элементов таблиц управляемой формы (а также оно используется в СКД и динамических списках). Удобство его использования заключается в том, что вы один раз задаете условие по которому должно меняться оформление вашей формы. После этого при работе пользователя с формой, при срабатывании условия оформление будет меняться автоматически. Не нужно использовать события формы и писать лишний код.
Следует заменить, что условное оформление форм работает только в конфигурациях использующих управляемое приложение (Бухгалтерия 3.0, ЗУП 3.0/3.1, Управление торговлей 11 и т.п.)
Условное оформление 1с. Интерактивная настройка
Еще один плюс условного оформления — его можно настроить не написав ни строчки кода. Для этого в форме необходимо:
Обратите внимание, что условное оформление действует только на колонки таблиц формы. Другие элементы формы вы тоже можете выбрать в колонке Оформляемые поля, но это не даст никакого результата.
Условное оформление формы. Пример интерактивной настройки
Для примера мной была написана простейшая обработка, на формы которой добавлен реквизит с типом ТаблицаЗначений, с тремя колонками. А также три реквизита с типом булево. Скачать обработку можно Здесь.
Форма обработки выглядит так:
Настроим следующее условное оформление данной формы: при установке реквизита СкрытьКолонку1 в значение Истина, в таблице форме скрывать реквизит Колонка1.
Условное оформление 8.3. Пример программной настройки
Используя ту же внешнюю обработку, что и в предыдущем пункте, приведем пример программной настройки условного оформления. Необходимо сделать следующее: при установке реквизита ПоменятьЦветКолонки2 в значение Истина, в таблице формы раскрашивать фон Колонки 2, при установке реквизита СделатьНедоступнойКолонку3 в значение Истина, в таблице формы делать недоступным реквизит Колонка3.
В модуле формы создадим серверную процедуру, назовем ее УстановитьУсловноеОформление и сразу же допишем ее вызов в процедуре ПриСозданииНаСервере.
Весь следующий код будем писать в процедуре УстановитьУсловноеОформление. Нам необходимо добавить новый элемент условного оформления формы, для этого используем стандартную коллекцию формы УсловноеОформление.
Также как и в интерактивном варианте, нам необходимо в созданном элементе заполнить оформления, условия и поля. Для того чтобы указать поле мы должны создать поле компоновки данных с именем колонки на которую будет распространяться оформление. Если полей несколько, добавляем нужное количество полей компоновки данных. Для отборов создаем элементы отбора компоновки данных и заполняем для них левое значение, правое значение и вид сравнения. Для того, чтобы задать нужные оформления заполним значения параметров доступных оформлений. В нашем примере получается следующий код:
Таким образом мы создали оформление для второй колонки таблицы. Для третьей колонки оно делается аналогичным образом, поэтому не будем на нем подробно останавливаться. Итоговый код процедуры УстановитьУсловноеОформление будет выглядеть следующим образом:
Напомню, что скачать обработку написанную на основе разобранных примеров можно Здесь.
Добавление собственного поля и состояния в настройки доступности по состоянию в 1С:Документооборот
Настройки доступности по состоянию хранятся в справочнике «НастройкиДоступностиПоСостоянию». Соответствия полей и состояний добавляются в макетах данного справочника:
Рассмотрим процесс добавления собственного состояния и поля для внутреннего документа.
Для добавления собственного поля и состояния необходимо:
1. В макет «НастройкиПолейКомандВнутреннийДокумент» добавить собственное поле и состояние для пользователей и делопроизводителей:
В поле макета «ИменаПолейНаФорме» необходимо добавить имена элементов на форме внутреннего документа, которые необходимо блокировать (если элементов несколько, тогда необходимо перечислить их через запятую). Если новое поле и состояние используются в DMService, тогда необходимо указать имена этих полей из XDTO пакета «DM». В ячейке «ФункциональнаяОпция» необходимо указать функциональные опции, от которых зависит новое поле (если таковые имеются). Если новые состояния добавлять не нужно, тогда новое поле необходимо добавить только в макет и все ниже перечисленные действия не нужны.
2. Для нового состояния на форму элемента справочника «НастройкиДоступностиПоСостоянию» необходимо добавить колонки в таблицу формы «НастройкиДоступности» и вывести их на форму:
Тип значения колонки «НовоеСостояние» = «Число (1)», тип значения колонки «НовоеСостояниеСтрокой» = «Строка (0)».
Свойства нового элемента формы:
Свойства элемента формы аналогичны типовым элементам («НастройкиДоступностиНаСогласовании», «НастройкиДоступностиСогласован» и т.д.).
3. В модуле формы элемента справочника «НастройкиДоступностиПоСостоянию» в процедуру «УстановитьУсловноеОформление» в структуру «Колонки» необходимо добавить новое состояние:
В процедуру модуля формы элемента «ЗаполнитьНастройкиДоступности» необходимо добавить новое состояние в структуру «ВсеСостояния»:
В процедуру модуля формы элемента «ЗаполнитьНастройкиДоступности» в структуру «ДоступныеСостояния» необходимо добавить новое состояние, если новое состояние будет использоваться во входящих или исходящих документах, тогда необходимо добавить новое состояние в структуру для нужных типов объектов:
Данные изменения выполнялись в 1C:Документооборот 8 КОРП версии 2.1.16.1.