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

Заполнение наборов данных и компоновка отчета

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

Рис. 2.312. Добавление в форму документа кнопки «Анализ цен»

В обработчике команды АнализЦен напишем следующий код (листинг 2.60).

Листинг 2.60. Обработчик команды «АнализЦен»

&НаКлиенте

Процедура АнализЦен(Команда)

 

Результат = АнализЦенДокумента();

Результат.ОтображатьСетку = Ложь;

Результат.ОтображатьЗаголовки = Ложь;

Результат.Показать();

 

КонецПроцедуры

Отчет формируется в серверной функции АнализЦенДокумента(). Затем заполненный данными табличный документ возвращается на клиента и показывается пользователю (листинг 2.61).

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

&НаСервере

Функция АнализЦенДокумента()

 

ДокументОбъект = РеквизитФормыВЗначение("Объект");

 

Запрос = НовыйЗапрос;

Запрос.Текст = "ВЫБРАТЬ

|ПриходнаяНакладнаяТовары.Номенклатура КАК Номенклатура,

|ПриходнаяНакладнаяТовары.Количество Как Поступило,

|ПриходнаяНакладнаяТовары.Цена КАК ЦенаПриход

|ИЗ

|Документ.ПриходнаяНакладная.ПереченьНоменклатуры

КАК ПриходнаяНакладнаяТовары

|ГДЕ

|Номенклатура в (&СписокНоменклатуры)";

 

Запрос.УстановитьПараметр("СписокНоменклатуры",

ДокументОбъект.ПереченьНоменклатуры.ВыгрузитьКолонку("Номенклатура"));

Результат = Запрос.Выполнить();

Поступление = Результат.Выгрузить();

 

Запрос = НовыйЗапрос;

Запрос.Текст = "ВЫБРАТЬ

|СборкаКомпьютераТовары.Номенклатура КАК Номенклатура,

|СборкаКомпьютераТовары.Количество КАК Собрано,

|СборкаКомпьютераТовары.Цена КАК ЦенаСборки

|ИЗ

|Документ.СборкаКомпьютера.ПереченьНоменклатуры

КАК СборкаКомпьютераТовары

|ГДЕ

|Номенклатура в (&СписокНоменклатуры) И

|Номенклатура.ВидНоменклатуры = &ВидНоменклатуры";

 

Запрос.УстановитьПараметр("СписокНоменклатуры",

ДокументОбъект.ПереченьНоменклатуры.ВыгрузитьКолонку("Номенклатура"));

Запрос.УстановитьПараметр("ВидНоменклатуры",

Перечисления.ВидыНоменклатуры.Материалы);

Результат = Запрос.Выполнить();

Сборка = Результат.Выгрузить();

 

ВнешниеНаборыДанных = Новый Структура;

ВнешниеНаборыДанных.Вставить("ЦеныПоступления",Поступление);

ВнешниеНаборыДанных.Вставить("ЦеныСборки", Сборка);

 

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

Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

 

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

ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки,

ДанныеРасшифровки);

 

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,

ВнешниеНаборыДанных, ДанныеРасшифровки);

 

ДокументРезультат = Новый ТабличныйДокумент;

ПроцессорВывода = Новый

ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

 

ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

 

Возврат ДокументРезультат;

 

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

Прокомментируем процедуру обработчика. Сначала определяется запрос для выбора поступлений комплектующих из документов ПриходнаяНакладная. При этом полям табличной части Цена и Количество присваиваются псевдонимы ЦенаПриход и Поступило. В качестве параметра запроса используется список номенклатуры табличной части текущего документа. Затем определяется запрос для выбора расхода комплектующих из документов СборкаКомпьютера. При этом полям табличной части Цена и Количество присваиваются псевдонимы ЦенаСборки и Собрано. В качестве параметров запроса используется список номенклатуры табличной части текущего документа и вид номенклатуры – Материалы, так как в отчете нужно отображать только комплектующие. Затем создаются два внешних набора данных – ЦеныПоступления и ЦеныСборки и заполняются результатами запросов. Затем программно выполняется компоновка данных с использованием внешних наборов данных и выдача результата в табличный документ. После этого заполненный данными табличный документ возвращается на клиента и показывается пользователю.

Запустим «1С:Предприятие». Откроем документ СборкаКомпьютера. Нажмем кнопку Анализ цен. На экране появится наш отчет (рис. 2.313).

Рис. 2.313. Результат отчета

Назад: Пример 18. Работа с системой компоновки данных из встроенного языка
Дальше: Настройка отчета