Передать ИсточникДоступныхНастроек в настоящую форму компоновщика настроек

Учебные задачи

Основной реквизит принимающей формы имеет тип КомпоновщикНастроекКомпоновкиДанных; параметры обрабатывает стандартное расширение формы.

Где и как запускать

Клиентский и контекстный серверный модули своих общих управляемых форм.

Подготовка

  1. В своей учебной конфигурации создайте Отчеты → УчебныеКнигиСКД. У отчёта откройте ОсновнаяСхемаКомпоновкиДанных и сохраните её макетом ОсновнаяСхемаКомпоновкиДанных.

  2. В конструкторе СКД создайте источник Local и набор-запрос Книги. Вставьте приведённый запрос двух константных строк; это не чтение рабочих справочников. Доступные поля Наименование, Количество, Сумма заполните автоматически.

  3. В настройках схемы создайте вариант Подробно: выбраны Наименование, Количество, Сумма; структура — группировка Детальные записи. Второй вариант Кратко: Наименование и Сумма, также Детальные записи. Первым оставьте Подробно; у обоих задайте понятное представление.

  4. Создайте собственную общую УПРАВЛЯЕМУЮ форму УчебныеНастройкиКниг. Реквизит Компоновщик типа КомпоновщикНастроекКомпоновкиДанных отметьте ОСНОВНЫМ. Это существенно: обычный неосновной реквизит не делает форму формой компоновщика.

  5. В принимающей форме перетащите из дерева реквизита таблицы Компоновщик.Настройки.Отбор, Компоновщик.Настройки.Выбор, Компоновщик.ПользовательскиеНастройки. Добавьте команду ЗакрытьУчебныеНастройки с дополнительным клиентским обработчиком. Не переинициализируйте основной компоновщик в ПриСозданииНаСервере: параметры принимает его стандартное расширение.

  6. Отдельная собственная вызывающая общая управляемая форма содержит основной клиентский блок и две серверные процедуры / функции. Источник на клиенте создаётся по настоящему адресу своей схемы; хранение связано с уникальным идентификатором вызывающей формы.

  7. Все четыре параметра передаются согласованно для одной схемы. При ручном изучении конкретного параметра сравнивайте его назначение, а не заменяйте остальные несовместимыми настройками другого отчёта. Принимающая форма только редактирует настройки в памяти, не формирует и не записывает отчёт.

&НаКлиенте
Процедура ОткрытьСвоиНастройкиКниг(Команда)
    Данные = СвоиПараметрыФормыНастроек();
    Параметры = Новый Структура;
    Параметры.Вставить("ИсточникДоступныхНастроек", Новый ИсточникДоступныхНастроекКомпоновкиДанных(Данные.АдресСхемы));
    Параметры.Вставить("Настройки", Данные.Настройки);
    Параметры.Вставить("ПользовательскиеНастройки", Данные.ПользовательскиеНастройки);
    Параметры.Вставить("ФиксированныеНастройки", Данные.ФиксированныеНастройки);
    ОткрытьФорму("ОбщаяФорма.УчебныеНастройкиКниг", Параметры, ЭтаФорма, Истина);
КонецПроцедуры
Вызывающая форма: подготовить свою схему и согласованные объекты настроек
&НаСервере
Функция СвоиПараметрыФормыНастроек()
    Схема = Отчеты.УчебныеКнигиСКД.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
    Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
    Настройки = Схема.НастройкиПоУмолчанию;
    ДобавитьСвойОтбор(Настройки, "Количество", ВидСравненияКомпоновкиДанных.Больше, 0);
    Настройки.Отбор.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор;
    Настройки.Отбор.ПредставлениеПользовательскойНастройки = "Количество своих книг";
    Компоновщик.ЗагрузитьНастройки(Настройки);
    Фиксированные = Новый НастройкиКомпоновкиДанных;
    ДобавитьСвойОтбор(Фиксированные, "Сумма", ВидСравненияКомпоновкиДанных.Больше, 500);
    Результат = Новый Структура;
    Результат.Вставить("АдресСхемы", ПоместитьВоВременноеХранилище(Схема, УникальныйИдентификатор));
    Результат.Вставить("Настройки", Компоновщик.ПолучитьНастройки());
    Результат.Вставить("ПользовательскиеНастройки", Компоновщик.ПользовательскиеНастройки);
    Результат.Вставить("ФиксированныеНастройки", Фиксированные);
    Возврат Результат;
КонецФункции
Вызывающая форма: собственное условие по настоящему полю схемы
&НаСервере
Процедура ДобавитьСвойОтбор(Настройки, ИмяПоля, Сравнение, Значение)
    Элемент = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля);
    Элемент.ВидСравнения = Сравнение;
    Элемент.ПравоеЗначение = Значение;
    Элемент.Использование = Истина;
КонецПроцедуры
Принимающая форма с основным Компоновщик: кнопка закрытия
&НаКлиенте
Процедура ЗакрытьУчебныеНастройки(Команда)
    Настройки = Компоновщик.ПолучитьНастройки();
    Сообщить("Полных элементов отбора: " + Строка(Настройки.Отбор.Элементы.Количество()));
    Закрыть(Настройки);
КонецПроцедуры

Разбор по шагам

  1. Подготовьте собственный отчёт и именно форму с основным компоновщиком.

  2. Получите его полные, пользовательские и фиксированные настройки вместе с источником.

  3. Откройте свою форму и проверьте доступные поля / отборы.

Как проверить результат

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

  2. Ключи ИсточникДоступныхНастроек, Настройки, ПользовательскиеНастройки, ФиксированныеНастройки — стандартные параметры этого расширения. Они не объявляются заново как произвольные реквизиты с такими же именами.

  3. Кнопка закрытия возвращает полные настройки вызывающему коду; этот краткий опыт не обещает автоматическую запись или переформирование отчёта владельца. BSL и формы при сборке HTML не запускались.

Ожидаемый результат

Есть согласованный источник и принимающая форма правильного основного типа, а не набор одноимённых самодельных полей.

На что обратить внимание

  1. Не используйте этот маршрут для формы, у которой основной реквизит ТаблицаЗначений / обычная Структура.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.