#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ДляВызоваИзДругихПодсистем
Процедура ПриОпределенииНастроекПечати(Настройки) Экспорт
Настройки.ПриДобавленииКомандПечати = Истина;
КонецПроцедуры
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "СогласиеНаОбработкуПерсональныхДанных";
КомандаПечати.Представление = НСтр("ru = 'Согласие на обработку ПДн (табличный документ 1С:Предприятия)'");
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.МенеджерПечати = "УправлениеПечатью";
КомандаПечати.Идентификатор = "Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных_ru";
КомандаПечати.Представление = НСтр("ru = 'Согласие на обработку ПДн (документ Office Open XML)'");
КомандаПечати.Картинка = БиблиотекаКартинок.ФорматWord;
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КонецПроцедуры
Процедура ПриОпределенииИсточниковДанныхПечати(Объект, ИсточникиДанныхПечати) Экспорт
Если Объект = "Документ.СогласиеНаОбработкуПерсональныхДанных.ФИООтветственногоЗаОбработкуПДн" Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СклонениеПредставленийОбъектов") Тогда
МодульСклонениеПредставленийОбъектов = ОбщегоНазначения.ОбщийМодуль("СклонениеПредставленийОбъектов");
МодульСклонениеПредставленийОбъектов.ПодключитьИсточникДанныхПечатиСклоненияСтрок(ИсточникиДанныхПечати);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "СогласиеНаОбработкуПерсональныхДанных");
Если ПечатнаяФорма <> Неопределено Тогда
ИменаФайлов = Новый Соответствие;
Шаблон = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Согласие на обработку ПДн [%1] - [%2] (№[%3] получено [%4])'"),
"Субъект",
"Организация",
"Номер",
"ДатаПолучения");
ЗначенияРеквизитовДокументов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивОбъектов, "Организация,Субъект,Номер,ДатаПолучения,Ссылка");
Для Каждого Ссылка Из МассивОбъектов Цикл
ЗначенияРеквизитовДокумента = ЗначенияРеквизитовДокументов[Ссылка];
ЗначенияРеквизитовДокумента.ДатаПолучения = Формат(ЗначенияРеквизитовДокумента.ДатаПолучения, "ДЛФ=D");
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрефиксацияОбъектов") Тогда
МодульПрефиксацияОбъектовКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПрефиксацияОбъектовКлиентСервер");
ЗначенияРеквизитовДокумента.Номер = МодульПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ЗначенияРеквизитовДокумента.Номер);
КонецЕсли;
ИмяФайла = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(Шаблон, ЗначенияРеквизитовДокументов[Ссылка]);
ИменаФайлов.Вставить(Ссылка, ИмяФайла);
КонецЦикла;
ПечатнаяФорма.ТабличныйДокумент = ПечатьСогласияНаОбработкуПДн(МассивОбъектов, ОбъектыПечати);
ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Согласие на обработку ПДн'");
ПечатнаяФорма.ПолныйПутьКМакету = "Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных";
ПечатнаяФорма.ИмяФайлаПечатнойФормы = ИменаФайлов;
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
Документы.ОтзывСогласияНаОбработкуПерсональныхДанных.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
КонецПроцедуры
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Возврат СозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, Метаданные.Документы.СогласиеНаОбработкуПерсональныхДанных);
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ПечатьСогласияНаОбработкуПДн(Согласия, ОбъектыПечати)
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.КлючПараметровПечати = "ПараметрыПечати_СогласиеНаОбработкуПерсональныхДанных";
ОбластиМакета = Новый Структура;
ОбластиМакета.Вставить("Заголовок");
ОбластиМакета.Вставить("НомерДата");
ОбластиМакета.Вставить("Преамбула");
ОбластиМакета.Вставить("П1_ЦелиОбработкиПДн");
ОбластиМакета.Вставить("П2_СоставПДн");
ОбластиМакета.Вставить("П3_ДействияСПДн");
ОбластиМакета.Вставить("П4_ПравоПолученияИнформации");
ОбластиМакета.Вставить("П5_СрокДействия");
ОбластиМакета.Вставить("П6_ПравоОтзыва");
ОбластиМакета.Вставить("РеквизитыОператора");
ОбластиМакета.Вставить("РеквизитыСубъекта");
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_MXL_СогласиеНаОбработкуПерсональныхДанных");
ДанныеДляПечати = ДанныеДляПечатиСогласий(Согласия);
ПервыйДокумент = Истина;
Для Каждого ОписаниеСогласия Из ДанныеДляПечати Цикл
Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
СогласиеФорма = Новый ТабличныйДокумент;
Для Каждого КлючИЗначение Из ОбластиМакета Цикл
ИмяОбласти = КлючИЗначение.Ключ;
ОбластьМакета = Макет.ПолучитьОбласть(ИмяОбласти);
ОбластьМакета.Параметры.Заполнить(ОписаниеСогласия);
СогласиеФорма.Вывести(ОбластьМакета);
КонецЦикла;
ТабличныйДокумент.Вывести(СогласиеФорма);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ОписаниеСогласия.ДокументОснование);
КонецЦикла;
Возврат ТабличныйДокумент;
КонецФункции
Функция ДанныеДляПечатиСогласий(Согласия)
ДанныеДляПечати = Новый Массив;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Согласия.Ссылка КАК ДокументОснование,
| Согласия.Номер КАК Номер,
| Согласия.Организация КАК Организация,
| Согласия.НаименованиеОрганизации КАК НаименованиеОрганизации,
| Согласия.ЮридическийАдресОрганизации КАК АдресОрганизации,
| Согласия.ОтветственныйЗаОбработкуПерсональныхДанных КАК ОтветственныйЗаОбработкуПерсональныхДанных,
| Согласия.ФИООтветственногоЗаОбработкуПДн КАК ФИООтветственногоЗаОбработкуПДн,
| Согласия.Субъект КАК Субъект,
| Согласия.ФИОСубъекта КАК ФИО,
| Согласия.АдресСубъекта КАК Адрес,
| Согласия.ПаспортныеДанные КАК ПаспортныеДанные,
| Согласия.ДатаПолучения КАК ДатаСогласия,
| Согласия.СрокДействия КАК СрокДействия,
| Согласия.Ответственный КАК Ответственный,
| Согласия.Комментарий КАК Комментарий
|ИЗ
| Документ.СогласиеНаОбработкуПерсональныхДанных КАК Согласия
|ГДЕ
| Согласия.Ссылка В(&Согласия)");
Запрос.УстановитьПараметр("Согласия", Согласия);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ПроверитьВозможностьОформленияСогласия(Выборка.Субъект);
Описание = ОписаниеСогласия();
ЗаполнитьЗначенияСвойств(Описание, Выборка);
Если Не ПустаяСтрока(Выборка.НаименованиеОрганизации) Тогда
Описание.Организация = Выборка.НаименованиеОрганизации;
КонецЕсли;
ЗаполнитьОрганизациюВДательномПадеже(Описание, Выборка.НаименованиеОрганизации);
Если Не ПустаяСтрока(Выборка.ФИООтветственногоЗаОбработкуПДн) Тогда
Описание.ОтветственныйЗаОбработкуПерсональныхДанных = Выборка.ФИООтветственногоЗаОбработкуПДн;
КонецЕсли;
ЗаполнитьОтветственногоВРодительномПадеже(Описание, Выборка.ФИООтветственногоЗаОбработкуПДн);
Описание.ДатаСогласия = Формат(Выборка.ДатаСогласия, "ДЛФ=D");
Если ЗначениеЗаполнено(Выборка.СрокДействия) Тогда
Описание.ПериодДействия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'с %1 по %2.'"), Формат(Выборка.ДатаСогласия, "ДЛФ=D"), Формат(Выборка.СрокДействия, "ДЛФ=D"));
Иначе
Описание.ПериодДействия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'с %1 до истечения срока обязательного хранения документов.'"),
Формат(Выборка.ДатаСогласия, "ДЛФ=D"));
КонецЕсли;
ДанныеДляПечати.Добавить(Описание);
КонецЦикла;
Возврат ДанныеДляПечати;
КонецФункции
Функция ОписаниеСогласия()
ОписаниеСогласия = Новый Структура(
"ДатаСогласия,
|ДокументОснование,
|Организация,
|ОрганизацияВДательномПадеже,
|АдресОрганизации,
|ОтветственныйЗаОбработкуПерсональныхДанных,
|ОтветственныйЗаОбработкуПерсональныхДанныхВРодительномПадеже,
|ПериодДействия,
|ФИО,
|Адрес,
|ПаспортныеДанные");
ОписаниеСогласия.ДатаСогласия = НСтр("ru = '«____»_______________20___г.'");
ОписаниеСогласия.Организация = НСтр("ru = '<Организация>'");
ОписаниеСогласия.ОрганизацияВДательномПадеже = ОписаниеСогласия.Организация;
ОписаниеСогласия.АдресОрганизации = НСтр("ru = '<Адрес организации>'");
ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанных = НСтр("ru = '<ФИО ответственного лица>'");
ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанныхВРодительномПадеже = ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанных;
Возврат ОписаниеСогласия;
КонецФункции
Процедура ЗаполнитьОрганизациюВДательномПадеже(ОписаниеСогласия, НаименованиеОрганизации)
Если ПустаяСтрока(НаименованиеОрганизации) Тогда
ОписаниеСогласия.ОрганизацияВДательномПадеже = ОписаниеСогласия.Организация;
Возврат;
КонецЕсли;
ОписаниеСогласия.ОрганизацияВДательномПадеже = НаименованиеОрганизации;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СклонениеПредставленийОбъектов") Тогда
МодульСклонениеПредставленийОбъектов = ОбщегоНазначения.ОбщийМодуль("СклонениеПредставленийОбъектов");
ОписаниеСогласия.ОрганизацияВДательномПадеже = МодульСклонениеПредставленийОбъектов.ПросклонятьПредставление(НаименованиеОрганизации, 3);
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьОтветственногоВРодительномПадеже(ОписаниеСогласия, ФИООтветственного)
Если ПустаяСтрока(ФИООтветственного) Тогда
ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанныхВРодительномПадеже = ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанных;
Возврат;
КонецЕсли;
ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанныхВРодительномПадеже = ФИООтветственного;
СклонениеФИО = "";
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СклонениеПредставленийОбъектов") Тогда
МодульСклонениеПредставленийОбъектов = ОбщегоНазначения.ОбщийМодуль("СклонениеПредставленийОбъектов");
СклонениеФИО = МодульСклонениеПредставленийОбъектов.ПросклонятьФИО(ФИООтветственного, 2);
КонецЕсли;
Если Не ПустаяСтрока(СклонениеФИО) Тогда
ОписаниеСогласия.ОтветственныйЗаОбработкуПерсональныхДанныхВРодительномПадеже = СклонениеФИО;
КонецЕсли;
КонецПроцедуры
#Область РаботаСМакетамиОфисныхДокументов
Процедура ПроверитьВозможностьОформленияСогласия(СубъектПДн) Экспорт
Если ЗащитаПерсональныхДанных.ЭтоОбъектСУничтоженнымиПерсональнымиДанными(СубъектПДн) Тогда
ВызватьИсключение НСтр("ru = 'Оформление согласия невозможно. Персональные данные субъекта уничтожены.'");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли