Теперь разместим в документе СборкаКомпьютера кнопку Анализ цен, при нажатии которой будет исполняться программный код, заполняющий внешние наборы данных и выполняющий компоновку и представление отчета. Откроем форму документа ФормаДокумента, созданную нами ранее. Затем создадим команду АнализЦен и соответствующую ей кнопку формы и поместим ее в командную панель формы документа (рис. 2.312).
Рис. 2.312. Добавление в форму документа кнопки «Анализ цен»
В обработчике команды АнализЦен напишем следующий код (листинг 2.60).
Листинг 2.60. Обработчик команды «АнализЦен»
&НаКлиенте
Процедура АнализЦен(Команда)
Результат = АнализЦенДокумента();
Результат.ОтображатьСетку = Ложь;
Результат.ОтображатьЗаголовки = Ложь;
Результат.Показать();
КонецПроцедуры
Отчет формируется в серверной функции АнализЦенДокумента(). Затем заполненный данными табличный документ возвращается на клиента и показывается пользователю (листинг 2.61).
Листинг 2.61. Функция «АнализЦенДокумента()»
&НаСервере
Функция АнализЦенДокумента()
ДокументОбъект = РеквизитФормыВЗначение("Объект");
Запрос = НовыйЗапрос;
Запрос.Текст = "ВЫБРАТЬ
|ПриходнаяНакладнаяТовары.Номенклатура КАК Номенклатура,
|ПриходнаяНакладнаяТовары.Количество Как Поступило,
|ПриходнаяНакладнаяТовары.Цена КАК ЦенаПриход
|ИЗ
|Документ.ПриходнаяНакладная.ПереченьНоменклатуры
КАК ПриходнаяНакладнаяТовары
|ГДЕ
|Номенклатура в (&СписокНоменклатуры)";
Запрос.УстановитьПараметр("СписокНоменклатуры",
ДокументОбъект.ПереченьНоменклатуры.ВыгрузитьКолонку("Номенклатура"));
Результат = Запрос.Выполнить();
Поступление = Результат.Выгрузить();
Запрос = НовыйЗапрос;
Запрос.Текст = "ВЫБРАТЬ
|СборкаКомпьютераТовары.Номенклатура КАК Номенклатура,
|СборкаКомпьютераТовары.Количество КАК Собрано,
|СборкаКомпьютераТовары.Цена КАК ЦенаСборки
|ИЗ
|Документ.СборкаКомпьютера.ПереченьНоменклатуры
КАК СборкаКомпьютераТовары
|ГДЕ
|Номенклатура в (&СписокНоменклатуры) И
|Номенклатура.ВидНоменклатуры = &ВидНоменклатуры";
Запрос.УстановитьПараметр("СписокНоменклатуры",
ДокументОбъект.ПереченьНоменклатуры.ВыгрузитьКолонку("Номенклатура"));
Запрос.УстановитьПараметр("ВидНоменклатуры",
Перечисления.ВидыНоменклатуры.Материалы);
Результат = Запрос.Выполнить();
Сборка = Результат.Выгрузить();
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ЦеныПоступления",Поступление);
ВнешниеНаборыДанных.Вставить("ЦеныСборки", Сборка);
СхемаКомпоновкиДанных = ДокументОбъект.ПолучитьМакет("АнализЦенКомплектующих");
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки,
ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,
ВнешниеНаборыДанных, ДанныеРасшифровки);
ДокументРезультат = Новый ТабличныйДокумент;
ПроцессорВывода = Новый
ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Возврат ДокументРезультат;
КонецФункции
Прокомментируем процедуру обработчика. Сначала определяется запрос для выбора поступлений комплектующих из документов ПриходнаяНакладная. При этом полям табличной части Цена и Количество присваиваются псевдонимы ЦенаПриход и Поступило. В качестве параметра запроса используется список номенклатуры табличной части текущего документа. Затем определяется запрос для выбора расхода комплектующих из документов СборкаКомпьютера. При этом полям табличной части Цена и Количество присваиваются псевдонимы ЦенаСборки и Собрано. В качестве параметров запроса используется список номенклатуры табличной части текущего документа и вид номенклатуры – Материалы, так как в отчете нужно отображать только комплектующие. Затем создаются два внешних набора данных – ЦеныПоступления и ЦеныСборки и заполняются результатами запросов. Затем программно выполняется компоновка данных с использованием внешних наборов данных и выдача результата в табличный документ. После этого заполненный данными табличный документ возвращается на клиента и показывается пользователю.
Запустим «1С:Предприятие». Откроем документ СборкаКомпьютера. Нажмем кнопку Анализ цен. На экране появится наш отчет (рис. 2.313).
Рис. 2.313. Результат отчета