Почему в ЗУП не запускается фоновое задание?
1.
SlavaViktorov
10.08.26 10:39
Сейчас в теме
Стандартным способом пытаюсь получить данные журнала регистрации:
Процедура работает, только не в фоне.
Т.е. когда первый раз нажимаю на кнопку запуска процедуры, выводит ошибку что не сформирована
структура, в моем случае - "Коллекция пуста или не инициализирована!"
А при втором нажатии на кнопку процедура, после паузы, полностью отрабатывает все задуманное.
Таким образом я понимаю, что программа не настроена на выполнение фонового задания.
Использую программу 1С - версию для разработчиков.
Проверяю Журнал регистрации - там нет ошибок по данному событию.
Данные - Обновление Журнала Регистрации,
Событие - Фоновое задание. Успешное завершение.
В ЖурналРегистрации и вовсе нет ошибок по Фоновым заданиям.
Отладка - Подключение... - Предметы Отладки - Автоматическое подключение - выставлены флажки
для: Фоновые Задания и Клиентские и внешние соединения...
&НаСервере
Функция ПараметрыОтчета(ДатаНачала, ДатаОкончания)
ОтборЖурналаРегистрации = Новый Структура("ДатаНачала, ДатаОкончания");
ОтборЖурналаРегистрации.ДатаНачала = НачалоДня(ДатаНачала);
ОтборЖурналаРегистрации.ДатаОкончания = КонецДня(ДатаОкончания);
ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("ОтборЖурналаРегистрации", ОтборЖурналаРегистрации);
ПараметрыОтчета.Вставить("КоличествоПоказываемыхСобытий", 25000);
ПараметрыОтчета.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
ПараметрыОтчета.Вставить("МенеджерВладельца", Обработки.ЖурналРегистрации);
ПараметрыОтчета.Вставить("ДобавлятьДополнительныеКолонки", Ложь);
Возврат ПараметрыОтчета;
КонецФункции
&НаСервере
Процедура СобытияЖурнала(ДатаНачала, ДатаОкончания)
ПараметрыОтчета = ПараметрыОтчета(ДатаНачала, ДатаОкончания);
ИД = УникальныйИдентификатор;
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ИД);
ПараметрыВыполнения.ОжидатьЗавершение = 0;
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Обновление журнала регистрации'");
РезультатВыполнения = ДлительныеОперации.ВыполнитьВФоне("ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации", ПараметрыОтчета, ПараметрыВыполнения);
СтруктураЗаписейЖурнала = ПолучитьИЗВременногоХранилища(РезультатВыполнения.АдресРезультата);
ЧитатьВремХран(СтруктураЗаписейЖурнала);
КонецПроцедуры
&НаСервере
Процедура ЧитатьВремХран(СтруктураЗаписейЖурнала)
Если Не ЗначениеЗаполнено(СтруктураЗаписейЖурнала) Тогда
Сообщить("Коллекция пуста или не инициализирована!"); //выводит при первом запуске (в фоне)
Возврат;
КонецЕсли;
СобытияЖурнала = СтруктураЗаписейЖурнала.СобытияЖурнала;
Для Каждого Стр Из СобытияЖурнала Цикл
Если ЗначениеЗаполнено(Стр.Транзакция)
И СтрНайти(Стр.Метаданные, "Документ. Прием на работу") > 0
И СтрНайти(Стр.ПредставлениеСобытия, "Изменение") > 0
ИЛИ СтрНайти(Стр.Метаданные, "Справочник. Сотрудники") > 0
Тогда
Сообщить("Транзакция: " + Стр.Транзакция + " | ПредставлениеДанных:" + Стр.ПредставлениеДанных);
КонецЕсли;
КонецЦикла;
КонецПроцедуры ПоказатьПроцедура работает, только не в фоне.
Т.е. когда первый раз нажимаю на кнопку запуска процедуры, выводит ошибку что не сформирована
структура, в моем случае - "Коллекция пуста или не инициализирована!"
А при втором нажатии на кнопку процедура, после паузы, полностью отрабатывает все задуманное.
Таким образом я понимаю, что программа не настроена на выполнение фонового задания.
Использую программу 1С - версию для разработчиков.
Проверяю Журнал регистрации - там нет ошибок по данному событию.
Данные - Обновление Журнала Регистрации,
Событие - Фоновое задание. Успешное завершение.
В ЖурналРегистрации и вовсе нет ошибок по Фоновым заданиям.
Отладка - Подключение... - Предметы Отладки - Автоматическое подключение - выставлены флажки
для: Фоновые Задания и Клиентские и внешние соединения...
Прикрепленные файлы:
По теме из базы знаний
- ТОП проблем/задач у владельцев КОРП лицензий 1С на основе опыта РКЛ
- Нагрузочное тестирование на раз, два, три
- NativeAPI – это (не) страшно. Как и зачем мы используем websocket в EmplDocs
- Универсальный обмен данными XML 8.2 и 8.3 (дополненный)
- Перспективы AI в разработке 1С: как изменится индустрия в ближайшие годы
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Если ЗначениеЗаполнено(Стр.Транзакция)
И СтрНайти(Стр.Метаданные, "Документ. Прием на работу") > 0
И СтрНайти(Стр.ПредставлениеСобытия, "Изменение") > 0
ИЛИ СтрНайти(Стр.Метаданные, "Справочник. Сотрудники") > 0
Вот это всё делается через отбор. Если бы это сразу было в отборе, то выгрузка журнала происходила бы быстро и не пришлось бы ее кидать в фоновое задание и делать ограничение на 25000 записей, которое может обрезать нужные данные.
И СтрНайти(Стр.Метаданные, "Документ. Прием на работу") > 0
И СтрНайти(Стр.ПредставлениеСобытия, "Изменение") > 0
ИЛИ СтрНайти(Стр.Метаданные, "Справочник. Сотрудники") > 0
3.
SlavaViktorov
10.08.26 11:16
Сейчас в теме
(2) а можно поподробнее?
и желательно не вопросами а ответами
и желательно не вопросами а ответами
(3) Вы выбрасываете выполнение своей функции в отдельные поток и не дожидаясь ее завершения пытаетесь использовать результат.
А вопросы заданы для того, чтобы вы задумались при попытке на них ответить, а не занимались тупой копипастой.
А вопросы заданы для того, чтобы вы задумались при попытке на них ответить, а не занимались тупой копипастой.
(6) Не хотите сами разбираться - ловите, что вы получаете:
- первый раз запустили - получили "шишь", т.к. в первый момент чтения из хранилища там еще ничего нет (функция не отработала!!!)
- второй раз запустили - получили результат ПЕРВОГО выполнения, а второй еще не выполнился
- третий раз запустили- получили результат ВТОРОГО выполнения и т.д.
Сейчас я дал вам рыбу вместо удочки, так что вы опять и опять будете наступать на те же грабли.
- первый раз запустили - получили "шишь", т.к. в первый момент чтения из хранилища там еще ничего нет (функция не отработала!!!)
- второй раз запустили - получили результат ПЕРВОГО выполнения, а второй еще не выполнился
- третий раз запустили- получили результат ВТОРОГО выполнения и т.д.
Сейчас я дал вам рыбу вместо удочки, так что вы опять и опять будете наступать на те же грабли.
(6) читаем справку к функции ВыполнитьВФоне
А ещё там даже примеры использования готовые есть
// Запустить выполнение процедуры в фоновом задании, если это возможно.
// Не следует использовать эту функцию, если необходимо безусловно запускать фоновое задание.
// Рекомендуется применять совместно с функцией ДлительныеОперацииКлиент.ОжидатьЗавершение,
// если невозможно, тогда для проверки завершения операции использовать функцию ЗаданиеВыполнено.
А ещё там даже примеры использования готовые есть
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот