Загрузка данных


// [+] Начало фрагмента: Добавлен, Гаврилов Максим Сергеевич, 17.07.2026 {
#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ПеревестиОбращенияВСостояниеВозвращено(Команда)
	
	Если Не ПроверитьЗаполнение() Тогда
		Возврат;
	КонецЕсли;
	
	ОчиститьСообщения();
	
	ПеревестиОбращенияВСостояниеВозвращеноНаСервере(Обращение);

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

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

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

&НаСервереБезКонтекста
Процедура ПеревестиОбращенияВСостояниеВозвращеноНаСервере(Обращение)
	
	СостояниеОбращенияЗавершено = Справочники.СостоянияИнцидентов.НайтиПоКоду("12");
	СостояниеОбращениеВозвращено = Справочники.СостоянияИнцидентов.НайтиПоКоду("13");
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ДействияВходящихПисемПоОбращениям.ИспользуемыйДокумент КАК Обращение,
		|	ДействияВходящихПисемПоОбращениям.ИспользуемыйДокумент.Номер КАК НомерОбращения,
		|	МАКСИМУМ(ДействияВходящихПисемПоОбращениям.ВходящееПисьмо.Дата) КАК ВходящееПисьмоДата,
		|	ДействияВходящихПисемПоОбращениям.ВходящееПисьмо КАК ВходящееПисьмо
		|ПОМЕСТИТЬ ВТ_ДанныеВходящихПисем
		|ИЗ
		|	РегистрСведений.ДействияВходящихПисемПоОбращениям КАК ДействияВходящихПисемПоОбращениям
		|ГДЕ
		|	ДействияВходящихПисемПоОбращениям.ИспользуемыйДокумент = &Обращение
		|	И ДействияВходящихПисемПоОбращениям.ИспользуемыйДокумент.Состояние = &Состояние
		|	И НЕ ДействияВходящихПисемПоОбращениям.ВходящееПисьмо.ФД_ВозвратОбращения
		|
		|СГРУППИРОВАТЬ ПО
		|	ДействияВходящихПисемПоОбращениям.ИспользуемыйДокумент,
		|	ДействияВходящихПисемПоОбращениям.ИспользуемыйДокумент.Номер,
		|	ДействияВходящихПисемПоОбращениям.ВходящееПисьмо
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ДействияВходящихПисемПоОбращениям.ИспользуемыйДокумент КАК Обращение,
		|	ДействияВходящихПисемПоОбращениям.ВходящееПисьмо.Тема КАК ТемаВходящегоПисьма,
		|	ВТ_ДанныеВходящихПисем.НомерОбращения КАК НомерОбращения,
		|	ВТ_ДанныеВходящихПисем.ВходящееПисьмоДата КАК ВходящееПисьмоДата,
		|	ВТ_ДанныеВходящихПисем.ВходящееПисьмо КАК ВходящееПисьмо
		|ПОМЕСТИТЬ ВТ_ТемаИДатаВходящихПисем
		|ИЗ
		|	ВТ_ДанныеВходящихПисем КАК ВТ_ДанныеВходящихПисем
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДействияВходящихПисемПоОбращениям КАК ДействияВходящихПисемПоОбращениям
		|		ПО ВТ_ДанныеВходящихПисем.Обращение = ДействияВходящихПисемПоОбращениям.ИспользуемыйДокумент
		|			И ВТ_ДанныеВходящихПисем.ВходящееПисьмоДата = ДействияВходящихПисемПоОбращениям.ВходящееПисьмо.Дата
		|ГДЕ
		|	ДействияВходящихПисемПоОбращениям.ИспользуемыйДокумент = &Обращение
		|	И ДействияВходящихПисемПоОбращениям.ИспользуемыйДокумент.Состояние = &Состояние
		|
		|СГРУППИРОВАТЬ ПО
		|	ДействияВходящихПисемПоОбращениям.ИспользуемыйДокумент,
		|	ДействияВходящихПисемПоОбращениям.ВходящееПисьмо.Тема,
		|	ВТ_ДанныеВходящихПисем.НомерОбращения,
		|	ВТ_ДанныеВходящихПисем.ВходящееПисьмоДата,
		|	ВТ_ДанныеВходящихПисем.ВходящееПисьмо
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	МАКСИМУМ(СообщенияИУведомления.ДатаРегистрации) КАК ДатаРегистрации,
		|	ВТ_ТемаИДатаВходящихПисем.Обращение КАК Обращение
		|ПОМЕСТИТЬ ВТ_ПредытогДата
		|ИЗ
		|	ВТ_ТемаИДатаВходящихПисем КАК ВТ_ТемаИДатаВходящихПисем
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СообщенияИУведомления КАК СообщенияИУведомления
		|		ПО ВТ_ТемаИДатаВходящихПисем.Обращение = СообщенияИУведомления.ИспользуемыйДокумент
		|			И (СообщенияИУведомления.Заголовок ПОДОБНО ""%Работы по вашему обращению%завершены:%"")
		|
		|СГРУППИРОВАТЬ ПО
		|	ВТ_ТемаИДатаВходящихПисем.Обращение
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	СообщенияИУведомления.ИспользуемыйДокумент КАК Обращение,
		|	ВТ_ТемаИДатаВходящихПисем.ТемаВходящегоПисьма КАК ТемаВходящегоПисьма,
		|	ВТ_ТемаИДатаВходящихПисем.НомерОбращения КАК НомерОбращения,
		|	ВТ_ТемаИДатаВходящихПисем.ВходящееПисьмоДата КАК ВходящееПисьмоДата,
		|	ВТ_ПредытогДата.ДатаРегистрации КАК ДатаРегистрации,
		|	ВТ_ТемаИДатаВходящихПисем.ВходящееПисьмо КАК ВходящееПисьмо
		|ПОМЕСТИТЬ ВТ_Предытог
		|ИЗ
		|	ВТ_ТемаИДатаВходящихПисем КАК ВТ_ТемаИДатаВходящихПисем
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СообщенияИУведомления КАК СообщенияИУведомления
		|		ПО ВТ_ТемаИДатаВходящихПисем.Обращение = СообщенияИУведомления.ИспользуемыйДокумент
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ПредытогДата КАК ВТ_ПредытогДата
		|		ПО ВТ_ТемаИДатаВходящихПисем.Обращение = ВТ_ПредытогДата.Обращение
		|
		|СГРУППИРОВАТЬ ПО
		|	СообщенияИУведомления.ИспользуемыйДокумент,
		|	ВТ_ТемаИДатаВходящихПисем.ТемаВходящегоПисьма,
		|	ВТ_ТемаИДатаВходящихПисем.НомерОбращения,
		|	ВТ_ТемаИДатаВходящихПисем.ВходящееПисьмоДата,
		|	ВТ_ПредытогДата.ДатаРегистрации,
		|	ВТ_ТемаИДатаВходящихПисем.ВходящееПисьмо
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ВТ_Предытог.Обращение КАК Обращение,
		|	ВТ_Предытог.ТемаВходящегоПисьма КАК ТемаВходящегоПисьма,
		|	ВТ_Предытог.НомерОбращения КАК НомерОбращения,
		|	ВТ_Предытог.ВходящееПисьмо КАК ВходящееПисьмо
		|ИЗ
		|	ВТ_Предытог КАК ВТ_Предытог";
	
	Запрос.УстановитьПараметр("Обращение", Обращение);
	Запрос.УстановитьПараметр("Состояние", СостояниеОбращенияЗавершено);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Если РезультатЗапроса.Пустой() Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = НСтр("ru = 'Нет данных для обработки результата:
			|Возможные причины:
			|1. По данному обращению нет входящих электронных писем
			|2. Выбрано обращение, отличное от статуса ""Завершено""
			|3. Данное обращение не подходит под условие изменения состояния'");
			Сообщение.Сообщить();
		Возврат;
	КонецЕсли;
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Успех = Истина;
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		
		ТемаВходящегоПисьма = ВыборкаДетальныеЗаписи.ТемаВходящегоПисьма;
		НомерОбращения = ВыборкаДетальныеЗаписи.НомерОбращения;
		
		//Пытаемся найти в теме входящего письма строку вида:
		//RE: ... №-<номер обращения>
		СтрокаПоискаНайдена = СтрНачинаетсяС(ТемаВходящегоПисьма, "RE:") 
			И СтрЗаканчиваетсяНа(ТемаВходящегоПисьма, НомерОбращения)
			И СтрНайти(ТемаВходящегоПисьма, "завершены") > 0;
		
		Если Не СтрокаПоискаНайдена Тогда
			Успех = Ложь;
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = НСтр("ru = 'Данное обращение не подходит под условие изменения состояния'");
			Сообщение.Сообщить();
			Продолжить;
		КонецЕсли;
		
		ОбращениеОбъект = ВыборкаДетальныеЗаписи.Обращение.ПолучитьОбъект();
		ОбращениеОбъект.Состояние = СостояниеОбращениеВозвращено;
		ОбращениеОбъект.мЗагрузкаДанных = Истина; 
		
		ВходящееПисьмоОбъект = ВыборкаДетальныеЗаписи.ВходящееПисьмо.ПолучитьОбъект();
		ВходящееПисьмоОбъект.ФД_ВозвратОбращения = Истина;
		ВходящееПисьмоОбъект.ОбменДанными.Загрузка = Истина; 
		Попытка
			ОбращениеОбъект.Записать();
			ВходящееПисьмоОбъект.Записать();
		Исключение
			ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
			ЗаписьЖурналаРегистрации(НСтр("ru = 'Ошибка изменения состояния обращения'"),
				УровеньЖурналаРегистрации.Ошибка,
				,
				ВыборкаДетальныеЗаписи.Обращение,
				ТекстОшибки
				);
			
			Успех = Ложь;
			
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = НСтр("ru = 'Не удалось изменить состояние обращения:
				|Подробная информация находится в Журнале регистрации'");
			Сообщение.Сообщить();
			Прервать;
			
		КонецПопытки;
	КонецЦикла;
	
	Если Успех Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = НСтр("ru = 'Успешное изменение состояния обращения'");
		Сообщение.Сообщить();
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти // [-] Окончание фрагмента: Добавлен, Гаврилов Максим Сергеевич, 17.07.2026 }