3_1_2_150

This commit is contained in:
Компания 1С committed 2019-09-18 22:50:00 +03:00
1 parent 28f5f6c774
commit ccbf98d8bf
1114 files changed
+74111 -42158

No files matched your search

@@ -544,7 +544,7 @@
// Проверяет изменения реквизитов предметов, на которые есть пользовательская подписка,
// изменяет срок напоминания в случае необходимости.
Процедура ПроверитьИзмененияДатВПредмете(Предмет)
Процедура ОбновитьНапоминанияПоПредметам(Предметы) Экспорт
УстановитьПривилегированныйРежим(Истина);
@@ -565,9 +565,9 @@
| РегистрСведений.НапоминанияПользователя КАК Напоминания
|ГДЕ
| Напоминания.СпособУстановкиВремениНапоминания = ЗНАЧЕНИЕ(Перечисление.СпособыУстановкиВремениНапоминания.ОтносительноВремениПредмета)
| И Напоминания.Источник = &Источник";
| И Напоминания.Источник В(&Предметы)";
Запрос.УстановитьПараметр("Источник", Предмет);
Запрос.УстановитьПараметр("Предметы", Предметы);
ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
@@ -587,6 +587,7 @@
ПодключитьНапоминание(Напоминание);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Обработчик подписки на событие ПриЗаписи объекта, по поводу которого можно создавать напоминания.
@@ -601,7 +602,7 @@
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя") Тогда
ПроверитьИзмененияДатВПредмете(Источник.Ссылка);
ОбновитьНапоминанияПоПредметам(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Источник.Ссылка));
КонецЕсли;
КонецПроцедуры
@@ -613,37 +614,51 @@
НаборЗаписей.Отбор.Пользователь.Установить(ПараметрыНапоминания.Пользователь);
НаборЗаписей.Отбор.Источник.Установить(ПараметрыНапоминания.Источник);
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НапоминанияПользователя");
ЭлементБлокировки.УстановитьЗначение("Пользователь", ПараметрыНапоминания.Пользователь);
ЭлементБлокировки.УстановитьЗначение("Источник", ПараметрыНапоминания.Источник);
Если ОбновитьСрокНапоминания Тогда
НаборЗаписей.Отбор.ВремяСобытия.Установить(ПараметрыНапоминания.ВремяСобытия);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Для Каждого Запись Из НаборЗаписей Цикл
ЗаполнитьЗначенияСвойств(Запись, ПараметрыНапоминания);
КонецЦикла;
Иначе
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() > 0 Тогда
ЗанятоеВремя = НаборЗаписей.Выгрузить(,"ВремяСобытия").ВыгрузитьКолонку("ВремяСобытия");
Пока ЗанятоеВремя.Найти(ПараметрыНапоминания.ВремяСобытия) <> Неопределено Цикл
ПараметрыНапоминания.ВремяСобытия = ПараметрыНапоминания.ВремяСобытия + 1;
КонецЦикла;
КонецЕсли;
НоваяЗапись = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(НоваяЗапись, ПараметрыНапоминания);
ЭлементБлокировки.УстановитьЗначение("ВремяСобытия", ПараметрыНапоминания.ВремяСобытия);
КонецЕсли;
НаборЗаписей.Записать();
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
НаборЗаписей.Прочитать();
Если ОбновитьСрокНапоминания Тогда
Для Каждого Запись Из НаборЗаписей Цикл
ЗаполнитьЗначенияСвойств(Запись, ПараметрыНапоминания);
КонецЦикла;
Иначе
Если НаборЗаписей.Количество() > 0 Тогда
ЗанятоеВремя = НаборЗаписей.Выгрузить(,"ВремяСобытия").ВыгрузитьКолонку("ВремяСобытия");
Пока ЗанятоеВремя.Найти(ПараметрыНапоминания.ВремяСобытия) <> Неопределено Цикл
ПараметрыНапоминания.ВремяСобытия = ПараметрыНапоминания.ВремяСобытия + 1;
КонецЦикла;
КонецЕсли;
НоваяЗапись = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(НоваяЗапись, ПараметрыНапоминания);
КонецЕсли;
Если НаборЗаписей.Количество() > 0 Тогда
НаборЗаписей.Записать();
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
// Отключает напоминание, если оно есть. Если напоминание периодическое, подключает его на ближайшую дату по расписанию.
Процедура ОтключитьНапоминание(ПараметрыНапоминания, ПодключатьПоРасписанию = Истина) Экспорт
// ищем существующую запись
Запрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ
| НапоминанияПользователя.Пользователь КАК Пользователь,
@@ -663,45 +678,59 @@
| И НапоминанияПользователя.ВремяСобытия = &ВремяСобытия
| И НапоминанияПользователя.Источник = &Источник";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Пользователь", ПараметрыНапоминания.Пользователь);
Запрос.УстановитьПараметр("ВремяСобытия", ПараметрыНапоминания.ВремяСобытия);
Запрос.УстановитьПараметр("Источник", ПараметрыНапоминания.Источник);
Запрос.Текст = ТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Напоминание = Неопределено;
Если РезультатЗапроса.Количество() > 0 Тогда
Напоминание = РезультатЗапроса[0];
КонецЕсли;
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НапоминанияПользователя");
ЭлементБлокировки.УстановитьЗначение("Пользователь", ПараметрыНапоминания.Пользователь);
ЭлементБлокировки.УстановитьЗначение("Источник", ПараметрыНапоминания.Источник);
ЭлементБлокировки.УстановитьЗначение("ВремяСобытия", ПараметрыНапоминания.ВремяСобытия);
// Удаляем существующую запись.
НаборЗаписей = РегистрыСведений.НапоминанияПользователя.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Пользователь.Установить(ПараметрыНапоминания.Пользователь);
НаборЗаписей.Отбор.Источник.Установить(ПараметрыНапоминания.Источник);
НаборЗаписей.Отбор.ВремяСобытия.Установить(ПараметрыНапоминания.ВремяСобытия);
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
СледующаяДатаПоРасписанию = Неопределено;
ОпределенаСледующаяДатаПоРасписанию = Ложь;
// Подключаем следующее напоминание по расписанию.
Если ПодключатьПоРасписанию И Напоминание <> Неопределено Тогда
Расписание = Напоминание.Расписание.Получить();
Если Расписание <> Неопределено Тогда
Если Расписание.ПериодПовтораДней > 0 Тогда
СледующаяДатаПоРасписанию = ПолучитьБлижайшуюДатуСобытияПоРасписанию(Расписание, ПараметрыНапоминания.ВремяСобытия + 1);
КонецЕсли;
ОпределенаСледующаяДатаПоРасписанию = СледующаяДатаПоРасписанию <> Неопределено;
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Напоминание = Неопределено;
Если РезультатЗапроса.Количество() > 0 Тогда
Напоминание = РезультатЗапроса[0];
КонецЕсли;
Если ОпределенаСледующаяДатаПоРасписанию Тогда
Напоминание.ВремяСобытия = СледующаяДатаПоРасписанию;
Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания;
ПодключитьНапоминание(Напоминание);
// Удаляем существующую запись.
НаборЗаписей = РегистрыСведений.НапоминанияПользователя.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Пользователь.Установить(ПараметрыНапоминания.Пользователь);
НаборЗаписей.Отбор.Источник.Установить(ПараметрыНапоминания.Источник);
НаборЗаписей.Отбор.ВремяСобытия.Установить(ПараметрыНапоминания.ВремяСобытия);
НаборЗаписей.Записать();
// Подключаем следующее напоминание по расписанию.
СледующаяДатаПоРасписанию = Неопределено;
ОпределенаСледующаяДатаПоРасписанию = Ложь;
Если ПодключатьПоРасписанию И Напоминание <> Неопределено Тогда
Расписание = Напоминание.Расписание.Получить();
Если Расписание <> Неопределено Тогда
Если Расписание.ПериодПовтораДней > 0 Тогда
СледующаяДатаПоРасписанию = ПолучитьБлижайшуюДатуСобытияПоРасписанию(Расписание, ПараметрыНапоминания.ВремяСобытия + 1);
КонецЕсли;
ОпределенаСледующаяДатаПоРасписанию = СледующаяДатаПоРасписанию <> Неопределено;
КонецЕсли;
Если ОпределенаСледующаяДатаПоРасписанию Тогда
Напоминание.ВремяСобытия = СледующаяДатаПоРасписанию;
Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания;
ПодключитьНапоминание(Напоминание);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры