Часто при разработке дополнительных функциональных возможностей в 1С возникает задача открыть типовой отчет (например, ОборотноСальдоваяВедомостьПоСчету) из формы документа или обработки с уже установленным отбором по конкретной номенклатуре, организации или складу. Попытки передать отбор через стандартный параметр Отбор в структуре ПараметрыФормы часто терпят неудачу, так как типовые отчеты 1С на базе СКД при инициализации перетирают эти настройки своими собственными, сохраненными в пользовательском профиле или предопределенными в форме.
Давайте разберемся, почему это происходит и как правильно реализовать передачу настроек, чтобы отчет открывался с нужными фильтрами.
В типовых конфигурациях, таких как Бухгалтерия 3.0, отчеты спроектированы так, чтобы максимально использовать возможности Системы Компоновки Данных (СКД). Основная причина того, что простой Отбор не работает, заключается в следующем:
ПриСозданииНаСервере, которые считывают сохраненные настройки пользователя. Эти настройки имеют более высокий приоритет, чем параметры, переданные при открытии.ПользовательскиеНастройкиКомпоновкиДанных. Работа с этим объектом требует специфического подхода: нужно не просто передать структуру, а программно модифицировать настройки до того, как они будут применены отчетом.Чтобы успешно передать отбор, необходимо подготовить объект ПользовательскиеНастройкиКомпоновкиДанных на стороне клиента или сервера, заполнить его нужными значениями и передать в параметры открытия формы. Рассмотрим этот процесс по шагам.
Создадим экземпляр ПользовательскиеНастройкиКомпоновкиДанных. Мы будем добавлять в него элементы отбора, используя идентификаторы полей, предусмотренные в СКД отчета.
// Пример формирования настроек на клиенте
Процедура ОткрытьОтчетСОтбором(Команда)
// 1. Получаем список номенклатуры, например, из текущего документа
СписокНоменклатуры = ПолучитьСписокНоменклатурыНаСервере();
// 2. Создаем объект настроек
ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
// 3. Формируем структуру параметров (период, счет, организация и т.д.)
ДополнительныеСвойства = ПользовательскиеНастройки.ДополнительныеСвойства;
ДополнительныеСвойства.Вставить("НачалоПериода", КонецДня(Объект.Дата));
ДополнительныеСвойства.Вставить("КонецПериода", КонецДня(Объект.Дата));
ДополнительныеСвойства.Вставить("Счет", ПредопределенноеЗначение("ПланСчетов.Хозрасчетный.Товары"));
ДополнительныеСвойства.Вставить("Организация", Объект.Организация);
// 4. Добавляем фильтр (отбор)
// Важно: Идентификатор должен соответствовать имени поля в СКД
ЭлементОтбора = ПользовательскиеНастройки.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Субконто1"); // Например, Номенклатура
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.ПравоеЗначение = СписокНоменклатуры;
ЭлементОтбора.Использование = Истина;
// 5. Формируем параметры формы
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки);
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
// 6. Открываем форму
ОткрытьФорму("Отчет.ОборотноСальдоваяВедомостьПоСчету.Форма", ПараметрыФормы);
КонецПроцедуры
Работая с ПользовательскимиНастройками, обратите внимание на следующие моменты:
Субконто1 или Склад) должны соответствовать тем, которые указаны в ОсновнаяСхемаКомпоновкиДанных конкретного отчета. Вы всегда можете открыть конфигуратор и посмотреть их имена.ВидСравненияКомпоновкиДанных.ВСписке, убедитесь, что передаете массив или список значений. Иногда, для стабильности работы с типами, полезно преобразовать массив в ФиксированныйМассив.ПриСозданииНаСервере модуля формы отчета вызывается метод принудительной загрузки настроек из хранилища. В таком случае решение может потребовать либо использования механизмов сохранения настроек, либо доработки формы (если это позволяет архитектура отчета).Программная установка отбора в типовых отчетах — это задача, требующая аккуратной работы с объектом ПользовательскиеНастройкиКомпоновкиДанных. Вместо попыток манипулировать простым параметром Отбор, мы программно формируем полный набор пользовательских настроек и передаем его в форму при открытии. Такой подход гарантирует, что отчет применит фильтры именно так, как вы задумали, учитывая особенности архитектуры СКД в 1С:Бухгалтерии.