Программное формирование отчета СКД и отправка на e-mail

1. mike40 07.02.25 15:56 Сейчас в теме
Добрый день! Коллеги, подскажите что делаю не так. Суть такая: в ЗУП 3.1 делаю обработку по формированию и отправке табеля Т13 на почту сотрудникам. Письмо отправляется нормально, но сам отчет не формируется. Приходит excel файл, но пустой.
Код:
Процедура ВыполнитьРассылкуНаСервереНовая() Экспорт

	НачалоПериода = НачалоМесяца(Дата(2024, 11, 01));
	КонецПериода = КонецМесяца(НачалоПериода);
	                                           
	НепосредственныеРуководители = ПолучитьПереченьНепосредственныхРуководителей();
	
	Для Каждого ТекСтрока Из НепосредственныеРуководители Цикл
		
		Попытка
			
			ОбъектОтчетНаСервере = Отчеты.УнифицированнаяФормаТ13.Создать();
			СхемаСКД = ОбъектОтчетНаСервере.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
			НастройкиСхемы = СхемаСКД.НастройкиПоУмолчанию;
			ПараметрыДанныхСКД = НастройкиСхемы.ПараметрыДанных.Элементы;
			
			СтандартныйПериод = Новый СтандартныйПериод;
			СтандартныйПериод.ДатаНачала = НачалоПериода;
			СтандартныйПериод.ДатаОкончания = КонецПериода;
			СтандартныйПериод.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод;
			
			ЭлементНачалоПериода = ПараметрыДанныхСКД.Найти("ПериодОтчета");
			ЭлементНачалоПериода.Использование = Истина;
			ЭлементНачалоПериода.Значение = СтандартныйПериод; 
			
			ЭлементДатаОтчета = ПараметрыДанныхСКД.Найти("ДатаОтчета");
			ЭлементНачалоПериода.Использование = Истина;
			ЭлементНачалоПериода.Значение = НачалоДня(ТекущаяДата());
			
			ЭлементДатаОтчета = ПараметрыДанныхСКД.Найти("ДатаНачала");
			ЭлементНачалоПериода.Использование = Истина;
			ЭлементНачалоПериода.Значение = НачалоПериода;
			
			ЭлементДатаОтчета = ПараметрыДанныхСКД.Найти("ДатаОкончания");
			ЭлементНачалоПериода.Использование = Истина;
			ЭлементНачалоПериода.Значение = КонецПериода;
			
			ОтборКомпоновщика = НастройкиСхемы.Отбор;
			Для Каждого ЭлементОтбора Из ОтборКомпоновщика.Элементы Цикл
				Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сотрудник") Тогда
					ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
					ЭлементОтбора.ПравоеЗначение = ТекСтрока.НепосредственныйРуководитель;
					ЭлементОтбора.Использование = Истина;
				КонецЕсли;
				Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОрганизацияОтбор") Тогда
					ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
					ЭлементОтбора.ПравоеЗначение = ТекСтрока.Организация;
					ЭлементОтбора.Использование = Истина;
				КонецЕсли;
			КонецЦикла;
			
			КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
			Макет = КомпоновщикМакета.Выполнить(СхемаСКД, НастройкиСхемы);
			
			ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
			ПроцессорКомпоновки.Инициализировать(Макет);
			
			ТабличныйДокумент = Новый ТабличныйДокумент;
			ТабличныйДокумент.Очистить();
			
			ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
			ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент);
			ПроцессорВывода.Вывести(ПроцессорКомпоновки);
			
			ФайлДляОтправки = ПолучитьИмяВременногоФайла("xlsx");	
			ИмяСохраненногоФайла = Лев(ФайлДляОтправки, СтрНайти(ФайлДляОтправки,"v8_") - 1) + "Табель_учета_рабочего_времени(Т-13).xlsx";
			ТабличныйДокумент.Записать(ИмяСохраненногоФайла, ТипФайлаТабличногоДокумента.XLSX);
			
			ОтправитьПисьмо(ИмяСохраненногоФайла, Неопределено);
			
		Исключение
			ТекстСообщения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
			ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации("Рассылка табеля учета рабочего времени",
			УровеньЖурналаРегистрации.Ошибка, ЭтотОбъект, , ТекстСообщения);
			Сообщить(ТекстСообщения);
		КонецПопытки;
	КонецЦикла;
	
КонецПроцедуры

Показать
Прикрепленные файлы:
VyacheslavShilov; +1 Ответить
По теме из базы знаний
Найденные решения
4. starik-2005 3167 08.02.25 12:40 Сейчас в теме
МойОтчет = Отчеты.МойОтчет.Создать();
Документ = Новый ТабличныйДокумент;
// где-то тут можно заполнить отборы МойОтчет.КомпоновщикНастроек.....
// нафига вы все процессор компоновки и прочего дергаете не по делу...
МойОтчет.СкомпоноватьРезультат(Документ);
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
Документ.Записать(ИмяФайла);
Вложения = Новый Соответствие;
Вложения["МойОтчет.xlsx"] = Новый ДвоичныеДанные(ИмяФайла);
УправлениеПочтной.ОтправитьПисмена(Адресаты, Вложения, ...); // я хз что у вас там в системе, но везде как-то так
Показать
Все.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. vadim1011985 103 08.02.25 10:37 Сейчас в теме
(1) А стандартная рассылка отчетов чем не устраивает ?
2. ZOMI 143 07.02.25 16:29 Сейчас в теме
Похоже не успевает сформироваться экселька
Проверьте размер файла перед отправкой //
Лучше последовательно сформируйте файлы. А потом перейдите к отправке - не нужно насильно ожидать формирования
VyacheslavShilov; +1 Ответить
4. starik-2005 3167 08.02.25 12:40 Сейчас в теме
МойОтчет = Отчеты.МойОтчет.Создать();
Документ = Новый ТабличныйДокумент;
// где-то тут можно заполнить отборы МойОтчет.КомпоновщикНастроек.....
// нафига вы все процессор компоновки и прочего дергаете не по делу...
МойОтчет.СкомпоноватьРезультат(Документ);
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
Документ.Записать(ИмяФайла);
Вложения = Новый Соответствие;
Вложения["МойОтчет.xlsx"] = Новый ДвоичныеДанные(ИмяФайла);
УправлениеПочтной.ОтправитьПисмена(Адресаты, Вложения, ...); // я хз что у вас там в системе, но везде как-то так
Показать
Все.
5. mike40 11.02.25 08:55 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот