Формируется рассылка отчета из внешнего отчета, но есть один нюанс

1. Amper_San 03.02.25 18:34 Сейчас в теме
Добрый день. Есть внешний отчет, который писался под требования заказчика на СКД.
В нем есть параметры типо даты там и др.
В определённый день недели мне необходимо изменять дату и формировать отчет за другой день.
Для этого была написана вот такая процедура:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) Экспорт
	
	СтандартнаяОбработка = Ложь;
	
	НастройкиКД = КомпоновщикНастроек.ПолучитьНастройки();
	
    НачалоПериода = НастройкиКД.ПараметрыДанных.Элементы.Найти("НачалоПериода").Значение; 
    КонецПериода  = НастройкиКД.ПараметрыДанных.Элементы.Найти("КонецПериода").Значение;
	
    Если НачалоПериода <> Неопределено И КонецПериода <> Неопределено Тогда
        
        Если ДеньНедели(НачалоПериода) = 7 И ДеньНедели(КонецПериода) = 1 Тогда
            
			НастройкиКД.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода", НачалоПериода.Дата - (2*60*60*24));
			НастройкиКД.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода", КонецПериода.Дата - (2*60*60*24));
            
        КонецЕсли;

    КонецЕсли;

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки   = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКД, ДанныеРасшифровки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Ложь);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
КонецПроцедуры
Показать


Однако есть забавный момент. Очет интерактивно формируется, все хорошо. Отрабатывает корректно и данные выводит тоже корректно.

Но, как написано в теме, есть нюанс. Когда отрабатывает рассылка отчета по датам которые не попадают в блок ЕСЛИ рассылка формируется. Когда даты попадают в блок если, дает сообщение об ожибке в ЖР

"Рассылка отчетов не выполнена, так как отчеты пустые или не сформированы из-за ошибок."

При этом строкой выше есть вот такое сообщение в ЖР
"Отчет 'МойУсловныйОтчет' успешно сформирован."

В чем может быть причина такого поведения рассылки и отчета?
По теме из базы знаний
Найденные решения
15. akomarov 18.02.25 12:02 Сейчас в теме
Столкнулся с таким же явлением. Ответ нашелся в том, что в обработчике ПриКомпоновкеРезультат настройки компоновщика получаются в переменную, локально обрабатываются и все на этом. Обратно в компоновщик измененные настройки не загружаются.
Помогла одна строка: КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
То есть обратная загрузка измененных настроек в компоновщик.
Amper_San; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 33 03.02.25 18:38 Сейчас в теме
(1) А если интерактивно формировать за эти даты, отчет пустой формируется?
3. Amper_San 03.02.25 18:39 Сейчас в теме
(2) Нет, выводит корректные данные и все гуд
4. Sashares 33 03.02.25 18:49 Сейчас в теме
(3) Логируйте действия - пишите в журнал регистрации значения, которые пытаетесь установить параметрам до установки параметров.
Пишите в журнал после установки.
5. Amper_San 03.02.25 19:43 Сейчас в теме
(4) Прошел отладчиком, добавил вывод в ЖР всех параметров что устанавливаю, добавил обработчик ошибок.
Итога нет, все такая же ситуация.
Что бы исключить вариант с кэшированием или не подтянувшимся вариантом отчета, пересоздал отчет в отдельном файле с другим именем (как самого отчета так и файла), пересоздал рассылку с нуля (не копированием) и все так же картина на выходе
10. user1936660 03.02.25 22:10 Сейчас в теме
(5)
добавил вывод в ЖР всех параметров что устанавливаю
И где даты?
11. Amper_San 03.02.25 22:50 Сейчас в теме
Я проверил что параметры встают корректно и убрал лишние куски кода, что бы глаза не мозолили
В параметры попадает тип дата и при этом не пустое значение, так что проблема не в получении параметров или их установке.
Возможно для рассылки и в т.ч. Фоновых заданий их как то по другому надо устанавливать?
Да и если бы проблема была в параметре, то давало бы ошибку хоть какую то, а так, складывается ощущение что не срабатывает условие или ещё что-то в этом роде
6. user2107191 03.02.25 19:47 Сейчас в теме
Переименуй переменные НачалоПериода и КонецПериода.
В какие-нибудь НП1 и КП1.
Что-то мне они не нравятся.
7. Amper_San 03.02.25 19:50 Сейчас в теме
(6) Вы имеете ввиду в методе "ПриКомпоновкеРезультата"? Или в самой СКД?
8. user2107191 03.02.25 19:53 Сейчас в теме
(7) Я же сказал "переменные". Значит, в программной процедуре.
9. Amper_San 03.02.25 20:02 Сейчас в теме
(8) Не помогло
Скрин ЖР прилагаю
Измененный код модуля тоже ниже
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) Экспорт
	
	СтандартнаяОбработка = Ложь;
	
	НастройкиКД = КомпоновщикНастроек.ПолучитьНастройки();
	
    НП = НастройкиКД.ПараметрыДанных.Элементы.Найти("НачалоПериода").Значение; 
    КП  = НастройкиКД.ПараметрыДанных.Элементы.Найти("КонецПериода").Значение;
	
    Если НП <> Неопределено И КП <> Неопределено Тогда 
        Если ДеньНедели(НП) = 7 И ДеньНедели(КП) = 1 Тогда	
			Попытка
				НастройкиКД.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода", НП.Дата - (2*60*60*24));
				НастройкиКД.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода", КП.Дата - (2*60*60*24));
			Исключение
				ЗаписьЖурналаРегистрации(НСтр("ru = 'Выгрузка по 51 счету. Действие с возможной ошибкой'"),
  				УровеньЖурналаРегистрации.Ошибка, , ,
  				НСтр("ru = 'Во время выполнения действия произошла неизвестная ошибка.'") + Символы.ПС +
  				ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
			КонецПопытки;
		КонецЕсли;

    КонецЕсли;

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки   = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКД, ДанныеРасшифровки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Ложь);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
КонецПроцедуры
Показать
Прикрепленные файлы:
12. user2107191 03.02.25 23:01 Сейчас в теме
(9) Зачем журналировать исключение из Попытки, если по твоим словам не выполняется условие Если (внутри которого и есть Попытка). До этого места исполнение кода не доходит.
Зажурналируй успешные действия (установку сдвинутых дат), и предъяви.
Sashares; +1 Ответить
13. Amper_San 04.02.25 00:34 Сейчас в теме
Удалось словить отладчиком. Скрин с типами данных и со значениями которые присвоились прикрепляю. Так же прикрепляю скрин того что вывелось в журнал регистрации. Получается что в условие мы все же попадаем, но корректного выполнения отчета не получаем. Хотя при таком же проходе Интерактивным формированием получаем нормальный результат.
Прикрепленные файлы:
14. user2107191 04.02.25 07:28 Сейчас в теме
(13) Ну а теперь проверяй - что в конце процедуры получается в ДокументРезультат. Зажурналируй хотя бы количество строк в этом табдоке. Он вообще - формируется? Или очищается где-то по пути к подведению итоговой рассылки.
17. Sashares 33 18.02.25 13:13 Сейчас в теме
(13) Не понял, что значит "НП.Дата" и "КП.Дата" если НП и КП уже дата.

НастройкиКД.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода", НП.Дата - (2*60*60*24));
НастройкиКД.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода", КП.Дата - (2*60*60*24));
15. akomarov 18.02.25 12:02 Сейчас в теме
Столкнулся с таким же явлением. Ответ нашелся в том, что в обработчике ПриКомпоновкеРезультат настройки компоновщика получаются в переменную, локально обрабатываются и все на этом. Обратно в компоновщик измененные настройки не загружаются.
Помогла одна строка: КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
То есть обратная загрузка измененных настроек в компоновщик.
Amper_San; +1 Ответить
18. Amper_San 18.02.25 14:58 Сейчас в теме
16. VmvLer 18.02.25 12:28 Сейчас в теме
может быть

НачалоДня(НачалоПериода.Дата) - (2*60*60*24)
КонецДня(КонецПериода.Дата) - (2*60*60*24)
Оставьте свое сообщение

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