Окно со списком отчетов при запуске 1С










Две обработки, которые позволяют показать список отчетов при входе в 1С.

За несколько лет работы в нашей базе УПП собралось достаточно много внешних отчетов. Сам справочник сгруппирован по организациям, отделам и т.д. При необходимости воспользоваться тем или иным отчетом, руководителям приходится тратить время на его поиски. В связи с этим поступило пожелание, чтобы при входе в 1С появлялось окно с перечнем нужных отчетов. Для каждого руководителя перечень может быть индивидуальным.

Реализовал это следующим образом: добавил новую настройку в регистре сведений НастройкиПользователей, сделал 2 внешние обработки и дописал немного кода в процедуру ПриНачалеРаботыСистемы().

Рассмотрим подробнее.

Новая настройка пользователя в регистре сведений НастройкиПользователей, результат видно на скринах.

Внешние обработки.

Первая обработка нужна для настройки списка показываемых отчетов.

Обработка имеет один реквизит (тип ТаблицаЗначений) и одну форму.

В модуле формы при выборе пользователя пытаемся получить настройки, если они были заданы ранее. Если настроек еще не было, то список отчетов заполняется отчетами из определенной группы. Но это не обязательно.

Процедура РуководительПриИзменении(Элемент)
Если Элемент.Значение <> Справочники.Пользователи.ПустаяСсылка() Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| НастройкиПользователей.Значение КАК ЗначениеНастройки
|ИЗ
| РегистрСведений.НастройкиПользователей КАК НастройкиПользователей
|ГДЕ
| НастройкиПользователей.Пользователь.ИдентификаторПользователяИБ = &ТекПользователь
| И НастройкиПользователей.Настройка.Код = &КодНастройки";
Запрос.УстановитьПараметр("ТекПользователь", Руководитель.ИдентификаторПользователяИБ);
Запрос.УстановитьПараметр("КодНастройки", "00138"); //При запуске показывать список отчетов для руководителей
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
ПоказатьОтчеты = Выборка.ЗначениеНастройки;
КонецЕсли;

СтруктураОбщихПараметров = ХранилищеОбщихНастроек.Загрузить("Обработка.ПросмотрОтчетов",,,Руководитель.Наименование);
Если СтруктураОбщихПараметров <> Неопределено Тогда
Если ТаблицаОтчетов.Колонки.Количество() = 0 Тогда
ТаблицаОтчетов.Колонки.Добавить("НаименованиеОтчета",,"Наименование отчета");
ТаблицаОтчетов.Колонки.Добавить("ДоступенДляПросмотра",,"Доступен для просмотра");
КонецЕсли;
Если СтруктураОбщихПараметров.Количество()>0 Тогда
ТаблицаОтчетов = СтруктураОбщихПараметров;
Иначе
ТаблицаОтчетов = ЗаполнитьПоУмолчанию();
КонецЕсли;
Иначе
Если ТаблицаОтчетов.Колонки.Количество() = 0 Тогда
ТаблицаОтчетов.Колонки.Добавить("НаименованиеОтчета",,"Наименование отчета");
ТаблицаОтчетов.Колонки.Добавить("ДоступенДляПросмотра",,"Доступен для просмотра");
КонецЕсли;
ТаблицаОтчетов = ЗаполнитьПоУмолчанию();
КонецЕсли;

КонецЕсли;
КонецПроцедуры

Функция ЗаполнитьПоУмолчанию()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ВнешниеОбработки.Ссылка КАК НаименованиеОтчета,
| ЛОЖЬ КАК ДоступенДляПросмотра
|ИЗ
| Справочник.ВнешниеОбработки КАК ВнешниеОбработки
|ГДЕ
| ВнешниеОбработки.Родитель.Код = ""000000443""
| И НЕ ВнешниеОбработки.ПометкаУдаления";
ТЗ = Запрос.Выполнить().Выгрузить();
Возврат ТЗ;
КонецФункции

При нажатии на кнопку "Сохранить ":

Процедура КнопкаВыполнитьНажатие(Кнопка)

Попытка
ХранилищеОбщихНастроек.Сохранить("Обработка.ПросмотрОтчетов",,ТаблицаОтчетов,,Руководитель.Наименование);
Исключение
Сообщить("Не удалось сохранить значение настройки списка отчетов!");
КонецПопытки;

