&НаКлиенте
Перем КонтекстЭДОКлиент Экспорт;
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ВидыДокументов = Параметры.ВидыДокументов;
ИнициализироватьТаблицу(Параметры.Сканы);
ЗаполнитьСписокВыбораВидаДокументов();
УстановитьУсловноеОформление();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
УстановитьМодифицированность(ЭтотОбъект);
ОписаниеОповещения = Новый ОписаниеОповещения("ПриОткрытииЗавершение", ЭтотОбъект);
ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПередЗакрытием_Завершение",
ЭтотОбъект);
ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(
ОписаниеОповещения,
Отказ,
ЗавершениеРаботы);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ТаблицаВложенийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Элементы.ТаблицаВложений.ТекущиеДанные <> Неопределено Тогда
Если Поле.Имя = "ТаблицаВложенийПредставление" Тогда
СтандартнаяОбработка = Ложь;
ОперацииСФайламиЭДКОКлиент.ОткрытьФайл(
Элементы.ТаблицаВложений.ТекущиеДанные.Значение.Адрес,
Элементы.ТаблицаВложений.ТекущиеДанные.Значение.Имя);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТаблицаВложенийПриАктивизацииСтроки(Элемент)
Если Элементы.ТаблицаВложений.ТекущиеДанные <> Неопределено Тогда
АдресКартинкиПросмотр = Элементы.ТаблицаВложений.ТекущиеДанные.Значение.Адрес;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура АдресКартинкиПросмотрНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Элементы.ТаблицаВложений.ТекущиеДанные <> Неопределено Тогда
ОписаниеОповещения = Новый ОписаниеОповещения(
"ОткрытьКартинкуЗавершение",
ЭтотОбъект);
ТекущийФайл = Элементы.ТаблицаВложений.ТекущиеДанные;
ОперацииСФайламиЭДКОКлиент.ДанныеССервераВФайл(
ОписаниеОповещения,
ТекущийФайл.Значение.Адрес,
"." + ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ТекущийФайл.Значение.Имя),
Истина);
КонецЕСли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормы
&НаКлиенте
Процедура ТаблицаВложенийПослеУдаления(Элемент)
УстановитьМодифицированность(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ТаблицаВложенийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
ЗагрузитьСДиска();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Сохранить(Команда = Неопределено)
Если НЕ ПроверкаПройдена() Тогда
Возврат;
КонецЕсли;
Модифицированность = Ложь;
Результат = Новый Массив;
Для каждого СтрокаТаблицы Из ТаблицаВложений Цикл
Скан = Новый Структура;
Скан.Вставить("Размер", СтрокаТаблицы.Значение.Размер);
Скан.Вставить("Адрес", СтрокаТаблицы.Значение.Адрес);
Скан.Вставить("ИсходноеИмя", СтрокаТаблицы.Значение.Имя);
Скан.Вставить("Документ", ВидДокументаПоПредставлению(СтрокаТаблицы.ВидДокумента));
Результат.Добавить(Скан);
КонецЦикла;
Закрыть(Результат);
КонецПроцедуры
&НаКлиенте
Функция ВидДокументаПоПредставлению(Представление)
Для каждого ВидДокумента Из ВидыДокументов Цикл
Если ВидДокумента.Значение.Представление = Представление Тогда
Возврат ВидДокумента.Ключ;
КонецЕсли;
КонецЦикла;
Возврат "";
КонецФункции
&НаКлиенте
Функция ПроверкаПройдена()
ОчиститьСообщения();
Если ТаблицаВложений.Количество() = 0 Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Для сохранения добавьте хотя бы один скан'"));
Возврат Ложь;
КонецЕсли;
ЕстьОшибка = Ложь;
Для каждого Скан Из ТаблицаВложений Цикл
Если ЗначениеЗаполнено(Скан.ВидДокумента) Тогда
Если ВидДокументаПоПредставлению(Скан.ВидДокумента) = "" Тогда
ЕстьОшибка = Истина;
ШаблонОшибки = НСтр("ru = 'Для файла ""%1"" указан некорректный вид документа. Выберите вид документа из списка'");
ТекстОшибки = СтрШаблон(ШаблонОшибки, Скан.Представление);
ОбщегоНазначенияКлиент.СообщитьПользователю(
ТекстОшибки,
,
"ТаблицаВложений[" + ТаблицаВложений.Индекс(Скан) + "].ВидДокумента");
КонецЕсли;
Иначе
ЕстьОшибка = Истина;
ШаблонОшибки = НСтр("ru = 'Укажите вид документа для файла ""%1""'");
ТекстОшибки = СтрШаблон(ШаблонОшибки, Скан.Представление);
ОбщегоНазначенияКлиент.СообщитьПользователю(
ТекстОшибки,
,
"ТаблицаВложений[" + ТаблицаВложений.Индекс(Скан) + "].ВидДокумента");
КонецЕсли;
КонецЦикла;
Для каждого ВидДокумента Из ВидыДокументов Цикл
Если ВидДокумента.Значение.Видимость И ВидДокумента.Значение.ОдинФайл Тогда
КоличествоСканов = 0;
Для каждого Скан Из ТаблицаВложений Цикл
Если Скан.ВидДокумента = ВидДокумента.Значение.Представление Тогда
КоличествоСканов = КоличествоСканов + 1;
КонецЕсли;
Если КоличествоСканов > 1 Тогда
ЕстьОшибка = Истина;
ШаблонОшибки = НСтр("ru = 'Для вида документа ""%1"" может быть выбран только один файл. Удалите лишние файлы или укажите им другой вид документа'");
ТекстОшибки = СтрШаблон(ШаблонОшибки, ВидДокумента.Значение.Представление);
ОбщегоНазначенияКлиент.СообщитьПользователю(
ТекстОшибки,
,
"ТаблицаВложений[" + ТаблицаВложений.Индекс(Скан) + "].ВидДокумента");
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если ЕстьОшибка Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаКлиенте
Процедура ЗагрузитьСДиска(Команда = Неопределено)
ЗаголовокВыбораФайлов = НСтр("ru = 'Выберите скан-копии в заявление по 1С-Отчетности'");
ДопПараметры = ПараметрыПроцедурыВыбораФайлов();
ОписаниеОповещения = Новый ОписаниеОповещения(
"ЗагрузитьСДиска_ПослеВыбораФайлов",
ЭтотОбъект);
ОперацииСФайламиЭДКОКлиент.ДобавитьФайлы(ОписаниеОповещения, УникальныйИдентификатор, ЗаголовокВыбораФайлов, ДопПараметры, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура УказатьВид(Команда)
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("ВыделенныеСтроки", Элементы.ТаблицаВложений.ВыделенныеСтроки);
СписокВыбора = Новый СписокЗначений;
Для каждого ВидДокумента Из ВидыДокументов Цикл
СписокВыбора.Добавить(ВидДокумента.Значение.Представление);
КонецЦикла;
Оповещение = Новый ОписаниеОповещения("ПослеВыбораВида", ЭтотОбъект, ДополнительныеПараметры);
СписокВыбора.ПоказатьВыборЭлемента(Оповещение, "Выберите вид документа");
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораВида(ВыбранныйЭлемент, ВходящийКонтекст) Экспорт
Если ВыбранныйЭлемент <> Неопределено Тогда
Для каждого ИндексСтроки Из ВходящийКонтекст.ВыделенныеСтроки Цикл
ВыделеннаяСтрока = ТаблицаВложений.НайтиПоИдентификатору(ИндексСтроки);
ВыделеннаяСтрока.ВидДокумента = ВыбранныйЭлемент.Значение;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ЗаполнитьСписокВыбораВидаДокументов()
Для каждого ВидДокумента из ВидыДокументов Цикл
Если ВидДокумента.Значение.Видимость Тогда
Элементы.ТаблицаВложенийВидДокумента.СписокВыбора.Добавить(
ВидДокумента.Значение.Представление,
ВидДокумента.Значение.Представление);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
ЭлементУО = УсловноеОформление.Элементы.Добавить();
ДобавитьОформляемоеПоле(ЭлементУО.Поля, "ТаблицаВложенийВидДокумента");
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(
ЭлементУО.Отбор,
"ТаблицаВложений.ВидДокумента",
ВидСравненияКомпоновкиДанных.НеЗаполнено);
ЭлементУО.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Укажите вид'"));
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОшибкиПроверкиБРО);
ЭлементУО = УсловноеОформление.Элементы.Добавить();
ДобавитьОформляемоеПоле(ЭлементУО.Поля, "ТаблицаВложенийВидДокумента");
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(
ЭлементУО.Отбор,
"ТаблицаВложений.ВидДокумента",
ВидСравненияКомпоновкиДанных.Заполнено);
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветГиперссылкиБРО);
КонецПроцедуры
&НаСервере
Функция ДобавитьОформляемоеПоле(КоллекцияОформляемыхПолей, ИмяПоля) Экспорт
ПолеЭлемента = КоллекцияОформляемыхПолей.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
Возврат ПолеЭлемента;
КонецФункции
&НаКлиенте
Процедура ОткрытьКартинкуЗавершение(Результат, ВходящийКонтекст) Экспорт
Если Результат.Выполнено Тогда
ОперацииСФайламиЭДКОКлиент.ОткрытьФайл(Результат.ИмяФайла);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ИнициализироватьТаблицу(Сканы)
Если Сканы <> Неопределено Тогда
Для каждого Скан Из Сканы Цикл
ДобавитьСтрокуТаблицы(Скан);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДобавитьСтрокуТаблицы(Свойства)
НоваяСтрока = ТаблицаВложений.Добавить();
НоваяСтрока.Значение = Свойства;
НоваяСтрока.Представление = Свойства.Имя;
Если Свойства.Свойство("Документ") Тогда
НоваяСтрока.ВидДокумента = Свойства.Документ;
Иначе
НоваяСтрока.ВидДокумента = ВидПоИмени(Свойства.Имя);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ВидПоИмени(ИмяФайла)
Если Содержит(ИмяФайла, НСтр("ru = 'паспорт'"))
ИЛИ Содержит(ИмяФайла, НСтр("ru = 'passport'")) Тогда
Возврат ВидыДокументов["Паспорт"].Представление;
ИначеЕсли Содержит(ИмяФайла, НСтр("ru = 'СНИЛС'")) Тогда
Возврат ВидыДокументов["СНИЛС"].Представление;
ИначеЕсли Содержит(ИмяФайла, НСтр("ru = 'ИНН'")) Тогда
Возврат ВидыДокументов["СвидетельствоОПостановкеНаУчет"].Представление;
ИначеЕсли Содержит(ИмяФайла, НСтр("ru = 'Доверенность'")) Тогда
Возврат ВидыДокументов["Доверенность"].Представление;
ИначеЕсли Содержит(ИмяФайла, НСтр("ru = 'назначении'"))
ИЛИ Содержит(ИмяФайла, НСтр("ru = 'приказ'"))
ИЛИ Содержит(ИмяФайла, НСтр("ru = 'Подтверждение'"))
ИЛИ Содержит(ИмяФайла, НСтр("ru = 'полномочий'")) Тогда
Возврат ВидыДокументов["ПодтверждениеПолномочий"].Представление;
ИначеЕсли Содержит(ИмяФайла, НСтр("ru = 'Заявление'")) Тогда
Возврат ВидыДокументов["Заявление"].Представление;
КонецЕсли;
КонецФункции
&НаСервере
Функция Содержит(Знач ИмяФайла, Подстрока)
Возврат СтрНайти(ВРег(ИмяФайла), ВРег(Подстрока)) > 0;
КонецФункции
&НаКлиенте
Процедура ПриОткрытииЗавершение(Результат, ДополнительныеПараметры) Экспорт
КонтекстЭДОКлиент = Результат.КонтекстЭДО;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием_Завершение(Результат, ВходящийКонтекст) Экспорт
Сохранить();
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьСДиска_ПослеВыбораФайлов(Результат, ВходящийКонтекст) Экспорт
Если Результат.Выполнено Тогда
УстановитьМодифицированность(ЭтотОбъект);
Если Результат.ОписанияФайлов <> Неопределено Тогда
Для каждого Скан Из Результат.ОписанияФайлов Цикл
ДобавитьСтрокуТаблицы(Скан);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ПараметрыПроцедурыВыбораФайлов(ВидДокумента = "")
ДопустимыеТипыФайлов = "jpeg;jpg;png;pdf";
МаксимальныйРазмерФайла = 10 * 1024 * 1024;
Требования = ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиент.ТребованияКИзображениямВЗаявленииПо1СОтчетности();
ПараметрыФункции = Новый Структура;
ПараметрыФункции.Вставить("ВидДокумента", ВидДокумента);
ПараметрыФункции.Вставить("МаксимальныйРазмерФайла", МаксимальныйРазмерФайла);
ПараметрыФункции.Вставить("ДопустимыеТипыФайлов", ДопустимыеТипыФайлов);
ПараметрыФункции.Вставить("ВозвращатьРазмер", Истина);
ПараметрыФункции.Вставить("РежимТолькоПросмотр", Ложь);
ПараметрыФункции.Вставить("ИспользоватьСтраницы", Ложь);
ПараметрыФункции.Вставить("Требования", Требования);
Возврат ПараметрыФункции;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьМодифицированность(Форма)
Форма.Модифицированность = Истина;
КонецПроцедуры
#КонецОбласти