This commit is contained in:
Компания 1С committed 2022-06-15 23:35:00 +03:00
1 parent 514ae42c64
commit 074fce3a4a
155 files changed
+4073 -2508

No files matched your search

@@ -14,16 +14,43 @@
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске.
Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт
Параметры.Вставить("НастройкиНапоминаний",
Новый ФиксированнаяСтруктура("ИспользоватьНапоминания", ПолучитьНастройкиНапоминаний().ИспользоватьНапоминания));
ИспользоватьНапоминания = ПолучитьНастройкиНапоминаний().ИспользоватьНапоминания;
СписокТекущихНапоминаний = ?(ИспользоватьНапоминания,
СписокТекущихНапоминанийПользователя(), Новый Массив);
Результат = Новый Структура;
Результат.Вставить("ИспользоватьНапоминания", ИспользоватьНапоминания);
Результат.Вставить("СписокТекущихНапоминаний", СписокТекущихНапоминаний);
Параметры.Вставить("НастройкиНапоминаний", Новый ФиксированнаяСтруктура(Результат));
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента.
Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииСерверныхОповещений
Процедура ПриДобавленииСерверныхОповещений(Оповещения) Экспорт
Параметры.Вставить("НастройкиНапоминаний",
Новый ФиксированнаяСтруктура(ПолучитьНастройкиНапоминаний()));
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя") Тогда
Возврат;
КонецЕсли;
Оповещение = СерверныеОповещения.НовоеСерверноеОповещение(
НапоминанияПользователяКлиентСервер.ИмяСерверногоОповещения());
Оповещение.ИмяМодуляОтправки = "НапоминанияПользователяСлужебный";
Оповещение.ИмяМодуляПолучения = "НапоминанияПользователяКлиент";
Оповещения.Вставить(Оповещение.Имя, Оповещение);
КонецПроцедуры
// См. СтандартныеПодсистемыСервер.ПриОтправкеСерверногоОповещения
Процедура ПриОтправкеСерверногоОповещения(ИмяОповещения, ВариантыПараметров) Экспорт
// Добавление оповещений выполняется при записи регистра сведений НапоминанияПользователя.
// Периодическое оповещение требуется для гарантии доставки добавленных оповещений и
// для актуализации списка напоминаний всех пользователей.
АктуализироватьСписокНапоминаний(Ложь);
КонецПроцедуры
@@ -155,8 +182,9 @@
Функция ПолучитьНастройкиНапоминаний()
Результат = Новый Структура;
Результат.Вставить("ИспользоватьНапоминания", ЕстьПравоИспользованияНапоминаний() И ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя"));
Результат.Вставить("ИнтервалПроверкиНапоминаний", ПолучитьИнтервалПроверкиНапоминаний());
Результат.Вставить("ИспользоватьНапоминания",
ЕстьПравоИспользованияНапоминаний()
И ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя"));
Возврат Результат;
@@ -527,32 +555,6 @@
КонецФункции
// Возвращает интервал времени в минутах, через который необходимо повторять проверку текущих напоминаний.
Функция ПолучитьИнтервалПроверкиНапоминаний(Пользователь = Неопределено)
Интервал = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиНапоминаний",
"ИнтервалПроверкиНапоминаний",
1,
,
ПолучитьИмяПользователяИБ(Пользователь));
Возврат Макс(Интервал, 1);
КонецФункции
Функция ПолучитьИмяПользователяИБ(Пользователь)
Если Не ЗначениеЗаполнено(Пользователь) Тогда
Возврат Неопределено;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь, "ИдентификаторПользователяИБ"));
Если ПользовательИБ = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Возврат ПользовательИБ.Имя;
КонецФункции
// Проверяет изменения реквизитов предметов, на которые есть пользовательская подписка,
// изменяет срок напоминания в случае необходимости.
//
@@ -645,9 +647,12 @@
КонецПроцедуры
// Создает напоминание пользователя. Если по объекту уже есть напоминание, то сдвигает время напоминания на секунды вперед.
Процедура ПодключитьНапоминание(ПараметрыНапоминания, ОбновитьСрокНапоминания = Ложь) Экспорт
Процедура ПодключитьНапоминание(ПараметрыНапоминания, ОбновитьСрокНапоминания = Ложь, БезОповещенияКлиента = Ложь) Экспорт
НаборЗаписей = РегистрыСведений.НапоминанияПользователя.СоздатьНаборЗаписей();
Если БезОповещенияКлиента Тогда
НаборЗаписей.ДополнительныеСвойства.Вставить("БезОповещенияКлиента");
КонецЕсли;
НаборЗаписей.Отбор.Пользователь.Установить(ПараметрыНапоминания.Пользователь);
НаборЗаписей.Отбор.Источник.Установить(ПараметрыНапоминания.Источник);
@@ -694,7 +699,7 @@
КонецПроцедуры
// Отключает напоминание, если оно есть. Если напоминание периодическое, подключает его на ближайшую дату по расписанию.
Процедура ОтключитьНапоминание(ПараметрыНапоминания, ПодключатьПоРасписанию = Истина) Экспорт
Процедура ОтключитьНапоминание(ПараметрыНапоминания, ПодключатьПоРасписанию = Истина, БезОповещенияКлиента = Ложь) Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
@@ -738,6 +743,9 @@
// Удаляем существующую запись.
НаборЗаписей = РегистрыСведений.НапоминанияПользователя.СоздатьНаборЗаписей();
Если БезОповещенияКлиента Тогда
НаборЗаписей.ДополнительныеСвойства.Вставить("БезОповещенияКлиента");
КонецЕсли;
НаборЗаписей.Отбор.Пользователь.Установить(ПараметрыНапоминания.Пользователь);
НаборЗаписей.Отбор.Источник.Установить(ПараметрыНапоминания.Источник);
НаборЗаписей.Отбор.ВремяСобытия.Установить(ПараметрыНапоминания.ВремяСобытия);
@@ -759,7 +767,7 @@
Если ОпределенаСледующаяДатаПоРасписанию Тогда
Напоминание.ВремяСобытия = СледующаяДатаПоРасписанию;
Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания;
ПодключитьНапоминание(Напоминание);
ПодключитьНапоминание(Напоминание, БезОповещенияКлиента);
КонецЕсли;
КонецЕсли;
@@ -874,8 +882,19 @@
КонецФункции
// Возвращаемое значение:
// Структура:
// * Добавленные - см. СписокТекущихНапоминанийПользователя
// * Удаленные - см. СписокТекущихНапоминанийПользователя
//
Функция НовыеИзмененныеНапоминания() Экспорт
Возврат Новый Структура("Добавленные, Удаленные", Новый Массив, Новый Массив);
КонецФункции
// Прекращает просроченные периодические напоминания.
Процедура АктуализироватьСписокНапоминаний()
Процедура АктуализироватьСписокНапоминаний(ПриЗапуске)
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
@@ -894,12 +913,18 @@
| РегистрСведений.НапоминанияПользователя КАК Напоминания
|ГДЕ
| Напоминания.ВремяСобытия <= &ТекущаяДата
| И Напоминания.Пользователь = &Пользователь";
| И &ОтборПоПользователю";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь());
Если ПриЗапуске Тогда
Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь());
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоПользователю",
"Напоминания.Пользователь = &Пользователь");
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоПользователю", "ИСТИНА");
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
СписокНапоминаний = Запрос.Выполнить().Выгрузить();
@@ -925,7 +950,7 @@
НачатьТранзакцию();
Попытка
Если ПодошедшееВремяСобытия.Количество() > 0 Тогда
ОтключитьНапоминание(Напоминание, Ложь);
ОтключитьНапоминание(Напоминание, Ложь, ПриЗапуске);
ПараметрыНапоминания = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Напоминание);
ПараметрыНапоминания.Расписание = Напоминание.Расписание.Получить();
@@ -933,9 +958,9 @@
Напоминание.ВремяСобытия = ПодошедшееВремяСобытия[ПодошедшееВремяСобытия.ВГраница()];
Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания;
ПодключитьНапоминание(Напоминание);
ПодключитьНапоминание(Напоминание,, ПриЗапуске);
КонецЕсли;
ОтключитьНапоминание(Напоминание, Истина);
ОтключитьНапоминание(Напоминание, Истина, ПриЗапуске);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
@@ -947,6 +972,10 @@
КонецПроцедуры
// Выполняет запрос по напоминаниям для текущего пользователя на 30 минут вперед от текущего времени.
// Момент времени смещен от текущего для того, чтобы данные были актуальны в течение жизни кэша.
// При обработке результата выполнения функции необходимо учитывать эту особенность.
//
// Возвращаемое значение:
// Массив из Структура:
// * Пользователь - СправочникСсылка.Пользователи
@@ -958,7 +987,7 @@
//
Функция СписокТекущихНапоминанийПользователя() Экспорт
АктуализироватьСписокНапоминаний();
АктуализироватьСписокНапоминаний(Истина);
Запрос = Новый Запрос;
Запрос.Текст =
@@ -972,13 +1001,15 @@
|ИЗ
| РегистрСведений.НапоминанияПользователя КАК Напоминания
|ГДЕ
| Напоминания.СрокНапоминания <= &ТекущаяДата
| Напоминания.СрокНапоминания <= &ГраницаСрокаНапоминания
| И Напоминания.Пользователь = &Пользователь
|
|УПОРЯДОЧИТЬ ПО
| ВремяСобытия";
Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса() + 30*60);// +30 минут для кэша
Запрос.УстановитьПараметр("ГраницаСрокаНапоминания",
ТекущаяДатаСеанса() + ЗапасВремениНапоминанийДляКэша());
Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь());
УстановитьПривилегированныйРежим(Истина);
@@ -988,4 +1019,10 @@
КонецФункции
Функция ЗапасВремениНапоминанийДляКэша() Экспорт
Возврат 30*60;
КонецФункции
#КонецОбласти