Вариант отчета 1С — именованный набор настроек одного отчета: группировки, поля, отборы, параметры и оформление. Отчет «Остатки товаров» может открываться по номенклатуре, по складам или по ячейкам — это три варианта одной схемы, а не три отчета. Ниже — где хранятся варианты, как добавить их в схему СКД и загрузить из кода, открыть отчет с нужным вариантом, раздать вариант пользователям, удалить испорченный и сбросить настройки, в том числе в конфигурациях на БСП.
Варианты делятся на предопределенные, которые заложил разработчик, и сохраненные пользователями. Отдельно от них хранятся пользовательские настройки — то, что сотрудник поменял поверх варианта: период, быстрые отборы, значения в шапке отчета.
| Что сохраняется | Где лежит | Как убрать |
|---|---|---|
| Предопределенный вариант | Схема компоновки данных отчета, коллекция ВариантыНастроек | Только в конфигураторе |
| Вариант пользователя без БСП | ХранилищеВариантовОтчетов, у каждого пользователя свой список | Список вариантов в форме отчета или код |
| Вариант пользователя в БСП | Справочник «Варианты отчетов» | Пометка удаления |
| Сохраненные пользовательские настройки | ХранилищеПользовательскихНастроекОтчетов | «Стандартные настройки» или код |
| Последние настройки и состояние формы | ХранилищеСистемныхНастроек | Очистка настроек пользователя или код |
Какие хранилища подключены, видно в свойствах корня конфигурации: «Хранилище вариантов отчетов» и «Хранилище пользовательских настроек отчетов». Пустое свойство означает стандартное хранилище платформы — служебную таблицу внутри информационной базы. В конфигурациях на БСП в первом свойстве указано ХранилищеВариантовОтчетов из состава библиотеки, оно записывает варианты в справочник. У отдельного отчета хранилища переопределяются его свойствами «Хранилище вариантов» и «Хранилище настроек».
Чтобы добавить вариант отчета, откройте в конфигураторе схему компоновки данных и перейдите на закладку «Настройки». На этой закладке есть список вариантов, в новой схеме в нем один вариант «Основной». Добавьте строку, задайте имя без пробелов и представление для пользователей. Структура, поля, отборы и оформление, которые вы настроите после этого, относятся только к выделенному варианту. Первый вариант списка — вариант по умолчанию, его же возвращает свойство Схема.НастройкиПоУмолчанию.
Имя варианта служит ключом: по нему форма открывает вариант, к нему привязаны сохраненные пользовательские настройки и размещение в БСП. После внедрения меняйте представление, а имя оставляйте прежним.
Вариант из схемы можно применить без формы — для рассылки, регламентного задания или выгрузки в файл. Функция модуля объекта отчета:
// Модуль объекта отчета ОстаткиТоваров.
// Формирует отчет по варианту схемы без открытия формы: для рассылки,
// регламентного задания или выгрузки в файл. Вызов на сервере:
// ТабДок = Отчеты.ОстаткиТоваров.Создать().СформироватьПоВарианту("ОстаткиПоСкладам", Склад);
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Функция СформироватьПоВарианту(ИмяВарианта, Склад = Неопределено) Экспорт
Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
// Поиск идет по имени варианта, представление здесь не подходит
Вариант = Схема.ВариантыНастроек.Найти(ИмяВарианта);
Если Вариант = Неопределено Тогда
ВызватьИсключение СтрШаблон("В схеме отчета нет варианта с именем ""%1""", ИмяВарианта);
КонецЕсли;
Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
Компоновщик.ЗагрузитьНастройки(Вариант.Настройки);
// Отбор добавляется к настройкам компоновщика, макет в конфигурации не меняется
Если ЗначениеЗаполнено(Склад) Тогда
ЭлементОтбора = Компоновщик.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Склад");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Склад;
ЭлементОтбора.Использование = Истина;
КонецЕсли;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, Компоновщик.ПолучитьНастройки());
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет);
Результат = Новый ТабличныйДокумент;
Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
Вывод.УстановитьДокумент(Результат);
Вывод.Вывести(Процессор);
Возврат Результат;
КонецФункции
#КонецЕсли
ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных") — макет, на который указывает свойство отчета «Основная схема компоновки данных». Если макет называется иначе, подставьте его имя.ВариантыНастроек.Найти ищет только по имени и возвращает Неопределено, если варианта нет. Проверка сразу после поиска дает понятный текст ошибки.Инициализировать связывает компоновщик со схемой: без источника доступных настроек он не знает полей, и отбор по складу не к чему привязать.ПолучитьНастройки() возвращает итоговые настройки: вариант вместе с пользовательскими и фиксированными. Остальная цепочка вывода разобрана в статье «СКД программно».Все варианты схемы перебираются циклом Для Каждого Вариант Из Схема.ВариантыНастроек: у элемента есть Имя, Представление и Настройки.
Форма отчета принимает параметр КлючВарианта. Для варианта из схемы ключ равен имени варианта, для сохраненного пользователем — ключу в хранилище. Команда в форме документа открывает отчет по складам с отбором по складу документа и сразу формирует его:
// Модуль формы документа «Перемещение товаров».
// Команда «Остатки склада» открывает отчет сразу нужным вариантом.
&НаКлиенте
Процедура ОстаткиСклада(Команда)
Если Не ЗначениеЗаполнено(Объект.СкладОтправитель) Тогда
ПоказатьПредупреждение(, "Укажите склад-отправитель.");
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("КлючВарианта", "ОстаткиПоСкладам"); // имя варианта в схеме
ПараметрыФормы.Вставить("Отбор", Новый Структура("Склад", Объект.СкладОтправитель));
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
// Новый ключ уникальности: каждое нажатие открывает свое окно со своим отбором
ОткрытьФорму("Отчет.ОстаткиТоваров.Форма", ПараметрыФормы, ЭтотОбъект, Новый УникальныйИдентификатор);
КонецПроцедуры
Отбор — структура «имя поля — значение», поле должно быть доступно для отбора в схеме. СформироватьПриОткрытии избавляет от нажатия «Сформировать». Четвертый параметр ОткрытьФорму — ключ уникальности: с новым идентификатором каждое нажатие открывает отдельное окно со своим отбором. Внутри формы отчета ключ открытого варианта хранится в свойстве КлючТекущегоВарианта, а перестроить элементы формы при смене варианта можно в событии ПриЗагрузкеВариантаНаСервере.
Пользователь настраивает отчет, выбирает «Еще → Сохранить вариант» и вводит название. Изменить вариант отчета можно командой «Еще → Изменить вариант»: откроется редактор структуры, полей и отборов. В УТ 11.5 команды собраны в подменю «Еще → Варианты отчета»: «Сохранить как...», «Выбрать...» и список вариантов, а настройки правят через «Еще → Настройки...». В БСП предопределенный вариант перезаписать нельзя, правки сохраняют новым вариантом. Как настраивать поля, группировки и отборы, описано в статье «Настройка отчета 1С».

