Как программно передать и установить отбор в отчетах на СКД при их открытии в 1С:Бухгалтерии 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Часто при разработке дополнительных функциональных возможностей в 1С возникает задача открыть типовой отчет (например, ОборотноСальдоваяВедомостьПоСчету) из формы документа или обработки с уже установленным отбором по конкретной номенклатуре, организации или складу. Попытки передать отбор через стандартный параметр Отбор в структуре ПараметрыФормы часто терпят неудачу, так как типовые отчеты 1С на базе СКД при инициализации перетирают эти настройки своими собственными, сохраненными в пользовательском профиле или предопределенными в форме.

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

Почему стандартный отбор не срабатывает?

В типовых конфигурациях, таких как Бухгалтерия 3.0, отчеты спроектированы так, чтобы максимально использовать возможности Системы Компоновки Данных (СКД). Основная причина того, что простой Отбор не работает, заключается в следующем:

  1. Приоритет настроек: При открытии формы отчета срабатывают обработчики ПриСозданииНаСервере, которые считывают сохраненные настройки пользователя. Эти настройки имеют более высокий приоритет, чем параметры, переданные при открытии.
  2. Тип настроек: Типовые отчеты используют объект ПользовательскиеНастройкиКомпоновкиДанных. Работа с этим объектом требует специфического подхода: нужно не просто передать структуру, а программно модифицировать настройки до того, как они будут применены отчетом.

Решение: программное формирование пользовательских настроек

Чтобы успешно передать отбор, необходимо подготовить объект ПользовательскиеНастройкиКомпоновкиДанных на стороне клиента или сервера, заполнить его нужными значениями и передать в параметры открытия формы. Рассмотрим этот процесс по шагам.

Шаг 1: Подготовка настроек

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


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

Важные нюансы при работе с отбором

Работая с ПользовательскимиНастройками, обратите внимание на следующие моменты:

Резюме

Программная установка отбора в типовых отчетах — это задача, требующая аккуратной работы с объектом ПользовательскиеНастройкиКомпоновкиДанных. Вместо попыток манипулировать простым параметром Отбор, мы программно формируем полный набор пользовательских настроек и передаем его в форму при открытии. Такой подход гарантирует, что отчет применит фильтры именно так, как вы задумали, учитывая особенности архитектуры СКД в 1С:Бухгалтерии.

← На главную