Почему в ЗУП не запускается фоновое задание?

1. SlavaViktorov 10.08.26 10:39 Сейчас в теме
Стандартным способом пытаюсь получить данные журнала регистрации:

&НаСервере
Функция ПараметрыОтчета(ДатаНачала, ДатаОкончания)

	ОтборЖурналаРегистрации = Новый Структура("ДатаНачала, ДатаОкончания");
	ОтборЖурналаРегистрации.ДатаНачала 	  = НачалоДня(ДатаНачала);
	ОтборЖурналаРегистрации.ДатаОкончания = КонецДня(ДатаОкончания);

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

	Возврат ПараметрыОтчета;

КонецФункции

&НаСервере
Процедура СобытияЖурнала(ДатаНачала, ДатаОкончания)

	ПараметрыОтчета = ПараметрыОтчета(ДатаНачала, ДатаОкончания);

	ИД = УникальныйИдентификатор;
	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ИД);
	ПараметрыВыполнения.ОжидатьЗавершение = 0;
	ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Обновление журнала регистрации'");

	РезультатВыполнения = ДлительныеОперации.ВыполнитьВФоне("ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации", ПараметрыОтчета, ПараметрыВыполнения);
	СтруктураЗаписейЖурнала = ПолучитьИЗВременногоХранилища(РезультатВыполнения.АдресРезультата);
	ЧитатьВремХран(СтруктураЗаписейЖурнала);
КонецПроцедуры

&НаСервере
Процедура ЧитатьВремХран(СтруктураЗаписейЖурнала)

	Если Не ЗначениеЗаполнено(СтруктураЗаписейЖурнала) Тогда
		Сообщить("Коллекция пуста или не инициализирована!"); //выводит при первом запуске (в фоне)
		Возврат;
	КонецЕсли;
	СобытияЖурнала = СтруктураЗаписейЖурнала.СобытияЖурнала;

	Для Каждого Стр Из СобытияЖурнала Цикл
		Если ЗначениеЗаполнено(Стр.Транзакция)
		И СтрНайти(Стр.Метаданные, "Документ. Прием на работу") > 0
		И СтрНайти(Стр.ПредставлениеСобытия, "Изменение") > 0
		ИЛИ СтрНайти(Стр.Метаданные, "Справочник. Сотрудники") > 0
		Тогда
			Сообщить("Транзакция: " + Стр.Транзакция + " | ПредставлениеДанных:" + Стр.ПредставлениеДанных);
		КонецЕсли;
	КонецЦикла;

КонецПроцедуры
Показать



Процедура работает, только не в фоне.
Т.е. когда первый раз нажимаю на кнопку запуска процедуры, выводит ошибку что не сформирована
структура, в моем случае - "Коллекция пуста или не инициализирована!"
А при втором нажатии на кнопку процедура, после паузы, полностью отрабатывает все задуманное.
Таким образом я понимаю, что программа не настроена на выполнение фонового задания.

Использую программу 1С - версию для разработчиков.


Проверяю Журнал регистрации - там нет ошибок по данному событию.
Данные - Обновление Журнала Регистрации,
Событие - Фоновое задание. Успешное завершение.
В ЖурналРегистрации и вовсе нет ошибок по Фоновым заданиям.

Отладка - Подключение... - Предметы Отладки - Автоматическое подключение - выставлены флажки
для: Фоновые Задания и Клиентские и внешние соединения...
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
9. SlavaKron 10.08.26 13:03 Сейчас в теме
(1)
Если ЗначениеЗаполнено(Стр.Транзакция)
И СтрНайти(Стр.Метаданные, "Документ. Прием на работу") > 0
И СтрНайти(Стр.ПредставлениеСобытия, "Изменение") > 0
ИЛИ СтрНайти(Стр.Метаданные, "Справочник. Сотрудники") > 0
Вот это всё делается через отбор. Если бы это сразу было в отборе, то выгрузка журнала происходила бы быстро и не пришлось бы ее кидать в фоновое задание и делать ограничение на 25000 записей, которое может обрезать нужные данные.
SlavaViktorov; +1 Ответить
2. paramedic 10.08.26 11:06 Сейчас в теме
А вы вообще понимаете что такое параллельные вычисления?
Откуда у вас появятся данные в хранилище СРАЗУ после запуска фонового задания?
3. SlavaViktorov 10.08.26 11:16 Сейчас в теме
(2) а можно поподробнее?
и желательно не вопросами а ответами
4. paramedic 10.08.26 11:32 Сейчас в теме
(3) Вы выбрасываете выполнение своей функции в отдельные поток и не дожидаясь ее завершения пытаетесь использовать результат.
А вопросы заданы для того, чтобы вы задумались при попытке на них ответить, а не занимались тупой копипастой.
6. SlavaViktorov 10.08.26 11:42 Сейчас в теме
*жду более адекватных и менее эмоциональных ответов*
7. paramedic 10.08.26 12:00 Сейчас в теме
(6) Не хотите сами разбираться - ловите, что вы получаете:
- первый раз запустили - получили "шишь", т.к. в первый момент чтения из хранилища там еще ничего нет (функция не отработала!!!)
- второй раз запустили - получили результат ПЕРВОГО выполнения, а второй еще не выполнился
- третий раз запустили- получили результат ВТОРОГО выполнения и т.д.
Сейчас я дал вам рыбу вместо удочки, так что вы опять и опять будете наступать на те же грабли.
8. ZergKRSK 130 10.08.26 12:42 Сейчас в теме
(6) читаем справку к функции ВыполнитьВФоне
// Запустить выполнение процедуры в фоновом задании, если это возможно.
// Не следует использовать эту функцию, если необходимо безусловно запускать фоновое задание.
// Рекомендуется применять совместно с функцией ДлительныеОперацииКлиент.ОжидатьЗавершение,
// если невозможно, тогда для проверки завершения операции использовать функцию ЗаданиеВыполнено.

А ещё там даже примеры использования готовые есть
10. paramedic 10.08.26 13:05 Сейчас в теме
(8) Ну если быть таким педантичным, то там же:
// Вместо этой функции рекомендуется использовать функции ВыполнитьФункцию и ВыполнитьПроцедуру

;)
11. ZergKRSK 130 10.08.26 13:16 Сейчас в теме
(10) это разрабам можете отправить, чтобы они перестали использовать в своём коде "устаревшую" функцию
5. VZyryanov 10.08.26 11:38 Сейчас в теме
Кажется, ДлительныеОперации.ВыполнитьВФоне в режиме отладки выполняется не в фоне.
Для отправки сообщения требуется регистрация/авторизация

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