Документооборот с контролирующими органами / Групповая отправка / Модуль формы

файл

#Область ОписаниеПеременных

&НаКлиенте
Перем КонтекстЭДОКлиент Экспорт;

&НаКлиенте
// Переменная используется механизмом длительных операций алкоотчетности.
Перем СтруктураВспомДанныхДлитОперацииАЛКО Экспорт;

&НаКлиенте
// Переменная используется извне формы механизмом длительных операций алкоотчетности.
Перем ПараметрыОбработчикаОжидания Экспорт;

&НаКлиенте
// Переменная используется извне формы механизмом длительных операций алкоотчетности.
Перем ОповещениеОЗавершенииДействия Экспорт;

&НаКлиенте
Перем РезультатыАвтонастройки Экспорт;

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

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

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

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

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

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

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

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

#Область Отборы

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

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

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

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

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

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

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

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыЖурнал

&НаКлиенте
Процедура ОтчетыПометкаПриИзменении(Элемент)
	
	Если Элементы.ОтчетыПредставление.ТекущиеДанные <> Неопределено Тогда
		
		ТекущиеДанные = Элементы.ОтчетыПредставление.ТекущиеДанные;
		КоличествоОтмеченныхФлажком = КоличествоОтмеченныхФлажком + ?(ТекущиеДанные.Пометка, 1, -1);
		ИзменитьОформлениеФормы(ЭтотОбъект);
		
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПоказатьРезультатПоГиперссылке(ТекущиеДанные)
	
	Если ТекущиеДанные.ЭтоОтправка Тогда
		ПоказатьРезультатОтправкиПоГиперссылке(ТекущиеДанные);
	Иначе
		ПоказатьРезультатПроверкиПоГиперссылке(ТекущиеДанные);
	КонецЕсли;

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПроверитьВИнтернете(Команда)
	
	НачатьВыполнение(Команда);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПрерватьДействие(Команда)
	
	ПрерватьГрупповоеДействие = Истина;
	ПоказатьРезультатГрупповогоДействия();
	
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Функция ЭтоКомандаОтправить(Команда)
	Возврат Команда = Неопределено ИЛИ Команда.Имя = НСтр("ru = 'Отправить'");
КонецФункции

&НаКлиенте
Процедура Отправить(Команда)
	
	НачатьВыполнение(Команда);
	
КонецПроцедуры

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

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

&НаКлиенте
Функция ЭтоСобытиеОтправкиИлиПроверки(ИмяСобытия)

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

КонецФункции

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

&НаКлиентеНаСервереБезКонтекста
Функция ПризнакОшибки()
	
	Возврат НСтр("ru = 'Ошибка'");
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ПризнакУспеха()
	
	Возврат НСтр("ru = 'Успех'");
	
КонецФункции

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

&НаКлиенте
Процедура Подключаемый_ОтборСтатусЗавершениеВыбора()
	
	УстановитьОтборТаблицыПоСтатусу();
	ПоказатьДлительноеДействие(ЭтотОбъект, Ложь);
	
КонецПроцедуры

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

&НаКлиенте
Процедура Подключаемый_ПроверитьПередОтправкой()
	
	НачатьВыполнениеПроверки();
	
КонецПроцедуры

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

&НаКлиенте
Процедура Подключаемый_УстановитьФлажки()
	
	УстановитьПометку(Истина);
	ПоказатьДлительноеДействие(ЭтотОбъект, Ложь);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОтборКонтролирующийОрганПриИзменении()
	
	УстановитьОтборТаблицы(ЭтотОбъект, Новый Структура("ПредставлениеГосОргана", ПредставлениеКонтролирующегоОргана));
	ПоказатьДлительноеДействие(ЭтотОбъект, Ложь);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОтборПериодНачалоВыбора()
	
	УстановитьОтборТаблицыПоПериоду(ЭтотОбъект);
	ПоказатьДлительноеДействие(ЭтотОбъект, Ложь);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОтборВидОтчетаПриИзменении()
	
	УстановитьОтборТаблицы(ЭтотОбъект, Новый Структура("НаименованиеОтчета", ВидОтчета));
	ПоказатьДлительноеДействие(ЭтотОбъект, Ложь);
	
КонецПроцедуры

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

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

&НаКлиенте
Функция ВсеОрганы()
	
	ВсеОрганы = АктуализироватьСписокЗначений("ПредставлениеГосОргана");
	Возврат ВсеОрганы;
	
КонецФункции

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ДанныеФормыКоллекция(Форма)
	
	Таблица = Форма.ВсеОтчеты;
	
	Возврат Таблица;
	
КонецФункции

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ПоказыватьСтрокиСоВсемиСтатусами(Форма)
	
	// Нужно показывать строки со всеми статусами если ни один статус не выбран
	ПоказыватьСтрокиСоВсемиСтатусами = Истина;
	Для каждого СтрокаСтатуса Из Форма.Статусы Цикл
		Если СтрокаСтатуса.Пометка Тогда
			ПоказыватьСтрокиСоВсемиСтатусами = Ложь;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Возврат ПоказыватьСтрокиСоВсемиСтатусами;
	
КонецФункции

&НаКлиенте
Функция ТекстПредупрежденияОбОтправке()
	
	Текст = НСтр("ru = 'Сейчас начнется отправка отчетов.
          |В процессе отправки могут быть запрошены пароли от закрытых ключей.'");
	
	Возврат Текст;
	
КонецФункции

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

&НаКлиенте
Процедура НачатьВыполнениеОсновногоДействия(Команда = Неопределено) Экспорт
	
	Если ЭтоКомандаОтправить(Команда) Тогда
		ВыполняетсяОтправка = Истина;
		ВыполняетсяПроверка = Ложь;
	Иначе
		ВыполняетсяОтправка = Ложь;
		ВыполняетсяПроверка = Истина;
	КонецЕсли;
	
	ВыполняетсяОтправкаИлиПроверка = Истина;
	ПрерватьГрупповоеДействие = Ложь;

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ИзменитьОформлениеФормыПриСтарте()
	
	ЗаблокироватьЭлементы(Истина);
	АктивизироватьСтраницу(Элементы.СтраницыШапки, Элементы.СтраницаОсновногоДействия);
	ИзменитьОформлениеФормы(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура НачатьВыполнениеПроверки()
	
	РезультатПроверкиНаСервере = ВыполнитьПредварительнуюПроверку();
	ВыполнитьОсновнуюПроверку(Неопределено, РезультатПроверкиНаСервере);
	
КонецПроцедуры

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

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

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

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

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

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

	Возврат ДополнительныеПараметры;
	
КонецФункции

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

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

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

	Если Ошибки.Найти(ДополнительныеПараметры) = Неопределено Тогда
		Ошибки.Добавить(ДополнительныеПараметры);
	КонецЕсли;
	
КонецПроцедуры

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

КонецФункции

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтборТаблицыПоПериоду(Форма)
	
	ОтметитьСтрокиСПодходящимПериодом(Форма);
	УстановитьОтборТаблицы(Форма, Новый Структура("ПериодДляОтбораБулево", Истина));
	
КонецПроцедуры

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

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

&НаКлиенте
Функция РезультатОтправкиПриПустойОшибке()
	
	Если ВыполняетсяОтправка Тогда
		Возврат РезультатОтправкиПриПустойОтправке();
	Иначе
		Возврат РезультатОтправкиПриПустойПроверке();
	КонецЕсли;
	
КонецФункции

&НаКлиенте
Функция РезультатОтправкиПриПустойОтправке()
	
	Возврат НСтр("ru = 'Отчет не отправлен'");
	
КонецФункции

&НаКлиенте
Функция РезультатОтправкиПриПустойПроверке()
	
	Возврат НСтр("ru = 'Отчет не проверен'");
	
КонецФункции

&НаКлиенте
Функция РезультатОтправкиПриУспехе()
	
	Возврат НСтр("ru = 'Отправлено'");
	
КонецФункции

&НаКлиенте
Процедура ИнкрементироватьРезультат(Успех)
	
	Если ПараметрыГрупповойОтправки = Неопределено Тогда
		Возврат;
	КонецЕсли;
		
	Если Успех Тогда
		УспешноОбработанныхОтчетов = ПараметрыГрупповойОтправки.УспешноОбработанныхОтчетов + 1;
		ПараметрыГрупповойОтправки.Вставить("УспешноОбработанныхОтчетов", УспешноОбработанныхОтчетов);
	Иначе
		НеуспешноОбработанныхОтчетов = ПараметрыГрупповойОтправки.НеуспешноОбработанныхОтчетов + 1;
		ПараметрыГрупповойОтправки.Вставить("НеуспешноОбработанныхОтчетов", НеуспешноОбработанныхОтчетов);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформлениеСтраницыОтправка(Форма)
	
	ИзменитьОформлениеБубликаОтправки(Форма);
	
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Функция ПодстрокаВремяСтарта(Форма)
	
	ПараметрыГрупповойОтправки = Форма.ПараметрыГрупповойОтправки;
	
	ВремяНачалаОтправки = ПараметрыГрупповойОтправки.ВремяНачалаОтправки;

	Если Форма.ВыполняетсяОтправка Тогда
		Текст = СтрШаблон(НСтр("ru = 'Отправка отчетов запущена в %1.'"), Формат(ВремяНачалаОтправки, "ДФ=HH:mm"));
	Иначе
		Текст = СтрШаблон(НСтр("ru = 'Проверка отчетов запущена в %1.'"), Формат(ВремяНачалаОтправки, "ДФ=HH:mm"));
	КонецЕсли;
	
	Возврат Текст;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ПодстрокаСостояниеДействия(Форма)
	
	ПараметрыГрупповойОтправки = Форма.ПараметрыГрупповойОтправки;
	
	НомерОтчета = Строка(ПараметрыГрупповойОтправки.НомерОтчета + 1);
	Всего = Строка(ПараметрыГрупповойОтправки.Всего);
	
	Если Форма.ВыполняетсяОтправка Тогда
		Подстрока1 = НСтр("ru = 'Отправляется отчет '");
	Иначе
		Подстрока1 = НСтр("ru = 'Проверяется отчет '");
	КонецЕсли;
	Подстрока2 = Новый ФорматированнаяСтрока(НомерОтчета, Новый Шрифт( , , Истина));
	Подстрока3 = НСтр("ru = ' из '");
	Подстрока4 = Новый ФорматированнаяСтрока(Всего, Новый Шрифт( , , Истина));
	
	ИтоговаяПодстрока = Новый ФорматированнаяСтрока(Подстрока1, Подстрока2, Подстрока3, Подстрока4, ".");
	
	Возврат ИтоговаяПодстрока;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ПодстрокаСколькоНеВыполнено(Форма)
	
	ПараметрыГрупповойОтправки = Форма.ПараметрыГрупповойОтправки;
	
	НеуспешноОбработанныхОтчетов = ПараметрыГрупповойОтправки.НеуспешноОбработанныхОтчетов;
	
	Если НеуспешноОбработанныхОтчетов = 0 ИЛИ Форма.ВыполняетсяПроверка Тогда
		ИтоговаяПодстрока = "";
	Иначе
		
		НеуспешноОбработанныхОтчетов = Строка(НеуспешноОбработанныхОтчетов);
		
		Подстрока1 = Новый ФорматированнаяСтрока(НеуспешноОбработанныхОтчетов, Новый Шрифт( , , Истина));
		Подстрока2 = ДлительнаяОтправкаКлиентСервер.ПредметИсчисленияБезЧисла(
			НеуспешноОбработанныхОтчетов,
			НСтр("ru = 'отчет'"),
			НСтр("ru = 'отчета'"),
			НСтр("ru = 'отчетов'"),
			"м");
		Подстрока3 = НСтр("ru = 'отправить не удалось.'");
			
		ИтоговаяПодстрока = Новый ФорматированнаяСтрока(Подстрока1, " ", Подстрока2, " ", Подстрока3);
		
	КонецЕсли;
	
	Возврат ИтоговаяПодстрока;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформлениеСтраницыОтборы(Форма)
	
	ИзменитьОформлениеСчетчика(Форма);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформлениеФормы(Форма)
	
	ИзменитьОформлениеСтраницыОтборы(Форма);
	ИзменитьОформлениеСтраницыОтправка(Форма);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ИзменитьОформлениеСчетчика(Форма)
	
	Подстрока1 = НСтр("ru = 'Выберите отчеты к отправке, используя отборы и флажки.'");
	Подстрока1_1 = Новый ФорматированнаяСтрока(Символы.ПС, Новый Шрифт( , 4));
	Подстрока2 = НСтр("ru = 'Выбрано: '");
	Подстрока3 = Новый ФорматированнаяСтрока(Формат(Форма.КоличествоОтмеченныхФлажком, "ЧН=0; ЧГ=3,0"), Новый Шрифт( , , Истина));
	Подстрока4 = НСтр("ru = ' из '");
	Подстрока5 = Новый ФорматированнаяСтрока(Формат(Форма.ВсеОтчеты.Количество(), "ЧН=0; ЧГ=3,0"), Новый Шрифт( , , Истина));
	
	Форма.Счетчик = Новый ФорматированнаяСтрока(
		Подстрока1,
		Символы.ПС,
		Подстрока1_1,
		Подстрока2,
		Подстрока3,
		Подстрока4,
		Подстрока5);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_НачатьВыполнениеОсновногоДействия()
	
	ВыполнитьПодготовкуКНачалуГрупповогоДействия();
	ИзменитьОформлениеФормы(ЭтотОбъект);
	ОбработатьСледующийОтчет();
	
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Функция ДанныеСтрокиСтруктурой(ДанныеСтроки)
	
	НоваяСтруктура = Новый Структура;
	Для каждого КлючЗначение Из ШаблонСтруктуры Цикл
		НоваяСтруктура.Вставить(КлючЗначение.Ключ, Неопределено);
	КонецЦикла;  

	ЗаполнитьЗначенияСвойств(НоваяСтруктура, ДанныеСтроки);
	НоваяСтруктура.Вставить("Идентификатор", ДанныеСтроки.ПолучитьИдентификатор());
	
	Возврат НоваяСтруктура;
	
КонецФункции

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

	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура СброситьФлагНачалаДействия(Форма)
	
	Форма.ВыполняетсяОтправка = Ложь;
	Форма.ВыполняетсяПроверка = Ложь;
	Форма.ВыполняетсяОтправкаИлиПроверка = Ложь;
	
КонецПроцедуры

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

	ИдентификаторТекущейСтроки = ПараметрыГрупповойОтправки.ОбрабатываемыеСтроки[НомерТекущегоОтчета];
	Элементы.ОтчетыПредставление.ТекущаяСтрока = ИдентификаторТекущейСтроки;
	ТекущиеДанные = ВсеОтчеты.НайтиПоИдентификатору(ИдентификаторТекущейСтроки);
	
	ДанныеТекущегоОтчета = ДанныеСтрокиСтруктурой(ТекущиеДанные);
	
	Если ВыполняетсяОтправка Тогда
		ТекущиеДанные.РезультатСтрокой = НСтр("ru = 'Отправляется...'");
	Иначе
		ТекущиеДанные.РезультатСтрокой = НСтр("ru = 'Проверяется...'");
	КонецЕсли;
	
	// Чтобы вывод статуса не залипал с проверкой
	ПодключитьОбработчикОжидания("Подключаемый_ВыполнитьОсновноеДействиеСОднимОтчетом", 0.1, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьОсновноеДействиеСОднимОтчетом()
	
	Если ВыполняетсяОтправка Тогда
		
		ВыполнитьОсновноеДействиеСОднимОтчетомПослеАвтонастройки();

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

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

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

	Иначе
		
		РегламентированнаяОтчетностьКлиент.ОнлайнПроверка(ЭтотОбъект, КонтекстЭДОКлиент, ДанныеТекущегоОтчета, Истина);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьОформлениеФормыПриЗавершенииГрупповогоДействия()
	
	ЗаблокироватьЭлементы(Ложь);
	
	АктивизироватьСтраницу(Элементы.СтраницыШапки, Элементы.СтраницаСчетчик);
	ИзменитьОформлениеФормы(ЭтотОбъект);
	
КонецПроцедуры

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

	ДлительностьВМиллисекундах = ПараметрыГрупповойОтправки.ВремяЗавершенияОтправкиВМиллисекундах
		- ПараметрыГрупповойОтправки.ВремяНачалаОтправкиВМиллисекундах;
		
	ПараметрыГрупповойОтправки.Вставить("Длительность", Длительность);
	ПараметрыГрупповойОтправки.Вставить("ДлительностьВМиллисекундах", ДлительностьВМиллисекундах);
	
	ЗалогироватьДлительнуюОперацию(ПараметрыГрупповойОтправки, Ложь, ВыполняетсяОтправка, ВыполняетсяПроверка);
	
	ИзменитьОформлениеФормыПриЗавершенииГрупповогоДействия();
	Если ВыполняетсяОтправка Тогда
		Оповестить("Завершение групповой отправки");
	КонецЕсли;
	
	ПодключитьОбработчикОжидания("Подключаемый_ПоказатьФормуРезультатаГрупповойОтправки", 0.1, Истина);
		
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПоказатьФормуРезультатаГрупповойОтправки()
	
	ПоказатьФормуРезультатаГрупповойОтправки();
		
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Функция ВыбранХотяБыОдин()
	
	Возврат ВыбраныеСтроки(ЭтотОбъект).Количество() > 0;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ВыбраныеСтроки(Форма)
	
	Отбор = Новый Структура();
	Отбор.Вставить("Пометка", Истина);
	
	НайденныеСтроки = ДанныеФормыКоллекция(Форма).НайтиСтроки(Отбор);
		
	Возврат НайденныеСтроки;
	
КонецФункции

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

&НаКлиенте
Процедура ПриОткрытииЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	КонтекстЭДОКлиент = Результат.КонтекстЭДО;
	
	НачатьПолучениеТаблицыПриОткрытии();
	
КонецПроцедуры

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

&НаКлиенте
Процедура Подключаемый_ЗаполнитьТаблицуПриОткрытии()
	
	ЗаполнитьТаблицуНаСервере();

	Если ЗначениеЗаполнено(ОтчетыДляОтбора) Тогда
		ВключитьОтборПоОтчетам();
	КонецЕсли;
	
	ИзменитьОформлениеФормы(ЭтотОбъект);
	ПоказатьДлительноеДействие(ЭтотОбъект, Ложь);
	
КонецПроцедуры

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьСписокВидовОтчетаПриОткрытии(Форма)
	
	МассивВидовОтчетов = АктуализироватьСписокЗначений("НаименованиеОтчета");
	Форма.Элементы.ОтборВидОтчета.СписокВыбора.ЗагрузитьЗначения(МассивВидовОтчетов);
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция АктуализироватьСписокЗначений(ИмяРеквизита)
	
	Запрос = ЗапросДляВыбораПолныхДанных();
	
	СхемаЗапроса = Новый СхемаЗапроса;
	СхемаЗапроса.УстановитьТекстЗапроса(Запрос.Текст);
	
	ТекущийЗапрос 	= СхемаЗапроса.ПакетЗапросов[0];
	Оператор 		= ТекущийЗапрос.Операторы[0];
	
	ТекущийЗапрос.Индекс.Добавить(ИмяРеквизита);
	Оператор.ВыбиратьРазличные = Истина;
	
	Колонки = ТекущийЗапрос.Колонки;
	ВыбираемыеПоля = Оператор.ВыбираемыеПоля;
	
	Сч = 0;
	Пока Сч < Колонки.Количество() Цикл
		Колонка = Колонки[Сч];
		Если Колонка.Псевдоним <> ИмяРеквизита Тогда
			Колонки.Удалить(Сч);
		Иначе
			Сч = Сч + 1;
		КонецЕсли;
	КонецЦикла;
	
	ТекущийЗапрос.Порядок.Добавить(ИмяРеквизита);
	
	Запрос.Текст = СхемаЗапроса.ПолучитьТекстЗапроса();
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	
	Возврат РезультатЗапроса.ВыгрузитьКолонку(ИмяРеквизита);
		
КонецФункции

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

	Элементы.ОтчетыПредставление.ОтборСтрок = Новый ФиксированнаяСтруктура(Отбор);

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

&НаКлиентеНаСервереБезКонтекста
Процедура ПересчитатьКоличествоОтмеченныхФлажком(Форма)
	
	Отбор = Новый Структура();
	Отбор.Вставить("Пометка", Истина);
	
	НайденныеСтроки = ДанныеФормыКоллекция(Форма).НайтиСтроки(Отбор);
	
	Форма.КоличествоОтмеченныхФлажком = НайденныеСтроки.Количество();
	
	ИзменитьОформлениеФормы(Форма);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция ИмяСостоянияНеОтправленных()
	
	Возврат НСтр("ru = 'Отчеты с отметкой'");
	
КонецФункции

&НаСервереБезКонтекста
Функция ТекущаяДатаНаСервере()
	
	Возврат ТекущаяДатаСеанса();
	
КонецФункции

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

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

&НаКлиенте
Процедура ЗаполнитьТаблицуНаСервере()
	
	ЗаполнитьПолнуюТаблицуНаСервере(); // Сервер
	ЗаполнитьСписокВидовОтчетаПриОткрытии(ЭтотОбъект);
	СформироватьСписокВыбораСтатусов(ЭтотОбъект);
	ПрименитьПараметрыОтбораПриОткрытии(ЭтотОбъект);
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПоказатьКритическиеОшибкиПоСсылке(Ссылка) Экспорт
	
	КонтекстЭДОКлиент.ПоказатьКритическиеОшибкиПоСсылке(Ссылка);
	
КонецПроцедуры

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

#Область УсловноеОформление

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

&НаСервере
Процедура УстановитьОформлениеЦветаРезультата(Поле, Успех)

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

&НаСервере
Процедура УстановитьОформлениеРезультатаОтправки()
	
	// Видимость
	УстановитьУсловноеОформлениеНаОдноПоле(
		"РезультатСтрокой", 
		"ВсеОтчеты.РезультатСтрокой", 
		ВидСравненияКомпоновкиДанных.НеЗаполнено, 
		Неопределено, 
		"Видимость",
		Ложь);
		
	УстановитьУсловноеОформлениеНаОдноПоле(
		"РезультатГипессылкой", 
		"ВсеОтчеты.РезультатСтрокой", 
		ВидСравненияКомпоновкиДанных.Заполнено, 
		Неопределено, 
		"Видимость",
		Ложь);
		
	УстановитьОформлениеЦветаРезультата("РезультатСтрокой", Истина);
	УстановитьОформлениеЦветаРезультата("РезультатСтрокой", Ложь);
	
	УстановитьОформлениеЦветаРезультата("РезультатГипессылкой", Истина);
	УстановитьОформлениеЦветаРезультата("РезультатГипессылкой", Ложь);
		
КонецПроцедуры

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

&НаСервере
Процедура УстановитьОформлениеВида()
	
	УстановитьУсловноеОформлениеНаОдноПоле(
		"ОтчетыВид", 
		"ВсеОтчеты.ВариантОтчета", 
		ВидСравненияКомпоновкиДанных.НеЗаполнено, 
		Неопределено, 
		"Текст", 
		"П");
		
	УстановитьУсловноеОформлениеНаОдноПоле(
		"ОтчетыВид", 
		"ВсеОтчеты.ВариантОтчета", 
		ВидСравненияКомпоновкиДанных.Равно, 
		"-", 
		"Текст", 
		"П");
	
КонецПроцедуры

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

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

&НаСервере
Процедура УстановитьЦветТекстаСтатуса(Значение, Цвет)
	
	УстановитьУсловноеОформлениеНаОдноПоле(
		"ОтчетыСтатус", 
		"ВсеОтчеты.СостояниеСдачиОтчетности", 
		ВидСравненияКомпоновкиДанных.Равно, 
		Значение, 
		"ЦветТекста", 
		Цвет);

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

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

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

#Область Запросы

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

&НаСервереБезКонтекста
Функция ДобавитьУсловиеЗапроса(ТекстЗапроса, Условие)
	
	СхемаЗапроса = Новый СхемаЗапроса;
	СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
	
	ТекущийЗапрос 	= СхемаЗапроса.ПакетЗапросов[0];
	Оператор 		= ТекущийЗапрос.Операторы[0];
	Отбор 			= Оператор.Отбор;
	
	Отбор.Добавить(Условие);
	Возврат СхемаЗапроса.ПолучитьТекстЗапроса();	
	
КонецФункции

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

&НаСервере
Процедура ЗаполнитьПолнуюТаблицуНаСервере()
	
	Таблица = ЗаполнитьПолнуюТаблицу();
	ЗначениеВРеквизитФормы(Таблица, "ВсеОтчеты");
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ЗаполнитьПолнуюТаблицу()
	
	Запрос = ЗапросДляВыбораПолныхДанных();
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	
	Возврат РезультатЗапроса;
	
КонецФункции

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

&НаСервереБезКонтекста
Функция ЗапросДляВыбораПолныхДанных()
	
	// Запрос такой же, как в общей форме РегламентированнаяОтчетность в реквизите отчеты
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	РегистрСведенийЖурналОтчетовСтатусы.Ссылка КАК РегламентированныйОтчет,
		|	РегистрСведенийЖурналОтчетовСтатусы.ДатаНачала КАК ДатаНачала,
		|	РегистрСведенийЖурналОтчетовСтатусы.ДатаОкончания КАК ДатаОкончания,
		|	РегистрСведенийЖурналОтчетовСтатусы.ФинансовыйПериод КАК ФинансовыйПериод,
		|	(10000000 + РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1, 1, 1), РегистрСведенийЖурналОтчетовСтатусы.ДатаОкончания, ДЕНЬ)) * 10000000 + РАЗНОСТЬДАТ(РегистрСведенийЖурналОтчетовСтатусы.ДатаНачала, ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59), ДЕНЬ) КАК ФинансовыйПериодПорядок,
		|	РегистрСведенийЖурналОтчетовСтатусы.ВариантОтчета КАК ВариантОтчета,
		|	РегистрСведенийЖурналОтчетовСтатусы.Организация КАК Организация,
		|	РегистрСведенийЖурналОтчетовСтатусы.КодКонтролирующегоОргана КАК КодКонтролирующегоОргана,
		|	РегистрСведенийЖурналОтчетовСтатусы.Статус КАК Статус,
		|	РегистрСведенийЖурналОтчетовСтатусы.ПредставлениеКонтролирующегоОргана КАК ПредставлениеГосОргана,
		|	РегистрСведенийЖурналОтчетовСтатусы.НаименованиеОтчета КАК НаименованиеОтчета,
		|	ПОДСТРОКА(РегистрСведенийЖурналОтчетовСтатусы.Комментарий, 1, 100) КАК Комментарий,
		|	РегистрСведенийЖурналОтчетовСтатусы.ИндексКартинки КАК ИндексКартинки,
		|	РегистрСведенийЖурналОтчетовСтатусы.СостояниеСдачиОтчетности КАК СостояниеСдачиОтчетности,
		|	РегистрСведенийЖурналОтчетовСтатусы.НеОтправляетсяВКонтролирующийОрган КАК НеОтправляетсяВКонтролирующийОрган,
		|	РегистрСведенийЖурналОтчетовСтатусы.ЕстьКритическиеОшибкиОтправки КАК ЕстьКритическиеОшибкиОтправки,
		|	РегистрСведенийЖурналОтчетовСтатусы.Непрочтенное КАК Непрочтенное,
		|	ВЫБОР
		|		КОГДА РегистрСведенийЖурналОтчетовСтатусы.СостояниеСдачиОтчетности = ЗНАЧЕНИЕ(Перечисление.СостояниеСдачиОтчетности.ДокументооборотНеНачат)
		|				ИЛИ РегистрСведенийЖурналОтчетовСтатусы.СостояниеСдачиОтчетности = ЗНАЧЕНИЕ(Перечисление.СостояниеСдачиОтчетности.ПустаяСсылка)
		|			ТОГДА ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
		|		ИНАЧЕ РегистрСведенийЖурналОтчетовСтатусы.ДатаОтправки
		|	КОНЕЦ КАК ДатаОтправки,
		|	ЛОЖЬ КАК Пометка,
		|	"""" КАК РезультатГипессылкой,
		|	"""" КАК РезультатСтрокой,
		|	"""" КАК РезультатДанные,
		|	"""" КАК РезультатПризнак,
		|	РегистрСведенийЖурналОтчетовСтатусы.ВидКонтролирующегоОргана КАК ВидКонтролирующегоОргана,
		|	&НовыйСтатус КАК СтатусДляОтбора,
		|	&НовыйСтатус КАК СтатусДляОтбораИсходный,
		|	ИСТИНА КАК СтатусДляОтбораБулево,
		|	ИСТИНА КАК СтатусДляОтбораИсходныйБулево,
		|	ИСТИНА КАК ПериодДляОтбораБулево,
		|	ЛОЖЬ КАК ЭтоОтправка,
		|	ЛОЖЬ КАК ЭтоПроверка,
		|	УчетныеЗаписиДокументооборота.СпецоператорСвязи КАК СпецоператорСвязи,
		|	Организации.УчетнаяЗаписьОбмена КАК УчетнаяЗаписьОбмена,
		|	Организации.ВидОбменаСКонтролирующимиОрганами КАК ВидОбменаСКонтролирующимиОрганами
		|ИЗ
		|	РегистрСведений.ЖурналОтчетовСтатусы КАК РегистрСведенийЖурналОтчетовСтатусы
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК Организации
		|			ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиДокументооборота КАК УчетныеЗаписиДокументооборота
		|			ПО Организации.УчетнаяЗаписьОбмена = УчетныеЗаписиДокументооборота.Ссылка
		|		ПО РегистрСведенийЖурналОтчетовСтатусы.Организация = Организации.Ссылка
		|ГДЕ
		|	НЕ РегистрСведенийЖурналОтчетовСтатусы.Скрыт
		|	И РегистрСведенийЖурналОтчетовСтатусы.ВидКонтролирующегоОргана В(&ВидКонтролирующегоОргана) 
		|	И &ДопУсловие1 
		|	И &ДопУсловие2";
	
	ИсключитьБухОтчетыБГУ(Запрос.Текст);
	ДобавитьПодзапросДляСтатуса(Запрос.Текст);
	УстановитьПараметрыЗапроса(Запрос);
	Возврат Запрос;
	
КонецФункции

&НаСервереБезКонтекста
Процедура ИсключитьБухОтчетыБГУ(Текст)
	
	ИсключитьБухОтчетБГУ(Текст, "Документ.УниверсальныйРегламентированныйОтчет", "&ДопУсловие1");
	ИсключитьБухОтчетБГУ(Текст, "Документ.ЭлектронныйДокументБухгалтерскийОтчет", "&ДопУсловие2");
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ИсключитьБухОтчетБГУ(Текст, Тип, ИмяУсловия)
	
	Если Метаданные.НайтиПоПолномуИмени(Тип) = Неопределено Тогда
		ДопУсловие = "ИСТИНА";
	Иначе
		ДопУсловие = "НЕ РегистрСведенийЖурналОтчетовСтатусы.Ссылка ССЫЛКА %1";
		ДопУсловие = СтрШаблон(ДопУсловие, Тип);
	КОнецЕсли;
	
	Текст = СтрЗаменить(Текст, ИмяУсловия, ДопУсловие);

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

&НаСервереБезКонтекста
Процедура УстановитьПараметрыЗапроса(Запрос)

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

&НаСервереБезКонтекста
Функция ПараметрСтатусыВРаботе()
	
	СтатусыВРаботе = Новый Массив;
	СтатусыВРаботе.Добавить(ИнтерфейсыВзаимодействияБРОКлиентСервер.ПредставлениеСтатусаВРаботе());
	СтатусыВРаботе.Добавить(ИнтерфейсыВзаимодействияБРОКлиентСервер.ПредставлениеСтатусаНеОтправлено());
	
	Возврат СтатусыВРаботе;
	
КонецФункции

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

&НаКлиентеНаСервереБезКонтекста
Процедура АктивизироватьСтраницу(МногостраничныйЭлемент, ТекущаяСтраница) Экспорт
	
	МногостраничныйЭлемент.ТекущаяСтраница 	= ТекущаяСтраница;
	
КонецПроцедуры

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

#Область Логирование

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

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

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

&НаКлиенте
Процедура Подключаемый_ПроверитьВыполнениеДлительнойОперацииНаКлиенте() Экспорт
	
	РегламентированнаяОтчетностьКлиент.Подключаемый_ПроверитьВыполнениеДлительнойАлкоОперацииНаКлиенте(ЭтотОбъект);
	
КонецПроцедуры

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


Связанные материалы