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