Книга: Разработка сложных отчетов в «1С:Предприятии 8». Система компоновки данных
Назад: Настройка отчета
Дальше: Пример 19. Консоль системы компоновки данных

Описание схемы компоновки данных

Попробуем теперь программно описать саму схему компоновки данных, ее наборы данных, поля, ресурсы и вычисляемые поля, используемые затем в настройке отчета. Эта задача довольно трудоемкая, но полезная с точки зрения освоения методов и свойств объектов системы компоновки данных. Информацию о них можно увидеть в разделе синтакс-помощника Общие объектыСистема компоновки данныхСхема компоновки данных…

В модуле формы документа откроем функцию АнализЦенДокумента() и отредактируем фрагмент кода следующим образом (листинг 2.68).

Листинг 2.68. Фрагмент функции «АнализЦенДокумента()»

// СхемаКомпоновкиДанных = ПолучитьМакет("АнализЦенКомплектующих");

СхемаКомпоновкиДанных = УстановитьСхему();

Настройки = УстановитьНастройки(СхемаКомпоновкиДанных);

Как видим, мы закомментировали использование схемы компоновки данных АнализЦенКомплектующих, содержащейся в макете документа, и добавили вызов функции УстановитьСхему(), которая будет возвращать программно созданную новую схему компоновки.

Функцию УстановитьСхему() будем вносить и комментировать по частям для лучшего восприятия материала. Сначала создадим новую схему компоновки данных. Добавим локальный источник данных информационной базы. Затем создадим НаборДанныхОбъединение с именем НаборДанных1 и два его элемента НаборДанныхОбъект с именами ЦеныСборки и ЦеныПоступления. Обратите внимание, что имена наборов и их полей должны совпадать с указанными именами в процедуре их программного заполнения при нажатии кнопки Анализ цен (листинг 2.69).

Листинг 2.69. Процедура программной установки схемы компоновки

&НаСервере

Функция УстановитьСхему()

 

СКД = Новый СхемаКомпоновкиДанных;

 

ИД = СКД.ИсточникиДанных.Добавить();

ИД.Имя = "ИсточникДанных";

ИД.ТипИсточникаДанных = "Local";

 

НаборДанных = СКД.НаборыДанных.Добавить(

Тип("НаборДанныхОбъединениеСхемыКомпоновкиДанных"));

НаборДанных.Имя = "НаборДанных1";

Набор1 = НаборДанных.Элементы.Добавить(

Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));

Набор1.Имя = "ЦеныСборки";

Набор1.ИмяОбъекта = "ЦеныСборки";

Набор1.ИсточникДанных = "ИсточникДанных";           

Набор2 = НаборДанных.Элементы.Добавить(

Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));

Набор2.Имя = "ЦеныПоступления";

Набор2.ИмяОбъекта = "ЦеныПоступления";

Набор2.ИсточникДанных = "ИсточникДанных";

В первый набор – объект добавим поле: Номенклатура, ЦенаСборки с заголовком Цена и Собрано с заголовком Количество. Во второй набор – объект добавим поле: Номенклатура, ЦенаПриход с заголовком Цена и Поступило с заголовком Количество. Обратите внимание, что имя поля и путь к данным у полей внешних наборов данных совпадают (листинг 2.70).

Листинг 2.70. Процедура программной установки схемы компоновки

Поле1 = Набор1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));

Поле1.Поле = "Номенклатура";

Поле1.ПутьКДанным = "Номенклатура";

Поле1.Заголовок = "Номенклатура";

Поле2 = Набор1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));

Поле2.Поле = "ЦенаСборки";

Поле2.ПутьКДанным = "ЦенаСборки";

Поле2.Заголовок = "Цена";

Поле3 = Набор1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));

Поле3.Поле = "Собрано";

Поле3.ПутьКДанным = "Собрано";

Поле3.Заголовок = "Количество";

 

Поле1 = Набор2.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));

Поле1.Поле = "Номенклатура";

Поле1.ПутьКДанным = "Номенклатура";

Поле1.Заголовок = "Номенклатура";

Поле2 = Набор2.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));

Поле2.Поле = "ЦенаПриход";

Поле2.ПутьКДанным = "ЦенаПриход";

Поле2.Заголовок = "Цена";

Поле3 = Набор2.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));

Поле3.Поле = "Поступило";

Поле3.ПутьКДанным = "Поступило";

Поле3.Заголовок = "Количество";

Далее добавим вычисляемое поле Выручка и зададим его формат без вывода дробной части. Затем добавим поля ресурсов ЦенаПриход, ЦенаСборки, Поступило, Собрано и Выручка и зададим выражения для их расчета (листинг 2.71).

Листинг 2.71. Процедура программной установки схемы компоновки

ВычПоле = СКД.ВычисляемыеПоля.Добавить();

ВычПоле.ПутьКДанным = "Выручка";

ВычПоле.Заголовок = "Выручка";

ВычПоле.Оформление.УстановитьЗначениеПараметра("Формат", "ЧЦ=6; ЧДЦ=0");

 

ПолеРесурса = СКД.ПоляИтога.Добавить();

ПолеРесурса.ПутьКДанным = "ЦенаПриход";

ПолеРесурса.Выражение = "Среднее(ЦенаПриход)";

ПолеРесурса = СКД.ПоляИтога.Добавить();

ПолеРесурса.ПутьКДанным = "ЦенаСборки";

ПолеРесурса.Выражение = "Среднее(ЦенаСборки)";

ПолеРесурса = СКД.ПоляИтога.Добавить();

ПолеРесурса.ПутьКДанным = "Поступило";

ПолеРесурса.Выражение = "Сумма(Поступило)";

ПолеРесурса = СКД.ПоляИтога.Добавить();

ПолеРесурса.ПутьКДанным = "Собрано";

ПолеРесурса.Выражение = "Сумма(Собрано)";

ПолеРесурса = СКД.ПоляИтога.Добавить();

ПолеРесурса.ПутьКДанным = "Выручка";

ПолеРесурса.Выражение = "Сумма(Собрано) * (Среднее(ЦенаСборки) –

Среднее(ЦенаПриход))";

В заключение нам осталось задать формат полей ЦенаПриход и ЦенаСборки также без вывода дробной части. Но поскольку на уровне наборов данных – объектов нет возможности задать оформление, эти поля сначала нужно добавить в набор данных – объединение. Автоматически, как в конструкторе компоновки данных, в родительский набор они не добавляются (листинг 2.72).

Листинг 2.72. Процедура программной установки схемы компоновки

ПолеЦены = НаборДанных.Поля.Добавить(

Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));

ПолеЦены.Поле = "ЦенаСборки";

ПолеЦены.ПутьКДанным = "ЦенаСборки";

ПолеЦены.Оформление.УстановитьЗначениеПараметра("Формат", "ЧЦ=6; ЧДЦ=0");

ПолеЦены = НаборДанных.Поля.Добавить(

Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));

ПолеЦены.Поле = "ЦенаПриход";

ПолеЦены.ПутьКДанным = "ЦенаПриход";

ПолеЦены.Оформление.УстановитьЗначениеПараметра("Формат", "ЧЦ=6; ЧДЦ=0");

 

Возврат СКД;

 

КонецФункции 

Проверим результат. Мы получим абсолютно такой же отчет, как и при использовании схемы компоновки данных (см. рис. 2.313). Таким образом, мы убедились, что каждый этап процесса компоновки данных можно сформировать программным образом. Стоит ли это делать – зависит от конкретной задачи и подхода разработчика. В большинстве случаев при разработке отчетов можно обойтись интерактивными возможностями платформы.

Итак, на этом примере мы научились:

Назад: Настройка отчета
Дальше: Пример 19. Консоль системы компоновки данных