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с
Управление видимостью ячеек табличного поля
В табличном поле существует возможность изменять видимость отдельных ячеек при отображении данных . Для этого необходимо использовать обработчик события ПриВыводеСтроки() табличного поля . Параметрами данного события являются объекты типа ОформлениеСтроки и ДанныеСтроки . Объект ОформлениеСтроки имеет свойство Ячейки - коллекцию ячеек отображаемой строки . Каждая ячейка в этой коллекции является объектом типа ОформлениеЯчейки , который содержит свойства , влияющие на отображение ячеек . Для установки видимости отдельных ячеек отображаемой строки необходимо использовать свойство Видимость ячейки отображаемой строки . При установке данного свойства в Ложь табличное поле не будет отображать содержимое соответствующей ячейки табличного поля . Также стоит отметить , что если все ячейки , находящиеся в одной строке составной колонки , имеют выключенное свойство Видимость , то такая строка не будет отображена табличным полем . Объект ДанныеСтроки содержит коллекцию значений текущей строки , соответствующую коллекции колонок отображаемого динамического списка .
Поясним использование данного свойства на следующем примере . Пусть существует журнал документов ДокументыПокупателей (реквизит формы ЖурналДокументовСписок ) , у которого имеются графы Контрагент ( тип СправочникСсылка.Контрагенты ) и Информация (тип СправочникСсылка.ДоговорыВзаиморасчетов) . Колонки , отображающие значения данных граф, объединены в одну составную колонку , причем колонка Информация находится под колонкой Контрагент . Необходимо отображать значения указанных граф только если они не являются пустыми . Тем самым , строки табличного поля , у которых заполнены значения обоих граф , будут отображаться в две строки и в одну строку в противном случае .
Для этого необходимо при обработке события ПриВыводеСтроки() устанавливать видимость ячейкам , отображающим значения соответствующих граф :
Для того чтобы в шапке табличного поля составная колонка отображалась как единственная колонка, необходимо для колонки Информация сбросить свойство " Отображать в шапке " в палитре свойств . Также в нашем примере для колонки Контрагент устанавливается текст шапки " Контрагент / Информация ", указывающий , что в данной колонке отображаются значения граф Контрагент и Информация .
Необходимо помнить , что так как журнал документов является динамическим списком , то возможно удаление табличным полем колонок , у которых которых сброшено свойство Видимость . Если при обработке события ПриВыводеСтроки() произойдет обращение к таким колонкам , то возникнет ошибка времени выполнения . Для того чтобы определенные колонки не удалялись табличным полем, необходимо запретить данным колонкам удаление из динамического списка при изменении их видимости в табличном поле . Для этого необходимо при обработке события формы ПриОткрытии() добавить их в динамический список и запретить им удаление :
Более подробно ознакомиться с отличиями работы табличного поля при отображении динамических списков можно в разделе Особенности работы табличного поля с динамическими списками.
Код расширения открытый и достаточно "топороный", но, работает и не замедляет открытие форм (зависит, конечно, от того, что выполняется в произвольном коде).
Описаний как подключить расширение конфигураций много, после подключения - надо отключить у этого расширения безопасный режим.
Расширение подключает Регистр Сведений "ВДЭФ_Настройки", все остальные дописки в расширении Общего модуля "МодификацияКонфигурацииПереопределяемый".
В разделе "Администрирование" добавляется пункт "ВДЭФ настройки".
В список форм добавлены формы Справочников, Документов, Регистров сведений, Обработок и бизнеспроцессов с задачами.
В список ролей все возможные роли из основной конфигурации и расширений(если такие есть).
1. Выбираем форму, далее подгружаются все элементы формы.
2. Выбираем необходимый элемент.
3. Из списка ролей выбираем роль, по доступности которой правило не работает (допустим, ПолныеПрава, чтобы у всех кроме администраторов.
4. Устанавливаем флажок, Видимость, Доступность, ТолькоПросмотр.
Также есть вариант, чтобы форма вообще не открывалась (стандартная обработка = ложь; отказ = истина;) - для этого ставится только "Не открывать форму", так же выбирается нужная роль, чтобы правило не срабатывало, элемент формы можно не выбирать.
И еще вариант, когда выбрана форма, не выбран элемент, выбрана или нет роль для срабатывания и стоит галка "ТолькоПросмотр" - форма откроется целиком со свойством "ТолькоПросмотр" = Истина;
Также, если будет заполнено поле Произвольный код, то он выполнится после всех выбранных действий.
На каждый элемент формы создаётся отдельная строка регистра.
Есть небольшие баги(допустим, правило которое создаётся, применяется так же и на форму записи ВДЭФ_Настройки, т.к. форма на которую "вешаются" ограничения получается через "ПолучитьФорму()". Следовательно, может получиться так, что правило, которое вы создали не откроется на редактирование, его достаточно будет удалить и создать заново), которые, возможно, исправлю, но они мало влияют на суть.
Делал для себя, но, вдруг кому пригодится:) Месяц в боевом режиме - полёт нормальный.
Если будут вопросы или ошибки - пишите, постараюсь ответить.
UPD: Если какая-то форма не работает, значит в модуле этой формы, в обработчике ПриСозданииНаСервере не добавлено:
Соответственно, чтобы форма работала, можно добавить её в это же расширение через конфигуратор, и создать ПриСозданииНаСервере, выбрать "После" и дописывать код который написан выше.
Хоть механизм и типовой, но не на всех формах добавлен.
Проверено на конфигурации Комплексная Автоматизация 2 (2.4.9.70), Технологическая Платформа 8.3.14.1854 и 8.3.15.1565. Должно работать на любой конфигурации где применяется типовой функционал модификации конфигурации(УТ 11, КА 2 и ERP 2).
Почему мой справочник не видно в интерфейсе?
Несмотря на кажущуюся простоту вопроса, с подобной проблемой рано или позно сталкивается практически любой разработчик, когда вдруг он не видит в интерфейсе того, что ожидал. Например, какого-то раздела, или команды перехода к списку справочника.
В такой ситуации нужно проанализировать, что же сделано не так? Алгоритм проверки прост - сначала нужно убедиться, что все в порядке с разделом, к которому относится объект, а затем, что все в порядке с самим объектом.
Для примера рассмотрим справочник Контрагенты, относящийся к подсистеме (разделу) Закупки.
Сначала проверим раздел. Убедимся что:
1. Для той подсистемы, к которой относится искомый объект, и всех подсистем, которые находятся выше ее по иерархии установлено свойство подсистемы Включать в командный интерфейс. Для этого вызовем контекстное меню подсистемы Закупки и откроем палитру свойств этой подсистемы.
2. Откроем командный интерфейс конфигурации и проверим, что в нем установлена видимость этой подсистемы (или подсистемы ее верхнего (первого) уровня). Если в конфигурации созданы роли, то нужно обратить внимание также и на то, как настроена видимость для различных ролей. Для этого выделим корень дерева объектов конфигурации, вызовем его контекстное меню и выполним команду Открыть командный интерфейс конфигурации.
3. Откроем состав объектов подсистемы и убедимся, что подсистема включает в себя хотя бы один объект конфигурации. Если подсистема не содержит ни одного объекта, она не будет отображена в командном интерфейсе. Для этого в окне редактирования подсистемы Закупки откроем закладку Состав.
4. Откроем командный интерфейс подсистемы и проверим, что хотя бы одна команда (стандартная или созданная в конфигурации) доступна для настройки в этой подсистеме. Если таких команд нет – подсистема не будет отображена. При этом важно лишь наличие этих команд, а не их видимость. Для этого вызовем контекстное меню подсистемы Закупки и выполним команду Открыть командный интерфейс.
Если в составе команд нет вашей стандартной команды объекта, значит для объекта отключено использование стандартных команд (см. п.1 ниже).
Если в составе команд нет команды, созданной в конфигурации, значит, ей не назначена группа (см. п.2 ниже).
Если для команды назначена не группа подсистемы, а какая-то группа формы, то для того, чтобы команда стала доступна в интерфейсе форм необходимо задать еще и тип параметра этой команды (см. п.2 ниже).
5. Если в конфигурации созданы пользователи, и им назначены определенные роли, то убедимся, что в правах пользователя разрешено использование той подсистемы, к которой относится искомый объект, и всех вышестоящих по иерархии подсистем. Для этого откроем окно редактирования роли (например, Менеджер по закупкам), которая назначена пользователю, под именем которого будет происходить работа с прикладным решением.
6. Если в конфигурации созданы функциональные опции, и они связаны с каким-либо объектом конфигурации, то этот объект будет отображен в интерфейсе только в случае, если соответствующая функциональная опция включена в прикладном решении. Поэтому убедимся, что та подсистема, к которой относится искомый объект, и все вышестоящие по иерархии подсистемы, не отключены функциональными опциями в режиме исполнения. Для того, чтобы узнать, с какими функциональными опциями связана подсистема, вызовем контекстное меню подсистемы Закупки и выполним команду Дополнительно.
В нашем случае подсистема не связана ни с одной из функциональных опций. Это значит, что отображение подсистемы в интерфейсе не будет зависеть от значения функциональной опции в прикладном решении.
7. В заключение, в режиме 1С:Предприятие проверим, что раздел, к которому относится искомый объект, и все вышестоящие по иерархии разделы, не отключены пользовательскими настройками панели разделов.
Вернуться к настройкам, выполненным в конфигураторе, можно с помощью команды Все действия – Установить стандартные настройки в окне настройки панели разделов.
Теперь проверим все, что относится к самому объекту:
1. Что для искомого объекта разрешено использование стандартных команд. Для этого вызовем контекстное меню справочника Контрагенты и откроем палитру его свойств.
2. Если у объекта существует нестандартная команда, то чтобы увидеть ее в интерфейсе убедимся, что для нее задана группа и, если команда параметризованная, - тип параметра команды. Для этого вызовем контекстное меню нестандартной команды Печать справочника Контрагенты и откроем палитру ее свойств.
Иначе команда будет недоступна в командном интерфейсе, а параметризованная команда будет недоступна для включения в командный интерфейс форм, соответствующих ее параметру.
3. Откроем командный интерфейс подсистемы и убедимся, что включена видимость команды в подсистеме. При этом нужно обратить внимание не только на то, как настроена видимость по-умолчанию, но и на то, как она настроена для различных ролей. Для этого вызовем контекстное меню подсистемы Закупки и выполним команду Открыть командный интерфейс.
4. Откроем окно редактирования роли (например, Менеджер по закупкам) и проверим, что в правах этой роли разрешено использование искомой команды. Если речь идет о стандартной команде (например, открытия списка справочника) – нужно проверить права на сам объект.
Если речь идет о нестандартной команде (например, Печать) – нужно проверить права на эту команду.
5. Убедимся, что объект или команда не отключены функциональными опциями в режиме исполнения. Для того, чтобы узнать, с какими функциональными опциями связан объект, вызовем контекстное меню справочника Контрагенты и выполним команду Дополнительно.
6. В заключение, в режиме 1С:Предприятие проверим, что команда не отключена пользовательскими настройками.
Вернуться к настройкам, выполненным в конфигураторе, можно с помощью команды Все действия – Установить стандартные настройки.
Заметим, что для небольших конфигураций может быть не создано ни одной подсистемы. В этом случае команды для работы с объектами конфигурации будут помещены в раздел Рабочий стол, который создается системой по умолчанию. Вызвав из контекстного меню корня дерева объектов конфигурации команду Открыть командный интерфейс рабочего стола, можно редактировать командный интерфейс этого раздела.
Читайте также: