///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	УсловноеОформлениеФормы();
	
	КэшЗначений = Новый Структура("МассивУзловПланаОбмена, ОтборПоДатеВозникновения, ОтборУзловПланаОбмена, ОтборТипыПредупреждений");
	КэшЗначений.Вставить("ПредупрежденияПоказатьСкрытые", Ложь);
	КэшЗначений.Вставить("НепринятыйПоДатеЗапретаОбъектСуществуетВБазе", Неопределено);
	КэшЗначений.Вставить("НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе", Неопределено);
	КэшЗначений.Вставить("НепринятыеДанныеПоКоллизии", Неопределено);
	КэшЗначений.Вставить("ПринятыеДанныеПоКоллизии", Неопределено);
	
	ПодсистемаВерсионированияСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов");
	Если ПодсистемаВерсионированияСуществует Тогда
		
		МенеджерПеречисления = Перечисления["ТипыВерсийОбъекта"];
		КэшЗначений.Вставить("НепринятыйПоДатеЗапретаОбъектСуществуетВБазе", МенеджерПеречисления.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе);
		КэшЗначений.Вставить("НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе", МенеджерПеречисления.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе);
		КэшЗначений.Вставить("НепринятыеДанныеПоКоллизии", МенеджерПеречисления.НепринятыеДанныеПоКоллизии);
		КэшЗначений.Вставить("ПринятыеДанныеПоКоллизии", МенеджерПеречисления.ПринятыеДанныеПоКоллизии);
		
		ДинамическийСписокСПредупреждениямиВерсионирования();
		
		Элементы.СписокКоллизии.Видимость = Истина;
		Элементы.СписокЗапретЗагрузкиПоДате.Видимость = Истина;
		
	КонецЕсли;
	
	ОтборыПоПереданнымПараметрам();
	
	МассивПолей = Новый Массив;
	МассивПолей.Добавить("ЕстьКомментарий");
	МассивПолей.Добавить("ПроблемныйОбъект");
	МассивПолей.Добавить("Описание");
	
	Для Каждого ИзменяемоеПоле Из МассивПолей Цикл
		Поле = Список.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		Поле.Поле = ИзменяемоеПоле;
		Поле.ОграничениеИспользования.Порядок = Истина;
		Поле.ОграничениеИспользованияРеквизитов.Порядок = Истина;	
	КонецЦикла;	
	
	Список.Параметры.УстановитьЗначениеПараметра("НепроведенныйДокумент", НСтр("ru ='Непроведенный документ'", ОбщегоНазначения.КодОсновногоЯзыка()));
	Список.Параметры.УстановитьЗначениеПараметра("ПустыеРеквизиты", НСтр("ru ='Пустые реквизиты'", ОбщегоНазначения.КодОсновногоЯзыка()));
	Список.Параметры.УстановитьЗначениеПараметра("ПроверкаПередОтправкой", НСтр("ru ='Проверка перед отправкой'", ОбщегоНазначения.КодОсновногоЯзыка()));
	Список.Параметры.УстановитьЗначениеПараметра("ТехническаяОшибкаОтправка", НСтр("ru ='Тех. ошибка (отправка)'", ОбщегоНазначения.КодОсновногоЯзыка()));
	Список.Параметры.УстановитьЗначениеПараметра("ТехническаяОшибкаПолучение", НСтр("ru ='Тех. ошибка (получение)'", ОбщегоНазначения.КодОсновногоЯзыка()));
	
	Если ПодсистемаВерсионированияСуществует Тогда
		
		Список.Параметры.УстановитьЗначениеПараметра("НепринятыйСуществующий", НСтр("ru ='Непринятый, существующий'", ОбщегоНазначения.КодОсновногоЯзыка()));
		Список.Параметры.УстановитьЗначениеПараметра("НепринятыйНовый", НСтр("ru ='Непринятый, новый'", ОбщегоНазначения.КодОсновногоЯзыка()));
		Список.Параметры.УстановитьЗначениеПараметра("ПринятыеДанныеКоллизии", НСтр("ru ='Приняты данные коллизии'", ОбщегоНазначения.КодОсновногоЯзыка()));
		Список.Параметры.УстановитьЗначениеПараметра("НепринятыеДанныеКоллизии", НСтр("ru ='Неприняты данные коллизии'", ОбщегоНазначения.КодОсновногоЯзыка()));
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ПредставлениеОтбораПоПериоду();
	ПредставлениеОтбораУзловОбмена();
	ПредставлениеОтбораПоТипамПредупреждений();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "ИсправлениеПредупрежденийСинхронизацииПроведенияДокументов"
		ИЛИ ИмяСобытия = "ИсправлениеПредупрежденийСинхронизацииПересмотрКоллизии"
		ИЛИ ИмяСобытия = "ИсправлениеПредупрежденийСинхронизацииПересмотрДатыЗапрета"
		Тогда
		
		ОбновитьСписокФормы();
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ПредставлениеОтбораПоПериодуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Диалог = Новый ДиалогРедактированияСтандартногоПериода();
	Диалог.Период = КэшЗначений.ОтборПоДатеВозникновения;
	Диалог.Показать(Новый ОписаниеОповещения("ПослеОтбораПоДатеВозникновения", ЭтотОбъект));
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтбораПоДатеВозникновения(Результат, ДополнительныеПараметры) Экспорт
	
	Если ТипЗнч(Результат) <> Тип("СтандартныйПериод") Тогда
		
		Возврат;
		
	КонецЕсли;
	
	КэшЗначений.ОтборПоДатеВозникновения = Результат;
	ОтборПоДатеВозникновения();
	ПредставлениеОтбораПоПериоду();
	
КонецПроцедуры

&НаКлиенте
Процедура ПредставлениеОтбораПоПериодуОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура ПредставлениеОтбораСинхронизацийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ПараметрыОткрытия = Новый Структура;
	ПараметрыОткрытия.Вставить("МассивУзловПланаОбмена", КэшЗначений.МассивУзловПланаОбмена);
	ПараметрыОткрытия.Вставить("ОтборУзловПланаОбмена", КэшЗначений.ОтборУзловПланаОбмена);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтбораУзловОбменов", ЭтотОбъект);
	
	ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.ОтборСинхронизаций", ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтбораУзловОбменов(Результат, ДополнительныеПараметры) Экспорт
	
	Если ТипЗнч(Результат) <> Тип("Массив") Тогда
		
		Возврат;
		
	КонецЕсли;
	
	КэшЗначений.ОтборУзловПланаОбмена = Результат;
	ОтборПоУзламИнформационнойБазы();
	ПредставлениеОтбораУзловОбмена();
	
КонецПроцедуры

&НаКлиенте
Процедура ПредставлениеОтбораСинхронизацийОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура ПредставлениеОтбораТиповПредупрежденийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ПараметрыОткрытия = Новый Структура;
	ПараметрыОткрытия.Вставить("ОтборТипыПредупреждений", КэшЗначений.ОтборТипыПредупреждений);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтбораПоТипуПредупреждений", ЭтотОбъект);
	
	ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.ОтборПредупрежденийПоТипам", ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтбораПоТипуПредупреждений(Результат, ДополнительныеПараметры) Экспорт
	
	Если ТипЗнч(Результат) <> Тип("Массив") Тогда
		
		Возврат;
		
	КонецЕсли;
	
	КэшЗначений.ОтборТипыПредупреждений = Результат;
	ОтборПоТипамПредупреждений();
	ПредставлениеОтбораПоТипамПредупреждений();
	
КонецПроцедуры

&НаКлиенте
Процедура ПредставлениеОтбораТиповПредупрежденийОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

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

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
	
	ПодключитьОбработчикОжидания("ДоступностьКомандСпискаФормы", 0.1, Истина);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ОткрытьОбъект(Команда)
	
	ТекущиеДанныеСтроки = ТекущиеДанныеСпискаПредупреждений();
	ОткрытьОбъектТекущейСтроки(ТекущиеДанныеСтроки);
	
КонецПроцедуры

