1580 lines
111 KiB
Plaintext
1580 lines
111 KiB
Plaintext
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
// Copyright (c) 2023, ООО 1С-Софт
|
||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
|
||
// Текст лицензии доступен по ссылке:
|
||
// https://creativecommons.org/licenses/by/4.0/legalcode
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
#Область ОписаниеПеременных
|
||
|
||
&НаКлиенте
|
||
Перем СтруктураЕдиногоДокумента;
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ОбработчикиСобытийФормы
|
||
|
||
&НаСервере
|
||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||
|
||
Если ЭтоАдресВременногоХранилища(Параметры.АдресНастройкиПечатныхФорм) Тогда
|
||
НастройкиПечатныхФормВходящие = ПолучитьИзВременногоХранилища(Параметры.АдресНастройкиПечатныхФорм);
|
||
Иначе
|
||
НастройкиПечатныхФормВходящие = РеквизитФормыВЗначение("НастройкиПечатныхФорм", Тип("ТаблицаЗначений"));
|
||
КонецЕсли;
|
||
|
||
ПараметрыВывода = Параметры.ПараметрыВывода;
|
||
Если ПараметрыВывода = Неопределено Тогда
|
||
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
|
||
КонецЕсли;
|
||
|
||
Если ЭтоАдресВременногоХранилища(Параметры.АдресСтруктурыЕдиногоДокумента) Тогда
|
||
АдресСтруктурыЕдиногоДокумента = Параметры.АдресСтруктурыЕдиногоДокумента;
|
||
КонецЕсли;
|
||
|
||
ТаблицаПечатныхФорм = РеквизитФормыВЗначение("ПечатныеФормы", Тип("ТаблицаЗначений"));
|
||
|
||
НастройкиСформированныхПечатныхФорм = Новый Соответствие;
|
||
|
||
Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФормВходящие Цикл
|
||
ПечатныеФормыДокумента = ОбщегоНазначения.ЗначениеИзСтрокиXML(НастройкаПечатнойФормы.ОфисныеДокументы);
|
||
Для Каждого ПечатнаяФорма Из ПечатныеФормыДокумента Цикл
|
||
Если ЭтоАдресВременногоХранилища(ПечатнаяФорма.Ключ) Тогда
|
||
ЗаданныеИменаПечатныхФорм = ОбщегоНазначения.ЗначениеИзСтрокиXML(НастройкаПечатнойФормы.ИмяФайлаПечатнойФормы);
|
||
ПредставлениеПечатнойФормы = УправлениеПечатью.ИмяФайлаПечатнойФормыОбъекта(ПечатнаяФорма.Значение, ЗаданныеИменаПечатныхФорм, НастройкаПечатнойФормы.Название);
|
||
ДобавитьПечатнуюФорму(ТаблицаПечатныхФорм, НастройкаПечатнойФормы, ПечатнаяФорма, ПредставлениеПечатнойФормы);
|
||
СтруктураНастроек = Новый Структура("ПодписьИПечать, Пометка, ТекущийЯзык");
|
||
ЗаполнитьЗначенияСвойств(СтруктураНастроек, НастройкаПечатнойФормы);
|
||
НастройкиСформированныхПечатныхФорм.Вставить(ПечатнаяФорма.Ключ, СтруктураНастроек);
|
||
НоваяНастройка = НастройкиПечатныхФорм.Добавить();
|
||
ЗаполнитьЗначенияСвойств(НоваяНастройка, НастройкаПечатнойФормы,,"ОфисныеДокументы");
|
||
ОфисныеДокументы = Новый Соответствие;
|
||
ОфисныеДокументы.Вставить(ПечатнаяФорма.Ключ, ПечатнаяФорма.Значение);
|
||
НоваяНастройка.ОфисныеДокументы = ОбщегоНазначения.ЗначениеВСтрокуXML(ОфисныеДокументы);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
|
||
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
|
||
Элементы.Справка.Видимость = Ложь;
|
||
ИначеЕсли НастройкиПечатныхФорм.Количество() = 1 Тогда
|
||
Инструкция = ПолучитьТекстИнструкции(ТаблицаПечатныхФорм[0].Представление, ТаблицаПечатныхФорм[0].АдресПечатнойФормы);
|
||
Иначе
|
||
Инструкция = ПолучитьТекстИнструкции();
|
||
КонецЕсли;
|
||
|
||
ТаблицаПечатныхФорм.ЗаполнитьЗначения(0, "Картинка");
|
||
|
||
ЗначениеВДанныеФормы(ТаблицаПечатныхФорм, ПечатныеФормы);
|
||
НастроитьФорму(НастройкиПечатныхФорм.Количество());
|
||
|
||
ДополнительнаяИнформация = Новый Структура("Картинка, Текст", Новый Картинка, "");
|
||
|
||
ТаблицаОбъектовПечати = ПечатныеФормы.Выгрузить(,"ОбъектПечати");
|
||
МассивСсылок = ТаблицаОбъектовПечати.ВыгрузитьКолонку("ОбъектПечати");
|
||
ОбъектыПечати.ЗагрузитьЗначения(МассивСсылок);
|
||
|
||
МассивСсылок = ОбъектыПечати.ВыгрузитьЗначения();
|
||
|
||
// ЭлектронноеВзаимодействие
|
||
Если ТипЗнч(МассивСсылок) = Тип("Массив")
|
||
И МассивСсылок.Количество() > 0
|
||
И ОбщегоНазначения.ЗначениеСсылочногоТипа(МассивСсылок[0]) Тогда
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие") Тогда
|
||
МодульЭлектронноеВзаимодействие = ОбщегоНазначения.ОбщийМодуль("ЭлектронноеВзаимодействие");
|
||
МодульЭлектронноеВзаимодействие.ПриВыводеНавигационнойСсылкиВФормеОбъектаИБ(ДополнительнаяИнформация, МассивСсылок);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
// Конец ЭлектронноеВзаимодействие
|
||
|
||
Элементы.ДополнительнаяИнформация.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(ДополнительнаяИнформация.Текст);
|
||
Элементы.КартинкаИнформации.Картинка = ДополнительнаяИнформация.Картинка;
|
||
Элементы.ГруппаДополнительнаяИнформация.Видимость = Не ПустаяСтрока(Элементы.ДополнительнаяИнформация.Заголовок);
|
||
Элементы.КартинкаИнформации.Видимость = Элементы.КартинкаИнформации.Картинка.Вид <> ВидКартинки.Пустая;
|
||
|
||
ИнтеграцияПодсистемБСП.ПечатьДокументовПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
|
||
УправлениеПечатьюПереопределяемый.ПечатьДокументовПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
|
||
|
||
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
|
||
Элементы.КоманднаяПанельЛеваяЧасть.Видимость = Ложь;
|
||
Элементы.КоманднаяПанельПраваяЧасть.Видимость = Ложь;
|
||
Элементы.ПечатныеФормы.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
|
||
Элементы.КнопкаОтправитьВсеДействия.КнопкаПоУмолчанию = Истина;
|
||
Элементы.Справка.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю;
|
||
Элементы.КнопкаИзменитьМакет.Видимость = Ложь;
|
||
Элементы.ФлажокПодписьИПечать.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
|
||
Элементы.ФлажокОбъединитьДокументы.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
|
||
Элементы.ГруппаКоманднаяПанель.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
|
||
Элементы.НастройкаПодписиИПечати.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
|
||
Элементы.ПечатныеФормы.Шапка = Ложь;
|
||
Элементы.БольшеНеПоказывать.Видимость = Ложь;
|
||
БольшеНеПоказывать = Ложь;
|
||
Элементы.ГруппаИнструкция.Видимость = Ложь;
|
||
Элементы.Переместить(Элементы.Показать, Элементы.КоманднаяПанельЕще, Элементы.КнопкаСохранитьВсеДействия);
|
||
Элементы.Показать.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю;
|
||
|
||
Элементы.ПечатныеФормыУстановитьФлажки.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю;
|
||
Элементы.ПечатныеФормыСнятьФлажки.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю;
|
||
Элементы.Переместить(Элементы.ПечатныеФормыУстановитьФлажки, Элементы.КоманднаяПанельЕще);
|
||
Элементы.Переместить(Элементы.ПечатныеФормыСнятьФлажки, Элементы.КоманднаяПанельЕще);
|
||
|
||
Элементы.ПерейтиКУправлениюМакетами.Видимость = Ложь;
|
||
|
||
Иначе
|
||
БольшеНеПоказывать = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПечатьДокументовOfficeOpen",
|
||
"ВыводитьСразу", Истина);
|
||
КонецЕсли;
|
||
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.Печать") Тогда
|
||
МодульУправлениеПечатьюМультиязычность = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатьюМультиязычность");
|
||
МодульУправлениеПечатьюМультиязычность.ЗаполнитьПодменюЯзык(ЭтотОбъект, , ДоступныеЯзыкиПечатныхФорм());
|
||
КонецЕсли;
|
||
|
||
Элементы.ФлажокПодписьИПечать.Видимость = ЕстьПодписиИПечатиДляОбъектовПечати();
|
||
|
||
ОбъединитьДокументы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПечатьДокументовOfficeOpen",
|
||
"ОднимДокументом", Ложь) И Элементы.ФлажокОбъединитьДокументы.Видимость;
|
||
|
||
ПодписьИПечать = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПечатьДокументовOfficeOpen",
|
||
"ПодписьИПечать", Ложь);
|
||
|
||
УстановитьЗаголовокФормы();
|
||
КонецПроцедуры
|
||
|
||
|
||
&НаКлиенте
|
||
Процедура ПриОткрытии(Отказ)
|
||
|
||
Если ЭтоАдресВременногоХранилища(АдресСтруктурыЕдиногоДокумента) Тогда
|
||
СтруктураЕдиногоДокумента = ПолучитьИзВременногоХранилища(АдресСтруктурыЕдиногоДокумента);
|
||
КонецЕсли;
|
||
|
||
Если СтруктураЕдиногоДокумента = Неопределено Тогда
|
||
СтруктураЕдиногоДокумента = Новый Структура();
|
||
СтруктураЕдиногоДокумента.Вставить("АдресПечатнойФормы", ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор));
|
||
СтруктураЕдиногоДокумента.Вставить("ИмяФайлаПечатнойФормы");
|
||
СтруктураЕдиногоДокумента.Вставить("Представление");
|
||
СтруктураЕдиногоДокумента.Вставить("СоставЕдиногоДокумента", Новый Соответствие());
|
||
|
||
Если ОбъединитьДокументы Тогда
|
||
Оповещение = Новый ОписаниеОповещения("ПриЗавершенииФормированияПечатныхФорм", ЭтотОбъект);
|
||
НачатьПолучениеПечатныхФорм(СтруктураЕдиногоДокумента, Оповещение);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
|
||
&НаКлиенте
|
||
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
|
||
Для Каждого ФайлДляУдаления Из СписокФайловДляУдаления Цикл
|
||
НачатьУдалениеФайлов(Новый ОписаниеОповещения, ФайлДляУдаления.Значение);
|
||
КонецЦикла;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
|
||
|
||
ПараметрыВыбора = Новый Структура("ВыбранноеЗначение, ИсточникВыбора", ВыбранноеЗначение, ИсточникВыбора);
|
||
ОповещениеПродолжениеВыбора = Новый ОписаниеОповещения("ОбработкаВыбораПродолжение", ЭтотОбъект, ПараметрыВыбора);
|
||
Оповещение = Новый ОписаниеОповещения("ПриЗавершенииФормированияПечатныхФорм", ЭтотОбъект, ОповещениеПродолжениеВыбора);
|
||
|
||
Если ТребуетсяПереформирование Тогда
|
||
НачатьПолучениеПечатныхФорм(СтруктураЕдиногоДокумента, Оповещение);
|
||
Иначе
|
||
ВыполнитьОбработкуОповещения(ОповещениеПродолжениеВыбора);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
|
||
|
||
Если ИмяСобытия = "Запись_ПользовательскиеМакетыПечати"
|
||
И Источник.ВладелецФормы = ЭтотОбъект Тогда
|
||
ТребуетсяПереформирование = Истина;
|
||
ИначеЕсли (ИмяСобытия = "ОтказОтИзмененияМакета"
|
||
Или ИмяСобытия = "ОтменаРедактированияОфисногоДокумента"
|
||
И Источник.ВладелецФормы = ЭтотОбъект) Тогда
|
||
ЗаблокироватьФорму();
|
||
ИначеЕсли ИмяСобытия = "Запись_ОфисныйДокумент" И Источник.ВладелецФормы = ЭтотОбъект Тогда
|
||
ТребуетсяПереформирование = Истина;
|
||
КонецЕсли;
|
||
|
||
УправлениеПечатьюКлиентПереопределяемый.ПечатьДокументовОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
|
||
|
||
КонецПроцедуры
|
||
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ОбработчикиКомандФормы
|
||
|
||
&НаКлиенте
|
||
Процедура Печать(Команда)
|
||
МассивПечатныхФорм = ПечатныеФормыСПометками();
|
||
Если ТребуетсяПереформирование Тогда
|
||
Оповещение = Новый ОписаниеОповещения("ПечатьПродолжение", ЭтотОбъект, МассивПечатныхФорм);
|
||
НачатьПолучениеПечатныхФорм(СтруктураЕдиногоДокумента, Оповещение);
|
||
Иначе
|
||
ПечатьЗавершение(МассивПечатныхФорм);
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПредварительныйПросмотр(Команда)
|
||
ОткрытьОтмеченныеПечатныеФормы();
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура СнятьФлажки(Команда)
|
||
УстановитьПометкиНаСервере(Ложь);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура УстановитьФлажки(Команда)
|
||
УстановитьПометкиНаСервере(Истина);
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура УстановитьПометкиНаСервере(Пометка)
|
||
|
||
ТребуетсяПереформирование = Истина;
|
||
|
||
ТаблицаЗначений = ПечатныеФормы.Выгрузить();
|
||
|
||
ТаблицаЗначений.ЗаполнитьЗначения(Пометка, "Пометка");
|
||
|
||
ПечатныеФормы.Загрузить(ТаблицаЗначений);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПечатныеФормыПометкаПриИзменении(Элемент)
|
||
ТребуетсяПереформирование = Истина;
|
||
КонецПроцедуры
|
||
|
||
|
||
&НаКлиенте
|
||
Процедура ОткрытьМакетДляРедактирования()
|
||
|
||
НастройкаПечатнойФормы = НастройкиПечатныхФорм[0];
|
||
|
||
ЗаблокироватьФорму(Истина);
|
||
|
||
ПараметрыОткрытия = Новый Структура;
|
||
ПараметрыОткрытия.Вставить("ИмяОбъектаМетаданныхМакета", НастройкаПечатнойФормы.ПутьКМакету);
|
||
ПараметрыОткрытия.Вставить("Ссылка", СсылкаМакета(НастройкаПечатнойФормы.ПутьКМакету));
|
||
ПараметрыОткрытия.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
|
||
ПараметрыОткрытия.Вставить("ИмяДокумента", НастройкаПечатнойФормы.Представление);
|
||
ПараметрыОткрытия.Вставить("ТипМакета", "MXL");
|
||
ПараметрыОткрытия.Вставить("Редактирование", Истина);
|
||
ПараметрыОткрытия.Вставить("КодЯзыка", СтрРазделить(ТекущийЯзык, "_", Истина)[0]);
|
||
|
||
ОткрытьФорму("ОбщаяФорма.РедактированиеДокументаOfficeOpen", ПараметрыОткрытия, ЭтотОбъект, "ПечатьДокументовOfficeOpen");
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ИзменитьМакет(Команда)
|
||
ОткрытьМакетДляРедактирования();
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПерейтиКУправлениюМакетами(Команда)
|
||
ОткрытьФорму("РегистрСведений.ПользовательскиеМакетыПечати.Форма.МакетыПечатныхФорм");
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура Сохранить(Команда)
|
||
|
||
Оповещение = Новый ОписаниеОповещения("ПриПодключенииРасширения", ЭтотОбъект);
|
||
ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура Отправить(Команда)
|
||
ОтправитьПечатныеФормыПоПочте();
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура Подключаемый_ПереключитьЯзык(Команда)
|
||
|
||
УправлениеПечатьюКлиент.ПереключитьЯзык(ЭтотОбъект, Команда);
|
||
УстановитьЗаголовокФормы();
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура Подключаемый_ПриПереключенииЯзыка(КодЯзыка, ДополнительныеПараметры) Экспорт
|
||
|
||
ТребуетсяПереформирование = Истина;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОбъединитьДокументыПриИзменении(Элемент)
|
||
ТребуетсяПереформирование = Истина;
|
||
ОбъединитьДокументыПриИзмененииНаСервере(ОбъединитьДокументы);
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Процедура ОбъединитьДокументыПриИзмененииНаСервере(Значение)
|
||
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПечатьДокументовOfficeOpen",
|
||
"ОднимДокументом", Значение);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ФлажокПодписьИПечатьПриИзменении(Элемент)
|
||
ТребуетсяПереформирование = Истина;
|
||
ФлажокПодписьИПечатьПриИзмененииНаСервере(ПодписьИПечать);
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Процедура ФлажокПодписьИПечатьПриИзмененииНаСервере(Значение)
|
||
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПечатьДокументовOfficeOpen",
|
||
"ПодписьИПечать", Значение);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПечатныеФормыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
|
||
СтандартнаяОбработка = Ложь;
|
||
СтрокаВыбора = ПечатныеФормы.НайтиПоИдентификатору(ВыбраннаяСтрока);
|
||
|
||
МассивПечатныхФорм = Новый Массив;
|
||
ДобавитьДанныеПечатнойФормы(МассивПечатныхФорм, СтрокаВыбора.АдресПечатнойФормы,
|
||
СтрокаВыбора.ИмяФайлаПечатнойФормы);
|
||
|
||
ОткрытьПечатныеФормы(МассивПечатныхФорм);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ИнструкцияПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
|
||
Если ДанныеСобытия.Event.type = "click" И СтрНайти(ДанныеСобытия.Element.href, "ОткрытьЕдинственнуюПечатнуюФорму") Тогда
|
||
ОткрытьПечатныеФормы();
|
||
СтандартнаяОбработка = ложь;
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныеПроцедурыИФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ЗаблокироватьФорму(Заблокировать = Ложь)
|
||
|
||
ГруппаОтображенияДокументов = Элементы.ГруппаДокументы;
|
||
ГруппаОтображенияДокументов.ТолькоПросмотр = Заблокировать;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура УстановитьЗаголовокФормы()
|
||
Перем ЗаголовокФормы;
|
||
|
||
ПараметрыВывода.Свойство("ЗаголовокФормы", ЗаголовокФормы);
|
||
|
||
Если Не ЗначениеЗаполнено(ЗаголовокФормы) Тогда
|
||
|
||
Если ОбъектыПечати.Количество() > 1 Тогда
|
||
ЗаголовокФормы = НСтр("ru = 'Печать документов'");
|
||
ИначеЕсли ОбъектыПечати.Количество() = 1 И ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ОбъектыПечати[0].Значение))
|
||
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектыПечати[0].Значение, "Ссылка", Истина) <> Неопределено Тогда
|
||
ЗаголовокФормы = Строка(ОбъектыПечати[0].Значение);
|
||
Иначе
|
||
ЗаголовокФормы = НСтр("ru = 'Печать документа'");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(ТекущийЯзык) Тогда
|
||
ТекущийЯзыкПредставление = Элементы["Язык_"+ТекущийЯзык].Заголовок;
|
||
ЗаголовокФормы = ЗаголовокФормы + " ("+ТекущийЯзыкПредставление+")";
|
||
КонецЕсли;
|
||
|
||
Заголовок = ЗаголовокФормы;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОткрытьОтмеченныеПечатныеФормы(ДополнительныеПараметры = Неопределено) Экспорт
|
||
МассивПечатныхФорм = ПечатныеФормыСПометками();
|
||
ОткрытьПечатныеФормы(МассивПечатныхФорм);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОткрытьПечатныеФормы(МассивПечатныхФорм = Неопределено)
|
||
Если Не ТребуетсяПереформирование Тогда
|
||
|
||
Если МассивПечатныхФорм = Неопределено Тогда
|
||
МассивПечатныхФорм = ПолучитьПечатныеФормы(СтруктураЕдиногоДокумента);
|
||
КонецЕсли;
|
||
|
||
ОткрытьПечатныеФормыЗавершение(МассивПечатныхФорм);
|
||
|
||
Иначе
|
||
Оповещение = Новый ОписаниеОповещения("ОткрытьПечатныеФормыПродолжение", ЭтотОбъект, МассивПечатныхФорм);
|
||
НачатьПолучениеПечатныхФорм(СтруктураЕдиногоДокумента, Оповещение);
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Процедура НастроитьФорму(КоличествоПечатныхФорм)
|
||
РежимМногихПечатныхФорм = КоличествоПечатныхФорм > 1;
|
||
|
||
Если Не РежимМногихПечатныхФорм Тогда
|
||
Элементы.Показать.Заголовок = НСтр("ru = 'Показать'");
|
||
КонецЕсли;
|
||
|
||
Элементы.ФлажокОбъединитьДокументы.Видимость = РежимМногихПечатныхФорм;
|
||
Элементы.ПечатныеФормы.Видимость = РежимМногихПечатныхФорм Или ОбщегоНазначения.ЭтоМобильныйКлиент();
|
||
Элементы.ГруппаУправленияСпискомДокументов.Видимость = Элементы.ПечатныеФормы.Видимость;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция ПолучитьТекстИнструкции(Представление = Неопределено, АдресПечатнойФормы = Неопределено)
|
||
|
||
ТекстИнструкции = "<!DOCTYPE html PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">
|
||
|<html>
|
||
|
|
||
|<head></head>
|
||
|<style type=""text/css"">
|
||
| .Text {
|
||
| font-family: Arial;
|
||
| orphans: 2;
|
||
| widows: 2;
|
||
| font-variant-ligatures: normal;
|
||
| }
|
||
|
|
||
|</style>
|
||
|
|
||
|<body class=""text"">
|
||
|
|
||
| <div>
|
||
| <p><strong>%1</strong></p>
|
||
| </div>
|
||
| <div>
|
||
| <p><span>%2</span></p>
|
||
| </p>
|
||
| </div>
|
||
|</body>
|
||
|
|
||
|</html>";
|
||
|
||
|
||
Если Представление = Неопределено Тогда
|
||
ТекстИнструкции = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИнструкции, НСтр("ru = 'Документы сформированы и подготовлены к печати'"), НСтр("ru = 'Можно открыть документ для просмотра или отправить его на печать.'"));
|
||
Иначе
|
||
ТекстИнструкции = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИнструкции, НСтр("ru = 'Документ сформирован и подготовлен к печати'"), "<a href=""ОткрытьЕдинственнуюПечатнуюФорму"">"+Представление+"</a>");
|
||
КонецЕсли;
|
||
|
||
Возврат ТекстИнструкции;
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Функция ПараметрыОжидания()
|
||
|
||
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
|
||
ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Изменились параметры формирования печатных форм.'");
|
||
ПараметрыОжидания.ОповещениеПользователя.Показать = Ложь;
|
||
ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
|
||
ПараметрыОжидания.Интервал = 1;
|
||
Возврат ПараметрыОжидания;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ОткрытьПечатныеФормыПродолжение(Результат, МассивПечатныхФорм) Экспорт
|
||
Если Результат.Статус = "Ошибка" Тогда
|
||
ВызватьИсключение Результат.КраткоеПредставлениеОшибки;
|
||
Иначе
|
||
СтруктураЕдиногоДокумента = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
|
||
МассивПечатныхФорм = ПолучитьПечатныеФормы(СтруктураЕдиногоДокумента, МассивПечатныхФорм);
|
||
ОткрытьПечатныеФормыЗавершение(МассивПечатныхФорм);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОткрытьПечатныеФормыЗавершение(МассивПечатныхФорм)
|
||
|
||
Если ОбъединитьДокументы И МассивПечатныхФорм.ВГраница() Тогда
|
||
ОткрытьОфисныйДокумент(СтруктураЕдиногоДокумента.АдресПечатнойФормы, СтруктураЕдиногоДокумента.ИмяФайлаПечатнойФормы);
|
||
Иначе
|
||
Для Каждого ПечатнаяФорма Из МассивПечатныхФорм Цикл
|
||
ОткрытьОфисныйДокумент(ПечатнаяФорма.АдресПечатнойФормы, ПечатнаяФорма.ИмяФайлаПечатнойФормы);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОткрытьОфисныйДокумент(АдресДокумента, ИмяФайлаДляОткрытия)
|
||
ДополнительныеПараметры = Новый Структура("АдресДокумента, ОбработчикЗавершения, ИмяФайлаДляОткрытия");
|
||
ДополнительныеПараметры.АдресДокумента = АдресДокумента;
|
||
ДополнительныеПараметры.ОбработчикЗавершения = Неопределено;
|
||
ДополнительныеПараметры.ИмяФайлаДляОткрытия = ИмяФайлаДляОткрытия;
|
||
|
||
Оповещение = Новый ОписаниеОповещения("ОткрытьОфисныйДокументПослеПолученияВременногоКаталога", ЭтотОбъект, ДополнительныеПараметры);
|
||
ФайловаяСистемаКлиент.СоздатьВременныйКаталог(Оповещение);
|
||
КонецПроцедуры
|
||
|
||
// Продолжение процедуры ОткрытьОфисныйДокумент.
|
||
&НаКлиенте
|
||
Процедура ОткрытьОфисныйДокументПослеПолученияВременногоКаталога(ИмяКаталога, ДополнительныеПараметры) Экспорт
|
||
|
||
Оповещение = Новый ОписаниеОповещения("ОткрытьПослеСохранениеУКлиента", ЭтотОбъект, ДополнительныеПараметры.ОбработчикЗавершения);
|
||
ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла();
|
||
ПараметрыСохранения.Интерактивно = Ложь;
|
||
|
||
ИмяФайлаДляОткрытия = ИмяКаталога+"\"+ДополнительныеПараметры.ИмяФайлаДляОткрытия;
|
||
ФайловаяСистемаКлиент.СохранитьФайл(Оповещение, ДополнительныеПараметры.АдресДокумента, ИмяФайлаДляОткрытия, ПараметрыСохранения);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОткрытьПослеСохранениеУКлиента(ПолученныеФайлы, ОбработчикЗавершения) Экспорт
|
||
Если ПолученныеФайлы <> Неопределено Тогда
|
||
ПутьКФайлу = ПолученныеФайлы[0].ПолноеИмя;
|
||
ИмяФайла = ПолученныеФайлы[0].Имя;
|
||
|
||
ПараметрыЗавершения = Новый Структура;
|
||
ПараметрыЗавершения.Вставить("ОбработчикЗавершения", ОбработчикЗавершения);
|
||
ПараметрыЗавершения.Вставить("ПутьКФайлу", ПутьКФайлу);
|
||
ПараметрыЗавершения.Вставить("ИмяФайла", ИмяФайла);
|
||
|
||
ФайлНаДиске = Новый Файл(ПутьКФайлу);
|
||
ОписаниеПослеУстановкиТолькоЧтения = Новый ОписаниеОповещения("ОткрытьФайлЗавершение", ЭтотОбъект, ПараметрыЗавершения);
|
||
ФайлНаДиске.НачатьУстановкуТолькоЧтения(ОписаниеПослеУстановкиТолькоЧтения, Не ДоступноРедактированиеПечатнойФормы());
|
||
КонецЕсли;
|
||
|
||
ВыполнитьОбработкуОповещения(ОбработчикЗавершения);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОткрытьФайлЗавершение(ПараметрыЗавершения) Экспорт
|
||
ОбработчикЗавершения = ПараметрыЗавершения.ОбработчикЗавершения;
|
||
ПутьКФайлу = ПараметрыЗавершения.ПутьКФайлу;
|
||
ИмяФайла = ПараметрыЗавершения.ИмяФайла;
|
||
|
||
ПараметрыОткрытияФайла = ФайловаяСистемаКлиент.ПараметрыОткрытияФайла();
|
||
ФайловаяСистемаКлиент.ОткрытьФайл(ПутьКФайлу, ОбработчикЗавершения, ИмяФайла, ПараметрыОткрытияФайла);
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Функция ДоступноРедактированиеПечатнойФормы()
|
||
Возврат Пользователи.РолиДоступны("РедактированиеПечатныхФорм");
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция ДлительнаяОперацияПолученияПечатныхФорм(СтруктураЕдиногоДокумента)
|
||
|
||
ТребуетсяПереформирование = Ложь;
|
||
ТаблицаПечатныхФорм = ПечатныеФормы.Выгрузить();
|
||
ТаблицаПечатныхФорм.Колонки.Добавить("ФормироватьЗаново", Новый ОписаниеТипов("Булево"));
|
||
|
||
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
|
||
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
|
||
ПараметрыВыполнения.ОжидатьЗавершение = 1;
|
||
|
||
ПараметрыФормирования = Новый Структура("ПереформироватьЕдиныйДокумент", Ложь);
|
||
|
||
СоставЕдиногоДокумента = СтруктураЕдиногоДокумента.СоставЕдиногоДокумента;
|
||
|
||
Для Каждого НастройкаПечатнойФормы Из ТаблицаПечатныхФорм Цикл
|
||
|
||
НастройкаПечатнойФормы.ФормироватьЗаново = НастройкаПечатнойФормы.Пометка
|
||
И (ПодписьИПечать <> НастройкаПечатнойФормы.ПодписьИПечать
|
||
ИЛИ (ТекущийЯзык <> НастройкаПечатнойФормы.ТекущийЯзык И ТекущийЯзык <> ""));
|
||
|
||
НастройкаПечатнойФормы.ПодписьИПечать = ПодписьИПечать;
|
||
НастройкаПечатнойФормы.ТекущийЯзык = ТекущийЯзык;
|
||
|
||
КонецЦикла;
|
||
|
||
|
||
Если ПолучитьИзВременногоХранилища(СтруктураЕдиногоДокумента.АдресПечатнойФормы) <> Неопределено Тогда
|
||
Для Каждого НастройкаПечатнойФормы Из СоставЕдиногоДокумента Цикл
|
||
НастройкаСформированнойПечатнойФормы = ТаблицаПечатныхФорм.Найти(НастройкаПечатнойФормы.Ключ, "АдресПечатнойФормы");
|
||
Если НастройкаСформированнойПечатнойФормы = Неопределено Тогда
|
||
ПараметрыФормирования.ПереформироватьЕдиныйДокумент = Истина;
|
||
Иначе
|
||
|
||
Для Каждого ПараметрНастройки Из НастройкаПечатнойФормы.Значение Цикл
|
||
ПараметрыФормирования.ПереформироватьЕдиныйДокумент = ПараметрыФормирования.ПереформироватьЕдиныйДокумент
|
||
ИЛИ ПараметрНастройки.Значение <> НастройкаСформированнойПечатнойФормы[ПараметрНастройки.Ключ];
|
||
КонецЦикла;
|
||
|
||
ПараметрыФормирования.ПереформироватьЕдиныйДокумент = ПараметрыФормирования.ПереформироватьЕдиныйДокумент
|
||
ИЛИ Не НастройкаСформированнойПечатнойФормы.Пометка;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
МассивНайденныхСтрок = ТаблицаПечатныхФорм.НайтиСтроки(Новый Структура("Пометка", Истина));
|
||
Для Каждого НайденнаяСтрока Из МассивНайденныхСтрок Цикл
|
||
ПараметрыФормирования.ПереформироватьЕдиныйДокумент = ПараметрыФормирования.ПереформироватьЕдиныйДокумент
|
||
ИЛИ СоставЕдиногоДокумента[НайденнаяСтрока.АдресПечатнойФормы] <> Неопределено;
|
||
КонецЦикла;
|
||
|
||
ПараметрыФормирования.ПереформироватьЕдиныйДокумент = ОбъединитьДокументы И ПараметрыФормирования.ПереформироватьЕдиныйДокумент;
|
||
Иначе
|
||
ПараметрыФормирования.ПереформироватьЕдиныйДокумент = Истина;
|
||
КонецЕсли;
|
||
|
||
ОфисныеДокументы = Новый Соответствие();
|
||
Для Каждого СтрокаТаблицыПечатныхФорм Из ТаблицаПечатныхФорм Цикл
|
||
ОфисныеДокументы.Вставить(СтрокаТаблицыПечатныхФорм.АдресПечатнойФормы, ПолучитьИзВременногоХранилища(СтрокаТаблицыПечатныхФорм.АдресПечатнойФормы));
|
||
КонецЦикла;
|
||
ТаблицаПечатныхФорм.ЗаполнитьЗначения(0, "Картинка");
|
||
ПечатныеФормы.Загрузить(ТаблицаПечатныхФорм);
|
||
|
||
Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, "УправлениеПечатьюСлужебный.СформироватьПечатныеФормы", ТаблицаПечатныхФорм, ПараметрыФормирования, ОфисныеДокументы, СтруктураЕдиногоДокумента);
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция ПолучитьПечатныеФормы(СтруктураЕдиногоДокумента, МассивПечатныхФормОграничение = Неопределено)
|
||
МассивПечатныхФорм = Новый Массив;
|
||
|
||
ТаблицаПечатныхФорм = РеквизитФормыВЗначение("ПечатныеФормы", Тип("ТаблицаЗначений"));
|
||
|
||
Если ОбъединитьДокументы Тогда
|
||
ДобавитьДанныеПечатнойФормы(МассивПечатныхФорм, СтруктураЕдиногоДокумента.АдресПечатнойФормы, СтруктураЕдиногоДокумента.ИмяФайлаПечатнойФормы);
|
||
Иначе
|
||
Если МассивПечатныхФормОграничение = Неопределено Тогда
|
||
Для Каждого СтрокаПечатнойФормы Из ТаблицаПечатныхФорм Цикл
|
||
Если СтрокаПечатнойФормы.Пометка Тогда
|
||
ДобавитьДанныеПечатнойФормы(МассивПечатныхФорм, СтрокаПечатнойФормы.АдресПечатнойФормы,
|
||
СтрокаПечатнойФормы.ИмяФайлаПечатнойФормы);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Иначе
|
||
Для Каждого СтрокаПечатнойФормы Из МассивПечатныхФормОграничение Цикл
|
||
ДобавитьДанныеПечатнойФормы(МассивПечатныхФорм, СтрокаПечатнойФормы.АдресПечатнойФормы,
|
||
СтрокаПечатнойФормы.ИмяФайлаПечатнойФормы);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат МассивПечатныхФорм;
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция ПечатныеФормыСПометками()
|
||
|
||
ТаблицаПечатныхФорм = ПечатныеФормы.Выгрузить();
|
||
|
||
МассивНайденныхСтрок = ТаблицаПечатныхФорм.НайтиСтроки(Новый Структура("Пометка", Истина));
|
||
Если МассивНайденныхСтрок.Количество() <> 0 Тогда
|
||
МассивПечатныхФорм = Новый Массив();
|
||
Для Каждого СтрокаПечатнойФормы Из МассивНайденныхСтрок Цикл
|
||
ДобавитьДанныеПечатнойФормы(МассивПечатныхФорм, СтрокаПечатнойФормы.АдресПечатнойФормы,
|
||
СтрокаПечатнойФормы.ИмяФайлаПечатнойФормы);
|
||
КонецЦикла;
|
||
Возврат МассивПечатныхФорм;
|
||
Иначе
|
||
Возврат Новый Массив
|
||
КонецЕсли;
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Процедура ДобавитьДанныеПечатнойФормы(МассивПечатныхФорм, Знач АдресПечатнойФормы, Знач ИмяФайлаПечатнойФормы)
|
||
ПечатнаяФорма = Новый Структура("АдресПечатнойФормы, Представление, ИмяФайлаПечатнойФормы");
|
||
ПечатнаяФорма.АдресПечатнойФормы = АдресПечатнойФормы;
|
||
ПечатнаяФорма.Представление = ИмяФайлаПечатнойФормы;
|
||
ПечатнаяФорма.ИмяФайлаПечатнойФормы = ИмяФайлаПечатнойФормы;
|
||
МассивПечатныхФорм.Добавить(ПечатнаяФорма);
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Функция СсылкаМакета(ИмяОбъектаМетаданныхМакета)
|
||
|
||
Возврат Справочники.МакетыПечатныхФорм.СсылкаМакета(ИмяОбъектаМетаданныхМакета);
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция ЕстьПодписиИПечатиДляОбъектовПечати()
|
||
|
||
Результат = Ложь;
|
||
|
||
ПодписиИПечатиОбъектов = УправлениеПечатью.ПодписиИПечатиОбъектов(ОбъектыПечати);
|
||
Для Каждого ПодписиИПечатиОбъекта Из ПодписиИПечатиОбъектов Цикл
|
||
КоллекцияПодписейИПечатей = ПодписиИПечатиОбъекта.Значение;
|
||
Для Каждого ПодписьПечать Из КоллекцияПодписейИПечатей Цикл
|
||
Картинка = ПодписьПечать.Значение; // Картинка
|
||
Если Картинка.Вид <> ВидКартинки.Пустая Тогда
|
||
Возврат Истина;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ПриЗавершенииФормированияПечатныхФорм(Результат, ОбработкаПродолжения) Экспорт
|
||
|
||
Если Результат = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Если Результат.Статус = "Ошибка" Тогда
|
||
ВызватьИсключение Результат.КраткоеПредставлениеОшибки;
|
||
КонецЕсли;
|
||
СтруктураЕдиногоДокумента = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
|
||
|
||
Если ОбработкаПродолжения <> Неопределено Тогда
|
||
ВыполнитьОбработкуОповещения(ОбработкаПродолжения);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОбработкаВыбораПродолжение(Результат, ПараметрыВыбора) Экспорт
|
||
|
||
ВыбранноеЗначение = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ПараметрыВыбора.ВыбранноеЗначение);
|
||
ИсточникВыбора = ПараметрыВыбора.ИсточникВыбора;
|
||
|
||
Если Не ВыбранноеЗначение.Свойство("ОбъектПечати") Тогда
|
||
ВладелецФормыВыбора = ИсточникВыбора.ВладелецФормы;
|
||
СписокОбъектовПечати = ВладелецФормыВыбора.ОбъектыПечати;
|
||
ВыбранноеЗначение.Вставить("ОбъектПечати", СписокОбъектовПечати[0].Значение);
|
||
КонецЕсли;
|
||
|
||
ВариантСохранения = Неопределено;
|
||
ВыбранноеЗначение.Свойство("ВариантСохранения", ВариантСохранения);
|
||
СписокВложений = Неопределено;
|
||
Если ОбъединитьДокументы И ВариантСохранения <> "Присоединить" Тогда
|
||
Вложение = ОписаниеФайла(СтруктураЕдиногоДокумента.ИмяФайлаПечатнойФормы);
|
||
Вложение.АдресВоВременномХранилище = СтруктураЕдиногоДокумента.АдресПечатнойФормы;
|
||
Вложение.ОбъектПечати = ВыбранноеЗначение.ОбъектПечати;
|
||
СписокВложений = Новый Массив;
|
||
СписокВложений.Добавить(Вложение);
|
||
КонецЕсли;
|
||
ВыбранноеЗначение.Вставить("СписокВложений", СписокВложений);
|
||
|
||
ФайлыВоВременномХранилище = ПоместитьОфисныеДокументыВоВременноеХранилище(ВыбранноеЗначение,,Истина);
|
||
|
||
Если ВыбранноеЗначение.Подписать Тогда
|
||
|
||
Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.СохранениеПечатнойФормы") Тогда
|
||
Если ВыбранноеЗначение.ВариантСохранения = "Присоединить" Тогда
|
||
ФайлыВоВременномХранилище = ПоместитьФайлыВАрхив(ФайлыВоВременномХранилище, ВыбранноеЗначение);
|
||
ЗаписанныеОбъекты = ПрисоединитьПечатныеФормыКОбъекту(ФайлыВоВременномХранилище);
|
||
ПараметрыВыбора.Вставить("ЗаписанныеОбъекты", ЗаписанныеОбъекты);
|
||
ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершениеОбработкиВыбора", ЭтотОбъект, ПараметрыВыбора);
|
||
ПодписатьЗаписанныеОбъекты(ЗаписанныеОбъекты, ОписаниеОповещения);
|
||
Возврат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ПодписатьФайлы(ФайлыВоВременномХранилище, ПараметрыВыбора);
|
||
Иначе
|
||
ПараметрыВыбора.ВыбранноеЗначение.Вставить("СписокВложений",
|
||
ПоместитьФайлыВАрхив(ФайлыВоВременномХранилище, ВыбранноеЗначение));
|
||
ЗавершениеОбработкиВыбора(Истина, ПараметрыВыбора);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПодписатьЗаписанныеОбъекты(ЗаписанныеОбъекты, ОповещениеЗавершенияПодписания)
|
||
ДополнительныеПараметры = Новый Структура("ОбработкаРезультата", ОповещениеЗавершенияПодписания);
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
|
||
МодульРаботаСФайламиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиКлиент");
|
||
МодульРаботаСФайламиКлиент.ПодписатьФайл(ЗаписанныеОбъекты, УникальныйИдентификатор, ДополнительныеПараметры);
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПодписатьФайлы(ФайлыВоВременномХранилище, ПараметрыВыбора)
|
||
|
||
ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершениеОбработкиВыбора", ЭтотОбъект, ПараметрыВыбора);
|
||
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
|
||
ОписаниеДанных = Новый Структура;
|
||
ОписаниеДанных.Вставить("ПоказатьКомментарий", Ложь);
|
||
Если ФайлыВоВременномХранилище.Количество() > 1 Тогда
|
||
ОписаниеДанных.Вставить("Операция", НСтр("ru = 'Подписание файлов'"));
|
||
ОписаниеДанных.Вставить("ЗаголовокДанных", НСтр("ru = 'Файлы'"));
|
||
|
||
НаборДанных = Новый Массив;
|
||
Для Каждого Файл Из ФайлыВоВременномХранилище Цикл
|
||
ОписаниеДанныхФайла = Новый Структура;
|
||
ОписаниеДанныхФайла.Вставить("Представление", Файл.Представление);
|
||
ОписаниеДанныхФайла.Вставить("Данные", Файл.АдресВоВременномХранилище);
|
||
ОписаниеДанныхФайла.Вставить("ОбъектПечати", Файл.ОбъектПечати);
|
||
НаборДанных.Добавить(ОписаниеДанныхФайла);
|
||
КонецЦикла;
|
||
|
||
ОписаниеДанных.Вставить("НаборДанных", НаборДанных);
|
||
ОписаниеДанных.Вставить("ПредставлениеНабора", "Файлы (%1)");
|
||
Иначе
|
||
Файл = ФайлыВоВременномХранилище[0];
|
||
ОписаниеДанных.Вставить("Операция", НСтр("ru = 'Подписание файла'"));
|
||
ОписаниеДанных.Вставить("ЗаголовокДанных", НСтр("ru = 'Файл'"));
|
||
ОписаниеДанных.Вставить("Представление", Файл.Представление);
|
||
ОписаниеДанных.Вставить("Данные", Файл.АдресВоВременномХранилище);
|
||
ОписаниеДанных.Вставить("ОбъектПечати", Файл.ОбъектПечати);
|
||
КонецЕсли;
|
||
|
||
МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент");
|
||
МодульЭлектроннаяПодписьКлиент.Подписать(ОписаниеДанных,,ОписаниеОповещения);
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ЗавершениеОбработкиВыбора(Результат, ПараметрыВыбора) Экспорт
|
||
Если Результат = Ложь
|
||
Или (ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("Успех") И Не Результат.Успех) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ВыбранноеЗначение = ПараметрыВыбора.ВыбранноеЗначение;
|
||
ИсточникВыбора = ПараметрыВыбора.ИсточникВыбора;
|
||
|
||
Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.СохранениеПечатнойФормы") Тогда
|
||
|
||
Если ВыбранноеЗначение <> Неопределено И ВыбранноеЗначение <> КодВозвратаДиалога.Отмена Тогда
|
||
Если ВыбранноеЗначение.ВариантСохранения = "СохранитьВПапку" Тогда
|
||
Если ПараметрыВыбора.ВыбранноеЗначение.Подписать Тогда
|
||
ФайлыВоВременномХранилище = ПолучитьФайлыПодписей(Результат, ВыбранноеЗначение.ПереводитьИменаФайловВТранслит);
|
||
ФайлыВоВременномХранилище = ПоместитьФайлыВАрхив(ФайлыВоВременномХранилище, ВыбранноеЗначение);
|
||
СохранитьПечатныеФормыВКаталог(ФайлыВоВременномХранилище, ВыбранноеЗначение.ПапкаДляСохранения);
|
||
Иначе
|
||
СохранитьПечатныеФормыВКаталог(ВыбранноеЗначение.СписокВложений, ВыбранноеЗначение.ПапкаДляСохранения);
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
Если ВыбранноеЗначение.Подписать Тогда
|
||
ЗаписанныеОбъекты = ПараметрыВыбора.ЗаписанныеОбъекты;
|
||
Иначе
|
||
ФайлыВоВременномХранилище = ПоместитьОфисныеДокументыВоВременноеХранилище(ВыбранноеЗначение, Истина);
|
||
ЗаписанныеОбъекты = ПрисоединитьПечатныеФормыКОбъекту(ФайлыВоВременномХранилище);
|
||
КонецЕсли;
|
||
|
||
Если ЗаписанныеОбъекты.Количество() > 0 Тогда
|
||
ОповеститьОбИзменении(ТипЗнч(ЗаписанныеОбъекты[0]));
|
||
КонецЕсли;
|
||
Для Каждого ЗаписанныйОбъект Из ЗаписанныеОбъекты Цикл
|
||
Оповестить("Запись_Файл", Новый Структура, ЗаписанныйОбъект);
|
||
КонецЦикла;
|
||
|
||
ПоказатьОповещениеПользователя(НСтр("ru = 'Сохранение завершено'"), , , БиблиотекаКартинок.Информация32);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ВыборФорматаВложений")
|
||
Или ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ПодготовкаНовогоПисьма") Тогда
|
||
|
||
Если ВыбранноеЗначение <> Неопределено И ВыбранноеЗначение <> КодВозвратаДиалога.Отмена Тогда
|
||
Если ВыбранноеЗначение.Подписать Тогда
|
||
ФайлыВоВременномХранилище = ПолучитьФайлыПодписей(Результат, ВыбранноеЗначение.ПереводитьИменаФайловВТранслит);
|
||
ФайлыВоВременномХранилище = ПоместитьФайлыВАрхив(ФайлыВоВременномХранилище, ВыбранноеЗначение);
|
||
ПараметрыОтправки = ПараметрыОтправкиПисьма(ВыбранноеЗначение, ФайлыВоВременномХранилище);
|
||
ОповещениеОЗакрытииФормы = Неопределено;
|
||
Иначе
|
||
Если ВыбранноеЗначение.Свойство("СписокВложений") Тогда
|
||
Вложения = ВыбранноеЗначение.СписокВложений;
|
||
Иначе
|
||
Вложения = Неопределено;
|
||
КонецЕсли;
|
||
ПараметрыОтправки = ПараметрыОтправкиПисьма(ВыбранноеЗначение, Вложения);
|
||
ОповещениеОЗакрытииФормы = Неопределено;
|
||
КонецЕсли;
|
||
|
||
МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент");
|
||
МодульРаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(ПараметрыОтправки, ОповещениеОЗакрытииФормы);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Функция ПолучитьФайлыПодписей(СтруктураПодписания, ПереводитьИменаФайловВТранслит)
|
||
Если СтруктураПодписания.Свойство("НаборДанных") Тогда
|
||
НаборДанных = СтруктураПодписания.НаборДанных;
|
||
Иначе
|
||
НаборДанных = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СтруктураПодписания);
|
||
КонецЕсли;
|
||
|
||
МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись");
|
||
МодульЭлектроннаяПодписьСлужебныйКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйКлиентСервер");
|
||
РасширениеДляФайловПодписи = МодульЭлектроннаяПодпись.ПерсональныеНастройки().РасширениеДляФайловПодписи;
|
||
КомуВыданСертификат = СтруктураПодписания.ВыбранныйСертификат.Ссылка.КомуВыдан;
|
||
Если ПереводитьИменаФайловВТранслит Тогда
|
||
КомуВыданСертификат = СтроковыеФункции.СтрокаЛатиницей(КомуВыданСертификат);
|
||
КонецЕсли;
|
||
|
||
Результат = Новый Массив;
|
||
Для Каждого ПодписанныйФайл Из НаборДанных Цикл
|
||
СтруктураОписанияФайла = Новый Структура("АдресВоВременномХранилище, Представление, ОбъектПечати");
|
||
СтруктураОписанияФайла.АдресВоВременномХранилище = ПодписанныйФайл.Данные;
|
||
СтруктураОписанияФайла.Представление = ПодписанныйФайл.Представление;
|
||
СтруктураОписанияФайла.ОбъектПечати = ПодписанныйФайл.ОбъектПечати;
|
||
Результат.Добавить(СтруктураОписанияФайла);
|
||
|
||
Файл = Новый Файл(ПодписанныйФайл.Представление);
|
||
|
||
СвойстваПодписи = ПодписанныйФайл.СвойстваПодписи;
|
||
ДанныеПодписи = ПоместитьВоВременноеХранилище(СвойстваПодписи.Подпись, УникальныйИдентификатор);
|
||
ИмяФайлаПодписи = МодульЭлектроннаяПодписьСлужебныйКлиентСервер.ИмяФайлаПодписи(Файл.ИмяБезРасширения,
|
||
Строка(КомуВыданСертификат), РасширениеДляФайловПодписи);
|
||
|
||
СтруктураОписанияФайла = Новый Структура("АдресВоВременномХранилище, Представление, ОбъектПечати");
|
||
СтруктураОписанияФайла.АдресВоВременномХранилище = ДанныеПодписи;
|
||
СтруктураОписанияФайла.Представление = ИмяФайлаПодписи;
|
||
СтруктураОписанияФайла.ОбъектПечати = ПодписанныйФайл.ОбъектПечати;
|
||
Результат.Добавить(СтруктураОписанияФайла);
|
||
|
||
ДанныеПоСертификату = ПоместитьВоВременноеХранилище(СвойстваПодписи.Сертификат, УникальныйИдентификатор);
|
||
|
||
Если ТипЗнч(СвойстваПодписи.Сертификат) = Тип("Строка") Тогда
|
||
РасширениеСертификата = "txt";
|
||
Иначе
|
||
РасширениеСертификата = "cer";
|
||
КонецЕсли;
|
||
|
||
ИмяФайлаСертификата = МодульЭлектроннаяПодписьСлужебныйКлиентСервер.ИмяФайлаСертификата(Файл.ИмяБезРасширения,
|
||
Строка(КомуВыданСертификат), РасширениеСертификата);
|
||
|
||
СтруктураОписанияФайла = Новый Структура("АдресВоВременномХранилище, Представление, ОбъектПечати");
|
||
СтруктураОписанияФайла.АдресВоВременномХранилище = ДанныеПоСертификату;
|
||
СтруктураОписанияФайла.Представление = ИмяФайлаСертификата;
|
||
СтруктураОписанияФайла.ОбъектПечати = ПодписанныйФайл.ОбъектПечати;
|
||
Результат.Добавить(СтруктураОписанияФайла);
|
||
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция ПоместитьФайлыВоВременноеХранилище(МассивФайлов)
|
||
СписокВложений = Новый Массив;
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
|
||
МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный");
|
||
Для Каждого Файл Из МассивФайлов Цикл
|
||
МассивДляФайла = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Файл);
|
||
МассивВложенийФайла = МодульРаботаСФайламиСлужебный.ПоместитьФайлыВоВременноеХранилище(МассивДляФайла, УникальныйИдентификаторХранилища);
|
||
Для Каждого ВложениеФайла Из МассивВложенийФайла Цикл
|
||
ВложениеФайла.Вставить("ОбъектПечати", Файл.ВладелецФайла);
|
||
КонецЦикла;
|
||
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СписокВложений, МассивВложенийФайла);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Возврат СписокВложений;
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция ДоступныеЯзыкиПечатныхФорм()
|
||
|
||
Результат = Новый Массив;
|
||
|
||
Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл
|
||
Если Не НастройкаПечатнойФормы.ДоступенВыводНаДругихЯзыках Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Для Каждого КодЯзыка Из СтрРазделить(НастройкаПечатнойФормы.ДоступныеЯзыки, ",", Ложь) Цикл
|
||
Если Результат.Найти(КодЯзыка) = Неопределено Тогда
|
||
Результат.Добавить(КодЯзыка);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ДополнительнаяИнформацияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
|
||
СтандартнаяОбработка = Ложь;
|
||
|
||
ИнтеграцияПодсистемБСПКлиент.ПечатьДокументовОбработкаНавигационнойСсылки(ЭтотОбъект, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
|
||
УправлениеПечатьюКлиентПереопределяемый.ПечатьДокументовОбработкаНавигационнойСсылки(ЭтотОбъект, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
|
||
КонецПроцедуры
|
||
|
||
// Ветка процедуры, возникающая после установки расширения работы с файлами.
|
||
&НаКлиенте
|
||
Процедура ПродолжитьПечатьПослеУстановкиРасширенияРаботыСФайлами(РасширениеПодключено, ДополнительныеПараметры) Экспорт
|
||
|
||
#Если ВебКлиент Тогда
|
||
Текст = НСтр("ru = 'Распечатайте документ при помощи приложения, предназначенного для работы с данным файлом.'");
|
||
ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьОтмеченныеПечатныеФормы", ЭтотОбъект);
|
||
ПоказатьПредупреждение(ОписаниеОповещения, Текст,,НСтр("ru = 'Печать документа из веб-клиента'"));
|
||
Возврат;
|
||
#КонецЕсли
|
||
|
||
Если Не РасширениеПодключено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
РасширениеДляРаботыСФайламиПодключено = РасширениеПодключено;
|
||
|
||
МассивПечатныхФорм = ПолучитьПечатныеФормы(СтруктураЕдиногоДокумента, ДополнительныеПараметры);
|
||
|
||
|
||
#Если ВебКлиент Тогда
|
||
Оповещение = Новый ОписаниеОповещения(
|
||
"ПечатьПослеПолученияИмениВременногоКаталога", ЭтотОбъект, МассивПечатныхФорм);
|
||
НачатьПолучениеКаталогаВременныхФайлов(Оповещение);
|
||
#Иначе
|
||
ПечатьПослеПолученияИмениВременногоКаталога("", МассивПечатныхФорм);
|
||
#КонецЕсли
|
||
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПечатьПослеПолученияИмениВременногоКаталога(ИмяКаталогаВременныхФайлов, МассивПечатныхФорм) Экспорт
|
||
|
||
Для Каждого ПечатнаяФорма Из МассивПечатныхФорм Цикл
|
||
#Если ВебКлиент Тогда
|
||
ИмяВременногоФайла = ИмяКаталогаВременныхФайлов + Строка(Новый УникальныйИдентификатор);
|
||
#Иначе
|
||
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("DOCX"); // АПК:441 Функция для получения имени временного файла.
|
||
#КонецЕсли
|
||
Оповещение = Новый ОписаниеОповещения("ПослеСохраненияФайла", ЭтотОбъект, ИмяВременногоФайла);
|
||
ДанныеДокумента = ПолучитьИзВременногоХранилища(ПечатнаяФорма.АдресПечатнойФормы); // ДвоичныеДанные
|
||
ДанныеДокумента.НачатьЗапись(Оповещение, ИмяВременногоФайла);
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПослеСохраненияФайла(ИмяВременногоФайла) Экспорт
|
||
НапечататьФайлПриложением(ИмяВременногоФайла);
|
||
СписокФайловДляУдаления.Добавить(ИмяВременногоФайла);
|
||
КонецПроцедуры
|
||
|
||
|
||
|
||
#Область ПечатьПриложением
|
||
// Процедура предназначена для печати файла соответствующим приложением
|
||
//
|
||
// Параметры:
|
||
// ИмяФайлаДляПечати - Строка.
|
||
//
|
||
&НаКлиенте
|
||
Процедура НапечататьФайлПриложением(ИмяФайлаДляПечати)
|
||
|
||
#Если МобильныйКлиент Тогда
|
||
ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов данного типа возможна только из приложения для Windows или Linux.'"));
|
||
Возврат;
|
||
#Иначе
|
||
|
||
Попытка
|
||
|
||
Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда
|
||
ИмяФайлаДляПечати = СтрЗаменить(ИмяФайлаДляПечати, "/", "\");
|
||
КонецЕсли;
|
||
|
||
ФайловаяСистемаКлиент.НапечататьИзПриложенияПоИмениФайла(ИмяФайлаДляПечати);
|
||
|
||
Исключение
|
||
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
|
||
НСтр("ru = 'Не удалось распечатать файл по причине:
|
||
|%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
|
||
КонецПопытки;
|
||
#КонецЕсли
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
// Параметры:
|
||
// ВыбранныеПараметры - см. УправлениеПечатью.НастройкиСохранения
|
||
//
|
||
&НаСервере
|
||
Функция ПараметрыОтправкиПисьма(ВыбранныеПараметры, Вложения)
|
||
Если Вложения <> Неопределено Тогда
|
||
Если ТипЗнч(Вложения[0]) = Тип("Структура") Тогда
|
||
СписокВложений = Вложения;
|
||
Иначе
|
||
СписокВложений = ПоместитьФайлыВоВременноеХранилище(Вложения);
|
||
|
||
Для Каждого Вложение Из СписокВложений Цикл
|
||
Вложение.Вставить("Печать", Истина);
|
||
Вложение.Вставить("Название", Вложение.Представление);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Иначе
|
||
СписокВложений = ПоместитьОфисныеДокументыВоВременноеХранилище(ВыбранныеПараметры);
|
||
КонецЕсли;
|
||
|
||
// Контроль уникальности имен.
|
||
ШаблонИмениФайла = "%1%2.%3";
|
||
ИспользованныеИменаФайлов = Новый Соответствие;
|
||
Для Каждого Вложение Из СписокВложений Цикл
|
||
ИмяФайла = Вложение.Представление;
|
||
НомерИспользования = ?(ИспользованныеИменаФайлов[ИмяФайла] <> Неопределено,
|
||
ИспользованныеИменаФайлов[ИмяФайла] + 1, 1);
|
||
ИспользованныеИменаФайлов.Вставить(ИмяФайла, НомерИспользования);
|
||
Если НомерИспользования > 1 Тогда
|
||
Файл = Новый Файл(ИмяФайла);
|
||
ИмяФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениФайла,
|
||
Файл.ИмяБезРасширения, " (" + НомерИспользования + ")", Файл.Расширение);
|
||
КонецЕсли;
|
||
Вложение.Представление = ИмяФайла;
|
||
КонецЦикла;
|
||
|
||
Получатели = ПараметрыВывода.ПараметрыОтправки.Получатель;
|
||
Если ВыбранныеПараметры.Свойство("Получатели") Тогда
|
||
Получатели = ВыбранныеПараметры.Получатели;
|
||
КонецЕсли;
|
||
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("Получатель", Получатели);
|
||
Результат.Вставить("Тема", ПараметрыВывода.ПараметрыОтправки.Тема);
|
||
Результат.Вставить("Текст", ПараметрыВывода.ПараметрыОтправки.Текст);
|
||
Результат.Вставить("Вложения", СписокВложений);
|
||
Результат.Вставить("УдалятьФайлыПослеОтправки", Истина);
|
||
|
||
Если ОбъектыПечати.Количество() = 1 И ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ОбъектыПечати[0].Значение)) Тогда
|
||
Результат.Вставить("Предмет", ОбъектыПечати[0].Значение);
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ПриПодключенииРасширения(РасширениеПодключено, ДополнительныеПараметры) Экспорт
|
||
|
||
РасширениеДляРаботыСФайламиПодключено = РасширениеПодключено;
|
||
|
||
ПараметрыФормы = Новый Структура;
|
||
ПараметрыФормы.Вставить("ОбъектыПечати", ОбъектыПечати);
|
||
ПараметрыФормы.Вставить("РасширениеДляРаботыСФайламиПодключено", РасширениеПодключено);
|
||
ПараметрыФормы.Вставить("ОграничениеФорматовСохранения", "docx");
|
||
ОткрытьФорму("ОбщаяФорма.СохранениеПечатнойФормы", ПараметрыФормы, ЭтотОбъект, "ПечатьДокументовOfficeOpen");
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОтправитьПечатныеФормыПоПочте()
|
||
ОписаниеОповещения = Новый ОписаниеОповещения("ОтправитьПечатныеФормыПоПочтеНастройкаУчетнойЗаписиПредложена", ЭтотОбъект);
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда
|
||
МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент");
|
||
МодульРаботаСПочтовымиСообщениямиКлиент.ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(ОписаниеОповещения);
|
||
КонецЕсли;
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОтправитьПечатныеФормыПоПочтеНастройкаУчетнойЗаписиПредложена(УчетнаяЗаписьНастроена, ДополнительныеПараметры) Экспорт
|
||
|
||
Если УчетнаяЗаписьНастроена <> Истина Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ПараметрыФормы = Новый Структура;
|
||
ИмяОткрываемойФормы = "ОбщаяФорма.ВыборФорматаВложений";
|
||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия")
|
||
И СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ИспользоватьПочтовыйКлиент Тогда
|
||
Если ПолучателейБольшеОдного(ПараметрыВывода.ПараметрыОтправки.Получатель) Тогда
|
||
ПараметрыФормы.Вставить("Получатели", ПараметрыВывода.ПараметрыОтправки.Получатель);
|
||
ИмяОткрываемойФормы = "ОбщаяФорма.ПодготовкаНовогоПисьма";
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ПараметрыФормы.Вставить("ОграничениеФорматовСохранения", "docx");
|
||
|
||
ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыФормы, ЭтотОбъект, "ПечатьДокументовOfficeOpen");
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура БольшеНеПоказыватьПриИзменении(Элемент)
|
||
БольшеНеПоказыватьПриИзмененииНаСервере(БольшеНеПоказывать);
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Процедура БольшеНеПоказыватьПриИзмененииНаСервере(Значение)
|
||
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПечатьДокументовOfficeOpen",
|
||
"ВыводитьСразу", Значение);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Функция ПолучателейБольшеОдного(Получатель)
|
||
Если ТипЗнч(Получатель) = Тип("Массив") Или ТипЗнч(Получатель) = Тип("СписокЗначений") Тогда
|
||
Возврат Получатель.Количество() > 1;
|
||
Иначе
|
||
Возврат ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(Получатель).Количество() > 1;
|
||
КонецЕсли;
|
||
КонецФункции
|
||
|
||
// Параметры:
|
||
// ТаблицаПечатныхФорм - ТаблицаЗначений
|
||
// НастройкаПечатнойФормы - СтрокаТаблицыЗначений
|
||
// ПечатнаяФорма - см. УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм
|
||
// ПредставлениеПечатнойФормы - Строка
|
||
//
|
||
&НаСервере
|
||
Процедура ДобавитьПечатнуюФорму(ТаблицаПечатныхФорм, НастройкаПечатнойФормы, ПечатнаяФорма, ПредставлениеПечатнойФормы)
|
||
|
||
ИмяФайлаПечатнойФормы = ПредставлениеПечатнойФормы + ".DOCX";
|
||
|
||
НоваяСтрокаПечатнойФормы = ТаблицаПечатныхФорм.Добавить();
|
||
ЗаполнитьЗначенияСвойств(НоваяСтрокаПечатнойФормы, НастройкаПечатнойФормы);
|
||
НоваяСтрокаПечатнойФормы.ОбъектПечати = ПечатнаяФорма.Значение;
|
||
НоваяСтрокаПечатнойФормы.АдресПечатнойФормы = ПечатнаяФорма.Ключ;
|
||
НоваяСтрокаПечатнойФормы.ИмяФайлаПечатнойФормы = ИмяФайлаПечатнойФормы;
|
||
НоваяСтрокаПечатнойФормы.Представление = ПредставлениеПечатнойФормы;
|
||
НоваяСтрокаПечатнойФормы.Пометка = Истина;
|
||
НоваяСтрокаПечатнойФормы.ТекущийЯзык = ОбщегоНазначения.КодОсновногоЯзыка();
|
||
|
||
КонецПроцедуры
|
||
|
||
|
||
&НаСервере
|
||
Функция ПоместитьФайлыВАрхив(ПечатныеФормыДокументов, ПереданныеНастройки)
|
||
Перем ЗаписьZipФайла, ИмяАрхива;
|
||
|
||
Результат = Новый Массив;
|
||
|
||
НастройкиСохранения = НастройкиСохранения();
|
||
ЗаполнитьЗначенияСвойств(НастройкиСохранения, ПереданныеНастройки);
|
||
|
||
Если Не НастройкиСохранения.УпаковатьВАрхив Тогда
|
||
Возврат ПечатныеФормыДокументов;
|
||
КонецЕсли;
|
||
ВариантСохранения = Неопределено;
|
||
ПереданныеНастройки.Свойство("ВариантСохранения", ВариантСохранения);
|
||
УстанавливатьОбъектПечати = ВариантСохранения = "Присоединить";
|
||
|
||
ПереводитьИменаФайловВТранслит = НастройкиСохранения.ПереводитьИменаФайловВТранслит;
|
||
|
||
ИмяВременногоКаталога = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолучитьИмяВременногоФайла());
|
||
СоздатьКаталог(ИмяВременногоКаталога);
|
||
|
||
СоответствиеДляАрхивов = Новый Соответствие;
|
||
|
||
Для Каждого СтруктураФайла Из ПечатныеФормыДокументов Цикл
|
||
|
||
ДанныеФайла = ПолучитьИзВременногоХранилища(СтруктураФайла.АдресВоВременномХранилище);
|
||
ПолноеИмяФайла = ИмяВременногоКаталога + СтруктураФайла.Представление;
|
||
ДанныеФайла.Записать(ПолноеИмяФайла);
|
||
|
||
ОбъектПечати = ?(УстанавливатьОбъектПечати, СтруктураФайла.ОбъектПечати, Неопределено);
|
||
|
||
Если СоответствиеДляАрхивов[ОбъектПечати] = Неопределено Тогда
|
||
ИмяАрхива = ПолучитьИмяВременногоФайла("zip");
|
||
ЗаписьZipФайла = Новый ЗаписьZipФайла(ИмяАрхива);
|
||
|
||
Представление = ?(ОбъектПечати = Неопределено, НСтр("ru = 'Документы'"), ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(Строка(ОбъектПечати)));
|
||
Если ПереводитьИменаФайловВТранслит Тогда
|
||
Представление = СтроковыеФункции.СтрокаЛатиницей(Представление);
|
||
КонецЕсли;
|
||
ПараметрыЗаписи = Новый Структура("ЗаписьZipФайла, ИмяАрхива, Представление", ЗаписьZipФайла, ИмяАрхива, Представление+".zip");
|
||
СоответствиеДляАрхивов.Вставить(ОбъектПечати, ПараметрыЗаписи);
|
||
КонецЕсли;
|
||
|
||
СоответствиеДляАрхивов[ОбъектПечати].ЗаписьZipФайла.Добавить(ПолноеИмяФайла);
|
||
|
||
КонецЦикла;
|
||
|
||
Для Каждого АрхивОбъекта Из СоответствиеДляАрхивов Цикл
|
||
ЗаписьZipФайла = АрхивОбъекта.Значение.ЗаписьZipФайла;
|
||
ИмяАрхива = АрхивОбъекта.Значение.ИмяАрхива;
|
||
ЗаписьZipФайла.Записать();
|
||
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива);
|
||
ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификаторХранилища);
|
||
ОписаниеФайла = ОписаниеФайла(АрхивОбъекта.Значение.Представление);
|
||
ОписаниеФайла.Вставить("ОбъектПечати", АрхивОбъекта.Ключ);
|
||
ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище);
|
||
Результат.Добавить(ОписаниеФайла);
|
||
УдалитьФайлы(ИмяАрхива);
|
||
КонецЦикла;
|
||
|
||
УдалитьФайлы(ИмяВременногоКаталога);
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция ПоместитьОфисныеДокументыВоВременноеХранилище(ПереданныеНастройки, ИспользоватьИндивидуальныеПечатныеФормы = Ложь, ЭтоПодписание = Ложь)
|
||
Перем ЗаписьZipФайла, ИмяАрхива;
|
||
|
||
Если ПереданныеНастройки.Свойство("СписокВложений") И ПереданныеНастройки.СписокВложений <> Неопределено
|
||
И Не ИспользоватьИндивидуальныеПечатныеФормы Тогда
|
||
НастройкиПечатныхФормВр = ПереданныеНастройки.СписокВложений; // единый документ
|
||
Иначе
|
||
НастройкиПечатныхФормВр = НастройкиПечатныхФорм;
|
||
КонецЕсли;
|
||
|
||
НастройкиСохранения = НастройкиСохранения();
|
||
ЗаполнитьЗначенияСвойств(НастройкиСохранения, ПереданныеНастройки);
|
||
|
||
Результат = Новый Массив;
|
||
|
||
// подготовка архива
|
||
Если НастройкиСохранения.УпаковатьВАрхив И НЕ ЭтоПодписание Тогда
|
||
ИмяАрхива = ПолучитьИмяВременногоФайла("zip");
|
||
ЗаписьZipФайла = Новый ЗаписьZipФайла(ИмяАрхива);
|
||
КонецЕсли;
|
||
|
||
ИмяВременногоКаталога = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолучитьИмяВременногоФайла());
|
||
СоздатьКаталог(ИмяВременногоКаталога);
|
||
|
||
ПереводитьИменаФайловВТранслит = НастройкиСохранения.ПереводитьИменаФайловВТранслит;
|
||
|
||
ОбъектыДляПрикрепления = Неопределено;
|
||
Если ПереданныеНастройки.Свойство("ОбъектыДляПрикрепления") Тогда
|
||
ОбъектыДляПрикрепления = ОбщегоНазначения.СкопироватьРекурсивно(ПереданныеНастройки.ОбъектыДляПрикрепления);
|
||
КонецЕсли;
|
||
|
||
// сохранение печатных форм
|
||
Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФормВр Цикл
|
||
Если НастройкаПечатнойФормы.Свойство("ОфисныеДокументы") И НЕ ПустаяСтрока(НастройкаПечатнойФормы.ОфисныеДокументы) Тогда
|
||
|
||
ФайлыОфисныхДокументов = ОбщегоНазначения.ЗначениеИзСтрокиXML(НастройкаПечатнойФормы.ОфисныеДокументы);
|
||
|
||
Для Каждого ФайлОфисногоДокумента Из ФайлыОфисныхДокументов Цикл
|
||
ИмяФайла = УправлениеПечатью.ИмяФайлаОфисногоДокумента(ФайлОфисногоДокумента.Значение);
|
||
ОбъектПечати = ФайлОфисногоДокумента.Значение;
|
||
Если ОбъектыДляПрикрепления <> Неопределено И ОбъектыДляПрикрепления[ОбъектПечати] <> Истина Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
Если ПереводитьИменаФайловВТранслит Тогда
|
||
ИмяФайла = СтроковыеФункции.СтрокаЛатиницей(ИмяФайла);
|
||
КонецЕсли;
|
||
|
||
Если ЗаписьZipФайла <> Неопределено Тогда
|
||
ПолноеИмяФайла = ФайловаяСистема.УникальноеИмяФайла(ИмяВременногоКаталога + ИмяФайла);
|
||
ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлОфисногоДокумента.Ключ); // ДвоичныеДанные -
|
||
ДвоичныеДанные.Записать(ПолноеИмяФайла);
|
||
ЗаписьZipФайла.Добавить(ПолноеИмяФайла);
|
||
Иначе
|
||
ОписаниеФайла = ОписаниеФайла(ИмяФайла);
|
||
ОписаниеФайла.Вставить("АдресВоВременномХранилище", ФайлОфисногоДокумента.Ключ);
|
||
ОписаниеФайла.Вставить("ОбъектПечати", ОбъектПечати);
|
||
Результат.Добавить(ОписаниеФайла);
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Продолжить;
|
||
ИначеЕсли НастройкаПечатнойФормы.Свойство("АдресВоВременномХранилище") Тогда
|
||
|
||
Если ОбъектыДляПрикрепления <> Неопределено И ОбъектыДляПрикрепления[НастройкаПечатнойФормы.ОбъектПечати] <> Истина Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
ИмяФайла = НастройкаПечатнойФормы.Представление;
|
||
|
||
Если ПереводитьИменаФайловВТранслит Тогда
|
||
ИмяФайла = СтроковыеФункции.СтрокаЛатиницей(ИмяФайла);
|
||
КонецЕсли;
|
||
|
||
Если ЗаписьZipФайла <> Неопределено Тогда
|
||
ПолноеИмяФайла = ФайловаяСистема.УникальноеИмяФайла(ИмяВременногоКаталога + ИмяФайла);
|
||
ДвоичныеДанные = ПолучитьИзВременногоХранилища(НастройкаПечатнойФормы.АдресВоВременномХранилище); // ДвоичныеДанные -
|
||
ДвоичныеДанные.Записать(ПолноеИмяФайла);
|
||
ЗаписьZipФайла.Добавить(ПолноеИмяФайла);
|
||
Иначе
|
||
ОписаниеФайла = ОписаниеФайла(ИмяФайла);
|
||
ОписаниеФайла.Вставить("АдресВоВременномХранилище", НастройкаПечатнойФормы.АдресВоВременномХранилище);
|
||
ОписаниеФайла.Вставить("ОбъектПечати", НастройкаПечатнойФормы.ОбъектПечати);
|
||
Результат.Добавить(ОписаниеФайла);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
// Если архив подготовлен, записываем и помещаем его во временное хранилище.
|
||
Если ЗаписьZipФайла <> Неопределено Тогда
|
||
ЗаписьZipФайла.Записать();
|
||
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива);
|
||
ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификаторХранилища);
|
||
ОписаниеФайла = ОписаниеФайла(ПолучитьИмяФайлаДляАрхива(ПереводитьИменаФайловВТранслит, НастройкиПечатныхФормВр));
|
||
ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище);
|
||
Если ПереданныеНастройки.Свойство("ОбъектПечати") Тогда
|
||
ОписаниеФайла.Вставить("ОбъектПечати", ПереданныеНастройки.ОбъектПечати);
|
||
Иначе
|
||
ОписаниеФайла.Вставить("ОбъектПечати", Неопределено);
|
||
КонецЕсли;
|
||
Результат.Добавить(ОписаниеФайла);
|
||
КонецЕсли;
|
||
|
||
УдалитьФайлы(ИмяВременногоКаталога);
|
||
Если ЗначениеЗаполнено(ИмяАрхива) Тогда
|
||
УдалитьФайлы(ИмяАрхива);
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция ПолучитьИмяФайлаДляАрхива(ПереводитьИменаФайловВТранслит, НастройкиПечатныхФормВр = Неопределено)
|
||
|
||
Если НастройкиПечатныхФормВр = Неопределено Тогда
|
||
НастройкиПечатныхФормВр = НастройкиПечатныхФорм;
|
||
КонецЕсли;
|
||
|
||
Результат = "";
|
||
|
||
Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФормВр Цикл
|
||
|
||
Если Не ВыводДоступен() Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
Если ПустаяСтрока(Результат) Тогда
|
||
Результат = НастройкаПечатнойФормы.Название;
|
||
Иначе
|
||
Результат = НСтр("ru = 'Документы'");
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если ПереводитьИменаФайловВТранслит Тогда
|
||
Результат = СтроковыеФункции.СтрокаЛатиницей(Результат);
|
||
КонецЕсли;
|
||
|
||
Возврат Результат + ".zip";
|
||
|
||
КонецФункции
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция НастройкиСохранения()
|
||
|
||
Возврат УправлениеПечатью.НастройкиСохранения();
|
||
|
||
КонецФункции
|
||
|
||
&НаСервере
|
||
Функция ВыводДоступен()
|
||
Возврат ПравоДоступа("Вывод", Метаданные);
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура СохранитьПечатныеФормыВКаталог(СписокФайловВоВременномХранилище, Знач ИмяКаталога = "")
|
||
|
||
Если РасширениеДляРаботыСФайламиПодключено И ЗначениеЗаполнено(ИмяКаталога) Тогда
|
||
ИмяКаталога = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталога);
|
||
Иначе
|
||
ПриПодготовкеИменФайлов(СписокФайловВоВременномХранилище, "");
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ОписаниеОповещения = Новый ОписаниеОповещения("ПриПодготовкеИменФайлов", ЭтотОбъект, ИмяКаталога);
|
||
ПараметрыПодготовки = УправлениеПечатьюКлиент.ПараметрыПодготовкиИменФайлов(СписокФайловВоВременномХранилище, ИмяКаталога, ОписаниеОповещения);
|
||
ПодготовитьИменаФайловДляСохраненияВКаталог(ПараметрыПодготовки);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Параметры:
|
||
// ПараметрыПодготовки - см. УправлениеПечатьюКлиент.ПараметрыПодготовкиИменФайлов
|
||
//
|
||
&НаКлиенте
|
||
Процедура ПодготовитьИменаФайловДляСохраненияВКаталог(ПараметрыПодготовки)
|
||
|
||
УправлениеПечатьюКлиент.ПодготовитьИменаФайловДляСохраненияВКаталог(ПараметрыПодготовки);
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПриПодготовкеИменФайлов(СписокФайловВоВременномХранилище, ИмяКаталога) Экспорт
|
||
|
||
СохраняемыеФайлы = Новый Массив;
|
||
|
||
Для Каждого ФайлДляЗаписи Из СписокФайловВоВременномХранилище Цикл
|
||
ИмяФайла = ФайлДляЗаписи.Представление;
|
||
СохраняемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, ФайлДляЗаписи.АдресВоВременномХранилище));
|
||
КонецЦикла;
|
||
|
||
ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайлов();
|
||
ПараметрыСохранения.Диалог.Каталог = ИмяКаталога;
|
||
ПараметрыСохранения.Интерактивно = Не ЗначениеЗаполнено(ИмяКаталога);
|
||
ФайловаяСистемаКлиент.СохранитьФайлы(Неопределено, СохраняемыеФайлы, ПараметрыСохранения);
|
||
|
||
#Если Не ВебКлиент Тогда
|
||
Если ЗначениеЗаполнено(ИмяКаталога) Тогда
|
||
ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьПапкуСохранения", ЭтотОбъект, ИмяКаталога);
|
||
ПоказатьОповещениеПользователя(НСтр("ru = 'Сохранение успешно завершено'"), ОписаниеОповещения,
|
||
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'в папку %1'"), ИмяКаталога), БиблиотекаКартинок.Информация32);
|
||
КонецЕсли;
|
||
#КонецЕсли
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ОткрытьПапкуСохранения(ИмяКаталога) Экспорт
|
||
ФайловаяСистемаКлиент.ОткрытьПроводник(ИмяКаталога);
|
||
КонецПроцедуры
|
||
|
||
&НаСервере
|
||
Функция ПрисоединитьПечатныеФормыКОбъекту(ФайлыВоВременномХранилище)
|
||
Результат = Новый Массив;
|
||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
|
||
МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами");
|
||
Для Каждого Файл Из ФайлыВоВременномХранилище Цикл
|
||
Если МодульРаботаСФайлами.КОбъектуМожноПрисоединятьФайлы(Файл["ОбъектПечати"]) Тогда
|
||
ПараметрыФайла = МодульРаботаСФайлами.ПараметрыДобавленияФайла();
|
||
ПараметрыФайла.ВладелецФайлов = Файл["ОбъектПечати"];
|
||
ПараметрыФайла.ИмяБезРасширения = Файл.Представление;
|
||
Результат.Добавить(МодульРаботаСФайлами.ДобавитьФайл(
|
||
ПараметрыФайла, Файл.АдресВоВременномХранилище, , НСтр("ru = 'Печатная форма'")));
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Процедура ПечатьПродолжение(Результат, МассивПечатныхФорм) Экспорт
|
||
Если Результат.Статус = "Ошибка" Тогда
|
||
ВызватьИсключение Результат.КраткоеПредставлениеОшибки;
|
||
Иначе
|
||
СтруктураЕдиногоДокумента = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
|
||
МассивПечатныхФорм = ПолучитьПечатныеФормы(СтруктураЕдиногоДокумента, МассивПечатныхФорм);
|
||
ПечатьЗавершение(МассивПечатныхФорм);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПечатьЗавершение(МассивПечатныхФорм)
|
||
Обработчик = Новый ОписаниеОповещения("ПродолжитьПечатьПослеУстановкиРасширенияРаботыСФайлами", ЭтотОбъект, МассивПечатныхФорм);
|
||
ТекстСообщения = НСтр("ru = 'Для продолжения установите расширение для работы с 1С:Предприятием.'");
|
||
ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Обработчик, ТекстСообщения);
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура НачатьПолучениеПечатныхФорм(СтруктураЕдиногоДокумента, Оповещение)
|
||
ДлительнаяОперация = ДлительнаяОперацияПолученияПечатныхФорм(СтруктураЕдиногоДокумента);
|
||
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания());
|
||
КонецПроцедуры
|
||
|
||
&НаСервереБезКонтекста
|
||
Функция ОписаниеФайла(НаименованиеФайла = "")
|
||
ОписаниеФайла = Новый Структура;
|
||
ОписаниеФайла.Вставить("АдресВоВременномХранилище", "");
|
||
ОписаниеФайла.Вставить("Название", НаименованиеФайла);
|
||
ОписаниеФайла.Вставить("Печать", Истина);
|
||
ОписаниеФайла.Вставить("Представление", НаименованиеФайла);
|
||
ОписаниеФайла.Вставить("ОбъектПечати", Неопределено);
|
||
ОписаниеФайла.Вставить("ЭтоОфисныйДокумент", Истина);
|
||
Возврат ОписаниеФайла;
|
||
КонецФункции
|
||
#КонецОбласти
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|