&НаКлиенте
Перем КонтекстЭДОКлиент;
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ИтогиПоСообщениям = Неопределено;
Если Параметры.Сообщения = Неопределено Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
ПродолжитьАвтообмен = Ложь;
ЭтоМультиРежим = Истина;
ТекущийПользователь = Пользователи.ТекущийПользователь();
Руководитель = Справочники.Пользователи.ПустаяСсылка();
ЭтоЮридическоеЛицо = Истина;
МассивСообщений = Параметры.Сообщения;
ИтогиПоСообщениям = Параметры.ИтогиПоСообщениям;
ПараметрыПоказа = Параметры.ПараметрыПоказа;
ПараметрыПоказа.ПоказДляТекущегоПользователя = Ложь;
Если ПараметрыПоказа.Свойство("Организация") И ЗначениеЗаполнено(ПараметрыПоказа.Организация) Тогда
ИспользуетсяОднаОрганизация = РегламентированнаяОтчетностьВызовСервера.ИспользуетсяОднаОрганизация();
НаименованиеОрганизации = ДокументооборотСКОВызовСервера.КраткоеНаименованиеОрганизации(ПараметрыПоказа.Организация);
ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентСервер.ДобавитьОрганизациюВЗаголовок(
ЭтотОбъект.Заголовок,
ИспользуетсяОднаОрганизация,
НаименованиеОрганизации,
Заголовок);
КонецЕсли;
Если ТипЗнч(МассивСообщений) <> Тип("Массив") И МассивСообщений.Количество() = 0 Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
ЗаполнитьРеквизитыИНастройки(МассивСообщений, ИтогиПоСообщениям, Отказ);
ОпределитьКоличествоСообщенийКРасшифровке();
ДополнитьИнформациейПроТребованийИУведомлений();
Если Отказ Тогда
Возврат;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОписаниеОповещения = Новый ОписаниеОповещения("ПриОткрытииЗавершение", ЭтотОбъект);
ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ОписаниеОповещения);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура КомандаРасшифровать(Команда)
ПродолжитьАвтообмен = Истина;
ЗакрытьФормуИНачатьРасшифровку();
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьПозже(Команда)
ОтложитьПоказ(НапомнитьЧерез);
Если НапомнитьЧерез = "-1" Тогда
ПараметрыПоказа.НикогдаНеПоказыватьДляДругихПользователей = Истина;
ОписаниеОповещения = Новый ОписаниеОповещения("ПоказатьПозжеПослеПредупреждения", ЭтотОбъект);
ПоказатьПредупреждение(
ОписаниеОповещения,
НСтр("ru = 'Вы всегда можете выполнить расшифровку сообщений для других пользователей по гиперссылке ""Прочие настройки обмена"" в разделе ""Настройки"" формы ""1С-Отчетность""'"));
Возврат;
КонецЕсли;
Закрыть(ПараметрыПоказа);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ЗаполнитьРеквизитыИНастройки(МассивСообщений, ИтогиПоСообщениям, Отказ)
Если ИтогиПоСообщениям = Неопределено Тогда
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
ДетальнаяИнформация = КонтекстЭДОСервер.ПолучитьСообщенияДляРасшифровки(МассивСообщений, ПараметрыПоказа);
ИтогиПоСообщениям = ДетальнаяИнформация.ИтогиПоСообщениям;
КонецЕсли;
Если ИтогиПоСообщениям.Количество() = 0 Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
ТаблицаРасшифровкиПоОрганизациям.Очистить();
Для каждого СтрокаРезультата Из ИтогиПоСообщениям Цикл
Если ТипЗнч(СтрокаРезультата) = Тип("Структура")
И СтрокаРезультата.Свойство("Сообщения") Тогда
НоваяСтрока = ТаблицаРасшифровкиПоОрганизациям.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаРезультата);
НоваяСтрока.Отметка = Истина;
КонецЕсли;
КонецЦикла;
ФизическиеЛицаПользователей = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(ПараметрыПоказа.Пользователи,
"ФизическоеЛицо", Истина);
Для каждого СвойстваПользователя Из ПараметрыПоказа.СвойстваПользователей Цикл
НоваяСтрока = ТаблицаПользователей.Добавить();
СтрокаПользователя = Новый Структура;
СтрокаПользователя.Вставить("Пользователь", СвойстваПользователя.Пользователь);
СтрокаПользователя.Вставить("ФизическоеЛицо", ФизическиеЛицаПользователей[СвойстваПользователя.Пользователь]);
НоваяСтрока.Пользователь = Мультирежим.ПредставлениеПользователей(ЭтаФорма, СтрокаПользователя);
Протоколов = СвойстваПользователя.СообщенийПоКатегориям["Протокол"];
Если НЕ ЗначениеЗаполнено(Протоколов) Тогда
Протоколов = 0;
КонецЕсли;
Писем = СвойстваПользователя.СообщенийПоКатегориям["ВходящееПисьмо"];
Если НЕ ЗначениеЗаполнено(Писем) Тогда
Писем = 0;
КонецЕсли;
ДокументовРеализацииПолномочий = СвойстваПользователя.СообщенийПоКатегориям["ДокументРеализацииПолномочий"];
Если НЕ ЗначениеЗаполнено(ДокументовРеализацииПолномочий) Тогда
ДокументовРеализацииПолномочий = 0;
КонецЕсли;
Квитанций = СвойстваПользователя.СообщенийПоКатегориям["Другое"];
Если НЕ ЗначениеЗаполнено(Квитанций) Тогда
Квитанций = 0;
КонецЕсли;
СообщенийСТребованиямиУведомлениями = ?(СвойстваПользователя.Свойство("СообщенийСТребованиямиУведомлениями"),
СвойстваПользователя.СообщенийСТребованиямиУведомлениями,
СвойстваПользователя.Требований + СвойстваПользователя.Уведомлений);
Если СообщенийСТребованиямиУведомлениями < ДокументовРеализацииПолномочий Тогда
Писем = Писем + ДокументовРеализацииПолномочий - СообщенийСТребованиямиУведомлениями;
КонецЕсли;
МассивСообщений = Новый Массив;
Если СвойстваПользователя.Требований > 0 Тогда
МассивСообщений.Добавить(НСтр("ru = 'требования'"));
КонецЕсли;
Если СвойстваПользователя.Уведомлений > 0 Тогда
МассивСообщений.Добавить(НСтр("ru = 'уведомления'"));
КонецЕсли;
Если Протоколов > 0 Тогда
МассивСообщений.Добавить(НСтр("ru = 'протоколы'"));
КонецЕсли;
Если Писем > 0 Тогда
МассивСообщений.Добавить(НСтр("ru = 'письма'"));
КонецЕсли;
Если Квитанций > 0 Тогда
МассивСообщений.Добавить(НСтр("ru = 'квитанции'"));
КонецЕсли;
ТипыСообщений = СтрСоединить(МассивСообщений, ", ");
Если ЗначениеЗаполнено(ТипыСообщений) Тогда
ПервыйСимвол = Лев(ТипыСообщений, 1);
ТипыСообщений = ВРег(ПервыйСимвол) + Сред(ТипыСообщений, 2);
КонецЕсли;
НоваяСтрока.ТипыСообщений = ТипыСообщений;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьФормуИНачатьРасшифровку()
ДополнительныеПараметры = РезультатВыбораПользователя();
Закрыть(ДополнительныеПараметры);
КонецПроцедуры
&НаКлиенте
Функция РезультатВыбораПользователя()
ИтогиПоСообщениям = Новый Массив;
Для Каждого СтрокаТаблицы Из ТаблицаРасшифровкиПоОрганизациям Цикл
НоваяСтрока = Новый Структура("Организация, КоличествоСообщений, Сообщения");
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы);
ИтогиПоСообщениям.Добавить(НоваяСтрока);
КонецЦикла;
Результат = КонтекстЭДОКлиент.СобратьСообщенияДляРасшифровкиНаКлиенте(ИтогиПоСообщениям, ПараметрыПоказа);
Возврат Результат;
КонецФункции
&НаСервере
Процедура ОпределитьКоличествоСообщенийКРасшифровке()
КоличествоСообщенийКРасшифровке = ТаблицаРасшифровкиПоОрганизациям.Итог("КоличествоСообщений");
СообщенияСтрокой = ДлительнаяОтправкаКлиентСервер.ЧислоИПредметИсчисления(
КоличествоСообщенийКРасшифровке,
НСтр("ru = 'сообщение'"),
НСтр("ru = 'сообщения'"),
НСтр("ru = 'сообщений'"),
"с");
ДниОжиданияСтрокой = "";
Если НЕ ПараметрыПоказа.ВсеСообщения Тогда
Если ПараметрыПоказа.ДниОжидания >= 62 Тогда
ДниОжиданияСтрокой = НСтр("ru = '2 месяцев'");
ИначеЕсли ПараметрыПоказа.ДниОжидания >= 31 Тогда
ДниОжиданияСтрокой = НСтр("ru = '1 месяца'");
ИначеЕсли ПараметрыПоказа.ДниОжидания >= 21 Тогда
ДниОжиданияСтрокой = НСтр("ru = '3 недель'");
ИначеЕсли ПараметрыПоказа.ДниОжидания >= 14 Тогда
ДниОжиданияСтрокой = НСтр("ru = '2 недель'");
ИначеЕсли ПараметрыПоказа.ДниОжидания >= 7 Тогда
ДниОжиданияСтрокой = НСтр("ru = '1 недели'");
ИначеЕсли ПараметрыПоказа.ДниОжидания >= 6 Тогда
ДниОжиданияСтрокой = НСтр("ru = '6 дней'");
ИначеЕсли ПараметрыПоказа.ДниОжидания >= 5 Тогда
ДниОжиданияСтрокой = НСтр("ru = '5 дней'");
ИначеЕсли ПараметрыПоказа.ДниОжидания >= 4 Тогда
ДниОжиданияСтрокой = НСтр("ru = '4 дней'");
ИначеЕсли ПараметрыПоказа.ДниОжидания >= 3 Тогда
ДниОжиданияСтрокой = НСтр("ru = '3 дней'");
КонецЕсли;
КонецЕсли;
Элементы.ТекстНадписи.Заголовок = СообщенияСтрокой
+ ?(ЗначениеЗаполнено(ДниОжиданияСтрокой), " " + НСтр("ru = 'более'") + " " + ДниОжиданияСтрокой, "")
+ " " + ОбщегоНазначенияЭДКОКлиентСервер.ПростоеСклонение(КоличествоСообщенийКРасшифровке,
НСтр("ru = 'ожидает'"), НСтр("ru = 'ожидают'"), НСтр("ru = 'ожидают'")) + " "
+ НСтр("ru = 'расшифровки другими пользователями.'");
КонецПроцедуры
&НаСервере
Процедура ДополнитьИнформациейПроТребованийИУведомлений()
Требований = ТаблицаРасшифровкиПоОрганизациям.Итог("Требований");
Уведомлений = ТаблицаРасшифровкиПоОрганизациям.Итог("Уведомлений");
Протоколов = ПараметрыПоказа.СообщенийПоКатегориям["Протокол"];
Если НЕ ЗначениеЗаполнено(Протоколов) Тогда
Протоколов = 0;
КонецЕсли;
Писем = ПараметрыПоказа.СообщенийПоКатегориям["ВходящееПисьмо"];
Если НЕ ЗначениеЗаполнено(Писем) Тогда
Писем = 0;
КонецЕсли;
ДокументовРеализацииПолномочий = ПараметрыПоказа.СообщенийПоКатегориям["ДокументРеализацииПолномочий"];
Если НЕ ЗначениеЗаполнено(ДокументовРеализацииПолномочий) Тогда
ДокументовРеализацииПолномочий = 0;
КонецЕсли;
СообщенийСТребованиямиУведомлениями = ?(ПараметрыПоказа.Свойство("СообщенийСТребованиямиУведомлениями"),
ПараметрыПоказа.СообщенийСТребованиямиУведомлениями, Требований + Уведомлений);
Если СообщенийСТребованиямиУведомлениями < ДокументовРеализацииПолномочий Тогда
Писем = Писем + ДокументовРеализацииПолномочий - СообщенийСТребованиямиУведомлениями;
КонецЕсли;
Элементы.ТребованияУведомленияПротоколыИПисьма.Видимость =
Требований > 0 ИЛИ Уведомлений > 0 ИЛИ Протоколов > 0 ИЛИ Писем > 0;
Если Требований = 0 И Уведомлений = 0 И Протоколов = 0 И Писем = 0 Тогда
Возврат;
КонецЕсли;
ШаблонТребований = НСтр("ru = ';%1 требование;;%1 требования;%1 требований;%1 требований'");
ШаблонУведомлений = НСтр("ru = ';%1 уведомление;;%1 уведомления;%1 уведомлений;%1 уведомлений'");
ШаблонПротоколов = НСтр("ru = ';%1 протокол;;%1 протокола;%1 протоколов;%1 протоколов'");
ШаблонПисем = НСтр("ru = ';%1 письмо;;%1 письма;%1 писем;%1 писем'");
Элементы.ТребованияУведомленияПротоколыИПисьма.Заголовок = НСтр("ru = 'Сообщения содержат '")
+ ?(Требований > 0, ДокументооборотСКОКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ШаблонТребований, Требований), "")
+ ?(Уведомлений > 0, ?(Требований > 0, ?(Протоколов + Писем > 0, ", ", НСтр("ru = ' и '")), "")
+ ДокументооборотСКОКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ШаблонУведомлений, Уведомлений), "")
+ ?(Протоколов > 0, ?(Требований + Уведомлений > 0, ?(Писем > 0, ", ", НСтр("ru = ' и '")), "")
+ ДокументооборотСКОКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ШаблонПротоколов, Протоколов), "")
+ ?(Писем > 0, ?(Требований + Уведомлений + Протоколов > 0, НСтр("ru = ' и '"), "")
+ ДокументооборотСКОКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(ШаблонПисем, Писем), "") + ".";
Если Требований > 0 ИЛИ Уведомлений > 0 ИЛИ Протоколов > 0 ИЛИ Писем > 0 Тогда
КлючСохраненияПоложенияОкна = "РасшифровкаТребованияУведомленияПротоколаИПисьма";
Иначе
КлючСохраненияПоложенияОкна = "Расшифровка";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытииЗавершение(Результат, ДополнительныеПараметры) Экспорт
КонтекстЭДОКлиент = Результат.КонтекстЭДО;
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьПозжеПослеПредупреждения(ДополнительныеПараметры) Экспорт
Закрыть(ПараметрыПоказа);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ОтложитьПоказ(НапомнитьЧерез)
ДатаСеанса = ТекущаяДатаСеанса();
Если НапомнитьЧерез = "1" Тогда
ДатаРасшифровкаДляДругихПользователей = ДатаСеанса + 7*24*60*60;
ИначеЕсли НапомнитьЧерез = "2" Тогда
ДатаРасшифровкаДляДругихПользователей = ДатаСеанса + 30*24*60*60;
ИначеЕсли НапомнитьЧерез = "3" Тогда
ДатаРасшифровкаДляДругихПользователей = ДатаСеанса + 3*24*60*60;
ИначеЕсли НапомнитьЧерез = "4" Тогда
ДатаРасшифровкаДляДругихПользователей = ДатаСеанса + 14*24*60*60;
ИначеЕсли НапомнитьЧерез = "-1" Тогда
ДатаРасшифровкаДляДругихПользователей = '39991231';
Иначе
ДатаРасшифровкаДляДругихПользователей = ДатаСеанса + 24*60*60;
КонецЕсли;
ХранилищеОбщихНастроек.Сохранить("ДокументооборотСКонтролирующимиОрганами_ДатаРасшифровкаДляДругихПользователей",,
ДатаРасшифровкаДляДругихПользователей);
КонецПроцедуры
#КонецОбласти