Документооборот с контролирующими органами / Изменить тип входящего письма ПФР / Модуль формы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура УстановитьПометки(Команда)
	
	ИзменитьПометки(Истина);
	
КонецПроцедуры

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

	Оповестить("Смена категории отчета", Результат);
	
КонецПроцедуры

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьТаблицуПисем(МассивПисем)

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

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

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

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

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