Константы и глобальный запрет на выбор элементов справочника из определённой группы
Коллеги, добрый вечер! Сориентируйте пожалуйста новичка, подскажите куда копать?
Задача: есть ряд констант, назначаемых вручную через формы констант. По типу все они привязаны к одному и тому же справочнику. Справочник иерархический. Необходимо запретить выбор элемента из одной из групп. Можно ли сделать это глобально, так чтобы вообще больше не думать и отдельно не повторять примерно один и тот же код на формах констант? Например под предлогом того, что элементы из этой группы являются исключительно справочными и их в системе нельзя нигде больше использовать.
Развивая вопрос - как запретить не только в рамках назначения констант, но и при использовании в каких-либо других справочниках и документах.
Надеюсь описал понятно. Спасибо!
Задача: есть ряд констант, назначаемых вручную через формы констант. По типу все они привязаны к одному и тому же справочнику. Справочник иерархический. Необходимо запретить выбор элемента из одной из групп. Можно ли сделать это глобально, так чтобы вообще больше не думать и отдельно не повторять примерно один и тот же код на формах констант? Например под предлогом того, что элементы из этой группы являются исключительно справочными и их в системе нельзя нигде больше использовать.
Развивая вопрос - как запретить не только в рамках назначения констант, но и при использовании в каких-либо других справочниках и документах.
Надеюсь описал понятно. Спасибо!
Найденные решения
Коллеги, "я шмогла". Вдруг кому нужно, хотя, вероятно, это банальная задача. Решилось всё созданием формы выбора для справочника моего. А сам код в модуле упомянутой формы вот такой:
Критика приветствуется!
&НаСервере
Функция СписокВыборНаСервере(ДанныеВыбора, СтандартнаяОбработка)
Если ДанныеВыбора.Родитель.Наименование = "Уволенные" Тогда
СтандартнаяОбработка = Ложь;
Возврат Ложь;
Иначе Возврат Истина;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если НЕ СписокВыборНаСервере(Элементы.Список.ТекущиеДанные.Ссылка, СтандартнаяОбработка) Тогда
ОчиститьСообщения();
Сообщить("Уволенные сотрудники приведены исключительно справочно!");
КонецЕсли
КонецПроцедуры
ПоказатьКритика приветствуется!
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Развивая вопрос - как запретить не только в рамках назначения констант, но и при использовании в каких-либо других справочниках и документах.
Как раз мой вариант в форме выбора справочника и позволяет из любых форм запретить выбор определённых элементов.
Но повторюсь, работает только при вызове формы выбора. Если есть быстрый выбор из выпадающего списка, не поможет.
Для Справочника нужно создать предопределенные группы по которым устанавливаться будет запрет, например: "Группа1", "Группа2", "Группа3". Нужно создать для каждой группы соотв. константу: "ЗапретитьГруппу1", "ЗапретитьГруппу2", "ЗапретитьГруппу3".
В форме где будет происходить выбор, для реквизита определить событие Реквизит1ОбработкаВыбора(
В форме где будет происходить выбор, для реквизита определить событие Реквизит1ОбработкаВыбора(
&НаСервереБезКонтекста
Функция ВыборЗапрещен(ВыбранноеЗначение)
Если ВыбранноеЗначение.ПринадлежитЭлементу(Справочники.Справочник1.Группа1) Тогда
Если Константы.ЗапретитьГруппу1.Получить() Тогда
Возврат Истина;
КонецЕсли;
ИначеЕсли ВыбранноеЗначение.ПринадлежитЭлементу(Справочники.Справочник1.Группа2) Тогда
Если Константы.ЗапретитьГруппу2.Получить() Тогда
Возврат Истина;
КонецЕсли;
ИначеЕсли ВыбранноеЗначение.ПринадлежитЭлементу(Справочники.Справочник1.Группа3) Тогда
Если Константы.ЗапретитьГруппу3.Получить() Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Возврат ложь;
КонецФункции
&НаКлиенте
Процедура Реквизит1ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ВыборЗапрещен(ВыбранноеЗначение) Тогда
Сообщить("Элемент "+ВыбранноеЗначение+" запрещено выбирать!");
СтандартнаяОбработка = ложь;
КонецЕсли;
КонецПроцедуры
Показать
(2) Мне кажется автор немного не то имеет в виду. Ему не хочется повторять один и тот же код на каждой форме константы. Ему необходимо в нескольких формах запретить выбрать определенную группу.
Проще всего в форме выбора в событии "ОбработкаВыбора" сделать проверку, что-то типа этого:
Единственное, что это не сработает, если не будет вызываться стандартная форма выбора. Ну или будет выбран элемент из выпадающего списка.
Проще всего в форме выбора в событии "ОбработкаВыбора" сделать проверку, что-то типа этого:
&НаСервере
Функция ПроверитьЗначение(Значение)
Возврат НЕ (Значение.Родитель.Код = "00-00037437");
КонецФункции
&НаКлиенте
Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
СтандартнаяОбработка = ПроверитьЗначение(Значение);
КонецПроцедуры
ПоказатьЕдинственное, что это не сработает, если не будет вызываться стандартная форма выбора. Ну или будет выбран элемент из выпадающего списка.
(4)
Ну просто если это выбор элемента из справочника - тогда будет открываться форма выбора?
Весь код по фильтрации будет только в этой форме в одном месте. Вместо повтора кода в форме констант.
Если конечно это не быстрый выбор.. Хотя справочник ирерархический вроде..
о имеет в виду. Ему не хочется повторять один и тот же код на каждой форме константы. Ему необходимо в нескольких формах запретит
Ну просто если это выбор элемента из справочника - тогда будет открываться форма выбора?
Весь код по фильтрации будет только в этой форме в одном месте. Вместо повтора кода в форме констант.
Если конечно это не быстрый выбор.. Хотя справочник ирерархический вроде..
Вариант I
RLS не подойдёт?
Добавить в справочник реквизит: "СправочныйЭлемент" и роль, которая "видит" только не справочные.
Вариант II
Забодяжить подписку на событие "ОбработкаПолученияДанныхВыбора" для источника "СправочникМенеджер.МойЛюбимыйСправочник"
RLS не подойдёт?
Добавить в справочник реквизит: "СправочныйЭлемент" и роль, которая "видит" только не справочные.
Вариант II
Забодяжить подписку на событие "ОбработкаПолученияДанныхВыбора" для источника "СправочникМенеджер.МойЛюбимыйСправочник"
(6)
А как это можно реализовать? Чуть-чуть бы подробнее. Мне намекали на менеджер справочника, но я не разобрался... Что-то такое мне и видится, чтобы на уровне справочника решить, а дальше уже бы не волноваться о том, как и где мы будем выбирать из него элементы. Если это так работает.
Вариант II
Забодяжить подписку на событие "ОбработкаПолученияДанныхВыбора" для источника "СправочникМенеджер.МойЛюбимыйСправочник"
Забодяжить подписку на событие "ОбработкаПолученияДанныхВыбора" для источника "СправочникМенеджер.МойЛюбимыйСправочник"
А как это можно реализовать? Чуть-чуть бы подробнее. Мне намекали на менеджер справочника, но я не разобрался... Что-то такое мне и видится, чтобы на уровне справочника решить, а дальше уже бы не волноваться о том, как и где мы будем выбирать из него элементы. Если это так работает.
(12) Конфигуратора рядом нет. Но там легко разобраться:
1. Добавляете новую подписку.
2. Источник СправочникМенеджер.ВашСправочник
3. Событие ОбработкаПолученияДанныхВыбора
Создаёте процедуру нажав лупу в палитре свойств (ну как обычно). Процедура создаётся с параметрами.
Далее с ИТС:
ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
ДанныеВыбора – это переменная, в которую разработчик должен поместить собственный список выбора. При входе в обработчик этот параметр не содержит никаких значений, то есть через него нельзя получить доступ к списку выбора, который сформирует платформа. Просто потому, что этот список формируется уже после выхода из этого обработчика. Однако может возникнуть желание в этом обработчике получить список, формируемый платформой, и добавить в него (удалить) несколько элементов. Как это сделать – рассказано в разделе «Метод "ПолучитьДанныеВыбора()"».
Переменная Параметры содержит набор параметров, которые платформа будет использовать для формирования списка выбора. Особенность заключается в том, что при формировании списка выбора платформа будет учитывать свойства Параметры выбора и Связи параметров выбора, заданные для соответствующего реквизита объекта конфигурации. Поэтому в параметрах могут содержаться какие-то отборы.
....
Таким образом, у нас есть следующие возможности:
изменить Параметры и сказать платформе, чтобы она сформировала список выбора;
отказаться от стандартной обработки и самостоятельно сформировать список выбора.
1. Добавляете новую подписку.
2. Источник СправочникМенеджер.ВашСправочник
3. Событие ОбработкаПолученияДанныхВыбора
Создаёте процедуру нажав лупу в палитре свойств (ну как обычно). Процедура создаётся с параметрами.
Далее с ИТС:
ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
ДанныеВыбора – это переменная, в которую разработчик должен поместить собственный список выбора. При входе в обработчик этот параметр не содержит никаких значений, то есть через него нельзя получить доступ к списку выбора, который сформирует платформа. Просто потому, что этот список формируется уже после выхода из этого обработчика. Однако может возникнуть желание в этом обработчике получить список, формируемый платформой, и добавить в него (удалить) несколько элементов. Как это сделать – рассказано в разделе «Метод "ПолучитьДанныеВыбора()"».
Переменная Параметры содержит набор параметров, которые платформа будет использовать для формирования списка выбора. Особенность заключается в том, что при формировании списка выбора платформа будет учитывать свойства Параметры выбора и Связи параметров выбора, заданные для соответствующего реквизита объекта конфигурации. Поэтому в параметрах могут содержаться какие-то отборы.
....
Таким образом, у нас есть следующие возможности:
изменить Параметры и сказать платформе, чтобы она сформировала список выбора;
отказаться от стандартной обработки и самостоятельно сформировать список выбора.
(7)
Ну если уж совсем хардкор - тогда только права.
Как вы правильно сказали - RLS несложный замутить.
Но не думаю что оно того стоит: Речь идет о константах, там наверное какие-то настройки, которые и так редактировать не каждый должен иметь права.
(3) И отключить ввод по строке?
Ну если уж совсем хардкор - тогда только права.
Как вы правильно сказали - RLS несложный замутить.
Но не думаю что оно того стоит: Речь идет о константах, там наверное какие-то настройки, которые и так редактировать не каждый должен иметь права.
Коллеги, "я шмогла". Вдруг кому нужно, хотя, вероятно, это банальная задача. Решилось всё созданием формы выбора для справочника моего. А сам код в модуле упомянутой формы вот такой:
Критика приветствуется!
&НаСервере
Функция СписокВыборНаСервере(ДанныеВыбора, СтандартнаяОбработка)
Если ДанныеВыбора.Родитель.Наименование = "Уволенные" Тогда
СтандартнаяОбработка = Ложь;
Возврат Ложь;
Иначе Возврат Истина;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если НЕ СписокВыборНаСервере(Элементы.Список.ТекущиеДанные.Ссылка, СтандартнаяОбработка) Тогда
ОчиститьСообщения();
Сообщить("Уволенные сотрудники приведены исключительно справочно!");
КонецЕсли
КонецПроцедуры
ПоказатьКритика приветствуется!
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот