Функция ОтчетАнализЕДСМО_вТабДок)
ТабДок =
Новый ТабличныйДокумент();
СКД=Отчеты.ОтчетАнализЕДСМО.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки=СКД.НастройкиПоУмолчанию;
//Параметры
отчета
Параметр1 = Настройки.ПараметрыДанных.Элементы.Найти("ДатаНачала");
Параметр1.Значение = НачалоГода(ТекущаяДата());
Параметр1.Использование = Истина;
Параметр2 = Настройки.ПараметрыДанных.Элементы.Найти("ДатаОкончания");
Параметр2.Значение = ТекущаяДата();//Текущее время
Параметр2.Использование = Истина;
Расшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета
= Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем
в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки
= КомпоновщикМакета.Выполнить(СКД, Настройки,
Расшифровка);
ВнешниеПараметры
= Новый Структура;
//Выполним
компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных
= Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеПараметры,
Расшифровка);
//Выводим
результат в табличный документ
ПроцессорВывода
= Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);
Возврат ТабДок;
КонецФункции
Функция ОтчетПоЗаявкам_вТабДок()
ТабДок =
Новый ТабличныйДокумент();
СКД=Отчеты.ОтчетПоЗаявкам.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки=СКД.НастройкиПоУмолчанию;
//Параметры
отчета
Параметр1 = Настройки.ПараметрыДанных.Элементы.Найти("ДатаНачала");
Параметр1.Значение = НачалоДня(НачалоДня(ТекущаяДата())-1);//Начало
предыдущего дня
Параметр1.Использование = Истина;
Параметр2 = Настройки.ПараметрыДанных.Элементы.Найти("ДатаОкончания");
Параметр2.Значение = КонецДня(НачалоДня(ТекущаяДата())-1);//Конец
предыдущего дня
Параметр2.Использование = Истина;
Расшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета
= Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем
в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки
= КомпоновщикМакета.Выполнить(СКД, Настройки,
Расшифровка);
ВнешниеПараметры
= Новый Структура;
//Выполним
компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных
= Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеПараметры,
Расшифровка);
//Выводим
результат в табличный документ
ПроцессорВывода
= Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);
Возврат ТабДок;
КонецФункции
Процедура
СохранитьМногостраничныйФайл(ИмяФайла, СоответствиеЛистов)
Экспорт
Х = ПолучитьCOMОбъект("",
"Excel.Application");
Х.SheetsInNewWorkbook
= 1; // в новой книге создавать только 1 лист
Книга = Х.Workbooks.Add();
Первый = Истина; // у нас уже есть один
лист, надо использовать его
ПрошлыйЛист = Неопределено;
Для Каждого мЛист
Из СоответствиеЛистов Цикл
//Сохраняем табличный документ во
временный файл
ИмяВременногоФайла
= ПолучитьИмяВременногоФайла("xlsx");
ТабДок = мЛист.Значение;
ТабДок.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.XLSX);
Х.CutCopyMode
= False; // Сбрасываем старое копирование
// Копируем первый (единственный)
лист временного файла
мКнига = Х.Workbooks.Open(ИмяВременногоФайла);
мКнига.Worksheets(1).Cells.Select();
Х.Selection.Copy();
Если Первый Тогда //
Используем созданный автоматически
НовыйЛист
= Книга.Worksheets(1);
Первый = Ложь;
Иначе // добавляем новый
НовыйЛист
= Книга.Worksheets.Add(, ПрошлыйЛист);
// Добавляем новый лист после прошлого
КонецЕсли;
НовыйЛист.Name
= мЛист.Ключ; // Задаём имя
НовыйЛист.Paste();
// Вставляем содержимое
// Сбрасываем выделение с
добавленного листа
НовыйЛист.Activate();
Х.Range("A1").Select();
ПрошлыйЛист = НовыйЛист;
КонецЦикла;
Х.DisplayAlerts
= False; // Отключаем вывод предупреждений типа
"Заменить файл?"
Книга.Worksheets(1).Activate(); // Активируем 1 лист из списка
Книга.SaveAs(ИмяФайла);
Х.Quit();
Х = Неопределено;
КонецПроцедуры
Процедура
ОтправитьФайлОтчетаВТелеграм(Токен,
ChatId, ДвоичныеДанные, ИмяФайла, Сообщение)
Разделитель = Строка(Новый УникальныйИдентификатор());
Тело = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(Тело,
КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, Символы.ВК + Символы.ПС, Символы.ПС, Истина);
// chat_id
ЗаписьДанных.ЗаписатьСтроку("--"
+ Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition:
form-data; name=""chat_id""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку(ChatId);
// disable_notification
ЗаписьДанных.ЗаписатьСтроку("--"
+ Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition:
form-data; name=""disable_notification""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("True");
Если Не ПустаяСтрока(Сообщение)
Тогда
// caption
ЗаписьДанных.ЗаписатьСтроку("--"
+ Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data;
name=""caption""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку(Сообщение);
// parse_mode
ЗаписьДанных.ЗаписатьСтроку("--"
+ Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition:
form-data; name=""parse_mode""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("HTML");
КонецЕсли;
// document
ЗаписьДанных.ЗаписатьСтроку("--"
+ Разделитель);
//ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition:
form-data; name=""document""; filename=""%1.pdf""",
?(ПустаяСтрока(ИмяФайла),
"document_" + Строка(Новый УникальныйИдентификатор()) + ".pdf",
ИмяФайла)));
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition:
form-data; name=""document""; filename=" + ИмяФайла + "");
//ЗаписьДанных.ЗаписатьСтроку("Content-Type:
application/pdf");
ЗаписьДанных.ЗаписатьСтроку("");
//ЗаписьДанных.Закрыть();
// Добавим файл
//ЗаписьДанных = Новый ЗаписьДанных(...);
ЗаписьДанных.Записать(ДвоичныеДанные);
//ЗаписьДанных.Закрыть();
// Завершение записи
//ЗаписьДанных = Новый ЗаписьДанных(Тело,
КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, Символы.ВК + Символы.ПС, Символы.ПС, Ложь);
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("--"
+ Разделитель + "--");
ЗаписьДанных.Закрыть();
ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные();
// Сформировать соединение и запрос
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,15,Новый
ЗащищенноеСоединениеOpenSSL());
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" +
Разделитель);
Заголовки.Вставить("Accept",
"*/*");
Заголовки.Вставить("Cache-Control",
"no-cache");
Заголовки.Вставить("Host", "api.telegram.org");
Заголовки.Вставить("Accept-Encoding",
"gzip, deflate");
Заголовки.Вставить("Content-Length", Формат(ДанныеТела.Размер(), "ЧДЦ=0; ЧН=0; ЧГ=0"));
Заголовки.Вставить("Connection",
"close");
Адрес = СтрШаблон("/bot%1/sendDocument", Токен);
Запрос = Новый HTTPЗапрос(Адрес,
Заголовки);
Запрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния
= 200 Тогда
ЧтениеJSON
= Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));
РезСтруктура
= ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
КонецЕсли;
КонецПроцедуры//ОтправитьФайлОтчетаВТелеграм
&НаСервере
Процедура
ОтладкаНаСервере()
ТабДок1 = ОтчетАнализЕДСМО_вТабДок();
ТабДок2 = ОтчетПоЗаявкам_вТабДок();
ВремФайл
= ПолучитьИмяВременногоФайла("xlsx");
Листы = Новый Соответствие();
Листы.Вставить("Лист1",
ТабДок2);//Обратный порядок
Листы.Вставить("Лист2",
ТабДок1);
СохранитьМногостраничныйФайл(ВремФайл, Листы);
ДД
= Новый ДвоичныеДанные(ВремФайл);
ТекстСообщ
= "Сводный отчет";
ОтправитьФайлОтчетаВТелеграм("12345:asdfgh", "-1234567", ДД, "Сводный
отчет.xlsx", ТекстСообщ);
УдалитьФайлы(ВремФайл);
КонецПроцедуры
////////////////////////////////////////
&НаКлиенте
Процедура
Отладка(Команда)
ОтладкаНаСервере();
КонецПроцедуры
|