Свойства фоновых заданий. Возвращает таблицу свойств фоновых заданий.
// Возвращает таблицу свойств фоновых заданий.
// Структуру таблицы смотри в функции ПустаяТаблицаСвойствФоновыхЗаданий().
//
// Параметры:
// Отбор - Структура - допустимые поля:
// Идентификатор, Ключ, Состояние, Начало, Конец,
// Наименование, ИмяМетода, РегламентноеЗадание.
//
// Возвращаемое значение:
// ТаблицаЗначений - возвращается таблица после отбора.
//
Функция СвойстваФоновыхЗаданий(Отбор = Неопределено) Экспорт
ВызватьИсключениеЕслиНетПраваАдминистрирования();
УстановитьПривилегированныйРежим(Истина);
Таблица = НовыеСвойстваФоновыхЗаданий();
Если ЗначениеЗаполнено(Отбор) И Отбор.Свойство("ПолучитьПоследнееФоновоеЗаданиеРегламентногоЗадания") Тогда
Отбор.Удалить("ПолучитьПоследнееФоновоеЗаданиеРегламентногоЗадания");
ПолучитьПоследнее = Истина;
Иначе
ПолучитьПоследнее = Ложь;
КонецЕсли;
РегламентноеЗадание = Неопределено;
// Добавление истории фоновых заданий, полученных с сервера.
Если ЗначениеЗаполнено(Отбор) И Отбор.Свойство("ИдентификаторРегламентногоЗадания") Тогда
Если Отбор.ИдентификаторРегламентногоЗадания <> "" Тогда
РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(
Новый УникальныйИдентификатор(Отбор.ИдентификаторРегламентногоЗадания));
ТекущийОтбор = Новый Структура("Ключ", Отбор.ИдентификаторРегламентногоЗадания);
ФоновыеЗаданияЗапущенныеВручную = ФоновыеЗадания.ПолучитьФоновыеЗадания(ТекущийОтбор);
Если РегламентноеЗадание <> Неопределено Тогда
ПоследнееФоновоеЗадание = РегламентноеЗадание.ПоследнееЗадание;
КонецЕсли;
Если НЕ ПолучитьПоследнее ИЛИ ПоследнееФоновоеЗадание = Неопределено Тогда
ТекущийОтбор = Новый Структура("РегламентноеЗадание", РегламентноеЗадание);
АвтоматическиеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ТекущийОтбор);
КонецЕсли;
Если ПолучитьПоследнее Тогда
Если ПоследнееФоновоеЗадание = Неопределено Тогда
ПоследнееФоновоеЗадание = ПоследнееФоновоеЗаданиеВМассиве(АвтоматическиеФоновыеЗадания);
КонецЕсли;
ПоследнееФоновоеЗадание = ПоследнееФоновоеЗаданиеВМассиве(
ФоновыеЗаданияЗапущенныеВручную, ПоследнееФоновоеЗадание);
Если ПоследнееФоновоеЗадание <> Неопределено Тогда
МассивФоновыхЗаданий = Новый Массив;
МассивФоновыхЗаданий.Добавить(ПоследнееФоновоеЗадание);
ДобавитьСвойстваФоновыхЗаданий(МассивФоновыхЗаданий, Таблица);
КонецЕсли;
Возврат Таблица;
КонецЕсли;
ДобавитьСвойстваФоновыхЗаданий(ФоновыеЗаданияЗапущенныеВручную, Таблица);
ДобавитьСвойстваФоновыхЗаданий(АвтоматическиеФоновыеЗадания, Таблица);
Иначе
МассивФоновыхЗаданий = Новый Массив;
ВсеИдентификаторыРегламентныхЗаданий = Новый Соответствие;
Для каждого ТекущееЗадание Из РегламентныеЗадания.ПолучитьРегламентныеЗадания() Цикл
ВсеИдентификаторыРегламентныхЗаданий.Вставить(
Строка(ТекущееЗадание.УникальныйИдентификатор), Истина);
КонецЦикла;
ВсеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания();
Для каждого ТекущееЗадание Из ВсеФоновыеЗадания Цикл
Если ТекущееЗадание.РегламентноеЗадание = Неопределено
И ВсеИдентификаторыРегламентныхЗаданий[ТекущееЗадание.Ключ] = Неопределено Тогда
МассивФоновыхЗаданий.Добавить(ТекущееЗадание);
КонецЕсли;
КонецЦикла;
ДобавитьСвойстваФоновыхЗаданий(МассивФоновыхЗаданий, Таблица);
КонецЕсли;
Иначе
Если НЕ ЗначениеЗаполнено(Отбор) Тогда
МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания();
Иначе
Если Отбор.Свойство("Идентификатор") Тогда
Отбор.Вставить("УникальныйИдентификатор", Новый УникальныйИдентификатор(Отбор.Идентификатор));
Отбор.Удалить("Идентификатор");
КонецЕсли;
МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
Если Отбор.Свойство("УникальныйИдентификатор") Тогда
Отбор.Вставить("Идентификатор", Строка(Отбор.УникальныйИдентификатор));
Отбор.Удалить("УникальныйИдентификатор");
КонецЕсли;
КонецЕсли;
ДобавитьСвойстваФоновыхЗаданий(МассивФоновыхЗаданий, Таблица);
КонецЕсли;
Если ЗначениеЗаполнено(Отбор) И Отбор.Свойство("ИдентификаторРегламентногоЗадания") Тогда
РегламентныеЗаданияДляОбработки = Новый Массив;
Если Отбор.ИдентификаторРегламентногоЗадания <> "" Тогда
Если РегламентноеЗадание = Неопределено Тогда
РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(
Новый УникальныйИдентификатор(Отбор.ИдентификаторРегламентногоЗадания));
КонецЕсли;
Если РегламентноеЗадание <> Неопределено Тогда
РегламентныеЗаданияДляОбработки.Добавить(РегламентноеЗадание);
КонецЕсли;
КонецЕсли;
Иначе
РегламентныеЗаданияДляОбработки = РегламентныеЗадания.ПолучитьРегламентныеЗадания();
КонецЕсли;
Таблица.Сортировать("Начало Убыв, Конец Убыв");
// Отбор фоновых заданий.
Если ЗначениеЗаполнено(Отбор) Тогда
Начало = Неопределено;
Конец = Неопределено;
Состояние = Неопределено;
Если Отбор.Свойство("Начало") Тогда
Начало = ?(ЗначениеЗаполнено(Отбор.Начало), Отбор.Начало, Неопределено);
Отбор.Удалить("Начало");
КонецЕсли;
Если Отбор.Свойство("Конец") Тогда
Конец = ?(ЗначениеЗаполнено(Отбор.Конец), Отбор.Конец, Неопределено);
Отбор.Удалить("Конец");
КонецЕсли;
Если Отбор.Свойство("Состояние") Тогда
Если ТипЗнч(Отбор.Состояние) = Тип("Массив") Тогда
Состояние = Отбор.Состояние;
Отбор.Удалить("Состояние");
КонецЕсли;
КонецЕсли;
Если Отбор.Количество() <> 0 Тогда
Строки = Таблица.НайтиСтроки(Отбор);
Иначе
Строки = Таблица;
КонецЕсли;
// Выполнение дополнительного отбора по периоду и состоянию (если отбор определен).
НомерЭлемента = Строки.Количество() - 1;
Пока НомерЭлемента >= 0 Цикл
Если Начало <> Неопределено И Начало > Строки[НомерЭлемента].Начало
Или Конец <> Неопределено И Конец < ?(ЗначениеЗаполнено(Строки[НомерЭлемента].Конец), Строки[НомерЭлемента].Конец, ТекущаяДатаСеанса())
Или Состояние <> Неопределено И Состояние.Найти(Строки[НомерЭлемента].Состояние) = Неопределено Тогда
Строки.Удалить(НомерЭлемента);
КонецЕсли;
НомерЭлемента = НомерЭлемента - 1;
КонецЦикла;
// Удаление лишних строк из таблицы.
Если ТипЗнч(Строки) = Тип("Массив") Тогда
НомерСтроки = Таблица.Количество() - 1;
Пока НомерСтроки >= 0 Цикл
Если Строки.Найти(Таблица[НомерСтроки]) = Неопределено Тогда
Таблица.Удалить(Таблица[НомерСтроки]);
КонецЕсли;
НомерСтроки = НомерСтроки - 1;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат Таблица;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ЗаполнитьТаблицуСвойствФоновыхЗаданийВФоне (БСП)
ПолучитьСвойстваФоновогоЗадания (БСП)
ФоновоеЗаданиеЗагрузкиКлассификатораАдресов (БСП)
ФоновоеЗаданиеОчисткиКлассификатораАдресов (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)