&НаКлиенте
Перем КонтекстЭДОКлиент Экспорт;
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
Письмо = Параметры.Письмо;
Элементы.ОписаниеОшибки.Заголовок = Параметры.ТекстОшибки;
Элементы.ОткрытьПакет.Заголовок = Параметры.ТекстКнопки;
Если Параметры.Свойство("Заголовок") И ЗначениеЗаполнено(Параметры.Заголовок) Тогда
Заголовок = Параметры.Заголовок;
КонецЕсли;
БлокироватьОтправку = Параметры.БлокироватьОтправку;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
КонтекстЭДО = Неопределено;
ВыполняемоеОповещение = Новый ОписаниеОповещения("ПослеПолученияКонтекстаЭДО", ЭтотОбъект);
ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ВыполняемоеОповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПолученияКонтекстаЭДО(ВхКонтекст, ДопПараметры) Экспорт
Если ВхКонтекст.КонтекстЭДО <> Неопределено Тогда
КонтекстЭДОКлиент = ВхКонтекст.КонтекстЭДО;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьПакет(Команда)
ОписанияФайлов = РезультатПроверкиФайлов();
ОписаниеОповещения = Новый ОписаниеОповещения(
"ОткрытьОписьПослеВопроса",
ЭтотОбъект);
Если ЕстьОшибки Тогда
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("ОписанияФайлов", ОписанияФайлов);
ОткрытьФорму(
КонтекстЭДОКлиент.ПутьКОбъекту + ".Форма.ОшибкиПереносаФайлов",
ДополнительныеПараметры,
,
,
,
,
ОписаниеОповещения,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Иначе
ВыполнитьОбработкуОповещения(ОписаниеОповещения, Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормы
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ОткрытьОписьПослеВопроса(Результат, ВходящийКонтекст) Экспорт
Если Результат <> Истина Тогда
Возврат;
КонецЕсли;
Опись = ПакетСДопДокуменами();
Оповестить("Запись_ОписиИсходящихДокументовВНалоговыеОрганы", , Опись);
ОповеститьОбИзменении(Опись);
Закрыть(Опись);
КонецПроцедуры
&НаСервере
Функция ПакетСДопДокуменами()
Если ЕстьФайлыДляПереноса Тогда
Сканы = СкопироватьФайлыИзПисьмаВСканы();
ОписьОбъект = СоздатьОпись(Сканы);
Иначе
ОписьОбъект = СоздатьОпись();
КонецЕсли;
Возврат ОписьОбъект;
КонецФункции
&НаСервере
Функция СоздатьСкан()
СканОбъект = Справочники.СканированныеДокументыДляПередачиВЭлектронномВиде.СоздатьЭлемент();
СканОбъект.Организация = Письмо.Отправитель;
СканОбъект.ВерсияПриказа = Перечисления.ПриказОписиИсходящихДокументов.ПриказММВ_7_6_16;
СканОбъект.ВидДокумента = Перечисления.ВидыПредставляемыхДокументов.ИныеДокументы;
СканОбъект.СведенияДокумента = Письмо.Наименование;
СканОбъект.КВД = "9999";
СканОбъект.Записать();
Возврат СканОбъект.Ссылка;
КонецФункции
&НаСервере
Функция СкопироватьФайлыИзПисьмаВСканы()
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
НаборВложений = КонтекстЭДОСервер.ПолучитьВложенияНеформализованногоДокумента(Письмо,,Истина);
МаксимальныйРазмер = 72 * 1024 * 1024;
Сканы = Новый Массив;
Размер = 0;
Скан = Неопределено;
Номер = 0;
Для Каждого ЗаписьВложение Из НаборВложений Цикл
Если НЕ ФайлСоответствуетТребованиям(ЗаписьВложение.ИмяФайла) Тогда
Продолжить;
КонецЕсли;
ДвДанные = ЗаписьВложение.Данные.Получить();
РазмерФайла = ДвДанные.Размер();
Если Размер + РазмерФайла > МаксимальныйРазмер ИЛИ Размер = 0 Тогда
Если Скан <> Неопределено Тогда
Сканы.Добавить(Скан);
Размер = 0;
Номер = 0;
КонецЕсли;
Скан = СоздатьСкан();
КонецЕсли;
Размер = Размер + РазмерФайла;
Номер = Номер + 1;
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("ВладелецФайлов", Скан);
ДополнительныеПараметры.Вставить("ИмяБезРасширения", ЗаписьВложение.ИмяФайла);
ДополнительныеПараметры.Вставить("Автор", Неопределено);
ДополнительныеПараметры.Вставить("РасширениеБезТочки", Неопределено);
ДополнительныеПараметры.Вставить("ВремяИзмененияУниверсальное", Неопределено);
Адрес = ПоместитьВоВременноеХранилище(ДвДанные, Новый УникальныйИдентификатор);
ПрисоединенныйФайлСсылка = РаботаСФайлами.ДобавитьФайл(
ДополнительныеПараметры,
Адрес);
ПрисоединенныйФайлОбъект = ПрисоединенныйФайлСсылка.ПолучитьОбъект();
ПрисоединенныйФайлОбъект.НомерСтраницы = Номер;
ПрисоединенныйФайлОбъект.Записать();
Справочники.СканированныеДокументыДляПередачиВЭлектронномВиде.ОпределитьВидЗагружаемогоPDF(
ЗаписьВложение.ИмяФайла,
Адрес,
ПрисоединенныйФайлСсылка);
КонецЦикла;
Если Сканы.Найти(Скан) = Неопределено Тогда
Сканы.Добавить(Скан);
КонецЕсли;
Возврат Сканы;
КонецФункции
&НаСервере
Функция РезультатПроверкиФайлов()
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
НаборВложений = КонтекстЭДОСервер.ПолучитьВложенияНеформализованногоДокумента(Письмо,,Истина);
ОписанияФайлов = Новый Массив;
ЕстьФайлыДляПереноса = Ложь;
ЕстьОшибки = Ложь;
Для Каждого ЗаписьВложение Из НаборВложений Цикл
Данные = ЗаписьВложение.Данные.Получить();
Адрес = ПоместитьВоВременноеХранилище(Данные, Новый УникальныйИдентификатор);
Выполнено = ФайлСоответствуетТребованиям(ЗаписьВложение.ИмяФайла);
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("Имя", ЗаписьВложение.ИмяФайла);
ДополнительныеПараметры.Вставить("Адрес", Адрес);
ДополнительныеПараметры.Вставить("Размер", Данные.Размер());
ДополнительныеПараметры.Вставить("Выполнено", Выполнено);
ОписанияФайлов.Добавить(ДополнительныеПараметры);
Если Выполнено Тогда
ЕстьФайлыДляПереноса = Истина;
Иначе
ЕстьОшибки = Истина;
КонецЕсли;
КонецЦикла;
Возврат ОписанияФайлов;
КонецФункции
&НаСервере
Функция ФайлСоответствуетТребованиям(ИмяФайла)
ДопустимыеТипыФайлов = ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентСервер.ДопустимыеТипыФайловТребования();
ДопустимыеРасширения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов(ВРЕГ(ДопустимыеТипыФайлов),";");
СвойстваФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайла);
Расширение = СтрЗаменить(СвойстваФайла.Расширение, ".", "");
ЕстьОшибка = ОперацииСФайламиЭДКО.НужноПреобразоватьФормат(ДопустимыеРасширения, Расширение);
Возврат НЕ ЕстьОшибка;
КонецФункции
&НаСервере
Функция СоздатьОпись(Сканы = Неопределено)
ОписьОбъект = Справочники.ОписиИсходящихДокументовВНалоговыеОрганы.СоздатьЭлемент();
ОписьОбъект.Организация = Письмо.Отправитель;
ОписьОбъект.ДатаСоздания = ТекущаяДатаСеанса();
Если Сканы <> Неопределено Тогда
Для каждого Скан Из Сканы Цикл
НоваяСтрока = ОписьОбъект.ПредставляемыеДокументы.Добавить();
НоваяСтрока.ВидДокумента = Перечисления.ВидыПредставляемыхДокументов.ИныеДокументы;
НоваяСтрока.СсылкаНаОбъект = Скан;
НоваяСтрока.ПорядковыйНомер = 1;
КонецЦикла;
КонецЕсли;
ОписьОбъект.Записать();
Возврат ОписьОбъект.Ссылка;
КонецФункции
#КонецОбласти