RDT1C/DataProcessors/ирАнализЖурналаРегистрации/Ext/ObjectModule.bsl
Администратор dfd9d66431 .
2021-02-22 00:00:39 +03:00

534 lines
38 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//ирПортативный Перем ирПортативный Экспорт;
//ирПортативный Перем ирОбщий Экспорт;
//ирПортативный Перем ирСервер Экспорт;
//ирПортативный Перем ирКэш Экспорт;
//ирПортативный Перем ирПривилегированный Экспорт;
Функция ПолучитьСписокЗначенийЭлементаОтбора(ПолеОтбора) Экспорт
Если ПолеОтбора = "Уровень" Тогда
ВозможныеЗначения = Новый СписокЗначений;
ВозможныеЗначения.Добавить(УровеньЖурналаРегистрации.Ошибка);
ВозможныеЗначения.Добавить(УровеньЖурналаРегистрации.Предупреждение);
ВозможныеЗначения.Добавить(УровеньЖурналаРегистрации.Информация);
ВозможныеЗначения.Добавить(УровеньЖурналаРегистрации.Примечание);
ИначеЕсли ПолеОтбора = "СтатусТранзакции" Тогда
ВозможныеЗначения = Новый СписокЗначений;
ВозможныеЗначения.Добавить(СтатусТранзакцииЗаписиЖурналаРегистрации.Зафиксирована);
ВозможныеЗначения.Добавить(СтатусТранзакцииЗаписиЖурналаРегистрации.Отменена);
ВозможныеЗначения.Добавить(СтатусТранзакцииЗаписиЖурналаРегистрации.НеЗавершена);
ВозможныеЗначения.Добавить(СтатусТранзакцииЗаписиЖурналаРегистрации.НетТранзакции);
ИначеЕсли Ложь
Или ПолеОтбора = "Пользователь"
Или ПолеОтбора = "Компьютер"
Или ПолеОтбора = "ИмяПриложения"
Или ПолеОтбора = "Событие"
Или ПолеОтбора = "Метаданные"
Или ПолеОтбора = "РабочийСервер"
Или ПолеОтбора = "ОсновнойIPПорт"
Или ПолеОтбора = "ВспомогательныйIPПорт"
Или ПолеОтбора = "РазделениеДанныхСеанса"
Тогда
СтруктураЗначенийОтбора = ПолучитьЗначенияОтбораЖурналаРегистрации(ПолеОтбора, ИмяФайла);
ВозможныеЗначения = СтруктураЗначенийОтбора[ирОбщий.ПеревестиСтроку(ПолеОтбора)];
Иначе
ВозможныеЗначения = Неопределено;
КонецЕсли;
Если ВозможныеЗначения <> Неопределено Тогда
Если ТипЗнч(ВозможныеЗначения) = Тип("СписокЗначений") Тогда
СписокВыбора = ВозможныеЗначения;
ИначеЕсли ТипЗнч(ВозможныеЗначения) = Тип("Массив") Тогда
СписокВыбора = Новый СписокЗначений;
СписокВыбора.ЗагрузитьЗначения(ВозможныеЗначения);
СписокВыбора.СортироватьПоЗначению();
ИначеЕсли ТипЗнч(ВозможныеЗначения) = Тип("Соответствие") Тогда
СписокВыбора = Новый СписокЗначений;
Для Каждого КлючИЗначение Из ВозможныеЗначения Цикл
СписокВыбора.Добавить(КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
СписокВыбора.СортироватьПоПредставлению();
КонецЕсли;
КонецЕсли;
Возврат СписокВыбора;
КонецФункции
Функция УстановитьОписаниеТиповЗначенияОтбора(СтрокаОтбора) Экспорт
ПолеОтбора = СтрокаОтбора.Поле;
МетаРеквизит = Метаданные().ТабличныеЧасти.ТаблицаЖурнала.Реквизиты[ПолеОтбора];
БазовоеОписаниеТипов = МетаРеквизит.Тип;
Если Ложь
Или ПолеОтбора = "Уровень"
Или ПолеОтбора = "СтатусТранзакции"
Или ПолеОтбора = "Пользователь"
Или ПолеОтбора = "Компьютер"
Или ПолеОтбора = "ИмяПриложения"
Или ПолеОтбора = "Событие"
Или ПолеОтбора = "Метаданные"
Или ПолеОтбора = "РабочийСервер"
Или ПолеОтбора = "ОсновнойIPПорт"
Или ПолеОтбора = "ВспомогательныйIPПорт"
Или ПолеОтбора = "РазделениеДанныхСеанса"
Тогда
ОписаниеТипов = Новый ОписаниеТипов("СписокЗначений");
ИначеЕсли ПолеОтбора = "Сеанс" Тогда
ОписаниеТипов = Новый ОписаниеТипов(БазовоеОписаниеТипов, "СписокЗначений");
Иначе
ОписаниеТипов = БазовоеОписаниеТипов;
КонецЕсли;
СтрокаОтбора.ОписаниеТипов = ОписаниеТипов;
СтрокаОтбора.Значение = ОписаниеТипов.ПривестиЗначение(СтрокаОтбора.Значение);
СтрокаОтбора.Представление = МетаРеквизит.Представление();
Если МетаРеквизит.Имя = "Данные" Тогда
//СтрокаОтбора.Представление = "Данные (медленно!)";
КонецЕсли;
КонецФункции
Функция ДобавитьЭлементОтбора(Отбор, ПолеОтбора = "Данные", Знач ЗначениеОтбора = Неопределено, ПредставлениеЗначения = Неопределено,
Использование = Неопределено, ОставлятьСтарыеПометки = Истина) Экспорт
Если ПолеОтбора = "Уровень" И ТипЗнч(ЗначениеОтбора) = Тип("Строка") Тогда
ЗначениеОтбора = УровеньЖурналаРегистрации[ЗначениеОтбора];
КонецЕсли;
ДоступныеЗначенияЭлементаОтбора = ПолучитьСписокЗначенийЭлементаОтбора(ПолеОтбора);
СтрокаОтбора = Отбор.Найти(ПолеОтбора);
Если СтрокаОтбора = Неопределено Тогда
СтрокаОтбора = Отбор.Добавить();
СтрокаОтбора.Поле = ПолеОтбора;
СтрокаОтбора.Значение = ДоступныеЗначенияЭлементаОтбора;
КонецЕсли;
УстановитьОписаниеТиповЗначенияОтбора(СтрокаОтбора);
Если Использование <> Неопределено Тогда
ирОбщий.ПрисвоитьЕслиНеРавноЛкс(СтрокаОтбора.Использование, Использование);
КонецЕсли;
Если ТипЗнч(СтрокаОтбора.Значение) = Тип("СписокЗначений") Тогда
СписокВыбора = СтрокаОтбора.Значение;
Если Не ОставлятьСтарыеПометки Тогда
СписокВыбора.ЗаполнитьПометки(Ложь);
КонецЕсли;
Если ТипЗнч(ЗначениеОтбора) <> Тип("СписокЗначений") Тогда
лПустышка = ЗначениеОтбора;
ЗначениеОтбора = Новый СписокЗначений;
ЗначениеОтбора.Добавить(лПустышка, , Истина);
КонецЕсли;
Для Каждого ЭлементСписка Из СписокВыбора Цикл
ЭлементСтарогоСписка = ЗначениеОтбора.НайтиПоЗначению(ЭлементСписка.Значение);
Если ЭлементСтарогоСписка <> Неопределено Тогда
ЭлементСписка.Пометка = ЭлементСтарогоСписка.Пометка;
КонецЕсли;
КонецЦикла;
Для Каждого ДоступноеЗначение Из ДоступныеЗначенияЭлементаОтбора Цикл
ЭлементСписка = СписокВыбора.НайтиПоЗначению(ДоступноеЗначение.Значение);
Если ЭлементСписка = Неопределено Тогда
ЭлементСписка = СписокВыбора.Добавить();
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭлементСписка, ДоступноеЗначение,, "Пометка");
КонецЦикла;
СписокВыбора.СортироватьПоПредставлению();
Иначе
Если ЗначениеОтбора = Неопределено Тогда
ЗначениеОтбора = СтрокаОтбора.Значение;
КонецЕсли;
СтрокаОтбора.Значение = СтрокаОтбора.ОписаниеТипов.ПривестиЗначение(ЗначениеОтбора);
КонецЕсли;
Возврат СтрокаОтбора;
КонецФункции
Процедура ЗаполнитьОтборВыгрузки() Экспорт
СписокУровнейОтбора = Новый СписокЗначений;
СписокУровнейОтбора.Добавить(УровеньЖурналаРегистрации.Ошибка,, Истина);
СписокУровнейОтбора.Добавить(УровеньЖурналаРегистрации.Предупреждение,, Истина);
ДобавитьЭлементОтбора(Отбор, "Уровень", СписокУровнейОтбора);
ДобавитьЭлементОтбора(Отбор, "Комментарий");
ДобавитьЭлементОтбора(Отбор, "Пользователь");
ДобавитьЭлементОтбора(Отбор, "Событие");
ДобавитьЭлементОтбора(Отбор, "СтатусТранзакции");
ДобавитьЭлементОтбора(Отбор, "ИмяПриложения");
ДобавитьЭлементОтбора(Отбор, "Данные");
ДобавитьЭлементОтбора(Отбор, "Метаданные");
КонецПроцедуры
Функция ПолучитьДанные(НачалоПериода = Неопределено, КонецПериода = Неопределено, СтруктураОтбора = Неопределено, МаксимальныйРазмерВыгрузки = Неопределено) Экспорт
//ЗаполнитьОтборВыгрузки();
Если НачалоПериода <> Неопределено Тогда
ЭтотОбъект.НачалоПериода = НачалоПериода;
Иначе
ЭтотОбъект.НачалоПериода = НачалоДня(ТекущаяДата());
КонецЕсли;
Если КонецПериода <> Неопределено Тогда
ЭтотОбъект.КонецПериода = КонецПериода;
Иначе
ЭтотОбъект.КонецПериода = Неопределено;
КонецЕсли;
Если МаксимальныйРазмерВыгрузки <> Неопределено Тогда
ЭтотОбъект.МаксимальныйРазмерВыгрузки = МаксимальныйРазмерВыгрузки;
КонецЕсли;
Если СтруктураОтбора <> Неопределено Тогда
Для Каждого КлючИЗначение Из СтруктураОтбора Цикл
ДобавитьЭлементОтбора(ЭтотОбъект.Отбор, КлючИЗначение.Ключ, КлючИЗначение.Значение,, Истина);
КонецЦикла;
КонецЕсли;
ЗагрузитьДанныеЖурнала();
Возврат ТаблицаЖурнала;
КонецФункции
Функция ЗагрузитьДанныеЖурнала(ЭтаФорма = Неопределено, Кнопка = Неопределено, ОбработчикЗавершения = Неопределено) Экспорт
Если Ложь
Или Кнопка = Неопределено
Или Кнопка.Картинка <> ирКэш.КартинкаПоИмениЛкс("ирОстановить")
Тогда
Фильтр = ПолучитьФильтрВыгрузкиЖурнала();
Если Фильтр = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
#Если Сервер И Не Сервер Тогда
Фильтр = Новый Структура;
#КонецЕсли
КонецЕсли;
МоментНачала = ТекущаяДата();
ИспользованныйВариант = ОписаниеВариантаОтбора(Истина);
ПредставлениеОтбора = ПредставлениеВариантаОтбора(ИспользованныйВариант);
РазрешитьАсинхронно = Не ЗначениеЗаполнено(ИмяФайла);
Результат = ирОбщий.АнализЖурналаРегистрации_ВыгрузитьЛкс(ОбщиеПараметрыОбработки(), Фильтр, ПредставлениеОтбора, МоментНачала,,
ЭтаФорма, Кнопка, ОбработчикЗавершения, РазрешитьАсинхронно);
Если ЭтаФорма = Неопределено Тогда
ЭтотОбъект.ТаблицаЗначенийЖурнала = Результат.ТаблицаЗначенийЖурнала;
ТаблицаЖурнала.Загрузить(Результат.ТаблицаЗначенийЖурнала);
КонецЕсли;
КонецФункции
Функция ОбщиеПараметрыОбработки()
Результат = Новый Структура;
Для Каждого МетаРеквизит Из Метаданные().Реквизиты Цикл
Результат.Вставить(МетаРеквизит.Имя, ЭтотОбъект[МетаРеквизит.Имя]);
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ВыгрузитьЖурналРегистрацииЛкс(Фильтр) Экспорт
Если Фильтр.Свойство("Данные") Тогда
// Антибаг платформы 8.3.8-14 https://partners.v8.1c.ru/forum/t/1807905/m/1807905
МаксимальныйРазмерВыгрузкиТекущий = 0;
Иначе
МаксимальныйРазмерВыгрузкиТекущий = МаксимальныйРазмерВыгрузки;
КонецЕсли;
Если АнализироватьТранзакцииСУчастиемОбъекта Тогда
#Если Клиент Тогда
Состояние("Анализ транзакций журнала...");
#КонецЕсли
ЭтотОбъект.ТаблицаЗначенийЖурнала = Новый ТаблицаЗначений;
ТаблицаТранзакций = Новый ТаблицаЗначений;
ВыгрузитьЖурналРегистрации(ТаблицаТранзакций, Фильтр,, ИмяФайла, МаксимальныйРазмерВыгрузкиТекущий);
ТаблицаТранзакций.Свернуть("Транзакция");
ТаблицаТранзакций.Сортировать("Транзакция");
Транзакции = ТаблицаТранзакций.ВыгрузитьКолонку("Транзакция");
Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(Транзакции.Количество(), "Выгрузка журнала по транзакциям");
ФильтрТранзакции = ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(Фильтр);
Для Каждого Транзакция Из Транзакции Цикл
ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
//ФильтрТранзакции.Вставить("Транзакция", ирОбщий.СтрокаМеждуМаркерамиЛкс(Транзакция, "(",")"));
ФильтрТранзакции.Вставить("Транзакция", Транзакция);
Если Транзакция <> "" Тогда
ФильтрТранзакции.Удалить("Данные");
КонецЕсли;
ТаблицаТранзакции = Новый ТаблицаЗначений;
Если МаксимальныйРазмерВыгрузкиТекущий > 0 Тогда
МаксимальныйРазмерВыгрузкиТекущий = МаксимальныйРазмерВыгрузкиТекущий - ТаблицаЗначенийЖурнала.Количество();
КонецЕсли;
ВыгрузитьЖурналРегистрации(ТаблицаТранзакции, ФильтрТранзакции,, ИмяФайла, МаксимальныйРазмерВыгрузкиТекущий);
Если Транзакция = "" Тогда
ТаблицаТранзакции = ТаблицаТранзакции.Скопировать(Новый Структура("Транзакция", ""));
КонецЕсли;
ТаблицаТранзакции.Колонки.Добавить("ПорядокСтроки", Новый ОписаниеТипов("Число"));
Для Счетчик = 1 По ТаблицаТранзакции.Количество() Цикл
ТаблицаТранзакции[Счетчик - 1].ПорядокСтроки = ТаблицаЗначенийЖурнала.Количество() + Счетчик;
КонецЦикла;
Если ТаблицаЗначенийЖурнала.Колонки.Количество() = 0 Тогда
ТаблицаЗначенийЖурнала = ТаблицаТранзакции;
ТаблицаЗначенийЖурнала.Колонки.Добавить("ДлительностьТранзакции", Новый ОписаниеТипов("Число"));
Иначе
СвойстваТранзакции = Новый Структура("ДлительностьТранзакции", ТаблицаТранзакции[ТаблицаТранзакции.Количество() - 1].Дата - ТаблицаТранзакции[0].Дата);
ирОбщий.ЗагрузитьВТаблицуЗначенийЛкс(ТаблицаТранзакции, ТаблицаЗначенийЖурнала, СвойстваТранзакции);
КонецЕсли;
Если МаксимальныйРазмерВыгрузкиТекущий > 0 И ТаблицаЗначенийЖурнала.Количество() >= МаксимальныйРазмерВыгрузкиТекущий Тогда
Прервать;
КонецЕсли;
КонецЦикла;
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
Иначе
ТаблицаЗначенийЖурнала = Новый ТаблицаЗначений;
ирОбщий.СостояниеЛкс("Выгрузка журнала регистрации");
ВыгрузитьЖурналРегистрации(ТаблицаЗначенийЖурнала, Фильтр,, ИмяФайла, МаксимальныйРазмерВыгрузкиТекущий);
ирОбщий.СостояниеЛкс("");
КонецЕсли;
#Если Сервер И Не Сервер Тогда
ТаблицаЗначенийЖурнала = Новый ТаблицаЗначений;
#КонецЕсли
Если ТаблицаЗначенийЖурнала.Колонки.Найти("ПорядокСтроки") = Неопределено Тогда
ТаблицаЗначенийЖурнала.Колонки.Добавить("ПорядокСтроки", Новый ОписаниеТипов("Число"));
Для Счетчик = 1 По ТаблицаЗначенийЖурнала.Количество() Цикл
ТаблицаЗначенийЖурнала[Счетчик - 1].ПорядокСтроки = Счетчик;
КонецЦикла;
КонецЕсли;
ТаблицаЗначенийЖурнала.Индексы.Добавить("ПорядокСтроки");
ТаблицаЗначенийЖурнала.Сортировать("ПорядокСтроки");
ирОбщий.ПеревестиКолонкиВыгрузитьЖурналРегистрацииЛкс(ТаблицаЗначенийЖурнала);
Возврат ТаблицаЗначенийЖурнала;
КонецФункции
Функция ОписаниеВариантаОтбора(Полное = Ложь) Экспорт
Результат = Новый Структура;
Если Полное Или ЗначениеЗаполнено(КонецПериода) Тогда
Результат.Вставить("НачалоПериода", НачалоПериода);
Результат.Вставить("КонецПериода", КонецПериода);
КонецЕсли;
Результат.Вставить("МаксимальныйРазмерВыгрузки", МаксимальныйРазмерВыгрузки);
Результат.Вставить("Отбор", Отбор);
Возврат Результат;
КонецФункции
Функция ПредставлениеВариантаОтбора(Знач СохраняемыйВариант) Экспорт
ИмяВарианта = "";
Если СохраняемыйВариант.Свойство("НачалоПериода") И ЗначениеЗаполнено(СохраняемыйВариант.НачалоПериода) Тогда
ИмяВарианта = ИмяВарианта + " С " + СохраняемыйВариант.НачалоПериода;
КонецЕсли;
Если СохраняемыйВариант.Свойство("КонецПериода") И ЗначениеЗаполнено(СохраняемыйВариант.КонецПериода) Тогда
ИмяВарианта = ИмяВарианта + " По " + СохраняемыйВариант.КонецПериода;
КонецЕсли;
Если ЗначениеЗаполнено(СохраняемыйВариант.МаксимальныйРазмерВыгрузки) Тогда
ИмяВарианта = ИмяВарианта + "; Количество <= " + СохраняемыйВариант.МаксимальныйРазмерВыгрузки;
КонецЕсли;
Для Каждого СтрокаОтбора Из СохраняемыйВариант.Отбор Цикл
ИспользованиеСтрокиОтбора = ИспользованиеСтрокиОтбора(СтрокаОтбора);
Если ТипЗнч(СтрокаОтбора.Значение) = Тип("СписокЗначений") И СтрокаОтбора.Значение.ТипЗначения.Типы().Количество() = 0 Тогда
ПредставлениеСтрокиОтбора = ПредставлениеСтрокиОтбора(СтрокаОтбора,, 3);
ИспользованиеСтрокиОтбора = ИспользованиеСтрокиОтбора И ЗначениеЗаполнено(ПредставлениеСтрокиОтбора);
Иначе
ПредставлениеСтрокиОтбора = "" + СтрокаОтбора.Значение;
КонецЕсли;
Если ИспользованиеСтрокиОтбора Тогда
ИмяВарианта = ИмяВарианта + "; " + СтрокаОтбора.Представление + " = " + ПредставлениеСтрокиОтбора;
КонецЕсли;
КонецЦикла;
Если Лев(ИмяВарианта, 1) = ";" Тогда
ИмяВарианта = Сред(ИмяВарианта, 3);
КонецЕсли;
Если Не ЗначениеЗаполнено(ИмяВарианта) Тогда
ИмяВарианта = "Нет";
КонецЕсли;
Возврат ИмяВарианта;
КонецФункции
Функция ПредставлениеСтрокиОтбора(Знач ДанныеСтроки, выхКоличествоПомеченных = 0, МаксЭлементов = 20) Экспорт
Результат = "";
Если ДанныеСтроки.Значение <> Неопределено Тогда
выхКоличествоПомеченных = 0;
Для Каждого ЭлементСписка Из ДанныеСтроки.Значение Цикл
Если ЭлементСписка.Пометка Тогда
выхКоличествоПомеченных = выхКоличествоПомеченных + 1;
Если выхКоличествоПомеченных < МаксЭлементов Тогда
Если Результат <> "" Тогда
Результат = Результат + "; ";
КонецЕсли;
ПредставлениеЭлемента = ЭлементСписка.Представление;
Если Не ЗначениеЗаполнено(ПредставлениеЭлемента) Тогда
ПредставлениеЭлемента = ЭлементСписка.Значение;
КонецЕсли;
Результат = Результат + ПредставлениеЭлемента;
ИначеЕсли выхКоличествоПомеченных = МаксЭлементов Тогда
Результат = Результат + "...";
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ИспользованиеСтрокиОтбора(Знач СтрокаОтбора) Экспорт
ИспользованиеСтрокиОтбора = СтрокаОтбора.Использование;
Если ИспользованиеСтрокиОтбора Тогда
Если СтрокаОтбора.Поле = "Данные" Тогда
ИспользованиеСтрокиОтбора = СтрокаОтбора.Значение <> Неопределено;
ИначеЕсли ТипЗнч(СтрокаОтбора.Значение) = Тип("Строка") Тогда
ИспользованиеСтрокиОтбора = ЗначениеЗаполнено(СтрокаОтбора.Значение);
КонецЕсли;
КонецЕсли;
Возврат ИспользованиеСтрокиОтбора;
КонецФункции
Функция ПолучитьФильтрВыгрузкиЖурнала()
Фильтр = Новый Структура;
Если ЗначениеЗаполнено(НачалоПериода) Тогда
Фильтр.Вставить("ДатаНачала", НачалоПериода);
КонецЕсли;
Если ЗначениеЗаполнено(КонецПериода) Тогда
Фильтр.Вставить("ДатаОкончания", КонецПериода);
КонецЕсли;
Если ЗначениеЗаполнено(НачалоПериода) И ЗначениеЗаполнено(КонецПериода) И НачалоПериода > КонецПериода Тогда
ирОбщий.СообщитьЛкс("Конец периода меньше начала периода", СтатусСообщения.Важное);
Возврат Неопределено;
КонецЕсли;
Для Каждого СтрокаОтбора Из Отбор Цикл
ЗначениеОтбора = СтрокаОтбора.Значение;
Если Истина
И ЗначениеОтбора = Неопределено
И СтрокаОтбора.Поле <> "Данные"
Тогда
СтрокаОтбора.Использование = Ложь;
КонецЕсли;
Если Не СтрокаОтбора.Использование Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(ЗначениеОтбора) = Тип("СписокЗначений") Тогда
Если ЗначениеОтбора.ТипЗначения.Типы().Количество() = 0 Тогда
СписокЗначенийЛ = ЗначениеОтбора;
ЗначениеОтбора = Новый Массив();
Для Каждого ЭлементСписка Из СписокЗначенийЛ Цикл
Если ЭлементСписка.Пометка Тогда
Если СтрокаОтбора.Поле = "Пользователь" Тогда
ЗначениеЭлемента = ЭлементСписка.Представление;
Иначе
ЗначениеЭлемента = ЭлементСписка.Значение;
КонецЕсли;
ЗначениеОтбора.Добавить(ЗначениеЭлемента);
КонецЕсли;
КонецЦикла;
Иначе
ЗначениеОтбора = ЗначениеОтбора.ВыгрузитьЗначения();
КонецЕсли;
КонецЕсли;
Фильтр.Вставить(СтрокаОтбора.Поле, ЗначениеОтбора);
КонецЦикла;
Возврат Фильтр;
КонецФункции
#Если Клиент Тогда
Функция ВыбратьОбъектМетаданных(СтрокаТаблицыЗначений) Экспорт
СвойствоМетаданные = СтрокаТаблицыЗначений.Метаданные;
СвойствоДанные = СтрокаТаблицыЗначений.Данные;
Если ТипЗнч(СвойствоМетаданные) = Тип("Массив") Тогда
Если СвойствоМетаданные.Количество() = 0 Тогда
Возврат Неопределено;
КонецЕсли;
Если СвойствоМетаданные.Количество() = 1 Тогда
ПолноеИмяМД = СвойствоМетаданные[0];
Иначе
СписокВыбора = Новый СписокЗначений;
СписокВыбора.ЗагрузитьЗначения(СвойствоМетаданные);
СписокВыбора.СортироватьПоЗначению();
РезультатВыбора = СписокВыбора.ВыбратьЭлемент("Выберите объект метаданных");
Если РезультатВыбора = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ПолноеИмяМД = РезультатВыбора.Значение;
КонецЕсли;
Иначе
ПолноеИмяМД = СвойствоМетаданные;
КонецЕсли;
Возврат ПолноеИмяМД;
КонецФункции
Функция ОткрытьСПараметром(ПолеОтбора = "Данные", ЗначениеОтбора, ПредставлениеЗначения = Неопределено) Экспорт
Форма = ПолучитьФорму(,, ЗначениеОтбора);
Форма.Открыть();
Форма.Отбор.ЗаполнитьЗначения(Ложь, "Использование");
Форма.НачалоПериода = НачалоДня(ТекущаяДата());
Форма.КонецПериода = Неопределено;
ДобавитьЭлементОтбора(Форма.Отбор, ПолеОтбора, ЗначениеОтбора, ПредставлениеЗначения, Истина);
Ответ = Вопрос("Сразу выполнить выгрузку с текущим отбором?", РежимДиалогаВопрос.ОКОтмена);
Если Ответ = КодВозвратаДиалога.ОК Тогда
Форма.ОбновитьТаблицуЖурнала();
КонецЕсли;
Возврат Форма;
КонецФункции
Функция ОткрытьСОтбором(НачалоПериода = Неопределено, КонецПериода = Неопределено, СтруктураОтбора = Неопределено, МаксимальныйРазмерВыгрузки = Неопределено) Экспорт
Форма = ПолучитьФорму(,,);
Форма.Открыть();
Форма.Отбор.ЗаполнитьЗначения(Ложь, "Использование");
Если НачалоПериода <> Неопределено Тогда
Форма.НачалоПериода = НачалоПериода;
Иначе
Форма.НачалоПериода = НачалоДня(ТекущаяДата());
КонецЕсли;
Если КонецПериода <> Неопределено Тогда
Форма.КонецПериода = КонецПериода;
Иначе
Форма.КонецПериода = Неопределено;
КонецЕсли;
Если МаксимальныйРазмерВыгрузки <> Неопределено Тогда
Форма.МаксимальныйРазмерВыгрузки = МаксимальныйРазмерВыгрузки;
КонецЕсли;
Если СтруктураОтбора <> Неопределено Тогда
Для Каждого КлючИЗначение Из СтруктураОтбора Цикл
ЗначениеОтбора = КлючИЗначение.Значение;
Если КлючИЗначение.Ключ = "Пользователь" И ТипЗнч(ЗначениеОтбора) = Тип("Строка") Тогда
ПараметрПользователь = ПользователиИнформационнойБазы.НайтиПоИмени(ЗначениеОтбора);
Если ПараметрПользователь <> Неопределено Тогда
ЗначениеОтбора = ПараметрПользователь.УникальныйИдентификатор;
КонецЕсли;
КонецЕсли;
ДобавитьЭлементОтбора(Форма.Отбор, КлючИЗначение.Ключ, ЗначениеОтбора,, Истина);
КонецЦикла;
КонецЕсли;
Ответ = Вопрос("Сразу выполнить выгрузку с текущим отбором?", РежимДиалогаВопрос.ОКОтмена);
Если Ответ = КодВозвратаДиалога.ОК Тогда
Форма.ОбновитьТаблицуЖурнала();
КонецЕсли;
Возврат Форма;
КонецФункции
#КонецЕсли
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
//ирПортативный #Если Клиент Тогда
//ирПортативный Контейнер = Новый Структура();
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
//ирПортативный ирПортативный.Открыть();
//ирПортативный КонецЕсли;
//ирПортативный #Иначе
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
//ирПортативный #КонецЕсли
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
Отбор.Колонки.Добавить("Использование", Новый ОписаниеТипов("Булево"));
Отбор.Колонки.Добавить("Поле", Новый ОписаниеТипов("Строка"));
Отбор.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Отбор.Колонки.Добавить("ОписаниеТипов", Новый ОписаниеТипов("ОписаниеТипов"));
Отбор.Колонки.Добавить("Значение");
ЭтотОбъект.МаксимальныйРазмерВыгрузки = 1000;