День добрый! НУжна Ваша помощь!
Задача стоит такая, по определенной роли запретить выбирать варианты отчета.
Собственно в чем проблема, не хочу лезть в ПриКомпоновке и обрывать исполнение отчета, есть ли возможность как то "урезать список"?
---
Своя форма для этого отчета, регистр сведений где хранится список доступных пользователю вариантов и при открытии формы управляем списком выбора этих вариантов.
Простенькая задачка.
---
Либо форму отчета рисовать свою, а не ту, которая из общих форм автоматом берется.
в которой и управлять кнопками выбора вариантов как угодно.
---
платформа 1С:Предприятие 8.3 (8.3.10.2639)
конфа перепилянный вдоль и поперек ЗУП на обычных формах, отчет на управляемых + СКД
---
Можно решить проблему системно, реализовав собственное ХранилищеВариантовОтчетов (ветка "Хранилища настроек" в конфигураторе). По аналогии с аналогичной подсистемой БСП.
То есть реализуется хранение вариантов отчетов где угодно - хоть в справочнике, хоть в регистре сведений. И можно будет этим управлять как угодно, в том числе и ограничивая права доступа. А также можно реализовать расшаривание пользовательских варинатов (что стандартное хранилище не позволяет).
Прелесть в том, что подключение отчетности к альтернативному хранилищу вариантов отчетов делается абсолютно прозрачно. Если установить его дефолтным для конфы, то с отчетами вообще ничего делать не надо. Если дефолтное оставить системным, тогда просто в нужных отчетах указывать, что они используют альтернативное хранилище вариантов.
---
тут требуется прямота рук с точностью до градуса, и точность крепления их к телу, с точностью до миллиметра. Не знаю как автор, но я понял только суть того как это можно сделать, реализовать точно не смогу((
---
Думаю, вы преувеличиваете.
Свое хранилище вариантов я не делал, но делал (на самописке) свое хранилище настроек вариантов на справочнике (основная идея была - чтобы пользователи могли легко делиться своими настройками предопределенных вариантов).
Зато один раз сделал - и используешь везде. При этом можно дорабатывать под любые хотелки и все это - абсолютно неинвазивно для самих отчетов.
---
Сообщение было скрыто модератором.
---
нужно запретить доступ не к отчету в целом, а только к его варианту?
если так, единственным "нормальным" выходом вижу создание полного дубликата отчета, как внешнего, и его в целом запретить тем пользователям которые доступ к нему иметь не должны, перенеся туда все необходимые вариации отчета.
---
это да , я хотел как раз избежать подобного, потому что мне тогда 3 таких отчёта нужно
---
Своя форма для этого отчета, регистр сведений где хранится список доступных пользователю вариантов и при открытии формы управляем списком выбора этих вариантов.
Простенькая задачка.
---
Решил как написал user633533_encantado ,каждому варианту свою форму. Спасибо тем кто откликнулся.
---
Я сделал без регистров и прочей хрени.
1) На форме отчета создать команду назвать ее как нибудь (например "открытьФормуСВариантами"), синоним = "Выбрать вариант..". Добавить процедуру обработчик для этой команды в модуль формы.

2) В процедуре при создании на сервере типовой кнопке выбора вариантов присваиваем имя созданной нами команды.

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Элементы.ОсновнаяКоманднаяПанель.ПодчиненныеЭлементы.ФормаВарианты.ПодчиненныеЭлементы.ФормаЗагрузитьВариант.ИмяКоманды = "ОткрытьФормуСВариантами";

    КонецПроцедуры
```

3) Создаем в отчете произвольную форму, размещаем на ней ТаблЗначений с одной колонкой "Вариант" (тип строка). При создании формы заполняем эту таблицу из массива что передали в параметры этой формы при ее открытии. При выборе знач из таблицы закрываем форму возращаем значение.
Вот код формы.

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    МассивКлючиВариантов = Параметры.МассивКлючиВариантов;

    Для Каждого Элемент ИЗ МассивКлючиВариантов Цикл
    НовСтрока = тзВарианты.Добавить();
    НовСтрока.Вариант = Элемент;
    КонецЦикла;

    КонецПроцедуры

    &НаКлиенте
    Процедура тзВариантыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    ИндексВыбраннойСтроки = ВыбранноеЗначение;

    ЗначениеВарианта = тзВарианты[ИндексВыбраннойСтроки].Вариант;

    ЭтаФорма.Закрыть(ЗначениеВарианта);

    КонецПроцедуры
```

4) В процедуре обработчике команды, открываем нашу произвольную форму модально , в параметрах передаем в нее массив с нужными нам вариантами (тип строка) и ждем от нее возвращаемое значение ключа нашего варианта (тип строка). Получаем значение и устанавливаем текущий вариант в отчете.
Вот код:

```1c
    &НаКлиенте
    Процедура ОткрытьФормуСВариантами(Команда)

    МассивКлючиВариантов = Новый Массив;
    МассивКлючиВариантов.Добавить("Основной"); // И т.д. ...
    // Можно по ролям.
    // Если РольДоступна("Администратор") Тогда
    // МассивКлючиВариантов.Добавить("Основной");
    // КонецЕсли;

    ТутМожноЗапихнутьТеКлючиВариантовКоторыеНужноОтобразить = Новый Структура;
    ТутМожноЗапихнутьТеКлючиВариантовКоторыеНужноОтобразить.Вставить("МассивКлючиВариантов", МассивКлючиВариантов);

    ВыбранноеЗнач = ОткрытьФормуМодально("ВнешнийОтчет.СдалиАнализыИНеПришли.Форма.ФормаСВариантами", ТутМожноЗапихнутьТеКлючиВариантовКоторыеНужноОтобразить, ЭтаФорма);

    Если ВыбранноеЗнач <> Неопределено Тогда
    ЭтаФорма.УстановитьТекущийВариант(ВыбранноеЗнач);
    ЭтаФорма.ОбновитьОтображениеДанных();
    КонецЕсли;

    КонецПроцедуры
```