&НаКлиенте
Процедура ПредупрежденияСкрытьИзСписка(Команда)
	
	ИзменитьСостояниеПредупреждения(Элементы.Список.ВыделенныеСтроки, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ПредупрежденияПоказатьВСписке(Команда)
	
	ИзменитьСостояниеПредупреждения(Элементы.Список.ВыделенныеСтроки, Ложь);
	
КонецПроцедуры

&НаКлиенте
Процедура ПредупрежденияПоказатьСкрытые(Команда)
	
	КэшЗначений.ПредупрежденияПоказатьСкрытые = НЕ КэшЗначений.ПредупрежденияПоказатьСкрытые;
	
	ОтборСкрытыеПредупреждения();
	Элементы.СписокПредупрежденияПоказатьСкрытые.Пометка = КэшЗначений.ПредупрежденияПоказатьСкрытые;
	Элементы.СписокКонтекстноеМенюПредупрежденияПоказатьСкрытые.Пометка = КэшЗначений.ПредупрежденияПоказатьСкрытые;
	
	
КонецПроцедуры

&НаКлиенте
Процедура ЖурналРегистрации(Команда)
	
	УровниПредупреждений = Новый Массив;
	УровниПредупреждений.Добавить(НСтр("ru ='Ошибка'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()));
	УровниПредупреждений.Добавить(НСтр("ru ='Предупреждение'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()));
	
	ЕстьСобытияВыгрузки = Ложь;
	ЕстьСобытияЗагрузки = Ложь;
	ОпределитьСобытияВыгрузкиЗагрузки(ЕстьСобытияВыгрузки, ЕстьСобытияЗагрузки);
		
	ПараметрыОтбораЖурнала = Новый Структура;
	ПараметрыОтбораЖурнала.Вставить("Уровень", УровниПредупреждений);

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

	ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыОтбораЖурнала, ЭтотОбъект,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаСервере
Процедура ОпределитьСобытияВыгрузкиЗагрузки(ЕстьСобытияВыгрузки, ЕстьСобытияЗагрузки)
	
	Отбор = КэшЗначений.ОтборТипыПредупреждений;
	
	ЕстьСобытияВыгрузки = 
		Отбор.Найти(Перечисления.ТипыПроблемОбменаДанными.ОшибкаВыполненияКодаОбработчиковПриОтправкеДанных) <> Неопределено
		Или Отбор.Найти(Перечисления.ТипыПроблемОбменаДанными.ОшибкаПроверкиСконвертированногоОбъекта) <> Неопределено;
		
	ЕстьСобытияЗагрузки =
		Отбор.Найти(Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент) <> Неопределено
		Или Отбор.Найти(Перечисления.ТипыПроблемОбменаДанными.НезаполненныеРеквизиты) <> Неопределено
		Или Отбор.Найти(Перечисления.ТипыПроблемОбменаДанными.ОшибкаВыполненияКодаОбработчиковПриПолученииДанных) <> Неопределено;
		
	ПодсистемаВерсионированияСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов");
	Если Не ЕстьСобытияЗагрузки И ПодсистемаВерсионированияСуществует Тогда
		
		МенеджерПеречисления = Перечисления["ТипыВерсийОбъекта"];
		
		ЕстьСобытияЗагрузки =
			Отбор.Найти(МенеджерПеречисления.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе) <> Неопределено
			Или Отбор.Найти(МенеджерПеречисления.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе) <> Неопределено
			Или Отбор.Найти(МенеджерПеречисления.НепринятыеДанныеПоКоллизии) <> Неопределено
			Или Отбор.Найти(МенеджерПеречисления.ПринятыеДанныеПоКоллизии) <> Неопределено;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЖурналРегистрацииВУказанноеВремя(Команда)
	
	ДанныеТекущейСтроки = ТекущиеДанныеСпискаПредупреждений();
	
	Если НЕ ЗначениеЗаполнено(ДанныеТекущейСтроки.ДатаВозникновения) Тогда
		
		ТекстПредупреждения = НСтр("ru ='В текущей строке не указано время и дата возникновения предупреждения'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
		ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
		
	КонецЕсли;
	
	ПараметрыОтбораЖурнала = Новый Структура;
	ПараметрыОтбораЖурнала.Вставить("ДатаНачала",                ДанныеТекущейСтроки.ДатаВозникновения - 1);
	ПараметрыОтбораЖурнала.Вставить("ДатаОкончания",             ДанныеТекущейСтроки.ДатаВозникновения + 1);
	
	ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыОтбораЖурнала, ЭтотОбъект,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

КонецПроцедуры

&НаКлиенте
Процедура ОтключитьАвтоматическоеОбновлениеФормы(Команда)
	
	Элементы.СписокОтключитьАвтоматическоеОбновлениеФормы.Пометка = НЕ Элементы.СписокОтключитьАвтоматическоеОбновлениеФормы.Пометка;
	
КонецПроцедуры

&НаКлиенте
Процедура УдалениеУстаревшихЗаписей(Команда)
	
	ПараметрыОткрытия = Новый Структура;
	ПараметрыОткрытия.Вставить("МассивУзловПланаОбмена", КэшЗначений.МассивУзловПланаОбмена);
	ПараметрыОткрытия.Вставить("ОтборПоДатеВозникновения", КэшЗначений.ОтборПоДатеВозникновения);
	ПараметрыОткрытия.Вставить("ОтборУзловОбменов", КэшЗначений.ОтборУзловПланаОбмена);
	ПараметрыОткрытия.Вставить("ОтборТипыПредупреждений", КэшЗначений.ОтборТипыПредупреждений); 
	ПараметрыОткрытия.Вставить("ТолькоСкрытыеЗаписи", Истина);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеУдаленияУстаревшихЗаписей", ЭтотОбъект);
	
	ОбменДаннымиКлиент.ОткрытьФормуУдаленияПредупрежденийСинхронизации(ПараметрыОткрытия, ОписаниеОповещения);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеУдаленияУстаревшихЗаписей(Результат, ДополнительныеПараметры) Экспорт
	
	ОбновитьСписокФормы();
	
КонецПроцедуры

&НаКлиенте
Процедура ПредыдущаяФормаПредупреждений(Команда)
	
	ПараметрыОткрытия = Новый Структура;
	ПараметрыОткрытия.Вставить("УзлыОбмена", КэшЗначений.МассивУзловПланаОбмена);
	
	ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.Форма", ПараметрыОткрытия, ЭтотОбъект);
	
	Закрыть();
	
КонецПроцедуры

&НаКлиенте
Процедура ПровестиДокумент(Команда)
	
	ПровестиДокументыПоВыделеннымСтрокам(Элементы.Список.ВыделенныеСтроки);
	
КонецПроцедуры

&НаКлиенте
Процедура Коллизии(Команда)
	
	КоллизииПоВыделеннымСтрокам(Элементы.Список.ВыделенныеСтроки);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗапретЗагрузкиПоДате(Команда)
	
	ЗапретЗагрузкиПоВыделеннымСтрокам(Элементы.Список.ВыделенныеСтроки);
	
КонецПроцедуры

&НаКлиенте
Процедура ГрупповоеИзменениеРеквизитов(Команда)
	
	ГрупповоеИзменениеРеквизитовПоВыделеннымСтрокам(Элементы.Список.ВыделенныеСтроки);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаКлиенте
Функция ТекущиеДанныеСпискаПредупреждений()
	
	ДанныеТекущейСтроки = Элементы.Список.ТекущиеДанные;
	Если ДанныеТекущейСтроки = Неопределено
		ИЛИ ТипЗнч(Элементы.Список.ТекущаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка")
		Тогда
		
		ТекстИсключения = НСтр("ru ='Для текущей строки выполнение команды не предусмотрено'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
		ВызватьИсключение ТекстИсключения;
		
	КонецЕсли;
	
	Возврат ДанныеТекущейСтроки;
	
КонецФункции

&НаКлиенте
Процедура ОткрытьОбъектТекущейСтроки(ДанныеТекущейСтроки)
	
	Если НЕ ЗначениеЗаполнено(ДанныеТекущейСтроки.ПроблемныйОбъект) Тогда
		
		ТекстПредупреждения = НСтр("ru ='Предупреждение в текущей строке не привязано к объекту информационной базы'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
		ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
		Возврат;
		
	КонецЕсли;
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОткрытияОбъекта", ЭтотОбъект);
	ПоказатьЗначение(ОписаниеОповещения, ДанныеТекущейСтроки.ПроблемныйОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеОткрытияОбъекта(ДополнительныеПараметры) Экспорт
	
	ОбновитьСписокФормы();
	
КонецПроцедуры

&НаКлиенте
Процедура ПредставлениеОтбораПоПериоду()
	
	Если НЕ ЗначениеЗаполнено(КэшЗначений.ОтборПоДатеВозникновения) Тогда
		
		ПредставлениеОтбораПоПериоду = НСтр("ru ='Отбор не установлен'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
		
	Иначе
		
		ПредставлениеОтбораПоПериоду = СокрЛП(КэшЗначений.ОтборПоДатеВозникновения);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПредставлениеОтбораУзловОбмена()
	
	Если КэшЗначений.ОтборУзловПланаОбмена = Неопределено
		ИЛИ КэшЗначений.ОтборУзловПланаОбмена.Количество() = 0 Тогда
		
		ПредставлениеОтбораСинхронизаций = НСтр("ru ='Отбор не установлен'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
		
	ИначеЕсли КэшЗначений.ОтборУзловПланаОбмена.Количество() = 1 Тогда
		
		ПредставлениеОтбораСинхронизаций = Строка(КэшЗначений.ОтборУзловПланаОбмена[0]);
		
	Иначе
		
		ШаблонТекста = НСтр("ru ='%1%2 (и еще %3 шт.)'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
		Троеточие = ?(СтрДлина(СокрЛП(КэшЗначений.ОтборУзловПланаОбмена[0])) > 32, "...", "");
		КоличествоЕще = КэшЗначений.ОтборУзловПланаОбмена.Количество() - 1;
		
		ПредставлениеОтбораСинхронизаций = СтрШаблон(ШаблонТекста, Лев(СокрЛП(КэшЗначений.ОтборУзловПланаОбмена[0]), 33), Троеточие, КоличествоЕще);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПредставлениеОтбораПоТипамПредупреждений()
	
	Если КэшЗначений.ОтборТипыПредупреждений = Неопределено
		ИЛИ КэшЗначений.ОтборТипыПредупреждений.Количество() = 0 Тогда
		
		ПредставлениеОтбораТиповПредупреждений = НСтр("ru ='Отбор не установлен'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
		
	ИначеЕсли КэшЗначений.ОтборТипыПредупреждений.Количество() = 1 Тогда
		
		ПредставлениеОтбораТиповПредупреждений = Строка(КэшЗначений.ОтборТипыПредупреждений[0]);
		
	ИначеЕсли КэшЗначений.ОтборТипыПредупреждений.Количество() > 8 Тогда
		
		ПредставлениеОтбораТиповПредупреждений = НСтр("ru ='Все типы предупреждений'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
		
	Иначе
		
		ШаблонТекста = НСтр("ru ='%1%2 (и еще %3 шт.)'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
		Троеточие = ?(СтрДлина(СокрЛП(КэшЗначений.ОтборТипыПредупреждений[0])) > 32, "...", "");
		КоличествоЕще = КэшЗначений.ОтборТипыПредупреждений.Количество() - 1;
		
		ПредставлениеОтбораТиповПредупреждений = СтрШаблон(ШаблонТекста, Лев(СокрЛП(КэшЗначений.ОтборТипыПредупреждений[0]), 33), Троеточие, КоличествоЕще);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьКарточкуПроблемы(ПараметрыОткрытия)
	Перем ПроблемныйОбъект, ТипПредупреждения;
	
	ПараметрыОткрытия.Свойство("ПроблемныйОбъект", ПроблемныйОбъект);
	ПараметрыОткрытия.Свойство("ТипПредупреждения", ТипПредупреждения);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗакрытияКарточкиСПредупреждением", ЭтотОбъект);
	
	Если ТипПредупреждения = ПредопределенноеЗначение("Перечисление.ТипыПроблемОбменаДанными.АдминистративнаяОшибкаПриложения") Тогда
		
		ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.ПредупреждениеАдминистрированияПриложения", ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения);
		
	ИначеЕсли ТипПредупреждения = ПредопределенноеЗначение("Перечисление.ТипыПроблемОбменаДанными.НезаполненныеРеквизиты") Тогда
		
		ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.ПредупреждениеНезаполненногоРеквизита", ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения);
		
	ИначеЕсли ТипПредупреждения = ПредопределенноеЗначение("Перечисление.ТипыПроблемОбменаДанными.НепроведенныйДокумент") Тогда
		
		ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.ПредупреждениеНепроведенногоДокумента", ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения);
		
	ИначеЕсли ТипПредупреждения = ПредопределенноеЗначение("Перечисление.ТипыПроблемОбменаДанными.ОшибкаВыполненияКодаОбработчиковПриОтправкеДанных")
		ИЛИ ТипПредупреждения = ПредопределенноеЗначение("Перечисление.ТипыПроблемОбменаДанными.ОшибкаВыполненияКодаОбработчиковПриПолученииДанных") Тогда
		
		ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.ПредупрежденияОбработчиковОтправкиПолучения", ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения);
		
	ИначеЕсли ТипПредупреждения = ПредопределенноеЗначение("Перечисление.ТипыПроблемОбменаДанными.ОшибкаПроверкиСконвертированногоОбъекта") Тогда
		
		ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.ПредупреждениеКонвертацииОбъектаПриОтправке", ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения);
		
	ИначеЕсли ТипПредупреждения = КэшЗначений.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе
		ИЛИ ТипПредупреждения = КэшЗначений.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе Тогда
		
		ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.ПредупреждениеПоДатеЗапретаЗагрузки", ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения);
		
	ИначеЕсли ТипПредупреждения = КэшЗначений.НепринятыеДанныеПоКоллизии
		ИЛИ ТипПредупреждения = КэшЗначений.ПринятыеДанныеПоКоллизии Тогда
		
		ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.ПредупреждениеОКоллизии", ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗакрытияКарточкиСПредупреждением(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат <> Неопределено Тогда
		
		ОбновитьСписокФормы();
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьСостояниеПредупреждения(ВыделенныеСтроки, СкрытьОтобразить)
	
	НаборСтруктур = Новый Массив;
	Для Каждого ИндексСтроки Из ВыделенныеСтроки Цикл
		
		ДанныеСтроки = Элементы.Список.ДанныеСтроки(ИндексСтроки);
		Если ДанныеСтроки = Неопределено Тогда
			
			Продолжить;
			
		КонецЕсли;
		
		СтруктураДанныхСтроки = Новый Структура("ПроблемныйОбъект, ТипПредупреждения, УзелИнформационнойБазы, КлючУникальности, ВерсияИзДругойПрограммы");
		ЗаполнитьЗначенияСвойств(СтруктураДанныхСтроки, ДанныеСтроки);
		
		НаборСтруктур.Добавить(СтруктураДанныхСтроки);
		
	КонецЦикла;
	
	ИзменитьСостояниеПредупрежденияНаСервере(НаборСтруктур, СкрытьОтобразить);
	ОбновитьСписокФормы();
	ДоступностьКомандСпискаФормы();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьСписокФормы()
	
	Если НЕ Элементы.СписокОтключитьАвтоматическоеОбновлениеФормы.Пометка Тогда
		
		Элементы.Список.Обновить();
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДоступностьКомандСпискаФормы()
	
	ДанныеТекущейСтроки = Элементы.Список.ТекущиеДанные;
	Если ДанныеТекущейСтроки = Неопределено
		ИЛИ ТипЗнч(Элементы.Список.ТекущаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка")
		Тогда
		
		Элементы.СписокПредупрежденияСкрытьИзСписка.Доступность = Ложь;
		Элементы.СписокПредупрежденияПоказатьВСписке.Доступность = Ложь;
		Элементы.СписокКонтекстноеМенюПредупрежденияСкрытьИзСписка.Доступность = Ложь;
		Элементы.СписокКонтекстноеМенюПредупрежденияПоказатьВСписке.Доступность = Ложь;
		Элементы.СписокОткрытьОбъект.Доступность = Ложь;
		Элементы.СписокПровестиДокумент.Доступность = Ложь;
		Элементы.СписокГрупповоеИзменениеРеквизитов.Доступность = Ложь;
		Элементы.СписокКоллизии.Доступность = Ложь;
		Элементы.СписокЗапретЗагрузкиПоДате.Доступность = Ложь;
		Возврат;
		
	КонецЕсли;
	
	Элементы.СписокПредупрежденияСкрытьИзСписка.Доступность = НЕ ДанныеТекущейСтроки.СкрытьПредупреждение;
	Элементы.СписокПредупрежденияПоказатьВСписке.Доступность = ДанныеТекущейСтроки.СкрытьПредупреждение;
	Элементы.СписокКонтекстноеМенюПредупрежденияСкрытьИзСписка.Доступность = НЕ ДанныеТекущейСтроки.СкрытьПредупреждение;
	Элементы.СписокКонтекстноеМенюПредупрежденияПоказатьВСписке.Доступность = ДанныеТекущейСтроки.СкрытьПредупреждение;
	
	Если Элементы.СписокОткрытьОбъект.Доступность = Ложь Тогда
		
		Элементы.СписокОткрытьОбъект.Доступность = Истина;
		Элементы.СписокПровестиДокумент.Доступность = Истина;
		Элементы.СписокГрупповоеИзменениеРеквизитов.Доступность = Истина;
		Элементы.СписокКоллизии.Доступность = Истина;
		Элементы.СписокЗапретЗагрузкиПоДате.Доступность = Истина;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ДинамическийСписокСПредупреждениямиВерсионирования()
	
	МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
	ТекстЗапросаВерсии = МодульВерсионированиеОбъектов.ТекстЗапросаСпискаПредупрежденияВерсий();
	
	СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка();
	СвойстваСписка.ТекстЗапроса = Список.ТекстЗапроса + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС + ТекстЗапросаВерсии;
	СвойстваСписка.ОсновнаяТаблица = "";
	СвойстваСписка.ДинамическоеСчитываниеДанных = Ложь;
	
	ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка)
	
КонецПроцедуры

&НаСервере
Процедура ДобавитьПоляОформления(ЭлементУсловногоОформления, ИменаПолейОформления)
	
	Для каждого ИмяПоля Из ИменаПолейОформления Цикл
		
		ПолеОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
		ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура УсловноеОформлениеФормы()
	
	ИменаПолейОформления = Новый Массив;
	ИменаПолейОформления.Добавить("ДатаВозникновения");
	ИменаПолейОформления.Добавить("ПроблемныйОбъект");
	ИменаПолейОформления.Добавить("Описание");
	ИменаПолейОформления.Добавить("ПредставлениеТипаПредупреждения");
	ИменаПолейОформления.Добавить("УзелИнформационнойБазы");
	ИменаПолейОформления.Добавить("КлючУникальности");
	
	// Блокирующие предупреждения красным
	ТипыКритичныхПредупреждений = Новый СписокЗначений;
	ТипыКритичныхПредупреждений.Добавить(Перечисления.ТипыПроблемОбменаДанными.АдминистративнаяОшибкаПриложения);
	ТипыКритичныхПредупреждений.Добавить(Перечисления.ТипыПроблемОбменаДанными.ОшибкаВыполненияКодаОбработчиковПриОтправкеДанных);
	ТипыКритичныхПредупреждений.Добавить(Перечисления.ТипыПроблемОбменаДанными.ОшибкаВыполненияКодаОбработчиковПриПолученииДанных);
	
	ОшибкиКрасным = УсловноеОформление.Элементы.Добавить();
	ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОшибкиКрасным.Отбор, "Список.ТипПредупреждения", ВидСравненияКомпоновкиДанных.ВСписке, ТипыКритичныхПредупреждений);
	ОшибкиКрасным.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.ТемноКрасный);
	ДобавитьПоляОформления(ОшибкиКрасным, ИменаПолейОформления);
	
	// Скрытые предупреждения серым
	СкрытыеПредупрежденияСерым = УсловноеОформление.Элементы.Добавить();
	ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(СкрытыеПредупрежденияСерым.Отбор, "Список.СкрытьПредупреждение", ВидСравненияКомпоновкиДанных.Равно, Истина);
	СкрытыеПредупрежденияСерым.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый);
	ДобавитьПоляОформления(СкрытыеПредупрежденияСерым, ИменаПолейОформления);
	
КонецПроцедуры

&НаСервере
Процедура ОтборыПоПереданнымПараметрам()
	
	Параметры.Свойство("ОтборПоДатеВозникновения", КэшЗначений.ОтборПоДатеВозникновения);
	ОтборПоДатеВозникновения();
	
	Параметры.Свойство("УзлыОбмена", КэшЗначений.МассивУзловПланаОбмена);
	Параметры.Свойство("ОтборУзловОбменов", КэшЗначений.ОтборУзловПланаОбмена);
	ОтборПоУзламИнформационнойБазы();
	
	Параметры.Свойство("ОтборТипыПредупреждений", КэшЗначений.ОтборТипыПредупреждений); 
	ОтборПоТипамПредупреждений();
	
	ОтборСкрытыеПредупреждения()
	
КонецПроцедуры

&НаСервере
Процедура ОтборПоДатеВозникновения()
	Перем ГруппаОтбораДанных;
	
	Если ТипЗнч(КэшЗначений.ОтборПоДатеВозникновения) <> Тип("СтандартныйПериод") Тогда
		
		КэшЗначений.ОтборПоДатеВозникновения = Новый СтандартныйПериод;
		
	КонецЕсли;
	
	Использование = ЗначениеЗаполнено(КэшЗначений.ОтборПоДатеВозникновения);
	
	ПредставлениеГруппыОтбора = НСтр("ru ='Отбор по дате возникновения'", ОбщегоНазначения.КодОсновногоЯзыка());
	
	НайтиЭлементОтбораДинамическогоСписка(Неопределено, ГруппаОтбораДанных, Неопределено, ПредставлениеГруппыОтбора, Истина);
	Если ГруппаОтбораДанных = Неопределено Тогда
		
		ГруппаОтбораДанных = Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
		ГруппаОтбораДанных.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
		ГруппаОтбораДанных.Представление = ПредставлениеГруппыОтбора;
		ГруппаОтбораДанных.Использование = Использование;
		
	Иначе
		
		ГруппаОтбораДанных.Использование = Использование;
		
	КонецЕсли;
	
	ОтборПоДатеВозникновения = КэшЗначений.ОтборПоДатеВозникновения; // СтандартныйПериод
	
	ПараметрыЭлементаОтбора = Новый Структура;
	ПараметрыЭлементаОтбора.Вставить("КоллекцияЭлементов", ГруппаОтбораДанных.Элементы);
	ПараметрыЭлементаОтбора.Вставить("ЭлементОтбораДанных", Неопределено);
	ПараметрыЭлементаОтбора.Вставить("ЛевоЗначениеОтбора", Новый ПолеКомпоновкиДанных("ДатаВозникновения"));
	ПараметрыЭлементаОтбора.Вставить("ВидСравнения", ВидСравненияКомпоновкиДанных.БольшеИлиРавно);
	ПараметрыЭлементаОтбора.Вставить("ПравоеЗначение", ОтборПоДатеВозникновения.ДатаНачала);
	ПараметрыЭлементаОтбора.Вставить("ПредставлениеОтбора", НСтр("ru ='Отбор даты с'", ОбщегоНазначения.КодОсновногоЯзыка()));
	ПараметрыЭлементаОтбора.Вставить("Использование", Использование);
	
	УстановитьЗначениеОтбораДинамическогоСписка(ПараметрыЭлементаОтбора);
	
	ПараметрыЭлементаОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
	ПараметрыЭлементаОтбора.ПравоеЗначение = ОтборПоДатеВозникновения.ДатаОкончания;
	ПараметрыЭлементаОтбора.ПредставлениеОтбора = НСтр("ru ='Отбор даты по'", ОбщегоНазначения.КодОсновногоЯзыка());
	
	УстановитьЗначениеОтбораДинамическогоСписка(ПараметрыЭлементаОтбора);
	
КонецПроцедуры

&НаСервере
Процедура ОтборПоУзламИнформационнойБазы()
	
	Использование = ТипЗнч(КэшЗначений.ОтборУзловПланаОбмена) = Тип("Массив")
		И (КэшЗначений.ОтборУзловПланаОбмена.Количество() > 0);
		
	ПараметрыЭлементаОтбора = Новый Структура;
	ПараметрыЭлементаОтбора.Вставить("ЭлементОтбораДанных", Неопределено);
	ПараметрыЭлементаОтбора.Вставить("ЛевоЗначениеОтбора", Новый ПолеКомпоновкиДанных("УзелИнформационнойБазы"));
	ПараметрыЭлементаОтбора.Вставить("ВидСравнения", ВидСравненияКомпоновкиДанных.ВСписке);
	ПараметрыЭлементаОтбора.Вставить("ПравоеЗначение", КэшЗначений.ОтборУзловПланаОбмена);
	ПараметрыЭлементаОтбора.Вставить("ПредставлениеОтбора", НСтр("ru ='Отбор синхронизаций'", ОбщегоНазначения.КодОсновногоЯзыка()));
	ПараметрыЭлементаОтбора.Вставить("Использование", Использование);
	
	УстановитьЗначениеОтбораДинамическогоСписка(ПараметрыЭлементаОтбора);
	
КонецПроцедуры

&НаСервере
Процедура ОтборПоТипамПредупреждений()
	
	Использование = ТипЗнч(КэшЗначений.ОтборТипыПредупреждений) = Тип("Массив")
		И (КэшЗначений.ОтборТипыПредупреждений.Количество() > 0);
		
	ПараметрыЭлементаОтбора = Новый Структура;
	ПараметрыЭлементаОтбора.Вставить("ЭлементОтбораДанных", Неопределено);
	ПараметрыЭлементаОтбора.Вставить("ЛевоЗначениеОтбора", Новый ПолеКомпоновкиДанных("ТипПредупреждения"));
	ПараметрыЭлементаОтбора.Вставить("ВидСравнения", ВидСравненияКомпоновкиДанных.ВСписке);
	ПараметрыЭлементаОтбора.Вставить("ПравоеЗначение", КэшЗначений.ОтборТипыПредупреждений);
	ПараметрыЭлементаОтбора.Вставить("ПредставлениеОтбора", НСтр("ru ='Отбор по типу предупреждения'", ОбщегоНазначения.КодОсновногоЯзыка()));
	ПараметрыЭлементаОтбора.Вставить("Использование", Использование);

	УстановитьЗначениеОтбораДинамическогоСписка(ПараметрыЭлементаОтбора);
	
КонецПроцедуры

&НаСервере
Процедура ОтборСкрытыеПредупреждения()
	
	Использование = НЕ КэшЗначений.ПредупрежденияПоказатьСкрытые;
	
	ПараметрыЭлементаОтбора = Новый Структура;
	ПараметрыЭлементаОтбора.Вставить("ЭлементОтбораДанных", Неопределено);
	ПараметрыЭлементаОтбора.Вставить("ЛевоЗначениеОтбора", Новый ПолеКомпоновкиДанных("СкрытьПредупреждение"));
	ПараметрыЭлементаОтбора.Вставить("ВидСравнения", ВидСравненияКомпоновкиДанных.Равно);
	ПараметрыЭлементаОтбора.Вставить("ПравоеЗначение", Ложь);
	ПараметрыЭлементаОтбора.Вставить("ПредставлениеОтбора", НСтр("ru ='Отбор скрытых предупреждений'", ОбщегоНазначения.КодОсновногоЯзыка()));
	ПараметрыЭлементаОтбора.Вставить("Использование", Использование);

	УстановитьЗначениеОтбораДинамическогоСписка(ПараметрыЭлементаОтбора);
	
КонецПроцедуры

&НаСервере
Процедура НайтиЭлементОтбораДинамическогоСписка(КоллекцияЭлементов, ЭлементОтбораДанных, ЛевоЗначениеОтбора, ПредставлениеОтбора, ИскатьГруппуЭлементов = Ложь)
	
	Если КоллекцияЭлементов = Неопределено Тогда
		
		КоллекцияЭлементов = Список.Отбор.Элементы;
		
	КонецЕсли;
	
	Для каждого ЭлементОтбора Из КоллекцияЭлементов Цикл
		
		Если ИскатьГруппуЭлементов
			И ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных")
			И ЭлементОтбора.Представление = ПредставлениеОтбора Тогда
			
			ЭлементОтбораДанных = ЭлементОтбора;
			Прервать;
			
		ИначеЕсли ЭлементОтбора.Представление = ПредставлениеОтбора
			И ЭлементОтбора.ЛевоеЗначение = ЛевоЗначениеОтбора Тогда
			
			ЭлементОтбораДанных = ЭлементОтбора;
			Прервать;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьЗначениеОтбораДинамическогоСписка(ПараметрыЭлементаОтбора)
	Перем КоллекцияЭлементов, ЭлементОтбораДанных, ЛевоЗначениеОтбора, ВидСравненияОтбораДинамическогоСписка;
	Перем ПравоеЗначение, ПредставлениеОтбора, Использование;
	
	ПараметрыЭлементаОтбора.Свойство("КоллекцияЭлементов", КоллекцияЭлементов);
	ПараметрыЭлементаОтбора.Свойство("ЭлементОтбораДанных", ЭлементОтбораДанных);
	ПараметрыЭлементаОтбора.Свойство("ЛевоЗначениеОтбора",	ЛевоЗначениеОтбора);
	ПараметрыЭлементаОтбора.Свойство("ВидСравнения",		ВидСравненияОтбораДинамическогоСписка);
	ПараметрыЭлементаОтбора.Свойство("ПравоеЗначение",		ПравоеЗначение);
	ПараметрыЭлементаОтбора.Свойство("ПредставлениеОтбора", ПредставлениеОтбора);
	ПараметрыЭлементаОтбора.Свойство("Использование",		Использование);
	
	Если КоллекцияЭлементов = Неопределено Тогда
		
		КоллекцияЭлементов = Список.Отбор.Элементы;
		
	КонецЕсли;
	
	Если ЭлементОтбораДанных = Неопределено Тогда
		
		НайтиЭлементОтбораДинамическогоСписка(КоллекцияЭлементов, ЭлементОтбораДанных, ЛевоЗначениеОтбора, ПредставлениеОтбора);
		
	КонецЕсли;
	
	Если ЭлементОтбораДанных = Неопределено Тогда
		
		ЭлементОтбораДанных = КоллекцияЭлементов.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ЭлементОтбораДанных.ЛевоеЗначение = ЛевоЗначениеОтбора;
		ЭлементОтбораДанных.ВидСравнения = ВидСравненияОтбораДинамическогоСписка;
		ЭлементОтбораДанных.ПравоеЗначение = ПравоеЗначение;
		ЭлементОтбораДанных.Представление = ПредставлениеОтбора;
		ЭлементОтбораДанных.Использование = Использование;
		
	Иначе
		
		ЭлементОтбораДанных.ПравоеЗначение = ПравоеЗначение;
		ЭлементОтбораДанных.Использование = Использование;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ИзменитьСостояниеПредупрежденияНаСервере(НаборСтруктур, СкрытьОтобразить)
	
	Для Каждого СтруктураСДаннымиСтроки Из НаборСтруктур Цикл
		
		Если ТипЗнч(СтруктураСДаннымиСтроки.ТипПредупреждения) = Тип("ПеречислениеСсылка.ТипыПроблемОбменаДанными") Тогда
			
			РегистрыСведений.РезультатыОбменаДанными.Игнорировать(СтруктураСДаннымиСтроки.ПроблемныйОбъект, СтруктураСДаннымиСтроки.ТипПредупреждения, СкрытьОтобразить,
				СтруктураСДаннымиСтроки.УзелИнформационнойБазы, СтруктураСДаннымиСтроки.КлючУникальности);
			
		ИначеЕсли ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда
			
			МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
			МодульВерсионированиеОбъектов.ИгнорироватьВерсиюОбъекта(СтруктураСДаннымиСтроки.ПроблемныйОбъект, СтруктураСДаннымиСтроки.ВерсияИзДругойПрограммы, СкрытьОтобразить);
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

#Область ПакетноеИсправлениеОшибок

&НаКлиенте
Процедура ПровестиДокументыПоВыделеннымСтрокам(ВыделенныеСтроки)
	
	ДанныеВыделенныхСтрок = Новый Массив;
	Для Каждого ИндексСтроки Из ВыделенныеСтроки Цикл
		
		ДанныеСтроки = Элементы.Список.ДанныеСтроки(ИндексСтроки);
		Если ДанныеСтроки = Неопределено
			ИЛИ ДанныеСтроки.ТипПредупреждения <> ПредопределенноеЗначение("Перечисление.ТипыПроблемОбменаДанными.НепроведенныйДокумент")
			ИЛИ НЕ ЗначениеЗаполнено(ДанныеСтроки.ПроблемныйОбъект)
			Тогда
			
			Продолжить;
			
		КонецЕсли;
		
		ДанныеВыделенныхСтрок.Добавить(ДанныеСтроки.ПроблемныйОбъект);
		
	КонецЦикла;
	
	Если ДанныеВыделенныхСтрок.Количество() = 0 Тогда
		
		СообщениеОбОшибке = НСтр("ru ='В выделенных строках нет предупреждений с типом <Непроведенный документ>'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
		ПоказатьПредупреждение(Неопределено, СообщениеОбОшибке);
		Возврат
		
	КонецЕсли;
	
	ПараметрыОткрытия = Новый Структура;
	ПараметрыОткрытия.Вставить("ДанныеВыделенныхСтрок", ДанныеВыделенныхСтрок);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеГрупповойОбработкиПредупреждений", ЭтотОбъект);
	
	ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.ОбработкаПредупрежденийПроведения", ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения);
	
КонецПроцедуры

&НаКлиенте
Процедура КоллизииПоВыделеннымСтрокам(ВыделенныеСтроки)
	
	ТипыПредупрежденийКоллизии = Новый Массив(2);
	ТипыПредупрежденийКоллизии[0] = КэшЗначений.НепринятыеДанныеПоКоллизии;
	ТипыПредупрежденийКоллизии[1] = КэшЗначений.ПринятыеДанныеПоКоллизии;
	
	ДанныеВыделенныхСтрок = Новый Массив;
	Для Каждого ИндексСтроки Из ВыделенныеСтроки Цикл
		
		ДанныеСтроки = Элементы.Список.ДанныеСтроки(ИндексСтроки);
		Если ДанныеСтроки = Неопределено
			ИЛИ ТипыПредупрежденийКоллизии.Найти(ДанныеСтроки.ТипПредупреждения) = Неопределено
			ИЛИ НЕ ЗначениеЗаполнено(ДанныеСтроки.ПроблемныйОбъект)
			Тогда
			
			Продолжить;
			
		КонецЕсли;
		
		СтруктураДанных = Новый Структура;
		СтруктураДанных.Вставить("ВерсияИзДругойПрограммы", ДанныеСтроки.ВерсияИзДругойПрограммы);
		СтруктураДанных.Вставить("ВерсияЭтойПрограммы", ДанныеСтроки.ВерсияЭтойПрограммы);
		СтруктураДанных.Вставить("ПроблемныйОбъект", ДанныеСтроки.ПроблемныйОбъект);
		
		ДанныеВыделенныхСтрок.Добавить(СтруктураДанных);
		
	КонецЦикла;
	
	Если ДанныеВыделенныхСтрок.Количество() = 0 Тогда
		
		СообщениеОбОшибке = НСтр("ru ='В выделенных строках нет предупреждений с типами <Неприняты данные коллизии>, <Приняты данные коллизии>'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
		ПоказатьПредупреждение(Неопределено, СообщениеОбОшибке);
		Возврат
		
	КонецЕсли;
	
	ПараметрыОткрытия = Новый Структура;
	ПараметрыОткрытия.Вставить("ДанныеВыделенныхСтрок", ДанныеВыделенныхСтрок);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеГрупповойОбработкиПредупреждений", ЭтотОбъект);
	
	ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.ОбработкаПредупрежденийКоллизии", ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗапретЗагрузкиПоВыделеннымСтрокам(ВыделенныеСтроки)
	
	ТипыПредупрежденийКоллизии = Новый Массив(2);
	ТипыПредупрежденийКоллизии[0] = КэшЗначений.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе;
	ТипыПредупрежденийКоллизии[1] = КэшЗначений.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе;
	
	ДанныеВыделенныхСтрок = Новый Массив;
	Для Каждого ИндексСтроки Из ВыделенныеСтроки Цикл
		
		ДанныеСтроки = Элементы.Список.ДанныеСтроки(ИндексСтроки);
		Если ДанныеСтроки = Неопределено
			ИЛИ ТипыПредупрежденийКоллизии.Найти(ДанныеСтроки.ТипПредупреждения) = Неопределено
			ИЛИ НЕ ЗначениеЗаполнено(ДанныеСтроки.ПроблемныйОбъект)
			Тогда
			
			Продолжить;
			
		КонецЕсли;
		
		СтруктураДанных = Новый Структура;
		СтруктураДанных.Вставить("ВерсияИзДругойПрограммы", ДанныеСтроки.ВерсияИзДругойПрограммы);
		СтруктураДанных.Вставить("ВерсияЭтойПрограммы", ДанныеСтроки.ВерсияЭтойПрограммы);
		СтруктураДанных.Вставить("ПроблемныйОбъект", ДанныеСтроки.ПроблемныйОбъект);
		
		ДанныеВыделенныхСтрок.Добавить(СтруктураДанных);
		
	КонецЦикла;
	
	Если ДанныеВыделенныхСтрок.Количество() = 0 Тогда
		
		СообщениеОбОшибке = НСтр("ru ='В выделенных строках нет предупреждений с типами <Непринятый, существующий>, <Непринятый, новый>,
			|которые возникли из-за попытки загрузить данных в закрытый период.'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
		ПоказатьПредупреждение(Неопределено, СообщениеОбОшибке);
		Возврат
		
	КонецЕсли;
	
	ПараметрыОткрытия = Новый Структура;
	ПараметрыОткрытия.Вставить("ДанныеВыделенныхСтрок", ДанныеВыделенныхСтрок);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеГрупповойОбработкиПредупреждений", ЭтотОбъект);
	
	ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.ОбработкаПредупрежденийПоДатеЗапретаЗагрузки", ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения);
	
КонецПроцедуры

&НаКлиенте
Процедура ГрупповоеИзменениеРеквизитовПоВыделеннымСтрокам(ВыделенныеСтроки)
	
	ДанныеВыделенныхСтрок = Новый Массив;
	Для Каждого ИндексСтроки Из ВыделенныеСтроки Цикл
		
		ДанныеСтроки = Элементы.Список.ДанныеСтроки(ИндексСтроки);
		Если ДанныеСтроки = Неопределено
			ИЛИ ДанныеСтроки.ТипПредупреждения <> ПредопределенноеЗначение("Перечисление.ТипыПроблемОбменаДанными.НезаполненныеРеквизиты")
			ИЛИ НЕ ЗначениеЗаполнено(ДанныеСтроки.ПроблемныйОбъект)
			Тогда
			
			Продолжить;
			
		КонецЕсли;
		
		ДанныеВыделенныхСтрок.Добавить(ДанныеСтроки.ПроблемныйОбъект);
		
	КонецЦикла;
	
	Если ДанныеВыделенныхСтрок.Количество() = 0 Тогда
		
		СообщениеОбОшибке = НСтр("ru ='В выделенных строках нет предупреждений с типами <Пустые реквизиты>.'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
		ПоказатьПредупреждение(Неопределено, СообщениеОбОшибке);
		Возврат
		
	КонецЕсли;
	
	ИзменитьРеквизитыГрупповойОбработкой(ДанныеВыделенныхСтрок)
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьРеквизитыГрупповойОбработкой(ДанныеВыделенныхСтрок)
	
	Если НЕ ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда
		
		Возврат;
		
	КонецЕсли;
	
	ПараметрыГрупповогоИзменения = Новый Структура;
	ПараметрыГрупповогоИзменения.Вставить("МассивОбъектов", ДанныеВыделенныхСтрок);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеГрупповойОбработкиПредупреждений", ЭтотОбъект);
	
	МодульГрупповоеИзменениеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ГрупповоеИзменениеОбъектовКлиент");
	МодульГрупповоеИзменениеОбъектовКлиент.НачатьИзменениеВыделенныхСОповещением(ПараметрыГрупповогоИзменения, ОписаниеОповещения)
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеГрупповойОбработкиПредупреждений(Результат, ДополнительныеПараметры) Экспорт
	
	// Добавить "Результат <> Неопределено" нельзя:
	// 1. ИзменитьРеквизитыГрупповойОбработкой всегда возвращает Неопределено;
	// 2. В других формах можно выполнить <исправление>, а потом нажать Отмена.
	ОбновитьСписокФормы();
	
КонецПроцедуры

#КонецОбласти

#КонецОбласти