Теперь продемонстрируем возможность программной настройки нашего отчета. Для этого сначала удалим все настройки, которые мы сделали в схеме компоновки данных.
СОВЕТ
Советуем перед удалением настроек сохранить схему компоновки данных в файл.
На закладке Настройки нажмем кнопку (Заменить настройки стандартной настройкой), расположенную вверху командной панели окна настроек. На запрос конфигуратора о подтверждении потери текущих настроек ответим утвердительно. В результате все сделанные нами настройки будут очищены, а мы восстановим их программным образом.
В модуле формы документа откроем функцию АнализЦенДокумента() и отредактируем фрагмент кода следующим образом (листинг 2.62).
Листинг 2.62. Фрагмент функции «АнализЦенДокумента()»
СхемаКомпоновкиДанных = ДокументОбъект.ПолучитьМакет("АнализЦенКомплектующих");
// Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
Настройки = УстановитьНастройки(СхемаКомпоновкиДанных);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Как видим, мы закомментировали использование стандартных настроек схемы компоновки данных АнализЦенКомплектующих и добавили вызов функции УстановитьНастройки(), которая будут возвращать программно установленные настройки схемы компоновки данных. В функцию передается схема компоновки данных АнализЦенКомплектующих, содержащаяся в макете документа.
Функцию УстановитьНастройки() будем вносить и комментировать по частям для лучшего восприятия материала. Сначала получим настройки по умолчанию схемы компоновки данных, которые мы предварительно очистили. Создадим группировку по полю Номенклатура и назначим для нее автовыбор полей (листинг 2.63).
Листинг 2.63. Процедура программной установки настроек
&НаСервере
Функция УстановитьНастройки(СхемаКомпоновкиДанных)
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
ГруппировкаНоменклатура =
Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ГруппировкаНоменклатура.Использование = Истина;
ПолеНоменклатура = ГруппировкаНоменклатура.ПоляГруппировки.Элементы.Добавить(
Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеНоменклатура.Использование = Истина;
ПолеНоменклатура.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
ВыбранныеПоляДляНоменклатуры = ГруппировкаНоменклатура.Выбор.Элементы.Добавить(
Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
ВыбранныеПоляДляНоменклатуры.Использование = Истина;
…
В общем списке выбранных полей создадим группу Поступило и добавим в нее поля Поступило с заголовком Количество и ЦенаПриход с заголовком Цена. Затем создадим группу Собрано и добавим в нее поля Собрано с заголовком Количество и ЦенаСборки с заголовком Цена. Затем в общий список выбранных полей добавим поле Выручка (листинг 2.64).
Листинг 2.64. Процедура программной установки настроек
…
ГруппаВыбранныхПолей = Настройки.Выбор.Элементы.Добавить(
Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
ГруппаВыбранныхПолей.Использование = Истина;
ГруппаВыбранныхПолей.Заголовок = "Поступило";
Поле1 = ГруппаВыбранныхПолей.Элементы.Добавить(
Тип("ВыбранноеПолеКомпоновкиДанных"));
Поле1.Использование = Истина;
Поле1.Заголовок = "Количество";
Поле1.Поле = Новый ПолеКомпоновкиДанных("Поступило");
Поле2 = ГруппаВыбранныхПолей.Элементы.Добавить(
Тип("ВыбранноеПолеКомпоновкиДанных"));
Поле2.Использование = Истина;
Поле2.Заголовок = "Цена";
Поле2.Поле = Новый ПолеКомпоновкиДанных("ЦенаПриход");
ГруппаВыбранныхПолей = Настройки.Выбор.Элементы.Добавить(
Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
ГруппаВыбранныхПолей.Использование = Истина;
ГруппаВыбранныхПолей.Заголовок = "Собрано";
Поле1 = ГруппаВыбранныхПолей.Элементы.Добавить(
Тип("ВыбранноеПолеКомпоновкиДанных"));
Поле1.Использование = Истина;
Поле1.Заголовок = "Количество";
Поле1.Поле = Новый ПолеКомпоновкиДанных("Собрано");
Поле2 = ГруппаВыбранныхПолей.Элементы.Добавить(
Тип("ВыбранноеПолеКомпоновкиДанных"));
Поле2.Использование = Истина;
Поле2.Заголовок = "Цена";
Поле2.Поле = Новый ПолеКомпоновкиДанных("ЦенаСборки");
ВыбранныеПоля = Настройки.Выбор.Элементы.Добавить(
Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранныеПоля.Использование = Истина;
ВыбранныеПоля.Заголовок = "Выручка";
ВыбранныеПоля.Поле = Новый ПолеКомпоновкиДанных("Выручка");
…
Настроим параметры вывода Заголовок и ВертикальноеРасположениеОбщихИтогов. Обратите внимание, что названия некоторых параметров вывода не совпадают с названиями в окне настроек схемы компоновки данных. Список имен параметров для программного использования можно увидеть в разделе синтакс-помощника Общие объекты⇒Система компоновки данных⇒Настройки компоновки данных⇒ЗначенияПараметровВыводаКомпоновкиДанных (листинг 2.65).
Листинг 2.65. Процедура программной установки настроек
…
Настройки.ПараметрыВывода.УстановитьЗначениеПараметра(
"ВертикальноеРасположениеОбщихИтогов",
РасположениеИтоговКомпоновкиДанных.Нет);
Настройки.ПараметрыВывода.УстановитьЗначениеПараметра(
"Заголовок","Анализ цен комплектующих");
Возврат Настройки;
КонецФункции
Чтобы продемонстрировать программную настройку отбора, уберем отбор по виду номенклатуры на уровне запроса для набора данных ЦеныСборки. В модуле формы документа откроем функцию АнализЦенДокумента() и отредактируем фрагмент кода следующим образом (листинг 2.66).
Листинг 2.66. Фрагмент функции «АнализЦенДокумента()»
|ГДЕ
|Номенклатура в (&СписокНоменклатуры)";
//|Номенклатура.ВидНоменклатуры = &ВидНоменклатуры";
Запрос.УстановитьПараметр("СписокНоменклатуры",
ПереченьНоменклатуры.ВыгрузитьКолонку("Номенклатура"));
// Запрос.УстановитьПараметр("ВидНоменклатуры",
Перечисления.ВидыНоменклатуры.Материалы);
Как видим, мы закомментировали использование в отборе параметра ВидНоменклатуры. Запустим «1С:Предприятие». Откроем документ СборкаКомпьютера. Нажмем кнопку Анализ цен. В отчете будет присутствовать услуга Сборка компьютера, которой не должно быть по условию задачи. Поэтому мы добавим отбор в функцию УстановитьНастройки() так, чтобы в отчет попадала только номенклатура из группы Комплектующие, и отключим вывод информации об отборе (листинг 2.67).
Листинг 2.67. Процедура программной установки настроек
…
ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(
Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
ЭлементОтбора.ПравоеЗначение =
Справочники.Номенклатура.НайтиПоНаименованию("Комплектующие");
Настройки.ПараметрыВывода.УстановитьЗначениеПараметра("ВыводитьОтбор",
ТипВыводаТекстаКомпоновкиДанных.НеВыводить);
Возврат Настройки;
КонецФункции
Проверим результат. Вид отчета в точности соответствует разработанному ранее в схеме компоновки данных отчету (см. рис. 2.313).