Попытка
НаборЗаписей = РегистрыСведений.НастройкиПользователей.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Пользователь.Установить(Руководитель.Ссылка);
НаборЗаписей.Отбор.Настройка.Установить(ПланыВидовХарактеристик.НастройкиПользователей.НайтиПоКоду("00138"));
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Пользователь = Руководитель.Ссылка;
НоваяЗапись.Настройка = ПланыВидовХарактеристик.НастройкиПользователей.НайтиПоКоду("00138");
НоваяЗапись.Значение = ПоказатьОтчеты;
НаборЗаписей.Записать();
Исключение
Сообщить("Не удалось сохранить настройку пользователя для показа отчетов!");
КонецПопытки;
КонецПроцедуры

Вторая обработка стартует после входа в 1С. На ней список кнопок с наименованиями отчетов. При нажатии открывается соответствующий отчет.

Как можно заметить на скрине, на форме нет элементов кроме Панели. Кнопки на данную панель добавляются программно в соответствии с сохраненными настройками. Происходит это при открытии формы.

Процедура ПриОткрытии()

Попытка
СтруктураПараметров = ХранилищеОбщихНастроек.Загрузить("Обработка.ПросмотрОтчетов",,,ПользователиИнформационнойБазы.ТекущийПользователь().ПолноеИмя);
Исключение
Сообщить("Не удалось получить структуру параметров");
КонецПопытки;

ДействиеПриНажатииКнопки = Новый Действие("НажатаКнопкаОтчета");
Если СтруктураПараметров <> Неопределено Тогда
НомерКнопки = 0;
Для каждого Строка Из СтруктураПараметров Цикл
Если Строка.ДоступенДляПросмотра = Истина Тогда
НомерКнопки = НомерКнопки+1;
КнопкаОтчет = ЭлементыФормы.Добавить(Тип("Кнопка"), "Кнопка"+НомерКнопки, Истина, ЭлементыФормы.Панель1);
КнопкаОтчет.Заголовок = Строка.НаименованиеОтчета.Наименование;
КнопкаОтчет.Верх = НомерКнопки*30;
КнопкаОтчет.Лево = 6;
КнопкаОтчет.Ширина = 50;
КнопкаОтчет.Высота = 20;
КнопкаОтчет.Подсказка = Строка.НаименованиеОтчета.Наименование;
КнопкаОтчет.УстановитьДействие("Нажатие",ДействиеПриНажатииКнопки);
КонецЕсли;
КонецЦикла;
КонецЕсли;

СтраницыПанели = ЭлементыФормы.Панель1.Страницы;
ТекущаяСтраница = СтраницыПанели.Получить(0);
ЭлементыФормы.Панель1.ТекущаяСтраница = ТекущаяСтраница;

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

Процедура НажатаКнопкаОтчета(Элемент)
ВнешняяФорма = Справочники.ВнешниеОбработки.НайтиПоНаименованию(Элемент.Подсказка);
ИмяФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные = ВнешняяФорма.ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);
Форма = ВнешниеОтчеты.ПолучитьФорму(ИмяФайла);
Форма.Открыть();
КонецПроцедуры

А теперь рассмотрим код, который срабатывает при запуске 1С и открывает нашу обработку со списком отчетов.

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| НастройкиПользователей.Значение КАК ЗначениеНастройки
|ИЗ
| РегистрСведений.НастройкиПользователей КАК НастройкиПользователей
|ГДЕ
| НастройкиПользователей.Пользователь.ИдентификаторПользователяИБ = &ТекПользователь
| И НастройкиПользователей.Настройка.Код = &КодНастройки";
Запрос.УстановитьПараметр("ТекПользователь", ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор);
Запрос.УстановитьПараметр("КодНастройки", "00138"); //При запуске показывать список отчетов для руководителей
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Если Выборка.ЗначениеНастройки Тогда
ВнешняяФорма = Справочники.ВнешниеОбработки.НайтиПоНаименованию("Просмотр отчетов");
ИмяФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные = ВнешняяФорма.ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);
Форма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла);
Форма.Открыть();
КонецЕсли;
КонецЕсли;

Проверено на конфигурации УПП 1.3.122.2.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *