Сформировать отчет. Формирует отчет с указанными параметрами.
// Формирует отчет с указанными параметрами.
//
// Параметры:
// Параметры - Структура - Параметры подключения и формирования отчета.
// * СсылкаВарианта - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета.
// * СсылкаОтчета - Произвольный - Ссылка отчета.
// * КлючВарианта - Строка - Имя предопределенного или идентификатор пользовательского варианта отчета.
// * ИдентификаторФормы - Неопределено, УникальныйИдентификатор - Идентификатор формы, из которой подключается отчет.
// ПроверятьЗаполнение - Булево - Если Истина то перед формированием будет проведена проверка заполнения.
// ПолучатьФлажокПустой - Булево - Если Истина то после формирования будет проведен анализ заполненности.
//
// Возвращаемое значение:
// Структура - Результат формирования.
//
// Места использования:
// РассылкаОтчетов.СформироватьОтчет().
//
// См. также:
// <Метод>().
//
Функция СформироватьОтчет(Знач Параметры, Знач ПроверятьЗаполнение, Знач ПолучатьФлажокПустой) Экспорт
Результат = Новый Структура("ТабличныйДокумент, Расшифровка,
|СсылкаВарианта, СсылкаОтчета, КлючВарианта,
|Объект, Метаданные, ПолноеИмя,
|СхемаКД, АдресСхемы, СхемаМодифицирована, НастройкиФормы,
|НастройкиКД, ВариантМодифицирован,
|ПользовательскиеНастройкиКД, ПользовательскиеНастройкиМодифицированы,
|ТекстОшибки, Успех, ДанныеЕщеОбновляются");
Результат.Успех = Ложь;
Результат.ТабличныйДокумент = Новый ТабличныйДокумент;
Результат.ВариантМодифицирован = Ложь;
Результат.ПользовательскиеНастройкиМодифицированы = Ложь;
Результат.ДанныеЕщеОбновляются = Ложь;
Если ПолучатьФлажокПустой Тогда
Результат.Вставить("Пустой", Ложь);
КонецЕсли;
Если Параметры.Свойство("Подключение") Тогда
Подключение = Параметры.Подключение;
Иначе
Подключение = ПодключитьОтчетИЗагрузитьНастройки(Параметры);
КонецЕсли;
ЗаполнитьЗначенияСвойств(Результат, Подключение); // , "Объект, Метаданные, ПолноеИмя, КлючВарианта, СхемаКД, АдресСхемы, СхемаМодифицирована, НастройкиФормы"
Если Не Подключение.Успех Тогда
Результат.ТекстОшибки = НСтр("ru = 'Не удалось сформировать отчет:'") + Символы.ПС + Подключение.ТекстОшибки;
Возврат Результат;
КонецЕсли;
ОтчетОбъект = Результат.Объект;
КомпоновщикНастроекКД = ОтчетОбъект.КомпоновщикНастроек;
ДопСвойства = КомпоновщикНастроекКД.ПользовательскиеНастройки.ДополнительныеСвойства;
ДопСвойства.Вставить("КлючВарианта", Результат.КлючВарианта);
// Проверка корректности данных, по которым формируется отчет.
Если ПроверятьЗаполнение Тогда
ИсходныеСообщенияПользователю = ПолучитьСообщенияПользователю(Истина);
ПроверкаПройдена = ОтчетОбъект.ПроверитьЗаполнение();
СообщенияПользователю = ПолучитьСообщенияПользователю(Истина);
Для Каждого Сообщение Из ИсходныеСообщенияПользователю Цикл
Сообщение.Сообщить();
КонецЦикла;
Если Не ПроверкаПройдена Тогда
Результат.ТекстОшибки = НСтр("ru = 'Отчет не прошел проверку заполнения:'");
Для Каждого Сообщение Из СообщенияПользователю Цикл
Результат.ТекстОшибки = Результат.ТекстОшибки + Символы.ПС + Сообщение.Текст;
КонецЦикла;
Возврат Результат;
КонецЕсли;
КонецЕсли;
Попытка
ИспользуемыеТаблицы = ИспользуемыеТаблицы(Результат.СхемаКД);
ИспользуемыеТаблицы.Добавить(Результат.ПолноеИмя);
Если Результат.НастройкиФормы.События.ПриОпределенииИспользуемыхТаблиц Тогда
ОтчетОбъект.ПриОпределенииИспользуемыхТаблиц(Результат.КлючВарианта, ИспользуемыеТаблицы);
КонецЕсли;
Результат.ДанныеЕщеОбновляются = ПроверитьИспользуемыеТаблицы(ИспользуемыеТаблицы, Ложь);
Исключение
ТекстОшибки = НСтр("ru = 'Не удалось определить используемые таблицы:'");
ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ТекстОшибки, Результат.СсылкаВарианта);
КонецПопытки;
// Формирование и оценка скорости.
ИмяКлючевойОперации = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяКлючевойОперации");
ВыполнятьЗамеры = ТипЗнч(ИмяКлючевойОперации) = Тип("Строка") И Не ПустаяСтрока(ИмяКлючевойОперации) И ВыполнятьЗамеры();
Если ВыполнятьЗамеры Тогда
КомментарийКлючевойОперации = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "КомментарийКлючевойОперации");
МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности");
ВремяНачала = МодульОценкаПроизводительности.НачатьЗамерВремени();
КонецЕсли;
ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабличныйДокумент, Результат.Расшифровка);
Если ВыполнятьЗамеры Тогда
МодульОценкаПроизводительности.ЗакончитьЗамерВремениТехнологический(
ИмяКлючевойОперации,
ВремяНачала,
1,
КомментарийКлючевойОперации);
КонецЕсли;
// Регистрация результата.
Если ДопСвойства <> КомпоновщикНастроекКД.ПользовательскиеНастройки.ДополнительныеСвойства Тогда
НовыеДопСвойства = КомпоновщикНастроекКД.ПользовательскиеНастройки.ДополнительныеСвойства;
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(НовыеДопСвойства, ДопСвойства, Ложь);
ДопСвойства = НовыеДопСвойства;
КонецЕсли;
Модифицирован = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ВариантМодифицирован");
Если Модифицирован = Истина Тогда
Результат.ВариантМодифицирован = Истина;
Результат.НастройкиКД = КомпоновщикНастроекКД.Настройки;
КонецЕсли;
Модифицированы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ПользовательскиеНастройкиМодифицированы");
Если Результат.ВариантМодифицирован Или Модифицированы = Истина Тогда
Результат.ПользовательскиеНастройкиМодифицированы = Истина;
Результат.ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки;
КонецЕсли;
Если ПолучатьФлажокПустой Тогда
Если ДопСвойства.Свойство("ОтчетПустой") Тогда
Пустой = ДопСвойства.ОтчетПустой;
Иначе
Пустой = ОтчетыСервер.ОтчетПустой(ОтчетОбъект);
КонецЕсли;
Результат.Вставить("Пустой", Пустой);
КонецЕсли;
НастройкиПечати = Результат.НастройкиФормы.Печать;
НастройкиПечати.Вставить("КлючПараметровПечати", ОтчетыКлиентСервер.КлючУникальности(Результат.ПолноеИмя, Результат.КлючВарианта));
ЗаполнитьЗначенияСвойств(Результат.ТабличныйДокумент, НастройкиПечати);
// Установка колонтитулов.
НастройкиКолонтитулов = Неопределено;
Если Результат.НастройкиКД <> Неопределено Тогда
Результат.НастройкиКД.ДополнительныеСвойства.Свойство("НастройкиКолонтитулов", НастройкиКолонтитулов);
КонецЕсли;
НазваниеОтчета = "";
Если ЗначениеЗаполнено(Результат.СсылкаВарианта) Тогда
НазваниеОтчета = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Результат.СсылкаВарианта, "Наименование");
ИначеЕсли Результат.Метаданные <> Неопределено Тогда
НазваниеОтчета = Результат.Метаданные.Синоним;
КонецЕсли;
УправлениеКолонтитулами.УстановитьКолонтитулы(
Результат.ТабличныйДокумент, НазваниеОтчета,, НастройкиКолонтитулов);
Результат.Успех = Истина;
// Чистка мусора.
ДопСвойства.Удалить("ВариантМодифицирован");
ДопСвойства.Удалить("ПользовательскиеНастройкиМодифицированы");
ДопСвойства.Удалить("КлючВарианта");
ДопСвойства.Удалить("ОтчетПустой");
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ИмпортФайловСформироватьОтчет (БСП)
СформироватьИнформациюОбОтчетеПоПолномуИмени (БСП)
Запуск внешнего отчета в сформированном виде
Отправка сформированного отчета на почту (в виде html текста)