В конфигурациях на БСП окно сохранения позволяет открыть вариант всем пользователям или оставить только автору. Стандартное хранилище платформы держит варианты отдельно для каждого пользователя, общего варианта в нем нет. Администратор может раздать вариант кодом — команда в форме отчета конфигурации без БСП:
// Модуль формы отчета ОстаткиТоваров, конфигурация без БСП.
// Команда «Сохранить для всех» записывает текущие настройки отчета
// новым вариантом каждому пользователю информационной базы.
&НаКлиенте
Процедура СохранитьДляВсех(Команда)
Оповещение = Новый ОписаниеОповещения("СохранитьДляВсехЗавершение", ЭтотОбъект);
ПоказатьВводСтроки(Оповещение, "", "Название общего варианта", 100);
КонецПроцедуры
&НаКлиенте
Процедура СохранитьДляВсехЗавершение(Название, ДополнительныеПараметры) Экспорт
Если Не ЗначениеЗаполнено(Название) Тогда
Возврат; // ввод отменен
КонецЕсли;
ЧислоПользователей = СохранитьДляВсехНаСервере(Название);
ПоказатьОповещениеПользователя("Вариант сохранен", , СтрШаблон("Пользователей: %1", ЧислоПользователей));
КонецПроцедуры
&НаСервере
Функция СохранитьДляВсехНаСервере(Название)
Если Не ПравоДоступа("Администрирование", Метаданные) Тогда
ВызватьИсключение "Сохранять варианты другим пользователям может только администратор.";
КонецЕсли;
ПолноеИмяОтчета = РеквизитФормыВЗначение("Отчет").Метаданные().ПолноеИмя();
// Настройки варианта вместе с тем, что пользователь поменял в форме отчета
Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
Описание = Новый ОписаниеНастроек;
Описание.Представление = Название;
КлючВарианта = Строка(Новый УникальныйИдентификатор);
ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ПользовательИБ Из ПользователиИБ Цикл
ХранилищеВариантовОтчетов.Сохранить(ПолноеИмяОтчета, КлючВарианта, Настройки, Описание,
ПользовательИБ.Имя);
КонецЦикла;
Возврат ПользователиИБ.Количество();
КонецФункции
ПолучитьНастройки() сохраняет вариант вместе с правками пользователя: свойство КомпоновщикНастроек.Настройки содержит только настройки варианта без значений из шапки. Общий КлючВарианта у всех пользователей позволяет потом найти и удалить вариант одним проходом. Проверка ПравоДоступа("Администрирование", Метаданные) стоит в начале, потому что писать в хранилище от имени другого пользователя может только администратор. В БСП так делать не нужно: там общий вариант — один элемент справочника.
Свой вариант пользователь удаляет из списка вариантов: «Еще → Выбрать вариант», строка варианта, удаление или пометка на удаление — зависит от конфигурации. Предопределенный вариант в режиме «Предприятие» не удаляется. Если вариант исправен, а отчет выглядит не так, как задумано, причина в пользовательских настройках: команда «Еще → Стандартные настройки» возвращает отчет к настройкам варианта.
Когда сотрудник не может открыть отчет или настройки нужно снять у многих пользователей, выручает серверная процедура для конфигураций без БСП:
// Общий модуль АдминистрированиеОтчетов (флажок «Сервер»), конфигурация без БСП.
// Удаляет у пользователя сохраненные настройки отчета, а по флажку и его варианты.
// Пример: АдминистрированиеОтчетов.СброситьНастройкиОтчета("Отчет.ОстаткиТоваров", "Петров", Истина);
Процедура СброситьНастройкиОтчета(ПолноеИмяОтчета, ИмяПользователя, УдалитьВарианты = Ложь) Экспорт
Хранилища = Новый Массив;
Хранилища.Добавить(ХранилищеПользовательскихНастроекОтчетов);
Хранилища.Добавить(ХранилищеСистемныхНастроек);
Если УдалитьВарианты Тогда
Хранилища.Добавить(ХранилищеВариантовОтчетов);
КонецЕсли;
Для Каждого Хранилище Из Хранилища Цикл
// У хранилища, созданного в конфигурации, метода Выбрать нет
Если ТипЗнч(Хранилище) <> Тип("СтандартноеХранилищеНастроекМенеджер") Тогда
Продолжить;
КонецЕсли;
// Сначала собираем ключи, затем удаляем: выборку во время обхода не меняем
КУдалению = Новый Массив;
Выборка = Хранилище.Выбрать(Новый Структура("Пользователь", ИмяПользователя));
Пока Выборка.Следующий() Цикл
Если ЭтоКлючОтчета(Выборка.КлючОбъекта, ПолноеИмяОтчета) Тогда
КУдалению.Добавить(Новый Структура("КлючОбъекта, КлючНастроек",
Выборка.КлючОбъекта, Выборка.КлючНастроек));
КонецЕсли;
КонецЦикла;
Для Каждого Ключи Из КУдалению Цикл
Хранилище.Удалить(Ключи.КлючОбъекта, Ключи.КлючНастроек, ИмяПользователя);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
// Ключи настроек отчета начинаются с его полного имени:
// "Отчет.ОстаткиТоваров", "Отчет.ОстаткиТоваров/...", "Отчет.ОстаткиТоваров.Форма...".
// Разделитель в проверке не дает задеть отчет "ОстаткиТоваровПоСрокам".
Функция ЭтоКлючОтчета(КлючОбъекта, ПолноеИмяОтчета)
Возврат КлючОбъекта = ПолноеИмяОтчета
Или СтрНачинаетсяС(КлючОбъекта, ПолноеИмяОтчета + "/")
Или СтрНачинаетсяС(КлючОбъекта, ПолноеИмяОтчета + ".");
КонецФункции
Выбрать есть только у стандартного хранилища, поэтому хранилища конфигурации отсекаются проверкой типа.ИмяПользователя — имя пользователя информационной базы, а не полное имя из справочника.В типовых конфигурациях (БП 3.0, УТ 11, КА 2, ERP, ЗУП) вариантами управляет подсистема БСП «Варианты отчетов». Настройки предопределенных вариантов берутся из схемы, а описание, видимость и размещение задаются в модуле менеджера отчета; при обновлении информационной базы БСП переносит эти сведения в свои справочники. Пользовательские варианты — элементы справочника «Варианты отчетов» с автором и доступностью. Отчет попадает на панель отчетов тех разделов, в подсистемы которых он включен, а отдельный вариант можно разместить и в другом разделе.
// Модуль менеджера отчета ОстаткиТоваров, конфигурация на БСП 3.x.
// Отчет подключен в ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов строкой:
// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ОстаткиТоваров);
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт
// Третий параметр - имя варианта в схеме компоновки, оно же ключ варианта
НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Основной");
НастройкиВарианта.Описание = НСтр("ru = 'Остатки товаров по номенклатуре на дату.'");
НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ОстаткиПоСкладам");
НастройкиВарианта.Описание = НСтр("ru = 'Остатки в разрезе складов.'");
// Подсистема - из вашей конфигурации; "Важный" выделяет вариант на панели раздела
НастройкиВарианта.Размещение.Вставить(Метаданные.Подсистемы.Склад, "Важный");
// Служебный вариант для расшифровки: на панели отчетов по умолчанию не виден
НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ДвиженияТовара");
НастройкиВарианта.ВидимостьПоУмолчанию = Ложь;
КонецПроцедуры
#КонецЕсли
Третий параметр ОписаниеВарианта — имя варианта из схемы. Описание выводится на панели отчетов и участвует в поиске по ней. Размещение — соответствие «подсистема — важность» со значениями «Важный», «СмТакже» или пустой строкой. ВидимостьПоУмолчанию = Ложь убирает служебный вариант с панели, но открыть его по ключу можно. Пользователь меняет видимость вариантов у себя в настройке панели отчетов.
Испорченный пользовательский вариант администратор находит в списке «Варианты отчетов» (в типовых — «Администрирование → Печатные формы, отчеты и обработки», в УТ 11.5 — «НСИ и администрирование → Печатные формы, отчеты и обработки → Отчеты») и помечает на удаление. Если таких вариантов много, поможет запрос к справочнику:

// Общий серверный модуль или модуль обработки администратора, конфигурация на БСП.
// Помечает на удаление пользовательские варианты отчета с заданным названием,
// например испорченный вариант, из-за которого отчет не формируется.
Функция ПометитьНаУдалениеВариантыОтчета(ПолноеИмяОтчета, НазваниеВарианта) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВариантыОтчетов.Ссылка КАК Ссылка
|ИЗ
| Справочник.ВариантыОтчетов КАК ВариантыОтчетов
|ГДЕ
| ВариантыОтчетов.Отчет = &Отчет
| И ВариантыОтчетов.Пользовательский
| И ВариантыОтчетов.Наименование = &Наименование
| И НЕ ВариантыОтчетов.ПометкаУдаления";
Запрос.УстановитьПараметр("Отчет",
ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.НайтиПоПолномуИмени(ПолноеИмяОтчета)));
Запрос.УстановитьПараметр("Наименование", НазваниеВарианта);
Помечено = 0;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Попытка
ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект();
ВариантОбъект.УстановитьПометкуУдаления(Истина);
Помечено = Помечено + 1;
Исключение
ЗаписьЖурналаРегистрации("АдминистрированиеОтчетов.ПометкаВарианта",
УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.ВариантыОтчетов,
Выборка.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЦикла;
Возврат Помечено;
КонецФункции
Условие Пользовательский оставляет в выборке только варианты, сохраненные пользователями: предопределенные описаны в коде, и чинить их нужно там. ИдентификаторОбъектаМетаданных превращает отчет в ссылку справочника идентификаторов — по ней справочник вариантов связан с отчетом. Пометка удаления убирает вариант из списков, физически элемент удалит обработка удаления помеченных объектов.
ВариантыНастроек.Найти вернул Неопределено: передали представление «Остатки по складам» вместо имени ОстаткиПоСкладам или ошиблись в имени. Проверяйте результат поиска, как в первом листинге.Отчет.ПолучитьМакет(...). Реквизит формы Отчет — данные формы, а не объект отчета: на сервере вызывайте РеквизитФормыВЗначение("Отчет").ПолучитьМакет(...).В информационной базе, а не на компьютере пользователя. Без БСП — в стандартном хранилище вариантов отчетов, у каждого пользователя свой список. В конфигурациях на БСП — в справочнике «Варианты отчетов». При выгрузке базы в файл .dt варианты переносятся вместе с ней.
Из режима «Предприятие» — никак: вариант описан в схеме компоновки. Пользователь может только скрыть его с панели отчетов. Разработчик удаляет вариант из схемы, а в конфигурации на БСП — еще и его описание в НастроитьВариантыОтчета.
Откройте отчет другим вариантом: выберите его на панели отчетов или передайте КлючВарианта предопределенного варианта, как во втором листинге. Затем удалите испорченный вариант и сбросьте настройки командой «Стандартные настройки» или процедурой сброса.
В БСП — при сохранении выбрать доступность всем пользователям, для этого нужны права на общие варианты. Без БСП — добавить вариант в схему конфигурации или раздать его кодом из третьего листинга.
Если варианты нужно перенести между базами, починить после обновления или собрать отчет с набором вариантов под разные роли, поручите это разработчику: разработка отчетов и обработок 1С. Опишите отчет и нужные варианты в форме задания, и исполнитель оценит работу до начала.
Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.