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

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

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

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

	УникальныйИдентификаторРодителя = Параметры.УникальныйИдентификаторРодителя;
	
	ИнициализироватьТаблицу(Параметры.Сканы);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗагрузитьСДиска_ПослеВыбора(Результат, ВходящийКонтекст) Экспорт

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

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

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

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

	НоваяСтрока = ТаблицаВложений.Добавить();
	НоваяСтрока.Значение      = Свойства;
	НоваяСтрока.Представление = Свойства.Имя;
	НоваяСтрока.Пометка       = Пометка;
	НоваяСтрока.Размер        = ПредставлениеРазмераФайла(Свойства.Размер, 2);
	
КонецПроцедуры

&НаСервере
Функция ПредставлениеРазмераФайла(РазмерВБайтах, Разрядность = 0) Экспорт
	
	Размер = 0;
	РазмерВКилобайтах = Окр(РазмерВБайтах / 1024, Разрядность);
	Если РазмерВБайтах = 0 Тогда
		Шаблон = НСтр("ru = '%1 Б'");
	ИначеЕсли РазмерВКилобайтах < 1000 Тогда
		Размер =  Окр(РазмерВКилобайтах, 0);
		Шаблон = НСтр("ru = '%1 КБ'");
	Иначе
		Размер = Окр(РазмерВКилобайтах / 1024, Разрядность);
		Шаблон = НСтр("ru = '%1 МБ'");
	КонецЕсли;
	
	Возврат СтрШаблон(Шаблон, Размер);
	
КонецФункции

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

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

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

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