У одного заказчика до перехода на 2.0 была возможность перехода практически из всех справочников в анализ субконто. И после обновления попросили эту возможность повторить.
Итак реализовано все очень просто. Надо добавить независимый регистр сведений с измерениями(ведущими) всех справочников, какие хочется видеть в анализа субконто. У меня их было немного(см. рис 1).
Далее создать форму списка и копируем туда сл. код:
Процедура ОткрытиеФормыАнализСубконто(ЗначениеСубконто1) Экспорт
ВидСубконто2 = Неопределено;
Количество = Ложь;
ЗначениеСубконто2 = Неопределено;
ВидСравненияСубконто1 = ВидСравненияКомпоновкиДанных.Равно;
Если Метаданные.Справочники.Содержит(ЗначениеСубконто1.Метаданные()) И ЗначениеСубконто1.ЭтоГруппа Тогда
ВидСравненияСубконто1 = ВидСравненияКомпоновкиДанных.ВИерархии;
КонецЕсли;
Если ТипЗнч(ЗначениеСубконто1) = Тип("СправочникСсылка.СтатьиЗатрат") Тогда
ВидСубконто1 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.СтатьиЗатрат;
ИначеЕсли ТипЗнч(ЗначениеСубконто1) = Тип("СправочникСсылка.СтатьиДвиженияДенежныхСредств") Тогда
ВидСубконто1 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.СтатьиДвиженияДенежныхСредств;
ИначеЕсли ТипЗнч(ЗначениеСубконто1) = Тип("СправочникСсылка.ПрочиеДоходыИРасходы") Тогда
ВидСубконто1 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ПрочиеДоходыИРасходы;
ИначеЕсли ТипЗнч(ЗначениеСубконто1) = Тип("СправочникСсылка.Склады") Тогда
ВидСубконто1 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады;
ИначеЕсли ТипЗнч(ЗначениеСубконто1) = Тип("СправочникСсылка.РасходыБудущихПериодов") Тогда
ВидСубконто1 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.РасходыБудущихПериодов;
ИначеЕсли ТипЗнч(ЗначениеСубконто1) = Тип("СправочникСсылка.ОбъектыСтроительства") Тогда
ВидСубконто1 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОбъектыСтроительства;
ИначеЕсли ТипЗнч(ЗначениеСубконто1) = Тип("СправочникСсылка.ДоходыБудущихПериодов") Тогда
ВидСубконто1 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДоходыБудущихПериодов;
ИначеЕсли ТипЗнч(ЗначениеСубконто1) = Тип("СправочникСсылка.НоменклатурныеГруппы") Тогда
ВидСубконто1 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НоменклатурныеГруппы;
ИначеЕсли ТипЗнч(ЗначениеСубконто1) = Тип("СправочникСсылка.ОсновныеСредства") Тогда
ВидСубконто1 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОсновныеСредства;
ИначеЕсли ТипЗнч(ЗначениеСубконто1) = Тип("СправочникСсылка.Контрагенты") Тогда
ВидСубконто1 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты;
ВидСубконто2 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры;
ИначеЕсли ТипЗнч(ЗначениеСубконто1) = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
ВидСубконто1 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты;
ВидСубконто2 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры;
ЗначениеСубконто2 = ЗначениеСубконто1;
ЗначениеСубконто1 = ЗначениеСубконто1.Владелец;
ИначеЕсли ТипЗнч(ЗначениеСубконто1) = Тип("СправочникСсылка.Номенклатура") Тогда
ВидСубконто1 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура;
ВидСубконто2 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады;
Количество = Истина;
ИначеЕсли ТипЗнч(ЗначениеСубконто1) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда
ВидСубконто1 = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.СФПолученные;
КонецЕсли;
Отчет = Отчеты["АнализСубконто"].Создать();
Отчет.РежимРасшифровки = Истина;
Отчет.НачалоПериода = НачалоГода(ТекущаяДата());
Отчет.КонецПериода = ТекущаяДата();
Если ТипЗнч(ЗначениеСубконто1) = Тип("СправочникСсылка.ПодразделенияОрганизаций") Тогда
Отчет.Настроить();
ТиповыеОтчеты.ДобавитьОтбор(Отчет.КомпоновщикНастроек, "Подразделение", ЗначениеСубконто1, ВидСравненияКомпоновкиДанных.ВИерархии);
Иначе
СписокВидовСубконто = Новый СписокЗначений;
СписокВидовСубконто.Добавить(ВидСубконто1);
Если НЕ ВидСубконто2 = Неопределено Тогда
СписокВидовСубконто.Добавить(ВидСубконто2);
КонецЕсли;
Отчет.СписокВидовСубконто = СписокВидовСубконто.Скопировать();
Отчет.Настроить();
ТиповыеОтчеты.ДобавитьОтбор(Отчет.КомпоновщикНастроек, "Субконто1", ЗначениеСубконто1, ВидСравненияСубконто1);
Если НЕ ЗначениеСубконто2 = Неопределено Тогда
ТиповыеОтчеты.ДобавитьОтбор(Отчет.КомпоновщикНастроек, "Субконто2", ЗначениеСубконто2, ВидСравненияКомпоновкиДанных.Равно);
КонецЕсли;
КонецЕсли;
Для Каждого Показатель Из Отчет.ДанныеОтчета.ПоказателиОтчета Цикл
Если Показатель.Ключ <> "БУ" И (НЕ Количество И Показатель.Ключ <> "Количество") Тогда
Показатель.Значение.Значение = Ложь;
КонецЕсли;
КонецЦикла;
ФормаОтчета = Отчет.ПолучитьФорму(, , Новый УникальныйИдентификатор());
ФормаОтчета.Открыть();
ФормаОтчета.ОбновитьОтчет();
КонецПроцедуры // ОткрытиеФормыАнализСубконто()
Процедура ПриОткрытии()
Для Индекс = 0 По Отбор.Количество() - 1 Цикл
ПолеОтбора = Отбор[Индекс];
Элемент = ПолеОтбора.Значение.Ссылка;
Если ПустаяСтрока(Элемент)=Ложь Тогда
ОткрытиеФормыАнализСубконто(Элемент);
Прервать;
КонецЕсли;
КонецЦикла;
ЭтаФорма.Закрыть();
КонецПроцедуры // ПриОткрытии()